It's not very clear why this loop works - it feels like it should be obvious that the loop is advancing by two entries every time round the loop, but the second increment is hidden in the middle of the body.  Wide open for someone to add an if test in the middle of the loop body and screw it up.

This interface is pretty grim anyway.  I wonder whether we should revisit the way the stats are passed up in messages for this kind of mapped table, both to make it easier to parse at this end and to make it a bit more flexible (for example, what if we wanted to allow a table with multiple values per row).  Maybe something like a string per entry, with the format of the string being something like <index> = {"value", "value", "value", "value"} or even <index> = {"tag":"value", "tag":"value"} a la JSON.