anchor.diff:  -type spawn_start_option() :: term().
   -export_type([spawn_start_option/0]).
   
  --type tick_start_option() :: {TickId :: term(), TickDuration :: pos_integer()}.
  +-type tick_start_option() ::
  +    ({TickId :: term(), TickDuration :: pos_integer()} |
  +     {TickId :: term(), TickDuration :: pos_integer(), TickSettings :: [tick_setting()]}).
   -export_type([tick_start_option/0]).
  +
  +-type tick_setting() :: skip_missed | dont_skip_missed.
  +-export_type([tick_setting/0]).
   
   -ifdef(pre18).
   -type timestamp() :: non_neg_integer().
  
positive.code:           id :: term(),
            duration_ns :: pos_integer(),
            deadline_ns :: timestamp(),
            generation :: non_neg_integer()
  }).
  -type tick() :: #tick{}.
  
  
negative.code:            {error, {already_started, pid()}} |
             {error, Reason :: term()}.
  start_link(Name, Mod, Args, Options) ->
      {TickedGServerOptions, GenServerOptions} = split_start_options(Options),
      gen_server:start_link(Name, ?MODULE, {Mod, Args, TickedGServerOptions}, GenServerOptions).
  
  %% ------------------------------------------------------------------
  %% gen_server Function Definitions
  %% ------------------------------------------------------------------
  
  -spec init({Mod :: module(), Args :: term(), TickedGServerOptions :: [{ticks, tick_start_option()}]})
          -> {ok, State :: term(), Timeout :: non_neg_integer()} |
             {stop, Reason :: term()} | ignore.
  init({Mod, Args, TickedGServerOptions}) ->
      RawTickOptions = proplists:get_value(ticks, TickedGServerOptions, []),
      TickOptions = lists:map(
                      fun ({TickId, TickDurationMS}) ->
                          {TickId, TickDurationMS, []};
                          ({TickId, TickDurationMS, TickSettings}) ->
                          {TickId, TickDurationMS, TickSettings}
                      end,
                      RawTickOptions),
      Ticks = lists:map(
                fun ({TickId, TickDurationMS, TickSettings}) ->
                    DontSkipMissed = (lists:member(dont_skip_missed, TickSettings) orelse
                                      not lists:member(skip_missed, TickSettings)),
                    #tick{id = TickId,
                          duration_ns = TickDurationMS * 1000000,
                          deadline_ns = now_timestamp_ns(),
                          generation = 0,
                          skip_missed = not DontSkipMissed}
                end,
                TickOptions),
      undefined = put(?PROCDIC_MODULE, Mod),
      undefined = put(?PROCDIC_TICKS, Ticks),
      inject_init_timeout(Mod:init(Args)).
  