public class org.apache.cassandra.transport.Frame$Decoder extends io.netty.handler.codec.ByteToMessageDecoder
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.cassandra.transport.Frame$Decoder
  super_class: io.netty.handler.codec.ByteToMessageDecoder
{
  private static final int MAX_FRAME_LENGTH;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

  private long tooLongFrameLength;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private long bytesToDiscard;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

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

  private final org.apache.cassandra.transport.Connection$Factory factory;
    descriptor: Lorg/apache/cassandra/transport/Connection$Factory;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.apache.cassandra.transport.ProtocolVersionLimit versionCap;
    descriptor: Lorg/apache/cassandra/transport/ProtocolVersionLimit;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 137
            invokestatic org.apache.cassandra.config.DatabaseDescriptor.getNativeTransportMaxFrameSize:()I
            putstatic org.apache.cassandra.transport.Frame$Decoder.MAX_FRAME_LENGTH:I
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.apache.cassandra.transport.Connection$Factory, org.apache.cassandra.transport.ProtocolVersionLimit);
    descriptor: (Lorg/apache/cassandra/transport/Connection$Factory;Lorg/apache/cassandra/transport/ProtocolVersionLimit;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // org.apache.cassandra.transport.Frame$Decoder this
        start local 1 // org.apache.cassandra.transport.Connection$Factory factory
        start local 2 // org.apache.cassandra.transport.ProtocolVersionLimit versionCap
         0: .line 147
            aload 0 /* this */
            invokespecial io.netty.handler.codec.ByteToMessageDecoder.<init>:()V
         1: .line 149
            aload 0 /* this */
            aload 1 /* factory */
            putfield org.apache.cassandra.transport.Frame$Decoder.factory:Lorg/apache/cassandra/transport/Connection$Factory;
         2: .line 150
            aload 0 /* this */
            aload 2 /* versionCap */
            putfield org.apache.cassandra.transport.Frame$Decoder.versionCap:Lorg/apache/cassandra/transport/ProtocolVersionLimit;
         3: .line 151
            return
        end local 2 // org.apache.cassandra.transport.ProtocolVersionLimit versionCap
        end local 1 // org.apache.cassandra.transport.Connection$Factory factory
        end local 0 // org.apache.cassandra.transport.Frame$Decoder this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lorg/apache/cassandra/transport/Frame$Decoder;
            0    4     1     factory  Lorg/apache/cassandra/transport/Connection$Factory;
            0    4     2  versionCap  Lorg/apache/cassandra/transport/ProtocolVersionLimit;
    MethodParameters:
            Name  Flags
      factory     
      versionCap  

  protected void decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf, java.util.List<java.lang.Object>);
    descriptor: (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=11, locals=21, args_size=4
        start local 0 // org.apache.cassandra.transport.Frame$Decoder this
        start local 1 // io.netty.channel.ChannelHandlerContext ctx
        start local 2 // io.netty.buffer.ByteBuf buffer
        start local 3 // java.util.List results
         0: .line 157
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.discardingTooLongFrame:Z
            ifeq 5
         1: .line 159
            aload 0 /* this */
            aload 2 /* buffer */
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.bytesToDiscard:J
            invokestatic org.apache.cassandra.transport.Frame.discard:(Lio/netty/buffer/ByteBuf;J)J
            putfield org.apache.cassandra.transport.Frame$Decoder.bytesToDiscard:J
         2: .line 161
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.bytesToDiscard:J
            lconst_0
            lcmp
            ifgt 4
         3: .line 162
            aload 0 /* this */
            invokevirtual org.apache.cassandra.transport.Frame$Decoder.fail:()V
         4: .line 163
      StackMap locals:
      StackMap stack:
            return
         5: .line 166
      StackMap locals:
      StackMap stack:
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readableBytes:()I
            istore 4 /* readableBytes */
        start local 4 // int readableBytes
         6: .line 167
            iload 4 /* readableBytes */
            ifne 8
         7: .line 168
            return
         8: .line 170
      StackMap locals: int
      StackMap stack:
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:()I
            istore 5 /* idx */
        start local 5 // int idx
         9: .line 174
            aload 2 /* buffer */
            iload 5 /* idx */
            iinc 5 /* idx */ 1
            invokevirtual io.netty.buffer.ByteBuf.getByte:(I)B
            istore 6 /* firstByte */
        start local 6 // int firstByte
        10: .line 175
            iload 6 /* firstByte */
            invokestatic org.apache.cassandra.transport.Message$Direction.extractFromVersion:(I)Lorg/apache/cassandra/transport/Message$Direction;
            astore 7 /* direction */
        start local 7 // org.apache.cassandra.transport.Message$Direction direction
        11: .line 176
            iload 6 /* firstByte */
            bipush 127
            iand
            istore 8 /* versionNum */
        start local 8 // int versionNum
        12: .line 177
            iload 8 /* versionNum */
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.versionCap:Lorg/apache/cassandra/transport/ProtocolVersionLimit;
            invokestatic org.apache.cassandra.transport.ProtocolVersion.decode:(ILorg/apache/cassandra/transport/ProtocolVersionLimit;)Lorg/apache/cassandra/transport/ProtocolVersion;
            astore 9 /* version */
        start local 9 // org.apache.cassandra.transport.ProtocolVersion version
        13: .line 180
            iload 4 /* readableBytes */
            bipush 9
            if_icmpge 15
        14: .line 181
            return
        15: .line 183
      StackMap locals: org.apache.cassandra.transport.Frame$Decoder io.netty.channel.ChannelHandlerContext io.netty.buffer.ByteBuf java.util.List int int int org.apache.cassandra.transport.Message$Direction int org.apache.cassandra.transport.ProtocolVersion
      StackMap stack:
            aload 2 /* buffer */
            iload 5 /* idx */
            iinc 5 /* idx */ 1
            invokevirtual io.netty.buffer.ByteBuf.getByte:(I)B
            istore 10 /* flags */
        start local 10 // int flags
        16: .line 184
            iload 10 /* flags */
            invokestatic org.apache.cassandra.transport.Frame$Header$Flag.deserialize:(I)Ljava/util/EnumSet;
            astore 11 /* decodedFlags */
        start local 11 // java.util.EnumSet decodedFlags
        17: .line 186
            aload 9 /* version */
            invokevirtual org.apache.cassandra.transport.ProtocolVersion.isBeta:()Z
            ifeq 21
            aload 11 /* decodedFlags */
            getstatic org.apache.cassandra.transport.Frame$Header$Flag.USE_BETA:Lorg/apache/cassandra/transport/Frame$Header$Flag;
            invokevirtual java.util.EnumSet.contains:(Ljava/lang/Object;)Z
            ifne 21
        18: .line 187
            new org.apache.cassandra.transport.ProtocolException
            dup
            ldc "Beta version of the protocol used (%s), but USE_BETA flag is unset"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 9 /* version */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        19: .line 188
            aload 9 /* version */
        20: .line 187
            invokespecial org.apache.cassandra.transport.ProtocolException.<init>:(Ljava/lang/String;Lorg/apache/cassandra/transport/ProtocolVersion;)V
            athrow
        21: .line 190
      StackMap locals: int java.util.EnumSet
      StackMap stack:
            aload 2 /* buffer */
            iload 5 /* idx */
            invokevirtual io.netty.buffer.ByteBuf.getShort:(I)S
            istore 12 /* streamId */
        start local 12 // int streamId
        22: .line 191
            iinc 5 /* idx */ 2
        23: .line 197
            aload 2 /* buffer */
            iload 5 /* idx */
            iinc 5 /* idx */ 1
            invokevirtual io.netty.buffer.ByteBuf.getByte:(I)B
            aload 7 /* direction */
            invokestatic org.apache.cassandra.transport.Message$Type.fromOpcode:(ILorg/apache/cassandra/transport/Message$Direction;)Lorg/apache/cassandra/transport/Message$Type;
            astore 13 /* type */
        start local 13 // org.apache.cassandra.transport.Message$Type type
        24: .line 198
            goto 27
        end local 13 // org.apache.cassandra.transport.Message$Type type
        25: .line 199
      StackMap locals: org.apache.cassandra.transport.Frame$Decoder io.netty.channel.ChannelHandlerContext io.netty.buffer.ByteBuf java.util.List int int int org.apache.cassandra.transport.Message$Direction int org.apache.cassandra.transport.ProtocolVersion int java.util.EnumSet int
      StackMap stack: org.apache.cassandra.transport.ProtocolException
            astore 14 /* e */
        start local 14 // org.apache.cassandra.transport.ProtocolException e
        26: .line 201
            aload 14 /* e */
            iload 12 /* streamId */
            invokestatic org.apache.cassandra.transport.messages.ErrorMessage.wrap:(Ljava/lang/Throwable;I)Ljava/lang/RuntimeException;
            athrow
        end local 14 // org.apache.cassandra.transport.ProtocolException e
        start local 13 // org.apache.cassandra.transport.Message$Type type
        27: .line 204
      StackMap locals: org.apache.cassandra.transport.Message$Type
      StackMap stack:
            aload 2 /* buffer */
            iload 5 /* idx */
            invokevirtual io.netty.buffer.ByteBuf.getUnsignedInt:(I)J
            lstore 14 /* bodyLength */
        start local 14 // long bodyLength
        28: .line 205
            iinc 5 /* idx */ 4
        29: .line 207
            lload 14 /* bodyLength */
            ldc 9
            ladd
            lstore 16 /* frameLength */
        start local 16 // long frameLength
        30: .line 208
            lload 16 /* frameLength */
            getstatic org.apache.cassandra.transport.Frame$Decoder.MAX_FRAME_LENGTH:I
            i2l
            lcmp
            ifle 38
        31: .line 211
            aload 0 /* this */
            iconst_1
            putfield org.apache.cassandra.transport.Frame$Decoder.discardingTooLongFrame:Z
        32: .line 212
            aload 0 /* this */
            iload 12 /* streamId */
            putfield org.apache.cassandra.transport.Frame$Decoder.tooLongStreamId:I
        33: .line 213
            aload 0 /* this */
            lload 16 /* frameLength */
            putfield org.apache.cassandra.transport.Frame$Decoder.tooLongFrameLength:J
        34: .line 214
            aload 0 /* this */
            aload 2 /* buffer */
            lload 16 /* frameLength */
            invokestatic org.apache.cassandra.transport.Frame.discard:(Lio/netty/buffer/ByteBuf;J)J
            putfield org.apache.cassandra.transport.Frame$Decoder.bytesToDiscard:J
        35: .line 215
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.bytesToDiscard:J
            lconst_0
            lcmp
            ifgt 37
        36: .line 216
            aload 0 /* this */
            invokevirtual org.apache.cassandra.transport.Frame$Decoder.fail:()V
        37: .line 217
      StackMap locals: long long
      StackMap stack:
            return
        38: .line 220
      StackMap locals:
      StackMap stack:
            aload 2 /* buffer */
            invokevirtual io.netty.buffer.ByteBuf.readableBytes:()I
            i2l
            lload 16 /* frameLength */
            lcmp
            ifge 40
        39: .line 221
            return
        40: .line 224
      StackMap locals:
      StackMap stack:
            aload 2 /* buffer */
            iload 5 /* idx */
            lload 14 /* bodyLength */
            l2i
            invokevirtual io.netty.buffer.ByteBuf.slice:(II)Lio/netty/buffer/ByteBuf;
            astore 18 /* body */
        start local 18 // io.netty.buffer.ByteBuf body
        41: .line 225
            aload 18 /* body */
            invokevirtual io.netty.buffer.ByteBuf.retain:()Lio/netty/buffer/ByteBuf;
            pop
        42: .line 227
            iload 5 /* idx */
            i2l
            lload 14 /* bodyLength */
            ladd
            l2i
            istore 5 /* idx */
        43: .line 228
            aload 2 /* buffer */
            iload 5 /* idx */
            invokevirtual io.netty.buffer.ByteBuf.readerIndex:(I)Lio/netty/buffer/ByteBuf;
            pop
        44: .line 230
            aload 1 /* ctx */
            invokeinterface io.netty.channel.ChannelHandlerContext.channel:()Lio/netty/channel/Channel;
            getstatic org.apache.cassandra.transport.Connection.attributeKey:Lio/netty/util/AttributeKey;
            invokeinterface io.netty.channel.Channel.attr:(Lio/netty/util/AttributeKey;)Lio/netty/util/Attribute;
            astore 19 /* attrConn */
        start local 19 // io.netty.util.Attribute attrConn
        45: .line 231
            aload 19 /* attrConn */
            invokeinterface io.netty.util.Attribute.get:()Ljava/lang/Object;
            checkcast org.apache.cassandra.transport.Connection
            astore 20 /* connection */
        start local 20 // org.apache.cassandra.transport.Connection connection
        46: .line 232
            aload 20 /* connection */
            ifnonnull 50
        47: .line 235
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.factory:Lorg/apache/cassandra/transport/Connection$Factory;
            aload 1 /* ctx */
            invokeinterface io.netty.channel.ChannelHandlerContext.channel:()Lio/netty/channel/Channel;
            aload 9 /* version */
            invokeinterface org.apache.cassandra.transport.Connection$Factory.newConnection:(Lio/netty/channel/Channel;Lorg/apache/cassandra/transport/ProtocolVersion;)Lorg/apache/cassandra/transport/Connection;
            astore 20 /* connection */
        48: .line 236
            aload 19 /* attrConn */
            aload 20 /* connection */
            invokeinterface io.netty.util.Attribute.set:(Ljava/lang/Object;)V
        49: .line 237
            goto 57
        50: .line 238
      StackMap locals: io.netty.buffer.ByteBuf io.netty.util.Attribute org.apache.cassandra.transport.Connection
      StackMap stack:
            aload 20 /* connection */
            invokevirtual org.apache.cassandra.transport.Connection.getVersion:()Lorg/apache/cassandra/transport/ProtocolVersion;
            aload 9 /* version */
            if_acmpeq 57
        51: .line 241
            new org.apache.cassandra.transport.ProtocolException
            dup
        52: .line 242
            ldc "Invalid message version. Got %s but previous messages on this connection had version %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
        53: .line 243
            aload 9 /* version */
            aastore
            dup
            iconst_1
            aload 20 /* connection */
            invokevirtual org.apache.cassandra.transport.Connection.getVersion:()Lorg/apache/cassandra/transport/ProtocolVersion;
            aastore
        54: .line 241
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.apache.cassandra.transport.ProtocolException.<init>:(Ljava/lang/String;)V
        55: .line 244
            iload 12 /* streamId */
        56: .line 240
            invokestatic org.apache.cassandra.transport.messages.ErrorMessage.wrap:(Ljava/lang/Throwable;I)Ljava/lang/RuntimeException;
            athrow
        57: .line 247
      StackMap locals:
      StackMap stack:
            aload 3 /* results */
            new org.apache.cassandra.transport.Frame
            dup
            new org.apache.cassandra.transport.Frame$Header
            dup
            aload 9 /* version */
            aload 11 /* decodedFlags */
            iload 12 /* streamId */
            aload 13 /* type */
            lload 14 /* bodyLength */
            invokespecial org.apache.cassandra.transport.Frame$Header.<init>:(Lorg/apache/cassandra/transport/ProtocolVersion;Ljava/util/EnumSet;ILorg/apache/cassandra/transport/Message$Type;J)V
            aload 18 /* body */
            invokespecial org.apache.cassandra.transport.Frame.<init>:(Lorg/apache/cassandra/transport/Frame$Header;Lio/netty/buffer/ByteBuf;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        58: .line 248
            return
        end local 20 // org.apache.cassandra.transport.Connection connection
        end local 19 // io.netty.util.Attribute attrConn
        end local 18 // io.netty.buffer.ByteBuf body
        end local 16 // long frameLength
        end local 14 // long bodyLength
        end local 13 // org.apache.cassandra.transport.Message$Type type
        end local 12 // int streamId
        end local 11 // java.util.EnumSet decodedFlags
        end local 10 // int flags
        end local 9 // org.apache.cassandra.transport.ProtocolVersion version
        end local 8 // int versionNum
        end local 7 // org.apache.cassandra.transport.Message$Direction direction
        end local 6 // int firstByte
        end local 5 // int idx
        end local 4 // int readableBytes
        end local 3 // java.util.List results
        end local 2 // io.netty.buffer.ByteBuf buffer
        end local 1 // io.netty.channel.ChannelHandlerContext ctx
        end local 0 // org.apache.cassandra.transport.Frame$Decoder this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   59     0           this  Lorg/apache/cassandra/transport/Frame$Decoder;
            0   59     1            ctx  Lio/netty/channel/ChannelHandlerContext;
            0   59     2         buffer  Lio/netty/buffer/ByteBuf;
            0   59     3        results  Ljava/util/List<Ljava/lang/Object;>;
            6   59     4  readableBytes  I
            9   59     5            idx  I
           10   59     6      firstByte  I
           11   59     7      direction  Lorg/apache/cassandra/transport/Message$Direction;
           12   59     8     versionNum  I
           13   59     9        version  Lorg/apache/cassandra/transport/ProtocolVersion;
           16   59    10          flags  I
           17   59    11   decodedFlags  Ljava/util/EnumSet<Lorg/apache/cassandra/transport/Frame$Header$Flag;>;
           22   59    12       streamId  I
           24   25    13           type  Lorg/apache/cassandra/transport/Message$Type;
           27   59    13           type  Lorg/apache/cassandra/transport/Message$Type;
           26   27    14              e  Lorg/apache/cassandra/transport/ProtocolException;
           28   59    14     bodyLength  J
           30   59    16    frameLength  J
           41   59    18           body  Lio/netty/buffer/ByteBuf;
           45   59    19       attrConn  Lio/netty/util/Attribute<Lorg/apache/cassandra/transport/Connection;>;
           46   59    20     connection  Lorg/apache/cassandra/transport/Connection;
      Exception table:
        from    to  target  type
          23    24      25  Class org.apache.cassandra.transport.ProtocolException
    Exceptions:
      throws java.lang.Exception
    Signature: (Lio/netty/channel/ChannelHandlerContext;Lio/netty/buffer/ByteBuf;Ljava/util/List<Ljava/lang/Object;>;)V
    MethodParameters:
         Name  Flags
      ctx      
      buffer   
      results  

  private void fail();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=1
        start local 0 // org.apache.cassandra.transport.Frame$Decoder this
         0: .line 253
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.tooLongFrameLength:J
            lstore 1 /* tooLongFrameLength */
        start local 1 // long tooLongFrameLength
         1: .line 254
            aload 0 /* this */
            lconst_0
            putfield org.apache.cassandra.transport.Frame$Decoder.tooLongFrameLength:J
         2: .line 255
            aload 0 /* this */
            iconst_0
            putfield org.apache.cassandra.transport.Frame$Decoder.discardingTooLongFrame:Z
         3: .line 256
            ldc "Request is too big: length %d exceeds maximum allowed length %d."
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            lload 1 /* tooLongFrameLength */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            aastore
            dup
            iconst_1
            getstatic org.apache.cassandra.transport.Frame$Decoder.MAX_FRAME_LENGTH:I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            astore 3 /* msg */
        start local 3 // java.lang.String msg
         4: .line 257
            new org.apache.cassandra.exceptions.InvalidRequestException
            dup
            aload 3 /* msg */
            invokespecial org.apache.cassandra.exceptions.InvalidRequestException.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.apache.cassandra.transport.Frame$Decoder.tooLongStreamId:I
            invokestatic org.apache.cassandra.transport.messages.ErrorMessage.wrap:(Ljava/lang/Throwable;I)Ljava/lang/RuntimeException;
            athrow
        end local 3 // java.lang.String msg
        end local 1 // long tooLongFrameLength
        end local 0 // org.apache.cassandra.transport.Frame$Decoder this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    5     0                this  Lorg/apache/cassandra/transport/Frame$Decoder;
            1    5     1  tooLongFrameLength  J
            4    5     3                 msg  Ljava/lang/String;
}
SourceFile: "Frame.java"
NestHost: org.apache.cassandra.transport.Frame
InnerClasses:
  public abstract Factory = org.apache.cassandra.transport.Connection$Factory of org.apache.cassandra.transport.Connection
  public Decoder = org.apache.cassandra.transport.Frame$Decoder of org.apache.cassandra.transport.Frame
  public Header = org.apache.cassandra.transport.Frame$Header of org.apache.cassandra.transport.Frame
  public final Flag = org.apache.cassandra.transport.Frame$Header$Flag of org.apache.cassandra.transport.Frame$Header
  public final Direction = org.apache.cassandra.transport.Message$Direction of org.apache.cassandra.transport.Message
  public final Type = org.apache.cassandra.transport.Message$Type of org.apache.cassandra.transport.Message