public class org.glassfish.grizzly.http2.Http2SessionOutputSink
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.glassfish.grizzly.http2.Http2SessionOutputSink
  super_class: java.lang.Object
{
  protected final org.glassfish.grizzly.http2.Http2Session http2Session;
    descriptor: Lorg/glassfish/grizzly/http2/Http2Session;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  private static final java.util.logging.Logger LOGGER;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.logging.Level LOGGER_LEVEL;
    descriptor: Ljava/util/logging/Level;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

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

  private final org.glassfish.grizzly.asyncqueue.TaskQueue<org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord> outputQueue;
    descriptor: Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/glassfish/grizzly/asyncqueue/TaskQueue<Lorg/glassfish/grizzly/http2/Http2SessionOutputSink$OutputQueueRecord;>;

  private final java.util.concurrent.atomic.AtomicInteger availConnectionWindowSize;
    descriptor: Ljava/util/concurrent/atomic/AtomicInteger;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.List<org.glassfish.grizzly.http2.frames.Http2Frame> tmpFramesList;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Lorg/glassfish/grizzly/http2/frames/Http2Frame;>;

  private final java.util.concurrent.atomic.AtomicBoolean writerLock;
    descriptor: Ljava/util/concurrent/atomic/AtomicBoolean;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 46
            ldc Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.$assertionsDisabled:Z
         3: .line 48
            ldc Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            invokestatic org.glassfish.grizzly.Grizzly.logger:(Ljava/lang/Class;)Ljava/util/logging/Logger;
            putstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER:Ljava/util/logging/Logger;
         4: .line 49
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            putstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER_LEVEL:Ljava/util/logging/Level;
         5: .line 52
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.glassfish.grizzly.http2.Http2Session);
    descriptor: (Lorg/glassfish/grizzly/http2/Http2Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
        start local 1 // org.glassfish.grizzly.http2.Http2Session session
         0: .line 68
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 55
            aload 0 /* this */
         2: .line 56
            new org.glassfish.grizzly.http2.Http2SessionOutputSink$1
            dup
            aload 0 /* this */
            invokespecial org.glassfish.grizzly.http2.Http2SessionOutputSink$1.<init>:(Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;)V
            invokestatic org.glassfish.grizzly.asyncqueue.TaskQueue.createTaskQueue:(Lorg/glassfish/grizzly/asyncqueue/TaskQueue$MutableMaxQueueSize;)Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            putfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
         3: .line 65
            aload 0 /* this */
            new java.util.LinkedList
            dup
            invokespecial java.util.LinkedList.<init>:()V
            putfield org.glassfish.grizzly.http2.Http2SessionOutputSink.tmpFramesList:Ljava/util/List;
         4: .line 66
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicBoolean
            dup
            invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:()V
            putfield org.glassfish.grizzly.http2.Http2SessionOutputSink.writerLock:Ljava/util/concurrent/atomic/AtomicBoolean;
         5: .line 69
            aload 0 /* this */
            aload 1 /* session */
            putfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
         6: .line 70
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicInteger
            dup
         7: .line 71
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getDefaultConnectionWindowSize:()I
            invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:(I)V
         8: .line 70
            putfield org.glassfish.grizzly.http2.Http2SessionOutputSink.availConnectionWindowSize:Ljava/util/concurrent/atomic/AtomicInteger;
         9: .line 72
            return
        end local 1 // org.glassfish.grizzly.http2.Http2Session session
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   10     0     this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            0   10     1  session  Lorg/glassfish/grizzly/http2/Http2Session;
    MethodParameters:
         Name  Flags
      session  

  protected org.glassfish.grizzly.http2.Http2FrameCodec frameCodec();
    descriptor: ()Lorg/glassfish/grizzly/http2/Http2FrameCodec;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
         0: .line 75
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            getfield org.glassfish.grizzly.http2.Http2Session.handlerFilter:Lorg/glassfish/grizzly/http2/Http2BaseFilter;
            getfield org.glassfish.grizzly.http2.Http2BaseFilter.frameCodec:Lorg/glassfish/grizzly/http2/Http2FrameCodec;
            areturn
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;

  protected void writeDownStream(org.glassfish.grizzly.http2.frames.Http2Frame);
    descriptor: (Lorg/glassfish/grizzly/http2/frames/Http2Frame;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
        start local 1 // org.glassfish.grizzly.http2.frames.Http2Frame frame
         0: .line 80
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getHttp2SessionChain:()Lorg/glassfish/grizzly/filterchain/FilterChain;
         1: .line 81
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getConnection:()Lorg/glassfish/grizzly/Connection;
            aconst_null
         2: .line 82
            aload 0 /* this */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.frameCodec:()Lorg/glassfish/grizzly/http2/Http2FrameCodec;
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            aload 1 /* frame */
            invokevirtual org.glassfish.grizzly.http2.Http2FrameCodec.serializeAndRecycle:(Lorg/glassfish/grizzly/http2/Http2Session;Lorg/glassfish/grizzly/http2/frames/Http2Frame;)Lorg/glassfish/grizzly/Buffer;
         3: .line 83
            aconst_null
            aconst_null
         4: .line 80
            invokeinterface org.glassfish.grizzly.filterchain.FilterChain.write:(Lorg/glassfish/grizzly/Connection;Ljava/lang/Object;Ljava/lang/Object;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;)V
         5: .line 84
            return
        end local 1 // org.glassfish.grizzly.http2.frames.Http2Frame frame
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0   this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            0    6     1  frame  Lorg/glassfish/grizzly/http2/frames/Http2Frame;
    MethodParameters:
       Name  Flags
      frame  final

  protected void writeDownStream(java.util.List<org.glassfish.grizzly.http2.frames.Http2Frame>);
    descriptor: (Ljava/util/List;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
        start local 1 // java.util.List frames
         0: .line 88
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getHttp2SessionChain:()Lorg/glassfish/grizzly/filterchain/FilterChain;
         1: .line 89
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getConnection:()Lorg/glassfish/grizzly/Connection;
            aconst_null
         2: .line 90
            aload 0 /* this */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.frameCodec:()Lorg/glassfish/grizzly/http2/Http2FrameCodec;
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            aload 1 /* frames */
            invokevirtual org.glassfish.grizzly.http2.Http2FrameCodec.serializeAndRecycle:(Lorg/glassfish/grizzly/http2/Http2Session;Ljava/util/List;)Lorg/glassfish/grizzly/Buffer;
         3: .line 91
            aconst_null
            aconst_null
         4: .line 88
            invokeinterface org.glassfish.grizzly.filterchain.FilterChain.write:(Lorg/glassfish/grizzly/Connection;Ljava/lang/Object;Ljava/lang/Object;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;)V
         5: .line 92
            return
        end local 1 // java.util.List frames
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            0    6     1  frames  Ljava/util/List<Lorg/glassfish/grizzly/http2/frames/Http2Frame;>;
    Signature: (Ljava/util/List<Lorg/glassfish/grizzly/http2/frames/Http2Frame;>;)V
    MethodParameters:
        Name  Flags
      frames  final

  protected <K> void writeDownStream(K, org.glassfish.grizzly.CompletionHandler<org.glassfish.grizzly.WriteResult>, org.glassfish.grizzly.asyncqueue.MessageCloner<org.glassfish.grizzly.Buffer>);
    descriptor: (Ljava/lang/Object;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=5, args_size=4
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
        start local 1 // java.lang.Object anyMessage
        start local 2 // org.glassfish.grizzly.CompletionHandler completionHandler
        start local 3 // org.glassfish.grizzly.asyncqueue.MessageCloner messageCloner
         0: .line 101
            aload 1 /* anyMessage */
            instanceof java.util.List
            ifeq 5
         1: .line 102
            aload 0 /* this */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.frameCodec:()Lorg/glassfish/grizzly/http2/Http2FrameCodec;
         2: .line 103
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            aload 1 /* anyMessage */
            checkcast java.util.List
         3: .line 102
            invokevirtual org.glassfish.grizzly.http2.Http2FrameCodec.serializeAndRecycle:(Lorg/glassfish/grizzly/http2/Http2Session;Ljava/util/List;)Lorg/glassfish/grizzly/Buffer;
            astore 4 /* msg */
        start local 4 // java.lang.Object msg
         4: .line 104
            goto 11
        end local 4 // java.lang.Object msg
      StackMap locals:
      StackMap stack:
         5: aload 1 /* anyMessage */
            instanceof org.glassfish.grizzly.http2.frames.Http2Frame
            ifeq 10
         6: .line 105
            aload 0 /* this */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.frameCodec:()Lorg/glassfish/grizzly/http2/Http2FrameCodec;
         7: .line 106
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            aload 1 /* anyMessage */
            checkcast org.glassfish.grizzly.http2.frames.Http2Frame
         8: .line 105
            invokevirtual org.glassfish.grizzly.http2.Http2FrameCodec.serializeAndRecycle:(Lorg/glassfish/grizzly/http2/Http2Session;Lorg/glassfish/grizzly/http2/frames/Http2Frame;)Lorg/glassfish/grizzly/Buffer;
            astore 4 /* msg */
        start local 4 // java.lang.Object msg
         9: .line 107
            goto 11
        end local 4 // java.lang.Object msg
        10: .line 108
      StackMap locals:
      StackMap stack:
            aload 1 /* anyMessage */
            astore 4 /* msg */
        start local 4 // java.lang.Object msg
        11: .line 111
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getHttp2SessionChain:()Lorg/glassfish/grizzly/filterchain/FilterChain;
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getConnection:()Lorg/glassfish/grizzly/Connection;
        12: .line 112
            aconst_null
            aload 4 /* msg */
            aload 2 /* completionHandler */
            aload 3 /* messageCloner */
        13: .line 111
            invokeinterface org.glassfish.grizzly.filterchain.FilterChain.write:(Lorg/glassfish/grizzly/Connection;Ljava/lang/Object;Ljava/lang/Object;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;)V
        14: .line 113
            return
        end local 4 // java.lang.Object msg
        end local 3 // org.glassfish.grizzly.asyncqueue.MessageCloner messageCloner
        end local 2 // org.glassfish.grizzly.CompletionHandler completionHandler
        end local 1 // java.lang.Object anyMessage
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   15     0               this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            0   15     1         anyMessage  TK;
            0   15     2  completionHandler  Lorg/glassfish/grizzly/CompletionHandler<Lorg/glassfish/grizzly/WriteResult;>;
            0   15     3      messageCloner  Lorg/glassfish/grizzly/asyncqueue/MessageCloner<Lorg/glassfish/grizzly/Buffer;>;
            4    5     4                msg  Ljava/lang/Object;
            9   10     4                msg  Ljava/lang/Object;
           11   15     4                msg  Ljava/lang/Object;
    Signature: <K:Ljava/lang/Object;>(TK;Lorg/glassfish/grizzly/CompletionHandler<Lorg/glassfish/grizzly/WriteResult;>;Lorg/glassfish/grizzly/asyncqueue/MessageCloner<Lorg/glassfish/grizzly/Buffer;>;)V
    MethodParameters:
                   Name  Flags
      anyMessage         final
      completionHandler  final
      messageCloner      final

  protected int getAvailablePeerConnectionWindowSize();
    descriptor: ()I
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
         0: .line 116
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.availConnectionWindowSize:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ireturn
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;

  protected boolean canWrite();
    descriptor: ()Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
         0: .line 120
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.size:()I
            ldc 65536
            if_icmpge 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;

  protected void notifyCanWrite(org.glassfish.grizzly.WriteHandler);
    descriptor: (Lorg/glassfish/grizzly/WriteHandler;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
        start local 1 // org.glassfish.grizzly.WriteHandler writeHandler
         0: .line 124
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            aload 1 /* writeHandler */
            ldc 65536
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.notifyWritePossible:(Lorg/glassfish/grizzly/WriteHandler;I)V
         1: .line 125
            return
        end local 1 // org.glassfish.grizzly.WriteHandler writeHandler
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            0    2     1  writeHandler  Lorg/glassfish/grizzly/WriteHandler;
    MethodParameters:
              Name  Flags
      writeHandler  final

  protected void onPeerWindowUpdate(int);
    descriptor: (I)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=4, args_size=2
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
        start local 1 // int delta
         0: .line 128
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.availConnectionWindowSize:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            istore 2 /* currentWindow */
        start local 2 // int currentWindow
         1: .line 129
            iload 1 /* delta */
            ifle 3
            iload 2 /* currentWindow */
            ifle 3
            iload 2 /* currentWindow */
            iload 1 /* delta */
            iadd
            ifge 3
         2: .line 130
            new org.glassfish.grizzly.http2.Http2SessionException
            dup
            getstatic org.glassfish.grizzly.http2.frames.ErrorCode.FLOW_CONTROL_ERROR:Lorg/glassfish/grizzly/http2/frames/ErrorCode;
            ldc "Session flow-control window overflow."
            invokespecial org.glassfish.grizzly.http2.Http2SessionException.<init>:(Lorg/glassfish/grizzly/http2/frames/ErrorCode;Ljava/lang/String;)V
            athrow
         3: .line 132
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.availConnectionWindowSize:Ljava/util/concurrent/atomic/AtomicInteger;
            iload 1 /* delta */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.addAndGet:(I)I
            istore 3 /* newWindowSize */
        start local 3 // int newWindowSize
         4: .line 133
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER:Ljava/util/logging/Logger;
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER_LEVEL:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 8
         5: .line 134
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER:Ljava/util/logging/Logger;
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER_LEVEL:Ljava/util/logging/Level;
            ldc "Http2Session. Expand connection window size by {0} bytes. Current connection window size is: {1}"
         6: .line 135
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            iload 1 /* delta */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            iload 3 /* newWindowSize */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
         7: .line 134
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
         8: .line 138
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.flushOutputQueue:()V
         9: .line 139
            return
        end local 3 // int newWindowSize
        end local 2 // int currentWindow
        end local 1 // int delta
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   10     0           this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            0   10     1          delta  I
            1   10     2  currentWindow  I
            4   10     3  newWindowSize  I
    Exceptions:
      throws org.glassfish.grizzly.http2.Http2SessionException
    MethodParameters:
       Name  Flags
      delta  final

  protected void writeDataDownStream(org.glassfish.grizzly.http2.Http2Stream, java.util.List<org.glassfish.grizzly.http2.frames.Http2Frame>, org.glassfish.grizzly.Buffer, org.glassfish.grizzly.CompletionHandler<org.glassfish.grizzly.WriteResult>, org.glassfish.grizzly.asyncqueue.MessageCloner<org.glassfish.grizzly.Buffer>, );
    descriptor: (Lorg/glassfish/grizzly/http2/Http2Stream;Ljava/util/List;Lorg/glassfish/grizzly/Buffer;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;Z)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=9, args_size=7
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
        start local 1 // org.glassfish.grizzly.http2.Http2Stream stream
        start local 2 // java.util.List headerFrames
        start local 3 // org.glassfish.grizzly.Buffer data
        start local 4 // org.glassfish.grizzly.CompletionHandler completionHandler
        start local 5 // org.glassfish.grizzly.asyncqueue.MessageCloner messageCloner
        start local 6 // boolean isLast
         0: .line 148
            aload 3 /* data */
            ifnull 2
         1: .line 149
            aload 3 /* data */
            invokeinterface org.glassfish.grizzly.Buffer.hasRemaining:()Z
            ifne 17
            aload 1 /* stream */
            invokevirtual org.glassfish.grizzly.http2.Http2Stream.getUnflushedWritesCount:()I
            iconst_1
            if_icmpne 17
         2: .line 152
      StackMap locals:
      StackMap stack:
            aload 3 /* data */
            ifnonnull 5
         3: .line 153
            aload 0 /* this */
            aload 2 /* headerFrames */
            aload 4 /* completionHandler */
            aload 5 /* messageCloner */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.writeDownStream:(Ljava/lang/Object;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;)V
         4: .line 154
            return
         5: .line 157
      StackMap locals:
      StackMap stack:
            invokestatic org.glassfish.grizzly.http2.frames.DataFrame.builder:()Lorg/glassfish/grizzly/http2/frames/DataFrame$DataFrameBuilder;
         6: .line 158
            aload 1 /* stream */
            invokevirtual org.glassfish.grizzly.http2.Http2Stream.getId:()I
            invokevirtual org.glassfish.grizzly.http2.frames.DataFrame$DataFrameBuilder.streamId:(I)Lorg/glassfish/grizzly/http2/frames/Http2Frame$Http2FrameBuilder;
            checkcast org.glassfish.grizzly.http2.frames.DataFrame$DataFrameBuilder
         7: .line 159
            aload 3 /* data */
            invokevirtual org.glassfish.grizzly.http2.frames.DataFrame$DataFrameBuilder.data:(Lorg/glassfish/grizzly/Buffer;)Lorg/glassfish/grizzly/http2/frames/DataFrame$DataFrameBuilder;
            iload 6 /* isLast */
            invokevirtual org.glassfish.grizzly.http2.frames.DataFrame$DataFrameBuilder.endStream:(Z)Lorg/glassfish/grizzly/http2/frames/DataFrame$DataFrameBuilder;
         8: .line 160
            invokevirtual org.glassfish.grizzly.http2.frames.DataFrame$DataFrameBuilder.build:()Lorg/glassfish/grizzly/http2/frames/DataFrame;
         9: .line 157
            astore 7 /* dataFrame */
        start local 7 // org.glassfish.grizzly.http2.frames.DataFrame dataFrame
        10: .line 163
            aload 2 /* headerFrames */
            ifnull 14
            aload 2 /* headerFrames */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 14
        11: .line 164
            aload 2 /* headerFrames */
            aload 7 /* dataFrame */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        12: .line 165
            aload 2 /* headerFrames */
            astore 8 /* msg */
        start local 8 // java.lang.Object msg
        13: .line 166
            goto 15
        end local 8 // java.lang.Object msg
        14: .line 167
      StackMap locals: org.glassfish.grizzly.http2.frames.DataFrame
      StackMap stack:
            aload 7 /* dataFrame */
            astore 8 /* msg */
        start local 8 // java.lang.Object msg
        15: .line 170
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 8 /* msg */
            aload 4 /* completionHandler */
            aload 5 /* messageCloner */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.writeDownStream:(Ljava/lang/Object;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;)V
        16: .line 172
            return
        end local 8 // java.lang.Object msg
        end local 7 // org.glassfish.grizzly.http2.frames.DataFrame dataFrame
        17: .line 173
      StackMap locals:
      StackMap stack:
            aload 2 /* headerFrames */
            ifnull 19
            aload 2 /* headerFrames */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 19
        18: .line 176
            aload 0 /* this */
            aload 2 /* headerFrames */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.writeDownStream:(Ljava/util/List;)V
        19: .line 179
      StackMap locals:
      StackMap stack:
            aload 3 /* data */
            invokeinterface org.glassfish.grizzly.Buffer.remaining:()I
            istore 7 /* dataSize */
        start local 7 // int dataSize
        20: .line 181
            aload 5 /* messageCloner */
            ifnull 22
        21: .line 182
            aload 5 /* messageCloner */
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.http2Session:Lorg/glassfish/grizzly/http2/Http2Session;
            invokevirtual org.glassfish.grizzly.http2.Http2Session.getConnection:()Lorg/glassfish/grizzly/Connection;
            aload 3 /* data */
            invokeinterface org.glassfish.grizzly.asyncqueue.MessageCloner.clone:(Lorg/glassfish/grizzly/Connection;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.glassfish.grizzly.Buffer
            astore 3 /* data */
        22: .line 185
      StackMap locals: int
      StackMap stack:
            new org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord
            dup
        23: .line 186
            aload 1 /* stream */
            invokevirtual org.glassfish.grizzly.http2.Http2Stream.getId:()I
            aload 3 /* data */
        24: .line 187
            aload 4 /* completionHandler */
            iload 6 /* isLast */
        25: .line 185
            invokespecial org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord.<init>:(ILorg/glassfish/grizzly/Buffer;Lorg/glassfish/grizzly/CompletionHandler;Z)V
            astore 8 /* record */
        start local 8 // org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord record
        26: .line 189
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            aload 8 /* record */
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.offer:(Lorg/glassfish/grizzly/asyncqueue/AsyncQueueRecord;)V
        27: .line 190
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            aload 8 /* record */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord.isZeroSizeData:()Z
            ifeq 28
            iconst_1
            goto 29
      StackMap locals: org.glassfish.grizzly.http2.Http2SessionOutputSink org.glassfish.grizzly.http2.Http2Stream java.util.List org.glassfish.grizzly.Buffer org.glassfish.grizzly.CompletionHandler org.glassfish.grizzly.asyncqueue.MessageCloner int int org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord
      StackMap stack: org.glassfish.grizzly.asyncqueue.TaskQueue
        28: iload 7 /* dataSize */
      StackMap locals: org.glassfish.grizzly.http2.Http2SessionOutputSink org.glassfish.grizzly.http2.Http2Stream java.util.List org.glassfish.grizzly.Buffer org.glassfish.grizzly.CompletionHandler org.glassfish.grizzly.asyncqueue.MessageCloner int int org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord
      StackMap stack: org.glassfish.grizzly.asyncqueue.TaskQueue int
        29: invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.reserveSpace:(I)I
            pop
        30: .line 192
            aload 0 /* this */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.flushOutputQueue:()V
        31: .line 193
            return
        end local 8 // org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord record
        end local 7 // int dataSize
        end local 6 // boolean isLast
        end local 5 // org.glassfish.grizzly.asyncqueue.MessageCloner messageCloner
        end local 4 // org.glassfish.grizzly.CompletionHandler completionHandler
        end local 3 // org.glassfish.grizzly.Buffer data
        end local 2 // java.util.List headerFrames
        end local 1 // org.glassfish.grizzly.http2.Http2Stream stream
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   32     0               this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            0   32     1             stream  Lorg/glassfish/grizzly/http2/Http2Stream;
            0   32     2       headerFrames  Ljava/util/List<Lorg/glassfish/grizzly/http2/frames/Http2Frame;>;
            0   32     3               data  Lorg/glassfish/grizzly/Buffer;
            0   32     4  completionHandler  Lorg/glassfish/grizzly/CompletionHandler<Lorg/glassfish/grizzly/WriteResult;>;
            0   32     5      messageCloner  Lorg/glassfish/grizzly/asyncqueue/MessageCloner<Lorg/glassfish/grizzly/Buffer;>;
            0   32     6             isLast  Z
           10   17     7          dataFrame  Lorg/glassfish/grizzly/http2/frames/DataFrame;
           13   14     8                msg  Ljava/lang/Object;
           15   17     8                msg  Ljava/lang/Object;
           20   32     7           dataSize  I
           26   32     8             record  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink$OutputQueueRecord;
    Signature: (Lorg/glassfish/grizzly/http2/Http2Stream;Ljava/util/List<Lorg/glassfish/grizzly/http2/frames/Http2Frame;>;Lorg/glassfish/grizzly/Buffer;Lorg/glassfish/grizzly/CompletionHandler<Lorg/glassfish/grizzly/WriteResult;>;Lorg/glassfish/grizzly/asyncqueue/MessageCloner<Lorg/glassfish/grizzly/Buffer;>;Z)V
    MethodParameters:
                   Name  Flags
      stream             final
      headerFrames       final
      data               
      completionHandler  final
      messageCloner      final
      isLast             final

  private void flushOutputQueue();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=14, args_size=1
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
         0: .line 196
            iconst_0
            istore 1 /* backoffDelay */
        start local 1 // int backoffDelay
         1: .line 201
            iconst_0
            istore 4 /* needToNotify */
        start local 4 // boolean needToNotify
         2: .line 204
            iconst_0
            istore 5 /* tmpcnt */
        start local 5 // int tmpcnt
         3: .line 210
            goto 66
         4: .line 215
      StackMap locals: org.glassfish.grizzly.http2.Http2SessionOutputSink int top top int int
      StackMap stack:
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.availConnectionWindowSize:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            istore 2 /* availWindowSize */
        start local 2 // int availWindowSize
         5: .line 216
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.size:()I
            istore 3 /* queueSize */
        start local 3 // int queueSize
         6: .line 218
            aconst_null
            astore 6 /* writeCompletionHandler */
        start local 6 // org.glassfish.grizzly.CompletionHandler writeCompletionHandler
         7: .line 219
            iconst_0
            istore 7 /* writeCompletionHandlerBytes */
        start local 7 // int writeCompletionHandlerBytes
         8: .line 221
            iconst_0
            istore 8 /* bytesToTransfer */
        start local 8 // int bytesToTransfer
         9: .line 222
            iconst_0
            istore 9 /* queueSizeToFree */
        start local 9 // int queueSizeToFree
        10: .line 224
            aconst_null
            astore 10 /* completionHandlers */
        start local 10 // org.glassfish.grizzly.http2.AggrCompletionHandler completionHandlers
        11: .line 227
            goto 49
        12: .line 230
      StackMap locals: org.glassfish.grizzly.http2.Http2SessionOutputSink int int int int int org.glassfish.grizzly.CompletionHandler int int int org.glassfish.grizzly.http2.AggrCompletionHandler
      StackMap stack:
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.poll:()Lorg/glassfish/grizzly/asyncqueue/AsyncQueueRecord;
            checkcast org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord
            astore 11 /* record */
        start local 11 // org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord record
        13: .line 232
            aload 11 /* record */
            ifnonnull 17
        14: .line 235
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.WARNING:Ljava/util/logging/Level;
            ldc "UNEXPECTED NULL RECORD. Queue-size: {0} tmpcnt={1} byteToTransfer={2} queueSizeToFree={3} queueSize={4}"
        15: .line 237
            iconst_5
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.size:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            iload 5 /* tmpcnt */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_2
            iload 8 /* bytesToTransfer */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_3
            iload 9 /* queueSizeToFree */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_4
            iload 3 /* queueSize */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
        16: .line 235
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
        17: .line 240
      StackMap locals: org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord
      StackMap stack:
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.$assertionsDisabled:Z
            ifne 18
            aload 11 /* record */
            ifnonnull 18
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        18: .line 242
      StackMap locals:
      StackMap stack:
            aload 11 /* record */
        19: .line 243
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.tmpFramesList:Ljava/util/List;
        20: .line 244
            sipush 16383
            iload 2 /* availWindowSize */
            iload 8 /* bytesToTransfer */
            isub
            invokestatic java.lang.Math.min:(II)I
        21: .line 242
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord.serializeTo:(Ljava/util/List;I)I
            istore 12 /* serializedBytes */
        start local 12 // int serializedBytes
        22: .line 245
            iload 8 /* bytesToTransfer */
            iload 12 /* serializedBytes */
            iadd
            istore 8 /* bytesToTransfer */
        23: .line 246
            iload 9 /* queueSizeToFree */
            iload 12 /* serializedBytes */
            iadd
            istore 9 /* queueSizeToFree */
        24: .line 248
            aload 11 /* record */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord.isFinished:()Z
            ifeq 28
        25: .line 249
            aload 11 /* record */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord.isZeroSizeData:()Z
            ifeq 29
        26: .line 250
            iinc 9 /* queueSizeToFree */ 1
        27: .line 252
            goto 29
        28: .line 253
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            aload 11 /* record */
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.setCurrentElement:(Lorg/glassfish/grizzly/asyncqueue/AsyncQueueRecord;)V
        29: .line 257
      StackMap locals:
      StackMap stack:
            aload 11 /* record */
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord.getCompletionHandler:()Lorg/glassfish/grizzly/CompletionHandler;
        30: .line 256
            astore 13 /* recordCompletionHandler */
        start local 13 // org.glassfish.grizzly.CompletionHandler recordCompletionHandler
        31: .line 262
            aload 13 /* recordCompletionHandler */
            ifnull 49
        32: .line 263
            aload 10 /* completionHandlers */
            ifnull 37
        33: .line 264
            aload 10 /* completionHandlers */
            aload 13 /* recordCompletionHandler */
        34: .line 265
            iload 12 /* serializedBytes */
        35: .line 264
            invokevirtual org.glassfish.grizzly.http2.AggrCompletionHandler.register:(Lorg/glassfish/grizzly/CompletionHandler;I)V
        36: .line 266
            goto 49
      StackMap locals: org.glassfish.grizzly.CompletionHandler
      StackMap stack:
        37: aload 6 /* writeCompletionHandler */
            ifnonnull 41
        38: .line 267
            aload 13 /* recordCompletionHandler */
            astore 6 /* writeCompletionHandler */
        39: .line 268
            iload 12 /* serializedBytes */
            istore 7 /* writeCompletionHandlerBytes */
        40: .line 269
            goto 49
        41: .line 270
      StackMap locals:
      StackMap stack:
            new org.glassfish.grizzly.http2.AggrCompletionHandler
            dup
            invokespecial org.glassfish.grizzly.http2.AggrCompletionHandler.<init>:()V
            astore 10 /* completionHandlers */
        42: .line 271
            aload 10 /* completionHandlers */
            aload 6 /* writeCompletionHandler */
        43: .line 272
            iload 7 /* writeCompletionHandlerBytes */
        44: .line 271
            invokevirtual org.glassfish.grizzly.http2.AggrCompletionHandler.register:(Lorg/glassfish/grizzly/CompletionHandler;I)V
        45: .line 273
            aload 10 /* completionHandlers */
            aload 13 /* recordCompletionHandler */
        46: .line 274
            iload 12 /* serializedBytes */
        47: .line 273
            invokevirtual org.glassfish.grizzly.http2.AggrCompletionHandler.register:(Lorg/glassfish/grizzly/CompletionHandler;I)V
        48: .line 275
            aload 10 /* completionHandlers */
            astore 6 /* writeCompletionHandler */
        end local 13 // org.glassfish.grizzly.CompletionHandler recordCompletionHandler
        end local 12 // int serializedBytes
        end local 11 // org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord record
        49: .line 227
      StackMap locals:
      StackMap stack:
            iload 2 /* availWindowSize */
            iload 8 /* bytesToTransfer */
            if_icmple 52
        50: .line 228
            iload 3 /* queueSize */
            iload 9 /* queueSizeToFree */
        51: .line 227
            if_icmpgt 12
        52: .line 281
      StackMap locals:
      StackMap stack:
            iload 9 /* queueSizeToFree */
            ifle 63
        53: .line 282
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.$assertionsDisabled:Z
            ifne 54
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.tmpFramesList:Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 54
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        54: .line 285
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.tmpFramesList:Ljava/util/List;
            aload 6 /* writeCompletionHandler */
            aconst_null
            invokevirtual org.glassfish.grizzly.http2.Http2SessionOutputSink.writeDownStream:(Ljava/lang/Object;Lorg/glassfish/grizzly/CompletionHandler;Lorg/glassfish/grizzly/asyncqueue/MessageCloner;)V
        55: .line 288
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.availConnectionWindowSize:Ljava/util/concurrent/atomic/AtomicInteger;
            iload 8 /* bytesToTransfer */
            ineg
            invokevirtual java.util.concurrent.atomic.AtomicInteger.addAndGet:(I)I
        56: .line 287
            istore 11 /* newWindowSize */
        start local 11 // int newWindowSize
        57: .line 290
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            iload 9 /* queueSizeToFree */
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.releaseSpace:(I)I
            pop
        58: .line 292
            iconst_1
            istore 4 /* needToNotify */
        59: .line 293
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER:Ljava/util/logging/Logger;
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER_LEVEL:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 63
        60: .line 294
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER:Ljava/util/logging/Logger;
            getstatic org.glassfish.grizzly.http2.Http2SessionOutputSink.LOGGER_LEVEL:Ljava/util/logging/Level;
            ldc "Http2Session. Shrink connection window size by {0} bytes. Current connection window size is: {1}"
        61: .line 295
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            iload 8 /* bytesToTransfer */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            iload 11 /* newWindowSize */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
        62: .line 294
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
        end local 11 // int newWindowSize
        63: .line 301
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.writerLock:Ljava/util/concurrent/atomic/AtomicBoolean;
            iconst_0
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.set:(Z)V
        64: .line 305
            iload 1 /* backoffDelay */
            iinc 1 /* backoffDelay */ 1
            i2l
            invokestatic java.util.concurrent.locks.LockSupport.parkNanos:(J)V
        65: .line 306
            iinc 5 /* tmpcnt */ 1
        end local 10 // org.glassfish.grizzly.http2.AggrCompletionHandler completionHandlers
        end local 9 // int queueSizeToFree
        end local 8 // int bytesToTransfer
        end local 7 // int writeCompletionHandlerBytes
        end local 6 // org.glassfish.grizzly.CompletionHandler writeCompletionHandler
        end local 3 // int queueSize
        end local 2 // int availWindowSize
        66: .line 210
      StackMap locals: org.glassfish.grizzly.http2.Http2SessionOutputSink int top top int int
      StackMap stack:
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.availConnectionWindowSize:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            ifle 69
        67: .line 211
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.isEmpty:()Z
            ifne 69
        68: .line 212
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.writerLock:Ljava/util/concurrent/atomic/AtomicBoolean;
            iconst_0
            iconst_1
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.compareAndSet:(ZZ)Z
            ifne 4
        69: .line 309
      StackMap locals:
      StackMap stack:
            iload 4 /* needToNotify */
            ifeq 71
        70: .line 310
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.doNotify:()V
        71: .line 312
      StackMap locals:
      StackMap stack:
            return
        end local 5 // int tmpcnt
        end local 4 // boolean needToNotify
        end local 1 // int backoffDelay
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot                         Name  Signature
            0   72     0                         this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
            1   72     1                 backoffDelay  I
            5   66     2              availWindowSize  I
            6   66     3                    queueSize  I
            2   72     4                 needToNotify  Z
            3   72     5                       tmpcnt  I
            7   66     6       writeCompletionHandler  Lorg/glassfish/grizzly/CompletionHandler<Lorg/glassfish/grizzly/WriteResult;>;
            8   66     7  writeCompletionHandlerBytes  I
            9   66     8              bytesToTransfer  I
           10   66     9              queueSizeToFree  I
           11   66    10           completionHandlers  Lorg/glassfish/grizzly/http2/AggrCompletionHandler;
           13   49    11                       record  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink$OutputQueueRecord;
           22   49    12              serializedBytes  I
           31   49    13      recordCompletionHandler  Lorg/glassfish/grizzly/CompletionHandler<Lorg/glassfish/grizzly/WriteResult;>;
           57   63    11                newWindowSize  I

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
         0: .line 315
            aload 0 /* this */
            getfield org.glassfish.grizzly.http2.Http2SessionOutputSink.outputQueue:Lorg/glassfish/grizzly/asyncqueue/TaskQueue;
            invokevirtual org.glassfish.grizzly.asyncqueue.TaskQueue.onClose:()V
         1: .line 316
            return
        end local 0 // org.glassfish.grizzly.http2.Http2SessionOutputSink this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/glassfish/grizzly/http2/Http2SessionOutputSink;
}
SourceFile: "Http2SessionOutputSink.java"
NestMembers:
  org.glassfish.grizzly.http2.Http2SessionOutputSink$1  org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord
InnerClasses:
  public abstract MutableMaxQueueSize = org.glassfish.grizzly.asyncqueue.TaskQueue$MutableMaxQueueSize of org.glassfish.grizzly.asyncqueue.TaskQueue
  org.glassfish.grizzly.http2.Http2SessionOutputSink$1
  private OutputQueueRecord = org.glassfish.grizzly.http2.Http2SessionOutputSink$OutputQueueRecord of org.glassfish.grizzly.http2.Http2SessionOutputSink
  public DataFrameBuilder = org.glassfish.grizzly.http2.frames.DataFrame$DataFrameBuilder of org.glassfish.grizzly.http2.frames.DataFrame
  protected abstract Http2FrameBuilder = org.glassfish.grizzly.http2.frames.Http2Frame$Http2FrameBuilder of org.glassfish.grizzly.http2.frames.Http2Frame