anchor.diff:      {ok, Value, Data2, Pos2} = unmarshal(Type, Data1, Pos1),
       {ok, #variant{type=Type, value=Value}, Data2, Pos2}.
   
  +
  +unmarshal_uint(Len, Data, Pos) when is_integer(Len) ->
  +    Bitlen = Len * 8,
  +    Pad = padding(Len, Pos),
  +    << 0:Pad, Value:Bitlen/native-unsigned, Data1/binary >> = Data,
  +    Pos1 = Pos + Pad div 8 + Len,
  +    {ok, Value, Data1, Pos1}.
  +
  +unmarshal_int(Len, Data, Pos) ->
  +    Bitlen = Len * 8,
  +    Pad = padding(Len, Pos),
  +    << 0:Pad, Value:Bitlen/native-signed, Data1/binary >> = Data,
  +    Pos1 = Pos + Pad div 8 + Len,
  +    {ok, Value, Data1, Pos1}.
   
   unmarshal_signature([], Res) ->
       Res;
  
positive.code:     case catch unmarshal_message(Data) of
  	{ok, Header, Data1} ->
  	    unmarshal_data(Data1, Res ++ [Header]);
  	{'EXIT', _Reason} ->
  	    {ok, Res, Data}
      end.
  
  
negative.code:     << Value:8, Data1/binary >> = Data,
      {ok, Value, Data1, Pos + 1};
  
  unmarshal(uint16, Data, Pos) ->
      unmarshal_uint(2, Data, Pos);
  
  unmarshal(uint32, Data, Pos) ->
      unmarshal_uint(4, Data, Pos);
  
  unmarshal(uint64, Data, Pos) ->
      unmarshal_uint(8, Data, Pos);
  
  unmarshal(int16, Data, Pos) ->
      unmarshal_int(2, Data, Pos);
  
  unmarshal(int32, Data, Pos) ->
      unmarshal_int(4, Data, Pos);
  
  unmarshal(int64, Data, Pos) ->
      unmarshal_int(8, Data, Pos);
  
  unmarshal(signature, Data, Pos) ->
      unmarshal_string(byte, Data, Pos);
  