public class com.datastax.oss.driver.internal.core.control.ControlConnection implements com.datastax.oss.driver.internal.core.channel.EventCallback, com.datastax.oss.driver.api.core.AsyncAutoCloseable
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.datastax.oss.driver.internal.core.control.ControlConnection
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger LOG;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final com.datastax.oss.driver.internal.core.context.InternalDriverContext context;
    descriptor: Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.String logPrefix;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final io.netty.util.concurrent.EventExecutor adminExecutor;
    descriptor: Lio/netty/util/concurrent/EventExecutor;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded singleThreaded;
    descriptor: Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile com.datastax.oss.driver.internal.core.channel.DriverChannel channel;
    descriptor: Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 83
            ldc Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
            putstatic com.datastax.oss.driver.internal.core.control.ControlConnection.LOG:Lorg/slf4j/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(com.datastax.oss.driver.internal.core.context.InternalDriverContext);
    descriptor: (Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // com.datastax.oss.driver.internal.core.context.InternalDriverContext context
         0: .line 94
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 95
            aload 0 /* this */
            aload 1 /* context */
            putfield com.datastax.oss.driver.internal.core.control.ControlConnection.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
         2: .line 96
            aload 0 /* this */
            aload 1 /* context */
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getSessionName:()Ljava/lang/String;
            putfield com.datastax.oss.driver.internal.core.control.ControlConnection.logPrefix:Ljava/lang/String;
         3: .line 97
            aload 0 /* this */
            aload 1 /* context */
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getNettyOptions:()Lcom/datastax/oss/driver/internal/core/context/NettyOptions;
            invokeinterface com.datastax.oss.driver.internal.core.context.NettyOptions.adminEventExecutorGroup:()Lio/netty/util/concurrent/EventExecutorGroup;
            invokeinterface io.netty.util.concurrent.EventExecutorGroup.next:()Lio/netty/util/concurrent/EventExecutor;
            putfield com.datastax.oss.driver.internal.core.control.ControlConnection.adminExecutor:Lio/netty/util/concurrent/EventExecutor;
         4: .line 98
            aload 0 /* this */
            new com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded
            dup
            aload 0 /* this */
            aload 1 /* context */
            invokespecial com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.<init>:(Lcom/datastax/oss/driver/internal/core/control/ControlConnection;Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;)V
            putfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
         5: .line 99
            return
        end local 1 // com.datastax.oss.driver.internal.core.context.InternalDriverContext context
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0    6     1  context  Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
    MethodParameters:
         Name  Flags
      context  

  public java.util.concurrent.CompletionStage<java.lang.Void> init(boolean, boolean, boolean);
    descriptor: (ZZZ)Ljava/util/concurrent/CompletionStage;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // boolean listenToClusterEvents
        start local 2 // boolean reconnectOnFailure
        start local 3 // boolean useInitialReconnectionSchedule
         0: .line 120
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.adminExecutor:Lio/netty/util/concurrent/EventExecutor;
         1: .line 121
            aload 0 /* this */
            iload 1 /* listenToClusterEvents */
            iload 2 /* reconnectOnFailure */
            iload 3 /* useInitialReconnectionSchedule */
            invokedynamic run(Lcom/datastax/oss/driver/internal/core/control/ControlConnection;ZZZ)Ljava/lang/Runnable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()V
                  com/datastax/oss/driver/internal/core/control/ControlConnection.lambda$0(ZZZ)V (7)
                  ()V
         2: .line 119
            invokestatic com.datastax.oss.driver.internal.core.util.concurrent.RunOrSchedule.on:(Lio/netty/util/concurrent/EventExecutor;Ljava/lang/Runnable;)V
         3: .line 124
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.initFuture:Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 3 // boolean useInitialReconnectionSchedule
        end local 2 // boolean reconnectOnFailure
        end local 1 // boolean listenToClusterEvents
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot                            Name  Signature
            0    4     0                            this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0    4     1           listenToClusterEvents  Z
            0    4     2              reconnectOnFailure  Z
            0    4     3  useInitialReconnectionSchedule  Z
    Signature: (ZZZ)Ljava/util/concurrent/CompletionStage<Ljava/lang/Void;>;
    MethodParameters:
                                Name  Flags
      listenToClusterEvents           
      reconnectOnFailure              
      useInitialReconnectionSchedule  

  public java.util.concurrent.CompletionStage<java.lang.Void> initFuture();
    descriptor: ()Ljava/util/concurrent/CompletionStage;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 128
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.initFuture:Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
    Signature: ()Ljava/util/concurrent/CompletionStage<Ljava/lang/Void;>;

  public boolean isInit();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 132
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.initFuture:Ljava/util/concurrent/CompletableFuture;
            invokevirtual java.util.concurrent.CompletableFuture.isDone:()Z
            ireturn
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;

  public com.datastax.oss.driver.internal.core.channel.DriverChannel channel();
    descriptor: ()Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 141
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.channel:Lcom/datastax/oss/driver/internal/core/channel/DriverChannel;
            areturn
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;

  public void reconnectNow();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 151
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.adminExecutor:Lio/netty/util/concurrent/EventExecutor;
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
            dup
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            pop
            invokedynamic run(Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;)Ljava/lang/Runnable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()V
                  com/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded.access$0(Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;)V (6)
                  ()V
            invokestatic com.datastax.oss.driver.internal.core.util.concurrent.RunOrSchedule.on:(Lio/netty/util/concurrent/EventExecutor;Ljava/lang/Runnable;)V
         1: .line 152
            return
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;

  public java.util.concurrent.CompletionStage<java.lang.Void> closeFuture();
    descriptor: ()Ljava/util/concurrent/CompletionStage;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 157
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.closeFuture:Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
    Signature: ()Ljava/util/concurrent/CompletionStage<Ljava/lang/Void;>;
    RuntimeInvisibleAnnotations: 
      edu.umd.cs.findbugs.annotations.NonNull()

  public java.util.concurrent.CompletionStage<java.lang.Void> closeAsync();
    descriptor: ()Ljava/util/concurrent/CompletionStage;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 164
            aload 0 /* this */
            invokevirtual com.datastax.oss.driver.internal.core.control.ControlConnection.forceCloseAsync:()Ljava/util/concurrent/CompletionStage;
            areturn
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
    Signature: ()Ljava/util/concurrent/CompletionStage<Ljava/lang/Void;>;
    RuntimeInvisibleAnnotations: 
      edu.umd.cs.findbugs.annotations.NonNull()

  public java.util.concurrent.CompletionStage<java.lang.Void> forceCloseAsync();
    descriptor: ()Ljava/util/concurrent/CompletionStage;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 170
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.adminExecutor:Lio/netty/util/concurrent/EventExecutor;
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
            dup
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            pop
            invokedynamic run(Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;)Ljava/lang/Runnable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()V
                  com/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded.access$1(Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;)V (6)
                  ()V
            invokestatic com.datastax.oss.driver.internal.core.util.concurrent.RunOrSchedule.on:(Lio/netty/util/concurrent/EventExecutor;Ljava/lang/Runnable;)V
         1: .line 171
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.closeFuture:Ljava/util/concurrent/CompletableFuture;
            areturn
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
    Signature: ()Ljava/util/concurrent/CompletionStage<Ljava/lang/Void;>;
    RuntimeInvisibleAnnotations: 
      edu.umd.cs.findbugs.annotations.NonNull()

  public void onEvent(com.datastax.oss.protocol.internal.Message);
    descriptor: (Lcom/datastax/oss/protocol/internal/Message;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // com.datastax.oss.protocol.internal.Message eventMessage
         0: .line 176
            aload 1 /* eventMessage */
            instanceof com.datastax.oss.protocol.internal.response.Event
            ifne 3
         1: .line 177
            getstatic com.datastax.oss.driver.internal.core.control.ControlConnection.LOG:Lorg/slf4j/Logger;
            ldc "[{}] Unsupported event class: {}"
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.logPrefix:Ljava/lang/String;
            aload 1 /* eventMessage */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         2: .line 178
            goto 16
         3: .line 179
      StackMap locals:
      StackMap stack:
            getstatic com.datastax.oss.driver.internal.core.control.ControlConnection.LOG:Lorg/slf4j/Logger;
            ldc "[{}] Processing incoming event {}"
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.logPrefix:Ljava/lang/String;
            aload 1 /* eventMessage */
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         4: .line 180
            aload 1 /* eventMessage */
            checkcast com.datastax.oss.protocol.internal.response.Event
            astore 2 /* event */
        start local 2 // com.datastax.oss.protocol.internal.response.Event event
         5: .line 181
            aload 2 /* event */
            getfield com.datastax.oss.protocol.internal.response.Event.type:Ljava/lang/String;
            dup
            astore 3
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 3
           -779858787: 6
             48269184: 7
            548598798: 8
              default: 15
          }
      StackMap locals: com.datastax.oss.protocol.internal.response.Event java.lang.String
      StackMap stack:
         6: aload 3
            ldc "STATUS_CHANGE"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 11
            goto 15
      StackMap locals:
      StackMap stack:
         7: aload 3
            ldc "TOPOLOGY_CHANGE"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 9
            goto 15
      StackMap locals:
      StackMap stack:
         8: aload 3
            ldc "SCHEMA_CHANGE"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 13
            goto 15
         9: .line 183
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* event */
            invokevirtual com.datastax.oss.driver.internal.core.control.ControlConnection.processTopologyChange:(Lcom/datastax/oss/protocol/internal/response/Event;)V
        10: .line 184
            goto 16
        11: .line 186
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* event */
            invokevirtual com.datastax.oss.driver.internal.core.control.ControlConnection.processStatusChange:(Lcom/datastax/oss/protocol/internal/response/Event;)V
        12: .line 187
            goto 16
        13: .line 189
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* event */
            invokevirtual com.datastax.oss.driver.internal.core.control.ControlConnection.processSchemaChange:(Lcom/datastax/oss/protocol/internal/response/Event;)V
        14: .line 190
            goto 16
        15: .line 192
      StackMap locals:
      StackMap stack:
            getstatic com.datastax.oss.driver.internal.core.control.ControlConnection.LOG:Lorg/slf4j/Logger;
            ldc "[{}] Unsupported event type: {}"
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.logPrefix:Ljava/lang/String;
            aload 2 /* event */
            getfield com.datastax.oss.protocol.internal.response.Event.type:Ljava/lang/String;
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        end local 2 // com.datastax.oss.protocol.internal.response.Event event
        16: .line 195
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.datastax.oss.protocol.internal.Message eventMessage
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   17     0          this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0   17     1  eventMessage  Lcom/datastax/oss/protocol/internal/Message;
            5   16     2         event  Lcom/datastax/oss/protocol/internal/response/Event;
    MethodParameters:
              Name  Flags
      eventMessage  

  private void processTopologyChange(com.datastax.oss.protocol.internal.response.Event);
    descriptor: (Lcom/datastax/oss/protocol/internal/response/Event;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // com.datastax.oss.protocol.internal.response.Event event
         0: .line 198
            aload 1 /* event */
            checkcast com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent
            astore 2 /* tce */
        start local 2 // com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent tce
         1: .line 199
            aload 2 /* tce */
            getfield com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent.changeType:Ljava/lang/String;
            dup
            astore 3
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 2
          -2105630367: 2
           1960600225: 3
              default: 8
          }
      StackMap locals: com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent java.lang.String
      StackMap stack:
         2: aload 3
            ldc "NEW_NODE"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
            goto 8
      StackMap locals:
      StackMap stack:
         3: aload 3
            ldc "REMOVED_NODE"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 6
            goto 8
         4: .line 201
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getEventBus:()Lcom/datastax/oss/driver/internal/core/context/EventBus;
            aload 2 /* tce */
            getfield com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent.address:Ljava/net/InetSocketAddress;
            invokestatic com.datastax.oss.driver.internal.core.metadata.TopologyEvent.suggestAdded:(Ljava/net/InetSocketAddress;)Lcom/datastax/oss/driver/internal/core/metadata/TopologyEvent;
            invokevirtual com.datastax.oss.driver.internal.core.context.EventBus.fire:(Ljava/lang/Object;)V
         5: .line 202
            goto 9
         6: .line 204
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getEventBus:()Lcom/datastax/oss/driver/internal/core/context/EventBus;
            aload 2 /* tce */
            getfield com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent.address:Ljava/net/InetSocketAddress;
            invokestatic com.datastax.oss.driver.internal.core.metadata.TopologyEvent.suggestRemoved:(Ljava/net/InetSocketAddress;)Lcom/datastax/oss/driver/internal/core/metadata/TopologyEvent;
            invokevirtual com.datastax.oss.driver.internal.core.context.EventBus.fire:(Ljava/lang/Object;)V
         7: .line 205
            goto 9
         8: .line 207
      StackMap locals:
      StackMap stack:
            getstatic com.datastax.oss.driver.internal.core.control.ControlConnection.LOG:Lorg/slf4j/Logger;
            ldc "[{}] Unsupported topology change type: {}"
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.logPrefix:Ljava/lang/String;
            aload 2 /* tce */
            getfield com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent.changeType:Ljava/lang/String;
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 209
      StackMap locals:
      StackMap stack:
            return
        end local 2 // com.datastax.oss.protocol.internal.response.event.TopologyChangeEvent tce
        end local 1 // com.datastax.oss.protocol.internal.response.Event event
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   10     0   this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0   10     1  event  Lcom/datastax/oss/protocol/internal/response/Event;
            1   10     2    tce  Lcom/datastax/oss/protocol/internal/response/event/TopologyChangeEvent;
    MethodParameters:
       Name  Flags
      event  

  private void processStatusChange(com.datastax.oss.protocol.internal.response.Event);
    descriptor: (Lcom/datastax/oss/protocol/internal/response/Event;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // com.datastax.oss.protocol.internal.response.Event event
         0: .line 212
            aload 1 /* event */
            checkcast com.datastax.oss.protocol.internal.response.event.StatusChangeEvent
            astore 2 /* sce */
        start local 2 // com.datastax.oss.protocol.internal.response.event.StatusChangeEvent sce
         1: .line 213
            aload 2 /* sce */
            getfield com.datastax.oss.protocol.internal.response.event.StatusChangeEvent.changeType:Ljava/lang/String;
            dup
            astore 3
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 2
                 2715: 2
              2104482: 3
              default: 8
          }
      StackMap locals: com.datastax.oss.protocol.internal.response.event.StatusChangeEvent java.lang.String
      StackMap stack:
         2: aload 3
            ldc "UP"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
            goto 8
      StackMap locals:
      StackMap stack:
         3: aload 3
            ldc "DOWN"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 6
            goto 8
         4: .line 215
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getEventBus:()Lcom/datastax/oss/driver/internal/core/context/EventBus;
            aload 2 /* sce */
            getfield com.datastax.oss.protocol.internal.response.event.StatusChangeEvent.address:Ljava/net/InetSocketAddress;
            invokestatic com.datastax.oss.driver.internal.core.metadata.TopologyEvent.suggestUp:(Ljava/net/InetSocketAddress;)Lcom/datastax/oss/driver/internal/core/metadata/TopologyEvent;
            invokevirtual com.datastax.oss.driver.internal.core.context.EventBus.fire:(Ljava/lang/Object;)V
         5: .line 216
            goto 9
         6: .line 218
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getEventBus:()Lcom/datastax/oss/driver/internal/core/context/EventBus;
            aload 2 /* sce */
            getfield com.datastax.oss.protocol.internal.response.event.StatusChangeEvent.address:Ljava/net/InetSocketAddress;
            invokestatic com.datastax.oss.driver.internal.core.metadata.TopologyEvent.suggestDown:(Ljava/net/InetSocketAddress;)Lcom/datastax/oss/driver/internal/core/metadata/TopologyEvent;
            invokevirtual com.datastax.oss.driver.internal.core.context.EventBus.fire:(Ljava/lang/Object;)V
         7: .line 219
            goto 9
         8: .line 221
      StackMap locals:
      StackMap stack:
            getstatic com.datastax.oss.driver.internal.core.control.ControlConnection.LOG:Lorg/slf4j/Logger;
            ldc "[{}] Unsupported status change type: {}"
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.logPrefix:Ljava/lang/String;
            aload 2 /* sce */
            getfield com.datastax.oss.protocol.internal.response.event.StatusChangeEvent.changeType:Ljava/lang/String;
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         9: .line 223
      StackMap locals:
      StackMap stack:
            return
        end local 2 // com.datastax.oss.protocol.internal.response.event.StatusChangeEvent sce
        end local 1 // com.datastax.oss.protocol.internal.response.Event event
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   10     0   this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0   10     1  event  Lcom/datastax/oss/protocol/internal/response/Event;
            1   10     2    sce  Lcom/datastax/oss/protocol/internal/response/event/StatusChangeEvent;
    MethodParameters:
       Name  Flags
      event  

  private void processSchemaChange(com.datastax.oss.protocol.internal.response.Event);
    descriptor: (Lcom/datastax/oss/protocol/internal/response/Event;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // com.datastax.oss.protocol.internal.response.Event event
         0: .line 226
            aload 1 /* event */
            checkcast com.datastax.oss.protocol.internal.response.event.SchemaChangeEvent
            astore 2 /* sce */
        start local 2 // com.datastax.oss.protocol.internal.response.event.SchemaChangeEvent sce
         1: .line 227
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.context:Lcom/datastax/oss/driver/internal/core/context/InternalDriverContext;
         2: .line 228
            invokeinterface com.datastax.oss.driver.internal.core.context.InternalDriverContext.getMetadataManager:()Lcom/datastax/oss/driver/internal/core/metadata/MetadataManager;
         3: .line 229
            aload 2 /* sce */
            getfield com.datastax.oss.protocol.internal.response.event.SchemaChangeEvent.keyspace:Ljava/lang/String;
            iconst_0
            iconst_0
            invokevirtual com.datastax.oss.driver.internal.core.metadata.MetadataManager.refreshSchema:(Ljava/lang/String;ZZ)Ljava/util/concurrent/CompletionStage;
         4: .line 231
            aload 0 /* this */
            invokedynamic accept(Lcom/datastax/oss/driver/internal/core/control/ControlConnection;)Ljava/util/function/BiConsumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;Ljava/lang/Object;)V
                  com/datastax/oss/driver/internal/core/control/ControlConnection.lambda$3(Lcom/datastax/oss/driver/internal/core/metadata/MetadataManager$RefreshSchemaResult;Ljava/lang/Throwable;)V (7)
                  (Lcom/datastax/oss/driver/internal/core/metadata/MetadataManager$RefreshSchemaResult;Ljava/lang/Throwable;)V
         5: .line 230
            invokeinterface java.util.concurrent.CompletionStage.whenComplete:(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;
            pop
         6: .line 241
            return
        end local 2 // com.datastax.oss.protocol.internal.response.event.SchemaChangeEvent sce
        end local 1 // com.datastax.oss.protocol.internal.response.Event event
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0    7     1  event  Lcom/datastax/oss/protocol/internal/response/Event;
            1    7     2    sce  Lcom/datastax/oss/protocol/internal/response/event/SchemaChangeEvent;
    MethodParameters:
       Name  Flags
      event  

  private boolean isAuthFailure(java.lang.Throwable);
    descriptor: (Ljava/lang/Throwable;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=7, args_size=2
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // java.lang.Throwable error
         0: .line 591
            aload 1 /* error */
            instanceof com.datastax.oss.driver.api.core.AllNodesFailedException
            ifeq 13
         1: .line 593
            aload 1 /* error */
            checkcast com.datastax.oss.driver.api.core.AllNodesFailedException
            invokevirtual com.datastax.oss.driver.api.core.AllNodesFailedException.getAllErrors:()Ljava/util/Map;
            invokeinterface java.util.Map.values:()Ljava/util/Collection;
         2: .line 592
            astore 2 /* errors */
        start local 2 // java.util.Collection errors
         3: .line 594
            aload 2 /* errors */
            invokeinterface java.util.Collection.size:()I
            ifne 5
         4: .line 595
            iconst_0
            ireturn
         5: .line 597
      StackMap locals: java.util.Collection
      StackMap stack:
            aload 2 /* errors */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4
            goto 12
      StackMap locals: com.datastax.oss.driver.internal.core.control.ControlConnection java.lang.Throwable java.util.Collection top java.util.Iterator
      StackMap stack:
         6: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.List
            astore 3 /* nodeErrors */
        start local 3 // java.util.List nodeErrors
         7: .line 598
            aload 3 /* nodeErrors */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 6
            goto 11
      StackMap locals: com.datastax.oss.driver.internal.core.control.ControlConnection java.lang.Throwable java.util.Collection java.util.List java.util.Iterator top java.util.Iterator
      StackMap stack:
         8: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Throwable
            astore 5 /* nodeError */
        start local 5 // java.lang.Throwable nodeError
         9: .line 599
            aload 5 /* nodeError */
            instanceof com.datastax.oss.driver.api.core.auth.AuthenticationException
            ifne 11
        10: .line 600
            iconst_0
            ireturn
        end local 5 // java.lang.Throwable nodeError
        11: .line 598
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        end local 3 // java.util.List nodeErrors
        12: .line 597
      StackMap locals: com.datastax.oss.driver.internal.core.control.ControlConnection java.lang.Throwable java.util.Collection top java.util.Iterator
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        end local 2 // java.util.Collection errors
        13: .line 605
      StackMap locals: com.datastax.oss.driver.internal.core.control.ControlConnection java.lang.Throwable
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // java.lang.Throwable error
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0        this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0   14     1       error  Ljava/lang/Throwable;
            3   13     2      errors  Ljava/util/Collection<Ljava/util/List<Ljava/lang/Throwable;>;>;
            7   12     3  nodeErrors  Ljava/util/List<Ljava/lang/Throwable;>;
            9   11     5   nodeError  Ljava/lang/Throwable;
    MethodParameters:
       Name  Flags
      error  

  private static com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList<java.lang.String> buildEventTypes(boolean);
    descriptor: (Z)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // boolean listenClusterEvents
         0: .line 609
            invokestatic com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList.builder:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder;
            astore 1 /* builder */
        start local 1 // com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder builder
         1: .line 610
            aload 1 /* builder */
            ldc "SCHEMA_CHANGE"
            invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder.add:(Ljava/lang/Object;)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder;
            pop
         2: .line 611
            iload 0 /* listenClusterEvents */
            ifeq 6
         3: .line 612
            aload 1 /* builder */
         4: .line 613
            ldc "STATUS_CHANGE"
            invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder.add:(Ljava/lang/Object;)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder;
         5: .line 614
            ldc "TOPOLOGY_CHANGE"
            invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder.add:(Ljava/lang/Object;)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder;
            pop
         6: .line 616
      StackMap locals: com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder
      StackMap stack:
            aload 1 /* builder */
            invokevirtual com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder.build:()Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList;
            areturn
        end local 1 // com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder builder
        end local 0 // boolean listenClusterEvents
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    7     0  listenClusterEvents  Z
            1    7     1              builder  Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList$Builder<Ljava/lang/String;>;
    Signature: (Z)Lcom/datastax/oss/driver/shaded/guava/common/collect/ImmutableList<Ljava/lang/String;>;
    MethodParameters:
                     Name  Flags
      listenClusterEvents  

  private void lambda$0(boolean, boolean, boolean);
    descriptor: (ZZZ)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
         0: .line 122
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.singleThreaded:Lcom/datastax/oss/driver/internal/core/control/ControlConnection$SingleThreaded;
         1: .line 123
            iload 1
            iload 2
            iload 3
         2: .line 122
            invokevirtual com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded.init:(ZZZ)V
         3: .line 123
            return
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;

  private void lambda$3(com.datastax.oss.driver.internal.core.metadata.MetadataManager$RefreshSchemaResult, java.lang.Throwable);
    descriptor: (Lcom/datastax/oss/driver/internal/core/metadata/MetadataManager$RefreshSchemaResult;Ljava/lang/Throwable;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
        start local 1 // com.datastax.oss.driver.internal.core.metadata.MetadataManager$RefreshSchemaResult metadata
        start local 2 // java.lang.Throwable error
         0: .line 232
            aload 2 /* error */
            ifnull 6
         1: .line 234
            getstatic com.datastax.oss.driver.internal.core.control.ControlConnection.LOG:Lorg/slf4j/Logger;
         2: .line 235
            ldc "[{}] Unexpected error while refreshing schema for a SCHEMA_CHANGE event, keeping previous version"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         3: .line 237
            aload 0 /* this */
            getfield com.datastax.oss.driver.internal.core.control.ControlConnection.logPrefix:Ljava/lang/String;
            aastore
            dup
            iconst_1
         4: .line 238
            aload 2 /* error */
            aastore
         5: .line 233
            invokestatic com.datastax.oss.driver.internal.core.util.Loggers.warnWithException:(Lorg/slf4j/Logger;Ljava/lang/String;[Ljava/lang/Object;)V
         6: .line 240
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.Throwable error
        end local 1 // com.datastax.oss.driver.internal.core.metadata.MetadataManager$RefreshSchemaResult metadata
        end local 0 // com.datastax.oss.driver.internal.core.control.ControlConnection this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    7     0      this  Lcom/datastax/oss/driver/internal/core/control/ControlConnection;
            0    7     1  metadata  Lcom/datastax/oss/driver/internal/core/metadata/MetadataManager$RefreshSchemaResult;
            0    7     2     error  Ljava/lang/Throwable;
}
SourceFile: "ControlConnection.java"
NestMembers:
  com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded
InnerClasses:
  private SingleThreaded = com.datastax.oss.driver.internal.core.control.ControlConnection$SingleThreaded of com.datastax.oss.driver.internal.core.control.ControlConnection
  public RefreshSchemaResult = com.datastax.oss.driver.internal.core.metadata.MetadataManager$RefreshSchemaResult of com.datastax.oss.driver.internal.core.metadata.MetadataManager
  public final Builder = com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList$Builder of com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
    RuntimeVisibleAnnotations: 
      net.jcip.annotations.ThreadSafe()