anchor.diff:               indent(4, f("Msg.~n~n"))]
       end.
   
  -format_field_adders(MsgName, MsgDef) ->
  +format_field_adders(_MsgName, MsgDef) when length(MsgDef) =< 250 ->
  +    "";
  +format_field_adders(MsgName, MsgDef) when length(MsgDef) > 250 ->
       [case classify_field_merge_action(FieldDef) of
            msgmerge  ->
                format_field_msgmerge_adder(MsgName, FieldDef);
  
positive.code:      f("    <<_:Length/binary, Rest2/binary>> = Rest,~n"),
       f("    ~p(Rest2, 0, 0, Msg).~n~n", [mk_fn(d_read_field_def_, MsgName)])].
  
  format_32bit_skipper(MsgName) -> format_bit_skipper(MsgName, 32).
  
  format_64bit_skipper(MsgName) -> format_bit_skipper(MsgName, 64).
  
  format_bit_skipper(MsgName, BitLen) ->
      SkipFn = mk_fn(skip_, BitLen, MsgName),
      [f("~p(<<_:~w, Rest/binary>>, Msg) ->~n", [SkipFn, BitLen]),
       f("    ~p(Rest, 0, 0, Msg).~n~n",  [mk_fn(d_read_field_def_, MsgName)])].
  
negative.code:      f("    ~p(Rest2, 0, 0, NewMsg).~n~n", [mk_fn(d_read_field_def_, MsgName)]),
       format_packed_field_seq_decoder(MsgName, FieldDef, Opts)].
  
  format_vi_based_field_decoder(MsgName, FieldDef, NF, Opts) when NF =< 250 ->
      #field{type=Type, rnum=RNum, name=FName}=FieldDef,
      Merge = classify_field_merge_action(FieldDef),
      PassFieldVars = [[", ", f("F~w", [I])] || I <- lists:seq(1, NF)],
      InFieldVars = [[", ", if I == RNum-1, Merge == overwrite -> "_";
                               I == RNum-1, Merge == seqadd    -> f("F~w", [I]);
                               I == RNum-1, Merge == msgmerge  -> f("F~w", [I]);
                               I /= RNum-1                     -> f("F~w", [I])
                            end]
                     || I <- lists:seq(1, NF)],
      MergeCode = case Merge of
                      overwrite -> "";
                      seqadd    -> f("    FValue2 = [FValue | F~w],~n", [RNum-1]);
                      msgmerge  -> {msg,FMsgName} = Type,
                                   f("    FValue2 = if F~w == undefined ->~n"
                                     "                     FValue;~n"
                                     "                 true ->~n"
                                     "                     ~p(F~w, FValue)~n"
                                     "              end,~n",
                                     [RNum-1,
                                      mk_fn(merge_msg_, FMsgName), RNum-1])
                  end,
      OutFieldVars = [[", ", if I == RNum-1, Merge == overwrite -> "FValue";
                                I == RNum-1, Merge == seqadd    -> "FValue2";
                                I == RNum-1, Merge == msgmerge  -> "FValue2";
                                I /= RNum-1                     -> f("F~w", [I])
                             end]
                      || I <- lists:seq(1, NF)],
      BValueExpr = "X bsl N + Acc",
      {FValueCode, RestVar} = mk_unpack_vi(4, "FValue", BValueExpr, Type, "Rest",
                                           Opts),
      [f("~p(<<1:1, X:7, Rest/binary>>, N, Acc~s) ->~n"
         "    ~p(Rest, N+7, X bsl N + Acc~s);~n",
         [mk_fn(d_field_, MsgName, FName), PassFieldVars,
          mk_fn(d_field_, MsgName, FName), PassFieldVars]),
       f("~p(<<0:1, X:7, Rest/binary>>, N, Acc~s) ->~n",
         [mk_fn(d_field_, MsgName, FName), InFieldVars]),
       f("~s",
         [FValueCode]),
       f("~s",
         [MergeCode]),
       f("    ~p(~s, 0, 0~s).~n",
         [mk_fn(d_read_field_def_, MsgName), RestVar, OutFieldVars])];
  format_vi_based_field_decoder(MsgName, FieldDef, NF, Opts) when NF > 250 ->
      #field{type=Type, name=FName}=FieldDef,
      BValueExpr = "X bsl N + Acc",
      {FValueCode, RestVar} = mk_unpack_vi(4, "FValue", BValueExpr, Type, "Rest",
                                           Opts),
  