anchor.diff:          ret[key] = v;
           return parser.getPeek(1);
         }).then((List<int> v) {
  -        if (v[0] == 0x65) { //e
  +        if (v[0] == 0x65) {
  +          //e
             completer.complete(ret);
           } else {
             elem();
           }
  -      }).catchError((e){
  +      }).catchError((e) {
           print("dict error ${parser.index}");
           completer.completeError(e);
         });
  -    };
  +    }
  +    ;
       elem();
       return completer.future;
     }
  
positive.code:     return completer.future;
    }
  
  
    Future<int> decodeNumber(hetima.EasyParser parser) {
      Completer<int> completer = new Completer();
      int num = 0;
      parser.nextString("i").then((String v) {
        return parser.nextBytePatternByUnmatch(new hetima.EasyParserIncludeMatcher(DIGIT));
      }).then((List<int> numList) {
        num = intList2int(numList);
        return parser.nextString("e");
      }).then((String v) {
        completer.complete(num);
      }).catchError((e) {
        completer.completeError(e);
      });
      return completer.future;
    }
  
    Future<String> decodeString(hetima.EasyParser parser) {
      Completer<String> completer = new Completer();
      decodeBytes(parser).then((List<int> v) {
        try {
          completer.complete(convert.UTF8.decode(v));
        } catch (e) {
          completer.completeError(e);
        }
      }).catchError((e) {
        completer.completeError(e);
      });
      return completer.future;
    }
  
    Future<List<int>> decodeBytes(hetima.EasyParser parser) {
      Completer<List<int>> completer = new Completer();
      int length = 0;
      parser.nextBytePatternByUnmatch(new hetima.EasyParserIncludeMatcher(DIGIT)).then((List<int> lengthList) {
        if (lengthList.length == 0) {
          throw new HetiBencodeParseError("byte:length=0");
        }
        length = intList2int(lengthList);
        return parser.nextString(":");
      }).then((v) {
        return parser.nextBuffer(length);
      }).then((List<int> value) {
        if (value.length == length) {
          completer.complete(value);
        } else {
          throw new HetiBencodeParseError("byte:length:" + value.length.toString() + "==" + length.toString());
        }
      }).catchError((e){
        completer.completeError(e);
      });
      return completer.future;
    }
  
    static int intList2int(List<int> numList) {
  
negative.code:         return parser.getPeek(1).then((List<int> v) {
            if (v.length == 0) {
              completer.completeError(new HetiBencodeParseError("list elm"));
            } else if (v[0] == 0x65) {
              //e
              completer.complete(ret);
            } else {
              return elem();
  