public abstract class com.mongodb.internal.connection.AbstractMultiServerCluster extends com.mongodb.internal.connection.BaseCluster
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.mongodb.internal.connection.AbstractMultiServerCluster
  super_class: com.mongodb.internal.connection.BaseCluster
{
  private static final com.mongodb.diagnostics.logging.Logger LOGGER;
    descriptor: Lcom/mongodb/diagnostics/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private com.mongodb.connection.ClusterType clusterType;
    descriptor: Lcom/mongodb/connection/ClusterType;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String replicaSetName;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private org.bson.types.ObjectId maxElectionId;
    descriptor: Lorg/bson/types/ObjectId;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.Integer maxSetVersion;
    descriptor: Ljava/lang/Integer;
    flags: (0x0002) ACC_PRIVATE

  private final java.util.concurrent.ConcurrentMap<com.mongodb.ServerAddress, com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple> addressToServerTupleMap;
    descriptor: Ljava/util/concurrent/ConcurrentMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentMap<Lcom/mongodb/ServerAddress;Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;>;

  private static volatile int[] $SWITCH_TABLE$com$mongodb$connection$ClusterType;
    descriptor: [I
    flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 55
            ldc "cluster"
            invokestatic com.mongodb.diagnostics.logging.Loggers.getLogger:(Ljava/lang/String;)Lcom/mongodb/diagnostics/logging/Logger;
            putstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.mongodb.connection.ClusterId, com.mongodb.connection.ClusterSettings, com.mongodb.internal.connection.ClusterableServerFactory);
    descriptor: (Lcom/mongodb/connection/ClusterId;Lcom/mongodb/connection/ClusterSettings;Lcom/mongodb/internal/connection/ClusterableServerFactory;)V
    flags: (0x0000) 
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ClusterId clusterId
        start local 2 // com.mongodb.connection.ClusterSettings settings
        start local 3 // com.mongodb.internal.connection.ClusterableServerFactory serverFactory
         0: .line 76
            aload 0 /* this */
            aload 1 /* clusterId */
            aload 2 /* settings */
            aload 3 /* serverFactory */
            invokespecial com.mongodb.internal.connection.BaseCluster.<init>:(Lcom/mongodb/connection/ClusterId;Lcom/mongodb/connection/ClusterSettings;Lcom/mongodb/internal/connection/ClusterableServerFactory;)V
         1: .line 62
            aload 0 /* this */
         2: .line 63
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
         3: .line 77
            ldc "connection mode is multiple"
            aload 2 /* settings */
            invokevirtual com.mongodb.connection.ClusterSettings.getMode:()Lcom/mongodb/connection/ClusterConnectionMode;
            getstatic com.mongodb.connection.ClusterConnectionMode.MULTIPLE:Lcom/mongodb/connection/ClusterConnectionMode;
            if_acmpne 4
            iconst_1
            goto 5
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.connection.ClusterId com.mongodb.connection.ClusterSettings com.mongodb.internal.connection.ClusterableServerFactory
      StackMap stack: java.lang.String
         4: iconst_0
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.connection.ClusterId com.mongodb.connection.ClusterSettings com.mongodb.internal.connection.ClusterableServerFactory
      StackMap stack: java.lang.String int
         5: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         6: .line 78
            aload 0 /* this */
            aload 2 /* settings */
            invokevirtual com.mongodb.connection.ClusterSettings.getRequiredClusterType:()Lcom/mongodb/connection/ClusterType;
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
         7: .line 79
            aload 0 /* this */
            aload 2 /* settings */
            invokevirtual com.mongodb.connection.ClusterSettings.getRequiredReplicaSetName:()Ljava/lang/String;
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.replicaSetName:Ljava/lang/String;
         8: .line 81
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 10
         9: .line 82
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Cluster created with settings %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* settings */
            invokevirtual com.mongodb.connection.ClusterSettings.getShortDescription:()Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        10: .line 84
      StackMap locals:
      StackMap stack:
            return
        end local 3 // com.mongodb.internal.connection.ClusterableServerFactory serverFactory
        end local 2 // com.mongodb.connection.ClusterSettings settings
        end local 1 // com.mongodb.connection.ClusterId clusterId
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   11     0           this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0   11     1      clusterId  Lcom/mongodb/connection/ClusterId;
            0   11     2       settings  Lcom/mongodb/connection/ClusterSettings;
            0   11     3  serverFactory  Lcom/mongodb/internal/connection/ClusterableServerFactory;
    MethodParameters:
               Name  Flags
      clusterId      final
      settings       final
      serverFactory  final

  com.mongodb.connection.ClusterType getClusterType();
    descriptor: ()Lcom/mongodb/connection/ClusterType;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
         0: .line 87
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
            areturn
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;

  com.mongodb.MongoException getSrvResolutionException();
    descriptor: ()Lcom/mongodb/MongoException;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
         0: .line 91
            aconst_null
            areturn
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;

  protected void initialize(java.util.Collection<com.mongodb.ServerAddress>);
    descriptor: (Ljava/util/Collection;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=7, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // java.util.Collection serverAddresses
         0: .line 95
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getCurrentDescription:()Lcom/mongodb/connection/ClusterDescription;
            astore 2 /* currentDescription */
        start local 2 // com.mongodb.connection.ClusterDescription currentDescription
         1: .line 100
            aload 0 /* this */
            dup
            astore 4
            monitorenter
         2: .line 101
            aload 1 /* serverAddresses */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 6
            goto 5
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Collection com.mongodb.connection.ClusterDescription top com.mongodb.internal.connection.AbstractMultiServerCluster top java.util.Iterator
      StackMap stack:
         3: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.ServerAddress
            astore 5 /* serverAddress */
        start local 5 // com.mongodb.ServerAddress serverAddress
         4: .line 102
            aload 0 /* this */
            aload 5 /* serverAddress */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addServer:(Lcom/mongodb/ServerAddress;)V
        end local 5 // com.mongodb.ServerAddress serverAddress
         5: .line 101
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 104
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.updateDescription:()Lcom/mongodb/connection/ClusterDescription;
            astore 3 /* newDescription */
        start local 3 // com.mongodb.connection.ClusterDescription newDescription
         7: .line 100
            aload 4
            monitorexit
         8: goto 11
        end local 3 // com.mongodb.connection.ClusterDescription newDescription
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Collection com.mongodb.connection.ClusterDescription top com.mongodb.internal.connection.AbstractMultiServerCluster
      StackMap stack: java.lang.Throwable
         9: aload 4
            monitorexit
        10: athrow
        start local 3 // com.mongodb.connection.ClusterDescription newDescription
        11: .line 106
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Collection com.mongodb.connection.ClusterDescription com.mongodb.connection.ClusterDescription
      StackMap stack:
            aload 0 /* this */
            new com.mongodb.event.ClusterDescriptionChangedEvent
            dup
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getClusterId:()Lcom/mongodb/connection/ClusterId;
            aload 3 /* newDescription */
            aload 2 /* currentDescription */
            invokespecial com.mongodb.event.ClusterDescriptionChangedEvent.<init>:(Lcom/mongodb/connection/ClusterId;Lcom/mongodb/connection/ClusterDescription;Lcom/mongodb/connection/ClusterDescription;)V
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.fireChangeEvent:(Lcom/mongodb/event/ClusterDescriptionChangedEvent;)V
        12: .line 107
            return
        end local 3 // com.mongodb.connection.ClusterDescription newDescription
        end local 2 // com.mongodb.connection.ClusterDescription currentDescription
        end local 1 // java.util.Collection serverAddresses
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   13     0                this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0   13     1     serverAddresses  Ljava/util/Collection<Lcom/mongodb/ServerAddress;>;
            1   13     2  currentDescription  Lcom/mongodb/connection/ClusterDescription;
            7    9     3      newDescription  Lcom/mongodb/connection/ClusterDescription;
           11   13     3      newDescription  Lcom/mongodb/connection/ClusterDescription;
            4    5     5       serverAddress  Lcom/mongodb/ServerAddress;
      Exception table:
        from    to  target  type
           2     8       9  any
           9    10       9  any
    Signature: (Ljava/util/Collection<Lcom/mongodb/ServerAddress;>;)V
    MethodParameters:
                 Name  Flags
      serverAddresses  final

  protected void connect();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
         0: .line 111
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 2
            goto 3
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 1 /* cur */
        start local 1 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
         2: .line 112
            aload 1 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            invokeinterface com.mongodb.internal.connection.ClusterableServer.connect:()V
        end local 1 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
         3: .line 111
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 114
            return
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            2    3     1   cur  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
         0: .line 118
            aload 0 /* this */
            dup
            astore 1
            monitorenter
         1: .line 119
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.isClosed:()Z
            ifne 6
         2: .line 120
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3
            goto 5
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.internal.connection.AbstractMultiServerCluster top java.util.Iterator
      StackMap stack:
         3: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 2 /* serverTuple */
        start local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         4: .line 121
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            invokeinterface com.mongodb.internal.connection.ClusterableServer.close:()V
        end local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         5: .line 120
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 124
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.internal.connection.AbstractMultiServerCluster
      StackMap stack:
            aload 0 /* this */
            invokespecial com.mongodb.internal.connection.BaseCluster.close:()V
         7: .line 118
            aload 1
            monitorexit
         8: goto 11
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: aload 1
            monitorexit
        10: athrow
        11: .line 126
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   12     0         this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            4    5     2  serverTuple  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
      Exception table:
        from    to  target  type
           1     8       9  any
           9    10       9  any

  protected com.mongodb.internal.connection.ClusterableServer getServer(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)Lcom/mongodb/internal/connection/ClusterableServer;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.ServerAddress serverAddress
         0: .line 130
            ldc "is open"
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.isClosed:()Z
            ifeq 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack: java.lang.String
         1: iconst_1
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.ServerAddress
      StackMap stack: java.lang.String int
         2: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         3: .line 132
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* serverAddress */
            invokeinterface java.util.concurrent.ConcurrentMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 2 /* serverTuple */
        start local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         4: .line 133
            aload 2 /* serverTuple */
            ifnonnull 6
         5: .line 134
            aconst_null
            areturn
         6: .line 136
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
      StackMap stack:
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            areturn
        end local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    7     1  serverAddress  Lcom/mongodb/ServerAddress;
            4    7     2    serverTuple  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
    MethodParameters:
               Name  Flags
      serverAddress  final

  void onChange(java.util.Collection<com.mongodb.ServerAddress>);
    descriptor: (Ljava/util/Collection;)V
    flags: (0x0000) 
    Code:
      stack=6, locals=5, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // java.util.Collection newHosts
         0: .line 148
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         1: .line 149
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.isClosed:()Z
            ifeq 4
         2: .line 150
            aload 2
            monitorexit
         3: return
         4: .line 153
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster
      StackMap stack:
            aload 1 /* newHosts */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4
            goto 7
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Collection com.mongodb.internal.connection.AbstractMultiServerCluster top java.util.Iterator
      StackMap stack:
         5: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.ServerAddress
            astore 3 /* cur */
        start local 3 // com.mongodb.ServerAddress cur
         6: .line 154
            aload 0 /* this */
            aload 3 /* cur */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addServer:(Lcom/mongodb/ServerAddress;)V
        end local 3 // com.mongodb.ServerAddress cur
         7: .line 153
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 5
         8: .line 157
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3 /* iterator */
        start local 3 // java.util.Iterator iterator
         9: goto 16
        10: .line 158
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Collection com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Iterator
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 4 /* cur */
        start local 4 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
        11: .line 159
            aload 1 /* newHosts */
            aload 4 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokeinterface java.util.Collection.contains:(Ljava/lang/Object;)Z
            ifne 16
        12: .line 160
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 14
        13: .line 161
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Removing %s from client view of cluster."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        14: .line 163
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.remove:()V
        15: .line 164
            aload 4 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            invokeinterface com.mongodb.internal.connection.ClusterableServer.close:()V
        end local 4 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
        16: .line 157
      StackMap locals:
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        end local 3 // java.util.Iterator iterator
        17: .line 168
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getCurrentDescription:()Lcom/mongodb/connection/ClusterDescription;
            astore 3 /* oldClusterDescription */
        start local 3 // com.mongodb.connection.ClusterDescription oldClusterDescription
        18: .line 169
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.updateDescription:()Lcom/mongodb/connection/ClusterDescription;
            astore 4 /* newClusterDescription */
        start local 4 // com.mongodb.connection.ClusterDescription newClusterDescription
        19: .line 171
            aload 0 /* this */
            new com.mongodb.event.ClusterDescriptionChangedEvent
            dup
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getClusterId:()Lcom/mongodb/connection/ClusterId;
            aload 4 /* newClusterDescription */
            aload 3 /* oldClusterDescription */
            invokespecial com.mongodb.event.ClusterDescriptionChangedEvent.<init>:(Lcom/mongodb/connection/ClusterId;Lcom/mongodb/connection/ClusterDescription;Lcom/mongodb/connection/ClusterDescription;)V
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.fireChangeEvent:(Lcom/mongodb/event/ClusterDescriptionChangedEvent;)V
        end local 4 // com.mongodb.connection.ClusterDescription newClusterDescription
        end local 3 // com.mongodb.connection.ClusterDescription oldClusterDescription
        20: .line 148
            aload 2
            monitorexit
        21: goto 24
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Collection com.mongodb.internal.connection.AbstractMultiServerCluster
      StackMap stack: java.lang.Throwable
        22: aload 2
            monitorexit
        23: athrow
        24: .line 173
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.util.Collection newHosts
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   25     0                   this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0   25     1               newHosts  Ljava/util/Collection<Lcom/mongodb/ServerAddress;>;
            6    7     3                    cur  Lcom/mongodb/ServerAddress;
            9   17     3               iterator  Ljava/util/Iterator<Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;>;
           11   16     4                    cur  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
           18   20     3  oldClusterDescription  Lcom/mongodb/connection/ClusterDescription;
           19   20     4  newClusterDescription  Lcom/mongodb/connection/ClusterDescription;
      Exception table:
        from    to  target  type
           1     3      22  any
           4    21      22  any
          22    23      22  any
    Signature: (Ljava/util/Collection<Lcom/mongodb/ServerAddress;>;)V
    MethodParameters:
          Name  Flags
      newHosts  final

  private void onChange(com.mongodb.event.ServerDescriptionChangedEvent);
    descriptor: (Lcom/mongodb/event/ServerDescriptionChangedEvent;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=8, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.event.ServerDescriptionChangedEvent event
         0: .line 176
            aconst_null
            astore 2 /* oldClusterDescription */
        start local 2 // com.mongodb.connection.ClusterDescription oldClusterDescription
         1: .line 177
            aconst_null
            astore 3 /* newClusterDescription */
        start local 3 // com.mongodb.connection.ClusterDescription newClusterDescription
         2: .line 178
            iconst_1
            istore 4 /* shouldUpdateDescription */
        start local 4 // boolean shouldUpdateDescription
         3: .line 179
            aload 0 /* this */
            dup
            astore 5
            monitorenter
         4: .line 180
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.isClosed:()Z
            ifeq 7
         5: .line 181
            aload 5
            monitorexit
         6: return
         7: .line 184
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.event.ServerDescriptionChangedEvent com.mongodb.connection.ClusterDescription com.mongodb.connection.ClusterDescription int com.mongodb.internal.connection.AbstractMultiServerCluster
      StackMap stack:
            aload 1 /* event */
            invokevirtual com.mongodb.event.ServerDescriptionChangedEvent.getNewDescription:()Lcom/mongodb/connection/ServerDescription;
            astore 6 /* newDescription */
        start local 6 // com.mongodb.connection.ServerDescription newDescription
         8: .line 186
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isTraceEnabled:()Z
            ifeq 12
         9: .line 187
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Handling description changed event for server %s with description %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
        10: .line 188
            aload 6 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
            dup
            iconst_1
            aload 6 /* newDescription */
            aastore
        11: .line 187
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.trace:(Ljava/lang/String;)V
        12: .line 191
      StackMap locals: com.mongodb.connection.ServerDescription
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            aload 6 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokeinterface java.util.concurrent.ConcurrentMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 7 /* serverTuple */
        start local 7 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
        13: .line 192
            aload 7 /* serverTuple */
            ifnonnull 20
        14: .line 193
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isTraceEnabled:()Z
            ifeq 18
        15: .line 194
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Ignoring description changed event for removed server %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        16: .line 195
            aload 6 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
        17: .line 194
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.trace:(Ljava/lang/String;)V
        18: .line 197
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
      StackMap stack:
            aload 5
            monitorexit
        19: return
        20: .line 200
      StackMap locals:
      StackMap stack:
            aload 1 /* event */
            invokevirtual com.mongodb.event.ServerDescriptionChangedEvent.getNewDescription:()Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.isOk:()Z
            ifeq 32
        21: .line 201
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
            getstatic com.mongodb.connection.ClusterType.UNKNOWN:Lcom/mongodb/connection/ClusterType;
            if_acmpne 25
            aload 6 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getType:()Lcom/mongodb/connection/ServerType;
            getstatic com.mongodb.connection.ServerType.REPLICA_SET_GHOST:Lcom/mongodb/connection/ServerType;
            if_acmpeq 25
        22: .line 202
            aload 0 /* this */
            aload 6 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getClusterType:()Lcom/mongodb/connection/ClusterType;
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
        23: .line 203
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 25
        24: .line 204
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Discovered cluster type of %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        25: .line 208
      StackMap locals:
      StackMap stack:
            invokestatic com.mongodb.internal.connection.AbstractMultiServerCluster.$SWITCH_TABLE$com$mongodb$connection$ClusterType:()[I
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
            invokevirtual com.mongodb.connection.ClusterType.ordinal:()I
            iaload
            tableswitch { // 1 - 3
                    1: 30
                    2: 26
                    3: 28
              default: 32
          }
        26: .line 210
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 6 /* newDescription */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.handleReplicaSetMemberChanged:(Lcom/mongodb/connection/ServerDescription;)Z
            istore 4 /* shouldUpdateDescription */
        27: .line 211
            goto 32
        28: .line 213
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 6 /* newDescription */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.handleShardRouterChanged:(Lcom/mongodb/connection/ServerDescription;)Z
            istore 4 /* shouldUpdateDescription */
        29: .line 214
            goto 32
        30: .line 216
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 6 /* newDescription */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.handleStandAloneChanged:(Lcom/mongodb/connection/ServerDescription;)Z
            istore 4 /* shouldUpdateDescription */
        31: .line 217
            goto 32
        32: .line 223
      StackMap locals:
      StackMap stack:
            iload 4 /* shouldUpdateDescription */
            ifeq 36
        33: .line 224
            aload 7 /* serverTuple */
            aload 6 /* newDescription */
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
        34: .line 225
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getCurrentDescription:()Lcom/mongodb/connection/ClusterDescription;
            astore 2 /* oldClusterDescription */
        35: .line 226
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.updateDescription:()Lcom/mongodb/connection/ClusterDescription;
            astore 3 /* newClusterDescription */
        end local 7 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
        end local 6 // com.mongodb.connection.ServerDescription newDescription
        36: .line 179
      StackMap locals:
      StackMap stack:
            aload 5
            monitorexit
        37: goto 40
      StackMap locals:
      StackMap stack: java.lang.Throwable
        38: aload 5
            monitorexit
        39: athrow
        40: .line 229
      StackMap locals:
      StackMap stack:
            iload 4 /* shouldUpdateDescription */
            ifeq 42
        41: .line 230
            aload 0 /* this */
            new com.mongodb.event.ClusterDescriptionChangedEvent
            dup
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getClusterId:()Lcom/mongodb/connection/ClusterId;
            aload 3 /* newClusterDescription */
            aload 2 /* oldClusterDescription */
            invokespecial com.mongodb.event.ClusterDescriptionChangedEvent.<init>:(Lcom/mongodb/connection/ClusterId;Lcom/mongodb/connection/ClusterDescription;Lcom/mongodb/connection/ClusterDescription;)V
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.fireChangeEvent:(Lcom/mongodb/event/ClusterDescriptionChangedEvent;)V
        42: .line 232
      StackMap locals:
      StackMap stack:
            return
        end local 4 // boolean shouldUpdateDescription
        end local 3 // com.mongodb.connection.ClusterDescription newClusterDescription
        end local 2 // com.mongodb.connection.ClusterDescription oldClusterDescription
        end local 1 // com.mongodb.event.ServerDescriptionChangedEvent event
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   43     0                     this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0   43     1                    event  Lcom/mongodb/event/ServerDescriptionChangedEvent;
            1   43     2    oldClusterDescription  Lcom/mongodb/connection/ClusterDescription;
            2   43     3    newClusterDescription  Lcom/mongodb/connection/ClusterDescription;
            3   43     4  shouldUpdateDescription  Z
            8   36     6           newDescription  Lcom/mongodb/connection/ServerDescription;
           13   36     7              serverTuple  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
      Exception table:
        from    to  target  type
           4     6      38  any
           7    19      38  any
          20    37      38  any
          38    39      38  any
    MethodParameters:
       Name  Flags
      event  final

  private boolean handleReplicaSetMemberChanged(com.mongodb.connection.ServerDescription);
    descriptor: (Lcom/mongodb/connection/ServerDescription;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ServerDescription newDescription
         0: .line 235
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.isReplicaSetMember:()Z
            ifne 6
         1: .line 236
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Expecting replica set member, but found a %s.  Removing %s from client view of cluster."
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         2: .line 237
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getType:()Lcom/mongodb/connection/ServerType;
            aastore
            dup
            iconst_1
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
         3: .line 236
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;)V
         4: .line 238
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.removeServer:(Lcom/mongodb/ServerAddress;)V
         5: .line 239
            iconst_1
            ireturn
         6: .line 242
      StackMap locals:
      StackMap stack:
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getType:()Lcom/mongodb/connection/ServerType;
            getstatic com.mongodb.connection.ServerType.REPLICA_SET_GHOST:Lcom/mongodb/connection/ServerType;
            if_acmpne 10
         7: .line 243
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 9
         8: .line 244
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Server %s does not appear to be a member of an initiated replica set."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
         9: .line 246
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        10: .line 249
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.replicaSetName:Ljava/lang/String;
            ifnonnull 12
        11: .line 250
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetName:()Ljava/lang/String;
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.replicaSetName:Ljava/lang/String;
        12: .line 253
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.replicaSetName:Ljava/lang/String;
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetName:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 18
        13: .line 254
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Expecting replica set member from set '%s', but found one from set '%s'.  Removing %s from client view of cluster."
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        14: .line 256
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.replicaSetName:Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetName:()Ljava/lang/String;
            aastore
            dup
            iconst_2
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
        15: .line 254
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;)V
        16: .line 257
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.removeServer:(Lcom/mongodb/ServerAddress;)V
        17: .line 258
            iconst_1
            ireturn
        18: .line 261
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.ensureServers:(Lcom/mongodb/connection/ServerDescription;)V
        19: .line 263
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getCanonicalAddress:()Ljava/lang/String;
            ifnull 27
        20: .line 264
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            new com.mongodb.ServerAddress
            dup
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getCanonicalAddress:()Ljava/lang/String;
            invokespecial com.mongodb.ServerAddress.<init>:(Ljava/lang/String;)V
            invokevirtual com.mongodb.ServerAddress.equals:(Ljava/lang/Object;)Z
            ifne 27
        21: .line 265
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 25
        22: .line 266
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Canonical address %s does not match server address.  Removing %s from client view of cluster"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
        23: .line 267
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getCanonicalAddress:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
        24: .line 266
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        25: .line 269
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.removeServer:(Lcom/mongodb/ServerAddress;)V
        26: .line 270
            iconst_1
            ireturn
        27: .line 273
      StackMap locals:
      StackMap stack:
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.isPrimary:()Z
            ifeq 54
        28: .line 274
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            ifnull 44
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getElectionId:()Lorg/bson/types/ObjectId;
            ifnull 44
        29: .line 275
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.isStalePrimary:(Lcom/mongodb/connection/ServerDescription;)Z
            ifeq 38
        30: .line 276
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 36
        31: .line 277
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Invalidating potential primary %s whose (set version, election id) tuple of (%d, %s) is less than one already seen of (%d, %s)"
            iconst_5
            anewarray java.lang.Object
            dup
            iconst_0
        32: .line 279
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
            dup
            iconst_1
        33: .line 280
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            aastore
            dup
            iconst_2
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getElectionId:()Lorg/bson/types/ObjectId;
            aastore
            dup
            iconst_3
        34: .line 281
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxSetVersion:Ljava/lang/Integer;
            aastore
            dup
            iconst_4
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxElectionId:Lorg/bson/types/ObjectId;
            aastore
        35: .line 277
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        36: .line 283
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokeinterface java.util.concurrent.ConcurrentMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            invokeinterface com.mongodb.internal.connection.ClusterableServer.invalidate:()V
        37: .line 284
            iconst_0
            ireturn
        38: .line 287
      StackMap locals:
      StackMap stack:
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getElectionId:()Lorg/bson/types/ObjectId;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxElectionId:Lorg/bson/types/ObjectId;
            invokevirtual org.bson.types.ObjectId.equals:(Ljava/lang/Object;)Z
            ifne 44
        39: .line 288
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 43
        40: .line 289
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Setting max election id to %s from replica set primary %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getElectionId:()Lorg/bson/types/ObjectId;
            aastore
            dup
            iconst_1
        41: .line 290
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
        42: .line 289
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        43: .line 292
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getElectionId:()Lorg/bson/types/ObjectId;
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxElectionId:Lorg/bson/types/ObjectId;
        44: .line 296
      StackMap locals:
      StackMap stack:
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            ifnull 51
        45: .line 297
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxSetVersion:Ljava/lang/Integer;
            ifnull 46
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxSetVersion:Ljava/lang/Integer;
            invokevirtual java.lang.Integer.compareTo:(Ljava/lang/Integer;)I
            ifle 51
        46: .line 298
      StackMap locals:
      StackMap stack:
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 50
        47: .line 299
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Setting max set version to %d from replica set primary %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            aastore
            dup
            iconst_1
        48: .line 300
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
        49: .line 299
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        50: .line 302
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxSetVersion:Ljava/lang/Integer;
        51: .line 305
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.isNotAlreadyPrimary:(Lcom/mongodb/ServerAddress;)Z
            ifeq 53
        52: .line 306
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Discovered replica set primary %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
        53: .line 308
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.invalidateOldPrimaries:(Lcom/mongodb/ServerAddress;)V
        54: .line 310
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // com.mongodb.connection.ServerDescription newDescription
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   55     0            this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0   55     1  newDescription  Lcom/mongodb/connection/ServerDescription;
    MethodParameters:
                Name  Flags
      newDescription  final

  private boolean isStalePrimary(com.mongodb.connection.ServerDescription);
    descriptor: (Lcom/mongodb/connection/ServerDescription;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ServerDescription newDescription
         0: .line 314
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxSetVersion:Ljava/lang/Integer;
            ifnull 1
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxElectionId:Lorg/bson/types/ObjectId;
            ifnonnull 2
         1: .line 315
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         2: .line 318
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxSetVersion:Ljava/lang/Integer;
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            invokevirtual java.lang.Integer.compareTo:(Ljava/lang/Integer;)I
            ifgt 6
         3: .line 319
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxSetVersion:Ljava/lang/Integer;
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getSetVersion:()Ljava/lang/Integer;
            invokevirtual java.lang.Integer.equals:(Ljava/lang/Object;)Z
            ifeq 5
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.maxElectionId:Lorg/bson/types/ObjectId;
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getElectionId:()Lorg/bson/types/ObjectId;
            invokevirtual org.bson.types.ObjectId.compareTo:(Lorg/bson/types/ObjectId;)I
         4: .line 318
            ifgt 6
      StackMap locals:
      StackMap stack:
         5: iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         6: iconst_1
            ireturn
        end local 1 // com.mongodb.connection.ServerDescription newDescription
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    7     0            this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    7     1  newDescription  Lcom/mongodb/connection/ServerDescription;
    MethodParameters:
                Name  Flags
      newDescription  final

  private boolean isNotAlreadyPrimary(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.ServerAddress address
         0: .line 323
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* address */
            invokeinterface java.util.concurrent.ConcurrentMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 2 /* serverTuple */
        start local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         1: .line 324
            aload 2 /* serverTuple */
            ifnull 2
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.isPrimary:()Z
            ifeq 2
            iconst_0
            ireturn
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
      StackMap stack:
         2: iconst_1
            ireturn
        end local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
        end local 1 // com.mongodb.ServerAddress address
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0         this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    3     1      address  Lcom/mongodb/ServerAddress;
            1    3     2  serverTuple  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
    MethodParameters:
         Name  Flags
      address  final

  private boolean handleShardRouterChanged(com.mongodb.connection.ServerDescription);
    descriptor: (Lcom/mongodb/connection/ServerDescription;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ServerDescription newDescription
         0: .line 328
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.isShardRouter:()Z
            ifne 5
         1: .line 329
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Expecting a %s, but found a %s.  Removing %s from client view of cluster."
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
         2: .line 330
            getstatic com.mongodb.connection.ServerType.SHARD_ROUTER:Lcom/mongodb/connection/ServerType;
            aastore
            dup
            iconst_1
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getType:()Lcom/mongodb/connection/ServerType;
            aastore
            dup
            iconst_2
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
         3: .line 329
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;)V
         4: .line 331
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.removeServer:(Lcom/mongodb/ServerAddress;)V
         5: .line 333
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // com.mongodb.connection.ServerDescription newDescription
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    6     0            this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    6     1  newDescription  Lcom/mongodb/connection/ServerDescription;
    MethodParameters:
                Name  Flags
      newDescription  final

  private boolean handleStandAloneChanged(com.mongodb.connection.ServerDescription);
    descriptor: (Lcom/mongodb/connection/ServerDescription;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ServerDescription newDescription
         0: .line 337
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getSettings:()Lcom/mongodb/connection/ClusterSettings;
            invokevirtual com.mongodb.connection.ClusterSettings.getHosts:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_1
            if_icmple 6
         1: .line 338
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Expecting a single %s, but found more than one.  Removing %s from client view of cluster."
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         2: .line 339
            getstatic com.mongodb.connection.ServerType.STANDALONE:Lcom/mongodb/connection/ServerType;
            aastore
            dup
            iconst_1
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
         3: .line 338
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;)V
         4: .line 340
            aload 0 /* this */
            getstatic com.mongodb.connection.ClusterType.UNKNOWN:Lcom/mongodb/connection/ClusterType;
            putfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
         5: .line 341
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.removeServer:(Lcom/mongodb/ServerAddress;)V
         6: .line 343
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // com.mongodb.connection.ServerDescription newDescription
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    7     0            this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    7     1  newDescription  Lcom/mongodb/connection/ServerDescription;
    MethodParameters:
                Name  Flags
      newDescription  final

  private void addServer(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.ServerAddress serverAddress
         0: .line 347
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* serverAddress */
            invokeinterface java.util.concurrent.ConcurrentMap.containsKey:(Ljava/lang/Object;)Z
            ifne 5
         1: .line 348
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 3
         2: .line 349
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Adding discovered server %s to client view of cluster"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* serverAddress */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
         3: .line 351
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* serverAddress */
            new com.mongodb.internal.connection.AbstractMultiServerCluster$DefaultServerStateListener
            dup
            aload 0 /* this */
            invokespecial com.mongodb.internal.connection.AbstractMultiServerCluster$DefaultServerStateListener.<init>:(Lcom/mongodb/internal/connection/AbstractMultiServerCluster;)V
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.createServer:(Lcom/mongodb/ServerAddress;Lcom/mongodb/event/ServerListener;)Lcom/mongodb/internal/connection/ClusterableServer;
            astore 2 /* server */
        start local 2 // com.mongodb.internal.connection.ClusterableServer server
         4: .line 352
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* serverAddress */
            new com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            dup
            aload 2 /* server */
            aload 0 /* this */
            aload 1 /* serverAddress */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getConnectingServerDescription:(Lcom/mongodb/ServerAddress;)Lcom/mongodb/connection/ServerDescription;
            invokespecial com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.<init>:(Lcom/mongodb/internal/connection/ClusterableServer;Lcom/mongodb/connection/ServerDescription;)V
            invokeinterface java.util.concurrent.ConcurrentMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 2 // com.mongodb.internal.connection.ClusterableServer server
         5: .line 354
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0           this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    6     1  serverAddress  Lcom/mongodb/ServerAddress;
            4    5     2         server  Lcom/mongodb/internal/connection/ClusterableServer;
    MethodParameters:
               Name  Flags
      serverAddress  final

  private void removeServer(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.ServerAddress serverAddress
         0: .line 357
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* serverAddress */
            invokeinterface java.util.concurrent.ConcurrentMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 2 /* removed */
        start local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple removed
         1: .line 358
            aload 2 /* removed */
            ifnull 3
         2: .line 359
            aload 2 /* removed */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            invokeinterface com.mongodb.internal.connection.ClusterableServer.close:()V
         3: .line 361
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
      StackMap stack:
            return
        end local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple removed
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    4     1  serverAddress  Lcom/mongodb/ServerAddress;
            1    4     2        removed  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
    MethodParameters:
               Name  Flags
      serverAddress  final

  private void invalidateOldPrimaries(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.ServerAddress newPrimary
         0: .line 364
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3
            goto 6
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.ServerAddress top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 2 /* serverTuple */
        start local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         2: .line 365
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aload 1 /* newPrimary */
            invokevirtual com.mongodb.ServerAddress.equals:(Ljava/lang/Object;)Z
            ifne 6
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.isPrimary:()Z
            ifeq 6
         3: .line 366
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 5
         4: .line 367
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Rediscovering type of existing primary %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
         5: .line 369
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.ServerAddress com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple java.util.Iterator
      StackMap stack:
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            new com.mongodb.MongoNotPrimaryException
            dup
            new org.bson.BsonDocument
            dup
            invokespecial org.bson.BsonDocument.<init>:()V
            aload 2 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokespecial com.mongodb.MongoNotPrimaryException.<init>:(Lorg/bson/BsonDocument;Lcom/mongodb/ServerAddress;)V
            invokeinterface com.mongodb.internal.connection.ClusterableServer.invalidate:(Ljava/lang/Throwable;)V
        end local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         6: .line 364
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster com.mongodb.ServerAddress top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         7: .line 372
            return
        end local 1 // com.mongodb.ServerAddress newPrimary
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    8     0         this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    8     1   newPrimary  Lcom/mongodb/ServerAddress;
            2    6     2  serverTuple  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
    MethodParameters:
            Name  Flags
      newPrimary  final

  private com.mongodb.connection.ServerDescription getConnectingServerDescription(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)Lcom/mongodb/connection/ServerDescription;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.ServerAddress serverAddress
         0: .line 375
            invokestatic com.mongodb.connection.ServerDescription.builder:()Lcom/mongodb/connection/ServerDescription$Builder;
            getstatic com.mongodb.connection.ServerConnectionState.CONNECTING:Lcom/mongodb/connection/ServerConnectionState;
            invokevirtual com.mongodb.connection.ServerDescription$Builder.state:(Lcom/mongodb/connection/ServerConnectionState;)Lcom/mongodb/connection/ServerDescription$Builder;
            aload 1 /* serverAddress */
            invokevirtual com.mongodb.connection.ServerDescription$Builder.address:(Lcom/mongodb/ServerAddress;)Lcom/mongodb/connection/ServerDescription$Builder;
            invokevirtual com.mongodb.connection.ServerDescription$Builder.build:()Lcom/mongodb/connection/ServerDescription;
            areturn
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0           this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    1     1  serverAddress  Lcom/mongodb/ServerAddress;
    MethodParameters:
               Name  Flags
      serverAddress  final

  private com.mongodb.connection.ClusterDescription updateDescription();
    descriptor: ()Lcom/mongodb/connection/ClusterDescription;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=2, args_size=1
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
         0: .line 379
            new com.mongodb.connection.ClusterDescription
            dup
            getstatic com.mongodb.connection.ClusterConnectionMode.MULTIPLE:Lcom/mongodb/connection/ClusterConnectionMode;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.clusterType:Lcom/mongodb/connection/ClusterType;
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getSrvResolutionException:()Lcom/mongodb/MongoException;
         1: .line 380
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getNewServerDescriptionList:()Ljava/util/List;
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getSettings:()Lcom/mongodb/connection/ClusterSettings;
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getServerFactory:()Lcom/mongodb/internal/connection/ClusterableServerFactory;
            invokeinterface com.mongodb.internal.connection.ClusterableServerFactory.getSettings:()Lcom/mongodb/connection/ServerSettings;
         2: .line 379
            invokespecial com.mongodb.connection.ClusterDescription.<init>:(Lcom/mongodb/connection/ClusterConnectionMode;Lcom/mongodb/connection/ClusterType;Lcom/mongodb/MongoException;Ljava/util/List;Lcom/mongodb/connection/ClusterSettings;Lcom/mongodb/connection/ServerSettings;)V
            astore 1 /* newDescription */
        start local 1 // com.mongodb.connection.ClusterDescription newDescription
         3: .line 381
            aload 0 /* this */
            aload 1 /* newDescription */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.updateDescription:(Lcom/mongodb/connection/ClusterDescription;)V
         4: .line 382
            aload 1 /* newDescription */
            areturn
        end local 1 // com.mongodb.connection.ClusterDescription newDescription
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            3    5     1  newDescription  Lcom/mongodb/connection/ClusterDescription;

  private java.util.List<com.mongodb.connection.ServerDescription> getNewServerDescriptionList();
    descriptor: ()Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
         0: .line 386
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* serverDescriptions */
        start local 1 // java.util.List serverDescriptions
         1: .line 387
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3
            goto 4
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 2 /* cur */
        start local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
         3: .line 388
            aload 1 /* serverDescriptions */
            aload 2 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 2 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
         4: .line 387
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 390
            aload 1 /* serverDescriptions */
            areturn
        end local 1 // java.util.List serverDescriptions
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    6     0                this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            1    6     1  serverDescriptions  Ljava/util/List<Lcom/mongodb/connection/ServerDescription;>;
            3    4     2                 cur  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
    Signature: ()Ljava/util/List<Lcom/mongodb/connection/ServerDescription;>;

  private void ensureServers(com.mongodb.connection.ServerDescription);
    descriptor: (Lcom/mongodb/connection/ServerDescription;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ServerDescription description
         0: .line 394
            aload 1 /* description */
            invokevirtual com.mongodb.connection.ServerDescription.isPrimary:()Z
            ifne 1
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.hasPrimary:()Z
            ifne 4
         1: .line 395
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* description */
            invokevirtual com.mongodb.connection.ServerDescription.getHosts:()Ljava/util/Set;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addNewHosts:(Ljava/util/Set;)V
         2: .line 396
            aload 0 /* this */
            aload 1 /* description */
            invokevirtual com.mongodb.connection.ServerDescription.getPassives:()Ljava/util/Set;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addNewHosts:(Ljava/util/Set;)V
         3: .line 397
            aload 0 /* this */
            aload 1 /* description */
            invokevirtual com.mongodb.connection.ServerDescription.getArbiters:()Ljava/util/Set;
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addNewHosts:(Ljava/util/Set;)V
         4: .line 400
      StackMap locals:
      StackMap stack:
            aload 1 /* description */
            invokevirtual com.mongodb.connection.ServerDescription.isPrimary:()Z
            ifeq 6
         5: .line 401
            aload 0 /* this */
            aload 1 /* description */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.removeExtraHosts:(Lcom/mongodb/connection/ServerDescription;)V
         6: .line 403
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.mongodb.connection.ServerDescription description
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    7     1  description  Lcom/mongodb/connection/ServerDescription;
    MethodParameters:
             Name  Flags
      description  final

  private boolean hasPrimary();
    descriptor: ()Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
         0: .line 406
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 2
            goto 4
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 1 /* serverTuple */
        start local 1 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         2: .line 407
            aload 1 /* serverTuple */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.isPrimary:()Z
            ifeq 4
         3: .line 408
            iconst_1
            ireturn
        end local 1 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple serverTuple
         4: .line 406
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         5: .line 411
            iconst_0
            ireturn
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            2    4     1  serverTuple  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;

  private void addNewHosts(java.util.Set<java.lang.String>);
    descriptor: (Ljava/util/Set;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // java.util.Set hosts
         0: .line 415
            aload 1 /* hosts */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 3
            goto 3
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Set top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 2 /* cur */
        start local 2 // java.lang.String cur
         2: .line 416
            aload 0 /* this */
            new com.mongodb.ServerAddress
            dup
            aload 2 /* cur */
            invokespecial com.mongodb.ServerAddress.<init>:(Ljava/lang/String;)V
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addServer:(Lcom/mongodb/ServerAddress;)V
        end local 2 // java.lang.String cur
         3: .line 415
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 418
            return
        end local 1 // java.util.Set hosts
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    5     1  hosts  Ljava/util/Set<Ljava/lang/String;>;
            2    3     2    cur  Ljava/lang/String;
    Signature: (Ljava/util/Set<Ljava/lang/String;>;)V
    MethodParameters:
       Name  Flags
      hosts  final

  private void removeExtraHosts(com.mongodb.connection.ServerDescription);
    descriptor: (Lcom/mongodb/connection/ServerDescription;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ServerDescription serverDescription
         0: .line 421
            aload 0 /* this */
            aload 1 /* serverDescription */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.getAllServerAddresses:(Lcom/mongodb/connection/ServerDescription;)Ljava/util/Set;
            astore 2 /* allServerAddresses */
        start local 2 // java.util.Set allServerAddresses
         1: .line 422
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster.addressToServerTupleMap:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3 /* iterator */
        start local 3 // java.util.Iterator iterator
         2: goto 11
         3: .line 423
      StackMap locals: java.util.Set java.util.Iterator
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
            astore 4 /* cur */
        start local 4 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
         4: .line 424
            aload 2 /* allServerAddresses */
            aload 4 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 11
         5: .line 425
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            invokeinterface com.mongodb.diagnostics.logging.Logger.isInfoEnabled:()Z
            ifeq 9
         6: .line 426
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Server %s is no longer a member of the replica set.  Removing from client view of cluster."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         7: .line 427
            aload 4 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.description:Lcom/mongodb/connection/ServerDescription;
            invokevirtual com.mongodb.connection.ServerDescription.getAddress:()Lcom/mongodb/ServerAddress;
            aastore
         8: .line 426
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface com.mongodb.diagnostics.logging.Logger.info:(Ljava/lang/String;)V
         9: .line 429
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.remove:()V
        10: .line 430
            aload 4 /* cur */
            getfield com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple.server:Lcom/mongodb/internal/connection/ClusterableServer;
            invokeinterface com.mongodb.internal.connection.ClusterableServer.close:()V
        end local 4 // com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple cur
        11: .line 422
      StackMap locals:
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
        end local 3 // java.util.Iterator iterator
        12: .line 433
            return
        end local 2 // java.util.Set allServerAddresses
        end local 1 // com.mongodb.connection.ServerDescription serverDescription
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   13     0                this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0   13     1   serverDescription  Lcom/mongodb/connection/ServerDescription;
            1   13     2  allServerAddresses  Ljava/util/Set<Lcom/mongodb/ServerAddress;>;
            2   12     3            iterator  Ljava/util/Iterator<Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;>;
            4   11     4                 cur  Lcom/mongodb/internal/connection/AbstractMultiServerCluster$ServerTuple;
    MethodParameters:
                   Name  Flags
      serverDescription  final

  private java.util.Set<com.mongodb.ServerAddress> getAllServerAddresses(com.mongodb.connection.ServerDescription);
    descriptor: (Lcom/mongodb/connection/ServerDescription;)Ljava/util/Set;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // com.mongodb.connection.ServerDescription serverDescription
         0: .line 436
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 2 /* retVal */
        start local 2 // java.util.Set retVal
         1: .line 437
            aload 0 /* this */
            aload 1 /* serverDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getHosts:()Ljava/util/Set;
            aload 2 /* retVal */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addHostsToSet:(Ljava/util/Set;Ljava/util/Set;)V
         2: .line 438
            aload 0 /* this */
            aload 1 /* serverDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getPassives:()Ljava/util/Set;
            aload 2 /* retVal */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addHostsToSet:(Ljava/util/Set;Ljava/util/Set;)V
         3: .line 439
            aload 0 /* this */
            aload 1 /* serverDescription */
            invokevirtual com.mongodb.connection.ServerDescription.getArbiters:()Ljava/util/Set;
            aload 2 /* retVal */
            invokevirtual com.mongodb.internal.connection.AbstractMultiServerCluster.addHostsToSet:(Ljava/util/Set;Ljava/util/Set;)V
         4: .line 440
            aload 2 /* retVal */
            areturn
        end local 2 // java.util.Set retVal
        end local 1 // com.mongodb.connection.ServerDescription serverDescription
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    5     0               this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    5     1  serverDescription  Lcom/mongodb/connection/ServerDescription;
            1    5     2             retVal  Ljava/util/Set<Lcom/mongodb/ServerAddress;>;
    Signature: (Lcom/mongodb/connection/ServerDescription;)Ljava/util/Set<Lcom/mongodb/ServerAddress;>;
    MethodParameters:
                   Name  Flags
      serverDescription  final

  private void addHostsToSet(java.util.Set<java.lang.String>, java.util.Set<com.mongodb.ServerAddress>);
    descriptor: (Ljava/util/Set;Ljava/util/Set;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
        start local 1 // java.util.Set hosts
        start local 2 // java.util.Set retVal
         0: .line 444
            aload 1 /* hosts */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 4
            goto 3
      StackMap locals: com.mongodb.internal.connection.AbstractMultiServerCluster java.util.Set java.util.Set top java.util.Iterator
      StackMap stack:
         1: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 3 /* host */
        start local 3 // java.lang.String host
         2: .line 445
            aload 2 /* retVal */
            new com.mongodb.ServerAddress
            dup
            aload 3 /* host */
            invokespecial com.mongodb.ServerAddress.<init>:(Ljava/lang/String;)V
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // java.lang.String host
         3: .line 444
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 447
            return
        end local 2 // java.util.Set retVal
        end local 1 // java.util.Set hosts
        end local 0 // com.mongodb.internal.connection.AbstractMultiServerCluster this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lcom/mongodb/internal/connection/AbstractMultiServerCluster;
            0    5     1   hosts  Ljava/util/Set<Ljava/lang/String;>;
            0    5     2  retVal  Ljava/util/Set<Lcom/mongodb/ServerAddress;>;
            2    3     3    host  Ljava/lang/String;
    Signature: (Ljava/util/Set<Ljava/lang/String;>;Ljava/util/Set<Lcom/mongodb/ServerAddress;>;)V
    MethodParameters:
        Name  Flags
      hosts   final
      retVal  final

  public void selectServerAsync(com.mongodb.selector.ServerSelector, com.mongodb.async.SingleResultCallback);
    descriptor: (Lcom/mongodb/selector/ServerSelector;Lcom/mongodb/async/SingleResultCallback;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=3, locals=3, args_size=3
         0: .line 1
            aload 0
            aload 1
            aload 2
            invokespecial com.mongodb.internal.connection.BaseCluster.selectServerAsync:(Lcom/mongodb/selector/ServerSelector;Lcom/mongodb/async/SingleResultCallback;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public boolean isClosed();
    descriptor: ()Z
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1
            aload 0
            invokespecial com.mongodb.internal.connection.BaseCluster.isClosed:()Z
            ireturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public com.mongodb.connection.Server selectServer(com.mongodb.selector.ServerSelector);
    descriptor: (Lcom/mongodb/selector/ServerSelector;)Lcom/mongodb/connection/Server;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            invokespecial com.mongodb.internal.connection.BaseCluster.selectServer:(Lcom/mongodb/selector/ServerSelector;)Lcom/mongodb/connection/Server;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public com.mongodb.connection.ClusterSettings getSettings();
    descriptor: ()Lcom/mongodb/connection/ClusterSettings;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1
            aload 0
            invokespecial com.mongodb.internal.connection.BaseCluster.getSettings:()Lcom/mongodb/connection/ClusterSettings;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public org.bson.BsonTimestamp getClusterTime();
    descriptor: ()Lorg/bson/BsonTimestamp;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1
            aload 0
            invokespecial com.mongodb.internal.connection.BaseCluster.getClusterTime:()Lorg/bson/BsonTimestamp;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public com.mongodb.connection.ClusterDescription getCurrentDescription();
    descriptor: ()Lcom/mongodb/connection/ClusterDescription;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1
            aload 0
            invokespecial com.mongodb.internal.connection.BaseCluster.getCurrentDescription:()Lcom/mongodb/connection/ClusterDescription;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public com.mongodb.connection.ClusterDescription getDescription();
    descriptor: ()Lcom/mongodb/connection/ClusterDescription;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1
            aload 0
            invokespecial com.mongodb.internal.connection.BaseCluster.getDescription:()Lcom/mongodb/connection/ClusterDescription;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public com.mongodb.internal.connection.ClusterableServerFactory getServerFactory();
    descriptor: ()Lcom/mongodb/internal/connection/ClusterableServerFactory;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1
            aload 0
            invokespecial com.mongodb.internal.connection.BaseCluster.getServerFactory:()Lcom/mongodb/internal/connection/ClusterableServerFactory;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static int[] $SWITCH_TABLE$com$mongodb$connection$ClusterType();
    descriptor: ()[I
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 54
            getstatic com.mongodb.internal.connection.AbstractMultiServerCluster.$SWITCH_TABLE$com$mongodb$connection$ClusterType:[I
            dup
            ifnull 1
            areturn
      StackMap locals:
      StackMap stack: int[]
         1: pop
            invokestatic com.mongodb.connection.ClusterType.values:()[Lcom/mongodb/connection/ClusterType;
            arraylength
            newarray 10
            astore 0
         2: aload 0
            getstatic com.mongodb.connection.ClusterType.REPLICA_SET:Lcom/mongodb/connection/ClusterType;
            invokevirtual com.mongodb.connection.ClusterType.ordinal:()I
            iconst_2
            iastore
         3: goto 5
      StackMap locals: int[]
      StackMap stack: java.lang.NoSuchFieldError
         4: pop
      StackMap locals:
      StackMap stack:
         5: aload 0
            getstatic com.mongodb.connection.ClusterType.SHARDED:Lcom/mongodb/connection/ClusterType;
            invokevirtual com.mongodb.connection.ClusterType.ordinal:()I
            iconst_3
            iastore
         6: goto 8
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
         7: pop
      StackMap locals:
      StackMap stack:
         8: aload 0
            getstatic com.mongodb.connection.ClusterType.STANDALONE:Lcom/mongodb/connection/ClusterType;
            invokevirtual com.mongodb.connection.ClusterType.ordinal:()I
            iconst_1
            iastore
         9: goto 11
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        10: pop
      StackMap locals:
      StackMap stack:
        11: aload 0
            getstatic com.mongodb.connection.ClusterType.UNKNOWN:Lcom/mongodb/connection/ClusterType;
            invokevirtual com.mongodb.connection.ClusterType.ordinal:()I
            iconst_4
            iastore
        12: goto 14
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        13: pop
      StackMap locals:
      StackMap stack:
        14: aload 0
            dup
            putstatic com.mongodb.internal.connection.AbstractMultiServerCluster.$SWITCH_TABLE$com$mongodb$connection$ClusterType:[I
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.NoSuchFieldError
           5     6       7  Class java.lang.NoSuchFieldError
           8     9      10  Class java.lang.NoSuchFieldError
          11    12      13  Class java.lang.NoSuchFieldError
}
SourceFile: "AbstractMultiServerCluster.java"
NestMembers:
  com.mongodb.internal.connection.AbstractMultiServerCluster$DefaultServerStateListener  com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple
InnerClasses:
  public Builder = com.mongodb.connection.ServerDescription$Builder of com.mongodb.connection.ServerDescription
  private final DefaultServerStateListener = com.mongodb.internal.connection.AbstractMultiServerCluster$DefaultServerStateListener of com.mongodb.internal.connection.AbstractMultiServerCluster
  private final ServerTuple = com.mongodb.internal.connection.AbstractMultiServerCluster$ServerTuple of com.mongodb.internal.connection.AbstractMultiServerCluster