anchor.diff:      send_message(Message, Vat).
   
   %% ===================================================================
  +handle_finish(Finish, Vat) ->
  +    Id = ecapnp:get(questionId, Finish),
  +    Release = ecapnp:get(releaseResultCaps, Finish),
  +    gen_server:call(Vat, {finish, Id, Release}).
  +
  +%% ===================================================================
  +handle_release(Release, Vat) ->
  +    Id = ecapnp:get(id, Release),
  +    Count = ecapnp:get(referenceCount, Release),
  +    gen_server:call(Vat, {release, Id, Count}).
  +
  +%% ===================================================================
   
   %% ===================================================================
   %% common utils
  
positive.code:               gen_server:reply(From, (State#state.restorer)(ObjectId))
        end),
      {noreply, State};
  handle_call(stop, _From, State) ->
      {stop, normal, ok, State}.
  
  
negative.code: set_result(Id, Result, List) ->
      case lists:keyfind(Id, 1, List) of
          false ->
              if Result =:= finish -> List;
                 true ->
                      Entry = {Id, undefined, Result},
                      lists:keystore(Id, 1, List, Entry)
              end;
          {Id, Mon, {Ws, Schema}} when is_list(Ws) ->
              Res = if Result =:= finish -> cancel;
                       true -> ecapnp_obj:to_struct(Schema, Result)
                    end,
              [gen_server:reply(W, {ok, Res}) || W <- Ws],
              if Mon =:= 'DOWN', Result =:= finish ->
                      lists:keydelete(Id, 1, List);
                 true ->
                      Entry = {Id, Mon, Res},
                      lists:keystore(Id, 1, List, Entry)
              end;
          {Id, undefined, _Res} when Result =:= finish ->
              lists:keydelete(Id, 1, List)
      end.
  
  wait_for_result(Id, W, List) ->
  