anchor.diff:  empty() ->
       gb_trees:empty().
   
  -put(Key, Val, Tree) ->
  +store(Key, Val, Tree) ->
       case gb_trees:lookup(Key, Tree) of
   	none ->
   	    gb_trees:insert(Key, Val, Tree);
  
positive.code: get_path([], Obj, _) ->
      Obj;
  get_path([P|Rest], Tree, FindFunc) ->
      case get(P, Tree) of
  	none ->
  	    none;
  	{value, ElementHash} ->
  
negative.code:     hash_and_store(Tree, StoreFunc).
  
  put_path([P], BS, Tree, StoreFunc, _FindFunc) when is_binary(BS) ->
      NewTree = store(P, BS, Tree),
      hash_and_store(NewTree, StoreFunc);	    
  put_path([P], Object, Tree, StoreFunc, _FindFunc) ->
      {ObjectHash, Object} = hash_and_store(Object, StoreFunc),
      put_path([P], ObjectHash, Tree, StoreFunc, _FindFunc);
  put_path([P|Rest], Object, Tree, StoreFunc, FindFunc) ->
      case find(P, Tree) of
  	none ->
  	    [Last|Tser] = lists:reverse(Rest),
  	    {LeafHash, _Leaf} = put_path([Last], Object, gb_trees:empty(), StoreFunc, FindFunc),
  