public final class com.google.common.util.concurrent.ClosingFuture<V>
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.google.common.util.concurrent.ClosingFuture
  super_class: java.lang.Object
{
  private static final java.util.logging.Logger logger;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.util.concurrent.atomic.AtomicReference<com.google.common.util.concurrent.ClosingFuture$State> state;
    descriptor: Ljava/util/concurrent/atomic/AtomicReference;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicReference<Lcom/google/common/util/concurrent/ClosingFuture$State;>;

  private final com.google.common.util.concurrent.ClosingFuture$CloseableList closeables;
    descriptor: Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.google.common.util.concurrent.FluentFuture<V> future;
    descriptor: Lcom/google/common/util/concurrent/FluentFuture;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/google/common/util/concurrent/FluentFuture<TV;>;

  private static volatile int[] $SWITCH_TABLE$com$google$common$util$concurrent$ClosingFuture$State;
    descriptor: [I
    flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 196
            ldc Lcom/google/common/util/concurrent/ClosingFuture;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
            putstatic com.google.common.util.concurrent.ClosingFuture.logger:Ljava/util/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static <V> com.google.common.util.concurrent.ClosingFuture<V> submit(com.google.common.util.concurrent.ClosingFuture$ClosingCallable<V>, java.util.concurrent.Executor);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture$ClosingCallable callable
        start local 1 // java.util.concurrent.Executor executor
         0: .line 366
            new com.google.common.util.concurrent.ClosingFuture
            dup
            aload 0 /* callable */
            aload 1 /* executor */
            invokespecial com.google.common.util.concurrent.ClosingFuture.<init>:(Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable;Ljava/util/concurrent/Executor;)V
            areturn
        end local 1 // java.util.concurrent.Executor executor
        end local 0 // com.google.common.util.concurrent.ClosingFuture$ClosingCallable callable
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  callable  Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable<TV;>;
            0    1     1  executor  Ljava/util/concurrent/Executor;
    Signature: <V:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable<TV;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    MethodParameters:
          Name  Flags
      callable  
      executor  

  public static <V> com.google.common.util.concurrent.ClosingFuture<V> from(com.google.common.util.concurrent.ListenableFuture<V>);
    descriptor: (Lcom/google/common/util/concurrent/ListenableFuture;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.ListenableFuture future
         0: .line 379
            new com.google.common.util.concurrent.ClosingFuture
            dup
            aload 0 /* future */
            invokespecial com.google.common.util.concurrent.ClosingFuture.<init>:(Lcom/google/common/util/concurrent/ListenableFuture;)V
            areturn
        end local 0 // com.google.common.util.concurrent.ListenableFuture future
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  future  Lcom/google/common/util/concurrent/ListenableFuture<TV;>;
    Signature: <V:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ListenableFuture<TV;>;)Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    MethodParameters:
        Name  Flags
      future  

  public static <C extends java.lang.AutoCloseable> com.google.common.util.concurrent.ClosingFuture<C> eventuallyClosing(com.google.common.util.concurrent.ListenableFuture<C>, java.util.concurrent.Executor);
    descriptor: (Lcom/google/common/util/concurrent/ListenableFuture;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.google.common.util.concurrent.ListenableFuture future
        start local 1 // java.util.concurrent.Executor closingExecutor
         0: .line 407
            aload 1 /* closingExecutor */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 408
            new com.google.common.util.concurrent.ClosingFuture
            dup
            aload 0 /* future */
            invokestatic com.google.common.util.concurrent.Futures.nonCancellationPropagating:(Lcom/google/common/util/concurrent/ListenableFuture;)Lcom/google/common/util/concurrent/ListenableFuture;
            invokespecial com.google.common.util.concurrent.ClosingFuture.<init>:(Lcom/google/common/util/concurrent/ListenableFuture;)V
            astore 2 /* closingFuture */
        start local 2 // com.google.common.util.concurrent.ClosingFuture closingFuture
         2: .line 410
            aload 0 /* future */
         3: .line 411
            new com.google.common.util.concurrent.ClosingFuture$1
              RuntimeVisibleTypeAnnotation: org.checkerframework.checker.nullness.qual.Nullable()
            dup
            aload 2 /* closingFuture */
            aload 1 /* closingExecutor */
            invokespecial com.google.common.util.concurrent.ClosingFuture$1.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Ljava/util/concurrent/Executor;)V
         4: .line 420
            invokestatic com.google.common.util.concurrent.MoreExecutors.directExecutor:()Ljava/util/concurrent/Executor;
         5: .line 409
            invokestatic com.google.common.util.concurrent.Futures.addCallback:(Lcom/google/common/util/concurrent/ListenableFuture;Lcom/google/common/util/concurrent/FutureCallback;Ljava/util/concurrent/Executor;)V
         6: .line 421
            aload 2 /* closingFuture */
            areturn
        end local 2 // com.google.common.util.concurrent.ClosingFuture closingFuture
        end local 1 // java.util.concurrent.Executor closingExecutor
        end local 0 // com.google.common.util.concurrent.ListenableFuture future
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    7     0           future  Lcom/google/common/util/concurrent/ListenableFuture<TC;>;
            0    7     1  closingExecutor  Ljava/util/concurrent/Executor;
            2    7     2    closingFuture  Lcom/google/common/util/concurrent/ClosingFuture<TC;>;
    Signature: <C:Ljava/lang/Object;:Ljava/lang/AutoCloseable;>(Lcom/google/common/util/concurrent/ListenableFuture<TC;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TC;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    RuntimeVisibleTypeAnnotations: 
      METHOD_TYPE_PARAMETER_BOUND
        org.checkerframework.checker.nullness.qual.Nullable()
      METHOD_TYPE_PARAMETER_BOUND
        org.checkerframework.checker.nullness.qual.Nullable()
    MethodParameters:
                 Name  Flags
      future           
      closingExecutor  final

  public static com.google.common.util.concurrent.ClosingFuture$Combiner whenAllComplete(java.lang.Iterable<? extends com.google.common.util.concurrent.ClosingFuture<?>>);
    descriptor: (Ljava/lang/Iterable;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.Iterable futures
         0: .line 431
            new com.google.common.util.concurrent.ClosingFuture$Combiner
            dup
            iconst_0
            aload 0 /* futures */
            invokespecial com.google.common.util.concurrent.ClosingFuture$Combiner.<init>:(ZLjava/lang/Iterable;)V
            areturn
        end local 0 // java.lang.Iterable futures
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  futures  Ljava/lang/Iterable<+Lcom/google/common/util/concurrent/ClosingFuture<*>;>;
    Signature: (Ljava/lang/Iterable<+Lcom/google/common/util/concurrent/ClosingFuture<*>;>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    MethodParameters:
         Name  Flags
      futures  

  public static com.google.common.util.concurrent.ClosingFuture$Combiner whenAllComplete(com.google.common.util.concurrent.ClosingFuture<?>, com.google.common.util.concurrent.ClosingFuture<?>[]);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture;[Lcom/google/common/util/concurrent/ClosingFuture;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    flags: (0x0089) ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture future1
        start local 1 // com.google.common.util.concurrent.ClosingFuture[] moreFutures
         0: .line 442
            aload 0 /* future1 */
            aload 1 /* moreFutures */
            invokestatic com.google.common.collect.Lists.asList:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/util/List;
            invokestatic com.google.common.util.concurrent.ClosingFuture.whenAllComplete:(Ljava/lang/Iterable;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
            areturn
        end local 1 // com.google.common.util.concurrent.ClosingFuture[] moreFutures
        end local 0 // com.google.common.util.concurrent.ClosingFuture future1
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0      future1  Lcom/google/common/util/concurrent/ClosingFuture<*>;
            0    1     1  moreFutures  [Lcom/google/common/util/concurrent/ClosingFuture;
    Signature: (Lcom/google/common/util/concurrent/ClosingFuture<*>;[Lcom/google/common/util/concurrent/ClosingFuture<*>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    MethodParameters:
             Name  Flags
      future1      
      moreFutures  

  public static com.google.common.util.concurrent.ClosingFuture$Combiner whenAllSucceed(java.lang.Iterable<? extends com.google.common.util.concurrent.ClosingFuture<?>>);
    descriptor: (Ljava/lang/Iterable;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.Iterable futures
         0: .line 453
            new com.google.common.util.concurrent.ClosingFuture$Combiner
            dup
            iconst_1
            aload 0 /* futures */
            invokespecial com.google.common.util.concurrent.ClosingFuture$Combiner.<init>:(ZLjava/lang/Iterable;)V
            areturn
        end local 0 // java.lang.Iterable futures
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  futures  Ljava/lang/Iterable<+Lcom/google/common/util/concurrent/ClosingFuture<*>;>;
    Signature: (Ljava/lang/Iterable<+Lcom/google/common/util/concurrent/ClosingFuture<*>;>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    MethodParameters:
         Name  Flags
      futures  

  public static <V1, V2> com.google.common.util.concurrent.ClosingFuture$Combiner2<V1, V2> whenAllSucceed(com.google.common.util.concurrent.ClosingFuture<V1>, com.google.common.util.concurrent.ClosingFuture<V2>);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner2;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture future1
        start local 1 // com.google.common.util.concurrent.ClosingFuture future2
         0: .line 468
            new com.google.common.util.concurrent.ClosingFuture$Combiner2
            dup
            aload 0 /* future1 */
            aload 1 /* future2 */
            invokespecial com.google.common.util.concurrent.ClosingFuture$Combiner2.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)V
            areturn
        end local 1 // com.google.common.util.concurrent.ClosingFuture future2
        end local 0 // com.google.common.util.concurrent.ClosingFuture future1
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  future1  Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;
            0    1     1  future2  Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;
    Signature: <V1:Ljava/lang/Object;V2:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner2<TV1;TV2;>;
    MethodParameters:
         Name  Flags
      future1  
      future2  

  public static <V1, V2, V3> com.google.common.util.concurrent.ClosingFuture$Combiner3<V1, V2, V3> whenAllSucceed(com.google.common.util.concurrent.ClosingFuture<V1>, com.google.common.util.concurrent.ClosingFuture<V2>, com.google.common.util.concurrent.ClosingFuture<V3>);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner3;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.google.common.util.concurrent.ClosingFuture future1
        start local 1 // com.google.common.util.concurrent.ClosingFuture future2
        start local 2 // com.google.common.util.concurrent.ClosingFuture future3
         0: .line 483
            new com.google.common.util.concurrent.ClosingFuture$Combiner3
            dup
            aload 0 /* future1 */
            aload 1 /* future2 */
            aload 2 /* future3 */
            invokespecial com.google.common.util.concurrent.ClosingFuture$Combiner3.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)V
            areturn
        end local 2 // com.google.common.util.concurrent.ClosingFuture future3
        end local 1 // com.google.common.util.concurrent.ClosingFuture future2
        end local 0 // com.google.common.util.concurrent.ClosingFuture future1
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  future1  Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;
            0    1     1  future2  Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;
            0    1     2  future3  Lcom/google/common/util/concurrent/ClosingFuture<TV3;>;
    Signature: <V1:Ljava/lang/Object;V2:Ljava/lang/Object;V3:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;Lcom/google/common/util/concurrent/ClosingFuture<TV3;>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner3<TV1;TV2;TV3;>;
    MethodParameters:
         Name  Flags
      future1  
      future2  
      future3  

  public static <V1, V2, V3, V4> com.google.common.util.concurrent.ClosingFuture$Combiner4<V1, V2, V3, V4> whenAllSucceed(com.google.common.util.concurrent.ClosingFuture<V1>, com.google.common.util.concurrent.ClosingFuture<V2>, com.google.common.util.concurrent.ClosingFuture<V3>, com.google.common.util.concurrent.ClosingFuture<V4>);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner4;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // com.google.common.util.concurrent.ClosingFuture future1
        start local 1 // com.google.common.util.concurrent.ClosingFuture future2
        start local 2 // com.google.common.util.concurrent.ClosingFuture future3
        start local 3 // com.google.common.util.concurrent.ClosingFuture future4
         0: .line 501
            new com.google.common.util.concurrent.ClosingFuture$Combiner4
            dup
            aload 0 /* future1 */
            aload 1 /* future2 */
            aload 2 /* future3 */
            aload 3 /* future4 */
            invokespecial com.google.common.util.concurrent.ClosingFuture$Combiner4.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)V
            areturn
        end local 3 // com.google.common.util.concurrent.ClosingFuture future4
        end local 2 // com.google.common.util.concurrent.ClosingFuture future3
        end local 1 // com.google.common.util.concurrent.ClosingFuture future2
        end local 0 // com.google.common.util.concurrent.ClosingFuture future1
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  future1  Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;
            0    1     1  future2  Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;
            0    1     2  future3  Lcom/google/common/util/concurrent/ClosingFuture<TV3;>;
            0    1     3  future4  Lcom/google/common/util/concurrent/ClosingFuture<TV4;>;
    Signature: <V1:Ljava/lang/Object;V2:Ljava/lang/Object;V3:Ljava/lang/Object;V4:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;Lcom/google/common/util/concurrent/ClosingFuture<TV3;>;Lcom/google/common/util/concurrent/ClosingFuture<TV4;>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner4<TV1;TV2;TV3;TV4;>;
    MethodParameters:
         Name  Flags
      future1  
      future2  
      future3  
      future4  

  public static <V1, V2, V3, V4, V5> com.google.common.util.concurrent.ClosingFuture$Combiner5<V1, V2, V3, V4, V5> whenAllSucceed(com.google.common.util.concurrent.ClosingFuture<V1>, com.google.common.util.concurrent.ClosingFuture<V2>, com.google.common.util.concurrent.ClosingFuture<V3>, com.google.common.util.concurrent.ClosingFuture<V4>, com.google.common.util.concurrent.ClosingFuture<V5>);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner5;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=5, args_size=5
        start local 0 // com.google.common.util.concurrent.ClosingFuture future1
        start local 1 // com.google.common.util.concurrent.ClosingFuture future2
        start local 2 // com.google.common.util.concurrent.ClosingFuture future3
        start local 3 // com.google.common.util.concurrent.ClosingFuture future4
        start local 4 // com.google.common.util.concurrent.ClosingFuture future5
         0: .line 520
            new com.google.common.util.concurrent.ClosingFuture$Combiner5
            dup
            aload 0 /* future1 */
            aload 1 /* future2 */
            aload 2 /* future3 */
            aload 3 /* future4 */
            aload 4 /* future5 */
            invokespecial com.google.common.util.concurrent.ClosingFuture$Combiner5.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;)V
            areturn
        end local 4 // com.google.common.util.concurrent.ClosingFuture future5
        end local 3 // com.google.common.util.concurrent.ClosingFuture future4
        end local 2 // com.google.common.util.concurrent.ClosingFuture future3
        end local 1 // com.google.common.util.concurrent.ClosingFuture future2
        end local 0 // com.google.common.util.concurrent.ClosingFuture future1
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  future1  Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;
            0    1     1  future2  Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;
            0    1     2  future3  Lcom/google/common/util/concurrent/ClosingFuture<TV3;>;
            0    1     3  future4  Lcom/google/common/util/concurrent/ClosingFuture<TV4;>;
            0    1     4  future5  Lcom/google/common/util/concurrent/ClosingFuture<TV5;>;
    Signature: <V1:Ljava/lang/Object;V2:Ljava/lang/Object;V3:Ljava/lang/Object;V4:Ljava/lang/Object;V5:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ClosingFuture<TV1;>;Lcom/google/common/util/concurrent/ClosingFuture<TV2;>;Lcom/google/common/util/concurrent/ClosingFuture<TV3;>;Lcom/google/common/util/concurrent/ClosingFuture<TV4;>;Lcom/google/common/util/concurrent/ClosingFuture<TV5;>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner5<TV1;TV2;TV3;TV4;TV5;>;
    MethodParameters:
         Name  Flags
      future1  
      future2  
      future3  
      future4  
      future5  

  public static com.google.common.util.concurrent.ClosingFuture$Combiner whenAllSucceed(com.google.common.util.concurrent.ClosingFuture<?>, com.google.common.util.concurrent.ClosingFuture<?>, com.google.common.util.concurrent.ClosingFuture<?>, com.google.common.util.concurrent.ClosingFuture<?>, com.google.common.util.concurrent.ClosingFuture<?>, com.google.common.util.concurrent.ClosingFuture<?>, com.google.common.util.concurrent.ClosingFuture<?>[]);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture;[Lcom/google/common/util/concurrent/ClosingFuture;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    flags: (0x0089) ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
    Code:
      stack=5, locals=7, args_size=7
        start local 0 // com.google.common.util.concurrent.ClosingFuture future1
        start local 1 // com.google.common.util.concurrent.ClosingFuture future2
        start local 2 // com.google.common.util.concurrent.ClosingFuture future3
        start local 3 // com.google.common.util.concurrent.ClosingFuture future4
        start local 4 // com.google.common.util.concurrent.ClosingFuture future5
        start local 5 // com.google.common.util.concurrent.ClosingFuture future6
        start local 6 // com.google.common.util.concurrent.ClosingFuture[] moreFutures
         0: .line 539
            aload 0 /* future1 */
            iconst_5
            anewarray com.google.common.util.concurrent.ClosingFuture
            dup
            iconst_0
            aload 1 /* future2 */
            aastore
            dup
            iconst_1
            aload 2 /* future3 */
            aastore
            dup
            iconst_2
            aload 3 /* future4 */
            aastore
            dup
            iconst_3
            aload 4 /* future5 */
            aastore
            dup
            iconst_4
            aload 5 /* future6 */
            aastore
            invokestatic com.google.common.collect.FluentIterable.of:(Ljava/lang/Object;[Ljava/lang/Object;)Lcom/google/common/collect/FluentIterable;
         1: .line 540
            aload 6 /* moreFutures */
            invokevirtual com.google.common.collect.FluentIterable.append:([Ljava/lang/Object;)Lcom/google/common/collect/FluentIterable;
         2: .line 538
            invokestatic com.google.common.util.concurrent.ClosingFuture.whenAllSucceed:(Ljava/lang/Iterable;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
            areturn
        end local 6 // com.google.common.util.concurrent.ClosingFuture[] moreFutures
        end local 5 // com.google.common.util.concurrent.ClosingFuture future6
        end local 4 // com.google.common.util.concurrent.ClosingFuture future5
        end local 3 // com.google.common.util.concurrent.ClosingFuture future4
        end local 2 // com.google.common.util.concurrent.ClosingFuture future3
        end local 1 // com.google.common.util.concurrent.ClosingFuture future2
        end local 0 // com.google.common.util.concurrent.ClosingFuture future1
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0      future1  Lcom/google/common/util/concurrent/ClosingFuture<*>;
            0    3     1      future2  Lcom/google/common/util/concurrent/ClosingFuture<*>;
            0    3     2      future3  Lcom/google/common/util/concurrent/ClosingFuture<*>;
            0    3     3      future4  Lcom/google/common/util/concurrent/ClosingFuture<*>;
            0    3     4      future5  Lcom/google/common/util/concurrent/ClosingFuture<*>;
            0    3     5      future6  Lcom/google/common/util/concurrent/ClosingFuture<*>;
            0    3     6  moreFutures  [Lcom/google/common/util/concurrent/ClosingFuture;
    Signature: (Lcom/google/common/util/concurrent/ClosingFuture<*>;Lcom/google/common/util/concurrent/ClosingFuture<*>;Lcom/google/common/util/concurrent/ClosingFuture<*>;Lcom/google/common/util/concurrent/ClosingFuture<*>;Lcom/google/common/util/concurrent/ClosingFuture<*>;Lcom/google/common/util/concurrent/ClosingFuture<*>;[Lcom/google/common/util/concurrent/ClosingFuture<*>;)Lcom/google/common/util/concurrent/ClosingFuture$Combiner;
    MethodParameters:
             Name  Flags
      future1      
      future2      
      future3      
      future4      
      future5      
      future6      
      moreFutures  

  private void <init>(com.google.common.util.concurrent.ListenableFuture<V>);
    descriptor: (Lcom/google/common/util/concurrent/ListenableFuture;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ListenableFuture future
         0: .line 547
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 543
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicReference
            dup
            getstatic com.google.common.util.concurrent.ClosingFuture$State.OPEN:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokespecial java.util.concurrent.atomic.AtomicReference.<init>:(Ljava/lang/Object;)V
            putfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
         2: .line 544
            aload 0 /* this */
            new com.google.common.util.concurrent.ClosingFuture$CloseableList
            dup
            invokespecial com.google.common.util.concurrent.ClosingFuture$CloseableList.<init>:()V
            putfield com.google.common.util.concurrent.ClosingFuture.closeables:Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
         3: .line 548
            aload 0 /* this */
            aload 1 /* future */
            invokestatic com.google.common.util.concurrent.FluentFuture.from:(Lcom/google/common/util/concurrent/ListenableFuture;)Lcom/google/common/util/concurrent/FluentFuture;
            putfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
         4: .line 549
            return
        end local 1 // com.google.common.util.concurrent.ListenableFuture future
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    5     1  future  Lcom/google/common/util/concurrent/ListenableFuture<TV;>;
    Signature: (Lcom/google/common/util/concurrent/ListenableFuture<TV;>;)V
    MethodParameters:
        Name  Flags
      future  

  private void <init>(com.google.common.util.concurrent.ClosingFuture$ClosingCallable<V>, java.util.concurrent.Executor);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable;Ljava/util/concurrent/Executor;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ClosingFuture$ClosingCallable callable
        start local 2 // java.util.concurrent.Executor executor
         0: .line 551
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 543
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicReference
            dup
            getstatic com.google.common.util.concurrent.ClosingFuture$State.OPEN:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokespecial java.util.concurrent.atomic.AtomicReference.<init>:(Ljava/lang/Object;)V
            putfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
         2: .line 544
            aload 0 /* this */
            new com.google.common.util.concurrent.ClosingFuture$CloseableList
            dup
            invokespecial com.google.common.util.concurrent.ClosingFuture$CloseableList.<init>:()V
            putfield com.google.common.util.concurrent.ClosingFuture.closeables:Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
         3: .line 552
            aload 1 /* callable */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 555
            new com.google.common.util.concurrent.ClosingFuture$2
            dup
            aload 0 /* this */
            aload 1 /* callable */
            invokespecial com.google.common.util.concurrent.ClosingFuture$2.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable;)V
         5: .line 554
            invokestatic com.google.common.util.concurrent.TrustedListenableFutureTask.create:(Ljava/util/concurrent/Callable;)Lcom/google/common/util/concurrent/TrustedListenableFutureTask;
         6: .line 553
            astore 3 /* task */
        start local 3 // com.google.common.util.concurrent.TrustedListenableFutureTask task
         7: .line 566
            aload 2 /* executor */
            aload 3 /* task */
            invokeinterface java.util.concurrent.Executor.execute:(Ljava/lang/Runnable;)V
         8: .line 567
            aload 0 /* this */
            aload 3 /* task */
            putfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
         9: .line 568
            return
        end local 3 // com.google.common.util.concurrent.TrustedListenableFutureTask task
        end local 2 // java.util.concurrent.Executor executor
        end local 1 // com.google.common.util.concurrent.ClosingFuture$ClosingCallable callable
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0   10     1  callable  Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable<TV;>;
            0   10     2  executor  Ljava/util/concurrent/Executor;
            7   10     3      task  Lcom/google/common/util/concurrent/TrustedListenableFutureTask<TV;>;
    Signature: (Lcom/google/common/util/concurrent/ClosingFuture$ClosingCallable<TV;>;Ljava/util/concurrent/Executor;)V
    MethodParameters:
          Name  Flags
      callable  final
      executor  

  public com.google.common.util.concurrent.ListenableFuture<?> statusFuture();
    descriptor: ()Lcom/google/common/util/concurrent/ListenableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
         0: .line 582
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            aconst_null
            invokestatic com.google.common.base.Functions.constant:(Ljava/lang/Object;)Lcom/google/common/base/Function;
            invokestatic com.google.common.util.concurrent.MoreExecutors.directExecutor:()Ljava/util/concurrent/Executor;
            invokevirtual com.google.common.util.concurrent.FluentFuture.transform:(Lcom/google/common/base/Function;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/FluentFuture;
            invokestatic com.google.common.util.concurrent.Futures.nonCancellationPropagating:(Lcom/google/common/util/concurrent/ListenableFuture;)Lcom/google/common/util/concurrent/ListenableFuture;
            areturn
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    Signature: ()Lcom/google/common/util/concurrent/ListenableFuture<*>;

  public <U> com.google.common.util.concurrent.ClosingFuture<U> transform(com.google.common.util.concurrent.ClosingFuture$ClosingFunction<? super V, U>, java.util.concurrent.Executor);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ClosingFuture$ClosingFunction function
        start local 2 // java.util.concurrent.Executor executor
         0: .line 620
            aload 1 /* function */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 622
            new com.google.common.util.concurrent.ClosingFuture$3
            dup
            aload 0 /* this */
            aload 1 /* function */
            invokespecial com.google.common.util.concurrent.ClosingFuture$3.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction;)V
         2: .line 621
            astore 3 /* applyFunction */
        start local 3 // com.google.common.util.concurrent.AsyncFunction applyFunction
         3: .line 634
            aload 0 /* this */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            aload 3 /* applyFunction */
            aload 2 /* executor */
            invokevirtual com.google.common.util.concurrent.FluentFuture.transformAsync:(Lcom/google/common/util/concurrent/AsyncFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/FluentFuture;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.derive:(Lcom/google/common/util/concurrent/FluentFuture;)Lcom/google/common/util/concurrent/ClosingFuture;
            areturn
        end local 3 // com.google.common.util.concurrent.AsyncFunction applyFunction
        end local 2 // java.util.concurrent.Executor executor
        end local 1 // com.google.common.util.concurrent.ClosingFuture$ClosingFunction function
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    4     1       function  Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction<-TV;TU;>;
            0    4     2       executor  Ljava/util/concurrent/Executor;
            3    4     3  applyFunction  Lcom/google/common/util/concurrent/AsyncFunction<TV;TU;>;
    Signature: <U:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction<-TV;TU;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TU;>;
    MethodParameters:
          Name  Flags
      function  final
      executor  

  public <U> com.google.common.util.concurrent.ClosingFuture<U> transformAsync(com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction<? super V, U>, java.util.concurrent.Executor);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction function
        start local 2 // java.util.concurrent.Executor executor
         0: .line 714
            aload 1 /* function */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 716
            new com.google.common.util.concurrent.ClosingFuture$4
            dup
            aload 0 /* this */
            aload 1 /* function */
            invokespecial com.google.common.util.concurrent.ClosingFuture$4.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction;)V
         2: .line 715
            astore 3 /* applyFunction */
        start local 3 // com.google.common.util.concurrent.AsyncFunction applyFunction
         3: .line 727
            aload 0 /* this */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            aload 3 /* applyFunction */
            aload 2 /* executor */
            invokevirtual com.google.common.util.concurrent.FluentFuture.transformAsync:(Lcom/google/common/util/concurrent/AsyncFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/FluentFuture;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.derive:(Lcom/google/common/util/concurrent/FluentFuture;)Lcom/google/common/util/concurrent/ClosingFuture;
            areturn
        end local 3 // com.google.common.util.concurrent.AsyncFunction applyFunction
        end local 2 // java.util.concurrent.Executor executor
        end local 1 // com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction function
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    4     1       function  Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction<-TV;TU;>;
            0    4     2       executor  Ljava/util/concurrent/Executor;
            3    4     3  applyFunction  Lcom/google/common/util/concurrent/AsyncFunction<TV;TU;>;
    Signature: <U:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction<-TV;TU;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TU;>;
    MethodParameters:
          Name  Flags
      function  final
      executor  

  public static <V, U> com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction<V, U> withoutCloser(com.google.common.util.concurrent.AsyncFunction<V, U>);
    descriptor: (Lcom/google/common/util/concurrent/AsyncFunction;)Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.AsyncFunction function
         0: .line 758
            aload 0 /* function */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 759
            new com.google.common.util.concurrent.ClosingFuture$5
            dup
            aload 0 /* function */
            invokespecial com.google.common.util.concurrent.ClosingFuture$5.<init>:(Lcom/google/common/util/concurrent/AsyncFunction;)V
            areturn
        end local 0 // com.google.common.util.concurrent.AsyncFunction function
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  function  Lcom/google/common/util/concurrent/AsyncFunction<TV;TU;>;
    Signature: <V:Ljava/lang/Object;U:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/AsyncFunction<TV;TU;>;)Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction<TV;TU;>;
    MethodParameters:
          Name  Flags
      function  final

  public <X extends java.lang.Throwable> com.google.common.util.concurrent.ClosingFuture<V> catching(java.lang.Class<X>, com.google.common.util.concurrent.ClosingFuture$ClosingFunction<? super X, ? extends V>, java.util.concurrent.Executor);
    descriptor: (Ljava/lang/Class;Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // java.lang.Class exceptionType
        start local 2 // com.google.common.util.concurrent.ClosingFuture$ClosingFunction fallback
        start local 3 // java.util.concurrent.Executor executor
         0: .line 810
            aload 0 /* this */
            aload 1 /* exceptionType */
            aload 2 /* fallback */
            aload 3 /* executor */
            invokevirtual com.google.common.util.concurrent.ClosingFuture.catchingMoreGeneric:(Ljava/lang/Class;Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
            areturn
        end local 3 // java.util.concurrent.Executor executor
        end local 2 // com.google.common.util.concurrent.ClosingFuture$ClosingFunction fallback
        end local 1 // java.lang.Class exceptionType
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0           this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    1     1  exceptionType  Ljava/lang/Class<TX;>;
            0    1     2       fallback  Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction<-TX;+TV;>;
            0    1     3       executor  Ljava/util/concurrent/Executor;
    Signature: <X:Ljava/lang/Throwable;>(Ljava/lang/Class<TX;>;Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction<-TX;+TV;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    MethodParameters:
               Name  Flags
      exceptionType  
      fallback       
      executor       

  private <X extends java.lang.Throwable, W extends V> com.google.common.util.concurrent.ClosingFuture<V> catchingMoreGeneric(java.lang.Class<X>, com.google.common.util.concurrent.ClosingFuture$ClosingFunction<? super X, W>, java.util.concurrent.Executor);
    descriptor: (Ljava/lang/Class;Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=4
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // java.lang.Class exceptionType
        start local 2 // com.google.common.util.concurrent.ClosingFuture$ClosingFunction fallback
        start local 3 // java.util.concurrent.Executor executor
         0: .line 816
            aload 2 /* fallback */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 818
            new com.google.common.util.concurrent.ClosingFuture$6
            dup
            aload 0 /* this */
            aload 2 /* fallback */
            invokespecial com.google.common.util.concurrent.ClosingFuture$6.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction;)V
         2: .line 817
            astore 4 /* applyFallback */
        start local 4 // com.google.common.util.concurrent.AsyncFunction applyFallback
         3: .line 830
            aload 0 /* this */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            aload 1 /* exceptionType */
            aload 4 /* applyFallback */
            aload 3 /* executor */
            invokevirtual com.google.common.util.concurrent.FluentFuture.catchingAsync:(Ljava/lang/Class;Lcom/google/common/util/concurrent/AsyncFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/FluentFuture;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.derive:(Lcom/google/common/util/concurrent/FluentFuture;)Lcom/google/common/util/concurrent/ClosingFuture;
            areturn
        end local 4 // com.google.common.util.concurrent.AsyncFunction applyFallback
        end local 3 // java.util.concurrent.Executor executor
        end local 2 // com.google.common.util.concurrent.ClosingFuture$ClosingFunction fallback
        end local 1 // java.lang.Class exceptionType
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    4     1  exceptionType  Ljava/lang/Class<TX;>;
            0    4     2       fallback  Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction<-TX;TW;>;
            0    4     3       executor  Ljava/util/concurrent/Executor;
            3    4     4  applyFallback  Lcom/google/common/util/concurrent/AsyncFunction<TX;TW;>;
    Signature: <X:Ljava/lang/Throwable;W:TV;>(Ljava/lang/Class<TX;>;Lcom/google/common/util/concurrent/ClosingFuture$ClosingFunction<-TX;TW;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    MethodParameters:
               Name  Flags
      exceptionType  
      fallback       final
      executor       

  public <X extends java.lang.Throwable> com.google.common.util.concurrent.ClosingFuture<V> catchingAsync(java.lang.Class<X>, com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction<? super X, ? extends V>, java.util.concurrent.Executor);
    descriptor: (Ljava/lang/Class;Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // java.lang.Class exceptionType
        start local 2 // com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction fallback
        start local 3 // java.util.concurrent.Executor executor
         0: .line 907
            aload 0 /* this */
            aload 1 /* exceptionType */
            aload 2 /* fallback */
            aload 3 /* executor */
            invokevirtual com.google.common.util.concurrent.ClosingFuture.catchingAsyncMoreGeneric:(Ljava/lang/Class;Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
            areturn
        end local 3 // java.util.concurrent.Executor executor
        end local 2 // com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction fallback
        end local 1 // java.lang.Class exceptionType
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0           this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    1     1  exceptionType  Ljava/lang/Class<TX;>;
            0    1     2       fallback  Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction<-TX;+TV;>;
            0    1     3       executor  Ljava/util/concurrent/Executor;
    Signature: <X:Ljava/lang/Throwable;>(Ljava/lang/Class<TX;>;Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction<-TX;+TV;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    MethodParameters:
               Name  Flags
      exceptionType  
      fallback       
      executor       

  private <X extends java.lang.Throwable, W extends V> com.google.common.util.concurrent.ClosingFuture<V> catchingAsyncMoreGeneric(java.lang.Class<X>, com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction<? super X, W>, java.util.concurrent.Executor);
    descriptor: (Ljava/lang/Class;Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=4
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // java.lang.Class exceptionType
        start local 2 // com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction fallback
        start local 3 // java.util.concurrent.Executor executor
         0: .line 915
            aload 2 /* fallback */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 917
            new com.google.common.util.concurrent.ClosingFuture$7
            dup
            aload 0 /* this */
            aload 2 /* fallback */
            invokespecial com.google.common.util.concurrent.ClosingFuture$7.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction;)V
         2: .line 916
            astore 4 /* asyncFunction */
        start local 4 // com.google.common.util.concurrent.AsyncFunction asyncFunction
         3: .line 928
            aload 0 /* this */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            aload 1 /* exceptionType */
            aload 4 /* asyncFunction */
            aload 3 /* executor */
            invokevirtual com.google.common.util.concurrent.FluentFuture.catchingAsync:(Ljava/lang/Class;Lcom/google/common/util/concurrent/AsyncFunction;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/FluentFuture;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.derive:(Lcom/google/common/util/concurrent/FluentFuture;)Lcom/google/common/util/concurrent/ClosingFuture;
            areturn
        end local 4 // com.google.common.util.concurrent.AsyncFunction asyncFunction
        end local 3 // java.util.concurrent.Executor executor
        end local 2 // com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction fallback
        end local 1 // java.lang.Class exceptionType
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    4     1  exceptionType  Ljava/lang/Class<TX;>;
            0    4     2       fallback  Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction<-TX;TW;>;
            0    4     3       executor  Ljava/util/concurrent/Executor;
            3    4     4  asyncFunction  Lcom/google/common/util/concurrent/AsyncFunction<TX;TW;>;
    Signature: <X:Ljava/lang/Throwable;W:TV;>(Ljava/lang/Class<TX;>;Lcom/google/common/util/concurrent/ClosingFuture$AsyncClosingFunction<-TX;TW;>;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    MethodParameters:
               Name  Flags
      exceptionType  
      fallback       final
      executor       

  public com.google.common.util.concurrent.FluentFuture<V> finishToFuture();
    descriptor: ()Lcom/google/common/util/concurrent/FluentFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
         0: .line 943
            aload 0 /* this */
            getstatic com.google.common.util.concurrent.ClosingFuture$State.OPEN:Lcom/google/common/util/concurrent/ClosingFuture$State;
            getstatic com.google.common.util.concurrent.ClosingFuture$State.WILL_CLOSE:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.compareAndUpdateState:(Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)Z
            ifeq 7
         1: .line 944
            getstatic com.google.common.util.concurrent.ClosingFuture.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINER:Ljava/util/logging/Level;
            ldc "will close {0}"
            aload 0 /* this */
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
         2: .line 945
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
         3: .line 946
            new com.google.common.util.concurrent.ClosingFuture$8
            dup
            aload 0 /* this */
            invokespecial com.google.common.util.concurrent.ClosingFuture$8.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;)V
         4: .line 954
            invokestatic com.google.common.util.concurrent.MoreExecutors.directExecutor:()Ljava/util/concurrent/Executor;
         5: .line 945
            invokevirtual com.google.common.util.concurrent.FluentFuture.addListener:(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V
         6: .line 955
            goto 16
         7: .line 956
      StackMap locals:
      StackMap stack:
            invokestatic com.google.common.util.concurrent.ClosingFuture.$SWITCH_TABLE$com$google$common$util$concurrent$ClosingFuture$State:()[I
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.ClosingFuture$State
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            iaload
            tableswitch { // 1 - 6
                    1: 15
                    2: 8
                    3: 14
                    4: 14
                    5: 14
                    6: 11
              default: 16
          }
         8: .line 958
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         9: .line 959
            ldc "Cannot call finishToFuture() after deriving another step"
        10: .line 958
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 962
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
        12: .line 963
            ldc "Cannot call finishToFuture() after calling finishToValueAndCloser()"
        13: .line 962
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 968
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            ldc "Cannot call finishToFuture() twice"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 971
      StackMap locals:
      StackMap stack:
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        16: .line 974
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            areturn
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   17     0  this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    Signature: ()Lcom/google/common/util/concurrent/FluentFuture<TV;>;

  public void finishToValueAndCloser(com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer<? super V>, java.util.concurrent.Executor);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloserConsumer;Ljava/util/concurrent/Executor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer consumer
        start local 2 // java.util.concurrent.Executor executor
         0: .line 990
            aload 1 /* consumer */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 991
            aload 0 /* this */
            getstatic com.google.common.util.concurrent.ClosingFuture$State.OPEN:Lcom/google/common/util/concurrent/ClosingFuture$State;
            getstatic com.google.common.util.concurrent.ClosingFuture$State.WILL_CREATE_VALUE_AND_CLOSER:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.compareAndUpdateState:(Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)Z
            ifne 11
         2: .line 992
            invokestatic com.google.common.util.concurrent.ClosingFuture.$SWITCH_TABLE$com$google$common$util$concurrent$ClosingFuture$State:()[I
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.ClosingFuture$State
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            iaload
            tableswitch { // 1 - 6
                    1: 10
                    2: 3
                    3: 6
                    4: 6
                    5: 6
                    6: 9
              default: 10
          }
         3: .line 994
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         4: .line 995
            ldc "Cannot call finishToValueAndCloser() after deriving another step"
         5: .line 994
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 1000
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         7: .line 1001
            ldc "Cannot call finishToValueAndCloser() after calling finishToFuture()"
         8: .line 1000
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 1004
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            ldc "Cannot call finishToValueAndCloser() twice"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 1009
      StackMap locals:
      StackMap stack:
            new java.lang.AssertionError
            dup
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        11: .line 1011
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
        12: .line 1012
            new com.google.common.util.concurrent.ClosingFuture$9
            dup
            aload 0 /* this */
            aload 1 /* consumer */
            invokespecial com.google.common.util.concurrent.ClosingFuture$9.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloserConsumer;)V
        13: .line 1018
            aload 2 /* executor */
        14: .line 1011
            invokevirtual com.google.common.util.concurrent.FluentFuture.addListener:(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V
        15: .line 1019
            return
        end local 2 // java.util.concurrent.Executor executor
        end local 1 // com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer consumer
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   16     0      this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0   16     1  consumer  Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloserConsumer<-TV;>;
            0   16     2  executor  Ljava/util/concurrent/Executor;
    Signature: (Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloserConsumer<-TV;>;Ljava/util/concurrent/Executor;)V
    MethodParameters:
          Name  Flags
      consumer  final
      executor  

  private static <C, V extends C> void provideValueAndCloser(com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer<C>, com.google.common.util.concurrent.ClosingFuture<V>);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloserConsumer;Lcom/google/common/util/concurrent/ClosingFuture;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer consumer
        start local 1 // com.google.common.util.concurrent.ClosingFuture closingFuture
         0: .line 1023
            aload 0 /* consumer */
            new com.google.common.util.concurrent.ClosingFuture$ValueAndCloser
            dup
            aload 1 /* closingFuture */
            invokespecial com.google.common.util.concurrent.ClosingFuture$ValueAndCloser.<init>:(Lcom/google/common/util/concurrent/ClosingFuture;)V
            invokeinterface com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer.accept:(Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloser;)V
         1: .line 1024
            return
        end local 1 // com.google.common.util.concurrent.ClosingFuture closingFuture
        end local 0 // com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer consumer
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0       consumer  Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloserConsumer<TC;>;
            0    2     1  closingFuture  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    Signature: <C:Ljava/lang/Object;V:TC;>(Lcom/google/common/util/concurrent/ClosingFuture$ValueAndCloserConsumer<TC;>;Lcom/google/common/util/concurrent/ClosingFuture<TV;>;)V
    MethodParameters:
               Name  Flags
      consumer       
      closingFuture  

  public boolean cancel(boolean);
    descriptor: (Z)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // boolean mayInterruptIfRunning
         0: .line 1044
            getstatic com.google.common.util.concurrent.ClosingFuture.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINER:Ljava/util/logging/Level;
            ldc "cancelling {0}"
            aload 0 /* this */
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
         1: .line 1045
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            iload 1 /* mayInterruptIfRunning */
            invokevirtual com.google.common.util.concurrent.FluentFuture.cancel:(Z)Z
            istore 2 /* cancelled */
        start local 2 // boolean cancelled
         2: .line 1046
            iload 2 /* cancelled */
            ifeq 4
         3: .line 1047
            aload 0 /* this */
            invokevirtual com.google.common.util.concurrent.ClosingFuture.close:()V
         4: .line 1049
      StackMap locals: int
      StackMap stack:
            iload 2 /* cancelled */
            ireturn
        end local 2 // boolean cancelled
        end local 1 // boolean mayInterruptIfRunning
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    5     0                   this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    5     1  mayInterruptIfRunning  Z
            2    5     2              cancelled  Z
    RuntimeInvisibleAnnotations: 
      com.google.errorprone.annotations.CanIgnoreReturnValue()
    MethodParameters:
                       Name  Flags
      mayInterruptIfRunning  

  private void close();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
         0: .line 1053
            getstatic com.google.common.util.concurrent.ClosingFuture.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINER:Ljava/util/logging/Level;
            ldc "closing {0}"
            aload 0 /* this */
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
         1: .line 1054
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.closeables:Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$CloseableList.close:()V
         2: .line 1055
            return
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;

  private <U> com.google.common.util.concurrent.ClosingFuture<U> derive(com.google.common.util.concurrent.FluentFuture<U>);
    descriptor: (Lcom/google/common/util/concurrent/FluentFuture;)Lcom/google/common/util/concurrent/ClosingFuture;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.FluentFuture future
         0: .line 1058
            new com.google.common.util.concurrent.ClosingFuture
            dup
            aload 1 /* future */
            invokespecial com.google.common.util.concurrent.ClosingFuture.<init>:(Lcom/google/common/util/concurrent/ListenableFuture;)V
            astore 2 /* derived */
        start local 2 // com.google.common.util.concurrent.ClosingFuture derived
         1: .line 1059
            aload 0 /* this */
            aload 2 /* derived */
            getfield com.google.common.util.concurrent.ClosingFuture.closeables:Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.becomeSubsumedInto:(Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;)V
         2: .line 1060
            aload 2 /* derived */
            areturn
        end local 2 // com.google.common.util.concurrent.ClosingFuture derived
        end local 1 // com.google.common.util.concurrent.FluentFuture future
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    3     1   future  Lcom/google/common/util/concurrent/FluentFuture<TU;>;
            1    3     2  derived  Lcom/google/common/util/concurrent/ClosingFuture<TU;>;
    Signature: <U:Ljava/lang/Object;>(Lcom/google/common/util/concurrent/FluentFuture<TU;>;)Lcom/google/common/util/concurrent/ClosingFuture<TU;>;
    MethodParameters:
        Name  Flags
      future  

  private void becomeSubsumedInto(com.google.common.util.concurrent.ClosingFuture$CloseableList);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ClosingFuture$CloseableList otherCloseables
         0: .line 1064
            aload 0 /* this */
            getstatic com.google.common.util.concurrent.ClosingFuture$State.OPEN:Lcom/google/common/util/concurrent/ClosingFuture$State;
            getstatic com.google.common.util.concurrent.ClosingFuture$State.SUBSUMED:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture.checkAndUpdateState:(Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)V
         1: .line 1065
            aload 1 /* otherCloseables */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.closeables:Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
            invokestatic com.google.common.util.concurrent.MoreExecutors.directExecutor:()Ljava/util/concurrent/Executor;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$CloseableList.add:(Ljava/lang/AutoCloseable;Ljava/util/concurrent/Executor;)V
         2: .line 1066
            return
        end local 1 // com.google.common.util.concurrent.ClosingFuture$CloseableList otherCloseables
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    3     0             this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    3     1  otherCloseables  Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
    MethodParameters:
                 Name  Flags
      otherCloseables  

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
         0: .line 2025
            aload 0 /* this */
            invokestatic com.google.common.base.MoreObjects.toStringHelper:(Ljava/lang/Object;)Lcom/google/common/base/MoreObjects$ToStringHelper;
            ldc "state"
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            invokevirtual com.google.common.base.MoreObjects$ToStringHelper.add:(Ljava/lang/String;Ljava/lang/Object;)Lcom/google/common/base/MoreObjects$ToStringHelper;
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.future:Lcom/google/common/util/concurrent/FluentFuture;
            invokevirtual com.google.common.base.MoreObjects$ToStringHelper.addValue:(Ljava/lang/Object;)Lcom/google/common/base/MoreObjects$ToStringHelper;
            invokevirtual com.google.common.base.MoreObjects$ToStringHelper.toString:()Ljava/lang/String;
            areturn
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;

  protected void finalize();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
         0: .line 2030
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.ClosingFuture$State
            getstatic com.google.common.util.concurrent.ClosingFuture$State.OPEN:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.equals:(Ljava/lang/Object;)Z
            ifeq 3
         1: .line 2031
            getstatic com.google.common.util.concurrent.ClosingFuture.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.SEVERE:Ljava/util/logging/Level;
            ldc "Uh oh! An open ClosingFuture has leaked and will close: {0}"
            aload 0 /* this */
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
         2: .line 2032
            aload 0 /* this */
            invokevirtual com.google.common.util.concurrent.ClosingFuture.finishToFuture:()Lcom/google/common/util/concurrent/FluentFuture;
            pop
         3: .line 2034
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;

  private static void closeQuietly(java.lang.AutoCloseable, java.util.concurrent.Executor);
    descriptor: (Ljava/lang/AutoCloseable;Ljava/util/concurrent/Executor;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // java.lang.AutoCloseable closeable
        start local 1 // java.util.concurrent.Executor executor
         0: .line 2037
            aload 0 /* closeable */
            ifnonnull 2
         1: .line 2038
            return
         2: .line 2041
      StackMap locals:
      StackMap stack:
            aload 1 /* executor */
         3: .line 2042
            new com.google.common.util.concurrent.ClosingFuture$10
            dup
            aload 0 /* closeable */
            invokespecial com.google.common.util.concurrent.ClosingFuture$10.<init>:(Ljava/lang/AutoCloseable;)V
         4: .line 2041
            invokeinterface java.util.concurrent.Executor.execute:(Ljava/lang/Runnable;)V
         5: .line 2052
            goto 12
      StackMap locals:
      StackMap stack: java.util.concurrent.RejectedExecutionException
         6: astore 2 /* e */
        start local 2 // java.util.concurrent.RejectedExecutionException e
         7: .line 2053
            getstatic com.google.common.util.concurrent.ClosingFuture.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.WARNING:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 11
         8: .line 2054
            getstatic com.google.common.util.concurrent.ClosingFuture.logger:Ljava/util/logging/Logger;
         9: .line 2055
            getstatic java.util.logging.Level.WARNING:Ljava/util/logging/Level;
            ldc "while submitting close to %s; will close inline"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* executor */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 2 /* e */
        10: .line 2054
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
        11: .line 2057
      StackMap locals: java.util.concurrent.RejectedExecutionException
      StackMap stack:
            aload 0 /* closeable */
            invokestatic com.google.common.util.concurrent.MoreExecutors.directExecutor:()Ljava/util/concurrent/Executor;
            invokestatic com.google.common.util.concurrent.ClosingFuture.closeQuietly:(Ljava/lang/AutoCloseable;Ljava/util/concurrent/Executor;)V
        end local 2 // java.util.concurrent.RejectedExecutionException e
        12: .line 2059
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.util.concurrent.Executor executor
        end local 0 // java.lang.AutoCloseable closeable
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   13     0  closeable  Ljava/lang/AutoCloseable;
            0   13     1   executor  Ljava/util/concurrent/Executor;
            7   12     2          e  Ljava/util/concurrent/RejectedExecutionException;
      Exception table:
        from    to  target  type
           2     5       6  Class java.util.concurrent.RejectedExecutionException
    MethodParameters:
           Name  Flags
      closeable  final
      executor   

  private void checkAndUpdateState(com.google.common.util.concurrent.ClosingFuture$State, com.google.common.util.concurrent.ClosingFuture$State);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ClosingFuture$State oldState
        start local 2 // com.google.common.util.concurrent.ClosingFuture$State newState
         0: .line 2063
            aload 0 /* this */
            aload 1 /* oldState */
            aload 2 /* newState */
            invokevirtual com.google.common.util.concurrent.ClosingFuture.compareAndUpdateState:(Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)Z
         1: .line 2064
            ldc "Expected state to be %s, but it was %s"
         2: .line 2065
            aload 1 /* oldState */
         3: .line 2066
            aload 2 /* newState */
         4: .line 2062
            invokestatic com.google.common.base.Preconditions.checkState:(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 2067
            return
        end local 2 // com.google.common.util.concurrent.ClosingFuture$State newState
        end local 1 // com.google.common.util.concurrent.ClosingFuture$State oldState
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    6     1  oldState  Lcom/google/common/util/concurrent/ClosingFuture$State;
            0    6     2  newState  Lcom/google/common/util/concurrent/ClosingFuture$State;
    Signature: (Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)V
    MethodParameters:
          Name  Flags
      oldState  
      newState  

  private boolean compareAndUpdateState(com.google.common.util.concurrent.ClosingFuture$State, com.google.common.util.concurrent.ClosingFuture$State);
    descriptor: (Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
        start local 1 // com.google.common.util.concurrent.ClosingFuture$State oldState
        start local 2 // com.google.common.util.concurrent.ClosingFuture$State newState
         0: .line 2070
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.state:Ljava/util/concurrent/atomic/AtomicReference;
            aload 1 /* oldState */
            aload 2 /* newState */
            invokevirtual java.util.concurrent.atomic.AtomicReference.compareAndSet:(Ljava/lang/Object;Ljava/lang/Object;)Z
            ireturn
        end local 2 // com.google.common.util.concurrent.ClosingFuture$State newState
        end local 1 // com.google.common.util.concurrent.ClosingFuture$State oldState
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
            0    1     1  oldState  Lcom/google/common/util/concurrent/ClosingFuture$State;
            0    1     2  newState  Lcom/google/common/util/concurrent/ClosingFuture$State;
    Signature: (Lcom/google/common/util/concurrent/ClosingFuture$State;Lcom/google/common/util/concurrent/ClosingFuture$State;)Z
    MethodParameters:
          Name  Flags
      oldState  
      newState  

  java.util.concurrent.CountDownLatch whenClosedCountDown();
    descriptor: ()Ljava/util/concurrent/CountDownLatch;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.ClosingFuture this
         0: .line 2161
            aload 0 /* this */
            getfield com.google.common.util.concurrent.ClosingFuture.closeables:Lcom/google/common/util/concurrent/ClosingFuture$CloseableList;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$CloseableList.whenClosedCountDown:()Ljava/util/concurrent/CountDownLatch;
            areturn
        end local 0 // com.google.common.util.concurrent.ClosingFuture this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/util/concurrent/ClosingFuture<TV;>;
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.VisibleForTesting()
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.google.common.annotations.VisibleForTesting()

  static int[] $SWITCH_TABLE$com$google$common$util$concurrent$ClosingFuture$State();
    descriptor: ()[I
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 194
            getstatic com.google.common.util.concurrent.ClosingFuture.$SWITCH_TABLE$com$google$common$util$concurrent$ClosingFuture$State:[I
            dup
            ifnull 1
            areturn
      StackMap locals:
      StackMap stack: int[]
         1: pop
            invokestatic com.google.common.util.concurrent.ClosingFuture$State.values:()[Lcom/google/common/util/concurrent/ClosingFuture$State;
            arraylength
            newarray 10
            astore 0
         2: aload 0
            getstatic com.google.common.util.concurrent.ClosingFuture$State.CLOSED:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            iconst_5
            iastore
         3: goto 5
      StackMap locals: int[]
      StackMap stack: java.lang.NoSuchFieldError
         4: pop
      StackMap locals:
      StackMap stack:
         5: aload 0
            getstatic com.google.common.util.concurrent.ClosingFuture$State.CLOSING:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            iconst_4
            iastore
         6: goto 8
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
         7: pop
      StackMap locals:
      StackMap stack:
         8: aload 0
            getstatic com.google.common.util.concurrent.ClosingFuture$State.OPEN:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            iconst_1
            iastore
         9: goto 11
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        10: pop
      StackMap locals:
      StackMap stack:
        11: aload 0
            getstatic com.google.common.util.concurrent.ClosingFuture$State.SUBSUMED:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            iconst_2
            iastore
        12: goto 14
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        13: pop
      StackMap locals:
      StackMap stack:
        14: aload 0
            getstatic com.google.common.util.concurrent.ClosingFuture$State.WILL_CLOSE:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            iconst_3
            iastore
        15: goto 17
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        16: pop
      StackMap locals:
      StackMap stack:
        17: aload 0
            getstatic com.google.common.util.concurrent.ClosingFuture$State.WILL_CREATE_VALUE_AND_CLOSER:Lcom/google/common/util/concurrent/ClosingFuture$State;
            invokevirtual com.google.common.util.concurrent.ClosingFuture$State.ordinal:()I
            bipush 6
            iastore
        18: goto 20
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        19: pop
      StackMap locals:
      StackMap stack:
        20: aload 0
            dup
            putstatic com.google.common.util.concurrent.ClosingFuture.$SWITCH_TABLE$com$google$common$util$concurrent$ClosingFuture$State:[I
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.NoSuchFieldError
           5     6       7  Class java.lang.NoSuchFieldError
           8     9      10  Class java.lang.NoSuchFieldError
          11    12      13  Class java.lang.NoSuchFieldError
          14    15      16  Class java.lang.NoSuchFieldError
          17    18      19  Class java.lang.NoSuchFieldError
}
Signature: <V:Ljava/lang/Object;>Ljava/lang/Object;
SourceFile: "ClosingFuture.java"
NestMembers:
  com.google.common.util.concurrent.ClosingFuture$1  com.google.common.util.concurrent.ClosingFuture$10  com.google.common.util.concurrent.ClosingFuture$2  com.google.common.util.concurrent.ClosingFuture$3  com.google.common.util.concurrent.ClosingFuture$4  com.google.common.util.concurrent.ClosingFuture$5  com.google.common.util.concurrent.ClosingFuture$6  com.google.common.util.concurrent.ClosingFuture$7  com.google.common.util.concurrent.ClosingFuture$8  com.google.common.util.concurrent.ClosingFuture$9  com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction  com.google.common.util.concurrent.ClosingFuture$CloseableList  com.google.common.util.concurrent.ClosingFuture$ClosingCallable  com.google.common.util.concurrent.ClosingFuture$ClosingFunction  com.google.common.util.concurrent.ClosingFuture$Combiner  com.google.common.util.concurrent.ClosingFuture$Combiner$1  com.google.common.util.concurrent.ClosingFuture$Combiner$2  com.google.common.util.concurrent.ClosingFuture$Combiner$3  com.google.common.util.concurrent.ClosingFuture$Combiner$AsyncCombiningCallable  com.google.common.util.concurrent.ClosingFuture$Combiner$CombiningCallable  com.google.common.util.concurrent.ClosingFuture$Combiner2  com.google.common.util.concurrent.ClosingFuture$Combiner2$1  com.google.common.util.concurrent.ClosingFuture$Combiner2$2  com.google.common.util.concurrent.ClosingFuture$Combiner2$AsyncClosingFunction2  com.google.common.util.concurrent.ClosingFuture$Combiner2$ClosingFunction2  com.google.common.util.concurrent.ClosingFuture$Combiner3  com.google.common.util.concurrent.ClosingFuture$Combiner3$1  com.google.common.util.concurrent.ClosingFuture$Combiner3$2  com.google.common.util.concurrent.ClosingFuture$Combiner3$AsyncClosingFunction3  com.google.common.util.concurrent.ClosingFuture$Combiner3$ClosingFunction3  com.google.common.util.concurrent.ClosingFuture$Combiner4  com.google.common.util.concurrent.ClosingFuture$Combiner4$1  com.google.common.util.concurrent.ClosingFuture$Combiner4$2  com.google.common.util.concurrent.ClosingFuture$Combiner4$AsyncClosingFunction4  com.google.common.util.concurrent.ClosingFuture$Combiner4$ClosingFunction4  com.google.common.util.concurrent.ClosingFuture$Combiner5  com.google.common.util.concurrent.ClosingFuture$Combiner5$1  com.google.common.util.concurrent.ClosingFuture$Combiner5$2  com.google.common.util.concurrent.ClosingFuture$Combiner5$AsyncClosingFunction5  com.google.common.util.concurrent.ClosingFuture$Combiner5$ClosingFunction5  com.google.common.util.concurrent.ClosingFuture$DeferredCloser  com.google.common.util.concurrent.ClosingFuture$Peeker  com.google.common.util.concurrent.ClosingFuture$State  com.google.common.util.concurrent.ClosingFuture$ValueAndCloser  com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer
InnerClasses:
  public final ToStringHelper = com.google.common.base.MoreObjects$ToStringHelper of com.google.common.base.MoreObjects
  com.google.common.util.concurrent.ClosingFuture$1
  com.google.common.util.concurrent.ClosingFuture$10
  com.google.common.util.concurrent.ClosingFuture$2
  com.google.common.util.concurrent.ClosingFuture$3
  com.google.common.util.concurrent.ClosingFuture$4
  com.google.common.util.concurrent.ClosingFuture$5
  com.google.common.util.concurrent.ClosingFuture$6
  com.google.common.util.concurrent.ClosingFuture$7
  com.google.common.util.concurrent.ClosingFuture$8
  com.google.common.util.concurrent.ClosingFuture$9
  public abstract AsyncClosingFunction = com.google.common.util.concurrent.ClosingFuture$AsyncClosingFunction of com.google.common.util.concurrent.ClosingFuture
  private final CloseableList = com.google.common.util.concurrent.ClosingFuture$CloseableList of com.google.common.util.concurrent.ClosingFuture
  public abstract ClosingCallable = com.google.common.util.concurrent.ClosingFuture$ClosingCallable of com.google.common.util.concurrent.ClosingFuture
  public abstract ClosingFunction = com.google.common.util.concurrent.ClosingFuture$ClosingFunction of com.google.common.util.concurrent.ClosingFuture
  public Combiner = com.google.common.util.concurrent.ClosingFuture$Combiner of com.google.common.util.concurrent.ClosingFuture
  public final Combiner2 = com.google.common.util.concurrent.ClosingFuture$Combiner2 of com.google.common.util.concurrent.ClosingFuture
  public final Combiner3 = com.google.common.util.concurrent.ClosingFuture$Combiner3 of com.google.common.util.concurrent.ClosingFuture
  public final Combiner4 = com.google.common.util.concurrent.ClosingFuture$Combiner4 of com.google.common.util.concurrent.ClosingFuture
  public final Combiner5 = com.google.common.util.concurrent.ClosingFuture$Combiner5 of com.google.common.util.concurrent.ClosingFuture
  public final DeferredCloser = com.google.common.util.concurrent.ClosingFuture$DeferredCloser of com.google.common.util.concurrent.ClosingFuture
  public final Peeker = com.google.common.util.concurrent.ClosingFuture$Peeker of com.google.common.util.concurrent.ClosingFuture
  final State = com.google.common.util.concurrent.ClosingFuture$State of com.google.common.util.concurrent.ClosingFuture
  public final ValueAndCloser = com.google.common.util.concurrent.ClosingFuture$ValueAndCloser of com.google.common.util.concurrent.ClosingFuture
  public abstract ValueAndCloserConsumer = com.google.common.util.concurrent.ClosingFuture$ValueAndCloserConsumer of com.google.common.util.concurrent.ClosingFuture
    RuntimeVisibleAnnotations: 
      com.google.errorprone.annotations.DoNotMock(value = "Use ClosingFuture.from(Futures.immediate*Future)")
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.Beta()