public final class com.sun.jndi.ldap.Connection implements java.lang.Runnable
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.sun.jndi.ldap.Connection
  super_class: java.lang.Object
{
  private static final boolean debug;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int dump;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

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

  private boolean v3;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  public final java.lang.String host;
    descriptor: Ljava/lang/String;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL

  public final int port;
    descriptor: I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL

  private boolean bound;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private java.io.OutputStream traceFile;
    descriptor: Ljava/io/OutputStream;
    flags: (0x0002) ACC_PRIVATE

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

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

  public java.io.InputStream inStream;
    descriptor: Ljava/io/InputStream;
    flags: (0x0001) ACC_PUBLIC

  public java.io.OutputStream outStream;
    descriptor: Ljava/io/OutputStream;
    flags: (0x0001) ACC_PUBLIC

  public java.net.Socket sock;
    descriptor: Ljava/net/Socket;
    flags: (0x0001) ACC_PUBLIC

  private final com.sun.jndi.ldap.LdapClient parent;
    descriptor: Lcom/sun/jndi/ldap/LdapClient;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private int outMsgId;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private com.sun.jndi.ldap.LdapRequest pendingRequests;
    descriptor: Lcom/sun/jndi/ldap/LdapRequest;
    flags: (0x0002) ACC_PRIVATE

  volatile java.io.IOException closureReason;
    descriptor: Ljava/io/IOException;
    flags: (0x0040) ACC_VOLATILE

  volatile boolean useable;
    descriptor: Z
    flags: (0x0040) ACC_VOLATILE

  int readTimeout;
    descriptor: I
    flags: (0x0000) 

  int connectTimeout;
    descriptor: I
    flags: (0x0000) 

  private volatile boolean isUpgradedToStartTls;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  final java.lang.Object startTlsLock;
    descriptor: Ljava/lang/Object;
    flags: (0x0010) ACC_FINAL

  private static final boolean IS_HOSTNAME_VERIFICATION_DISABLED;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

  private boolean paused;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private volatile com.sun.jndi.ldap.Connection$HandshakeListener tlsHandshakeListener;
    descriptor: Lcom/sun/jndi/ldap/Connection$HandshakeListener;
    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 180
            invokestatic com.sun.jndi.ldap.Connection.hostnameVerificationDisabledValue:()Z
         1: .line 179
            putstatic com.sun.jndi.ldap.Connection.IS_HOSTNAME_VERIFICATION_DISABLED:Z
         2: .line 180
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private static boolean hostnameVerificationDisabledValue();
    descriptor: ()Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=2, args_size=0
         0: .line 183
            invokedynamic run()Ljava/security/PrivilegedAction;
              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;
                  com/sun/jndi/ldap/Connection.lambda$0()Ljava/lang/String; (6)
                  ()Ljava/lang/String;
            astore 0 /* act */
        start local 0 // java.security.PrivilegedAction act
         1: .line 185
            aload 0 /* act */
            invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
            checkcast java.lang.String
            astore 1 /* prop */
        start local 1 // java.lang.String prop
         2: .line 186
            aload 1 /* prop */
            ifnonnull 4
         3: .line 187
            iconst_0
            ireturn
         4: .line 189
      StackMap locals: java.security.PrivilegedAction java.lang.String
      StackMap stack:
            aload 1 /* prop */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 5
            iconst_1
            goto 6
      StackMap locals:
      StackMap stack:
         5: aload 1 /* prop */
            invokestatic java.lang.Boolean.parseBoolean:(Ljava/lang/String;)Z
      StackMap locals:
      StackMap stack: int
         6: ireturn
        end local 1 // java.lang.String prop
        end local 0 // java.security.PrivilegedAction act
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            1    7     0   act  Ljava/security/PrivilegedAction<Ljava/lang/String;>;
            2    7     1  prop  Ljava/lang/String;

  void setV3(boolean);
    descriptor: (Z)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // boolean v
         0: .line 195
            aload 0 /* this */
            iload 1 /* v */
            putfield com.sun.jndi.ldap.Connection.v3:Z
         1: .line 196
            return
        end local 1 // boolean v
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/jndi/ldap/Connection;
            0    2     1     v  Z
    MethodParameters:
      Name  Flags
      v     

  void setBound();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 203
            aload 0 /* this */
            iconst_1
            putfield com.sun.jndi.ldap.Connection.bound:Z
         1: .line 204
            return
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/jndi/ldap/Connection;

  void <init>(com.sun.jndi.ldap.LdapClient, java.lang.String, int, java.lang.String, int, int, java.io.OutputStream);
    descriptor: (Lcom/sun/jndi/ldap/LdapClient;Ljava/lang/String;ILjava/lang/String;IILjava/io/OutputStream;)V
    flags: (0x0000) 
    Code:
      stack=6, locals=11, args_size=8
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.LdapClient parent
        start local 2 // java.lang.String host
        start local 3 // int port
        start local 4 // java.lang.String socketFactory
        start local 5 // int connectTimeout
        start local 6 // int readTimeout
        start local 7 // java.io.OutputStream trace
         0: .line 212
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 128
            aload 0 /* this */
            iconst_1
            putfield com.sun.jndi.ldap.Connection.v3:Z
         2: .line 135
            aload 0 /* this */
            iconst_0
            putfield com.sun.jndi.ldap.Connection.bound:Z
         3: .line 138
            aload 0 /* this */
            aconst_null
            putfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
         4: .line 139
            aload 0 /* this */
            aconst_null
            putfield com.sun.jndi.ldap.Connection.traceTagIn:Ljava/lang/String;
         5: .line 140
            aload 0 /* this */
            aconst_null
            putfield com.sun.jndi.ldap.Connection.traceTagOut:Ljava/lang/String;
         6: .line 159
            aload 0 /* this */
            iconst_0
            putfield com.sun.jndi.ldap.Connection.outMsgId:I
         7: .line 165
            aload 0 /* this */
            aconst_null
            putfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
         8: .line 167
            aload 0 /* this */
            aconst_null
            putfield com.sun.jndi.ldap.Connection.closureReason:Ljava/io/IOException;
         9: .line 168
            aload 0 /* this */
            iconst_1
            putfield com.sun.jndi.ldap.Connection.useable:Z
        10: .line 177
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield com.sun.jndi.ldap.Connection.startTlsLock:Ljava/lang/Object;
        11: .line 781
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield com.sun.jndi.ldap.Connection.pauseLock:Ljava/lang/Object;
        12: .line 782
            aload 0 /* this */
            iconst_0
            putfield com.sun.jndi.ldap.Connection.paused:Z
        13: .line 215
            aload 0 /* this */
            aload 2 /* host */
            putfield com.sun.jndi.ldap.Connection.host:Ljava/lang/String;
        14: .line 216
            aload 0 /* this */
            iload 3 /* port */
            putfield com.sun.jndi.ldap.Connection.port:I
        15: .line 217
            aload 0 /* this */
            aload 1 /* parent */
            putfield com.sun.jndi.ldap.Connection.parent:Lcom/sun/jndi/ldap/LdapClient;
        16: .line 218
            aload 0 /* this */
            iload 6 /* readTimeout */
            putfield com.sun.jndi.ldap.Connection.readTimeout:I
        17: .line 219
            aload 0 /* this */
            iload 5 /* connectTimeout */
            putfield com.sun.jndi.ldap.Connection.connectTimeout:I
        18: .line 221
            aload 7 /* trace */
            ifnull 22
        19: .line 222
            aload 0 /* this */
            aload 7 /* trace */
            putfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
        20: .line 223
            aload 0 /* this */
            new java.lang.StringBuilder
            dup
            ldc "<- "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* host */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 3 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc "\n\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putfield com.sun.jndi.ldap.Connection.traceTagIn:Ljava/lang/String;
        21: .line 224
            aload 0 /* this */
            new java.lang.StringBuilder
            dup
            ldc "-> "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* host */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 3 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc "\n\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putfield com.sun.jndi.ldap.Connection.traceTagOut:Ljava/lang/String;
        22: .line 231
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.LdapClient java.lang.String int java.lang.String int int java.io.OutputStream
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            aload 2 /* host */
            iload 3 /* port */
            aload 4 /* socketFactory */
            iload 5 /* connectTimeout */
            invokevirtual com.sun.jndi.ldap.Connection.createSocket:(Ljava/lang/String;ILjava/lang/String;I)Ljava/net/Socket;
            putfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
        23: .line 237
            aload 0 /* this */
            new java.io.BufferedInputStream
            dup
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
            invokevirtual java.net.Socket.getInputStream:()Ljava/io/InputStream;
            invokespecial java.io.BufferedInputStream.<init>:(Ljava/io/InputStream;)V
            putfield com.sun.jndi.ldap.Connection.inStream:Ljava/io/InputStream;
        24: .line 238
            aload 0 /* this */
            new java.io.BufferedOutputStream
            dup
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
            invokevirtual java.net.Socket.getOutputStream:()Ljava/io/OutputStream;
            invokespecial java.io.BufferedOutputStream.<init>:(Ljava/io/OutputStream;)V
            putfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
        25: .line 240
            goto 37
      StackMap locals:
      StackMap stack: java.lang.reflect.InvocationTargetException
        26: astore 8 /* e */
        start local 8 // java.lang.reflect.InvocationTargetException e
        27: .line 241
            aload 8 /* e */
            invokevirtual java.lang.reflect.InvocationTargetException.getTargetException:()Ljava/lang/Throwable;
            astore 9 /* realException */
        start local 9 // java.lang.Throwable realException
        28: .line 245
            new javax.naming.CommunicationException
            dup
            new java.lang.StringBuilder
            dup
            aload 2 /* host */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 3 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial javax.naming.CommunicationException.<init>:(Ljava/lang/String;)V
        29: .line 244
            astore 10 /* ce */
        start local 10 // javax.naming.CommunicationException ce
        30: .line 246
            aload 10 /* ce */
            aload 9 /* realException */
            invokevirtual javax.naming.CommunicationException.setRootCause:(Ljava/lang/Throwable;)V
        31: .line 247
            aload 10 /* ce */
            athrow
        end local 10 // javax.naming.CommunicationException ce
        end local 9 // java.lang.Throwable realException
        end local 8 // java.lang.reflect.InvocationTargetException e
        32: .line 248
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 8 /* e */
        start local 8 // java.lang.Exception e
        33: .line 253
            new javax.naming.CommunicationException
            dup
            new java.lang.StringBuilder
            dup
            aload 2 /* host */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 3 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial javax.naming.CommunicationException.<init>:(Ljava/lang/String;)V
        34: .line 252
            astore 9 /* ce */
        start local 9 // javax.naming.CommunicationException ce
        35: .line 254
            aload 9 /* ce */
            aload 8 /* e */
            invokevirtual javax.naming.CommunicationException.setRootCause:(Ljava/lang/Throwable;)V
        36: .line 255
            aload 9 /* ce */
            athrow
        end local 9 // javax.naming.CommunicationException ce
        end local 8 // java.lang.Exception e
        37: .line 258
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic com.sun.jndi.ldap.Obj.helper:Lcom/sun/jndi/ldap/VersionHelper;
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.VersionHelper.createThread:(Ljava/lang/Runnable;)Ljava/lang/Thread;
            putfield com.sun.jndi.ldap.Connection.worker:Ljava/lang/Thread;
        38: .line 259
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.worker:Ljava/lang/Thread;
            iconst_1
            invokevirtual java.lang.Thread.setDaemon:(Z)V
        39: .line 260
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.worker:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.start:()V
        40: .line 261
            return
        end local 7 // java.io.OutputStream trace
        end local 6 // int readTimeout
        end local 5 // int connectTimeout
        end local 4 // java.lang.String socketFactory
        end local 3 // int port
        end local 2 // java.lang.String host
        end local 1 // com.sun.jndi.ldap.LdapClient parent
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   41     0            this  Lcom/sun/jndi/ldap/Connection;
            0   41     1          parent  Lcom/sun/jndi/ldap/LdapClient;
            0   41     2            host  Ljava/lang/String;
            0   41     3            port  I
            0   41     4   socketFactory  Ljava/lang/String;
            0   41     5  connectTimeout  I
            0   41     6     readTimeout  I
            0   41     7           trace  Ljava/io/OutputStream;
           27   32     8               e  Ljava/lang/reflect/InvocationTargetException;
           28   32     9   realException  Ljava/lang/Throwable;
           30   32    10              ce  Ljavax/naming/CommunicationException;
           33   37     8               e  Ljava/lang/Exception;
           35   37     9              ce  Ljavax/naming/CommunicationException;
      Exception table:
        from    to  target  type
          22    25      26  Class java.lang.reflect.InvocationTargetException
          22    25      32  Class java.lang.Exception
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
                Name  Flags
      parent          
      host            
      port            
      socketFactory   
      connectTimeout  
      readTimeout     
      trace           

  private java.net.InetSocketAddress createInetSocketAddress(java.lang.String, int);
    descriptor: (Ljava/lang/String;I)Ljava/net/InetSocketAddress;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // java.lang.String host
        start local 2 // int port
         0: .line 267
            new java.net.InetSocketAddress
            dup
            aload 1 /* host */
            iload 2 /* port */
            invokespecial java.net.InetSocketAddress.<init>:(Ljava/lang/String;I)V
            areturn
        end local 2 // int port
        end local 1 // java.lang.String host
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/jndi/ldap/Connection;
            0    1     1  host  Ljava/lang/String;
            0    1     2  port  I
    MethodParameters:
      Name  Flags
      host  
      port  

  private java.net.Socket createSocket(java.lang.String, int, java.lang.String, int);
    descriptor: (Ljava/lang/String;ILjava/lang/String;I)Ljava/net/Socket;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=10, args_size=5
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // java.lang.String host
        start local 2 // int port
        start local 3 // java.lang.String socketFactory
        start local 4 // int connectTimeout
         0: .line 282
            aconst_null
            astore 5 /* socket */
        start local 5 // java.net.Socket socket
         1: .line 284
            aload 3 /* socketFactory */
            ifnull 15
         2: .line 290
            getstatic com.sun.jndi.ldap.Obj.helper:Lcom/sun/jndi/ldap/VersionHelper;
            aload 3 /* socketFactory */
            invokevirtual com.sun.jndi.ldap.VersionHelper.loadClass:(Ljava/lang/String;)Ljava/lang/Class;
         3: .line 289
            astore 6 /* socketFactoryClass */
        start local 6 // java.lang.Class socketFactoryClass
         4: .line 292
            aload 6 /* socketFactoryClass */
            ldc "getDefault"
            iconst_0
            anewarray java.lang.Class
            invokevirtual java.lang.Class.getMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
         5: .line 291
            astore 7 /* getDefault */
        start local 7 // java.lang.reflect.Method getDefault
         6: .line 293
            aload 7 /* getDefault */
            aconst_null
            iconst_0
            anewarray java.lang.Object
            invokevirtual java.lang.reflect.Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            checkcast javax.net.SocketFactory
            astore 8 /* factory */
        start local 8 // javax.net.SocketFactory factory
         7: .line 297
            iload 4 /* connectTimeout */
            ifle 12
         8: .line 300
            aload 0 /* this */
            aload 1 /* host */
            iload 2 /* port */
            invokevirtual com.sun.jndi.ldap.Connection.createInetSocketAddress:(Ljava/lang/String;I)Ljava/net/InetSocketAddress;
         9: .line 299
            astore 9 /* endpoint */
        start local 9 // java.net.InetSocketAddress endpoint
        10: .line 303
            aload 8 /* factory */
            invokevirtual javax.net.SocketFactory.createSocket:()Ljava/net/Socket;
            astore 5 /* socket */
        11: .line 311
            aload 5 /* socket */
            aload 9 /* endpoint */
            iload 4 /* connectTimeout */
            invokevirtual java.net.Socket.connect:(Ljava/net/SocketAddress;I)V
        end local 9 // java.net.InetSocketAddress endpoint
        12: .line 315
      StackMap locals: com.sun.jndi.ldap.Connection java.lang.String int java.lang.String int java.net.Socket java.lang.Class java.lang.reflect.Method javax.net.SocketFactory
      StackMap stack:
            aload 5 /* socket */
            ifnonnull 21
        13: .line 321
            aload 8 /* factory */
            aload 1 /* host */
            iload 2 /* port */
            invokevirtual javax.net.SocketFactory.createSocket:(Ljava/lang/String;I)Ljava/net/Socket;
            astore 5 /* socket */
        end local 8 // javax.net.SocketFactory factory
        end local 7 // java.lang.reflect.Method getDefault
        end local 6 // java.lang.Class socketFactoryClass
        14: .line 323
            goto 21
        15: .line 325
      StackMap locals:
      StackMap stack:
            iload 4 /* connectTimeout */
            ifle 19
        16: .line 327
            aload 0 /* this */
            aload 1 /* host */
            iload 2 /* port */
            invokevirtual com.sun.jndi.ldap.Connection.createInetSocketAddress:(Ljava/lang/String;I)Ljava/net/InetSocketAddress;
            astore 6 /* endpoint */
        start local 6 // java.net.InetSocketAddress endpoint
        17: .line 329
            new java.net.Socket
            dup
            invokespecial java.net.Socket.<init>:()V
            astore 5 /* socket */
        18: .line 335
            aload 5 /* socket */
            aload 6 /* endpoint */
            iload 4 /* connectTimeout */
            invokevirtual java.net.Socket.connect:(Ljava/net/SocketAddress;I)V
        end local 6 // java.net.InetSocketAddress endpoint
        19: .line 340
      StackMap locals:
      StackMap stack:
            aload 5 /* socket */
            ifnonnull 21
        20: .line 345
            new java.net.Socket
            dup
            aload 1 /* host */
            iload 2 /* port */
            invokespecial java.net.Socket.<init>:(Ljava/lang/String;I)V
            astore 5 /* socket */
        21: .line 353
      StackMap locals:
      StackMap stack:
            aload 5 /* socket */
            instanceof javax.net.ssl.SSLSocket
            ifeq 33
        22: .line 354
            aload 5 /* socket */
            checkcast javax.net.ssl.SSLSocket
            astore 6 /* sslSocket */
        start local 6 // javax.net.ssl.SSLSocket sslSocket
        23: .line 355
            getstatic com.sun.jndi.ldap.Connection.IS_HOSTNAME_VERIFICATION_DISABLED:Z
            ifne 27
        24: .line 356
            aload 6 /* sslSocket */
            invokevirtual javax.net.ssl.SSLSocket.getSSLParameters:()Ljavax/net/ssl/SSLParameters;
            astore 7 /* param */
        start local 7 // javax.net.ssl.SSLParameters param
        25: .line 357
            aload 7 /* param */
            ldc "LDAPS"
            invokevirtual javax.net.ssl.SSLParameters.setEndpointIdentificationAlgorithm:(Ljava/lang/String;)V
        26: .line 358
            aload 6 /* sslSocket */
            aload 7 /* param */
            invokevirtual javax.net.ssl.SSLSocket.setSSLParameters:(Ljavax/net/ssl/SSLParameters;)V
        end local 7 // javax.net.ssl.SSLParameters param
        27: .line 360
      StackMap locals: javax.net.ssl.SSLSocket
      StackMap stack:
            aload 0 /* this */
            aload 6 /* sslSocket */
            invokevirtual com.sun.jndi.ldap.Connection.setHandshakeCompletedListener:(Ljavax/net/ssl/SSLSocket;)V
        28: .line 361
            iload 4 /* connectTimeout */
            ifle 33
        29: .line 362
            aload 6 /* sslSocket */
            invokevirtual javax.net.ssl.SSLSocket.getSoTimeout:()I
            istore 7 /* socketTimeout */
        start local 7 // int socketTimeout
        30: .line 363
            aload 6 /* sslSocket */
            iload 4 /* connectTimeout */
            invokevirtual javax.net.ssl.SSLSocket.setSoTimeout:(I)V
        31: .line 364
            aload 6 /* sslSocket */
            invokevirtual javax.net.ssl.SSLSocket.startHandshake:()V
        32: .line 365
            aload 6 /* sslSocket */
            iload 7 /* socketTimeout */
            invokevirtual javax.net.ssl.SSLSocket.setSoTimeout:(I)V
        end local 7 // int socketTimeout
        end local 6 // javax.net.ssl.SSLSocket sslSocket
        33: .line 368
      StackMap locals:
      StackMap stack:
            aload 5 /* socket */
            areturn
        end local 5 // java.net.Socket socket
        end local 4 // int connectTimeout
        end local 3 // java.lang.String socketFactory
        end local 2 // int port
        end local 1 // java.lang.String host
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   34     0                this  Lcom/sun/jndi/ldap/Connection;
            0   34     1                host  Ljava/lang/String;
            0   34     2                port  I
            0   34     3       socketFactory  Ljava/lang/String;
            0   34     4      connectTimeout  I
            1   34     5              socket  Ljava/net/Socket;
            4   14     6  socketFactoryClass  Ljava/lang/Class<+Ljavax/net/SocketFactory;>;
            6   14     7          getDefault  Ljava/lang/reflect/Method;
            7   14     8             factory  Ljavax/net/SocketFactory;
           10   12     9            endpoint  Ljava/net/InetSocketAddress;
           17   19     6            endpoint  Ljava/net/InetSocketAddress;
           23   33     6           sslSocket  Ljavax/net/ssl/SSLSocket;
           25   27     7               param  Ljavax/net/ssl/SSLParameters;
           30   33     7       socketTimeout  I
    Exceptions:
      throws java.lang.Exception
    MethodParameters:
                Name  Flags
      host            
      port            
      socketFactory   
      connectTimeout  

  synchronized int getMsgId();
    descriptor: ()I
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 378
            aload 0 /* this */
            dup
            getfield com.sun.jndi.ldap.Connection.outMsgId:I
            iconst_1
            iadd
            dup_x1
            putfield com.sun.jndi.ldap.Connection.outMsgId:I
            ireturn
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/jndi/ldap/Connection;

  com.sun.jndi.ldap.LdapRequest writeRequest(com.sun.jndi.ldap.BerEncoder, int);
    descriptor: (Lcom/sun/jndi/ldap/BerEncoder;I)Lcom/sun/jndi/ldap/LdapRequest;
    flags: (0x0000) 
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.BerEncoder ber
        start local 2 // int msgId
         0: .line 382
            aload 0 /* this */
            aload 1 /* ber */
            iload 2 /* msgId */
            iconst_0
            iconst_m1
            invokevirtual com.sun.jndi.ldap.Connection.writeRequest:(Lcom/sun/jndi/ldap/BerEncoder;IZI)Lcom/sun/jndi/ldap/LdapRequest;
            areturn
        end local 2 // int msgId
        end local 1 // com.sun.jndi.ldap.BerEncoder ber
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lcom/sun/jndi/ldap/Connection;
            0    1     1    ber  Lcom/sun/jndi/ldap/BerEncoder;
            0    1     2  msgId  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      ber    
      msgId  

  com.sun.jndi.ldap.LdapRequest writeRequest(com.sun.jndi.ldap.BerEncoder, int, boolean);
    descriptor: (Lcom/sun/jndi/ldap/BerEncoder;IZ)Lcom/sun/jndi/ldap/LdapRequest;
    flags: (0x0000) 
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.BerEncoder ber
        start local 2 // int msgId
        start local 3 // boolean pauseAfterReceipt
         0: .line 387
            aload 0 /* this */
            aload 1 /* ber */
            iload 2 /* msgId */
            iload 3 /* pauseAfterReceipt */
            iconst_m1
            invokevirtual com.sun.jndi.ldap.Connection.writeRequest:(Lcom/sun/jndi/ldap/BerEncoder;IZI)Lcom/sun/jndi/ldap/LdapRequest;
            areturn
        end local 3 // boolean pauseAfterReceipt
        end local 2 // int msgId
        end local 1 // com.sun.jndi.ldap.BerEncoder ber
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    1     0               this  Lcom/sun/jndi/ldap/Connection;
            0    1     1                ber  Lcom/sun/jndi/ldap/BerEncoder;
            0    1     2              msgId  I
            0    1     3  pauseAfterReceipt  Z
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                   Name  Flags
      ber                
      msgId              
      pauseAfterReceipt  

  com.sun.jndi.ldap.LdapRequest writeRequest(com.sun.jndi.ldap.BerEncoder, int, boolean, int);
    descriptor: (Lcom/sun/jndi/ldap/BerEncoder;IZI)Lcom/sun/jndi/ldap/LdapRequest;
    flags: (0x0000) 
    Code:
      stack=5, locals=7, args_size=5
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.BerEncoder ber
        start local 2 // int msgId
        start local 3 // boolean pauseAfterReceipt
        start local 4 // int replyQueueCapacity
         0: .line 394
            new com.sun.jndi.ldap.LdapRequest
            dup
            iload 2 /* msgId */
            iload 3 /* pauseAfterReceipt */
            iload 4 /* replyQueueCapacity */
            invokespecial com.sun.jndi.ldap.LdapRequest.<init>:(IZI)V
         1: .line 393
            astore 5 /* req */
        start local 5 // com.sun.jndi.ldap.LdapRequest req
         2: .line 395
            aload 0 /* this */
            aload 5 /* req */
            invokevirtual com.sun.jndi.ldap.Connection.addRequest:(Lcom/sun/jndi/ldap/LdapRequest;)V
         3: .line 397
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            ifnull 5
         4: .line 398
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceTagOut:Ljava/lang/String;
            aload 1 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getBuf:()[B
            iconst_0
            aload 1 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getDataLen:()I
            invokestatic com.sun.jndi.ldap.Ber.dumpBER:(Ljava/io/OutputStream;Ljava/lang/String;[BII)V
         5: .line 405
      StackMap locals: com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.unpauseReader:()V
         6: .line 412
            aload 0 /* this */
            dup
            astore 6
            monitorenter
         7: .line 413
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            aload 1 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getBuf:()[B
            iconst_0
            aload 1 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getDataLen:()I
            invokevirtual java.io.OutputStream.write:([BII)V
         8: .line 414
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
         9: .line 412
            aload 6
            monitorexit
        10: goto 16
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.BerEncoder int int int com.sun.jndi.ldap.LdapRequest com.sun.jndi.ldap.Connection
      StackMap stack: java.lang.Throwable
        11: aload 6
            monitorexit
        12: athrow
        13: .line 416
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.BerEncoder int int int com.sun.jndi.ldap.LdapRequest
      StackMap stack: java.io.IOException
            astore 6 /* e */
        start local 6 // java.io.IOException e
        14: .line 417
            aload 0 /* this */
            aconst_null
            iconst_1
            invokevirtual com.sun.jndi.ldap.Connection.cleanup:([Ljavax/naming/ldap/Control;Z)V
        15: .line 418
            aload 0 /* this */
            aload 6 /* e */
            dup_x1
            putfield com.sun.jndi.ldap.Connection.closureReason:Ljava/io/IOException;
            athrow
        end local 6 // java.io.IOException e
        16: .line 421
      StackMap locals:
      StackMap stack:
            aload 5 /* req */
            areturn
        end local 5 // com.sun.jndi.ldap.LdapRequest req
        end local 4 // int replyQueueCapacity
        end local 3 // boolean pauseAfterReceipt
        end local 2 // int msgId
        end local 1 // com.sun.jndi.ldap.BerEncoder ber
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   17     0                this  Lcom/sun/jndi/ldap/Connection;
            0   17     1                 ber  Lcom/sun/jndi/ldap/BerEncoder;
            0   17     2               msgId  I
            0   17     3   pauseAfterReceipt  Z
            0   17     4  replyQueueCapacity  I
            2   17     5                 req  Lcom/sun/jndi/ldap/LdapRequest;
           14   16     6                   e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           7    10      11  any
          11    12      11  any
           6    13      13  Class java.io.IOException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                    Name  Flags
      ber                 
      msgId               
      pauseAfterReceipt   
      replyQueueCapacity  

  com.sun.jndi.ldap.BerDecoder readReply(com.sun.jndi.ldap.LdapRequest);
    descriptor: (Lcom/sun/jndi/ldap/LdapRequest;)Lcom/sun/jndi/ldap/BerDecoder;
    flags: (0x0000) 
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.LdapRequest ldr
         0: .line 431
            aload 0 /* this */
            dup
            astore 3
            monitorenter
         1: .line 432
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
            ifnonnull 5
         2: .line 433
            new javax.naming.ServiceUnavailableException
            dup
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.host:Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.port:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
         3: .line 434
            ldc "; socket closed"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         4: .line 433
            invokespecial javax.naming.ServiceUnavailableException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 431
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.LdapRequest top com.sun.jndi.ldap.Connection
      StackMap stack:
            aload 3
            monitorexit
         6: goto 9
      StackMap locals:
      StackMap stack: java.lang.Throwable
         7: aload 3
            monitorexit
         8: athrow
         9: .line 438
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aconst_null
            astore 3 /* namingException */
        start local 3 // javax.naming.NamingException namingException
        10: .line 443
            aload 1 /* ldr */
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.readTimeout:I
            i2l
            invokevirtual com.sun.jndi.ldap.LdapRequest.getReplyBer:(J)Lcom/sun/jndi/ldap/BerDecoder;
            astore 2 /* rber */
        start local 2 // com.sun.jndi.ldap.BerDecoder rber
        11: .line 444
            goto 21
        end local 2 // com.sun.jndi.ldap.BerDecoder rber
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.LdapRequest top javax.naming.NamingException
      StackMap stack: java.lang.InterruptedException
        12: pop
        13: .line 445
            new javax.naming.InterruptedNamingException
            dup
        14: .line 446
            ldc "Interrupted during LDAP operation"
        15: .line 445
            invokespecial javax.naming.InterruptedNamingException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 447
      StackMap locals:
      StackMap stack: javax.naming.CommunicationException
            astore 4 /* ce */
        start local 4 // javax.naming.CommunicationException ce
        17: .line 449
            aload 4 /* ce */
            athrow
        end local 4 // javax.naming.CommunicationException ce
        18: .line 450
      StackMap locals:
      StackMap stack: javax.naming.NamingException
            astore 4 /* ne */
        start local 4 // javax.naming.NamingException ne
        19: .line 452
            aload 4 /* ne */
            astore 3 /* namingException */
        20: .line 453
            aconst_null
            astore 2 /* rber */
        end local 4 // javax.naming.NamingException ne
        start local 2 // com.sun.jndi.ldap.BerDecoder rber
        21: .line 456
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.LdapRequest com.sun.jndi.ldap.BerDecoder javax.naming.NamingException
      StackMap stack:
            aload 2 /* rber */
            ifnonnull 23
        22: .line 457
            aload 0 /* this */
            aload 1 /* ldr */
            aconst_null
            invokevirtual com.sun.jndi.ldap.Connection.abandonRequest:(Lcom/sun/jndi/ldap/LdapRequest;[Ljavax/naming/ldap/Control;)V
        23: .line 463
      StackMap locals:
      StackMap stack:
            aload 3 /* namingException */
            ifnull 25
        24: .line 465
            aload 3 /* namingException */
            athrow
        25: .line 467
      StackMap locals:
      StackMap stack:
            aload 2 /* rber */
            areturn
        end local 3 // javax.naming.NamingException namingException
        end local 2 // com.sun.jndi.ldap.BerDecoder rber
        end local 1 // com.sun.jndi.ldap.LdapRequest ldr
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   26     0             this  Lcom/sun/jndi/ldap/Connection;
            0   26     1              ldr  Lcom/sun/jndi/ldap/LdapRequest;
           11   12     2             rber  Lcom/sun/jndi/ldap/BerDecoder;
           21   26     2             rber  Lcom/sun/jndi/ldap/BerDecoder;
           10   26     3  namingException  Ljavax/naming/NamingException;
           17   18     4               ce  Ljavax/naming/CommunicationException;
           19   21     4               ne  Ljavax/naming/NamingException;
      Exception table:
        from    to  target  type
           1     6       7  any
           7     8       7  any
          10    11      12  Class java.lang.InterruptedException
          10    11      16  Class javax.naming.CommunicationException
          10    11      18  Class javax.naming.NamingException
    Exceptions:
      throws java.io.IOException, javax.naming.NamingException
    MethodParameters:
      Name  Flags
      ldr   

  private synchronized void addRequest(com.sun.jndi.ldap.LdapRequest);
    descriptor: (Lcom/sun/jndi/ldap/LdapRequest;)V
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.LdapRequest ldapRequest
         0: .line 478
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            astore 2 /* ldr */
        start local 2 // com.sun.jndi.ldap.LdapRequest ldr
         1: .line 479
            aload 2 /* ldr */
            ifnonnull 5
         2: .line 480
            aload 0 /* this */
            aload 1 /* ldapRequest */
            putfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
         3: .line 481
            aload 1 /* ldapRequest */
            aconst_null
            putfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
         4: .line 482
            goto 7
         5: .line 483
      StackMap locals: com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 1 /* ldapRequest */
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            putfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
         6: .line 484
            aload 0 /* this */
            aload 1 /* ldapRequest */
            putfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
         7: .line 486
      StackMap locals:
      StackMap stack:
            return
        end local 2 // com.sun.jndi.ldap.LdapRequest ldr
        end local 1 // com.sun.jndi.ldap.LdapRequest ldapRequest
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    8     0         this  Lcom/sun/jndi/ldap/Connection;
            0    8     1  ldapRequest  Lcom/sun/jndi/ldap/LdapRequest;
            1    8     2          ldr  Lcom/sun/jndi/ldap/LdapRequest;
    MethodParameters:
             Name  Flags
      ldapRequest  

  synchronized com.sun.jndi.ldap.LdapRequest findRequest(int);
    descriptor: (I)Lcom/sun/jndi/ldap/LdapRequest;
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // int msgId
         0: .line 490
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            astore 2 /* ldr */
        start local 2 // com.sun.jndi.ldap.LdapRequest ldr
         1: .line 491
            goto 5
         2: .line 492
      StackMap locals: com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 2 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.msgId:I
            iload 1 /* msgId */
            if_icmpne 4
         3: .line 493
            aload 2 /* ldr */
            areturn
         4: .line 495
      StackMap locals:
      StackMap stack:
            aload 2 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            astore 2 /* ldr */
         5: .line 491
      StackMap locals:
      StackMap stack:
            aload 2 /* ldr */
            ifnonnull 2
         6: .line 497
            aconst_null
            areturn
        end local 2 // com.sun.jndi.ldap.LdapRequest ldr
        end local 1 // int msgId
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Lcom/sun/jndi/ldap/Connection;
            0    7     1  msgId  I
            1    7     2    ldr  Lcom/sun/jndi/ldap/LdapRequest;
    MethodParameters:
       Name  Flags
      msgId  

  synchronized void removeRequest(com.sun.jndi.ldap.LdapRequest);
    descriptor: (Lcom/sun/jndi/ldap/LdapRequest;)V
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.LdapRequest req
         0: .line 502
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            astore 2 /* ldr */
        start local 2 // com.sun.jndi.ldap.LdapRequest ldr
         1: .line 503
            aconst_null
            astore 3 /* ldrprev */
        start local 3 // com.sun.jndi.ldap.LdapRequest ldrprev
         2: .line 505
            goto 12
         3: .line 506
      StackMap locals: com.sun.jndi.ldap.LdapRequest com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 2 /* ldr */
            aload 1 /* req */
            if_acmpne 10
         4: .line 507
            aload 2 /* ldr */
            invokevirtual com.sun.jndi.ldap.LdapRequest.cancel:()V
         5: .line 509
            aload 3 /* ldrprev */
            ifnull 8
         6: .line 510
            aload 3 /* ldrprev */
            aload 2 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            putfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
         7: .line 511
            goto 9
         8: .line 512
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            putfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
         9: .line 514
      StackMap locals:
      StackMap stack:
            aload 2 /* ldr */
            aconst_null
            putfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
        10: .line 516
      StackMap locals:
      StackMap stack:
            aload 2 /* ldr */
            astore 3 /* ldrprev */
        11: .line 517
            aload 2 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            astore 2 /* ldr */
        12: .line 505
      StackMap locals:
      StackMap stack:
            aload 2 /* ldr */
            ifnonnull 3
        13: .line 519
            return
        end local 3 // com.sun.jndi.ldap.LdapRequest ldrprev
        end local 2 // com.sun.jndi.ldap.LdapRequest ldr
        end local 1 // com.sun.jndi.ldap.LdapRequest req
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   14     0     this  Lcom/sun/jndi/ldap/Connection;
            0   14     1      req  Lcom/sun/jndi/ldap/LdapRequest;
            1   14     2      ldr  Lcom/sun/jndi/ldap/LdapRequest;
            2   14     3  ldrprev  Lcom/sun/jndi/ldap/LdapRequest;
    MethodParameters:
      Name  Flags
      req   

  void abandonRequest(com.sun.jndi.ldap.LdapRequest, javax.naming.ldap.Control[]);
    descriptor: (Lcom/sun/jndi/ldap/LdapRequest;[Ljavax/naming/ldap/Control;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // com.sun.jndi.ldap.LdapRequest ldr
        start local 2 // javax.naming.ldap.Control[] reqCtls
         0: .line 523
            aload 0 /* this */
            aload 1 /* ldr */
            invokevirtual com.sun.jndi.ldap.Connection.removeRequest:(Lcom/sun/jndi/ldap/LdapRequest;)V
         1: .line 525
            new com.sun.jndi.ldap.BerEncoder
            dup
            sipush 256
            invokespecial com.sun.jndi.ldap.BerEncoder.<init>:(I)V
            astore 3 /* ber */
        start local 3 // com.sun.jndi.ldap.BerEncoder ber
         2: .line 526
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.getMsgId:()I
            istore 4 /* abandonMsgId */
        start local 4 // int abandonMsgId
         3: .line 532
            aload 3 /* ber */
            bipush 48
            invokevirtual com.sun.jndi.ldap.BerEncoder.beginSeq:(I)V
         4: .line 533
            aload 3 /* ber */
            iload 4 /* abandonMsgId */
            invokevirtual com.sun.jndi.ldap.BerEncoder.encodeInt:(I)V
         5: .line 534
            aload 3 /* ber */
            aload 1 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.msgId:I
            bipush 80
            invokevirtual com.sun.jndi.ldap.BerEncoder.encodeInt:(II)V
         6: .line 536
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.v3:Z
            ifeq 8
         7: .line 537
            aload 3 /* ber */
            aload 2 /* reqCtls */
            invokestatic com.sun.jndi.ldap.LdapClient.encodeControls:(Lcom/sun/jndi/ldap/BerEncoder;[Ljavax/naming/ldap/Control;)V
         8: .line 539
      StackMap locals: com.sun.jndi.ldap.BerEncoder int
      StackMap stack:
            aload 3 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.endSeq:()V
         9: .line 541
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            ifnull 13
        10: .line 542
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceTagOut:Ljava/lang/String;
            aload 3 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getBuf:()[B
            iconst_0
        11: .line 543
            aload 3 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getDataLen:()I
        12: .line 542
            invokestatic com.sun.jndi.ldap.Ber.dumpBER:(Ljava/io/OutputStream;Ljava/lang/String;[BII)V
        13: .line 546
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dup
            astore 5
            monitorenter
        14: .line 547
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            aload 3 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getBuf:()[B
            iconst_0
            aload 3 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getDataLen:()I
            invokevirtual java.io.OutputStream.write:([BII)V
        15: .line 548
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
        16: .line 546
            aload 5
            monitorexit
        17: goto 21
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.LdapRequest javax.naming.ldap.Control[] com.sun.jndi.ldap.BerEncoder int com.sun.jndi.ldap.Connection
      StackMap stack: java.lang.Throwable
        18: aload 5
            monitorexit
        19: athrow
        20: .line 551
      StackMap locals: com.sun.jndi.ldap.Connection com.sun.jndi.ldap.LdapRequest javax.naming.ldap.Control[] com.sun.jndi.ldap.BerEncoder int
      StackMap stack: java.io.IOException
            pop
        21: .line 556
      StackMap locals:
      StackMap stack:
            return
        end local 4 // int abandonMsgId
        end local 3 // com.sun.jndi.ldap.BerEncoder ber
        end local 2 // javax.naming.ldap.Control[] reqCtls
        end local 1 // com.sun.jndi.ldap.LdapRequest ldr
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   22     0          this  Lcom/sun/jndi/ldap/Connection;
            0   22     1           ldr  Lcom/sun/jndi/ldap/LdapRequest;
            0   22     2       reqCtls  [Ljavax/naming/ldap/Control;
            2   22     3           ber  Lcom/sun/jndi/ldap/BerEncoder;
            3   22     4  abandonMsgId  I
      Exception table:
        from    to  target  type
          14    17      18  any
          18    19      18  any
           3    20      20  Class java.io.IOException
    MethodParameters:
         Name  Flags
      ldr      
      reqCtls  

  synchronized void abandonOutstandingReqs(javax.naming.ldap.Control[]);
    descriptor: ([Ljavax/naming/ldap/Control;)V
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // javax.naming.ldap.Control[] reqCtls
         0: .line 559
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            astore 2 /* ldr */
        start local 2 // com.sun.jndi.ldap.LdapRequest ldr
         1: .line 561
            goto 4
         2: .line 562
      StackMap locals: com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 0 /* this */
            aload 2 /* ldr */
            aload 1 /* reqCtls */
            invokevirtual com.sun.jndi.ldap.Connection.abandonRequest:(Lcom/sun/jndi/ldap/LdapRequest;[Ljavax/naming/ldap/Control;)V
         3: .line 563
            aload 0 /* this */
            aload 2 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            dup
            astore 2 /* ldr */
            putfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
         4: .line 561
      StackMap locals:
      StackMap stack:
            aload 2 /* ldr */
            ifnonnull 2
         5: .line 565
            return
        end local 2 // com.sun.jndi.ldap.LdapRequest ldr
        end local 1 // javax.naming.ldap.Control[] reqCtls
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lcom/sun/jndi/ldap/Connection;
            0    6     1  reqCtls  [Ljavax/naming/ldap/Control;
            1    6     2      ldr  Lcom/sun/jndi/ldap/LdapRequest;
    MethodParameters:
         Name  Flags
      reqCtls  

  private void ldapUnbind(javax.naming.ldap.Control[]);
    descriptor: ([Ljavax/naming/ldap/Control;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // javax.naming.ldap.Control[] reqCtls
         0: .line 576
            new com.sun.jndi.ldap.BerEncoder
            dup
            sipush 256
            invokespecial com.sun.jndi.ldap.BerEncoder.<init>:(I)V
            astore 2 /* ber */
        start local 2 // com.sun.jndi.ldap.BerEncoder ber
         1: .line 577
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.getMsgId:()I
            istore 3 /* unbindMsgId */
        start local 3 // int unbindMsgId
         2: .line 585
            aload 2 /* ber */
            bipush 48
            invokevirtual com.sun.jndi.ldap.BerEncoder.beginSeq:(I)V
         3: .line 586
            aload 2 /* ber */
            iload 3 /* unbindMsgId */
            invokevirtual com.sun.jndi.ldap.BerEncoder.encodeInt:(I)V
         4: .line 588
            aload 2 /* ber */
            bipush 66
            invokevirtual com.sun.jndi.ldap.BerEncoder.encodeByte:(I)V
         5: .line 589
            aload 2 /* ber */
            iconst_0
            invokevirtual com.sun.jndi.ldap.BerEncoder.encodeByte:(I)V
         6: .line 591
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.v3:Z
            ifeq 8
         7: .line 592
            aload 2 /* ber */
            aload 1 /* reqCtls */
            invokestatic com.sun.jndi.ldap.LdapClient.encodeControls:(Lcom/sun/jndi/ldap/BerEncoder;[Ljavax/naming/ldap/Control;)V
         8: .line 594
      StackMap locals: com.sun.jndi.ldap.BerEncoder int
      StackMap stack:
            aload 2 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.endSeq:()V
         9: .line 596
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            ifnull 13
        10: .line 597
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceTagOut:Ljava/lang/String;
            aload 2 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getBuf:()[B
        11: .line 598
            iconst_0
            aload 2 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getDataLen:()I
        12: .line 597
            invokestatic com.sun.jndi.ldap.Ber.dumpBER:(Ljava/io/OutputStream;Ljava/lang/String;[BII)V
        13: .line 601
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dup
            astore 4
            monitorenter
        14: .line 602
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            aload 2 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getBuf:()[B
            iconst_0
            aload 2 /* ber */
            invokevirtual com.sun.jndi.ldap.BerEncoder.getDataLen:()I
            invokevirtual java.io.OutputStream.write:([BII)V
        15: .line 603
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
        16: .line 601
            aload 4
            monitorexit
        17: goto 21
      StackMap locals: com.sun.jndi.ldap.Connection javax.naming.ldap.Control[] com.sun.jndi.ldap.BerEncoder int com.sun.jndi.ldap.Connection
      StackMap stack: java.lang.Throwable
        18: aload 4
            monitorexit
        19: athrow
        20: .line 606
      StackMap locals: com.sun.jndi.ldap.Connection javax.naming.ldap.Control[] com.sun.jndi.ldap.BerEncoder int
      StackMap stack: java.io.IOException
            pop
        21: .line 611
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int unbindMsgId
        end local 2 // com.sun.jndi.ldap.BerEncoder ber
        end local 1 // javax.naming.ldap.Control[] reqCtls
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   22     0         this  Lcom/sun/jndi/ldap/Connection;
            0   22     1      reqCtls  [Ljavax/naming/ldap/Control;
            1   22     2          ber  Lcom/sun/jndi/ldap/BerEncoder;
            2   22     3  unbindMsgId  I
      Exception table:
        from    to  target  type
          14    17      18  any
          18    19      18  any
           2    20      20  Class java.io.IOException
    MethodParameters:
         Name  Flags
      reqCtls  

  void cleanup(javax.naming.ldap.Control[], boolean);
    descriptor: ([Ljavax/naming/ldap/Control;Z)V
    flags: (0x0000) 
    Code:
      stack=2, locals=7, args_size=3
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // javax.naming.ldap.Control[] reqCtls
        start local 2 // boolean notifyParent
         0: .line 624
            iconst_0
            istore 3 /* nparent */
        start local 3 // boolean nparent
         1: .line 626
            aload 0 /* this */
            dup
            astore 4
            monitorenter
         2: .line 627
            aload 0 /* this */
            iconst_0
            putfield com.sun.jndi.ldap.Connection.useable:Z
         3: .line 629
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
            ifnull 50
         4: .line 634
            iload 2 /* notifyParent */
            ifne 6
         5: .line 635
            aload 0 /* this */
            aload 1 /* reqCtls */
            invokevirtual com.sun.jndi.ldap.Connection.abandonOutstandingReqs:([Ljavax/naming/ldap/Control;)V
         6: .line 637
      StackMap locals: int com.sun.jndi.ldap.Connection
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.bound:Z
            ifeq 30
         7: .line 638
            aload 0 /* this */
            aload 1 /* reqCtls */
            invokevirtual com.sun.jndi.ldap.Connection.ldapUnbind:([Ljavax/naming/ldap/Control;)V
         8: .line 640
            goto 30
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: astore 5
        10: .line 642
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
        11: .line 643
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
            invokevirtual java.net.Socket.close:()V
        12: .line 644
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.unpauseReader:()V
        13: .line 645
            goto 15
      StackMap locals: com.sun.jndi.ldap.Connection javax.naming.ldap.Control[] int int com.sun.jndi.ldap.Connection java.lang.Throwable
      StackMap stack: java.io.IOException
        14: astore 6
        15: .line 649
      StackMap locals:
      StackMap stack:
            iload 2 /* notifyParent */
            ifne 21
        16: .line 650
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            astore 6 /* ldr */
        start local 6 // com.sun.jndi.ldap.LdapRequest ldr
        17: .line 651
            goto 20
        18: .line 652
      StackMap locals: com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 6 /* ldr */
            invokevirtual com.sun.jndi.ldap.LdapRequest.cancel:()V
        19: .line 653
            aload 6 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            astore 6 /* ldr */
        20: .line 651
      StackMap locals:
      StackMap stack:
            aload 6 /* ldr */
            ifnonnull 18
        end local 6 // com.sun.jndi.ldap.LdapRequest ldr
        21: .line 656
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.isTlsConnection:()Z
            ifeq 28
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            ifnull 28
        22: .line 657
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.closureReason:Ljava/io/IOException;
            ifnull 27
        23: .line 658
            new javax.naming.CommunicationException
            dup
            invokespecial javax.naming.CommunicationException.<init>:()V
            astore 6 /* ce */
        start local 6 // javax.naming.CommunicationException ce
        24: .line 659
            aload 6 /* ce */
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.closureReason:Ljava/io/IOException;
            invokevirtual javax.naming.CommunicationException.setRootCause:(Ljava/lang/Throwable;)V
        25: .line 660
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            getfield com.sun.jndi.ldap.Connection$HandshakeListener.tlsHandshakeCompleted:Ljava/util/concurrent/CompletableFuture;
            aload 6 /* ce */
            invokevirtual java.util.concurrent.CompletableFuture.completeExceptionally:(Ljava/lang/Throwable;)Z
            pop
        end local 6 // javax.naming.CommunicationException ce
        26: .line 661
            goto 28
        27: .line 662
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            getfield com.sun.jndi.ldap.Connection$HandshakeListener.tlsHandshakeCompleted:Ljava/util/concurrent/CompletableFuture;
            iconst_0
            invokevirtual java.util.concurrent.CompletableFuture.cancel:(Z)Z
            pop
        28: .line 665
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
        29: .line 666
            aload 5
            athrow
        30: .line 642
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
        31: .line 643
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
            invokevirtual java.net.Socket.close:()V
        32: .line 644
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.unpauseReader:()V
        33: .line 645
            goto 35
      StackMap locals:
      StackMap stack: java.io.IOException
        34: astore 6
        35: .line 649
      StackMap locals:
      StackMap stack:
            iload 2 /* notifyParent */
            ifne 41
        36: .line 650
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            astore 6 /* ldr */
        start local 6 // com.sun.jndi.ldap.LdapRequest ldr
        37: .line 651
            goto 40
        38: .line 652
      StackMap locals: com.sun.jndi.ldap.Connection javax.naming.ldap.Control[] int int com.sun.jndi.ldap.Connection top com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 6 /* ldr */
            invokevirtual com.sun.jndi.ldap.LdapRequest.cancel:()V
        39: .line 653
            aload 6 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            astore 6 /* ldr */
        40: .line 651
      StackMap locals:
      StackMap stack:
            aload 6 /* ldr */
            ifnonnull 38
        end local 6 // com.sun.jndi.ldap.LdapRequest ldr
        41: .line 656
      StackMap locals: com.sun.jndi.ldap.Connection javax.naming.ldap.Control[] int int com.sun.jndi.ldap.Connection
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.isTlsConnection:()Z
            ifeq 48
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            ifnull 48
        42: .line 657
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.closureReason:Ljava/io/IOException;
            ifnull 47
        43: .line 658
            new javax.naming.CommunicationException
            dup
            invokespecial javax.naming.CommunicationException.<init>:()V
            astore 6 /* ce */
        start local 6 // javax.naming.CommunicationException ce
        44: .line 659
            aload 6 /* ce */
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.closureReason:Ljava/io/IOException;
            invokevirtual javax.naming.CommunicationException.setRootCause:(Ljava/lang/Throwable;)V
        45: .line 660
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            getfield com.sun.jndi.ldap.Connection$HandshakeListener.tlsHandshakeCompleted:Ljava/util/concurrent/CompletableFuture;
            aload 6 /* ce */
            invokevirtual java.util.concurrent.CompletableFuture.completeExceptionally:(Ljava/lang/Throwable;)Z
            pop
        end local 6 // javax.naming.CommunicationException ce
        46: .line 661
            goto 48
        47: .line 662
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            getfield com.sun.jndi.ldap.Connection$HandshakeListener.tlsHandshakeCompleted:Ljava/util/concurrent/CompletableFuture;
            iconst_0
            invokevirtual java.util.concurrent.CompletableFuture.cancel:(Z)Z
            pop
        48: .line 665
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
        49: .line 667
            iload 2 /* notifyParent */
            istore 3 /* nparent */
        50: .line 669
      StackMap locals:
      StackMap stack:
            iload 3 /* nparent */
            ifeq 56
        51: .line 670
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pendingRequests:Lcom/sun/jndi/ldap/LdapRequest;
            astore 5 /* ldr */
        start local 5 // com.sun.jndi.ldap.LdapRequest ldr
        52: .line 671
            goto 55
        53: .line 672
      StackMap locals: com.sun.jndi.ldap.LdapRequest
      StackMap stack:
            aload 5 /* ldr */
            invokevirtual com.sun.jndi.ldap.LdapRequest.close:()V
        54: .line 673
            aload 5 /* ldr */
            getfield com.sun.jndi.ldap.LdapRequest.next:Lcom/sun/jndi/ldap/LdapRequest;
            astore 5 /* ldr */
        55: .line 671
      StackMap locals:
      StackMap stack:
            aload 5 /* ldr */
            ifnonnull 53
        end local 5 // com.sun.jndi.ldap.LdapRequest ldr
        56: .line 626
      StackMap locals:
      StackMap stack:
            aload 4
            monitorexit
        57: goto 60
      StackMap locals:
      StackMap stack: java.lang.Throwable
        58: aload 4
            monitorexit
        59: athrow
        60: .line 677
      StackMap locals:
      StackMap stack:
            iload 3 /* nparent */
            ifeq 62
        61: .line 678
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.parent:Lcom/sun/jndi/ldap/LdapClient;
            invokevirtual com.sun.jndi.ldap.LdapClient.processConnectionClosure:()V
        62: .line 680
      StackMap locals:
      StackMap stack:
            return
        end local 3 // boolean nparent
        end local 2 // boolean notifyParent
        end local 1 // javax.naming.ldap.Control[] reqCtls
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   63     0          this  Lcom/sun/jndi/ldap/Connection;
            0   63     1       reqCtls  [Ljavax/naming/ldap/Control;
            0   63     2  notifyParent  Z
            1   63     3       nparent  Z
           17   21     6           ldr  Lcom/sun/jndi/ldap/LdapRequest;
           37   41     6           ldr  Lcom/sun/jndi/ldap/LdapRequest;
           24   26     6            ce  Ljavax/naming/CommunicationException;
           44   46     6            ce  Ljavax/naming/CommunicationException;
           52   56     5           ldr  Lcom/sun/jndi/ldap/LdapRequest;
      Exception table:
        from    to  target  type
           4     9       9  any
          10    13      14  Class java.io.IOException
          30    33      34  Class java.io.IOException
           2    57      58  any
          58    59      58  any
    MethodParameters:
              Name  Flags
      reqCtls       
      notifyParent  

  public synchronized void replaceStreams(java.io.InputStream, java.io.OutputStream);
    descriptor: (Ljava/io/InputStream;Ljava/io/OutputStream;)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=4, args_size=3
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // java.io.InputStream newIn
        start local 2 // java.io.OutputStream newOut
         0: .line 693
            aload 0 /* this */
            aload 1 /* newIn */
            putfield com.sun.jndi.ldap.Connection.inStream:Ljava/io/InputStream;
         1: .line 697
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
         2: .line 698
            goto 4
      StackMap locals:
      StackMap stack: java.io.IOException
         3: astore 3
         4: .line 704
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* newOut */
            putfield com.sun.jndi.ldap.Connection.outStream:Ljava/io/OutputStream;
         5: .line 705
            return
        end local 2 // java.io.OutputStream newOut
        end local 1 // java.io.InputStream newIn
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lcom/sun/jndi/ldap/Connection;
            0    6     1   newIn  Ljava/io/InputStream;
            0    6     2  newOut  Ljava/io/OutputStream;
      Exception table:
        from    to  target  type
           1     2       3  Class java.io.IOException
    MethodParameters:
        Name  Flags
      newIn   
      newOut  

  public synchronized void replaceStreams(java.io.InputStream, java.io.OutputStream, boolean);
    descriptor: (Ljava/io/InputStream;Ljava/io/OutputStream;Z)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // java.io.InputStream newIn
        start local 2 // java.io.OutputStream newOut
        start local 3 // boolean isStartTls
         0: .line 711
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.startTlsLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         1: .line 712
            aload 0 /* this */
            aload 1 /* newIn */
            aload 2 /* newOut */
            invokevirtual com.sun.jndi.ldap.Connection.replaceStreams:(Ljava/io/InputStream;Ljava/io/OutputStream;)V
         2: .line 713
            aload 0 /* this */
            iload 3 /* isStartTls */
            putfield com.sun.jndi.ldap.Connection.isUpgradedToStartTls:Z
         3: .line 711
            aload 4
            monitorexit
         4: goto 7
      StackMap locals: com.sun.jndi.ldap.Connection java.io.InputStream java.io.OutputStream int java.lang.Object
      StackMap stack: java.lang.Throwable
         5: aload 4
            monitorexit
         6: athrow
         7: .line 715
      StackMap locals:
      StackMap stack:
            return
        end local 3 // boolean isStartTls
        end local 2 // java.io.OutputStream newOut
        end local 1 // java.io.InputStream newIn
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    8     0        this  Lcom/sun/jndi/ldap/Connection;
            0    8     1       newIn  Ljava/io/InputStream;
            0    8     2      newOut  Ljava/io/OutputStream;
            0    8     3  isStartTls  Z
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any
    MethodParameters:
            Name  Flags
      newIn       
      newOut      
      isStartTls  

  public boolean isUpgradedToStartTls();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 721
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.isUpgradedToStartTls:Z
            ireturn
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/jndi/ldap/Connection;

  private synchronized java.io.InputStream getInputStream();
    descriptor: ()Ljava/io/InputStream;
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 730
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.inStream:Ljava/io/InputStream;
            areturn
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/jndi/ldap/Connection;

  private void unpauseReader();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 788
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pauseLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 789
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.paused:Z
            ifeq 4
         2: .line 794
            aload 0 /* this */
            iconst_0
            putfield com.sun.jndi.ldap.Connection.paused:Z
         3: .line 795
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pauseLock:Ljava/lang/Object;
            invokevirtual java.lang.Object.notify:()V
         4: .line 788
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 1
            monitorexit
         5: goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         6: aload 1
            monitorexit
         7: athrow
         8: .line 798
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lcom/sun/jndi/ldap/Connection;
      Exception table:
        from    to  target  type
           1     5       6  any
           6     7       6  any
    Exceptions:
      throws java.io.IOException

  private void pauseReader();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 810
            aload 0 /* this */
            iconst_1
            putfield com.sun.jndi.ldap.Connection.paused:Z
         1: .line 812
            goto 3
         2: .line 813
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pauseLock:Ljava/lang/Object;
            invokevirtual java.lang.Object.wait:()V
         3: .line 812
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.paused:Z
            ifne 2
         4: .line 815
            goto 9
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         5: pop
         6: .line 816
            new java.io.InterruptedIOException
            dup
         7: .line 817
            ldc "Pause/unpause reader has problems."
         8: .line 816
            invokespecial java.io.InterruptedIOException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 819
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lcom/sun/jndi/ldap/Connection;
      Exception table:
        from    to  target  type
           1     4       5  Class java.lang.InterruptedException
    Exceptions:
      throws java.io.IOException

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=16, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 840
            aconst_null
            astore 10 /* in */
        start local 10 // java.io.InputStream in
         1: .line 846
      StackMap locals: com.sun.jndi.ldap.Connection top top top top top top top top top java.io.InputStream
      StackMap stack:
            sipush 129
            newarray 8
            astore 1 /* inbuf */
        start local 1 // byte[] inbuf
         2: .line 848
            iconst_0
            istore 5 /* offset */
        start local 5 // int offset
         3: .line 849
            iconst_0
            istore 6 /* seqlen */
        start local 6 // int seqlen
         4: .line 850
            iconst_0
            istore 7 /* seqlenlen */
        start local 7 // int seqlenlen
         5: .line 852
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.getInputStream:()Ljava/io/InputStream;
            astore 10 /* in */
         6: .line 855
            aload 10 /* in */
            aload 1 /* inbuf */
            iload 5 /* offset */
            iconst_1
            invokevirtual java.io.InputStream.read:([BII)I
            istore 3 /* bytesread */
        start local 3 // int bytesread
         7: .line 856
            iload 3 /* bytesread */
            ifge 10
         8: .line 857
            aload 10 /* in */
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.getInputStream:()Ljava/io/InputStream;
            if_acmpeq 79
         9: .line 858
            goto 1
        10: .line 864
      StackMap locals: com.sun.jndi.ldap.Connection byte[] top int top int int int top top java.io.InputStream
      StackMap stack:
            aload 1 /* inbuf */
            iload 5 /* offset */
            iinc 5 /* offset */ 1
            baload
            bipush 48
            if_icmpeq 12
        11: .line 865
            goto 1
        12: .line 868
      StackMap locals:
      StackMap stack:
            aload 10 /* in */
            aload 1 /* inbuf */
            iload 5 /* offset */
            iconst_1
            invokevirtual java.io.InputStream.read:([BII)I
            istore 3 /* bytesread */
        13: .line 869
            iload 3 /* bytesread */
            ifge 15
        14: .line 870
            goto 79
        15: .line 871
      StackMap locals:
      StackMap stack:
            aload 1 /* inbuf */
            iload 5 /* offset */
            iinc 5 /* offset */ 1
            baload
            istore 6 /* seqlen */
        16: .line 876
            iload 6 /* seqlen */
            sipush 128
            iand
            sipush 128
            if_icmpne 40
        17: .line 877
            iload 6 /* seqlen */
            bipush 127
            iand
            istore 7 /* seqlenlen */
        18: .line 880
            iload 7 /* seqlenlen */
            iconst_4
            if_icmple 20
        19: .line 881
            new java.io.IOException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Length coded with too many bytes: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 7 /* seqlenlen */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        20: .line 884
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 3 /* bytesread */
        21: .line 885
            iconst_0
            istore 8 /* eos */
        start local 8 // boolean eos
        22: .line 888
            goto 30
        23: .line 889
      StackMap locals: com.sun.jndi.ldap.Connection byte[] top int top int int int int top java.io.InputStream
      StackMap stack:
            aload 10 /* in */
            aload 1 /* inbuf */
            iload 5 /* offset */
            iload 3 /* bytesread */
            iadd
        24: .line 890
            iload 7 /* seqlenlen */
            iload 3 /* bytesread */
            isub
        25: .line 889
            invokevirtual java.io.InputStream.read:([BII)I
            istore 4 /* br */
        start local 4 // int br
        26: .line 891
            iload 4 /* br */
            ifge 29
        27: .line 892
            iconst_1
            istore 8 /* eos */
        28: .line 893
            goto 31
        29: .line 895
      StackMap locals: com.sun.jndi.ldap.Connection byte[] top int int int int int int top java.io.InputStream
      StackMap stack:
            iload 3 /* bytesread */
            iload 4 /* br */
            iadd
            istore 3 /* bytesread */
        end local 4 // int br
        30: .line 888
      StackMap locals: com.sun.jndi.ldap.Connection byte[] top int top int int int int top java.io.InputStream
      StackMap stack:
            iload 3 /* bytesread */
            iload 7 /* seqlenlen */
            if_icmplt 23
        31: .line 899
      StackMap locals:
      StackMap stack:
            iload 8 /* eos */
            ifeq 33
        32: .line 900
            goto 79
        33: .line 903
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 6 /* seqlen */
        34: .line 904
            iconst_0
            istore 11 /* i */
        start local 11 // int i
        35: goto 38
        36: .line 905
      StackMap locals: int
      StackMap stack:
            iload 6 /* seqlen */
            bipush 8
            ishl
            aload 1 /* inbuf */
            iload 5 /* offset */
            iload 11 /* i */
            iadd
            baload
            sipush 255
            iand
            iadd
            istore 6 /* seqlen */
        37: .line 904
            iinc 11 /* i */ 1
      StackMap locals:
      StackMap stack:
        38: iload 11 /* i */
            iload 7 /* seqlenlen */
            if_icmplt 36
        end local 11 // int i
        39: .line 907
            iload 5 /* offset */
            iload 3 /* bytesread */
            iadd
            istore 5 /* offset */
        end local 8 // boolean eos
        40: .line 910
      StackMap locals: com.sun.jndi.ldap.Connection byte[] top int top int int int top top java.io.InputStream
      StackMap stack:
            iload 7 /* seqlenlen */
            iload 3 /* bytesread */
            if_icmple 42
        41: .line 911
            new java.io.IOException
            dup
            ldc "Unexpected EOF while reading length"
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        42: .line 914
      StackMap locals:
      StackMap stack:
            iload 6 /* seqlen */
            ifge 44
        43: .line 915
            new java.io.IOException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Length too big: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 6 /* seqlen */
            i2l
            ldc 4294967295
            land
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        44: .line 918
      StackMap locals:
      StackMap stack:
            aload 10 /* in */
            iload 6 /* seqlen */
            invokestatic com.sun.jndi.ldap.Connection.readFully:(Ljava/io/InputStream;I)[B
            astore 11 /* left */
        start local 11 // byte[] left
        45: .line 919
            aload 1 /* inbuf */
            iload 5 /* offset */
            aload 11 /* left */
            arraylength
            iadd
            invokestatic java.util.Arrays.copyOf:([BI)[B
            astore 1 /* inbuf */
        46: .line 920
            aload 11 /* left */
            iconst_0
            aload 1 /* inbuf */
            iload 5 /* offset */
            aload 11 /* left */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        47: .line 921
            iload 5 /* offset */
            aload 11 /* left */
            arraylength
            iadd
            istore 5 /* offset */
        48: .line 924
            new com.sun.jndi.ldap.BerDecoder
            dup
            aload 1 /* inbuf */
            iconst_0
            iload 5 /* offset */
            invokespecial com.sun.jndi.ldap.BerDecoder.<init>:([BII)V
            astore 9 /* retBer */
        start local 9 // com.sun.jndi.ldap.BerDecoder retBer
        49: .line 926
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            ifnull 51
        50: .line 927
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceFile:Ljava/io/OutputStream;
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.traceTagIn:Ljava/lang/String;
            aload 1 /* inbuf */
            iconst_0
            iload 5 /* offset */
            invokestatic com.sun.jndi.ldap.Ber.dumpBER:(Ljava/io/OutputStream;Ljava/lang/String;[BII)V
        51: .line 930
      StackMap locals: com.sun.jndi.ldap.Connection byte[] top int top int int int top com.sun.jndi.ldap.BerDecoder java.io.InputStream byte[]
      StackMap stack:
            aload 9 /* retBer */
            aconst_null
            invokevirtual com.sun.jndi.ldap.BerDecoder.parseSeq:([I)I
            pop
        52: .line 931
            aload 9 /* retBer */
            invokevirtual com.sun.jndi.ldap.BerDecoder.parseInt:()I
            istore 2 /* inMsgId */
        start local 2 // int inMsgId
        53: .line 932
            aload 9 /* retBer */
            invokevirtual com.sun.jndi.ldap.BerDecoder.reset:()V
        54: .line 934
            iconst_0
            istore 12 /* needPause */
        start local 12 // boolean needPause
        55: .line 936
            iload 2 /* inMsgId */
            ifne 58
        56: .line 938
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.parent:Lcom/sun/jndi/ldap/LdapClient;
            aload 9 /* retBer */
            invokevirtual com.sun.jndi.ldap.LdapClient.processUnsolicited:(Lcom/sun/jndi/ldap/BerDecoder;)V
        57: .line 939
            goto 1
        58: .line 940
      StackMap locals: com.sun.jndi.ldap.Connection byte[] int int top int int int top com.sun.jndi.ldap.BerDecoder java.io.InputStream byte[] int
      StackMap stack:
            aload 0 /* this */
            iload 2 /* inMsgId */
            invokevirtual com.sun.jndi.ldap.Connection.findRequest:(I)Lcom/sun/jndi/ldap/LdapRequest;
            astore 13 /* ldr */
        start local 13 // com.sun.jndi.ldap.LdapRequest ldr
        59: .line 942
            aload 13 /* ldr */
            ifnull 1
        60: .line 949
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.pauseLock:Ljava/lang/Object;
            dup
            astore 14
            monitorenter
        61: .line 950
            aload 13 /* ldr */
            aload 9 /* retBer */
            invokevirtual com.sun.jndi.ldap.LdapRequest.addReplyBer:(Lcom/sun/jndi/ldap/BerDecoder;)Z
            istore 12 /* needPause */
        62: .line 951
            iload 12 /* needPause */
            ifeq 64
        63: .line 956
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.pauseReader:()V
        64: .line 949
      StackMap locals: com.sun.jndi.ldap.LdapRequest java.lang.Object
      StackMap stack:
            aload 14
            monitorexit
        65: goto 1
      StackMap locals:
      StackMap stack: java.lang.Throwable
        66: aload 14
            monitorexit
        67: athrow
        end local 13 // com.sun.jndi.ldap.LdapRequest ldr
        end local 12 // boolean needPause
        end local 9 // com.sun.jndi.ldap.BerDecoder retBer
        end local 2 // int inMsgId
        68: .line 966
      StackMap locals: com.sun.jndi.ldap.Connection byte[] top int top int int int top top java.io.InputStream byte[]
      StackMap stack: com.sun.jndi.ldap.Ber$DecodeException
            pop
        end local 11 // byte[] left
        69: .line 969
            goto 1
        end local 7 // int seqlenlen
        end local 6 // int seqlen
        end local 5 // int offset
        end local 3 // int bytesread
        end local 1 // byte[] inbuf
      StackMap locals: com.sun.jndi.ldap.Connection top top top top top top top top top java.io.InputStream
      StackMap stack: java.io.IOException
        70: astore 11 /* ie */
        start local 11 // java.io.IOException ie
        71: .line 975
            aload 10 /* in */
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.getInputStream:()Ljava/io/InputStream;
            if_acmpne 1
        72: .line 982
            aload 11 /* ie */
            athrow
        end local 11 // java.io.IOException ie
        73: .line 991
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 11 /* ex */
        start local 11 // java.io.IOException ex
        74: .line 995
            aload 0 /* this */
            aload 11 /* ex */
            putfield com.sun.jndi.ldap.Connection.closureReason:Ljava/io/IOException;
        end local 11 // java.io.IOException ex
        75: .line 997
            aload 0 /* this */
            aconst_null
            iconst_1
            invokevirtual com.sun.jndi.ldap.Connection.cleanup:([Ljavax/naming/ldap/Control;Z)V
            goto 80
        76: .line 996
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 15
        77: .line 997
            aload 0 /* this */
            aconst_null
            iconst_1
            invokevirtual com.sun.jndi.ldap.Connection.cleanup:([Ljavax/naming/ldap/Control;Z)V
        78: .line 998
            aload 15
            athrow
        79: .line 997
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            iconst_1
            invokevirtual com.sun.jndi.ldap.Connection.cleanup:([Ljavax/naming/ldap/Control;Z)V
        80: .line 1002
      StackMap locals:
      StackMap stack:
            return
        end local 10 // java.io.InputStream in
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   81     0       this  Lcom/sun/jndi/ldap/Connection;
            2   70     1      inbuf  [B
           53   68     2    inMsgId  I
            7   70     3  bytesread  I
           26   30     4         br  I
            3   70     5     offset  I
            4   70     6     seqlen  I
            5   70     7  seqlenlen  I
           22   40     8        eos  Z
           49   68     9     retBer  Lcom/sun/jndi/ldap/BerDecoder;
            1   81    10         in  Ljava/io/InputStream;
           35   39    11          i  I
           45   69    11       left  [B
           55   68    12  needPause  Z
           59   68    13        ldr  Lcom/sun/jndi/ldap/LdapRequest;
           71   73    11         ie  Ljava/io/IOException;
           74   75    11         ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          61    65      66  any
          66    67      66  any
          48    68      68  Class com.sun.jndi.ldap.Ber$DecodeException
           1     9      70  Class java.io.IOException
          10    11      70  Class java.io.IOException
          12    14      70  Class java.io.IOException
          15    32      70  Class java.io.IOException
          33    69      70  Class java.io.IOException
           1    73      73  Class java.io.IOException
           1    75      76  any

  private static byte[] readFully(java.io.InputStream, int);
    descriptor: (Ljava/io/InputStream;I)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=2
        start local 0 // java.io.InputStream is
        start local 1 // int length
         0: .line 1007
            iload 1 /* length */
            sipush 8192
            invokestatic java.lang.Math.min:(II)I
            newarray 8
            astore 2 /* buf */
        start local 2 // byte[] buf
         1: .line 1008
            iconst_0
            istore 3 /* nread */
        start local 3 // int nread
         2: .line 1009
            goto 15
         3: .line 1011
      StackMap locals: byte[] int
      StackMap stack:
            iload 3 /* nread */
            aload 2 /* buf */
            arraylength
            if_icmplt 8
         4: .line 1012
            iload 1 /* length */
            iload 3 /* nread */
            isub
            aload 2 /* buf */
            arraylength
            sipush 8192
            iadd
            invokestatic java.lang.Math.min:(II)I
            istore 4 /* bytesToRead */
        start local 4 // int bytesToRead
         5: .line 1013
            aload 2 /* buf */
            arraylength
            iload 3 /* nread */
            iload 4 /* bytesToRead */
            iadd
            if_icmpge 9
         6: .line 1014
            aload 2 /* buf */
            iload 3 /* nread */
            iload 4 /* bytesToRead */
            iadd
            invokestatic java.util.Arrays.copyOf:([BI)[B
            astore 2 /* buf */
         7: .line 1016
            goto 9
        end local 4 // int bytesToRead
         8: .line 1017
      StackMap locals:
      StackMap stack:
            aload 2 /* buf */
            arraylength
            iload 3 /* nread */
            isub
            istore 4 /* bytesToRead */
        start local 4 // int bytesToRead
         9: .line 1019
      StackMap locals: int
      StackMap stack:
            aload 0 /* is */
            aload 2 /* buf */
            iload 3 /* nread */
            iload 4 /* bytesToRead */
            invokevirtual java.io.InputStream.read:([BII)I
            istore 5 /* count */
        start local 5 // int count
        10: .line 1020
            iload 5 /* count */
            ifge 14
        11: .line 1021
            aload 2 /* buf */
            arraylength
            iload 3 /* nread */
            if_icmpeq 16
        12: .line 1022
            aload 2 /* buf */
            iload 3 /* nread */
            invokestatic java.util.Arrays.copyOf:([BI)[B
            astore 2 /* buf */
        13: .line 1023
            goto 16
        14: .line 1025
      StackMap locals: int
      StackMap stack:
            iload 3 /* nread */
            iload 5 /* count */
            iadd
            istore 3 /* nread */
        end local 5 // int count
        end local 4 // int bytesToRead
        15: .line 1009
      StackMap locals:
      StackMap stack:
            iload 3 /* nread */
            iload 1 /* length */
            if_icmplt 3
        16: .line 1027
      StackMap locals:
      StackMap stack:
            aload 2 /* buf */
            areturn
        end local 3 // int nread
        end local 2 // byte[] buf
        end local 1 // int length
        end local 0 // java.io.InputStream is
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   17     0           is  Ljava/io/InputStream;
            0   17     1       length  I
            1   17     2          buf  [B
            2   17     3        nread  I
            5    8     4  bytesToRead  I
            9   15     4  bytesToRead  I
           10   15     5        count  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
        Name  Flags
      is      
      length  

  public boolean isTlsConnection();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 1031
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.sock:Ljava/net/Socket;
            instanceof javax.net.ssl.SSLSocket
            ifne 1
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.isUpgradedToStartTls:Z
            ifne 1
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/jndi/ldap/Connection;

  public synchronized void setHandshakeCompletedListener(javax.net.ssl.SSLSocket);
    descriptor: (Ljavax/net/ssl/SSLSocket;)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.sun.jndi.ldap.Connection this
        start local 1 // javax.net.ssl.SSLSocket sslSocket
         0: .line 1042
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            ifnull 2
         1: .line 1043
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            getfield com.sun.jndi.ldap.Connection$HandshakeListener.tlsHandshakeCompleted:Ljava/util/concurrent/CompletableFuture;
            iconst_0
            invokevirtual java.util.concurrent.CompletableFuture.cancel:(Z)Z
            pop
         2: .line 1045
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new com.sun.jndi.ldap.Connection$HandshakeListener
            dup
            aload 0 /* this */
            invokespecial com.sun.jndi.ldap.Connection$HandshakeListener.<init>:(Lcom/sun/jndi/ldap/Connection;)V
            putfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
         3: .line 1046
            aload 1 /* sslSocket */
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            invokevirtual javax.net.ssl.SSLSocket.addHandshakeCompletedListener:(Ljavax/net/ssl/HandshakeCompletedListener;)V
         4: .line 1047
            return
        end local 1 // javax.net.ssl.SSLSocket sslSocket
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lcom/sun/jndi/ldap/Connection;
            0    5     1  sslSocket  Ljavax/net/ssl/SSLSocket;
    MethodParameters:
           Name  Flags
      sslSocket  

  public java.security.cert.X509Certificate getTlsServerCertificate();
    descriptor: ()Ljava/security/cert/X509Certificate;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // com.sun.jndi.ldap.Connection this
         0: .line 1052
            aload 0 /* this */
            invokevirtual com.sun.jndi.ldap.Connection.isTlsConnection:()Z
            ifeq 7
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            ifnull 7
         1: .line 1053
            aload 0 /* this */
            getfield com.sun.jndi.ldap.Connection.tlsHandshakeListener:Lcom/sun/jndi/ldap/Connection$HandshakeListener;
            getfield com.sun.jndi.ldap.Connection$HandshakeListener.tlsHandshakeCompleted:Ljava/util/concurrent/CompletableFuture;
            invokevirtual java.util.concurrent.CompletableFuture.get:()Ljava/lang/Object;
            checkcast java.security.cert.X509Certificate
         2: areturn
         3: .line 1054
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            astore 1 /* iex */
        start local 1 // java.lang.InterruptedException iex
         4: .line 1055
            new javax.security.sasl.SaslException
            dup
            ldc "TLS Handshake Exception "
            aload 1 /* iex */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.lang.InterruptedException iex
         5: .line 1056
      StackMap locals:
      StackMap stack: java.util.concurrent.ExecutionException
            astore 1 /* eex */
        start local 1 // java.util.concurrent.ExecutionException eex
         6: .line 1057
            new javax.security.sasl.SaslException
            dup
            ldc "TLS Handshake Exception "
            aload 1 /* eex */
            invokevirtual java.util.concurrent.ExecutionException.getCause:()Ljava/lang/Throwable;
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.util.concurrent.ExecutionException eex
         7: .line 1059
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 0 // com.sun.jndi.ldap.Connection this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lcom/sun/jndi/ldap/Connection;
            4    5     1   iex  Ljava/lang/InterruptedException;
            6    7     1   eex  Ljava/util/concurrent/ExecutionException;
      Exception table:
        from    to  target  type
           0     2       3  Class java.lang.InterruptedException
           0     2       5  Class java.util.concurrent.ExecutionException
    Exceptions:
      throws javax.security.sasl.SaslException

  private static java.lang.String lambda$0();
    descriptor: ()Ljava/lang/String;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 184
            ldc "com.sun.jndi.ldap.object.disableEndpointIdentification"
         1: .line 183
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
         2: .line 184
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
SourceFile: "Connection.java"
NestMembers:
  com.sun.jndi.ldap.Connection$HandshakeListener
InnerClasses:
  final DecodeException = com.sun.jndi.ldap.Ber$DecodeException of com.sun.jndi.ldap.Ber
  private HandshakeListener = com.sun.jndi.ldap.Connection$HandshakeListener of com.sun.jndi.ldap.Connection
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles