anchor.diff:  
   -type shp_metric_type() :: 'm' | 'mr' | 'g' | 'h'.
   
  --record(shp_metric, {key :: binary(),
  -                     value :: integer(),
  -                     type :: shp_metric_type(),
  -                     sample_rate :: float()}).
  -
  -% 1|26\nmyWebservice.requests:1|m
  +-record(shp_metric, {key         :: binary(),
  +                     value       :: integer(),
  +                     type        :: shp_metric_type(),
  +                     sample_rate :: float() | undefined}).
   
   -spec parse_packet(binary()) ->
           {bad_version, binary()}
           | {bad_length, {integer(), binary()}}
  -        | {?SHP_VERSION, non_neg_integer(), [#shp_metric{}]}.
  -                                     
  +        | {?SHP_VERSION, non_neg_integer(),
  +           [#shp_metric{}|{bad_metric, term()}]}.
  +
  +% @doc Parse a binary in Stats Hero Protocol Version 1
  +%
   parse_packet(<<"1|", Rest/binary>>) ->
       parse_packet(Rest, []);
   parse_packet(Packet) when is_binary(Packet) ->
  
positive.code:     
      end.
  
  parse_metric(Bin) ->
      try
          [Key, Value, Type | Rate] = binary:split(Bin, [<<":">>, <<"|">>],
  
negative.code: parse_packet(<<>>, Acc) ->
      {bad_length, {lists:reverse(Acc), <<>>}}.
  
  -spec parse_body({non_neg_integer(), binary()}) ->
      [(#shp_metric{} | {bad_metric, term()})].
  
  parse_body({Length, GZBody = <<31, 139, _Rest/binary>>}) ->
      Body = zlib:gunzip(GZBody),
      parse_body({Length, Body});
  