anchor.diff:  
   now_diff_us(Timestamp) ->
       timer:now_diff(os:timestamp(), Timestamp).
  +
  +load_ips(File) ->
  +    {ok, Content} = file:read_file(File),
  +    load_ips(Content, []).
  +
  +load_ips(<<Ip1, Ip2, Ip3, Ip4, Rest/binary>>, Ips) ->
  +    Ip = (Ip1 bsl 24) + (Ip2 bsl 16) + (Ip3 bsl 8) + Ip4,
  +    load_ips(Rest, [Ip | Ips]);
  +load_ips(<<>>, Ips) ->
  +    Ips.
  +
  +benchmark_ips(BertFile, BlacklistFile, Threshold, IpFile) ->
  +    Index = build_full_index(BertFile, BlacklistFile, Threshold),
  +    Ips = load_ips(IpFile),
  +    io:format("Starting run~n"),
  +    erlang:garbage_collect(),
  +    Timestamp = os:timestamp(),
  +    benchmark_run_ips(Index, Ips),
  +    Time = now_diff_us(Timestamp),
  +    AverageLookup = Time / length(Ips),
  +    io:format("Average lookup took ~p microseconds~n",[AverageLookup]).
   
   benchmark(BertFile, BlacklistFile, Threshold, Runs, Runsize) ->
       Index = build_full_index(BertFile, BlacklistFile, Threshold),
  
positive.code: run_range(Index, Start, End) ->
      run_range(Index, Start, End, []).
  
  run_range(Index, Start, End, Results) when Start =< End ->
      Result = erl_ip_index:lookup_subnet_nif(Index, Start, 32),
      run_range(Index, Start+1, End, [Result | Results]);
  run_range(_, _, _, Results) ->
  
negative.code: 
  build_full_index(BertFile, BlacklistFile, Threshold) ->
      Lists = build_full_lists(BertFile, BlacklistFile),
      erl_ip_index:async_build_index(Lists, Threshold).
  
  build_full_lists(BertFile, BlacklistFile) ->
      BlacklistedLists = build_blacklisted_lists(BlacklistFile),
  