<script>
if (window.testRunner)
    testRunner.dumpAsText();
</script>
<div tabindex="+4"></div>
<div tabindex="-4"></div>
<div tabindex="+-4"></div>
<div tabindex="-+4"></div>
<div tabindex="+04"></div>
<div tabindex="-04"></div>
<div tabindex="+"></div>
<div tabindex="-"></div>
<div tabindex="    +4"></div>
<div tabindex="    -4"></div>
<div tabindex="    +-4"></div>
<div tabindex="    -+4"></div>
<div tabindex="    +04"></div>
<div tabindex="    -04"></div>
<div tabindex="    +"></div>
<div tabindex="    -"></div>
<div tabindex="+4   "></div>
<div tabindex="-4   "></div>
<div tabindex="+-4   "></div>
<div tabindex="-+4   "></div>
<div tabindex="+04   "></div>
<div tabindex="-04   "></div>
<div tabindex="+    "></div>
<div tabindex="-    "></div>
<div tabindex="&#09;+4"></div>
<div tabindex="&#09;-4"></div>
<div tabindex="&#09;+-4"></div>
<div tabindex="&#09;-+4"></div>
<div tabindex="&#09;+04"></div>
<div tabindex="&#09;-04"></div>
<div tabindex="&#09;+"></div>
<div tabindex="&#09;-"></div>
<div tabindex="+4&#09;"></div>
<div tabindex="-4&#09;"></div>
<div tabindex="+-4&#09;"></div>
<div tabindex="-+4&#09;"></div>
<div tabindex="+04&#09;"></div>
<div tabindex="-04&#09;"></div>
<div tabindex="+&#09;"></div>
<div tabindex="-&#09;"></div>
<div tabindex="
+4"></div>
<div tabindex="
-4"></div>
<div tabindex="
+-4"></div>
<div tabindex="
-+4"></div>
<div tabindex="
+04"></div>
<div tabindex="
-04"></div>
<div tabindex="
+"></div>
<div tabindex="
-"></div>
<div tabindex="+4
"></div>
<div tabindex="-4
"></div>
<div tabindex="+-4
"></div>
<div tabindex="-+4
"></div>
<div tabindex="+04
"></div>
<div tabindex="-04
"></div>
<div tabindex="+
"></div>
<div tabindex="-
"></div>
<div tabindex="&nbsp;+4"></div>
<div tabindex="&nbsp;-4"></div>
<div tabindex="&nbsp;+-4"></div>
<div tabindex="&nbsp;-+4"></div>
<div tabindex="&nbsp;+04"></div>
<div tabindex="&nbsp;-04"></div>
<div tabindex="&nbsp;+"></div>
<div tabindex="&nbsp;-"></div>
<div tabindex="+4&nbsp;"></div>
<div tabindex="-4&nbsp;"></div>
<div tabindex="+-4&nbsp;"></div>
<div tabindex="-+4&nbsp;"></div>
<div tabindex="+04&nbsp;"></div>
<div tabindex="-04&nbsp;"></div>
<div tabindex="+&nbsp;"></div>
<div tabindex="-&nbsp;"></div>
<div tabindex="+4xx"></div>
<div tabindex="-4xx"></div>
<div tabindex="+-4xx"></div>
<div tabindex="-+4xx"></div>
<div tabindex="+04xx"></div>
<div tabindex="-04xx"></div>
<div tabindex="+xx"></div>
<div tabindex="-xx"></div>
<div tabindex=+4></div>
<div tabindex=-4></div>
<div tabindex=+-4></div>
<div tabindex=-+4></div>
<div tabindex=+04></div>
<div tabindex=-04></div>
<div tabindex=+></div>
<div tabindex=-></div>
<div tabindex=+4/></div>
<div tabindex=-4/></div>
<div tabindex=+-4/></div>
<div tabindex=-+4/></div>
<div tabindex=+04/></div>
<div tabindex=-04/></div>
<div tabindex=+/></div>
<div tabindex=-/></div>
<pre id="result"></pre>
<script>
function log(msg) {
    var line = document.createElement('pre');
    line.appendChild(document.createTextNode(msg));
    document.getElementById('result').appendChild(line);
}

var divs = document.getElementsByTagName('div');
for (var i = 0; i < divs.length; ++i) {
    var elmt = divs[i];
    log(elmt.outerHTML.replace('\t', '&#09;') + ' => ' + elmt.tabIndex);
}
</script>
