anchor.diff:          false                       -> State
       end.
   
  -passed_state_new(TraceId, Logger) -> {TraceId, Logger}.
  +passed_state_new(TraceId, Logger, MsgMapFun) -> 
  +    {TraceId, Logger, MsgMapFun}.
  +
   passed_state_trace_id(State)      -> element(1, State).
   passed_state_logger(State)        -> element(2, State).
  +passed_state_msg_map_fun(State)   -> element(3, State).
   
   own_passed_state_put(State)       -> erlang:put(trace_mpath, State), ok.
   own_passed_state_get()            -> erlang:get(trace_mpath).
  
positive.code:     From = normalize_pidinfo(FromPid),
      To = normalize_pidinfo(ToPid),
      Now = os:timestamp(),
      case  passed_state_logger(PState) of
          io_format ->
              io:format("~p recv ~.0p -> ~.0p:~n  ~.0p.~n",
                        [util:readable_utc_time(Now), From, To, Msg]);
          {log_collector, LoggerPid} ->
              TraceId = passed_state_trace_id(PState),
              send_log_msg(LoggerPid, {log_recv, Now, TraceId, From, To, Msg})
      end,
      ok.
  
  
negative.code:                          Source::pidinfo(), Dest::pidinfo(), comm:message()}.
  -type trace_event()  :: send_event() | info_event() | recv_event().
  -type trace()        :: [trace_event()].
  -type msg_map_fun()  :: fun((comm:message()) -> comm:message()).
  -type passed_state() :: {trace_id(), logger(), msg_map_fun()}.
  -type gc_mpath_msg() :: {'$gen_component', trace_mpath, passed_state(),
                           Source::pidinfo(), Dest::pidinfo(), comm:message()}.
  
  