anchor.diff:           gen_pubrec/1,
            gen_pubrel/1,
            gen_pubcomp/1,
  +         gen_subscribe/2,
            gen_subscribe/3,
            gen_suback/2,
            gen_unsubscribe/2,
  
positive.code: gen_pubcomp(MId) ->
      iolist_to_binary(serialise(#mqtt_pubcomp{message_id=MId})).
  
  gen_subscribe(MId, Topic, Qos) ->
      iolist_to_binary(serialise(#mqtt_subscribe{topics=[{ensure_binary(Topic), Qos}], message_id=MId})).
  
  gen_suback(MId, Qos) ->
      iolist_to_binary(serialise(#mqtt_suback{qos_table=[Qos], message_id=MId})).
  
  gen_unsubscribe(MId, Topic) ->
      iolist_to_binary(serialise(#mqtt_unsubscribe{topics=[ensure_binary(Topic)], message_id=MId})).
  
negative.code:                     case parse_password(Rest2, UserNameFlag, PasswordFlag, Conn2) of
                          {ok, <<>>, Conn3} ->
                              Conn3;
                          {ok, _, _} ->
                              {error, invalid_rest_of_binary};
                          E -> E
                      end;
  