anchor.diff:         parts=[],
          name=undefined,
          headers=pending,
  +       last=undefined,
          acc=[],
          cb=Callback,
          cb_data=Data}.
  
positive.code: handle_part_cb({skip, Data}, Name, _, MP) ->
      MP#mp{name=Name, headers=skipping, cb_data=Data}.
  
  start_body(Data, MP) -> MP#mp{acc=[Data]}.
  
  add_cur(#mp{headers=skipping}=MP) ->
      reset_part(MP);
  add_cur(#mp{name=Name, headers=Headers, acc=Acc, parts=Parts}=MP) ->
      Body = finalize_body(Acc),
      Part = {Name, {Headers, Body}},
      reset_part(MP#mp{parts=[Part|Parts]}).
  
  reset_part(MP) ->
      MP#mp{name=undefined, headers=pending, acc=[]}.
  
  -define(FORM_DATA_NAME_RE, <<"form-data; *name=\"(.*?)\"">>).
  
  
negative.code:       Window, Data, MP);
  try_headers(_Window, _Data, #mp{headers=skipping}=MP) ->
      MP;
  try_headers(_Window, Data, MP) ->
      push_data(Data, MP).
  
  push_data(Data, #mp{last=undefined}=MP) ->
      MP#mp{last=Data};
  push_data(Data, #mp{last=Last, acc=Acc}=MP) ->
      MP#mp{last=Data, acc=[Last|Acc]}.
  
  handle_match_headers(nomatch, _Window, Data, MP) ->
      push_data(Data, MP);
  handle_match_headers({Pos, Len}, Window, _Data, MP) ->
      <<Prev:Pos/binary, _:Len/binary, Next/binary>> = Window,
      start_body(Next, finalize_headers(Prev, MP)).
  