docs: private final void handleControlBrowseGet(SIBUuid8 remoteME, SIBUuid12 gatheringTargetDestUuid, long browseId, SelectionCriteria criteria, long seqNum)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "handleControlBrowseGet",
        new Object[] {remoteME, gatheringTargetDestUuid, Long.valueOf(browseId), criteria, Long.valueOf(seqNum)});
  
      // first we see if there is an existing AOBrowseSession
      AOBrowserSessionKey key = new AOBrowserSessionKey(remoteME, gatheringTargetDestUuid, browseId);
      AOBrowserSession session;
      synchronized (this)
      {
        if (startedCloseAndFlush)
        {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
            SibTr.exit(tc, "handleControlBrowseGet");
          return;
        }
        session = (AOBrowserSession) browserSessionTable.get(key);
      }
      if (session == null)
      { // there is not an existing session
        if (seqNum == 0)
        { // this message indicates a start of session, so create a session
  
          try
          {
            JSConsumerManager streamConsumerDispatcher = null;         
            if (!isPubSub)
            {
              try
              {
                // If we are performing a remote gather we need to work out where to gather from
                DestinationHandler dest = destinationHandler;
                if (gatheringTargetDestUuid!=null)
                {
                  // We are a performing a remote gather. We need to lookup the destination that the gatheringUuid
                  // refers to. It may be an alias (used for scoping the MEs), or the real destination we
                  // are on (no scoping), or may not exist at all (exception thrown and caught below) 
                  dest = mp.getDestinationManager().getDestination(gatheringTargetDestUuid, true);  
                }
              
                // Lookup the relevant ConsumerManager for this AOStream (This will either be a local consumer dispatcher
                // usually - or a gathering consumer dispatcher for a remote gatherer)
                streamConsumerDispatcher = (JSConsumerManager)
                  dest.chooseConsumerManager(gatheringTargetDestUuid, null, null);             
              }
              catch (SIException e)
              {
                // FFDC
                // Couldnt locate the gathering target MEs so flush the stream                   
                FFDCFilter.processException(
                  e,
                  "com.ibm.ws.sib.processor.impl.AnycastOutputHandler.handleControlBrowseGet",
                  "1:1388:1.89.4.1",
                  this);
    
                SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0001",
                  new Object[] {
                    "com.ibm.ws.sib.processor.impl.AnycastOutputHandler",
                    "1:1394:1.89.4.1" });
                
                throw e;                    
              } 
            }
            else
              streamConsumerDispatcher = pubSubConsumerDispatcher;
            
            BrowseCursor browseCursor = ((Browsable) streamConsumerDispatcher).getBrowseCursor(criteria);
  
            // next, create the session, and add it to the table
            session = new AOBrowserSession(this,
                                           browseCursor,
                                           remoteME,
                                           gatheringTargetDestUuid,
                                           browseId,
                                           mp.getAlarmManager());
            key = session.getKey();
            AOBrowserSession existing = (AOBrowserSession) browserSessionTable.put(key, session);
            if (existing != null)
            {
              // log error (probable bug since two BrowseGets with same browseId, remoteME and seqNum==0
              //  must have been received)
              SIErrorException e = new SIErrorException(
                nls.getFormattedMessage(
                  "INTERNAL_MESSAGING_ERROR_CWSIP0001",
                  new Object[] {
                    "com.ibm.ws.sib.processor.impl.AnycastOutputHandler",
                    "1:1422:1.89.4.1" },
                  null));
  
              // FFDC
              FFDCFilter.processException(
                e,
                "com.ibm.ws.sib.processor.impl.AnycastOutputHandler.handleControlBrowseGet",
                "1:1429:1.89.4.1",
                this);
  
              SibTr.exception(tc, e);
              SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0001",
              new Object[] {
                "com.ibm.ws.sib.processor.impl.AnycastOutputHandler",
                "1:1436:1.89.4.1" });
  
              existing.close();
            }
          }
          catch (SISelectorSyntaxException e1)
          {
            FFDCFilter.processException(e1,
              "com.ibm.ws.sib.processor.impl.AnycastOutputHandler.handleControlBrowseGet","1:1188:1.77",this);
            SibTr.exception(tc, e1);
  
            sendBrowseEnd(remoteME, gatheringTargetDestUuid, browseId,
              SIMPConstants.BROWSE_BAD_FILTER);
            session = null;
          }
          catch (SIException e1)
          {
            FFDCFilter.processException(e1,
              "com.ibm.ws.sib.processor.impl.AnycastOutputHandler.handleControlBrowseGet","1:1454:1.89.4.1",this);
            SibTr.exception(tc, e1);
  
            sendBrowseEnd(remoteME, gatheringTargetDestUuid, browseId,
              SIMPConstants.BROWSE_STORE_EXCEPTION);
            session = null;
          }//end catch
  
        }//end if (seqNum == 0)
        else
        {
          // this ControlBrowseGet is out-of-order.
          //Return error to the remote ME
          sendBrowseEnd(remoteME, gatheringTargetDestUuid, browseId,
            SIMPConstants.BROWSE_OUT_OF_ORDER);
        }
      }
      // process the message if session exists/created
      if (session != null)
      {
        boolean closed = session.next(seqNum);
        if (closed)
        {
          browserSessionTable.remove(key);
        }
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "handleControlBrowseGet");
  
    }