anchor.diff:  
   plugin(AppFile) ->
       {ok, [{application, Name, Attrs}]} = file:consult(AppFile),
  -    Ver = proplists:get_value(vsn, Attrs),
  +    Ver = proplists:get_value(vsn, Attrs, "0"),
       Descr = proplists:get_value(description, Attrs, ""),
       #mqtt_plugin{name = Name, version = Ver, descr = Descr}.
   
  
positive.code: 
  stop() ->
      %% stop all plugins
      ok.
  
  %%------------------------------------------------------------------------------
  %% @doc Unload all plugins
  %% @end
  %%------------------------------------------------------------------------------
  -spec unload_all_plugins() -> [{App :: atom(), ok | {error, any()}}].
  unload_all_plugins() ->
      PluginApps = application:get_env(emqttd, plugins, []).
      %%[{App, unload_plugin(App)} || App <- PluginApps].
  
  
negative.code: %%------------------------------------------------------------------------------
  -spec load(atom()) -> ok | {error, any()}.
  load(PluginName) when is_atom(PluginName) ->
      case lists:member(PluginName, apps(started)) of
          true ->
              lager:info("plugin ~p is started", [PluginName]),
              {error, already_started};
          false ->
              case lists:member(PluginName, apps(plugin)) of
                  true ->
                      load_plugin(PluginName);
                  false ->
                      lager:info("plugin ~p is not found", [PluginName]),
                      {error, not_foun}
              end
      end.
      
  -spec load_plugin(App :: atom()) -> {ok, list()} | {error, any()}.
  load_plugin(PluginName) ->
      case start_app(PluginName) of
          {ok, Started} ->
              plugin_loaded(PluginName),
              {ok, Started};
          {error, Error} ->
              {error, Error}
      end.
  
  start_app(App) ->
      case application:ensure_all_started(App) of
          {ok, Started} ->
              lager:info("started apps: ~p, load plugin ~p successfully", [Started, App]),
              {ok, Started};
          {error, {ErrApp, Reason}} ->
              lager:error("load plugin ~p error, cannot start app ~s for ~p", [App, ErrApp, Reason]),
              {error, {ErrApp, Reason}}
      end.
  
  %%------------------------------------------------------------------------------
  %% @doc UnLoad Plugin
  