anchor.diff:      });
     }
   
  -  _onReceiveQuery(HetiReceiveUdpInfo info, KrpcQuery message) {}
  -  _onReceiveResponse(HetiReceiveUdpInfo info, KrpcResponse message) {}
  -  _onReceiveError(HetiReceiveUdpInfo info, KrpcError message) {}
  -  _onReceiveUnknown(HetiReceiveUdpInfo info, KrpcMessage message) {}
  +  _onReceiveQuery(HetiReceiveUdpInfo info, KrpcQuery message) {
  +    this._ai.onReceiveQuery(this, info, message);
  +  }
  +  _onReceiveResponse(HetiReceiveUdpInfo info, KrpcResponse message) {
  +    this._ai.onReceiveResponse(this, info, message);
  +  }
  +  _onReceiveError(HetiReceiveUdpInfo info, KrpcError message) {
  +    this._ai.onReceiveError(this, info, message);
  +  }
  +  _onReceiveUnknown(HetiReceiveUdpInfo info, KrpcMessage message) {
  +    this._ai.onReceiveUnknown(this, info, message);
  +  }
   
     String getQueryNameFromTransactionId(String transactionId) {
       for (SendInfo si in queryInfo) {
  
positive.code: }
  
  class KNodeAI {
    ShuffleLinkedList<KPeerInfo> findNodesInfo = new ShuffleLinkedList(20);
    start(KNode node) {}
    stop(KNode node) {}
  
    maintenance(KNode node) {
      findNodesInfo.clearAll();
      node._rootingtable.findNode(node._nodeId).then((List<KPeerInfo> infos) {
        for (KPeerInfo info in infos) {
          findNodesInfo.addLast(info);
          node.sendFindNodeQuery(info.ipAsString, info.port, node._nodeId.id);
  
negative.code:   }
  
    onReceiveQuery(KNode node, HetiReceiveUdpInfo info, KrpcQuery query) {
      if(_isStart == false) {
        return null;
      }
      node._rootingtable.update(new KPeerInfo(info.remoteAddress, info.remotePort, query.queryingNodesId));
      switch (query.messageSignature) {
        case KrpcMessage.PING_QUERY:
  