anchor.diff:  % erl> S = <some term>.
   % erl> {S, <<>>} = msgpack:unpack( msgpack:pack(S) ).
   -type reason() ::  enomem | badarg | no_code_matches.
  --type msgpack_term() :: [msgpack_term()] | {[{msgpack_term(),msgpack_term()}]} | integer() | float().
  +-type msgpack_term() :: [msgpack_term()]
  +		      | {[{msgpack_term(),msgpack_term()}]}
  +		      | integer() | float() | binary().
   
   % ===== external APIs ===== %
   -spec pack(Term::msgpack_term()) -> binary().
  -pack(O) when is_integer(O) andalso O < 0 ->
  -    pack_int_(O);
  -pack(O) when is_integer(O) ->
  -    pack_uint_(O);
  -pack(O) when is_float(O) ->
  -    pack_double(O);
  +pack(I) when is_integer(I) andalso I < 0 ->
  +    pack_int_(I);
  +pack(I) when is_integer(I) ->
  +    pack_uint_(I);
  +pack(F) when is_float(F) ->
  +    pack_double(F);
   pack(nil) ->
  -    pack_nil();
  -pack(Bool) when is_atom(Bool) ->
  -    pack_bool(Bool);
  +    << 16#C0:8 >>;
  +pack(true) ->
  +    << 16#C3:8 >>;
  +pack(false) ->
  +    << 16#C2:8 >>;
   pack(Bin) when is_binary(Bin) ->
       pack_raw(Bin);
   pack(List)  when is_list(List) ->
  
positive.code:     pack_map(Map);
  pack(Map) when is_tuple(Map), element(1,Map)=:=dict ->
      pack_map(dict:to_list(Map));
  pack(_O) ->
      {error, undefined}.
  
  % unpacking.
  
negative.code:     {Term, <<>>}=msgpack:unpack(OrigBin);
  test_p(I,_,OrigBin,Len) when I < Len->
      <<Bin:I/binary, _/binary>> = OrigBin,
      case msgpack:unpack(Bin) of
  	{more, N} when not is_integer(N) ->
  	    ?assertEqual(undefined, N);
  	{more, N} ->
  	    ?assert( N < Len )
      end.
  
  partial_test()-> % error handling test.
      Term = lists:seq(0, 45),
  