anchor.diff:  
     List<_SlotMachineLine> _lines;
   
  -  Completer<String> _rollCompleter;
  +  Completer<Result> _rollCompleter;
   
     num _lastTime = 0;
   
  
positive.code:     _gradient.addColorStop(1, 'rgba(255,255,255,1)');
    }
  
    String get _currentResultText {
      if (_currentResults.any((result) => result == null)) return "";
      final positives = _currentResults.fold(
          0, (int sum, bool result) => sum += result ? 1 : 0);
      final negatives = slotLines - positives;
      if (allowCriticalSuccess && positives == slotLines)
        return _criticalSuccessMsg;
      if (allowCriticalFailure && negatives == slotLines)
        return _criticalFailureMsg;
      if (positives > negatives) return _successMsg;
      if (positives < negatives) return _failureMsg;
      // Slots are always odd.
      throw new StateError("Cannot decide success or fail.");
    }
  
    /// Start rolling the slot machine. Returns with the text of the result.
    Future<String> roll() {
      if (_rollCompleter != null) {
        throw new StateError("Cannot roll one slot machine twice.");
      }
      _rollCompleter = new Completer<String>();
  
      Future
          .wait([_successIcon.onLoad.first, _failureIcon.onLoad.first]).then((_) {
  
negative.code: 
      if (_lines.every((line) => line.isFinished)) {
        resultEl.text = _currentResultText;
        _rollCompleter.complete(_currentResult);
        return;
      }
  
      for (int i = 0; i < slotLines; i++) {
        final line = _lines[i];
        if (_timeOfStartOfRoll != null &&
            _lastTime - _timeOfStartOfRoll > line.fullSpeedMilliseconds) {
          line.isSlowingDown = true;
        }
        line.update(dt);
        _currentResults[i] = line.currentResult;
      }
  
      // Draw the gradient overlay.
  