anchor.diff:      return info.images.length > 0 ? info : null;
     }
   
  +  Buffer _input;
  +
     static const int TIFF_SIGNATURE = 42;
     static const int TIFF_LITTLE_ENDIAN = 0x4949;
     static const int TIFF_BIG_ENDIAN = 0x4d4d;
  
positive.code:    * If the file is not a valid Gif image, null is returned.
     */
    TiffInfo startDecode(List<int> bytes) {
      Buffer ptr = new Buffer(new Uint8List.fromList(bytes));
      info = _readHeader(ptr);
      return info;
    }
  
    Image decodeImage(List<int> data, {int frame: 0}) {
      Buffer ptr = new Buffer(new Uint8List.fromList(data));
  
  
negative.code:     return info.images[frame].decode(ptr);
    }
  
    /**
     * Decode all of the frames from an animation.  If the file is not an
     * animation, a single frame animation is returned.  If there was a problem
     * decoding the file, null is returned.
     */
    Animation decodeAnimation(List<int> data) {
      if (startDecode(data) == null) {
        return null;
      }
  
      Animation anim = new Animation();
      for (int i = 0, len = numFrames(); i < len; ++i) {
        Image image = decodeFrame(i);
        if (i == null) {
          continue;
        }
        anim.addFrame(image);
      }
  
      return anim;
    }
  