anchor.diff:  -export([delete_scheduled_transfer_link/3, delete_active_transfer_link/2,
       delete_active_transfer_link/3, delete_past_transfer_link/3,
       add_scheduled_transfer_link/3, add_active_transfer_link/3,
  -    add_past_transfer_link/3, list_transfers/4, for_each_current_transfer/3, list_aggregated_transfers/5]).
  +    add_past_transfer_link/3, list_transfers/4, for_each_current_transfer/3,
  +    list_aggregated_transfers/5]).
   
   -ifdef(TEST).
  --export([umerge/4, umerge_tail/4]).
  +-export([umerge/4]).
   -endif.
   
   -type link_name() :: binary().
  --type list_elem() :: transfer:id() | {transfer:id() | link_name()}.
  +-type list_elem() :: transfer:id() | {transfer:id(), link_name()}.
   -type virtual_list_id() :: binary(). % ?(SCHEDULED|CURRENT|PAST)_TRANSFERS_KEY
   -type offset() :: non_neg_integer().
   -type list_limit() :: transfer:list_limit().
  
positive.code: %% Merged list will reach length of MaxSize.
  %% @end
  %%-------------------------------------------------------------------
  -spec umerge_tail([list_elem()], [list_elem()], [transfer:id()], non_neg_integer()) -> [transfer:id()].
  umerge_tail([], [], Merged, _Limit) ->
      lists:reverse(Merged);
  umerge_tail(_, _ , Merged, _Limit) when length(Merged) =:= _Limit ->
  
negative.code: %%     * elements from given range will be chosen after merging both lists
  %% @end
  %%-------------------------------------------------------------------
  -spec umerge([list_elem()], [list_elem()], non_neg_integer(), list_limit()) ->
      [transfer:id()].
  umerge(TransfersList1, TransfersList2, Offset, all) ->
      Merged = umerge_tail(TransfersList1, TransfersList2, [], all),
      lists:sublist(Merged, Offset + 1, length(Merged));
  