anchor.diff:  
   import 'dart:async';
   import 'dart:convert' show UTF8, JSON;
  +import 'dart:io' show File, FileMode;
  +import 'dart:math' as math;
   
   import 'package:syncbase/syncbase_client.dart'
       show SyncbaseDatabase, SyncbaseTable, WatchChange, WatchChangeTypes;
  
positive.code:   SyncbaseTable tb;
    static final String tbName = util.tableNameGames;
  
    // The LogWriter takes a callback for watch updates, the list of users, and
    // the logPrefix to write at on table.
    LogWriter(this.updateCallback, this.users)
        : _cc = new CroupierClient.singleton() {
      _prepareLog();
    }
  
    Future _prepareLog() async {
  
negative.code: 
    Future _onChange(String rowKey, String value, bool duringScan) async {
      String key = rowKey.replaceFirst("${this.logPrefix}/", "");
      String timeStr = key.split("-")[0];
      String front = timeStr.substring(0, 8);
      String back = timeStr.substring(8);
      int time = int.parse(front) * math.pow(10, back.length) + int.parse(back);
      await _diffFileLog("Key: ${key} Value: ${value}",
          new DateTime.fromMillisecondsSinceEpoch(time));
  
      if (_isProposalKey(key)) {
        if (value != null && !_acceptedProposals.contains(key) && !duringScan) {
  