<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,10 +1,10 @@
 planned for after 1.0
+- accurate nav slider after new moves played (base on nextSibling)
 - copy/paste ascii diagrams (http://www.dse.nl/~toni/go/ascii2sgf/index_uk.htm)
 - edit game info
 - show more search results
 - tree navigation
 - multiple games per sgf
-- accurate nav slider after new moves played
 - make failed game load non-fatal
 - show continuations for pattern search
 - game archive browsing/searching</diff>
      <filename>doc/todo.txt</filename>
    </modified>
    <modified>
      <diff>@@ -10,6 +10,7 @@
     };
     &lt;/script&gt;
     
+    &lt;script type=&quot;text/javascript&quot; src=&quot;player/js/swfobject.js&quot;&gt;&lt;/script&gt;
     &lt;script type=&quot;text/javascript&quot; src=&quot;player/js/all.compressed.js&quot;&gt;&lt;/script&gt;
     
 &lt;/head&gt;</diff>
      <filename>example_flash.html</filename>
    </modified>
    <modified>
      <diff>@@ -18,8 +18,7 @@ eidogoConfig = {skipCss: true};
 
 &lt;script type=&quot;text/javascript&quot; src=&quot;player/js/all.compressed.js&quot;&gt;&lt;/script&gt;
 
-&lt;!-- &lt;script type=&quot;text/javascript&quot; src=&quot;player/js/swfobject.js&quot;&gt;&lt;/script&gt;
-&lt;script type=&quot;text/javascript&quot; src=&quot;player/js/lang.js&quot;&gt;&lt;/script&gt;
+&lt;!-- &lt;script type=&quot;text/javascript&quot; src=&quot;player/js/lang.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;player/js/eidogo.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;player/js/util.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;player/i18n/en.js&quot;&gt;&lt;/script&gt;
@@ -40,8 +39,8 @@ eidogoConfig = {skipCss: true};
         &lt;h1&gt;&lt;a href='/'&gt;Eido&lt;span&gt;Go&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
 
         &lt;p id=&quot;ownership&quot;&gt;
-            EidoGo is &lt;a href=&quot;source&quot;&gt;Open Source&lt;/a&gt;.
-            &amp;nbsp;Maintained by &lt;script type=&quot;text/javascript&quot;&gt;document.write(&quot;&lt;n uers=\&quot;znvygb:wx\100gva\056ah\&quot;&gt;Whfgva Xenzre&lt;\057n&gt;&quot;.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c&lt;=&quot;Z&quot;?90:122)&gt;=(c=c.charCodeAt(0)+13)?c:c-26);}));&lt;/script&gt;.
+            EidoGo is &lt;a href=&quot;source&quot;&gt;Open Source &amp;mdash; Use it on your website!&lt;/a&gt;
+            &amp;nbsp;Created by &lt;script type=&quot;text/javascript&quot;&gt;document.write(&quot;&lt;n uers=\&quot;znvygb:wx\100gva\056ah\&quot;&gt;Whfgva Xenzre&lt;\057n&gt;&quot;.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c&lt;=&quot;Z&quot;?90:122)&gt;=(c=c.charCodeAt(0)+13)?c:c-26);}));&lt;/script&gt;.
         &lt;/p&gt;
 
         &lt;ul id=&quot;links&quot;&gt;</diff>
      <filename>header.phtml</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,6 @@ RHINOC=&quot;java -jar custom_rhino.jar -c &quot;
 
 rm $OUTFILE
 
-$RHINOC js/swfobject.js &gt;&gt; $OUTFILE 2&gt;&amp;1
 $RHINOC js/lang.js &gt;&gt; $OUTFILE 2&gt;&amp;1
 $RHINOC js/eidogo.js &gt;&gt; $OUTFILE 2&gt;&amp;1
 $RHINOC js/util.js &gt;&gt; $OUTFILE 2&gt;&amp;1</diff>
      <filename>player/compress.sh</filename>
    </modified>
    <modified>
      <diff>@@ -37,6 +37,7 @@ eidogo.i18n = eidogo.i18n || {
     'download sgf':     'Download SGF',
     'next game':        'Next Game',
     'previous game':    'Previous Game',
+    'end of variation': 'End of variation',
 
     'white':            'White',
     'white rank':       'White rank',</diff>
      <filename>player/i18n/en.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,257 +1,3 @@
-if(typeof deconcept==&quot;undefined&quot;){
-var deconcept=new Object();
-}
-if(typeof deconcept.util==&quot;undefined&quot;){
-deconcept.util=new Object();
-}
-if(typeof deconcept.SWFObjectUtil==&quot;undefined&quot;){
-deconcept.SWFObjectUtil=new Object();
-}
-deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){
-if(!document.getElementById){
-return;
-}
-this.DETECT_KEY=_a?_a:&quot;detectflash&quot;;
-this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);
-this.params=new Object();
-this.variables=new Object();
-this.attributes=new Array();
-if(_1){
-this.setAttribute(&quot;swf&quot;,_1);
-}
-if(id){
-this.setAttribute(&quot;id&quot;,id);
-}
-if(w){
-this.setAttribute(&quot;width&quot;,w);
-}
-if(h){
-this.setAttribute(&quot;height&quot;,h);
-}
-if(_5){
-this.setAttribute(&quot;version&quot;,new deconcept.PlayerVersion(_5.toString().split(&quot;.&quot;)));
-}
-this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();
-if(!window.opera&amp;&amp;document.all&amp;&amp;this.installedVer.major&gt;7){
-deconcept.SWFObject.doPrepUnload=true;
-}
-if(c){
-this.addParam(&quot;bgcolor&quot;,c);
-}
-var q=_7?_7:&quot;high&quot;;
-this.addParam(&quot;quality&quot;,q);
-this.setAttribute(&quot;useExpressInstall&quot;,false);
-this.setAttribute(&quot;doExpressInstall&quot;,false);
-var _c=(_8)?_8:window.location;
-this.setAttribute(&quot;xiRedirectUrl&quot;,_c);
-this.setAttribute(&quot;redirectUrl&quot;,&quot;&quot;);
-if(_9){
-this.setAttribute(&quot;redirectUrl&quot;,_9);
-}
-};
-deconcept.SWFObject.prototype={useExpressInstall:function(_d){
-this.xiSWFPath=!_d?&quot;expressinstall.swf&quot;:_d;
-this.setAttribute(&quot;useExpressInstall&quot;,true);
-},setAttribute:function(_e,_f){
-this.attributes[_e]=_f;
-},getAttribute:function(_10){
-return this.attributes[_10];
-},addParam:function(_11,_12){
-this.params[_11]=_12;
-},getParams:function(){
-return this.params;
-},addVariable:function(_13,_14){
-this.variables[_13]=_14;
-},getVariable:function(_15){
-return this.variables[_15];
-},getVariables:function(){
-return this.variables;
-},getVariablePairs:function(){
-var _16=new Array();
-var key;
-var _18=this.getVariables();
-for(key in _18){
-_16[_16.length]=key+&quot;=&quot;+_18[key];
-}
-return _16;
-},getSWFHTML:function(){
-var _19=&quot;&quot;;
-if(navigator.plugins&amp;&amp;navigator.mimeTypes&amp;&amp;navigator.mimeTypes.length){
-if(this.getAttribute(&quot;doExpressInstall&quot;)){
-this.addVariable(&quot;MMplayerType&quot;,&quot;PlugIn&quot;);
-this.setAttribute(&quot;swf&quot;,this.xiSWFPath);
-}
-_19=&quot;&lt;embed type=\&quot;application/x-shockwave-flash\&quot; src=\&quot;&quot;+this.getAttribute(&quot;swf&quot;)+&quot;\&quot; width=\&quot;&quot;+this.getAttribute(&quot;width&quot;)+&quot;\&quot; height=\&quot;&quot;+this.getAttribute(&quot;height&quot;)+&quot;\&quot; style=\&quot;&quot;+this.getAttribute(&quot;style&quot;)+&quot;\&quot;&quot;;
-_19+=&quot; id=\&quot;&quot;+this.getAttribute(&quot;id&quot;)+&quot;\&quot; name=\&quot;&quot;+this.getAttribute(&quot;id&quot;)+&quot;\&quot; &quot;;
-var _1a=this.getParams();
-for(var key in _1a){
-_19+=[key]+&quot;=\&quot;&quot;+_1a[key]+&quot;\&quot; &quot;;
-}
-var _1c=this.getVariablePairs().join(&quot;&amp;&quot;);
-if(_1c.length&gt;0){
-_19+=&quot;flashvars=\&quot;&quot;+_1c+&quot;\&quot;&quot;;
-}
-_19+=&quot;/&gt;&quot;;
-}else{
-if(this.getAttribute(&quot;doExpressInstall&quot;)){
-this.addVariable(&quot;MMplayerType&quot;,&quot;ActiveX&quot;);
-this.setAttribute(&quot;swf&quot;,this.xiSWFPath);
-}
-_19=&quot;&lt;object id=\&quot;&quot;+this.getAttribute(&quot;id&quot;)+&quot;\&quot; classid=\&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\&quot; width=\&quot;&quot;+this.getAttribute(&quot;width&quot;)+&quot;\&quot; height=\&quot;&quot;+this.getAttribute(&quot;height&quot;)+&quot;\&quot; style=\&quot;&quot;+this.getAttribute(&quot;style&quot;)+&quot;\&quot;&gt;&quot;;
-_19+=&quot;&lt;param name=\&quot;movie\&quot; value=\&quot;&quot;+this.getAttribute(&quot;swf&quot;)+&quot;\&quot; /&gt;&quot;;
-var _1d=this.getParams();
-for(var key in _1d){
-_19+=&quot;&lt;param name=\&quot;&quot;+key+&quot;\&quot; value=\&quot;&quot;+_1d[key]+&quot;\&quot; /&gt;&quot;;
-}
-var _1f=this.getVariablePairs().join(&quot;&amp;&quot;);
-if(_1f.length&gt;0){
-_19+=&quot;&lt;param name=\&quot;flashvars\&quot; value=\&quot;&quot;+_1f+&quot;\&quot; /&gt;&quot;;
-}
-_19+=&quot;&lt;/object&gt;&quot;;
-}
-return _19;
-},write:function(_20){
-if(this.getAttribute(&quot;useExpressInstall&quot;)){
-var _21=new deconcept.PlayerVersion([6,0,65]);
-if(this.installedVer.versionIsValid(_21)&amp;&amp;!this.installedVer.versionIsValid(this.getAttribute(&quot;version&quot;))){
-this.setAttribute(&quot;doExpressInstall&quot;,true);
-this.addVariable(&quot;MMredirectURL&quot;,escape(this.getAttribute(&quot;xiRedirectUrl&quot;)));
-document.title=document.title.slice(0,47)+&quot; - Flash Player Installation&quot;;
-this.addVariable(&quot;MMdoctitle&quot;,document.title);
-}
-}
-if(this.skipDetect||this.getAttribute(&quot;doExpressInstall&quot;)||this.installedVer.versionIsValid(this.getAttribute(&quot;version&quot;))){
-var n=(typeof _20==&quot;string&quot;)?document.getElementById(_20):_20;
-n.innerHTML=this.getSWFHTML();
-return true;
-}else{
-if(this.getAttribute(&quot;redirectUrl&quot;)!=&quot;&quot;){
-document.location.replace(this.getAttribute(&quot;redirectUrl&quot;));
-}
-}
-return false;
-}};
-deconcept.SWFObjectUtil.getPlayerVersion=function(){
-var _23=new deconcept.PlayerVersion([0,0,0]);
-if(navigator.plugins&amp;&amp;navigator.mimeTypes.length){
-var x=navigator.plugins[&quot;Shockwave Flash&quot;];
-if(x&amp;&amp;x.description){
-_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,&quot;&quot;).replace(/(\s+r|\s+b[0-9]+)/,&quot;.&quot;).split(&quot;.&quot;));
-}
-}else{
-if(navigator.userAgent&amp;&amp;navigator.userAgent.indexOf(&quot;Windows CE&quot;)&gt;=0){
-var axo=1;
-var _26=3;
-while(axo){
-try{
-_26++;
-axo=new ActiveXObject(&quot;ShockwaveFlash.ShockwaveFlash.&quot;+_26);
-_23=new deconcept.PlayerVersion([_26,0,0]);
-}
-catch(e){
-axo=null;
-}
-}
-}else{
-try{
-var axo=new ActiveXObject(&quot;ShockwaveFlash.ShockwaveFlash.7&quot;);
-}
-catch(e){
-try{
-var axo=new ActiveXObject(&quot;ShockwaveFlash.ShockwaveFlash.6&quot;);
-_23=new deconcept.PlayerVersion([6,0,21]);
-axo.AllowScriptAccess=&quot;always&quot;;
-}
-catch(e){
-if(_23.major==6){
-return _23;
-}
-}
-try{
-axo=new ActiveXObject(&quot;ShockwaveFlash.ShockwaveFlash&quot;);
-}
-catch(e){
-}
-}
-if(axo!=null){
-_23=new deconcept.PlayerVersion(axo.GetVariable(&quot;$version&quot;).split(&quot; &quot;)[1].split(&quot;,&quot;));
-}
-}
-}
-return _23;
-};
-deconcept.PlayerVersion=function(_29){
-this.major=_29[0]!=null?parseInt(_29[0]):0;
-this.minor=_29[1]!=null?parseInt(_29[1]):0;
-this.rev=_29[2]!=null?parseInt(_29[2]):0;
-};
-deconcept.PlayerVersion.prototype.versionIsValid=function(fv){
-if(this.major&lt;fv.major){
-return false;
-}
-if(this.major&gt;fv.major){
-return true;
-}
-if(this.minor&lt;fv.minor){
-return false;
-}
-if(this.minor&gt;fv.minor){
-return true;
-}
-if(this.rev&lt;fv.rev){
-return false;
-}
-return true;
-};
-deconcept.util={getRequestParameter:function(_2b){
-var q=document.location.search||document.location.hash;
-if(_2b==null){
-return q;
-}
-if(q){
-var _2d=q.substring(1).split(&quot;&amp;&quot;);
-for(var i=0;i&lt;_2d.length;i++){
-if(_2d[i].substring(0,_2d[i].indexOf(&quot;=&quot;))==_2b){
-return _2d[i].substring((_2d[i].indexOf(&quot;=&quot;)+1));
-}
-}
-}
-return &quot;&quot;;
-}};
-deconcept.SWFObjectUtil.cleanupSWFs=function(){
-var _2f=document.getElementsByTagName(&quot;OBJECT&quot;);
-for(var i=_2f.length-1;i&gt;=0;i--){
-_2f[i].style.display=&quot;none&quot;;
-for(var x in _2f[i]){
-if(typeof _2f[i][x]==&quot;function&quot;){
-_2f[i][x]=function(){
-};
-}
-}
-}
-};
-if(deconcept.SWFObject.doPrepUnload){
-if(!deconcept.unloadSet){
-deconcept.SWFObjectUtil.prepUnload=function(){
-__flash_unloadHandler=function(){
-};
-__flash_savedUnloadHandler=function(){
-};
-window.attachEvent(&quot;onunload&quot;,deconcept.SWFObjectUtil.cleanupSWFs);
-};
-window.attachEvent(&quot;onbeforeunload&quot;,deconcept.SWFObjectUtil.prepUnload);
-deconcept.unloadSet=true;
-}
-}
-if(!document.getElementById&amp;&amp;document.all){
-document.getElementById=function(id){
-return document.all[id];
-};
-}
-var getQueryParamValue=deconcept.util.getRequestParameter;
-var FlashObject=deconcept.SWFObject;
-var SWFObject=deconcept.SWFObject;
-
 Array.prototype.contains=function(_1){
 for(var i in this){
 if(this[i]==_1){
@@ -623,7 +369,7 @@ return _4c;
 })();
 
 eidogo=window.eidogo||{};
-eidogo.i18n=eidogo.i18n||{&quot;move&quot;:&quot;Move&quot;,&quot;loading&quot;:&quot;Loading&quot;,&quot;passed&quot;:&quot;passed&quot;,&quot;resigned&quot;:&quot;resigned&quot;,&quot;variations&quot;:&quot;Variations&quot;,&quot;no variations&quot;:&quot;none&quot;,&quot;tool&quot;:&quot;Tool&quot;,&quot;play&quot;:&quot;Play&quot;,&quot;region&quot;:&quot;Select Region&quot;,&quot;add_b&quot;:&quot;Black Stone&quot;,&quot;add_w&quot;:&quot;White Stone&quot;,&quot;edit comment&quot;:&quot;Edit Comment&quot;,&quot;done&quot;:&quot;Done&quot;,&quot;triangle&quot;:&quot;Triangle&quot;,&quot;square&quot;:&quot;Square&quot;,&quot;circle&quot;:&quot;Circle&quot;,&quot;x&quot;:&quot;X&quot;,&quot;letter&quot;:&quot;Letter&quot;,&quot;number&quot;:&quot;Number&quot;,&quot;dim&quot;:&quot;Dim&quot;,&quot;score&quot;:&quot;Score&quot;,&quot;score est&quot;:&quot;Score Estimate&quot;,&quot;search&quot;:&quot;Search&quot;,&quot;search corner&quot;:&quot;Corner Search&quot;,&quot;search center&quot;:&quot;Center Search&quot;,&quot;region info&quot;:&quot;Click and drag to select a region.&quot;,&quot;two stones&quot;:&quot;Please select at least two stones to search for.&quot;,&quot;two edges&quot;:&quot;For corner searches, your selection must touch two adjacent edges of the board.&quot;,&quot;no search url&quot;:&quot;No search URL provided.&quot;,&quot;close search&quot;:&quot;close search&quot;,&quot;matches found&quot;:&quot;matches found.&quot;,&quot;save to server&quot;:&quot;Save to Server&quot;,&quot;download sgf&quot;:&quot;Download SGF&quot;,&quot;next game&quot;:&quot;Next Game&quot;,&quot;previous game&quot;:&quot;Previous Game&quot;,&quot;white&quot;:&quot;White&quot;,&quot;white rank&quot;:&quot;White rank&quot;,&quot;white team&quot;:&quot;White team&quot;,&quot;black&quot;:&quot;Black&quot;,&quot;black rank&quot;:&quot;Black rank&quot;,&quot;black team&quot;:&quot;Black team&quot;,&quot;captures&quot;:&quot;captures&quot;,&quot;time left&quot;:&quot;time left&quot;,&quot;you&quot;:&quot;You&quot;,&quot;game&quot;:&quot;Game&quot;,&quot;handicap&quot;:&quot;Handicap&quot;,&quot;komi&quot;:&quot;Komi&quot;,&quot;result&quot;:&quot;Result&quot;,&quot;date&quot;:&quot;Date&quot;,&quot;info&quot;:&quot;Info&quot;,&quot;place&quot;:&quot;Place&quot;,&quot;event&quot;:&quot;Event&quot;,&quot;round&quot;:&quot;Round&quot;,&quot;overtime&quot;:&quot;Overtime&quot;,&quot;opening&quot;:&quot;Openning&quot;,&quot;ruleset&quot;:&quot;Ruleset&quot;,&quot;annotator&quot;:&quot;Annotator&quot;,&quot;copyright&quot;:&quot;Copyright&quot;,&quot;source&quot;:&quot;Source&quot;,&quot;time limit&quot;:&quot;Time limit&quot;,&quot;transcriber&quot;:&quot;Transcriber&quot;,&quot;created with&quot;:&quot;Created with&quot;,&quot;january&quot;:&quot;January&quot;,&quot;february&quot;:&quot;February&quot;,&quot;march&quot;:&quot;March&quot;,&quot;april&quot;:&quot;April&quot;,&quot;may&quot;:&quot;May&quot;,&quot;june&quot;:&quot;June&quot;,&quot;july&quot;:&quot;July&quot;,&quot;august&quot;:&quot;August&quot;,&quot;september&quot;:&quot;September&quot;,&quot;october&quot;:&quot;October&quot;,&quot;november&quot;:&quot;November&quot;,&quot;december&quot;:&quot;December&quot;,&quot;gw&quot;:&quot;Good for White&quot;,&quot;vgw&quot;:&quot;Very good for White&quot;,&quot;gb&quot;:&quot;Good for Black&quot;,&quot;vgb&quot;:&quot;Very good for Black&quot;,&quot;dm&quot;:&quot;Even position&quot;,&quot;dmj&quot;:&quot;Even position (joseki)&quot;,&quot;uc&quot;:&quot;Unclear position&quot;,&quot;te&quot;:&quot;Tesuji&quot;,&quot;bm&quot;:&quot;Bad move&quot;,&quot;vbm&quot;:&quot;Very bad move&quot;,&quot;do&quot;:&quot;Doubtful move&quot;,&quot;it&quot;:&quot;Interesting move&quot;,&quot;black to play&quot;:&quot;Black to play&quot;,&quot;white to play&quot;:&quot;White to play&quot;,&quot;ho&quot;:&quot;Hotspot&quot;,&quot;dom error&quot;:&quot;Error finding DOM container&quot;,&quot;error retrieving&quot;:&quot;There was a problem retrieving the game data.&quot;,&quot;invalid data&quot;:&quot;Received invalid game data&quot;,&quot;error board&quot;:&quot;Error loading board container&quot;,&quot;unsaved changes&quot;:&quot;There are unsaved changes in this game. You must save before you can permalink or download.&quot;,&quot;bad path&quot;:&quot;Don't know how to get to path: &quot;,&quot;gnugo thinking&quot;:&quot;GNU Go is thinking...&quot;};
+eidogo.i18n=eidogo.i18n||{&quot;move&quot;:&quot;Move&quot;,&quot;loading&quot;:&quot;Loading&quot;,&quot;passed&quot;:&quot;passed&quot;,&quot;resigned&quot;:&quot;resigned&quot;,&quot;variations&quot;:&quot;Variations&quot;,&quot;no variations&quot;:&quot;none&quot;,&quot;tool&quot;:&quot;Tool&quot;,&quot;play&quot;:&quot;Play&quot;,&quot;region&quot;:&quot;Select Region&quot;,&quot;add_b&quot;:&quot;Black Stone&quot;,&quot;add_w&quot;:&quot;White Stone&quot;,&quot;edit comment&quot;:&quot;Edit Comment&quot;,&quot;done&quot;:&quot;Done&quot;,&quot;triangle&quot;:&quot;Triangle&quot;,&quot;square&quot;:&quot;Square&quot;,&quot;circle&quot;:&quot;Circle&quot;,&quot;x&quot;:&quot;X&quot;,&quot;letter&quot;:&quot;Letter&quot;,&quot;number&quot;:&quot;Number&quot;,&quot;dim&quot;:&quot;Dim&quot;,&quot;score&quot;:&quot;Score&quot;,&quot;score est&quot;:&quot;Score Estimate&quot;,&quot;search&quot;:&quot;Search&quot;,&quot;search corner&quot;:&quot;Corner Search&quot;,&quot;search center&quot;:&quot;Center Search&quot;,&quot;region info&quot;:&quot;Click and drag to select a region.&quot;,&quot;two stones&quot;:&quot;Please select at least two stones to search for.&quot;,&quot;two edges&quot;:&quot;For corner searches, your selection must touch two adjacent edges of the board.&quot;,&quot;no search url&quot;:&quot;No search URL provided.&quot;,&quot;close search&quot;:&quot;close search&quot;,&quot;matches found&quot;:&quot;matches found.&quot;,&quot;save to server&quot;:&quot;Save to Server&quot;,&quot;download sgf&quot;:&quot;Download SGF&quot;,&quot;next game&quot;:&quot;Next Game&quot;,&quot;previous game&quot;:&quot;Previous Game&quot;,&quot;end of variation&quot;:&quot;End of variation&quot;,&quot;white&quot;:&quot;White&quot;,&quot;white rank&quot;:&quot;White rank&quot;,&quot;white team&quot;:&quot;White team&quot;,&quot;black&quot;:&quot;Black&quot;,&quot;black rank&quot;:&quot;Black rank&quot;,&quot;black team&quot;:&quot;Black team&quot;,&quot;captures&quot;:&quot;captures&quot;,&quot;time left&quot;:&quot;time left&quot;,&quot;you&quot;:&quot;You&quot;,&quot;game&quot;:&quot;Game&quot;,&quot;handicap&quot;:&quot;Handicap&quot;,&quot;komi&quot;:&quot;Komi&quot;,&quot;result&quot;:&quot;Result&quot;,&quot;date&quot;:&quot;Date&quot;,&quot;info&quot;:&quot;Info&quot;,&quot;place&quot;:&quot;Place&quot;,&quot;event&quot;:&quot;Event&quot;,&quot;round&quot;:&quot;Round&quot;,&quot;overtime&quot;:&quot;Overtime&quot;,&quot;opening&quot;:&quot;Openning&quot;,&quot;ruleset&quot;:&quot;Ruleset&quot;,&quot;annotator&quot;:&quot;Annotator&quot;,&quot;copyright&quot;:&quot;Copyright&quot;,&quot;source&quot;:&quot;Source&quot;,&quot;time limit&quot;:&quot;Time limit&quot;,&quot;transcriber&quot;:&quot;Transcriber&quot;,&quot;created with&quot;:&quot;Created with&quot;,&quot;january&quot;:&quot;January&quot;,&quot;february&quot;:&quot;February&quot;,&quot;march&quot;:&quot;March&quot;,&quot;april&quot;:&quot;April&quot;,&quot;may&quot;:&quot;May&quot;,&quot;june&quot;:&quot;June&quot;,&quot;july&quot;:&quot;July&quot;,&quot;august&quot;:&quot;August&quot;,&quot;september&quot;:&quot;September&quot;,&quot;october&quot;:&quot;October&quot;,&quot;november&quot;:&quot;November&quot;,&quot;december&quot;:&quot;December&quot;,&quot;gw&quot;:&quot;Good for White&quot;,&quot;vgw&quot;:&quot;Very good for White&quot;,&quot;gb&quot;:&quot;Good for Black&quot;,&quot;vgb&quot;:&quot;Very good for Black&quot;,&quot;dm&quot;:&quot;Even position&quot;,&quot;dmj&quot;:&quot;Even position (joseki)&quot;,&quot;uc&quot;:&quot;Unclear position&quot;,&quot;te&quot;:&quot;Tesuji&quot;,&quot;bm&quot;:&quot;Bad move&quot;,&quot;vbm&quot;:&quot;Very bad move&quot;,&quot;do&quot;:&quot;Doubtful move&quot;,&quot;it&quot;:&quot;Interesting move&quot;,&quot;black to play&quot;:&quot;Black to play&quot;,&quot;white to play&quot;:&quot;White to play&quot;,&quot;ho&quot;:&quot;Hotspot&quot;,&quot;dom error&quot;:&quot;Error finding DOM container&quot;,&quot;error retrieving&quot;:&quot;There was a problem retrieving the game data.&quot;,&quot;invalid data&quot;:&quot;Received invalid game data&quot;,&quot;error board&quot;:&quot;Error loading board container&quot;,&quot;unsaved changes&quot;:&quot;There are unsaved changes in this game. You must save before you can permalink or download.&quot;,&quot;bad path&quot;:&quot;Don't know how to get to path: &quot;,&quot;gnugo thinking&quot;:&quot;GNU Go is thinking...&quot;};
 
 eidogo.gameTreeIdCounter=15000;
 eidogo.gameNodeIdCounter=15000;
@@ -1622,21 +1368,21 @@ var l=null,t=null,r=null,b=null;
 var _27={};
 var me=this;
 var _29=function(_2a){
-var i,j,_2d,_2e,len=_2a.nodes.length;
+var i,j,_2d,_2e,_2f,len=_2a.nodes.length;
 for(i=0;i&lt;len;i++){
-for(prop in _2a.nodes[i]){
-if(/^(W|B|AW|AB|LB)$/.test(prop)){
-_2e=_2a.nodes[i][prop];
-if(!(_2e instanceof Array)){
-_2e=[_2e];
+for(_2d in _2a.nodes[i]){
+if(/^(W|B|AW|AB|LB)$/.test(_2d)){
+_2f=_2a.nodes[i][_2d];
+if(!(_2f instanceof Array)){
+_2f=[_2f];
 }
-if(prop!=&quot;LB&quot;){
-_2e=me.expandCompressedPoints(_2e);
+if(_2d!=&quot;LB&quot;){
+_2f=me.expandCompressedPoints(_2f);
 }else{
-_2e=[_2e[0].split(/:/)[0]];
+_2f=[_2f[0].split(/:/)[0]];
 }
-for(j=0;j&lt;_2e.length;j++){
-_27[_2e[j]]=&quot;&quot;;
+for(j=0;j&lt;_2f.length;j++){
+_27[_2f[j]]=&quot;&quot;;
 }
 }
 }
@@ -1667,38 +1413,38 @@ this.cropParams.height=b-t+1;
 this.cropParams.left=l;
 this.cropParams.top=t;
 var pad=this.cropParams.padding;
-for(var _33=pad;l-_33&lt;0;_33--){
-}
-if(_33){
-this.cropParams.width+=_33;
-this.cropParams.left-=_33;
-}
-for(var _34=pad;t-_34&lt;0;_34--){
+for(var _34=pad;l-_34&lt;0;_34--){
 }
 if(_34){
-this.cropParams.height+=_34;
-this.cropParams.top-=_34;
+this.cropParams.width+=_34;
+this.cropParams.left-=_34;
 }
-for(var _35=pad;r+_35&gt;_23;_35--){
+for(var _35=pad;t-_35&lt;0;_35--){
 }
 if(_35){
-this.cropParams.width+=_35;
+this.cropParams.height+=_35;
+this.cropParams.top-=_35;
 }
-for(var _36=pad;b+_36&gt;_23;_36--){
+for(var _36=pad;r+_36&gt;_23;_36--){
 }
 if(_36){
-this.cropParams.height+=_36;
+this.cropParams.width+=_36;
 }
-},load:function(_37,_38){
-if(!_38){
-_38=new eidogo.GameTree();
-this.gameTree=_38;
+for(var _37=pad;b+_37&gt;_23;_37--){
 }
-_38.loadJson(_37);
-_38.cached=true;
+if(_37){
+this.cropParams.height+=_37;
+}
+},load:function(_38,_39){
+if(!_39){
+_39=new eidogo.GameTree();
+this.gameTree=_39;
+}
+_39.loadJson(_38);
+_39.cached=true;
 this.doneLoading();
-if(!_38.parent){
-this.initGame(_38);
+if(!_39.parent){
+this.initGame(_39);
 }else{
 this.progressiveLoads--;
 }
@@ -1710,126 +1456,126 @@ this.loadPath=[0,0];
 }else{
 this.refresh();
 }
-if(!_38.parent&amp;&amp;this.problemMode){
+if(!_39.parent&amp;&amp;this.problemMode){
 this.currentColor=this.problemColor=this.cursor.getNextColor();
 }
-},remoteLoad:function(url,_3a,_3b,_3c,_3d){
-_3b=_3b==&quot;undefined&quot;?true:_3b;
-_3d=(typeof _3d==&quot;function&quot;)?_3d:null;
-if(_3b){
-if(!_3a){
+},remoteLoad:function(url,_3b,_3c,_3d,_3e){
+_3c=_3c==&quot;undefined&quot;?true:_3c;
+_3e=(typeof _3e==&quot;function&quot;)?_3e:null;
+if(_3c){
+if(!_3b){
 this.gameName=url;
 }
 url=this.sgfPath+url+&quot;.sgf&quot;;
 }
-if(_3c){
-this.loadPath=_3c;
+if(_3d){
+this.loadPath=_3d;
 }
-var _3e=function(req){
-var _40=req.responseText;
-var _41=_40.charAt(0);
+var _3f=function(req){
+var _41=req.responseText;
+var _42=_41.charAt(0);
 var i=1;
-while(i&lt;_40.length&amp;&amp;(_41==&quot; &quot;||_41==&quot;\r&quot;||_41==&quot;\n&quot;)){
-_41=_40.charAt(i++);
+while(i&lt;_41.length&amp;&amp;(_42==&quot; &quot;||_42==&quot;\r&quot;||_42==&quot;\n&quot;)){
+_42=_41.charAt(i++);
 }
-if(_41==&quot;(&quot;){
+if(_42==&quot;(&quot;){
 var me=this;
-var sgf=new eidogo.SgfParser(_40,function(){
-me.load(this.tree,_3a);
-_3d&amp;&amp;_3d();
+var sgf=new eidogo.SgfParser(_41,function(){
+me.load(this.tree,_3b);
+_3e&amp;&amp;_3e();
 });
 }else{
-if(_41==&quot;{&quot;){
-_40=eval(&quot;(&quot;+_40+&quot;)&quot;);
-this.load(_40,_3a);
-_3d&amp;&amp;_3d();
+if(_42==&quot;{&quot;){
+_41=eval(&quot;(&quot;+_41+&quot;)&quot;);
+this.load(_41,_3b);
+_3e&amp;&amp;_3e();
 }else{
 this.croak(t[&quot;invalid data&quot;]);
 }
 }
 };
-var _45=function(req){
+var _46=function(req){
 this.croak(t[&quot;error retrieving&quot;]);
 };
-_3(&quot;get&quot;,url,null,_3e,_45,this,30000);
+_3(&quot;get&quot;,url,null,_3f,_46,this,30000);
 },fetchOpponentMove:function(){
 this.nowLoading(t[&quot;gnugo thinking&quot;]);
-var _47=function(req){
+var _48=function(req){
 this.doneLoading();
 this.createMove(req.responseText);
 };
-var _49=function(req){
+var _4a=function(req){
 this.croak(t[&quot;error retrieving&quot;]);
 };
-var _4b={sgf:this.gameTree.trees[0].toSgf(),move:this.currentColor,size:this.gameTree.trees.first().nodes.first().SZ};
-_3(&quot;post&quot;,this.opponentUrl,_4b,_47,_49,this,45000);
+var _4c={sgf:this.gameTree.trees[0].toSgf(),move:this.currentColor,size:this.gameTree.trees.first().nodes.first().SZ};
+_3(&quot;post&quot;,this.opponentUrl,_4c,_48,_4a,this,45000);
 },fetchScoreEstimate:function(){
 this.nowLoading(t[&quot;gnugo thinking&quot;]);
-var _4c=function(req){
+var _4d=function(req){
 this.doneLoading();
-var _4e=req.responseText.split(&quot;\n&quot;);
-var _4f,_50=_4e[1].split(&quot; &quot;);
-for(var i=0;i&lt;_50.length;i++){
-_4f=_50[i].split(&quot;:&quot;);
-if(_4f[1]){
-this.addMarker(_4f[1],_4f[0]);
+var _4f=req.responseText.split(&quot;\n&quot;);
+var _50,_51=_4f[1].split(&quot; &quot;);
+for(var i=0;i&lt;_51.length;i++){
+_50=_51[i].split(&quot;:&quot;);
+if(_50[1]){
+this.addMarker(_50[1],_50[0]);
 }
 }
 this.board.render();
-this.prependComment(_4e[0]);
+this.prependComment(_4f[0]);
 };
-var _52=function(req){
+var _53=function(req){
 this.croak(t[&quot;error retrieving&quot;]);
 };
-var _54=this.gameTree.trees.first().nodes.first();
-var _55={sgf:this.gameTree.trees[0].toSgf(),move:&quot;est&quot;,size:_54.SZ,komi:_54.KM,mn:this.moveNumber+1};
-_3(&quot;post&quot;,this.scoreEstUrl,_55,_4c,_52,this,45000);
-},playProblemResponse:function(_56){
+var _55=this.gameTree.trees.first().nodes.first();
+var _56={sgf:this.gameTree.trees[0].toSgf(),move:&quot;est&quot;,size:_55.SZ,komi:_55.KM,mn:this.moveNumber+1};
+_3(&quot;post&quot;,this.scoreEstUrl,_56,_4d,_53,this,45000);
+},playProblemResponse:function(_57){
 setTimeout(function(){
-this.variation(null,_56);
+this.variation(null,_57);
 if(!this.cursor.hasNext()){
-this.prependComment(&quot;End of variation&quot;);
+this.prependComment(t[&quot;end of variation&quot;]);
 }
 }.bind(this),200);
-},goTo:function(_57,_58){
-_58=typeof _58!=&quot;undefined&quot;?_58:true;
-var _59;
+},goTo:function(_58,_59){
+_59=typeof _59!=&quot;undefined&quot;?_59:true;
 var _5a;
-if(_57 instanceof Array){
-if(!_57.length){
+var _5b;
+if(_58 instanceof Array){
+if(!_58.length){
 return;
 }
-if(_58){
+if(_59){
 this.resetCursor(true);
 }
-while(_57.length){
-_59=_57[0];
-if(isNaN(parseInt(_59,10))){
-_5a=this.getVariations(true);
-if(!_5a.length||_5a[0].move==null){
+while(_58.length){
+_5a=_58[0];
+if(isNaN(parseInt(_5a,10))){
+_5b=this.getVariations(true);
+if(!_5b.length||_5b[0].move==null){
 this.variation(null,true);
 if(this.progressiveLoads){
-this.loadPath.push(_59);
+this.loadPath.push(_5a);
 return;
 }
 }
-for(var i=0;i&lt;_5a.length;i++){
-if(_5a[i].move==_59){
-this.variation(_5a[i].treeNum,true);
+for(var i=0;i&lt;_5b.length;i++){
+if(_5b[i].move==_5a){
+this.variation(_5b[i].treeNum,true);
 break;
 }
 }
-_57.shift();
+_58.shift();
 }else{
-_59=parseInt(_57.shift(),10);
-if(_57.length==0){
-for(var i=0;i&lt;_59;i++){
+_5a=parseInt(_58.shift(),10);
+if(_58.length==0){
+for(var i=0;i&lt;_5a;i++){
 this.variation(null,true);
 }
 }else{
-if(_57.length){
-this.variation(_59,true);
-if(_57.length!=1){
+if(_58.length){
+this.variation(_5a,true);
+if(_58.length!=1){
 while(this.cursor.nextNode()){
 this.execNode(true,true);
 }
@@ -1843,31 +1589,31 @@ return;
 }
 this.refresh();
 }else{
-if(!isNaN(parseInt(_57,10))){
-var _5c=parseInt(_57,10);
-if(_58){
+if(!isNaN(parseInt(_58,10))){
+var _5d=parseInt(_58,10);
+if(_59){
 this.resetCursor(true);
-_5c++;
+_5d++;
 }
-for(var i=0;i&lt;_5c;i++){
+for(var i=0;i&lt;_5d;i++){
 this.variation(null,true);
 }
 this.refresh();
 }else{
-alert(t[&quot;bad path&quot;]+&quot; &quot;+_57);
+alert(t[&quot;bad path&quot;]+&quot; &quot;+_58);
 }
 }
-},resetCursor:function(_5d,_5e){
+},resetCursor:function(_5e,_5f){
 this.board.reset();
 this.currentColor=(this.problemMode?this.problemColor:&quot;B&quot;);
 this.moveNumber=0;
-if(_5e){
+if(_5f){
 this.cursor.node=this.gameTree.trees.first().nodes.first();
 }else{
 this.cursor.node=this.gameTree.nodes.first();
 }
-this.refresh(_5d);
-},refresh:function(_5f){
+this.refresh(_5e);
+},refresh:function(_60){
 if(this.progressiveLoads){
 var me=this;
 setTimeout(function(){
@@ -1880,10 +1626,10 @@ if(this.moveNumber&lt;0){
 this.moveNumber=0;
 }
 this.board.revert(1);
-this.execNode(_5f);
-},variation:function(_61,_62){
-if(this.cursor.next(_61)){
-this.execNode(_62);
+this.execNode(_60);
+},variation:function(_62,_63){
+if(this.cursor.next(_62)){
+this.execNode(_63);
 this.resetLastLabels();
 if(this.progressiveLoads){
 return false;
@@ -1891,28 +1637,28 @@ return false;
 return true;
 }
 return false;
-},execNode:function(_63,_64){
-if(!_64&amp;&amp;this.progressiveLoads){
+},execNode:function(_64,_65){
+if(!_65&amp;&amp;this.progressiveLoads){
 var me=this;
 setTimeout(function(){
-me.execNode.call(me,_63);
+me.execNode.call(me,_64);
 },10);
 return;
 }
-if(!_63){
+if(!_64){
 this.dom.comments.innerHTML=&quot;&quot;;
 this.board.clearMarkers();
 }
 if(this.moveNumber&lt;1){
 this.currentColor=(this.problemMode?this.problemColor:&quot;B&quot;);
 }
-var _66=this.cursor.node.getProperties();
-for(var _67 in _66){
-if(this.propertyHandlers[_67]){
-(this.propertyHandlers[_67]).apply(this,[this.cursor.node[_67],_67,_63]);
+var _67=this.cursor.node.getProperties();
+for(var _68 in _67){
+if(this.propertyHandlers[_68]){
+(this.propertyHandlers[_68]).apply(this,[this.cursor.node[_68],_68,_64]);
 }
 }
-if(_63){
+if(_64){
 this.board.commit();
 }else{
 if(this.opponentUrl&amp;&amp;this.opponentColor==this.currentColor&amp;&amp;this.moveNumber==this.totalMoves){
@@ -1923,33 +1669,33 @@ this.updateControls();
 this.board.commit();
 this.board.render();
 }
-if(!_64&amp;&amp;this.progressiveUrl&amp;&amp;!this.cursor.node.parent.cached){
+if(!_65&amp;&amp;this.progressiveUrl&amp;&amp;!this.cursor.node.parent.cached){
 this.nowLoading();
 this.progressiveLoads++;
 this.remoteLoad(this.progressiveUrl+&quot;?id=&quot;+this.cursor.node.parent.id,this.cursor.node.parent);
 }
 if(this.problemMode&amp;&amp;this.currentColor&amp;&amp;this.currentColor!=this.problemColor&amp;&amp;!this.goingBack){
-this.playProblemResponse(_63);
+this.playProblemResponse(_64);
 }
 this.goingBack=false;
 },findVariations:function(){
 this.variations=this.getVariations(this.prefs.markNext);
-},getVariations:function(_68){
-var _69=[];
+},getVariations:function(_69){
+var _6a=[];
 if(!this.cursor.node){
-return _69;
+return _6a;
 }
-if(_68&amp;&amp;this.cursor.node.nextSibling!=null){
-_69.push({move:this.cursor.node.nextSibling.getMove(),treeNum:null});
+if(_69&amp;&amp;this.cursor.node.nextSibling!=null){
+_6a.push({move:this.cursor.node.nextSibling.getMove(),treeNum:null});
 }
 if(this.cursor.node.nextSibling==null&amp;&amp;this.cursor.node.parent&amp;&amp;this.cursor.node.parent.trees.length){
-var _6a=this.cursor.node.parent.trees;
-for(var i=0;i&lt;_6a.length;i++){
-_69.push({move:_6a[i].nodes.first().getMove(),treeNum:i});
+var _6b=this.cursor.node.parent.trees;
+for(var i=0;i&lt;_6b.length;i++){
+_6a.push({move:_6b[i].nodes.first().getMove(),treeNum:i});
 }
 }
-return _69;
-},back:function(e,obj,_6e){
+return _6a;
+},back:function(e,obj,_6f){
 if(this.cursor.previous()){
 this.moveNumber--;
 if(this.moveNumber&lt;0){
@@ -1957,11 +1703,11 @@ this.moveNumber=0;
 }
 this.board.revert(1);
 this.goingBack=true;
-this.refresh(_6e);
+this.refresh(_6f);
 this.resetLastLabels();
 }
-},forward:function(e,obj,_71){
-this.variation(null,_71);
+},forward:function(e,obj,_72){
+this.variation(null,_72);
 },first:function(){
 if(!this.cursor.hasPrevious()){
 return;
@@ -2026,11 +1772,11 @@ if(this.domLoading){
 return;
 }
 this.mouseDown=false;
-var _7c=this.pointToSgfCoord({x:x,y:y});
+var _7d=this.pointToSgfCoord({x:x,y:y});
 if(this.mode==&quot;play&quot;){
 for(var i=0;i&lt;this.variations.length;i++){
-var _7e=this.sgfCoordToPoint(this.variations[i].move);
-if(_7e.x==x&amp;&amp;_7e.y==y){
+var _7f=this.sgfCoordToPoint(this.variations[i].move);
+if(_7f.x==x&amp;&amp;_7f.y==y){
 this.variation(this.variations[i].treeNum);
 _7(e);
 return;
@@ -2039,12 +1785,12 @@ return;
 if(!this.rules.check({x:x,y:y},this.currentColor)){
 return;
 }
-if(_7c){
-var _7f=this.cursor.getNextMoves();
-if(_7f&amp;&amp;_7c in _7f){
-this.variation(_7f[_7c]);
+if(_7d){
+var _80=this.cursor.getNextMoves();
+if(_80&amp;&amp;_7d in _80){
+this.variation(_80[_7d]);
 }else{
-this.createMove(_7c);
+this.createMove(_7d);
 }
 }
 }else{
@@ -2065,48 +1811,48 @@ _a(this.dom.searchButton,&quot;inline&quot;);
 _7(e);
 }
 }else{
-var _80;
-var _81=this.board.getStone({x:x,y:y});
+var _81;
+var _82=this.board.getStone({x:x,y:y});
 if(this.mode==&quot;add_b&quot;||this.mode==&quot;add_w&quot;){
 this.cursor.node.emptyPoint(this.pointToSgfCoord({x:x,y:y}));
-if(_81!=this.board.BLACK&amp;&amp;this.mode==&quot;add_b&quot;){
-_80=&quot;AB&quot;;
+if(_82!=this.board.BLACK&amp;&amp;this.mode==&quot;add_b&quot;){
+_81=&quot;AB&quot;;
 }else{
-if(_81!=this.board.WHITE&amp;&amp;this.mode==&quot;add_w&quot;){
-_80=&quot;AW&quot;;
+if(_82!=this.board.WHITE&amp;&amp;this.mode==&quot;add_w&quot;){
+_81=&quot;AW&quot;;
 }else{
-_80=&quot;AE&quot;;
+_81=&quot;AE&quot;;
 }
 }
 }else{
 switch(this.mode){
 case &quot;tr&quot;:
-_80=&quot;TR&quot;;
+_81=&quot;TR&quot;;
 break;
 case &quot;sq&quot;:
-_80=&quot;SQ&quot;;
+_81=&quot;SQ&quot;;
 break;
 case &quot;cr&quot;:
-_80=&quot;CR&quot;;
+_81=&quot;CR&quot;;
 break;
 case &quot;x&quot;:
-_80=&quot;MA&quot;;
+_81=&quot;MA&quot;;
 break;
 case &quot;dim&quot;:
-_80=&quot;DD&quot;;
+_81=&quot;DD&quot;;
 break;
 case &quot;number&quot;:
-_80=&quot;LB&quot;;
-_7c=_7c+&quot;:&quot;+this.labelLastNumber;
+_81=&quot;LB&quot;;
+_7d=_7d+&quot;:&quot;+this.labelLastNumber;
 this.labelLastNumber++;
 break;
 case &quot;letter&quot;:
-_80=&quot;LB&quot;;
-_7c=_7c+&quot;:&quot;+this.labelLastLetter;
+_81=&quot;LB&quot;;
+_7d=_7d+&quot;:&quot;+this.labelLastLetter;
 this.labelLastLetter=String.fromCharCode(this.labelLastLetter.charCodeAt(0)+1);
 }
 }
-this.cursor.node.pushProperty(_80,_7c);
+this.cursor.node.pushProperty(_81,_7d);
 this.refresh();
 }
 }
@@ -2121,12 +1867,12 @@ _a(this.dom.searchAlgo,&quot;inline&quot;);
 _a(this.dom.searchButton,&quot;inline&quot;);
 }
 return true;
-},boundsCheck:function(x,y,_85){
-if(_85.length==2){
-_85[3]=_85[2]=_85[1];
-_85[1]=_85[0];
+},boundsCheck:function(x,y,_86){
+if(_86.length==2){
+_86[3]=_86[2]=_86[1];
+_86[1]=_86[0];
 }
-return (x&gt;=_85[0]&amp;&amp;y&gt;=_85[1]&amp;&amp;x&lt;=_85[2]&amp;&amp;y&lt;=_85[3]);
+return (x&gt;=_86[0]&amp;&amp;y&gt;=_86[1]&amp;&amp;x&lt;=_86[2]&amp;&amp;y&lt;=_86[3]);
 },getRegionBounds:function(){
 var l=this.regionLeft;
 var w=this.regionRight-this.regionLeft;
@@ -2142,13 +1888,13 @@ h=-h+1;
 }
 return [t,l,w,h];
 },showRegion:function(){
-var _8a=this.getRegionBounds();
-this.board.renderer.showRegion(_8a);
+var _8b=this.getRegionBounds();
+this.board.renderer.showRegion(_8b);
 },hideRegion:function(){
 this.board.renderer.hideRegion();
 },loadSearch:function(q,dim,p,a){
-var _8f={nodes:[],trees:[{nodes:[{SZ:this.board.boardSize}],trees:[]}]};
-this.load(_8f);
+var _90={nodes:[],trees:[{nodes:[{SZ:this.board.boardSize}],trees:[]}]};
+this.load(_90);
 a=a||&quot;corner&quot;;
 this.dom.searchAlgo.value=a;
 p=this.uncompressPattern(p);
@@ -2220,45 +1966,45 @@ _b(this.dom.searchContainer);
 this.prependComment(t[&quot;no search url&quot;]);
 return;
 }
-var _9a=this.dom.searchAlgo.value;
-var _9b=this.getRegionBounds();
-var _9c=this.board.getRegion(_9b[0],_9b[1],_9b[2],_9b[3]);
-var _9d=_9c.join(&quot;&quot;).replace(new RegExp(this.board.EMPTY,&quot;g&quot;),&quot;.&quot;).replace(new RegExp(this.board.BLACK,&quot;g&quot;),&quot;x&quot;).replace(new RegExp(this.board.WHITE,&quot;g&quot;),&quot;o&quot;);
-var _9e=/^\.*$/.test(_9d);
-var _9f=/^\.*O\.*$/.test(_9d);
-var _a0=/^\.*X\.*$/.test(_9d);
-if(_9e||_9f||_a0){
+var _9b=this.dom.searchAlgo.value;
+var _9c=this.getRegionBounds();
+var _9d=this.board.getRegion(_9c[0],_9c[1],_9c[2],_9c[3]);
+var _9e=_9d.join(&quot;&quot;).replace(new RegExp(this.board.EMPTY,&quot;g&quot;),&quot;.&quot;).replace(new RegExp(this.board.BLACK,&quot;g&quot;),&quot;x&quot;).replace(new RegExp(this.board.WHITE,&quot;g&quot;),&quot;o&quot;);
+var _9f=/^\.*$/.test(_9e);
+var _a0=/^\.*O\.*$/.test(_9e);
+var _a1=/^\.*X\.*$/.test(_9e);
+if(_9f||_a0||_a1){
 this.searching=false;
 _a(this.dom.comments);
 _b(this.dom.searchContainer);
 this.prependComment(t[&quot;two stones&quot;]);
 return;
 }
-var _a1=[];
-if(_9b[0]==0){
-_a1.push(&quot;n&quot;);
+var _a2=[];
+if(_9c[0]==0){
+_a2.push(&quot;n&quot;);
 }
-if(_9b[1]==0){
-_a1.push(&quot;w&quot;);
+if(_9c[1]==0){
+_a2.push(&quot;w&quot;);
 }
-if(_9b[0]+_9b[3]==this.board.boardSize){
-_a1.push(&quot;s&quot;);
+if(_9c[0]+_9c[3]==this.board.boardSize){
+_a2.push(&quot;s&quot;);
 }
-if(_9b[1]+_9b[2]==this.board.boardSize){
-_a1.push(&quot;e&quot;);
+if(_9c[1]+_9c[2]==this.board.boardSize){
+_a2.push(&quot;e&quot;);
 }
-if(_9a==&quot;corner&quot;&amp;&amp;!(_a1.length==2&amp;&amp;((_a1.contains(&quot;n&quot;)&amp;&amp;_a1.contains(&quot;e&quot;))||(_a1.contains(&quot;n&quot;)&amp;&amp;_a1.contains(&quot;w&quot;))||(_a1.contains(&quot;s&quot;)&amp;&amp;_a1.contains(&quot;e&quot;))||(_a1.contains(&quot;s&quot;)&amp;&amp;_a1.contains(&quot;w&quot;))))){
+if(_9b==&quot;corner&quot;&amp;&amp;!(_a2.length==2&amp;&amp;((_a2.contains(&quot;n&quot;)&amp;&amp;_a2.contains(&quot;e&quot;))||(_a2.contains(&quot;n&quot;)&amp;&amp;_a2.contains(&quot;w&quot;))||(_a2.contains(&quot;s&quot;)&amp;&amp;_a2.contains(&quot;e&quot;))||(_a2.contains(&quot;s&quot;)&amp;&amp;_a2.contains(&quot;w&quot;))))){
 this.searching=false;
 _a(this.dom.comments);
 _b(this.dom.searchContainer);
 this.prependComment(t[&quot;two edges&quot;]);
 return;
 }
-var _a2=(_a1.contains(&quot;n&quot;)?&quot;n&quot;:&quot;s&quot;);
-_a2+=(_a1.contains(&quot;w&quot;)?&quot;w&quot;:&quot;e&quot;);
+var _a3=(_a2.contains(&quot;n&quot;)?&quot;n&quot;:&quot;s&quot;);
+_a3+=(_a2.contains(&quot;w&quot;)?&quot;w&quot;:&quot;e&quot;);
 this.showComments(&quot;&quot;);
 this.gameName=&quot;search&quot;;
-var _a3=function(req){
+var _a4=function(req){
 this.searching=false;
 this.doneLoading();
 _b(this.dom.comments);
@@ -2274,45 +2020,45 @@ this.dom.searchCount.innerHTML=&quot;No&quot;;
 return;
 }
 }
-var _a5=eval(&quot;(&quot;+req.responseText+&quot;)&quot;);
-var _a6;
-var _a7=&quot;&quot;;
+var _a6=eval(&quot;(&quot;+req.responseText+&quot;)&quot;);
+var _a7;
+var _a8=&quot;&quot;;
 var odd;
-for(var i=0;_a6=_a5[i];i++){
+for(var i=0;_a7=_a6[i];i++){
 odd=odd?false:true;
-_a7+=&quot;&lt;a class='search-result&quot;+(odd?&quot; odd&quot;:&quot;&quot;)+&quot;' href='#'&gt;                    &lt;span class='id'&gt;&quot;+_a6.id+&quot;&lt;/span&gt;                    &lt;span class='mv'&gt;&quot;+_a6.mv+&quot;&lt;/span&gt;                    &lt;span class='pw'&gt;&quot;+_a6.pw+&quot; &quot;+_a6.wr+&quot;&lt;/span&gt;                    &lt;span class='pb'&gt;&quot;+_a6.pb+&quot; &quot;+_a6.br+&quot;&lt;/span&gt;                    &lt;span class='re'&gt;&quot;+_a6.re+&quot;&lt;/span&gt;                    &lt;span class='dt'&gt;&quot;+_a6.dt+&quot;&lt;/span&gt;                    &lt;div class='clear'&gt;&amp;nbsp;&lt;/div&gt;                    &lt;/a&gt;&quot;;
+_a8+=&quot;&lt;a class='search-result&quot;+(odd?&quot; odd&quot;:&quot;&quot;)+&quot;' href='#'&gt;                    &lt;span class='id'&gt;&quot;+_a7.id+&quot;&lt;/span&gt;                    &lt;span class='mv'&gt;&quot;+_a7.mv+&quot;&lt;/span&gt;                    &lt;span class='pw'&gt;&quot;+_a7.pw+&quot; &quot;+_a7.wr+&quot;&lt;/span&gt;                    &lt;span class='pb'&gt;&quot;+_a7.pb+&quot; &quot;+_a7.br+&quot;&lt;/span&gt;                    &lt;span class='re'&gt;&quot;+_a7.re+&quot;&lt;/span&gt;                    &lt;span class='dt'&gt;&quot;+_a7.dt+&quot;&lt;/span&gt;                    &lt;div class='clear'&gt;&amp;nbsp;&lt;/div&gt;                    &lt;/a&gt;&quot;;
 }
 _a(this.dom.searchResultsContainer);
-this.dom.searchResults.innerHTML=_a7;
-this.dom.searchCount.innerHTML=_a5.length;
+this.dom.searchResults.innerHTML=_a8;
+this.dom.searchCount.innerHTML=_a6.length;
 };
-var _aa=function(req){
+var _ab=function(req){
 this.croak(t[&quot;error retrieving&quot;]);
 };
-var _ac={q:_a2,w:_9b[2],h:_9b[3],p:_9d,a:_9a,t:(new Date()).getTime()};
+var _ad={q:_a3,w:_9c[2],h:_9c[3],p:_9e,a:_9b,t:(new Date()).getTime()};
 this.progressiveLoad=false;
 this.progressiveUrl=null;
 this.prefs.markNext=false;
 this.prefs.showPlayerInfo=true;
-this.hook(&quot;searchRegion&quot;,_ac);
+this.hook(&quot;searchRegion&quot;,_ad);
 this.nowLoading();
-_3(&quot;get&quot;,this.searchUrl,_ac,_a3,_aa,this,45000);
+_3(&quot;get&quot;,this.searchUrl,_ad,_a4,_ab,this,45000);
 },loadSearchResult:function(e){
 this.nowLoading();
-var _ae=e.target||e.srcElement;
-if(_ae.nodeName==&quot;SPAN&quot;){
-_ae=_ae.parentNode;
+var _af=e.target||e.srcElement;
+if(_af.nodeName==&quot;SPAN&quot;){
+_af=_af.parentNode;
 }
-if(_ae.nodeName==&quot;A&quot;){
-var _af;
+if(_af.nodeName==&quot;A&quot;){
+var _b0;
 var id;
 var mv;
-for(var i=0;_af=_ae.childNodes[i];i++){
-if(_af.className==&quot;id&quot;){
-id=_af.innerHTML;
+for(var i=0;_b0=_af.childNodes[i];i++){
+if(_b0.className==&quot;id&quot;){
+id=_b0.innerHTML;
 }
-if(_af.className==&quot;mv&quot;){
-mv=parseInt(_af.innerHTML,10);
+if(_b0.className==&quot;mv&quot;){
+mv=parseInt(_b0.innerHTML,10);
 }
 }
 }
@@ -2327,13 +2073,13 @@ _7(e);
 this.showingSearch=false;
 _b(this.dom.searchContainer);
 _a(this.dom.comments);
-},compressPattern:function(_b3){
+},compressPattern:function(_b4){
 var c=null;
 var pc=&quot;&quot;;
 var n=1;
 var ret=&quot;&quot;;
-for(var i=0;i&lt;_b3.length;i++){
-c=_b3.charAt(i);
+for(var i=0;i&lt;_b4.length;i++){
+c=_b4.charAt(i);
 if(c==pc){
 n++;
 }else{
@@ -2344,13 +2090,13 @@ pc=c;
 }
 ret=ret+pc+(n&gt;1?n:&quot;&quot;);
 return ret;
-},uncompressPattern:function(_b9){
+},uncompressPattern:function(_ba){
 var c=null;
 var s=null;
 var n=&quot;&quot;;
 var ret=&quot;&quot;;
-for(var i=0;i&lt;_b9.length;i++){
-c=_b9.charAt(i);
+for(var i=0;i&lt;_ba.length;i++){
+c=_ba.charAt(i);
 if(c==&quot;.&quot;||c==&quot;x&quot;||c==&quot;o&quot;){
 if(s!=null){
 n=parseInt(n,10);
@@ -2371,20 +2117,20 @@ for(var j=0;j&lt;n;j++){
 ret+=s;
 }
 return ret;
-},createMove:function(_c0){
-var _c1={};
-_c1[this.currentColor]=_c0;
-_c1[&quot;MN&quot;]=(++this.moveNumber).toString();
-var _c2=new eidogo.GameNode(_c1);
+},createMove:function(_c1){
+var _c2={};
+_c2[this.currentColor]=_c1;
+_c2[&quot;MN&quot;]=(++this.moveNumber).toString();
+var _c3=new eidogo.GameNode(_c2);
 this.totalMoves++;
 if(this.cursor.hasNext()){
 if(this.cursor.node.nextSibling){
 this.cursor.node.parent.createVariationTree(this.cursor.node.getPosition());
 }
-this.cursor.node.parent.appendTree(new eidogo.GameTree({nodes:[_c2],trees:[]}));
+this.cursor.node.parent.appendTree(new eidogo.GameTree({nodes:[_c3],trees:[]}));
 this.variation(this.cursor.node.parent.trees.length-1);
 }else{
-this.cursor.node.parent.appendNode(_c2);
+this.cursor.node.parent.appendNode(_c3);
 this.variation();
 }
 this.unsavedChanges=true;
@@ -2392,29 +2138,29 @@ this.unsavedChanges=true;
 if(this.editingComment){
 return true;
 }
-var _c4=e.keyCode||e.charCode;
-if(!_c4||e.ctrlKey||e.altKey||e.metaKey){
+var _c5=e.keyCode||e.charCode;
+if(!_c5||e.ctrlKey||e.altKey||e.metaKey){
 return true;
 }
-var _c5=String.fromCharCode(_c4).toLowerCase();
+var _c6=String.fromCharCode(_c5).toLowerCase();
 for(var i=0;i&lt;this.variations.length;i++){
-var _c7=this.sgfCoordToPoint(this.variations[i].move);
-var _c8=&quot;&quot;+(i+1);
-if(_c7.x!=null&amp;&amp;this.board.getMarker(_c7)!=this.board.EMPTY&amp;&amp;typeof this.board.getMarker(_c7)==&quot;string&quot;){
-_c8=this.board.getMarker(_c7).toLowerCase();
+var _c8=this.sgfCoordToPoint(this.variations[i].move);
+var _c9=&quot;&quot;+(i+1);
+if(_c8.x!=null&amp;&amp;this.board.getMarker(_c8)!=this.board.EMPTY&amp;&amp;typeof this.board.getMarker(_c8)==&quot;string&quot;){
+_c9=this.board.getMarker(_c8).toLowerCase();
 }
-_c8=_c8.replace(/^var:/,&quot;&quot;);
-if(_c5==_c8.charAt(0)){
+_c9=_c9.replace(/^var:/,&quot;&quot;);
+if(_c6==_c9.charAt(0)){
 this.variation(this.variations[i].treeNum);
 _7(e);
 return;
 }
 }
-if(_c4==112||_c4==27){
+if(_c5==112||_c5==27){
 this.selectTool(&quot;play&quot;);
 }
-var _c9=true;
-switch(_c4){
+var _ca=true;
+switch(_c5){
 case 32:
 if(e.shiftKey){
 this.back();
@@ -2424,9 +2170,9 @@ this.forward();
 break;
 case 39:
 if(e.shiftKey){
-var _ca=this.totalMoves-this.moveNumber;
-var _cb=(_ca&gt;9?9:_ca-1);
-for(var i=0;i&lt;_cb;i++){
+var _cb=this.totalMoves-this.moveNumber;
+var _cc=(_cb&gt;9?9:_cb-1);
+for(var i=0;i&lt;_cc;i++){
 this.forward(null,null,true);
 }
 }
@@ -2434,8 +2180,8 @@ this.forward();
 break;
 case 37:
 if(e.shiftKey){
-var _cb=(this.moveNumber&gt;9?9:this.moveNumber-1);
-for(var i=0;i&lt;_cb;i++){
+var _cc=(this.moveNumber&gt;9?9:this.moveNumber-1);
+for(var i=0;i&lt;_cc;i++){
 this.back(null,null,true);
 }
 }
@@ -2451,57 +2197,73 @@ case 192:
 this.pass();
 break;
 default:
-_c9=false;
+_ca=false;
 break;
 }
-if(_c9){
+if(_ca){
 _7(e);
 }
 },showInfo:function(){
 this.dom.infoGame.innerHTML=&quot;&quot;;
 this.dom.whiteName.innerHTML=&quot;&quot;;
 this.dom.blackName.innerHTML=&quot;&quot;;
-var _cc=this.gameTree.trees.first().nodes.first();
+var _cd=this.gameTree.trees.first().nodes.first();
 var dl=document.createElement(&quot;dl&quot;);
-for(var _ce in this.infoLabels){
-if(_cc[_ce] instanceof Array){
-_cc[_ce]=_cc[_ce][0];
+for(var _cf in this.infoLabels){
+if(_cd[_cf] instanceof Array){
+_cd[_cf]=_cd[_cf][0];
 }
-if(_cc[_ce]){
-if(_ce==&quot;PW&quot;){
-this.dom.whiteName.innerHTML=_cc[_ce]+(_cc[&quot;WR&quot;]?&quot;, &quot;+_cc[&quot;WR&quot;]:&quot;&quot;);
+if(_cd[_cf]){
+if(_cf==&quot;PW&quot;){
+this.dom.whiteName.innerHTML=_cd[_cf]+(_cd[&quot;WR&quot;]?&quot;, &quot;+_cd[&quot;WR&quot;]:&quot;&quot;);
 continue;
 }else{
-if(_ce==&quot;PB&quot;){
-this.dom.blackName.innerHTML=_cc[_ce]+(_cc[&quot;BR&quot;]?&quot;, &quot;+_cc[&quot;BR&quot;]:&quot;&quot;);
+if(_cf==&quot;PB&quot;){
+this.dom.blackName.innerHTML=_cd[_cf]+(_cd[&quot;BR&quot;]?&quot;, &quot;+_cd[&quot;BR&quot;]:&quot;&quot;);
 continue;
 }
 }
-if(_ce==&quot;WR&quot;||_ce==&quot;BR&quot;){
+if(_cf==&quot;WR&quot;||_cf==&quot;BR&quot;){
 continue;
 }
-if(_ce==&quot;DT&quot;){
-var _cf=_cc[_ce].split(/[\.-]/);
-if(_cf.length==3){
-_cc[_ce]=_cf[2].replace(/^0+/,&quot;&quot;)+&quot; &quot;+this.months[_cf[1]-1]+&quot; &quot;+_cf[0];
+if(_cf==&quot;DT&quot;){
+var _d0=_cd[_cf].split(/[\.-]/);
+if(_d0.length==3){
+_cd[_cf]=_d0[2].replace(/^0+/,&quot;&quot;)+&quot; &quot;+this.months[_d0[1]-1]+&quot; &quot;+_d0[0];
 }
 }
 var dt=document.createElement(&quot;dt&quot;);
-dt.innerHTML=this.infoLabels[_ce]+&quot;:&quot;;
+dt.innerHTML=this.infoLabels[_cf]+&quot;:&quot;;
 var dd=document.createElement(&quot;dd&quot;);
-dd.innerHTML=_cc[_ce];
+dd.innerHTML=_cd[_cf];
 dl.appendChild(dt);
 dl.appendChild(dd);
 }
 }
 this.dom.infoGame.appendChild(dl);
-},selectTool:function(_d2){
-var _d3;
+},selectTool:function(_d3){
+var _d4;
 _b(this.dom.scoreEst);
-if(_d2==&quot;region&quot;){
-_d3=&quot;crosshair&quot;;
+if(_d3==&quot;region&quot;){
+_d4=&quot;crosshair&quot;;
+}else{
+if(_d3==&quot;comment&quot;){
+this.startEditComment();
 }else{
-if(_d2==&quot;comment&quot;){
+_d4=&quot;default&quot;;
+this.regionBegun=false;
+this.hideRegion();
+_b(this.dom.searchButton);
+_b(this.dom.searchAlgo);
+if(this.searchUrl){
+_a(this.dom.scoreEst,&quot;inline&quot;);
+}
+}
+}
+this.board.renderer.setCursor(_d4);
+this.mode=_d3;
+this.dom.toolsSelect.value=_d3;
+},startEditComment:function(){
 this.closeSearch();
 var ta=this.dom.commentsEdit;
 ta.style.position=&quot;absolute&quot;;
@@ -2515,26 +2277,12 @@ _a(this.dom.commentsEditDone);
 this.dom.commentsEditTa.value=this.cursor.node.C||&quot;&quot;;
 this.dom.commentsEditTa.focus();
 this.editingComment=true;
-}else{
-_d3=&quot;default&quot;;
-this.regionBegun=false;
-this.hideRegion();
-_b(this.dom.searchButton);
-_b(this.dom.searchAlgo);
-if(this.searchUrl){
-_a(this.dom.scoreEst,&quot;inline&quot;);
-}
-}
-}
-this.board.renderer.setCursor(_d3);
-this.mode=_d2;
-this.dom.toolsSelect.value=_d2;
 },finishEditComment:function(){
-var _d5=this.cursor.node.C;
-var _d6=this.dom.commentsEditTa.value;
-if(_d5!=_d6){
+var _d6=this.cursor.node.C;
+var _d7=this.dom.commentsEditTa.value;
+if(_d6!=_d7){
 this.unsavedChanges=true;
-this.cursor.node.C=_d6;
+this.cursor.node.C=_d7;
 }
 _b(this.dom.shade);
 _b(this.dom.commentsEdit);
@@ -2550,25 +2298,25 @@ this.dom.blackTime.innerHTML=t[&quot;time left&quot;]+&quot;: &lt;span&gt;&quot;+(this.timeB?this.timeB:&quot;-
 _9(this.dom.controlPass,&quot;pass-on&quot;);
 this.dom.variations.innerHTML=&quot;&quot;;
 for(var i=0;i&lt;this.variations.length;i++){
-var _d8=i+1;
+var _d9=i+1;
 if(!this.variations[i].move||this.variations[i].move==&quot;tt&quot;){
 _8(this.dom.controlPass,&quot;pass-on&quot;);
 }else{
-var _d9=this.sgfCoordToPoint(this.variations[i].move);
-if(this.board.getMarker(_d9)!=this.board.EMPTY){
-_d8=this.board.getMarker(_d9);
+var _da=this.sgfCoordToPoint(this.variations[i].move);
+if(this.board.getMarker(_da)!=this.board.EMPTY){
+_d9=this.board.getMarker(_da);
 }
 if(this.prefs.markVariations){
-this.board.addMarker(_d9,&quot;var:&quot;+_d8);
+this.board.addMarker(_da,&quot;var:&quot;+_d9);
 }
 }
-var _da=document.createElement(&quot;div&quot;);
-_da.className=&quot;variation-nav&quot;;
-_da.innerHTML=_d8;
-_4(_da,&quot;click&quot;,function(e,arg){
+var _db=document.createElement(&quot;div&quot;);
+_db.className=&quot;variation-nav&quot;;
+_db.innerHTML=_d9;
+_4(_db,&quot;click&quot;,function(e,arg){
 arg.me.variation(arg.treeNum);
 },{me:this,treeNum:this.variations[i].treeNum});
-this.dom.variations.appendChild(_da);
+this.dom.variations.appendChild(_db);
 }
 if(!this.variations.length){
 this.dom.variations.innerHTML=&quot;&lt;div class='variation-nav none'&gt;&quot;+t[&quot;no variations&quot;]+&quot;&lt;/div&gt;&quot;;
@@ -2586,119 +2334,119 @@ _8(this.dom.controlFirst,&quot;first-on&quot;);
 }else{
 _9(this.dom.controlBack,&quot;back-on&quot;);
 _9(this.dom.controlFirst,&quot;first-on&quot;);
-var _dd=&quot;&quot;;
+var _de=&quot;&quot;;
 if(!this.prefs.showPlayerInfo){
-_dd+=this.getGameDescription(true);
+_de+=this.getGameDescription(true);
 }
 if(!this.prefs.showGameInfo){
-_dd+=this.dom.infoGame.innerHTML;
+_de+=this.dom.infoGame.innerHTML;
 }
-if(_dd.length&amp;&amp;this.theme!=&quot;problem&quot;){
-this.prependComment(_dd,&quot;comment-info&quot;);
+if(_de.length&amp;&amp;this.theme!=&quot;problem&quot;){
+this.prependComment(_de,&quot;comment-info&quot;);
 }
 }
 if(!this.progressiveLoad){
 this.updateNavSlider();
 }
-},setColor:function(_de){
-this.prependComment(_de==&quot;B&quot;?t[&quot;black to play&quot;]:t[&quot;white to play&quot;]);
-this.currentColor=_de;
+},setColor:function(_df){
+this.prependComment(_df==&quot;B&quot;?t[&quot;black to play&quot;]:t[&quot;white to play&quot;]);
+this.currentColor=_df;
 },setMoveNumber:function(num){
 this.moveNumber=num;
-},playMove:function(_e0,_e1,_e2){
-_e1=_e1||this.currentColor;
-this.currentColor=(_e1==&quot;B&quot;?&quot;W&quot;:&quot;B&quot;);
-_e1=_e1==&quot;W&quot;?this.board.WHITE:this.board.BLACK;
-var pt=this.sgfCoordToPoint(_e0);
+},playMove:function(_e1,_e2,_e3){
+_e2=_e2||this.currentColor;
+this.currentColor=(_e2==&quot;B&quot;?&quot;W&quot;:&quot;B&quot;);
+_e2=_e2==&quot;W&quot;?this.board.WHITE:this.board.BLACK;
+var pt=this.sgfCoordToPoint(_e1);
 if(!this.cursor.node[&quot;MN&quot;]){
 this.moveNumber++;
 }
-if((!_e0||_e0==&quot;tt&quot;||_e0==&quot;&quot;)&amp;&amp;!_e2){
-this.prependComment((_e1==this.board.WHITE?t[&quot;white&quot;]:t[&quot;black&quot;])+&quot; &quot;+t[&quot;passed&quot;],&quot;comment-pass&quot;);
+if((!_e1||_e1==&quot;tt&quot;||_e1==&quot;&quot;)&amp;&amp;!_e3){
+this.prependComment((_e2==this.board.WHITE?t[&quot;white&quot;]:t[&quot;black&quot;])+&quot; &quot;+t[&quot;passed&quot;],&quot;comment-pass&quot;);
 }else{
-if(_e0==&quot;resign&quot;){
-this.prependComment((_e1==this.board.WHITE?t[&quot;white&quot;]:t[&quot;black&quot;])+&quot; &quot;+t[&quot;resigned&quot;],&quot;comment-resign&quot;);
+if(_e1==&quot;resign&quot;){
+this.prependComment((_e2==this.board.WHITE?t[&quot;white&quot;]:t[&quot;black&quot;])+&quot; &quot;+t[&quot;resigned&quot;],&quot;comment-resign&quot;);
 }else{
-if(_e0&amp;&amp;_e0!=&quot;tt&quot;){
-this.board.addStone(pt,_e1);
-this.rules.apply(pt,_e1);
-if(this.prefs.markCurrent&amp;&amp;!_e2){
-this.addMarker(_e0,&quot;current&quot;);
+if(_e1&amp;&amp;_e1!=&quot;tt&quot;){
+this.board.addStone(pt,_e2);
+this.rules.apply(pt,_e2);
+if(this.prefs.markCurrent&amp;&amp;!_e3){
+this.addMarker(_e1,&quot;current&quot;);
 }
 }
 }
 }
-},addStone:function(_e4,_e5){
-if(!(_e4 instanceof Array)){
-_e4=[_e4];
+},addStone:function(_e5,_e6){
+if(!(_e5 instanceof Array)){
+_e5=[_e5];
 }
-_e4=this.expandCompressedPoints(_e4);
-for(var i=0;i&lt;_e4.length;i++){
-this.board.addStone(this.sgfCoordToPoint(_e4[i]),_e5==&quot;AW&quot;?this.board.WHITE:_e5==&quot;AB&quot;?this.board.BLACK:this.board.EMPTY);
+_e5=this.expandCompressedPoints(_e5);
+for(var i=0;i&lt;_e5.length;i++){
+this.board.addStone(this.sgfCoordToPoint(_e5[i]),_e6==&quot;AW&quot;?this.board.WHITE:_e6==&quot;AB&quot;?this.board.BLACK:this.board.EMPTY);
 }
-},addMarker:function(_e7,_e8){
-if(!(_e7 instanceof Array)){
-_e7=[_e7];
+},addMarker:function(_e8,_e9){
+if(!(_e8 instanceof Array)){
+_e8=[_e8];
 }
-_e7=this.expandCompressedPoints(_e7);
-var _e9;
-for(var i=0;i&lt;_e7.length;i++){
-switch(_e8){
+_e8=this.expandCompressedPoints(_e8);
+var _ea;
+for(var i=0;i&lt;_e8.length;i++){
+switch(_e9){
 case &quot;TR&quot;:
-_e9=&quot;triangle&quot;;
+_ea=&quot;triangle&quot;;
 break;
 case &quot;SQ&quot;:
-_e9=&quot;square&quot;;
+_ea=&quot;square&quot;;
 break;
 case &quot;CR&quot;:
-_e9=&quot;circle&quot;;
+_ea=&quot;circle&quot;;
 break;
 case &quot;MA&quot;:
-_e9=&quot;ex&quot;;
+_ea=&quot;ex&quot;;
 break;
 case &quot;TW&quot;:
-_e9=&quot;territory-white&quot;;
+_ea=&quot;territory-white&quot;;
 break;
 case &quot;TB&quot;:
-_e9=&quot;territory-black&quot;;
+_ea=&quot;territory-black&quot;;
 break;
 case &quot;DD&quot;:
-_e9=&quot;dim&quot;;
+_ea=&quot;dim&quot;;
 break;
 case &quot;LB&quot;:
-_e9=(_e7[i].split(&quot;:&quot;))[1];
-_e7[i];
+_ea=(_e8[i].split(&quot;:&quot;))[1];
+_e8[i];
 break;
 default:
-_e9=_e8;
+_ea=_e9;
 break;
 }
-this.board.addMarker(this.sgfCoordToPoint((_e7[i].split(&quot;:&quot;))[0]),_e9);
+this.board.addMarker(this.sgfCoordToPoint((_e8[i].split(&quot;:&quot;))[0]),_ea);
 }
-},showTime:function(_eb,_ec){
-var tp=(_ec==&quot;BL&quot;||_ec==&quot;OB&quot;?&quot;timeB&quot;:&quot;timeW&quot;);
-if(_ec==&quot;BL&quot;||_ec==&quot;WL&quot;){
-var _ee=Math.floor(_eb/60);
-var _ef=(_eb%60).toFixed(0);
-_ef=(_ef&lt;10?&quot;0&quot;:&quot;&quot;)+_ef;
-this[tp]=_ee+&quot;:&quot;+_ef;
+},showTime:function(_ec,_ed){
+var tp=(_ed==&quot;BL&quot;||_ed==&quot;OB&quot;?&quot;timeB&quot;:&quot;timeW&quot;);
+if(_ed==&quot;BL&quot;||_ed==&quot;WL&quot;){
+var _ef=Math.floor(_ec/60);
+var _f0=(_ec%60).toFixed(0);
+_f0=(_f0&lt;10?&quot;0&quot;:&quot;&quot;)+_f0;
+this[tp]=_ef+&quot;:&quot;+_f0;
 }else{
-this[tp]+=&quot; (&quot;+_eb+&quot;)&quot;;
+this[tp]+=&quot; (&quot;+_ec+&quot;)&quot;;
 }
-},showAnnotation:function(_f0,_f1){
+},showAnnotation:function(_f1,_f2){
 var msg;
-switch(_f1){
+switch(_f2){
 case &quot;N&quot;:
-msg=_f0;
+msg=_f1;
 break;
 case &quot;GB&quot;:
-msg=(_f0&gt;1?t[&quot;vgb&quot;]:t[&quot;gb&quot;]);
+msg=(_f1&gt;1?t[&quot;vgb&quot;]:t[&quot;gb&quot;]);
 break;
 case &quot;GW&quot;:
-msg=(_f0&gt;1?t[&quot;vgw&quot;]:t[&quot;gw&quot;]);
+msg=(_f1&gt;1?t[&quot;vgw&quot;]:t[&quot;gw&quot;]);
 break;
 case &quot;DM&quot;:
-msg=(_f0&gt;1?t[&quot;dmj&quot;]:t[&quot;dm&quot;]);
+msg=(_f1&gt;1?t[&quot;dmj&quot;]:t[&quot;dm&quot;]);
 break;
 case &quot;UC&quot;:
 msg=t[&quot;uc&quot;];
@@ -2707,7 +2455,7 @@ case &quot;TE&quot;:
 msg=t[&quot;te&quot;];
 break;
 case &quot;BM&quot;:
-msg=(_f0&gt;1?t[&quot;vbm&quot;]:t[&quot;bm&quot;]);
+msg=(_f1&gt;1?t[&quot;vbm&quot;]:t[&quot;bm&quot;]);
 break;
 case &quot;DO&quot;:
 msg=t[&quot;do&quot;];
@@ -2720,14 +2468,14 @@ msg=t[&quot;ho&quot;];
 break;
 }
 this.prependComment(msg);
-},showComments:function(_f3,_f4,_f5){
-if(!_f3||_f5){
+},showComments:function(_f4,_f5,_f6){
+if(!_f4||_f6){
 return;
 }
-this.dom.comments.innerHTML+=_f3.replace(/\n/g,&quot;&lt;br /&gt;&quot;);
-},prependComment:function(_f6,cls){
+this.dom.comments.innerHTML+=_f4.replace(/\n/g,&quot;&lt;br /&gt;&quot;);
+},prependComment:function(_f7,cls){
 cls=cls||&quot;comment-status&quot;;
-this.dom.comments.innerHTML=&quot;&lt;div class='&quot;+cls+&quot;'&gt;&quot;+_f6+&quot;&lt;/div&gt;&quot;+this.dom.comments.innerHTML;
+this.dom.comments.innerHTML=&quot;&lt;div class='&quot;+cls+&quot;'&gt;&quot;+_f7+&quot;&lt;/div&gt;&quot;+this.dom.comments.innerHTML;
 },downloadSgf:function(evt){
 _7(evt);
 if(this.downloadUrl){
@@ -2743,14 +2491,14 @@ location.href=&quot;data:text/plain,&quot;+encodeURIComponent(this.gameTree.trees.first().
 }
 },save:function(evt){
 _7(evt);
-var _fa=function(req){
+var _fb=function(req){
 this.hook(&quot;saved&quot;,[req.responseText]);
 };
-var _fc=function(req){
+var _fd=function(req){
 this.croak(t[&quot;error retrieving&quot;]);
 };
 var sgf=this.gameTree.trees.first().toSgf();
-_3(&quot;POST&quot;,this.saveUrl,{sgf:sgf},_fa,_fc,this,30000);
+_3(&quot;POST&quot;,this.saveUrl,{sgf:sgf},_fb,_fd,this,30000);
 },constructDom:function(){
 this.dom.player=document.createElement(&quot;div&quot;);
 this.dom.player.className=&quot;eidogo-player&quot;+(this.theme?&quot; theme-&quot;+this.theme:&quot;&quot;);
@@ -2758,21 +2506,21 @@ this.dom.player.id=&quot;player-&quot;+this.uniq;
 this.dom.container.innerHTML=&quot;&quot;;
 eidogo.util.show(this.dom.container);
 this.dom.container.appendChild(this.dom.player);
-var _ff=&quot;            &lt;div id='board-container' class='board-container'&gt;&lt;/div&gt;            &lt;div id='controls-container' class='controls-container'&gt;                &lt;ul id='controls' class='controls'&gt;                    &lt;li id='control-first' class='control first'&gt;First&lt;/li&gt;                    &lt;li id='control-back' class='control back'&gt;Back&lt;/li&gt;                    &lt;li id='control-forward' class='control forward'&gt;Forward&lt;/li&gt;                    &lt;li id='control-last' class='control last'&gt;Last&lt;/li&gt;                    &lt;li id='control-pass' class='control pass'&gt;Pass&lt;/li&gt;                &lt;/ul&gt;                &lt;div id='move-number' class='move-number&quot;+(this.permalinkable?&quot; permalink&quot;:&quot;&quot;)+&quot;'&gt;&lt;/div&gt;                &lt;div id='nav-slider' class='nav-slider'&gt;                    &lt;div id='nav-slider-thumb' class='nav-slider-thumb'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div id='variations-container' class='variations-container'&gt;                    &lt;div id='variations-label' class='variations-label'&gt;&quot;+t[&quot;variations&quot;]+&quot;:&lt;/div&gt;                    &lt;div id='variations' class='variations'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div class='controls-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='tools-container' class='tools-container'&quot;+(this.prefs.showTools?&quot;&quot;:&quot; style='display: none'&quot;)+&quot;&gt;                &lt;div id='tools-label' class='tools-label'&gt;&quot;+t[&quot;tool&quot;]+&quot;:&lt;/div&gt;                &lt;select id='tools-select' class='tools-select'&gt;                    &lt;option value='play'&gt;&quot;+t[&quot;play&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_b'&gt;&quot;+t[&quot;add_b&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_w'&gt;&quot;+t[&quot;add_w&quot;]+&quot;&lt;/option&gt;                    &quot;+(this.searchUrl?(&quot;&lt;option value='region'&gt;&quot;+t[&quot;region&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &lt;option value='comment'&gt;&quot;+t[&quot;edit comment&quot;]+&quot;&lt;/option&gt;                    &lt;option value='tr'&gt;&quot;+t[&quot;triangle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='sq'&gt;&quot;+t[&quot;square&quot;]+&quot;&lt;/option&gt;                    &lt;option value='cr'&gt;&quot;+t[&quot;circle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='x'&gt;&quot;+t[&quot;x&quot;]+&quot;&lt;/option&gt;                    &lt;option value='letter'&gt;&quot;+t[&quot;letter&quot;]+&quot;&lt;/option&gt;                    &lt;option value='number'&gt;&quot;+t[&quot;number&quot;]+&quot;&lt;/option&gt;                    &lt;option value='dim'&gt;&quot;+t[&quot;dim&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='score-est' class='score-est-button' value='&quot;+t[&quot;score est&quot;]+&quot;' /&gt;                &lt;select id='search-algo' class='search-algo'&gt;                    &lt;option value='corner'&gt;&quot;+t[&quot;search corner&quot;]+&quot;&lt;/option&gt;                    &lt;option value='center'&gt;&quot;+t[&quot;search center&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='search-button' class='search-button' value='&quot;+t[&quot;search&quot;]+&quot;' /&gt;            &lt;/div&gt;            &lt;div id='comments' class='comments'&gt;&lt;/div&gt;            &lt;div id='comments-edit' class='comments-edit'&gt;                &lt;textarea id='comments-edit-ta' class='comments-edit-ta'&gt;&lt;/textarea&gt;                &lt;div id='comments-edit-done' class='comments-edit-done'&gt;&quot;+t[&quot;done&quot;]+&quot;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='search-container' class='search-container'&gt;                &lt;div id='search-close' class='search-close'&gt;&quot;+t[&quot;close search&quot;]+&quot;&lt;/div&gt;                &lt;p class='search-count'&gt;&lt;span id='search-count'&gt;&lt;/span&gt;&amp;nbsp;&quot;+t[&quot;matches found&quot;]+&quot;&lt;/p&gt;                &lt;div id='search-results-container' class='search-results-container'&gt;                    &lt;div class='search-result'&gt;                        &lt;span class='pw'&gt;&lt;b&gt;&quot;+t[&quot;white&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='pb'&gt;&lt;b&gt;&quot;+t[&quot;black&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='re'&gt;&lt;b&gt;&quot;+t[&quot;result&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='dt'&gt;&lt;b&gt;&quot;+t[&quot;date&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;div class='clear'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='search-results' class='search-results'&gt;&lt;/div&gt;                &lt;/div&gt;            &lt;/div&gt;            &lt;div id='info' class='info'&gt;                &lt;div id='info-players' class='players'&gt;                    &lt;div id='white' class='player white'&gt;                        &lt;div id='white-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='white-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='white-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='black' class='player black'&gt;                        &lt;div id='black-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='black-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='black-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                &lt;/div&gt;                &lt;div id='info-game' class='game'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='options' class='options'&gt;                &quot;+(this.saveUrl?&quot;&lt;a id='option-save' class='option-save' href='#'&gt;&quot;+t[&quot;save to server&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &quot;+(this.downloadUrl||_c?&quot;&lt;a id='option-download' class='option-download' href='#'&gt;&quot;+t[&quot;download sgf&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &lt;div class='options-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='preferences' class='preferences'&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Show variations on board&lt;/div&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Mark current move&lt;/div&gt;            &lt;/div&gt;            &lt;div id='footer' class='footer'&gt;&lt;/div&gt;            &lt;div id='shade' class='shade'&gt;&lt;/div&gt;        &quot;;
-_ff=_ff.replace(/ id='([^']+)'/g,&quot; id='$1-&quot;+this.uniq+&quot;'&quot;);
-this.dom.player.innerHTML=_ff;
+var _100=&quot;            &lt;div id='board-container' class='board-container'&gt;&lt;/div&gt;            &lt;div id='controls-container' class='controls-container'&gt;                &lt;ul id='controls' class='controls'&gt;                    &lt;li id='control-first' class='control first'&gt;First&lt;/li&gt;                    &lt;li id='control-back' class='control back'&gt;Back&lt;/li&gt;                    &lt;li id='control-forward' class='control forward'&gt;Forward&lt;/li&gt;                    &lt;li id='control-last' class='control last'&gt;Last&lt;/li&gt;                    &lt;li id='control-pass' class='control pass'&gt;Pass&lt;/li&gt;                &lt;/ul&gt;                &lt;div id='move-number' class='move-number&quot;+(this.permalinkable?&quot; permalink&quot;:&quot;&quot;)+&quot;'&gt;&lt;/div&gt;                &lt;div id='nav-slider' class='nav-slider'&gt;                    &lt;div id='nav-slider-thumb' class='nav-slider-thumb'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div id='variations-container' class='variations-container'&gt;                    &lt;div id='variations-label' class='variations-label'&gt;&quot;+t[&quot;variations&quot;]+&quot;:&lt;/div&gt;                    &lt;div id='variations' class='variations'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div class='controls-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='tools-container' class='tools-container'&quot;+(this.prefs.showTools?&quot;&quot;:&quot; style='display: none'&quot;)+&quot;&gt;                &lt;div id='tools-label' class='tools-label'&gt;&quot;+t[&quot;tool&quot;]+&quot;:&lt;/div&gt;                &lt;select id='tools-select' class='tools-select'&gt;                    &lt;option value='play'&gt;&quot;+t[&quot;play&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_b'&gt;&quot;+t[&quot;add_b&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_w'&gt;&quot;+t[&quot;add_w&quot;]+&quot;&lt;/option&gt;                    &quot;+(this.searchUrl?(&quot;&lt;option value='region'&gt;&quot;+t[&quot;region&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &lt;option value='comment'&gt;&quot;+t[&quot;edit comment&quot;]+&quot;&lt;/option&gt;                    &lt;option value='tr'&gt;&quot;+t[&quot;triangle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='sq'&gt;&quot;+t[&quot;square&quot;]+&quot;&lt;/option&gt;                    &lt;option value='cr'&gt;&quot;+t[&quot;circle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='x'&gt;&quot;+t[&quot;x&quot;]+&quot;&lt;/option&gt;                    &lt;option value='letter'&gt;&quot;+t[&quot;letter&quot;]+&quot;&lt;/option&gt;                    &lt;option value='number'&gt;&quot;+t[&quot;number&quot;]+&quot;&lt;/option&gt;                    &lt;option value='dim'&gt;&quot;+t[&quot;dim&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='score-est' class='score-est-button' value='&quot;+t[&quot;score est&quot;]+&quot;' /&gt;                &lt;select id='search-algo' class='search-algo'&gt;                    &lt;option value='corner'&gt;&quot;+t[&quot;search corner&quot;]+&quot;&lt;/option&gt;                    &lt;option value='center'&gt;&quot;+t[&quot;search center&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='search-button' class='search-button' value='&quot;+t[&quot;search&quot;]+&quot;' /&gt;            &lt;/div&gt;            &lt;div id='comments' class='comments'&gt;&lt;/div&gt;            &lt;div id='comments-edit' class='comments-edit'&gt;                &lt;textarea id='comments-edit-ta' class='comments-edit-ta'&gt;&lt;/textarea&gt;                &lt;div id='comments-edit-done' class='comments-edit-done'&gt;&quot;+t[&quot;done&quot;]+&quot;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='search-container' class='search-container'&gt;                &lt;div id='search-close' class='search-close'&gt;&quot;+t[&quot;close search&quot;]+&quot;&lt;/div&gt;                &lt;p class='search-count'&gt;&lt;span id='search-count'&gt;&lt;/span&gt;&amp;nbsp;&quot;+t[&quot;matches found&quot;]+&quot;&lt;/p&gt;                &lt;div id='search-results-container' class='search-results-container'&gt;                    &lt;div class='search-result'&gt;                        &lt;span class='pw'&gt;&lt;b&gt;&quot;+t[&quot;white&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='pb'&gt;&lt;b&gt;&quot;+t[&quot;black&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='re'&gt;&lt;b&gt;&quot;+t[&quot;result&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='dt'&gt;&lt;b&gt;&quot;+t[&quot;date&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;div class='clear'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='search-results' class='search-results'&gt;&lt;/div&gt;                &lt;/div&gt;            &lt;/div&gt;            &lt;div id='info' class='info'&gt;                &lt;div id='info-players' class='players'&gt;                    &lt;div id='white' class='player white'&gt;                        &lt;div id='white-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='white-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='white-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='black' class='player black'&gt;                        &lt;div id='black-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='black-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='black-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                &lt;/div&gt;                &lt;div id='info-game' class='game'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='options' class='options'&gt;                &quot;+(this.saveUrl?&quot;&lt;a id='option-save' class='option-save' href='#'&gt;&quot;+t[&quot;save to server&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &quot;+(this.downloadUrl||_c?&quot;&lt;a id='option-download' class='option-download' href='#'&gt;&quot;+t[&quot;download sgf&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &lt;div class='options-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='preferences' class='preferences'&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Show variations on board&lt;/div&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Mark current move&lt;/div&gt;            &lt;/div&gt;            &lt;div id='footer' class='footer'&gt;&lt;/div&gt;            &lt;div id='shade' class='shade'&gt;&lt;/div&gt;        &quot;;
+_100=_100.replace(/ id='([^']+)'/g,&quot; id='$1-&quot;+this.uniq+&quot;'&quot;);
+this.dom.player.innerHTML=_100;
 var re=/ id='([^']+)-\d+'/g;
-var _101;
+var _102;
 var id;
-var _103;
-while(_101=re.exec(_ff)){
-id=_101[0].replace(/'/g,&quot;&quot;).replace(/ id=/,&quot;&quot;);
-_103=&quot;&quot;;
-_101[1].split(&quot;-&quot;).forEach(function(word,i){
+var _104;
+while(_102=re.exec(_100)){
+id=_102[0].replace(/'/g,&quot;&quot;).replace(/ id=/,&quot;&quot;);
+_104=&quot;&quot;;
+_102[1].split(&quot;-&quot;).forEach(function(word,i){
 word=i?word.charAt(0).toUpperCase()+word.substring(1):word;
-_103+=word;
+_104+=word;
 });
-this.dom[_103]=_2(id);
+this.dom[_104]=_2(id);
 }
 this.dom.navSlider._width=this.dom.navSlider.offsetWidth;
 this.dom.navSliderThumb._width=this.dom.navSliderThumb.offsetWidth;
@@ -2790,109 +2538,109 @@ _b(this.dom.navSliderThumb);
 return;
 }
 this.dom.navSlider.style.cursor=&quot;pointer&quot;;
-var _108=false;
-var _109=null;
+var _109=false;
+var _10a=null;
 _4(this.dom.navSlider,&quot;mousedown&quot;,function(e){
-_108=true;
+_109=true;
 _7(e);
 },this,true);
 _4(document,&quot;mousemove&quot;,function(e){
-if(!_108){
+if(!_109){
 return;
 }
 var xy=_6(e,this.dom.navSlider);
-clearTimeout(_109);
-_109=setTimeout(function(){
+clearTimeout(_10a);
+_10a=setTimeout(function(){
 this.updateNavSlider(xy[0]);
 }.bind(this),10);
 _7(e);
 },this,true);
 _4(document,&quot;mouseup&quot;,function(e){
-if(!_108){
+if(!_109){
 return true;
 }
-_108=false;
+_109=false;
 var xy=_6(e,this.dom.navSlider);
 this.updateNavSlider(xy[0]);
 return true;
 },this,true);
-},updateNavSlider:function(_10f){
-var _110=this.dom.navSlider._width-this.dom.navSliderThumb._width;
-var _111=this.totalMoves;
-var _112=!!_10f;
-_10f=_10f||(this.moveNumber/_111*_110);
-_10f=_10f&gt;_110?_110:_10f;
-_10f=_10f&lt;0?0:_10f;
-var _113=parseInt(_10f/_110*_111,10);
-if(_112){
+},updateNavSlider:function(_110){
+var _111=this.dom.navSlider._width-this.dom.navSliderThumb._width;
+var _112=this.totalMoves;
+var _113=!!_110;
+_110=_110||(this.moveNumber/_112*_111);
+_110=_110&gt;_111?_111:_110;
+_110=_110&lt;0?0:_110;
+var _114=parseInt(_110/_111*_112,10);
+if(_113){
 this.nowLoading();
-var _114=_113-this.cursor.node.getPosition();
-for(var i=0;i&lt;Math.abs(_114);i++){
-if(_114&gt;0){
+var _115=_114-this.cursor.node.getPosition();
+for(var i=0;i&lt;Math.abs(_115);i++){
+if(_115&gt;0){
 this.variation(null,true);
 }else{
-if(_114&lt;0){
+if(_115&lt;0){
 this.cursor.previous();
 this.moveNumber--;
 }
 }
 }
-if(_114&lt;0){
+if(_115&lt;0){
 if(this.moveNumber&lt;0){
 this.moveNumber=0;
 }
-this.board.revert(Math.abs(_114));
+this.board.revert(Math.abs(_115));
 }
 this.doneLoading();
 this.refresh();
 }
-_10f=parseInt(_113/_111*_110,10)||0;
-this.dom.navSliderThumb.style.left=_10f+&quot;px&quot;;
+_110=parseInt(_114/_112*_111,10)||0;
+this.dom.navSliderThumb.style.left=_110+&quot;px&quot;;
 },resetLastLabels:function(){
 this.labelLastNumber=1;
 this.labelLastLetter=&quot;A&quot;;
-},getGameDescription:function(_116){
+},getGameDescription:function(_117){
 var root=this.gameTree.trees.first().nodes.first();
-var desc=(_116?&quot;&quot;:root.GN||this.gameName);
+var desc=(_117?&quot;&quot;:root.GN||this.gameName);
 if(root.PW&amp;&amp;root.PB){
 var wr=root.WR?&quot; &quot;+root.WR:&quot;&quot;;
 var br=root.BR?&quot; &quot;+root.BR:&quot;&quot;;
 desc+=(desc.length?&quot; - &quot;:&quot;&quot;)+root.PW+wr+&quot; vs &quot;+root.PB+br;
 }
 return desc;
-},sgfCoordToPoint:function(_11b){
-if(!_11b||_11b==&quot;tt&quot;){
+},sgfCoordToPoint:function(_11c){
+if(!_11c||_11c==&quot;tt&quot;){
 return {x:null,y:null};
 }
-var _11c={a:0,b:1,c:2,d:3,e:4,f:5,g:6,h:7,i:8,j:9,k:10,l:11,m:12,n:13,o:14,p:15,q:16,r:17,s:18};
-return {x:_11c[_11b.charAt(0)],y:_11c[_11b.charAt(1)]};
+var _11d={a:0,b:1,c:2,d:3,e:4,f:5,g:6,h:7,i:8,j:9,k:10,l:11,m:12,n:13,o:14,p:15,q:16,r:17,s:18};
+return {x:_11d[_11c.charAt(0)],y:_11d[_11c.charAt(1)]};
 },pointToSgfCoord:function(pt){
 if(!pt||!this.boundsCheck(pt.x,pt.y,[0,this.board.boardSize-1])){
 return null;
 }
 var pts={0:&quot;a&quot;,1:&quot;b&quot;,2:&quot;c&quot;,3:&quot;d&quot;,4:&quot;e&quot;,5:&quot;f&quot;,6:&quot;g&quot;,7:&quot;h&quot;,8:&quot;i&quot;,9:&quot;j&quot;,10:&quot;k&quot;,11:&quot;l&quot;,12:&quot;m&quot;,13:&quot;n&quot;,14:&quot;o&quot;,15:&quot;p&quot;,16:&quot;q&quot;,17:&quot;r&quot;,18:&quot;s&quot;};
 return pts[pt.x]+pts[pt.y];
-},expandCompressedPoints:function(_11f){
-var _120;
+},expandCompressedPoints:function(_120){
+var _121;
 var ul,lr;
 var x,y;
-var _125=[];
+var _126=[];
 var hits=[];
-for(var i=0;i&lt;_11f.length;i++){
-_120=_11f[i].split(/:/);
-if(_120.length&gt;1){
-ul=this.sgfCoordToPoint(_120[0]);
-lr=this.sgfCoordToPoint(_120[1]);
+for(var i=0;i&lt;_120.length;i++){
+_121=_120[i].split(/:/);
+if(_121.length&gt;1){
+ul=this.sgfCoordToPoint(_121[0]);
+lr=this.sgfCoordToPoint(_121[1]);
 for(x=ul.x;x&lt;=lr.x;x++){
 for(y=ul.y;y&lt;=lr.y;y++){
-_125.push(this.pointToSgfCoord({x:x,y:y}));
+_126.push(this.pointToSgfCoord({x:x,y:y}));
 }
 }
 hits.push(i);
 }
 }
-_11f=_11f.concat(_125);
-return _11f;
+_120=_120.concat(_126);
+return _120;
 },setPermalink:function(){
 if(!this.permalinkable){
 return true;</diff>
      <filename>player/js/all.compressed.js</filename>
    </modified>
    <modified>
      <diff>@@ -412,8 +412,7 @@ eidogo.Player.prototype = {
     },
 
     /**
-     * Create our board, tie it to a Rules instance, and add appropriate event
-     * handlers. This can be called multiple times.
+     * Create our board. This can be called multiple times.
     **/
     createBoard: function(size) {
         size = size || 19;
@@ -436,7 +435,7 @@ eidogo.Player.prototype = {
     /**
      * Calculates the crop area to use based on the widest distance between
      * stones and markers in this game. We're conservative with respect to
-     * checking markers.
+     * checking markers: only labels.
     **/
     calcShrinkToFit: function(size) {
         // leftmost, topmost, rightmost, bottommost
@@ -445,7 +444,7 @@ eidogo.Player.prototype = {
         var me = this;
         // find all points occupied by stones or labels
         var traverse = function(tree) {
-            var i, j, node, coord, len = tree.nodes.length;
+            var i, j, prop, node, coord, len = tree.nodes.length;
             for (i = 0; i &lt; len; i++) {
                 for (prop in tree.nodes[i]) {
                     if (/^(W|B|AW|AB|LB)$/.test(prop)) {
@@ -648,7 +647,7 @@ eidogo.Player.prototype = {
             if (!this.cursor.hasNext()) {
                 // not sure if it's safe to say &quot;WRONG&quot; -- that would work for
                 // goproblems.com SGFs but I don't know about others
-                this.prependComment(&quot;End of variation&quot;);
+                this.prependComment(t['end of variation']);
             }
         }.bind(this), 200);
     },
@@ -911,6 +910,12 @@ eidogo.Player.prototype = {
         this.createMove('tt');
     },
 
+    /**
+     * Handle a mouse-down event on a particular point. This function gets
+     * called by the board renderer, which handles the actual browser event
+     * attachment (or Flash event handling, or whatever) and passes along
+     * the appropriate board coordinate.
+    **/
     handleBoardMouseDown: function(x, y, e) {
         if (this.domLoading) return;
         if (!this.boundsCheck(x, y, [0, this.board.boardSize-1])) return;
@@ -925,6 +930,9 @@ eidogo.Player.prototype = {
         }
     },
 
+    /**
+     * Called by the board renderer upon hover, with appropriate coordinate
+    **/
     handleBoardHover: function(x, y, e) {
         if (this.domLoading) return;
         if (this.mouseDown || this.regionBegun) {
@@ -945,6 +953,9 @@ eidogo.Player.prototype = {
         }
     },
 
+    /**
+     * Called by the board renderer upon mouse up, with appropriate coordinate
+    **/
     handleBoardMouseUp: function(x, y, e) {
         if (this.domLoading) return;
         
@@ -1034,6 +1045,9 @@ eidogo.Player.prototype = {
         }
     },
     
+    /**
+     * This prevents region selection from getting stuck in drag mode
+    **/
     handleDocMouseUp: function(evt) {
         if (this.domLoading) return true;
         if (this.mode == &quot;region&quot; &amp;&amp; this.regionBegun &amp;&amp; !this.regionClickSelect) {
@@ -1046,6 +1060,10 @@ eidogo.Player.prototype = {
         return true;
     },
     
+    /**
+     * Check whether a point falls within a given region (left, top, right,
+     * bottom)
+    **/
     boundsCheck: function(x, y, region) {
         if (region.length == 2) {
             region[3] = region[2] = region[1];
@@ -1055,6 +1073,10 @@ eidogo.Player.prototype = {
             x &lt;= region[2] &amp;&amp; y &lt;= region[3]);
     },
 
+    /**
+     * Return a top-left-width-height array based on the left-top-right-bottom
+     * selection region
+    **/
     getRegionBounds: function() {
         // top, left, width, height
         var l = this.regionLeft;
@@ -1072,15 +1094,25 @@ eidogo.Player.prototype = {
         return [t, l, w, h];
     },
 
+    /**
+     * Tell the board renderer to show the search region
+    **/
     showRegion: function() {
         var bounds = this.getRegionBounds();
         this.board.renderer.showRegion(bounds);
     },
     
+    /**
+     * Tell the board renderer to hide the search region
+    **/
     hideRegion: function() {
         this.board.renderer.hideRegion();
     },
     
+    /**
+     * Set up a board position to represent a search pattern, then start
+     * the search
+    **/
     loadSearch: function(q, dim, p, a) {
         var blankGame = {nodes: [], trees: [{nodes: [{SZ: this.board.boardSize}], trees: []}]};
         this.load(blankGame);
@@ -1137,6 +1169,10 @@ eidogo.Player.prototype = {
         this.searchRegion();
     },
     
+    /**
+     * Call out to our external handler to perform a pattern search. Also
+     * prevent meaningless or overly-simple searches.
+    **/
     searchRegion: function() {
         if (this.searching) return;
         this.searching = true;
@@ -1250,6 +1286,10 @@ eidogo.Player.prototype = {
         ajax('get', this.searchUrl, params, success, failure, this, 45000);     
     },
     
+    /**
+     * Load a particular search result. This gets called via the HTML
+     * output by the external search handler.
+    **/
     loadSearchResult: function(e) {
         this.nowLoading();
         var target = e.target || e.srcElement;
@@ -1278,6 +1318,9 @@ eidogo.Player.prototype = {
         stopEvent(e);
     },
     
+    /**
+     * Close the search pane
+    **/
     closeSearch: function() {
         this.showingSearch = false;
         hide(this.dom.searchContainer);
@@ -1362,6 +1405,9 @@ eidogo.Player.prototype = {
         this.unsavedChanges = true;
     },
 
+    /**
+     * Keyboard shortcut handling
+    **/
     handleKeypress: function(e) {
         if (this.editingComment) return true;
         var charCode = e.keyCode || e.charCode;
@@ -1439,6 +1485,9 @@ eidogo.Player.prototype = {
         }
     },
 
+    /**
+     * Parse and display the game's info
+    **/
     showInfo: function() {
         this.dom.infoGame.innerHTML = &quot;&quot;;
         this.dom.whiteName.innerHTML = &quot;&quot;;
@@ -1480,25 +1529,16 @@ eidogo.Player.prototype = {
         this.dom.infoGame.appendChild(dl);
     },
 
+    /**
+     * Handle tool switching
+    **/
     selectTool: function(tool) {
         var cursor;
         hide(this.dom.scoreEst);
         if (tool == &quot;region&quot;) {
             cursor = &quot;crosshair&quot;;
         } else if (tool == &quot;comment&quot;) {
-            this.closeSearch();
-            var ta = this.dom.commentsEdit;
-            ta.style.position = &quot;absolute&quot;;
-            ta.style.top = this.dom.comments.offsetTop + &quot;px&quot;;
-            ta.style.left = this.dom.comments.offsetLeft + &quot;px&quot;;
-            show(this.dom.shade);
-            this.dom.comments.innerHTML = &quot;&quot;;
-            this.dom.player.appendChild(ta);
-            show(ta);
-            show(this.dom.commentsEditDone);
-            this.dom.commentsEditTa.value = this.cursor.node.C || &quot;&quot;;
-            this.dom.commentsEditTa.focus();
-            this.editingComment = true;
+            this.startEditComment();
         } else {
             cursor = &quot;default&quot;;
             this.regionBegun = false;
@@ -1512,6 +1552,22 @@ eidogo.Player.prototype = {
         this.dom.toolsSelect.value = tool;
     },
     
+    startEditComment: function() {
+        this.closeSearch();
+        var ta = this.dom.commentsEdit;
+        ta.style.position = &quot;absolute&quot;;
+        ta.style.top = this.dom.comments.offsetTop + &quot;px&quot;;
+        ta.style.left = this.dom.comments.offsetLeft + &quot;px&quot;;
+        show(this.dom.shade);
+        this.dom.comments.innerHTML = &quot;&quot;;
+        this.dom.player.appendChild(ta);
+        show(ta);
+        show(this.dom.commentsEditDone);
+        this.dom.commentsEditTa.value = this.cursor.node.C || &quot;&quot;;
+        this.dom.commentsEditTa.focus();
+        this.editingComment = true;  
+    },
+    
     finishEditComment: function() {
         var oldC = this.cursor.node.C;
         var newC = this.dom.commentsEditTa.value;
@@ -1526,16 +1582,22 @@ eidogo.Player.prototype = {
         this.refresh();
     },
 
+    /**
+     * Update all our UI elements to reflect the current game state
+    **/
     updateControls: function() {
+        // move number
         this.dom.moveNumber.innerHTML = (this.moveNumber ?
             (t['move'] + &quot; &quot; + this.moveNumber) :
             (this.permalinkable ? &quot;permalink&quot; : &quot;&quot;));
     
+        // captures
         this.dom.whiteCaptures.innerHTML = t['captures'] +
             &quot;: &lt;span&gt;&quot; + this.board.captures.W + &quot;&lt;/span&gt;&quot;;
         this.dom.blackCaptures.innerHTML = t['captures'] +
             &quot;: &lt;span&gt;&quot; + this.board.captures.B + &quot;&lt;/span&gt;&quot;;
     
+        // time
         this.dom.whiteTime.innerHTML = t['time left'] + &quot;: &lt;span&gt;&quot; +
             (this.timeW ? this.timeW : &quot;--&quot;) + &quot;&lt;/span&gt;&quot;;
         this.dom.blackTime.innerHTML = t['time left'] + &quot;: &lt;span&gt;&quot; +
@@ -1614,6 +1676,10 @@ eidogo.Player.prototype = {
         this.moveNumber = num;
     },
 
+    /**
+     * Play a move on the board and apply rules to it. This is different from
+     * merely adding a stone.
+    **/
     playMove: function(coord, color, noRender) {
         color = color || this.currentColor;
         this.currentColor = (color == &quot;B&quot; ? &quot;W&quot; : &quot;B&quot;);
@@ -1688,6 +1754,9 @@ eidogo.Player.prototype = {
         }
     },
 
+    /**
+     * Good move, bad move, etc
+    **/
     showAnnotation: function(value, type) {
         var msg;
         switch (type) {
@@ -1710,12 +1779,18 @@ eidogo.Player.prototype = {
         this.dom.comments.innerHTML += comments.replace(/\n/g, &quot;&lt;br /&gt;&quot;);
     },
 
+    /**
+     * For special notices
+    **/
     prependComment: function(content, cls) {
         cls = cls || &quot;comment-status&quot;;
         this.dom.comments.innerHTML = &quot;&lt;div class='&quot; + cls + &quot;'&gt;&quot; +
             content + &quot;&lt;/div&gt;&quot; + this.dom.comments.innerHTML;
     },
     
+    /**
+     * Redirect to a download handler or attempt to display data inline
+    **/
     downloadSgf: function(evt) {
         stopEvent(evt);
         if (this.downloadUrl) {
@@ -1730,6 +1805,9 @@ eidogo.Player.prototype = {
         }
     },
     
+    /**
+     * Send SGF data to a file-saving handler
+    **/
     save: function(evt) {
         stopEvent(evt);
         var success = function(req) {</diff>
      <filename>player/js/player.js</filename>
    </modified>
    <modified>
      <diff>@@ -6,10 +6,12 @@
 
 &lt;p&gt;The EidoGo Player (SGF viewer and editor) is an independent piece and can be
     plugged into any webpage. The basic Player is entirely client-side (browser-based)
-    and does not include the joseki tutor, pattern searching, or saving features.
+    and does not include the joseki tutor, pattern searching, GNU Go, or saving features.
     To use these features, you must set up code server-side (see site source code below).&lt;/p&gt;
 
-&lt;p&gt;All source code is licensed under the &lt;a href=&quot;http://www.fsf.org/licensing/licenses/agpl-3.0.html&quot;&gt;AGPLv3&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;All source code is licensed under the &lt;a href=&quot;http://www.fsf.org/licensing/licenses/agpl-3.0.html&quot;&gt;AGPLv3&lt;/a&gt;.
+    In short, this means if you modify the source code, you must allow everyone to see and use those changes
+    &amp;mdash; share and share alike!&lt;/p&gt;
 
 &lt;h3&gt;Quick Start&lt;/h3&gt;
 
@@ -22,7 +24,14 @@ download page&lt;/a&gt; and put the following into your webpage:&lt;/p&gt;
 
 &lt;p&gt;&lt;a href=&quot;/example.html&quot;&gt;Here is an example of this in action.&lt;/a&gt;&lt;/p&gt;
 
-&lt;p&gt;You can include multiple Players on a page. See the two example HTML files in the Player download for more options.&lt;/p&gt;
+&lt;div style=&quot;float: right; margin-left: 20px&quot; class=&quot;eidogo-player-problem&quot; sgf=&quot;sgf/problem.sgf&quot;&gt;&lt;/div&gt;
+
+&lt;p&gt;You can also use the problem-solving mode (example on right):&lt;/p&gt;
+
+&lt;pre style='width: 75%'&gt;&lt;code&gt;&amp;lt;div class=&amp;quot;eidogo-player-problem&amp;quot; sgf=&amp;quot;path/to/sgf/file.sgf&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;
+
+&lt;p&gt;You can include multiple Players on a page. See the example HTML files in the Player download for more options.&lt;/p&gt;
 
 &lt;p&gt;If you use the EidoGo Player on your site, &lt;script type=&quot;text/javascript&quot;&gt;document.write(
 &quot;&lt;n uers=\&quot;znvygb:wx\100gva\056ah\&quot;&gt;yrg zr xabj&lt;\057n&gt;&quot;.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c&lt;=&quot;Z&quot;?90:122)&gt;=(c=c.charCodeAt(0)+13)?c:c-26);}));</diff>
      <filename>source.phtml</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a4ef9a70b458f56b2a3946586a69273e65ec9dc0</id>
    </parent>
  </parents>
  <author>
    <name>jkkramer</name>
    <email>jkkramer@3a017fa3-8d26-0410-b3dd-4f2ae428da9e</email>
  </author>
  <url>http://github.com/jkk/eidogo/commit/1f65d5068a2c6abeefcc9ef843d54caf629d29cc</url>
  <id>1f65d5068a2c6abeefcc9ef843d54caf629d29cc</id>
  <committed-date>2008-01-17T14:48:58-08:00</committed-date>
  <authored-date>2008-01-17T14:48:58-08:00</authored-date>
  <message>cleanup, problem instructions, separate out swfobject.js

git-svn-id: https://eidogo.googlecode.com/svn/trunk@94 3a017fa3-8d26-0410-b3dd-4f2ae428da9e</message>
  <tree>ff290bf9f8ac230bcfc49ba81aa81739ad945d01</tree>
  <committer>
    <name>jkkramer</name>
    <email>jkkramer@3a017fa3-8d26-0410-b3dd-4f2ae428da9e</email>
  </committer>
</commit>
