anchor.diff:  % of the task's input file, if the node is not in the task's blacklist.
   % The task may have several redundant inputs, so we need to find the
   % first one that matchs.
  --spec assign_task(task(), [load()], gb_tree(), [node()]) -> gb_tree().
  +-spec assign_task(task(), [load()], gb_tree(), [host()]) -> gb_tree().
   assign_task(Task, NodeStats, Tasks, Nodes) ->
       case Nodes -- Task#task.taskblack of
           [] ->
  
positive.code:             none
      end.
  
  -spec get_empty_nodes(pid(), [node()], non_neg_integer()) -> {ok, [node()]} | {error, term()}.
  get_empty_nodes(Job, AvailableNodes, Timeout) ->
      gen_server:call(Job, {get_empty_nodes, AvailableNodes}, Timeout).
  
  % Return an often empty subset of AvailableNodes that don't have any tasks
  % assigned to them by any job.
  -spec all_empty_nodes([jobinfo()], [node()]) -> [node()].
  all_empty_nodes(_, []) -> [];
  all_empty_nodes([], AvailableNodes) -> AvailableNodes;
  all_empty_nodes([Job|Jobs], AvailableNodes) ->
  
negative.code:         "ERROR: Job killed due to an internal exception: ~s", [Msg], none),
      {stop, normal, S}.
  
  -type schedule_result() :: nolocal | nonodes | {run, host(), task()}.
  -spec handle_call(dbg_state_msg(), from(), state()) -> gs_reply(state());
                   (get_stats, from(), state()) -> gs_reply({ok, stats()});
                   ({get_empty_nodes, [host()]}, from(), state()) ->
                           gs_reply({ok, [host()]});
                   ({schedule_local|schedule_remote, [host()]}, from(), state()) ->
                           gs_reply(schedule_result()).
  
  handle_call(dbg_get_state, _, S) ->
  