final class sun.security.ssl.CertificateMessage$T12CertificateConsumer implements sun.security.ssl.SSLConsumer
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: sun.security.ssl.CertificateMessage$T12CertificateConsumer
  super_class: java.lang.Object
{
  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
         0: .line 341
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 343
            return
        end local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lsun/security/ssl/CertificateMessage$T12CertificateConsumer;

  public void consume(sun.security.ssl.ConnectionContext, java.nio.ByteBuffer);
    descriptor: (Lsun/security/ssl/ConnectionContext;Ljava/nio/ByteBuffer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
        start local 1 // sun.security.ssl.ConnectionContext context
        start local 2 // java.nio.ByteBuffer message
         0: .line 349
            aload 1 /* context */
            checkcast sun.security.ssl.HandshakeContext
            astore 3 /* hc */
        start local 3 // sun.security.ssl.HandshakeContext hc
         1: .line 352
            aload 3 /* hc */
            getfield sun.security.ssl.HandshakeContext.handshakeConsumers:Ljava/util/LinkedHashMap;
            getstatic sun.security.ssl.SSLHandshake.CERTIFICATE:Lsun/security/ssl/SSLHandshake;
            getfield sun.security.ssl.SSLHandshake.id:B
            invokestatic java.lang.Byte.valueOf:(B)Ljava/lang/Byte;
            invokevirtual java.util.LinkedHashMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 354
            new sun.security.ssl.CertificateMessage$T12CertificateMessage
            dup
            aload 3 /* hc */
            aload 2 /* message */
            invokespecial sun.security.ssl.CertificateMessage$T12CertificateMessage.<init>:(Lsun/security/ssl/HandshakeContext;Ljava/nio/ByteBuffer;)V
            astore 4 /* cm */
        start local 4 // sun.security.ssl.CertificateMessage$T12CertificateMessage cm
         3: .line 355
            aload 3 /* hc */
            getfield sun.security.ssl.HandshakeContext.sslConfig:Lsun/security/ssl/SSLConfiguration;
            getfield sun.security.ssl.SSLConfiguration.isClientMode:Z
            ifeq 9
         4: .line 356
            getstatic sun.security.ssl.SSLLogger.isOn:Z
            ifeq 7
            ldc "ssl,handshake"
            invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
            ifeq 7
         5: .line 358
            ldc "Consuming server Certificate handshake message"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* cm */
            aastore
         6: .line 357
            invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
         7: .line 360
      StackMap locals: sun.security.ssl.HandshakeContext sun.security.ssl.CertificateMessage$T12CertificateMessage
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            checkcast sun.security.ssl.ClientHandshakeContext
            aload 4 /* cm */
            invokevirtual sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate:(Lsun/security/ssl/ClientHandshakeContext;Lsun/security/ssl/CertificateMessage$T12CertificateMessage;)V
         8: .line 361
            goto 13
         9: .line 362
      StackMap locals:
      StackMap stack:
            getstatic sun.security.ssl.SSLLogger.isOn:Z
            ifeq 12
            ldc "ssl,handshake"
            invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
            ifeq 12
        10: .line 364
            ldc "Consuming client Certificate handshake message"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* cm */
            aastore
        11: .line 363
            invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
        12: .line 366
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            checkcast sun.security.ssl.ServerHandshakeContext
            aload 4 /* cm */
            invokevirtual sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate:(Lsun/security/ssl/ServerHandshakeContext;Lsun/security/ssl/CertificateMessage$T12CertificateMessage;)V
        13: .line 368
      StackMap locals:
      StackMap stack:
            return
        end local 4 // sun.security.ssl.CertificateMessage$T12CertificateMessage cm
        end local 3 // sun.security.ssl.HandshakeContext hc
        end local 2 // java.nio.ByteBuffer message
        end local 1 // sun.security.ssl.ConnectionContext context
        end local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   14     0     this  Lsun/security/ssl/CertificateMessage$T12CertificateConsumer;
            0   14     1  context  Lsun/security/ssl/ConnectionContext;
            0   14     2  message  Ljava/nio/ByteBuffer;
            1   14     3       hc  Lsun/security/ssl/HandshakeContext;
            3   14     4       cm  Lsun/security/ssl/CertificateMessage$T12CertificateMessage;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  
      message  

  private void onCertificate(sun.security.ssl.ServerHandshakeContext, sun.security.ssl.CertificateMessage$T12CertificateMessage);
    descriptor: (Lsun/security/ssl/ServerHandshakeContext;Lsun/security/ssl/CertificateMessage$T12CertificateMessage;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=9, args_size=3
        start local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
        start local 1 // sun.security.ssl.ServerHandshakeContext shc
        start local 2 // sun.security.ssl.CertificateMessage$T12CertificateMessage certificateMessage
         0: .line 372
            aload 2 /* certificateMessage */
            getfield sun.security.ssl.CertificateMessage$T12CertificateMessage.encodedCertChain:Ljava/util/List;
            astore 3 /* encodedCerts */
        start local 3 // java.util.List encodedCerts
         1: .line 373
            aload 3 /* encodedCerts */
            ifnull 2
            aload 3 /* encodedCerts */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 12
         2: .line 376
      StackMap locals: java.util.List
      StackMap stack:
            aload 1 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.handshakeConsumers:Ljava/util/LinkedHashMap;
         3: .line 377
            getstatic sun.security.ssl.SSLHandshake.CERTIFICATE_VERIFY:Lsun/security/ssl/SSLHandshake;
            getfield sun.security.ssl.SSLHandshake.id:B
            invokestatic java.lang.Byte.valueOf:(B)Ljava/lang/Byte;
         4: .line 376
            invokevirtual java.util.LinkedHashMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 378
            aload 1 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.sslConfig:Lsun/security/ssl/SSLConfiguration;
            getfield sun.security.ssl.SSLConfiguration.clientAuthType:Lsun/security/ssl/ClientAuthType;
         6: .line 379
            getstatic sun.security.ssl.ClientAuthType.CLIENT_AUTH_REQUESTED:Lsun/security/ssl/ClientAuthType;
         7: .line 378
            if_acmpeq 11
         8: .line 381
            aload 1 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getstatic sun.security.ssl.Alert.BAD_CERTIFICATE:Lsun/security/ssl/Alert;
         9: .line 382
            ldc "Empty server certificate chain"
        10: .line 381
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/String;)Ljavax/net/ssl/SSLException;
            athrow
        11: .line 384
      StackMap locals:
      StackMap stack:
            return
        12: .line 389
      StackMap locals:
      StackMap stack:
            aload 3 /* encodedCerts */
            invokeinterface java.util.List.size:()I
            anewarray java.security.cert.X509Certificate
        13: .line 388
            astore 4 /* x509Certs */
        start local 4 // java.security.cert.X509Certificate[] x509Certs
        14: .line 391
            ldc "X.509"
            invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
            astore 5 /* cf */
        start local 5 // java.security.cert.CertificateFactory cf
        15: .line 392
            iconst_0
            istore 6 /* i */
        start local 6 // int i
        16: .line 393
            aload 3 /* encodedCerts */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 21
      StackMap locals: sun.security.ssl.CertificateMessage$T12CertificateConsumer sun.security.ssl.ServerHandshakeContext sun.security.ssl.CertificateMessage$T12CertificateMessage java.util.List java.security.cert.X509Certificate[] java.security.cert.CertificateFactory int top java.util.Iterator
      StackMap stack:
        17: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast byte[]
            astore 7 /* encodedCert */
        start local 7 // byte[] encodedCert
        18: .line 394
            aload 4 /* x509Certs */
            iload 6 /* i */
            iinc 6 /* i */ 1
            aload 5 /* cf */
        19: .line 395
            new java.io.ByteArrayInputStream
            dup
            aload 7 /* encodedCert */
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
        20: .line 394
            invokevirtual java.security.cert.CertificateFactory.generateCertificate:(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
            checkcast java.security.cert.X509Certificate
            aastore
        end local 7 // byte[] encodedCert
        21: .line 393
      StackMap locals:
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 17
        end local 6 // int i
        end local 5 // java.security.cert.CertificateFactory cf
        22: .line 397
            goto 27
      StackMap locals: sun.security.ssl.CertificateMessage$T12CertificateConsumer sun.security.ssl.ServerHandshakeContext sun.security.ssl.CertificateMessage$T12CertificateMessage java.util.List java.security.cert.X509Certificate[]
      StackMap stack: java.security.cert.CertificateException
        23: astore 5 /* ce */
        start local 5 // java.security.cert.CertificateException ce
        24: .line 398
            aload 1 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getstatic sun.security.ssl.Alert.BAD_CERTIFICATE:Lsun/security/ssl/Alert;
        25: .line 399
            ldc "Failed to parse server certificates"
            aload 5 /* ce */
        26: .line 398
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/String;Ljava/lang/Throwable;)Ljavax/net/ssl/SSLException;
            athrow
        end local 5 // java.security.cert.CertificateException ce
        27: .line 402
      StackMap locals:
      StackMap stack:
            aload 1 /* shc */
            aload 4 /* x509Certs */
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkClientCerts:(Lsun/security/ssl/ServerHandshakeContext;[Ljava/security/cert/X509Certificate;)V
        28: .line 407
            aload 1 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.handshakeCredentials:Ljava/util/List;
        29: .line 408
            new sun.security.ssl.X509Authentication$X509Credentials
            dup
            aload 4 /* x509Certs */
            iconst_0
            aaload
            invokevirtual java.security.cert.X509Certificate.getPublicKey:()Ljava/security/PublicKey;
            aload 4 /* x509Certs */
            invokespecial sun.security.ssl.X509Authentication$X509Credentials.<init>:(Ljava/security/PublicKey;[Ljava/security/cert/X509Certificate;)V
        30: .line 407
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        31: .line 409
            aload 1 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.handshakeSession:Lsun/security/ssl/SSLSessionImpl;
            aload 4 /* x509Certs */
            invokevirtual sun.security.ssl.SSLSessionImpl.setPeerCertificates:([Ljava/security/cert/X509Certificate;)V
        32: .line 410
            return
        end local 4 // java.security.cert.X509Certificate[] x509Certs
        end local 3 // java.util.List encodedCerts
        end local 2 // sun.security.ssl.CertificateMessage$T12CertificateMessage certificateMessage
        end local 1 // sun.security.ssl.ServerHandshakeContext shc
        end local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   33     0                this  Lsun/security/ssl/CertificateMessage$T12CertificateConsumer;
            0   33     1                 shc  Lsun/security/ssl/ServerHandshakeContext;
            0   33     2  certificateMessage  Lsun/security/ssl/CertificateMessage$T12CertificateMessage;
            1   33     3        encodedCerts  Ljava/util/List<[B>;
           14   33     4           x509Certs  [Ljava/security/cert/X509Certificate;
           15   22     5                  cf  Ljava/security/cert/CertificateFactory;
           16   22     6                   i  I
           18   21     7         encodedCert  [B
           24   27     5                  ce  Ljava/security/cert/CertificateException;
      Exception table:
        from    to  target  type
          14    22      23  Class java.security.cert.CertificateException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                    Name  Flags
      shc                 
      certificateMessage  

  private void onCertificate(sun.security.ssl.ClientHandshakeContext, sun.security.ssl.CertificateMessage$T12CertificateMessage);
    descriptor: (Lsun/security/ssl/ClientHandshakeContext;Lsun/security/ssl/CertificateMessage$T12CertificateMessage;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=9, args_size=3
        start local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
        start local 1 // sun.security.ssl.ClientHandshakeContext chc
        start local 2 // sun.security.ssl.CertificateMessage$T12CertificateMessage certificateMessage
         0: .line 414
            aload 2 /* certificateMessage */
            getfield sun.security.ssl.CertificateMessage$T12CertificateMessage.encodedCertChain:Ljava/util/List;
            astore 3 /* encodedCerts */
        start local 3 // java.util.List encodedCerts
         1: .line 415
            aload 3 /* encodedCerts */
            ifnull 2
            aload 3 /* encodedCerts */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 5
         2: .line 416
      StackMap locals: java.util.List
      StackMap stack:
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getstatic sun.security.ssl.Alert.BAD_CERTIFICATE:Lsun/security/ssl/Alert;
         3: .line 417
            ldc "Empty server certificate chain"
         4: .line 416
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/String;)Ljavax/net/ssl/SSLException;
            athrow
         5: .line 421
      StackMap locals:
      StackMap stack:
            aload 3 /* encodedCerts */
            invokeinterface java.util.List.size:()I
            anewarray java.security.cert.X509Certificate
         6: .line 420
            astore 4 /* x509Certs */
        start local 4 // java.security.cert.X509Certificate[] x509Certs
         7: .line 423
            ldc "X.509"
            invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
            astore 5 /* cf */
        start local 5 // java.security.cert.CertificateFactory cf
         8: .line 424
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         9: .line 425
            aload 3 /* encodedCerts */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 14
      StackMap locals: sun.security.ssl.CertificateMessage$T12CertificateConsumer sun.security.ssl.ClientHandshakeContext sun.security.ssl.CertificateMessage$T12CertificateMessage java.util.List java.security.cert.X509Certificate[] java.security.cert.CertificateFactory int top java.util.Iterator
      StackMap stack:
        10: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast byte[]
            astore 7 /* encodedCert */
        start local 7 // byte[] encodedCert
        11: .line 426
            aload 4 /* x509Certs */
            iload 6 /* i */
            iinc 6 /* i */ 1
            aload 5 /* cf */
        12: .line 427
            new java.io.ByteArrayInputStream
            dup
            aload 7 /* encodedCert */
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
        13: .line 426
            invokevirtual java.security.cert.CertificateFactory.generateCertificate:(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
            checkcast java.security.cert.X509Certificate
            aastore
        end local 7 // byte[] encodedCert
        14: .line 425
      StackMap locals:
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        end local 6 // int i
        end local 5 // java.security.cert.CertificateFactory cf
        15: .line 429
            goto 20
      StackMap locals: sun.security.ssl.CertificateMessage$T12CertificateConsumer sun.security.ssl.ClientHandshakeContext sun.security.ssl.CertificateMessage$T12CertificateMessage java.util.List java.security.cert.X509Certificate[]
      StackMap stack: java.security.cert.CertificateException
        16: astore 5 /* ce */
        start local 5 // java.security.cert.CertificateException ce
        17: .line 430
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getstatic sun.security.ssl.Alert.BAD_CERTIFICATE:Lsun/security/ssl/Alert;
        18: .line 431
            ldc "Failed to parse server certificates"
            aload 5 /* ce */
        19: .line 430
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/String;Ljava/lang/Throwable;)Ljavax/net/ssl/SSLException;
            athrow
        end local 5 // java.security.cert.CertificateException ce
        20: .line 441
      StackMap locals:
      StackMap stack:
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.reservedServerCerts:[Ljava/security/cert/X509Certificate;
            ifnull 31
        21: .line 442
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.handshakeSession:Lsun/security/ssl/SSLSessionImpl;
            getfield sun.security.ssl.SSLSessionImpl.useExtendedMasterSecret:Z
            ifne 31
        22: .line 445
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.sslConfig:Lsun/security/ssl/SSLConfiguration;
            getfield sun.security.ssl.SSLConfiguration.identificationProtocol:Ljava/lang/String;
            astore 5 /* identityAlg */
        start local 5 // java.lang.String identityAlg
        23: .line 446
            aload 5 /* identityAlg */
            ifnull 24
            aload 5 /* identityAlg */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 31
        24: .line 447
      StackMap locals: java.lang.String
      StackMap stack:
            aload 4 /* x509Certs */
            iconst_0
            aaload
        25: .line 448
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.reservedServerCerts:[Ljava/security/cert/X509Certificate;
            iconst_0
            aaload
        26: .line 447
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.isIdentityEquivalent:(Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;)Z
        27: .line 448
            ifne 31
        28: .line 449
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getstatic sun.security.ssl.Alert.BAD_CERTIFICATE:Lsun/security/ssl/Alert;
        29: .line 450
            ldc "server certificate change is restricted during renegotiation"
        30: .line 449
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/String;)Ljavax/net/ssl/SSLException;
            athrow
        end local 5 // java.lang.String identityAlg
        31: .line 456
      StackMap locals:
      StackMap stack:
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.staplingActive:Z
            ifeq 34
        32: .line 461
            aload 1 /* chc */
            aload 4 /* x509Certs */
            putfield sun.security.ssl.ClientHandshakeContext.deferredCerts:[Ljava/security/cert/X509Certificate;
        33: .line 462
            goto 35
        34: .line 464
      StackMap locals:
      StackMap stack:
            aload 1 /* chc */
            aload 4 /* x509Certs */
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts:(Lsun/security/ssl/ClientHandshakeContext;[Ljava/security/cert/X509Certificate;)V
        35: .line 470
      StackMap locals:
      StackMap stack:
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.handshakeCredentials:Ljava/util/List;
        36: .line 471
            new sun.security.ssl.X509Authentication$X509Credentials
            dup
            aload 4 /* x509Certs */
            iconst_0
            aaload
            invokevirtual java.security.cert.X509Certificate.getPublicKey:()Ljava/security/PublicKey;
            aload 4 /* x509Certs */
            invokespecial sun.security.ssl.X509Authentication$X509Credentials.<init>:(Ljava/security/PublicKey;[Ljava/security/cert/X509Certificate;)V
        37: .line 470
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        38: .line 472
            aload 1 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.handshakeSession:Lsun/security/ssl/SSLSessionImpl;
            aload 4 /* x509Certs */
            invokevirtual sun.security.ssl.SSLSessionImpl.setPeerCertificates:([Ljava/security/cert/X509Certificate;)V
        39: .line 473
            return
        end local 4 // java.security.cert.X509Certificate[] x509Certs
        end local 3 // java.util.List encodedCerts
        end local 2 // sun.security.ssl.CertificateMessage$T12CertificateMessage certificateMessage
        end local 1 // sun.security.ssl.ClientHandshakeContext chc
        end local 0 // sun.security.ssl.CertificateMessage$T12CertificateConsumer this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   40     0                this  Lsun/security/ssl/CertificateMessage$T12CertificateConsumer;
            0   40     1                 chc  Lsun/security/ssl/ClientHandshakeContext;
            0   40     2  certificateMessage  Lsun/security/ssl/CertificateMessage$T12CertificateMessage;
            1   40     3        encodedCerts  Ljava/util/List<[B>;
            7   40     4           x509Certs  [Ljava/security/cert/X509Certificate;
            8   15     5                  cf  Ljava/security/cert/CertificateFactory;
            9   15     6                   i  I
           11   14     7         encodedCert  [B
           17   20     5                  ce  Ljava/security/cert/CertificateException;
           23   31     5         identityAlg  Ljava/lang/String;
      Exception table:
        from    to  target  type
           7    15      16  Class java.security.cert.CertificateException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                    Name  Flags
      chc                 
      certificateMessage  

  private static boolean isIdentityEquivalent(java.security.cert.X509Certificate, java.security.cert.X509Certificate);
    descriptor: (Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=8, args_size=2
        start local 0 // java.security.cert.X509Certificate thisCert
        start local 1 // java.security.cert.X509Certificate prevCert
         0: .line 488
            aload 0 /* thisCert */
            aload 1 /* prevCert */
            invokevirtual java.security.cert.X509Certificate.equals:(Ljava/lang/Object;)Z
            ifeq 2
         1: .line 489
            iconst_1
            ireturn
         2: .line 493
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 2 /* thisSubjectAltNames */
        start local 2 // java.util.Collection thisSubjectAltNames
         3: .line 495
            aload 0 /* thisCert */
            invokevirtual java.security.cert.X509Certificate.getSubjectAlternativeNames:()Ljava/util/Collection;
            astore 2 /* thisSubjectAltNames */
         4: .line 496
            goto 9
      StackMap locals: java.security.cert.X509Certificate java.security.cert.X509Certificate java.util.Collection
      StackMap stack: java.security.cert.CertificateParsingException
         5: pop
         6: .line 497
            getstatic sun.security.ssl.SSLLogger.isOn:Z
            ifeq 9
            ldc "handshake"
            invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
            ifeq 9
         7: .line 499
            ldc "Attempt to obtain subjectAltNames extension failed!"
            iconst_0
            anewarray java.lang.Object
         8: .line 498
            invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
         9: .line 503
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3 /* prevSubjectAltNames */
        start local 3 // java.util.Collection prevSubjectAltNames
        10: .line 505
            aload 1 /* prevCert */
            invokevirtual java.security.cert.X509Certificate.getSubjectAlternativeNames:()Ljava/util/Collection;
            astore 3 /* prevSubjectAltNames */
        11: .line 506
            goto 16
      StackMap locals: java.security.cert.X509Certificate java.security.cert.X509Certificate java.util.Collection java.util.Collection
      StackMap stack: java.security.cert.CertificateParsingException
        12: pop
        13: .line 507
            getstatic sun.security.ssl.SSLLogger.isOn:Z
            ifeq 16
            ldc "handshake"
            invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
            ifeq 16
        14: .line 509
            ldc "Attempt to obtain subjectAltNames extension failed!"
            iconst_0
            anewarray java.lang.Object
        15: .line 508
            invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
        16: .line 513
      StackMap locals:
      StackMap stack:
            aload 2 /* thisSubjectAltNames */
            ifnull 31
            aload 3 /* prevSubjectAltNames */
            ifnull 31
        17: .line 518
            aload 2 /* thisSubjectAltNames */
            bipush 7
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.getSubjectAltNames:(Ljava/util/Collection;I)Ljava/util/Collection;
        18: .line 517
            astore 4 /* thisSubAltIPAddrs */
        start local 4 // java.util.Collection thisSubAltIPAddrs
        19: .line 520
            aload 3 /* prevSubjectAltNames */
            bipush 7
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.getSubjectAltNames:(Ljava/util/Collection;I)Ljava/util/Collection;
        20: .line 519
            astore 5 /* prevSubAltIPAddrs */
        start local 5 // java.util.Collection prevSubAltIPAddrs
        21: .line 521
            aload 4 /* thisSubAltIPAddrs */
            ifnull 24
            aload 5 /* prevSubAltIPAddrs */
            ifnull 24
        22: .line 522
            aload 4 /* thisSubAltIPAddrs */
            aload 5 /* prevSubAltIPAddrs */
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.isEquivalent:(Ljava/util/Collection;Ljava/util/Collection;)Z
            ifeq 24
        23: .line 523
            iconst_1
            ireturn
        24: .line 529
      StackMap locals: java.util.Collection java.util.Collection
      StackMap stack:
            aload 2 /* thisSubjectAltNames */
            iconst_2
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.getSubjectAltNames:(Ljava/util/Collection;I)Ljava/util/Collection;
        25: .line 528
            astore 6 /* thisSubAltDnsNames */
        start local 6 // java.util.Collection thisSubAltDnsNames
        26: .line 531
            aload 3 /* prevSubjectAltNames */
            iconst_2
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.getSubjectAltNames:(Ljava/util/Collection;I)Ljava/util/Collection;
        27: .line 530
            astore 7 /* prevSubAltDnsNames */
        start local 7 // java.util.Collection prevSubAltDnsNames
        28: .line 532
            aload 6 /* thisSubAltDnsNames */
            ifnull 31
            aload 7 /* prevSubAltDnsNames */
            ifnull 31
        29: .line 533
            aload 6 /* thisSubAltDnsNames */
            aload 7 /* prevSubAltDnsNames */
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.isEquivalent:(Ljava/util/Collection;Ljava/util/Collection;)Z
            ifeq 31
        30: .line 534
            iconst_1
            ireturn
        end local 7 // java.util.Collection prevSubAltDnsNames
        end local 6 // java.util.Collection thisSubAltDnsNames
        end local 5 // java.util.Collection prevSubAltIPAddrs
        end local 4 // java.util.Collection thisSubAltIPAddrs
        31: .line 539
      StackMap locals:
      StackMap stack:
            aload 0 /* thisCert */
            invokevirtual java.security.cert.X509Certificate.getSubjectX500Principal:()Ljavax/security/auth/x500/X500Principal;
            astore 4 /* thisSubject */
        start local 4 // javax.security.auth.x500.X500Principal thisSubject
        32: .line 540
            aload 1 /* prevCert */
            invokevirtual java.security.cert.X509Certificate.getSubjectX500Principal:()Ljavax/security/auth/x500/X500Principal;
            astore 5 /* prevSubject */
        start local 5 // javax.security.auth.x500.X500Principal prevSubject
        33: .line 541
            aload 0 /* thisCert */
            invokevirtual java.security.cert.X509Certificate.getIssuerX500Principal:()Ljavax/security/auth/x500/X500Principal;
            astore 6 /* thisIssuer */
        start local 6 // javax.security.auth.x500.X500Principal thisIssuer
        34: .line 542
            aload 1 /* prevCert */
            invokevirtual java.security.cert.X509Certificate.getIssuerX500Principal:()Ljavax/security/auth/x500/X500Principal;
            astore 7 /* prevIssuer */
        start local 7 // javax.security.auth.x500.X500Principal prevIssuer
        35: .line 544
            aload 4 /* thisSubject */
            invokevirtual javax.security.auth.x500.X500Principal.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 40
        36: .line 545
            aload 5 /* prevSubject */
            invokevirtual javax.security.auth.x500.X500Principal.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 40
        37: .line 546
            aload 4 /* thisSubject */
            aload 5 /* prevSubject */
            invokevirtual javax.security.auth.x500.X500Principal.equals:(Ljava/lang/Object;)Z
            ifeq 40
        38: .line 547
            aload 6 /* thisIssuer */
            aload 7 /* prevIssuer */
            invokevirtual javax.security.auth.x500.X500Principal.equals:(Ljava/lang/Object;)Z
            ifeq 40
        39: .line 544
            iconst_1
            ireturn
      StackMap locals: java.security.cert.X509Certificate java.security.cert.X509Certificate java.util.Collection java.util.Collection javax.security.auth.x500.X500Principal javax.security.auth.x500.X500Principal javax.security.auth.x500.X500Principal javax.security.auth.x500.X500Principal
      StackMap stack:
        40: iconst_0
            ireturn
        end local 7 // javax.security.auth.x500.X500Principal prevIssuer
        end local 6 // javax.security.auth.x500.X500Principal thisIssuer
        end local 5 // javax.security.auth.x500.X500Principal prevSubject
        end local 4 // javax.security.auth.x500.X500Principal thisSubject
        end local 3 // java.util.Collection prevSubjectAltNames
        end local 2 // java.util.Collection thisSubjectAltNames
        end local 1 // java.security.cert.X509Certificate prevCert
        end local 0 // java.security.cert.X509Certificate thisCert
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   41     0             thisCert  Ljava/security/cert/X509Certificate;
            0   41     1             prevCert  Ljava/security/cert/X509Certificate;
            3   41     2  thisSubjectAltNames  Ljava/util/Collection<Ljava/util/List<*>;>;
           10   41     3  prevSubjectAltNames  Ljava/util/Collection<Ljava/util/List<*>;>;
           19   31     4    thisSubAltIPAddrs  Ljava/util/Collection<Ljava/lang/String;>;
           21   31     5    prevSubAltIPAddrs  Ljava/util/Collection<Ljava/lang/String;>;
           26   31     6   thisSubAltDnsNames  Ljava/util/Collection<Ljava/lang/String;>;
           28   31     7   prevSubAltDnsNames  Ljava/util/Collection<Ljava/lang/String;>;
           32   41     4          thisSubject  Ljavax/security/auth/x500/X500Principal;
           33   41     5          prevSubject  Ljavax/security/auth/x500/X500Principal;
           34   41     6           thisIssuer  Ljavax/security/auth/x500/X500Principal;
           35   41     7           prevIssuer  Ljavax/security/auth/x500/X500Principal;
      Exception table:
        from    to  target  type
           3     4       5  Class java.security.cert.CertificateParsingException
          10    11      12  Class java.security.cert.CertificateParsingException
    MethodParameters:
          Name  Flags
      thisCert  
      prevCert  

  private static java.util.Collection<java.lang.String> getSubjectAltNames(java.util.Collection<java.util.List<?>>, int);
    descriptor: (Ljava/util/Collection;I)Ljava/util/Collection;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=7, args_size=2
        start local 0 // java.util.Collection subjectAltNames
        start local 1 // int type
         0: .line 559
            aconst_null
            astore 2 /* subAltDnsNames */
        start local 2 // java.util.HashSet subAltDnsNames
         1: .line 560
            aload 0 /* subjectAltNames */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4
            goto 11
      StackMap locals: java.util.Collection int java.util.HashSet top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.List
            astore 3 /* subjectAltName */
        start local 3 // java.util.List subjectAltName
         3: .line 561
            aload 3 /* subjectAltName */
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            istore 5 /* subjectAltNameType */
        start local 5 // int subjectAltNameType
         4: .line 562
            iload 5 /* subjectAltNameType */
            iload 1 /* type */
            if_icmpne 11
         5: .line 563
            aload 3 /* subjectAltName */
            iconst_1
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* subAltDnsName */
        start local 6 // java.lang.String subAltDnsName
         6: .line 564
            aload 6 /* subAltDnsName */
            ifnull 11
            aload 6 /* subAltDnsName */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 11
         7: .line 565
            aload 2 /* subAltDnsNames */
            ifnonnull 10
         8: .line 567
            new java.util.HashSet
            dup
            aload 0 /* subjectAltNames */
            invokeinterface java.util.Collection.size:()I
            invokespecial java.util.HashSet.<init>:(I)V
         9: .line 566
            astore 2 /* subAltDnsNames */
        10: .line 569
      StackMap locals: java.util.Collection int java.util.HashSet java.util.List java.util.Iterator int java.lang.String
      StackMap stack:
            aload 2 /* subAltDnsNames */
            aload 6 /* subAltDnsName */
            invokevirtual java.util.HashSet.add:(Ljava/lang/Object;)Z
            pop
        end local 6 // java.lang.String subAltDnsName
        end local 5 // int subjectAltNameType
        end local 3 // java.util.List subjectAltName
        11: .line 560
      StackMap locals: java.util.Collection int java.util.HashSet top java.util.Iterator
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
        12: .line 574
            aload 2 /* subAltDnsNames */
            areturn
        end local 2 // java.util.HashSet subAltDnsNames
        end local 1 // int type
        end local 0 // java.util.Collection subjectAltNames
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   13     0     subjectAltNames  Ljava/util/Collection<Ljava/util/List<*>;>;
            0   13     1                type  I
            1   13     2      subAltDnsNames  Ljava/util/HashSet<Ljava/lang/String;>;
            3   11     3      subjectAltName  Ljava/util/List<*>;
            4   11     5  subjectAltNameType  I
            6   11     6       subAltDnsName  Ljava/lang/String;
    Signature: (Ljava/util/Collection<Ljava/util/List<*>;>;I)Ljava/util/Collection<Ljava/lang/String;>;
    MethodParameters:
                 Name  Flags
      subjectAltNames  
      type             

  private static boolean isEquivalent(java.util.Collection<java.lang.String>, java.util.Collection<java.lang.String>);
    descriptor: (Ljava/util/Collection;Ljava/util/Collection;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=2
        start local 0 // java.util.Collection thisSubAltNames
        start local 1 // java.util.Collection prevSubAltNames
         0: .line 579
            aload 0 /* thisSubAltNames */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3
            goto 7
      StackMap locals: java.util.Collection java.util.Collection top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 2 /* thisSubAltName */
        start local 2 // java.lang.String thisSubAltName
         2: .line 580
            aload 1 /* prevSubAltNames */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 5
            goto 6
      StackMap locals: java.util.Collection java.util.Collection java.lang.String java.util.Iterator top java.util.Iterator
      StackMap stack:
         3: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 4 /* prevSubAltName */
        start local 4 // java.lang.String prevSubAltName
         4: .line 583
            aload 2 /* thisSubAltName */
            aload 4 /* prevSubAltName */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 6
         5: .line 584
            iconst_1
            ireturn
        end local 4 // java.lang.String prevSubAltName
         6: .line 580
      StackMap locals:
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
        end local 2 // java.lang.String thisSubAltName
         7: .line 579
      StackMap locals: java.util.Collection java.util.Collection top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         8: .line 589
            iconst_0
            ireturn
        end local 1 // java.util.Collection prevSubAltNames
        end local 0 // java.util.Collection thisSubAltNames
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    9     0  thisSubAltNames  Ljava/util/Collection<Ljava/lang/String;>;
            0    9     1  prevSubAltNames  Ljava/util/Collection<Ljava/lang/String;>;
            2    7     2   thisSubAltName  Ljava/lang/String;
            4    6     4   prevSubAltName  Ljava/lang/String;
    Signature: (Ljava/util/Collection<Ljava/lang/String;>;Ljava/util/Collection<Ljava/lang/String;>;)Z
    MethodParameters:
                 Name  Flags
      thisSubAltNames  
      prevSubAltNames  

  static void checkServerCerts(sun.security.ssl.ClientHandshakeContext, java.security.cert.X509Certificate[]);
    descriptor: (Lsun/security/ssl/ClientHandshakeContext;[Ljava/security/cert/X509Certificate;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // sun.security.ssl.ClientHandshakeContext chc
        start local 1 // java.security.cert.X509Certificate[] certs
         0: .line 605
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.sslContext:Lsun/security/ssl/SSLContextImpl;
            invokevirtual sun.security.ssl.SSLContextImpl.getX509TrustManager:()Ljavax/net/ssl/X509TrustManager;
            astore 2 /* tm */
        start local 2 // javax.net.ssl.X509TrustManager tm
         1: .line 610
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.negotiatedCipherSuite:Lsun/security/ssl/CipherSuite;
            getfield sun.security.ssl.CipherSuite.keyExchange:Lsun/security/ssl/CipherSuite$KeyExchange;
         2: .line 611
            getstatic sun.security.ssl.CipherSuite$KeyExchange.K_RSA_EXPORT:Lsun/security/ssl/CipherSuite$KeyExchange;
         3: .line 610
            if_acmpeq 7
         4: .line 612
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.negotiatedCipherSuite:Lsun/security/ssl/CipherSuite;
            getfield sun.security.ssl.CipherSuite.keyExchange:Lsun/security/ssl/CipherSuite$KeyExchange;
         5: .line 613
            getstatic sun.security.ssl.CipherSuite$KeyExchange.K_DHE_RSA_EXPORT:Lsun/security/ssl/CipherSuite$KeyExchange;
         6: .line 612
            if_acmpne 9
         7: .line 614
      StackMap locals: javax.net.ssl.X509TrustManager
      StackMap stack:
            getstatic sun.security.ssl.CipherSuite$KeyExchange.K_RSA:Lsun/security/ssl/CipherSuite$KeyExchange;
            getfield sun.security.ssl.CipherSuite$KeyExchange.name:Ljava/lang/String;
            astore 3 /* keyExchangeString */
        start local 3 // java.lang.String keyExchangeString
         8: .line 615
            goto 10
        end local 3 // java.lang.String keyExchangeString
         9: .line 616
      StackMap locals:
      StackMap stack:
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.negotiatedCipherSuite:Lsun/security/ssl/CipherSuite;
            getfield sun.security.ssl.CipherSuite.keyExchange:Lsun/security/ssl/CipherSuite$KeyExchange;
            getfield sun.security.ssl.CipherSuite$KeyExchange.name:Ljava/lang/String;
            astore 3 /* keyExchangeString */
        start local 3 // java.lang.String keyExchangeString
        10: .line 620
      StackMap locals: java.lang.String
      StackMap stack:
            aload 2 /* tm */
            instanceof javax.net.ssl.X509ExtendedTrustManager
            ifeq 26
        11: .line 621
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getfield sun.security.ssl.TransportContext.transport:Lsun/security/ssl/SSLTransport;
            instanceof javax.net.ssl.SSLEngine
            ifeq 19
        12: .line 622
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getfield sun.security.ssl.TransportContext.transport:Lsun/security/ssl/SSLTransport;
            checkcast javax.net.ssl.SSLEngine
            astore 4 /* engine */
        start local 4 // javax.net.ssl.SSLEngine engine
        13: .line 623
            aload 2 /* tm */
            checkcast javax.net.ssl.X509ExtendedTrustManager
        14: .line 624
            aload 1 /* certs */
            invokevirtual java.security.cert.X509Certificate[].clone:()Ljava/lang/Object;
            checkcast java.security.cert.X509Certificate[]
        15: .line 625
            aload 3 /* keyExchangeString */
        16: .line 626
            aload 4 /* engine */
        17: .line 623
            invokevirtual javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted:([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V
        end local 4 // javax.net.ssl.SSLEngine engine
        18: .line 627
            goto 29
        19: .line 628
      StackMap locals:
      StackMap stack:
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getfield sun.security.ssl.TransportContext.transport:Lsun/security/ssl/SSLTransport;
            checkcast javax.net.ssl.SSLSocket
            astore 4 /* socket */
        start local 4 // javax.net.ssl.SSLSocket socket
        20: .line 629
            aload 2 /* tm */
            checkcast javax.net.ssl.X509ExtendedTrustManager
        21: .line 630
            aload 1 /* certs */
            invokevirtual java.security.cert.X509Certificate[].clone:()Ljava/lang/Object;
            checkcast java.security.cert.X509Certificate[]
        22: .line 631
            aload 3 /* keyExchangeString */
        23: .line 632
            aload 4 /* socket */
        24: .line 629
            invokevirtual javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted:([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V
        end local 4 // javax.net.ssl.SSLSocket socket
        25: .line 634
            goto 29
        26: .line 637
      StackMap locals:
      StackMap stack:
            new java.security.cert.CertificateException
            dup
        27: .line 638
            ldc "Improper X509TrustManager implementation"
        28: .line 637
            invokespecial java.security.cert.CertificateException.<init>:(Ljava/lang/String;)V
            athrow
        29: .line 643
      StackMap locals:
      StackMap stack:
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.handshakeSession:Lsun/security/ssl/SSLSessionImpl;
            aload 1 /* certs */
            invokevirtual sun.security.ssl.SSLSessionImpl.setPeerCertificates:([Ljava/security/cert/X509Certificate;)V
        30: .line 644
            goto 33
      StackMap locals:
      StackMap stack: java.security.cert.CertificateException
        31: astore 4 /* ce */
        start local 4 // java.security.cert.CertificateException ce
        32: .line 645
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            aload 0 /* chc */
            aload 4 /* ce */
            invokestatic sun.security.ssl.CertificateMessage$T12CertificateConsumer.getCertificateAlert:(Lsun/security/ssl/ClientHandshakeContext;Ljava/security/cert/CertificateException;)Lsun/security/ssl/Alert;
            aload 4 /* ce */
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/Throwable;)Ljavax/net/ssl/SSLException;
            athrow
        end local 4 // java.security.cert.CertificateException ce
        33: .line 647
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.String keyExchangeString
        end local 2 // javax.net.ssl.X509TrustManager tm
        end local 1 // java.security.cert.X509Certificate[] certs
        end local 0 // sun.security.ssl.ClientHandshakeContext chc
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   34     0                chc  Lsun/security/ssl/ClientHandshakeContext;
            0   34     1              certs  [Ljava/security/cert/X509Certificate;
            1   34     2                 tm  Ljavax/net/ssl/X509TrustManager;
            8    9     3  keyExchangeString  Ljava/lang/String;
           10   34     3  keyExchangeString  Ljava/lang/String;
           13   18     4             engine  Ljavax/net/ssl/SSLEngine;
           20   25     4             socket  Ljavax/net/ssl/SSLSocket;
           32   33     4                 ce  Ljava/security/cert/CertificateException;
      Exception table:
        from    to  target  type
          10    30      31  Class java.security.cert.CertificateException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      chc    
      certs  

  private static void checkClientCerts(sun.security.ssl.ServerHandshakeContext, java.security.cert.X509Certificate[]);
    descriptor: (Lsun/security/ssl/ServerHandshakeContext;[Ljava/security/cert/X509Certificate;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=8, args_size=2
        start local 0 // sun.security.ssl.ServerHandshakeContext shc
        start local 1 // java.security.cert.X509Certificate[] certs
         0: .line 651
            aload 0 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.sslContext:Lsun/security/ssl/SSLContextImpl;
            invokevirtual sun.security.ssl.SSLContextImpl.getX509TrustManager:()Ljavax/net/ssl/X509TrustManager;
            astore 2 /* tm */
        start local 2 // javax.net.ssl.X509TrustManager tm
         1: .line 654
            aload 1 /* certs */
            iconst_0
            aaload
            invokevirtual java.security.cert.X509Certificate.getPublicKey:()Ljava/security/PublicKey;
            astore 3 /* key */
        start local 3 // java.security.PublicKey key
         2: .line 655
            aload 3 /* key */
            invokeinterface java.security.PublicKey.getAlgorithm:()Ljava/lang/String;
            astore 4 /* keyAlgorithm */
        start local 4 // java.lang.String keyAlgorithm
         3: .line 657
            aload 4 /* keyAlgorithm */
            dup
            astore 6
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 4
                 2206: 4
                67986: 5
                81440: 6
           1775481508: 7
              default: 10
          }
      StackMap locals: sun.security.ssl.ServerHandshakeContext java.security.cert.X509Certificate[] javax.net.ssl.X509TrustManager java.security.PublicKey java.lang.String top java.lang.String
      StackMap stack:
         4: aload 6
            ldc "EC"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 8
            goto 10
      StackMap locals:
      StackMap stack:
         5: aload 6
            ldc "DSA"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 8
            goto 10
      StackMap locals:
      StackMap stack:
         6: aload 6
            ldc "RSA"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 8
            goto 10
      StackMap locals:
      StackMap stack:
         7: aload 6
            ldc "RSASSA-PSS"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 8
            goto 10
         8: .line 662
      StackMap locals:
      StackMap stack:
            aload 4 /* keyAlgorithm */
            astore 5 /* authType */
        start local 5 // java.lang.String authType
         9: .line 663
            goto 11
        end local 5 // java.lang.String authType
        10: .line 666
      StackMap locals:
      StackMap stack:
            ldc "UNKNOWN"
            astore 5 /* authType */
        start local 5 // java.lang.String authType
        11: .line 670
      StackMap locals: sun.security.ssl.ServerHandshakeContext java.security.cert.X509Certificate[] javax.net.ssl.X509TrustManager java.security.PublicKey java.lang.String java.lang.String
      StackMap stack:
            aload 2 /* tm */
            instanceof javax.net.ssl.X509ExtendedTrustManager
            ifeq 27
        12: .line 671
            aload 0 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getfield sun.security.ssl.TransportContext.transport:Lsun/security/ssl/SSLTransport;
            instanceof javax.net.ssl.SSLEngine
            ifeq 20
        13: .line 672
            aload 0 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getfield sun.security.ssl.TransportContext.transport:Lsun/security/ssl/SSLTransport;
            checkcast javax.net.ssl.SSLEngine
            astore 7 /* engine */
        start local 7 // javax.net.ssl.SSLEngine engine
        14: .line 673
            aload 2 /* tm */
            checkcast javax.net.ssl.X509ExtendedTrustManager
        15: .line 674
            aload 1 /* certs */
            invokevirtual java.security.cert.X509Certificate[].clone:()Ljava/lang/Object;
            checkcast java.security.cert.X509Certificate[]
        16: .line 675
            aload 5 /* authType */
        17: .line 676
            aload 7 /* engine */
        18: .line 673
            invokevirtual javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted:([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V
        end local 7 // javax.net.ssl.SSLEngine engine
        19: .line 677
            goto 32
        20: .line 678
      StackMap locals:
      StackMap stack:
            aload 0 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getfield sun.security.ssl.TransportContext.transport:Lsun/security/ssl/SSLTransport;
            checkcast javax.net.ssl.SSLSocket
            astore 7 /* socket */
        start local 7 // javax.net.ssl.SSLSocket socket
        21: .line 679
            aload 2 /* tm */
            checkcast javax.net.ssl.X509ExtendedTrustManager
        22: .line 680
            aload 1 /* certs */
            invokevirtual java.security.cert.X509Certificate[].clone:()Ljava/lang/Object;
            checkcast java.security.cert.X509Certificate[]
        23: .line 681
            aload 5 /* authType */
        24: .line 682
            aload 7 /* socket */
        25: .line 679
            invokevirtual javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted:([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V
        end local 7 // javax.net.ssl.SSLSocket socket
        26: .line 684
            goto 32
        27: .line 687
      StackMap locals:
      StackMap stack:
            new java.security.cert.CertificateException
            dup
        28: .line 688
            ldc "Improper X509TrustManager implementation"
        29: .line 687
            invokespecial java.security.cert.CertificateException.<init>:(Ljava/lang/String;)V
            athrow
        30: .line 690
      StackMap locals:
      StackMap stack: java.security.cert.CertificateException
            astore 7 /* ce */
        start local 7 // java.security.cert.CertificateException ce
        31: .line 691
            aload 0 /* shc */
            getfield sun.security.ssl.ServerHandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getstatic sun.security.ssl.Alert.CERTIFICATE_UNKNOWN:Lsun/security/ssl/Alert;
            aload 7 /* ce */
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/Throwable;)Ljavax/net/ssl/SSLException;
            athrow
        end local 7 // java.security.cert.CertificateException ce
        32: .line 693
      StackMap locals:
      StackMap stack:
            return
        end local 5 // java.lang.String authType
        end local 4 // java.lang.String keyAlgorithm
        end local 3 // java.security.PublicKey key
        end local 2 // javax.net.ssl.X509TrustManager tm
        end local 1 // java.security.cert.X509Certificate[] certs
        end local 0 // sun.security.ssl.ServerHandshakeContext shc
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   33     0           shc  Lsun/security/ssl/ServerHandshakeContext;
            0   33     1         certs  [Ljava/security/cert/X509Certificate;
            1   33     2            tm  Ljavax/net/ssl/X509TrustManager;
            2   33     3           key  Ljava/security/PublicKey;
            3   33     4  keyAlgorithm  Ljava/lang/String;
            9   10     5      authType  Ljava/lang/String;
           11   33     5      authType  Ljava/lang/String;
           14   19     7        engine  Ljavax/net/ssl/SSLEngine;
           21   26     7        socket  Ljavax/net/ssl/SSLSocket;
           31   32     7            ce  Ljava/security/cert/CertificateException;
      Exception table:
        from    to  target  type
          11    30      30  Class java.security.cert.CertificateException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      shc    
      certs  

  private static sun.security.ssl.Alert getCertificateAlert(sun.security.ssl.ClientHandshakeContext, java.security.cert.CertificateException);
    descriptor: (Lsun/security/ssl/ClientHandshakeContext;Ljava/security/cert/CertificateException;)Lsun/security/ssl/Alert;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=2
        start local 0 // sun.security.ssl.ClientHandshakeContext chc
        start local 1 // java.security.cert.CertificateException cexc
         0: .line 708
            getstatic sun.security.ssl.Alert.CERTIFICATE_UNKNOWN:Lsun/security/ssl/Alert;
            astore 2 /* alert */
        start local 2 // sun.security.ssl.Alert alert
         1: .line 710
            aload 1 /* cexc */
            invokevirtual java.security.cert.CertificateException.getCause:()Ljava/lang/Throwable;
            astore 3 /* baseCause */
        start local 3 // java.lang.Throwable baseCause
         2: .line 711
            aload 3 /* baseCause */
            instanceof java.security.cert.CertPathValidatorException
            ifeq 27
         3: .line 713
            aload 3 /* baseCause */
            checkcast java.security.cert.CertPathValidatorException
         4: .line 712
            astore 4 /* cpve */
        start local 4 // java.security.cert.CertPathValidatorException cpve
         5: .line 714
            aload 4 /* cpve */
            invokevirtual java.security.cert.CertPathValidatorException.getReason:()Ljava/security/cert/CertPathValidatorException$Reason;
            astore 5 /* reason */
        start local 5 // java.security.cert.CertPathValidatorException$Reason reason
         6: .line 715
            aload 5 /* reason */
            getstatic java.security.cert.CertPathValidatorException$BasicReason.REVOKED:Ljava/security/cert/CertPathValidatorException$BasicReason;
            if_acmpne 12
         7: .line 716
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.staplingActive:Z
            ifeq 9
         8: .line 717
            getstatic sun.security.ssl.Alert.BAD_CERT_STATUS_RESPONSE:Lsun/security/ssl/Alert;
            goto 10
         9: .line 718
      StackMap locals: sun.security.ssl.ClientHandshakeContext java.security.cert.CertificateException sun.security.ssl.Alert java.lang.Throwable java.security.cert.CertPathValidatorException java.security.cert.CertPathValidatorException$Reason
      StackMap stack:
            getstatic sun.security.ssl.Alert.CERTIFICATE_REVOKED:Lsun/security/ssl/Alert;
        10: .line 716
      StackMap locals:
      StackMap stack: sun.security.ssl.Alert
            astore 2 /* alert */
        11: .line 719
            goto 27
        12: .line 720
      StackMap locals:
      StackMap stack:
            aload 5 /* reason */
            getstatic java.security.cert.CertPathValidatorException$BasicReason.UNDETERMINED_REVOCATION_STATUS:Ljava/security/cert/CertPathValidatorException$BasicReason;
            if_acmpne 18
        13: .line 721
            aload 0 /* chc */
            getfield sun.security.ssl.ClientHandshakeContext.staplingActive:Z
            ifeq 15
        14: .line 722
            getstatic sun.security.ssl.Alert.BAD_CERT_STATUS_RESPONSE:Lsun/security/ssl/Alert;
            goto 16
        15: .line 723
      StackMap locals:
      StackMap stack:
            getstatic sun.security.ssl.Alert.CERTIFICATE_UNKNOWN:Lsun/security/ssl/Alert;
        16: .line 721
      StackMap locals:
      StackMap stack: sun.security.ssl.Alert
            astore 2 /* alert */
        17: .line 724
            goto 27
      StackMap locals:
      StackMap stack:
        18: aload 5 /* reason */
            getstatic java.security.cert.CertPathValidatorException$BasicReason.ALGORITHM_CONSTRAINED:Ljava/security/cert/CertPathValidatorException$BasicReason;
            if_acmpne 21
        19: .line 725
            getstatic sun.security.ssl.Alert.UNSUPPORTED_CERTIFICATE:Lsun/security/ssl/Alert;
            astore 2 /* alert */
        20: .line 726
            goto 27
      StackMap locals:
      StackMap stack:
        21: aload 5 /* reason */
            getstatic java.security.cert.CertPathValidatorException$BasicReason.EXPIRED:Ljava/security/cert/CertPathValidatorException$BasicReason;
            if_acmpne 24
        22: .line 727
            getstatic sun.security.ssl.Alert.CERTIFICATE_EXPIRED:Lsun/security/ssl/Alert;
            astore 2 /* alert */
        23: .line 728
            goto 27
      StackMap locals:
      StackMap stack:
        24: aload 5 /* reason */
            getstatic java.security.cert.CertPathValidatorException$BasicReason.INVALID_SIGNATURE:Ljava/security/cert/CertPathValidatorException$BasicReason;
            if_acmpeq 26
        25: .line 729
            aload 5 /* reason */
            getstatic java.security.cert.CertPathValidatorException$BasicReason.NOT_YET_VALID:Ljava/security/cert/CertPathValidatorException$BasicReason;
            if_acmpne 27
        26: .line 730
      StackMap locals:
      StackMap stack:
            getstatic sun.security.ssl.Alert.BAD_CERTIFICATE:Lsun/security/ssl/Alert;
            astore 2 /* alert */
        end local 5 // java.security.cert.CertPathValidatorException$Reason reason
        end local 4 // java.security.cert.CertPathValidatorException cpve
        27: .line 734
      StackMap locals:
      StackMap stack:
            aload 2 /* alert */
            areturn
        end local 3 // java.lang.Throwable baseCause
        end local 2 // sun.security.ssl.Alert alert
        end local 1 // java.security.cert.CertificateException cexc
        end local 0 // sun.security.ssl.ClientHandshakeContext chc
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   28     0        chc  Lsun/security/ssl/ClientHandshakeContext;
            0   28     1       cexc  Ljava/security/cert/CertificateException;
            1   28     2      alert  Lsun/security/ssl/Alert;
            2   28     3  baseCause  Ljava/lang/Throwable;
            5   27     4       cpve  Ljava/security/cert/CertPathValidatorException;
            6   27     5     reason  Ljava/security/cert/CertPathValidatorException$Reason;
    MethodParameters:
      Name  Flags
      chc   
      cexc  
}
SourceFile: "CertificateMessage.java"
NestHost: sun.security.ssl.CertificateMessage
InnerClasses:
  public final BasicReason = java.security.cert.CertPathValidatorException$BasicReason of java.security.cert.CertPathValidatorException
  public abstract Reason = java.security.cert.CertPathValidatorException$Reason of java.security.cert.CertPathValidatorException
  final T12CertificateConsumer = sun.security.ssl.CertificateMessage$T12CertificateConsumer of sun.security.ssl.CertificateMessage
  final T12CertificateMessage = sun.security.ssl.CertificateMessage$T12CertificateMessage of sun.security.ssl.CertificateMessage
  final KeyExchange = sun.security.ssl.CipherSuite$KeyExchange of sun.security.ssl.CipherSuite
  final X509Credentials = sun.security.ssl.X509Authentication$X509Credentials of sun.security.ssl.X509Authentication