anchor.diff:  
   connected(keepalive_expired, State) ->
       lager:debug("[~p] stop due to ~p~n", [self(), keepalive_expired]),
  -    {stop, normal, State};
  -
  -connected(disconnect, State) ->
  -    lager:debug("[~p] stop due to ~p~n", [self(), disconnect]),
       {stop, normal, State}.
   
   -spec init(_) -> {ok, wait_for_connect, #state{}, ?CLOSE_AFTER}.
  
positive.code: 
  -spec disconnect(pid()) -> ok.
  disconnect(FsmPid) ->
      gen_fsm:send_event(FsmPid, disconnect).
  
  -spec in(pid(), #mqtt_frame{}) ->  ok.
  in(FsmPid, Event) ->
  
negative.code:         {NextStateName, NewState} ->
              {next_state, NextStateName, NewState, ?CLOSE_AFTER};
          Ret -> Ret
      end;
  handle_event(disconnect, StateName, State) ->
      lager:warning("[~p] stop in state ~p due to ~p~n", [self(), StateName, disconnect]),
      {stop, normal, State}.
  
  -spec handle_sync_event(_, _, _, #state{}) -> {reply, _, statename(), #state{}} | {stop, {error, {unknown_req, _}}, #state{}}.
  handle_sync_event({get_info, Items}, _From, StateName, State) ->
  