public class org.apache.catalina.servlets.CGIServlet$CGIRunner
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.servlets.CGIServlet$CGIRunner
  super_class: java.lang.Object
{
  private final java.lang.String command;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.Hashtable<java.lang.String, java.lang.String> env;
    descriptor: Ljava/util/Hashtable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;

  private final java.io.File wd;
    descriptor: Ljava/io/File;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.ArrayList<java.lang.String> params;
    descriptor: Ljava/util/ArrayList;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/ArrayList<Ljava/lang/String;>;

  private java.io.InputStream stdin;
    descriptor: Ljava/io/InputStream;
    flags: (0x0002) ACC_PRIVATE

  private jakarta.servlet.http.HttpServletResponse response;
    descriptor: Ljakarta/servlet/http/HttpServletResponse;
    flags: (0x0002) ACC_PRIVATE

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

  final org.apache.catalina.servlets.CGIServlet this$0;
    descriptor: Lorg/apache/catalina/servlets/CGIServlet;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  protected void <init>(java.lang.String, java.util.Hashtable<java.lang.String, java.lang.String>, java.io.File, java.util.ArrayList<java.lang.String>);
    descriptor: (Lorg/apache/catalina/servlets/CGIServlet;Ljava/lang/String;Ljava/util/Hashtable;Ljava/io/File;Ljava/util/ArrayList;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=6, args_size=6
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
        start local 2 // java.lang.String command
        start local 3 // java.util.Hashtable env
        start local 4 // java.io.File wd
        start local 5 // java.util.ArrayList params
         0: .line 1459
            aload 0 /* this */
            aload 1
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
         1: .line 1458
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         2: .line 1435
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.stdin:Ljava/io/InputStream;
         3: .line 1438
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.response:Ljakarta/servlet/http/HttpServletResponse;
         4: .line 1441
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.readyToRun:Z
         5: .line 1460
            aload 0 /* this */
            aload 2 /* command */
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
         6: .line 1461
            aload 0 /* this */
            aload 3 /* env */
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.env:Ljava/util/Hashtable;
         7: .line 1462
            aload 0 /* this */
            aload 4 /* wd */
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.wd:Ljava/io/File;
         8: .line 1463
            aload 0 /* this */
            aload 5 /* params */
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.params:Ljava/util/ArrayList;
         9: .line 1464
            aload 0 /* this */
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.updateReadyStatus:()V
        10: .line 1465
            return
        end local 5 // java.util.ArrayList params
        end local 4 // java.io.File wd
        end local 3 // java.util.Hashtable env
        end local 2 // java.lang.String command
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   11     0     this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
            0   11     2  command  Ljava/lang/String;
            0   11     3      env  Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;
            0   11     4       wd  Ljava/io/File;
            0   11     5   params  Ljava/util/ArrayList<Ljava/lang/String;>;
    Signature: (Ljava/lang/String;Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;Ljava/io/File;Ljava/util/ArrayList<Ljava/lang/String;>;)V
    MethodParameters:
         Name  Flags
      this$0   final
      command  
      env      
      wd       
      params   

  protected void updateReadyStatus();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
         0: .line 1472
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
            ifnull 7
         1: .line 1473
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.env:Ljava/util/Hashtable;
            ifnull 7
         2: .line 1474
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.wd:Ljava/io/File;
            ifnull 7
         3: .line 1475
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.params:Ljava/util/ArrayList;
            ifnull 7
         4: .line 1476
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.response:Ljakarta/servlet/http/HttpServletResponse;
            ifnull 7
         5: .line 1477
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.readyToRun:Z
         6: .line 1478
            goto 8
         7: .line 1479
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.readyToRun:Z
         8: .line 1481
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;

  protected boolean isReady();
    descriptor: ()Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
         0: .line 1491
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.readyToRun:Z
            ireturn
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;

  protected void setResponse(jakarta.servlet.http.HttpServletResponse);
    descriptor: (Ljakarta/servlet/http/HttpServletResponse;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
        start local 1 // jakarta.servlet.http.HttpServletResponse response
         0: .line 1503
            aload 0 /* this */
            aload 1 /* response */
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.response:Ljakarta/servlet/http/HttpServletResponse;
         1: .line 1504
            aload 0 /* this */
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.updateReadyStatus:()V
         2: .line 1505
            return
        end local 1 // jakarta.servlet.http.HttpServletResponse response
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0      this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
            0    3     1  response  Ljakarta/servlet/http/HttpServletResponse;
    MethodParameters:
          Name  Flags
      response  

  protected void setInput(java.io.InputStream);
    descriptor: (Ljava/io/InputStream;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
        start local 1 // java.io.InputStream stdin
         0: .line 1515
            aload 0 /* this */
            aload 1 /* stdin */
            putfield org.apache.catalina.servlets.CGIServlet$CGIRunner.stdin:Ljava/io/InputStream;
         1: .line 1516
            aload 0 /* this */
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.updateReadyStatus:()V
         2: .line 1517
            return
        end local 1 // java.io.InputStream stdin
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    3     0   this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
            0    3     1  stdin  Ljava/io/InputStream;
    MethodParameters:
       Name  Flags
      stdin  

  protected java.lang.String[] hashToStringArray(java.util.Hashtable<java.lang.String, ?>);
    descriptor: (Ljava/util/Hashtable;)[Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
        start local 1 // java.util.Hashtable h
         0: .line 1534
            new java.util.Vector
            dup
            invokespecial java.util.Vector.<init>:()V
            astore 2 /* v */
        start local 2 // java.util.Vector v
         1: .line 1535
            aload 1 /* h */
            invokevirtual java.util.Hashtable.keys:()Ljava/util/Enumeration;
            astore 3 /* e */
        start local 3 // java.util.Enumeration e
         2: .line 1536
            goto 5
         3: .line 1537
      StackMap locals: java.util.Vector java.util.Enumeration
      StackMap stack:
            aload 3 /* e */
            invokeinterface java.util.Enumeration.nextElement:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 4 /* k */
        start local 4 // java.lang.String k
         4: .line 1538
            aload 2 /* v */
            new java.lang.StringBuilder
            dup
            aload 4 /* k */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* h */
            aload 4 /* k */
            invokevirtual java.util.Hashtable.get:(Ljava/lang/Object;)Ljava/lang/Object;
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.util.Vector.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // java.lang.String k
         5: .line 1536
      StackMap locals:
      StackMap stack:
            aload 3 /* e */
            invokeinterface java.util.Enumeration.hasMoreElements:()Z
            ifne 3
         6: .line 1540
            aload 2 /* v */
            invokevirtual java.util.Vector.size:()I
            anewarray java.lang.String
            astore 4 /* strArr */
        start local 4 // java.lang.String[] strArr
         7: .line 1541
            aload 2 /* v */
            aload 4 /* strArr */
            invokevirtual java.util.Vector.copyInto:([Ljava/lang/Object;)V
         8: .line 1542
            aload 4 /* strArr */
            areturn
        end local 4 // java.lang.String[] strArr
        end local 3 // java.util.Enumeration e
        end local 2 // java.util.Vector v
        end local 1 // java.util.Hashtable h
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0    this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
            0    9     1       h  Ljava/util/Hashtable<Ljava/lang/String;*>;
            1    9     2       v  Ljava/util/Vector<Ljava/lang/String;>;
            2    9     3       e  Ljava/util/Enumeration<Ljava/lang/String;>;
            4    5     4       k  Ljava/lang/String;
            7    9     4  strArr  [Ljava/lang/String;
    Exceptions:
      throws java.lang.NullPointerException
    Signature: (Ljava/util/Hashtable<Ljava/lang/String;*>;)[Ljava/lang/String;
    MethodParameters:
      Name  Flags
      h     

  protected void run();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=21, args_size=1
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
         0: .line 1604
            aload 0 /* this */
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.isReady:()Z
            ifne 2
         1: .line 1605
            new java.io.IOException
            dup
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ": not ready to run."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 1608
      StackMap locals:
      StackMap stack:
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 4
         3: .line 1609
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "envp: ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.env:Ljava/util/Hashtable;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "], command: ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
         4: .line 1612
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
            new java.lang.StringBuilder
            dup
            getstatic java.io.File.separator:Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            getstatic java.io.File.separator:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifne 7
         5: .line 1613
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
            new java.lang.StringBuilder
            dup
            getstatic java.io.File.separator:Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ".."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifne 7
         6: .line 1614
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
            new java.lang.StringBuilder
            dup
            ldc ".."
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            getstatic java.io.File.separator:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 12
         7: .line 1615
      StackMap locals:
      StackMap stack:
            new java.io.IOException
            dup
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         8: .line 1616
            ldc "Illegal Character in CGI command "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         9: .line 1617
            ldc "path ('.' or '..') detected.  Not "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        10: .line 1618
            ldc "running CGI ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 1615
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 1625
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 1 /* rt */
        start local 1 // java.lang.Runtime rt
        13: .line 1626
            aconst_null
            astore 2 /* cgiHeaderReader */
        start local 2 // java.io.BufferedReader cgiHeaderReader
        14: .line 1627
            aconst_null
            astore 3 /* cgiOutput */
        start local 3 // java.io.InputStream cgiOutput
        15: .line 1628
            aconst_null
            astore 4 /* commandsStdErr */
        start local 4 // java.io.BufferedReader commandsStdErr
        16: .line 1629
            aconst_null
            astore 5 /* errReaderThread */
        start local 5 // java.lang.Thread errReaderThread
        17: .line 1630
            aconst_null
            astore 6 /* commandsStdIn */
        start local 6 // java.io.BufferedOutputStream commandsStdIn
        18: .line 1631
            aconst_null
            astore 7 /* proc */
        start local 7 // java.lang.Process proc
        19: .line 1632
            iconst_m1
            istore 8 /* bufRead */
        start local 8 // int bufRead
        20: .line 1634
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 9 /* cmdAndArgs */
        start local 9 // java.util.List cmdAndArgs
        21: .line 1635
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            getfield org.apache.catalina.servlets.CGIServlet.cgiExecutable:Ljava/lang/String;
            invokevirtual java.lang.String.length:()I
            ifeq 23
        22: .line 1636
            aload 9 /* cmdAndArgs */
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            getfield org.apache.catalina.servlets.CGIServlet.cgiExecutable:Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        23: .line 1638
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.Runtime java.io.BufferedReader java.io.InputStream java.io.BufferedReader java.lang.Thread java.io.BufferedOutputStream java.lang.Process int java.util.List
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            getfield org.apache.catalina.servlets.CGIServlet.cgiExecutableArgs:Ljava/util/List;
            ifnull 25
        24: .line 1639
            aload 9 /* cmdAndArgs */
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            getfield org.apache.catalina.servlets.CGIServlet.cgiExecutableArgs:Ljava/util/List;
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
        25: .line 1641
      StackMap locals:
      StackMap stack:
            aload 9 /* cmdAndArgs */
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.command:Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        26: .line 1642
            aload 9 /* cmdAndArgs */
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.params:Ljava/util/ArrayList;
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
        27: .line 1645
            invokestatic java.lang.Runtime.getRuntime:()Ljava/lang/Runtime;
            astore 1 /* rt */
        28: .line 1646
            aload 1 /* rt */
        29: .line 1647
            aload 9 /* cmdAndArgs */
            iconst_0
            anewarray java.lang.String
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.lang.String[]
        30: .line 1648
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.env:Ljava/util/Hashtable;
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.hashToStringArray:(Ljava/util/Hashtable;)[Ljava/lang/String;
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.wd:Ljava/io/File;
        31: .line 1646
            invokevirtual java.lang.Runtime.exec:([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
            astore 7 /* proc */
        32: .line 1650
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.env:Ljava/util/Hashtable;
            ldc "CONTENT_LENGTH"
            invokevirtual java.util.Hashtable.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            astore 10 /* sContentLength */
        start local 10 // java.lang.String sContentLength
        33: .line 1652
            ldc ""
            aload 10 /* sContentLength */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 38
        34: .line 1653
            new java.io.BufferedOutputStream
            dup
            aload 7 /* proc */
            invokevirtual java.lang.Process.getOutputStream:()Ljava/io/OutputStream;
            invokespecial java.io.BufferedOutputStream.<init>:(Ljava/io/OutputStream;)V
            astore 6 /* commandsStdIn */
        35: .line 1654
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.stdin:Ljava/io/InputStream;
            aload 6 /* commandsStdIn */
            invokestatic org.apache.catalina.util.IOTools.flow:(Ljava/io/InputStream;Ljava/io/OutputStream;)V
        36: .line 1655
            aload 6 /* commandsStdIn */
            invokevirtual java.io.BufferedOutputStream.flush:()V
        37: .line 1656
            aload 6 /* commandsStdIn */
            invokevirtual java.io.BufferedOutputStream.close:()V
        38: .line 1664
      StackMap locals: java.lang.String
      StackMap stack:
            iconst_1
            istore 11 /* isRunning */
        start local 11 // boolean isRunning
        39: .line 1665
            new java.io.BufferedReader
            dup
        40: .line 1666
            new java.io.InputStreamReader
            dup
            aload 7 /* proc */
            invokevirtual java.lang.Process.getErrorStream:()Ljava/io/InputStream;
            invokespecial java.io.InputStreamReader.<init>:(Ljava/io/InputStream;)V
        41: .line 1665
            invokespecial java.io.BufferedReader.<init>:(Ljava/io/Reader;)V
            astore 4 /* commandsStdErr */
        42: .line 1667
            aload 4 /* commandsStdErr */
            astore 12 /* stdErrRdr */
        start local 12 // java.io.BufferedReader stdErrRdr
        43: .line 1669
            new java.lang.Thread
            dup
            aload 0 /* this */
            aload 12 /* stdErrRdr */
            invokedynamic run(Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;Ljava/io/BufferedReader;)Ljava/lang/Runnable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()V
                  org/apache/catalina/servlets/CGIServlet$CGIRunner.lambda$0(Ljava/io/BufferedReader;)V (7)
                  ()V
            invokespecial java.lang.Thread.<init>:(Ljava/lang/Runnable;)V
            astore 5 /* errReaderThread */
        44: .line 1670
            aload 5 /* errReaderThread */
            invokevirtual java.lang.Thread.start:()V
        45: .line 1673
            new org.apache.catalina.servlets.CGIServlet$HTTPHeaderInputStream
            dup
            aload 7 /* proc */
            invokevirtual java.lang.Process.getInputStream:()Ljava/io/InputStream;
            invokespecial org.apache.catalina.servlets.CGIServlet$HTTPHeaderInputStream.<init>:(Ljava/io/InputStream;)V
        46: .line 1672
            astore 13 /* cgiHeaderStream */
        start local 13 // java.io.InputStream cgiHeaderStream
        47: .line 1675
            new java.io.BufferedReader
            dup
            new java.io.InputStreamReader
            dup
            aload 13 /* cgiHeaderStream */
            invokespecial java.io.InputStreamReader.<init>:(Ljava/io/InputStream;)V
            invokespecial java.io.BufferedReader.<init>:(Ljava/io/Reader;)V
        48: .line 1674
            astore 2 /* cgiHeaderReader */
        49: .line 1681
            iconst_0
            istore 14 /* skipBody */
        start local 14 // boolean skipBody
        50: .line 1683
            goto 92
        51: .line 1686
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.Runtime java.io.BufferedReader java.io.InputStream java.io.BufferedReader java.lang.Thread java.io.BufferedOutputStream java.lang.Process int java.util.List java.lang.String int java.io.BufferedReader java.io.InputStream int
      StackMap stack:
            aconst_null
            astore 15 /* line */
        start local 15 // java.lang.String line
        52: .line 1687
            goto 69
        53: .line 1688
      StackMap locals: java.lang.String
      StackMap stack:
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 55
        54: .line 1689
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "addHeader(\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 15 /* line */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        55: .line 1691
      StackMap locals:
      StackMap stack:
            aload 15 /* line */
            ldc "HTTP"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 58
        56: .line 1692
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.response:Ljakarta/servlet/http/HttpServletResponse;
            aload 0 /* this */
            aload 15 /* line */
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.getSCFromHttpStatusLine:(Ljava/lang/String;)I
            invokevirtual org.apache.catalina.servlets.CGIServlet.setStatus:(Ljakarta/servlet/http/HttpServletResponse;I)Z
            istore 14 /* skipBody */
        57: .line 1693
            goto 69
      StackMap locals:
      StackMap stack:
        58: aload 15 /* line */
            bipush 58
            invokevirtual java.lang.String.indexOf:(I)I
            iflt 68
        59: .line 1695
            aload 15 /* line */
            iconst_0
            aload 15 /* line */
            bipush 58
            invokevirtual java.lang.String.indexOf:(I)I
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
        60: .line 1694
            astore 16 /* header */
        start local 16 // java.lang.String header
        61: .line 1697
            aload 15 /* line */
            aload 15 /* line */
            bipush 58
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_1
            iadd
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
        62: .line 1696
            astore 17 /* value */
        start local 17 // java.lang.String value
        63: .line 1698
            aload 16 /* header */
            ldc "status"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 66
        64: .line 1699
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.response:Ljakarta/servlet/http/HttpServletResponse;
            aload 0 /* this */
            aload 17 /* value */
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.getSCFromCGIStatusHeader:(Ljava/lang/String;)I
            invokevirtual org.apache.catalina.servlets.CGIServlet.setStatus:(Ljakarta/servlet/http/HttpServletResponse;I)Z
            istore 14 /* skipBody */
        65: .line 1700
            goto 69
        66: .line 1701
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.response:Ljakarta/servlet/http/HttpServletResponse;
            aload 16 /* header */
            aload 17 /* value */
            invokeinterface jakarta.servlet.http.HttpServletResponse.addHeader:(Ljava/lang/String;Ljava/lang/String;)V
        end local 17 // java.lang.String value
        end local 16 // java.lang.String header
        67: .line 1703
            goto 69
        68: .line 1704
      StackMap locals:
      StackMap stack:
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runBadHeader"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 15 /* line */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;)V
        69: .line 1687
      StackMap locals:
      StackMap stack:
            aload 2 /* cgiHeaderReader */
            invokevirtual java.io.BufferedReader.readLine:()Ljava/lang/String;
            dup
            astore 15 /* line */
            ifnull 70
            aload 15 /* line */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 53
        70: .line 1709
      StackMap locals:
      StackMap stack:
            sipush 2048
            newarray 8
            astore 16 /* bBuf */
        start local 16 // byte[] bBuf
        71: .line 1711
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.response:Ljakarta/servlet/http/HttpServletResponse;
            invokeinterface jakarta.servlet.http.HttpServletResponse.getOutputStream:()Ljakarta/servlet/ServletOutputStream;
            astore 17 /* out */
        start local 17 // java.io.OutputStream out
        72: .line 1712
            aload 7 /* proc */
            invokevirtual java.lang.Process.getInputStream:()Ljava/io/InputStream;
            astore 3 /* cgiOutput */
        73: .line 1715
            goto 77
        74: .line 1716
      StackMap locals: byte[] java.io.OutputStream
      StackMap stack:
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 76
        75: .line 1717
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "output "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 8 /* bufRead */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " bytes of data"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        76: .line 1719
      StackMap locals:
      StackMap stack:
            aload 17 /* out */
            aload 16 /* bBuf */
            iconst_0
            iload 8 /* bufRead */
            invokevirtual java.io.OutputStream.write:([BII)V
        77: .line 1715
      StackMap locals:
      StackMap stack:
            iload 14 /* skipBody */
            ifne 83
            aload 3 /* cgiOutput */
            aload 16 /* bBuf */
            invokevirtual java.io.InputStream.read:([B)I
            dup
            istore 8 /* bufRead */
            iconst_m1
            if_icmpne 74
        78: .line 1721
            goto 83
      StackMap locals:
      StackMap stack: java.lang.Throwable
        79: astore 18
        80: .line 1725
            iload 8 /* bufRead */
            iconst_m1
            if_icmpeq 82
        81: .line 1726
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 3 /* cgiOutput */
            aload 16 /* bBuf */
            invokevirtual java.io.InputStream.read:([B)I
            dup
            istore 8 /* bufRead */
            iconst_m1
            if_icmpne 81
        82: .line 1730
      StackMap locals:
      StackMap stack:
            aload 18
            athrow
        83: .line 1725
      StackMap locals:
      StackMap stack:
            iload 8 /* bufRead */
            iconst_m1
            if_icmpeq 85
        84: .line 1726
      StackMap locals:
      StackMap stack:
            aload 3 /* cgiOutput */
            aload 16 /* bBuf */
            invokevirtual java.io.InputStream.read:([B)I
            dup
            istore 8 /* bufRead */
            iconst_m1
            if_icmpne 84
        85: .line 1732
      StackMap locals:
      StackMap stack:
            aload 7 /* proc */
            invokevirtual java.lang.Process.exitValue:()I
            pop
        86: .line 1734
            iconst_0
            istore 11 /* isRunning */
        end local 17 // java.io.OutputStream out
        end local 16 // byte[] bBuf
        end local 15 // java.lang.String line
        87: .line 1736
            goto 92
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.Runtime java.io.BufferedReader java.io.InputStream java.io.BufferedReader java.lang.Thread java.io.BufferedOutputStream java.lang.Process int java.util.List java.lang.String int java.io.BufferedReader java.io.InputStream int
      StackMap stack: java.lang.IllegalThreadStateException
        88: pop
        89: .line 1738
            ldc 500
            invokestatic java.lang.Thread.sleep:(J)V
        90: .line 1739
            goto 92
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        91: pop
        92: .line 1683
      StackMap locals:
      StackMap stack:
            iload 11 /* isRunning */
            ifne 51
        end local 14 // boolean skipBody
        end local 13 // java.io.InputStream cgiHeaderStream
        end local 12 // java.io.BufferedReader stdErrRdr
        end local 11 // boolean isRunning
        end local 10 // java.lang.String sContentLength
        93: .line 1745
            goto 117
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.Runtime java.io.BufferedReader java.io.InputStream java.io.BufferedReader java.lang.Thread java.io.BufferedOutputStream java.lang.Process int java.util.List
      StackMap stack: java.io.IOException
        94: astore 10 /* e */
        start local 10 // java.io.IOException e
        95: .line 1746
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 10 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        96: .line 1747
            aload 10 /* e */
            athrow
        end local 10 // java.io.IOException e
        97: .line 1748
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 19
        98: .line 1750
            aload 2 /* cgiHeaderReader */
            ifnull 103
        99: .line 1752
            aload 2 /* cgiHeaderReader */
            invokevirtual java.io.BufferedReader.close:()V
       100: .line 1753
            goto 103
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.Runtime java.io.BufferedReader java.io.InputStream java.io.BufferedReader java.lang.Thread java.io.BufferedOutputStream java.lang.Process int java.util.List top top top top top top top top top java.lang.Throwable
      StackMap stack: java.io.IOException
       101: astore 20 /* ioe */
        start local 20 // java.io.IOException ioe
       102: .line 1754
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runHeaderReaderFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 20 /* ioe */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 20 // java.io.IOException ioe
       103: .line 1758
      StackMap locals:
      StackMap stack:
            aload 3 /* cgiOutput */
            ifnull 108
       104: .line 1760
            aload 3 /* cgiOutput */
            invokevirtual java.io.InputStream.close:()V
       105: .line 1761
            goto 108
      StackMap locals:
      StackMap stack: java.io.IOException
       106: astore 20 /* ioe */
        start local 20 // java.io.IOException ioe
       107: .line 1762
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runOutputStreamFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 20 /* ioe */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 20 // java.io.IOException ioe
       108: .line 1766
      StackMap locals:
      StackMap stack:
            aload 5 /* errReaderThread */
            ifnull 113
       109: .line 1768
            aload 5 /* errReaderThread */
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            getfield org.apache.catalina.servlets.CGIServlet.stderrTimeout:J
            invokevirtual java.lang.Thread.join:(J)V
       110: .line 1769
            goto 113
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
       111: pop
       112: .line 1770
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runReaderInterrupt"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
       113: .line 1772
      StackMap locals:
      StackMap stack:
            aload 7 /* proc */
            ifnull 116
       114: .line 1773
            aload 7 /* proc */
            invokevirtual java.lang.Process.destroy:()V
       115: .line 1774
            aconst_null
            astore 7 /* proc */
       116: .line 1776
      StackMap locals:
      StackMap stack:
            aload 19
            athrow
       117: .line 1750
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.Runtime java.io.BufferedReader java.io.InputStream java.io.BufferedReader java.lang.Thread java.io.BufferedOutputStream java.lang.Process int java.util.List
      StackMap stack:
            aload 2 /* cgiHeaderReader */
            ifnull 122
       118: .line 1752
            aload 2 /* cgiHeaderReader */
            invokevirtual java.io.BufferedReader.close:()V
       119: .line 1753
            goto 122
      StackMap locals:
      StackMap stack: java.io.IOException
       120: astore 20 /* ioe */
        start local 20 // java.io.IOException ioe
       121: .line 1754
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runHeaderReaderFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 20 /* ioe */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 20 // java.io.IOException ioe
       122: .line 1758
      StackMap locals:
      StackMap stack:
            aload 3 /* cgiOutput */
            ifnull 127
       123: .line 1760
            aload 3 /* cgiOutput */
            invokevirtual java.io.InputStream.close:()V
       124: .line 1761
            goto 127
      StackMap locals:
      StackMap stack: java.io.IOException
       125: astore 20 /* ioe */
        start local 20 // java.io.IOException ioe
       126: .line 1762
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runOutputStreamFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 20 /* ioe */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 20 // java.io.IOException ioe
       127: .line 1766
      StackMap locals:
      StackMap stack:
            aload 5 /* errReaderThread */
            ifnull 132
       128: .line 1768
            aload 5 /* errReaderThread */
            aload 0 /* this */
            getfield org.apache.catalina.servlets.CGIServlet$CGIRunner.this$0:Lorg/apache/catalina/servlets/CGIServlet;
            getfield org.apache.catalina.servlets.CGIServlet.stderrTimeout:J
            invokevirtual java.lang.Thread.join:(J)V
       129: .line 1769
            goto 132
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
       130: pop
       131: .line 1770
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runReaderInterrupt"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
       132: .line 1772
      StackMap locals:
      StackMap stack:
            aload 7 /* proc */
            ifnull 135
       133: .line 1773
            aload 7 /* proc */
            invokevirtual java.lang.Process.destroy:()V
       134: .line 1774
            aconst_null
            astore 7 /* proc */
       135: .line 1777
      StackMap locals:
      StackMap stack:
            return
        end local 9 // java.util.List cmdAndArgs
        end local 8 // int bufRead
        end local 7 // java.lang.Process proc
        end local 6 // java.io.BufferedOutputStream commandsStdIn
        end local 5 // java.lang.Thread errReaderThread
        end local 4 // java.io.BufferedReader commandsStdErr
        end local 3 // java.io.InputStream cgiOutput
        end local 2 // java.io.BufferedReader cgiHeaderReader
        end local 1 // java.lang.Runtime rt
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0  136     0             this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
           13  136     1               rt  Ljava/lang/Runtime;
           14  136     2  cgiHeaderReader  Ljava/io/BufferedReader;
           15  136     3        cgiOutput  Ljava/io/InputStream;
           16  136     4   commandsStdErr  Ljava/io/BufferedReader;
           17  136     5  errReaderThread  Ljava/lang/Thread;
           18  136     6    commandsStdIn  Ljava/io/BufferedOutputStream;
           19  136     7             proc  Ljava/lang/Process;
           20  136     8          bufRead  I
           21  136     9       cmdAndArgs  Ljava/util/List<Ljava/lang/String;>;
           33   93    10   sContentLength  Ljava/lang/String;
           39   93    11        isRunning  Z
           43   93    12        stdErrRdr  Ljava/io/BufferedReader;
           47   93    13  cgiHeaderStream  Ljava/io/InputStream;
           50   93    14         skipBody  Z
           52   87    15             line  Ljava/lang/String;
           61   67    16           header  Ljava/lang/String;
           63   67    17            value  Ljava/lang/String;
           71   87    16             bBuf  [B
           72   87    17              out  Ljava/io/OutputStream;
           95   97    10                e  Ljava/io/IOException;
          102  103    20              ioe  Ljava/io/IOException;
          121  122    20              ioe  Ljava/io/IOException;
          107  108    20              ioe  Ljava/io/IOException;
          126  127    20              ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          73    79      79  any
          51    87      88  Class java.lang.IllegalThreadStateException
          89    90      91  Class java.lang.InterruptedException
          27    93      94  Class java.io.IOException
          27    97      97  any
          99   100     101  Class java.io.IOException
         104   105     106  Class java.io.IOException
         109   110     111  Class java.lang.InterruptedException
         118   119     120  Class java.io.IOException
         123   124     125  Class java.io.IOException
         128   129     130  Class java.lang.InterruptedException
    Exceptions:
      throws java.io.IOException

  private int getSCFromHttpStatusLine(java.lang.String);
    descriptor: (Ljava/lang/String;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=5, args_size=2
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
        start local 1 // java.lang.String line
         0: .line 1787
            aload 1 /* line */
            bipush 32
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_1
            iadd
            istore 2 /* statusStart */
        start local 2 // int statusStart
         1: .line 1789
            iload 2 /* statusStart */
            iconst_1
            if_icmplt 2
            aload 1 /* line */
            invokevirtual java.lang.String.length:()I
            iload 2 /* statusStart */
            iconst_3
            iadd
            if_icmpge 4
         2: .line 1791
      StackMap locals: int
      StackMap stack:
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runInvalidStatus"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* line */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
         3: .line 1792
            sipush 500
            ireturn
         4: .line 1795
      StackMap locals:
      StackMap stack:
            aload 1 /* line */
            iload 2 /* statusStart */
            iload 2 /* statusStart */
            iconst_3
            iadd
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 3 /* status */
        start local 3 // java.lang.String status
         5: .line 1799
            aload 3 /* status */
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
            istore 4 /* statusCode */
        start local 4 // int statusCode
         6: .line 1800
            goto 10
        end local 4 // int statusCode
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.String int java.lang.String
      StackMap stack: java.lang.NumberFormatException
         7: pop
         8: .line 1802
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runInvalidStatus"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* status */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
         9: .line 1803
            sipush 500
            ireturn
        start local 4 // int statusCode
        10: .line 1806
      StackMap locals: int
      StackMap stack:
            iload 4 /* statusCode */
            ireturn
        end local 4 // int statusCode
        end local 3 // java.lang.String status
        end local 2 // int statusStart
        end local 1 // java.lang.String line
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   11     0         this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
            0   11     1         line  Ljava/lang/String;
            1   11     2  statusStart  I
            5   11     3       status  Ljava/lang/String;
            6    7     4   statusCode  I
           10   11     4   statusCode  I
      Exception table:
        from    to  target  type
           5     6       7  Class java.lang.NumberFormatException
    MethodParameters:
      Name  Flags
      line  

  private int getSCFromCGIStatusHeader(java.lang.String);
    descriptor: (Ljava/lang/String;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=4, args_size=2
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
        start local 1 // java.lang.String value
         0: .line 1818
            aload 1 /* value */
            invokevirtual java.lang.String.length:()I
            iconst_3
            if_icmpge 3
         1: .line 1820
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runInvalidStatus"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* value */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
         2: .line 1821
            sipush 500
            ireturn
         3: .line 1824
      StackMap locals:
      StackMap stack:
            aload 1 /* value */
            iconst_0
            iconst_3
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 2 /* status */
        start local 2 // java.lang.String status
         4: .line 1828
            aload 2 /* status */
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
            istore 3 /* statusCode */
        start local 3 // int statusCode
         5: .line 1829
            goto 9
        end local 3 // int statusCode
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.lang.String java.lang.String
      StackMap stack: java.lang.NumberFormatException
         6: pop
         7: .line 1831
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runInvalidStatus"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* status */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
         8: .line 1832
            sipush 500
            ireturn
        start local 3 // int statusCode
         9: .line 1835
      StackMap locals: int
      StackMap stack:
            iload 3 /* statusCode */
            ireturn
        end local 3 // int statusCode
        end local 2 // java.lang.String status
        end local 1 // java.lang.String value
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   10     0        this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
            0   10     1       value  Ljava/lang/String;
            4   10     2      status  Ljava/lang/String;
            5    6     3  statusCode  I
            9   10     3  statusCode  I
      Exception table:
        from    to  target  type
           4     5       6  Class java.lang.NumberFormatException
    MethodParameters:
       Name  Flags
      value  

  private void sendToLog(java.io.BufferedReader);
    descriptor: (Ljava/io/BufferedReader;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=7, args_size=2
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
        start local 1 // java.io.BufferedReader rdr
         0: .line 1839
            aconst_null
            astore 2 /* line */
        start local 2 // java.lang.String line
         1: .line 1840
            iconst_0
            istore 3 /* lineCount */
        start local 3 // int lineCount
         2: .line 1842
            goto 5
         3: .line 1843
      StackMap locals: java.lang.String int
      StackMap stack:
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runStdErr"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* line */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
         4: .line 1844
            iinc 3 /* lineCount */ 1
         5: .line 1842
      StackMap locals:
      StackMap stack:
            aload 1 /* rdr */
            invokevirtual java.io.BufferedReader.readLine:()Ljava/lang/String;
            dup
            astore 2 /* line */
            ifnonnull 3
         6: .line 1846
            goto 20
      StackMap locals:
      StackMap stack: java.io.IOException
         7: astore 4 /* e */
        start local 4 // java.io.IOException e
         8: .line 1847
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runStdErrFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 4 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 4 // java.io.IOException e
         9: .line 1850
            aload 1 /* rdr */
            invokevirtual java.io.BufferedReader.close:()V
        10: .line 1851
            goto 24
      StackMap locals:
      StackMap stack: java.io.IOException
        11: astore 6 /* e */
        start local 6 // java.io.IOException e
        12: .line 1852
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runStdErrFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 6 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 6 // java.io.IOException e
        13: goto 24
        14: .line 1848
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 5
        15: .line 1850
            aload 1 /* rdr */
            invokevirtual java.io.BufferedReader.close:()V
        16: .line 1851
            goto 19
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.io.BufferedReader java.lang.String int top java.lang.Throwable
      StackMap stack: java.io.IOException
        17: astore 6 /* e */
        start local 6 // java.io.IOException e
        18: .line 1852
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runStdErrFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 6 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 6 // java.io.IOException e
        19: .line 1854
      StackMap locals:
      StackMap stack:
            aload 5
            athrow
        20: .line 1850
      StackMap locals: org.apache.catalina.servlets.CGIServlet$CGIRunner java.io.BufferedReader java.lang.String int
      StackMap stack:
            aload 1 /* rdr */
            invokevirtual java.io.BufferedReader.close:()V
        21: .line 1851
            goto 24
      StackMap locals:
      StackMap stack: java.io.IOException
        22: astore 6 /* e */
        start local 6 // java.io.IOException e
        23: .line 1852
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runStdErrFail"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 6 /* e */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 6 // java.io.IOException e
        24: .line 1855
      StackMap locals:
      StackMap stack:
            iload 3 /* lineCount */
            ifle 26
        25: .line 1856
            getstatic org.apache.catalina.servlets.CGIServlet.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.servlets.CGIServlet.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "cgiServlet.runStdErrCount"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            iload 3 /* lineCount */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
        26: .line 1858
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int lineCount
        end local 2 // java.lang.String line
        end local 1 // java.io.BufferedReader rdr
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   27     0       this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
            0   27     1        rdr  Ljava/io/BufferedReader;
            1   27     2       line  Ljava/lang/String;
            2   27     3  lineCount  I
            8    9     4          e  Ljava/io/IOException;
           12   13     6          e  Ljava/io/IOException;
           18   19     6          e  Ljava/io/IOException;
           23   24     6          e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           2     6       7  Class java.io.IOException
           9    10      11  Class java.io.IOException
           2     9      14  any
          15    16      17  Class java.io.IOException
          20    21      22  Class java.io.IOException
    MethodParameters:
      Name  Flags
      rdr   

  private void lambda$0(java.io.BufferedReader);
    descriptor: (Ljava/io/BufferedReader;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
         0: .line 1669
            aload 0 /* this */
            aload 1
            invokevirtual org.apache.catalina.servlets.CGIServlet$CGIRunner.sendToLog:(Ljava/io/BufferedReader;)V
            return
        end local 0 // org.apache.catalina.servlets.CGIServlet$CGIRunner this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/servlets/CGIServlet$CGIRunner;
}
SourceFile: "CGIServlet.java"
NestHost: org.apache.catalina.servlets.CGIServlet
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  protected CGIRunner = org.apache.catalina.servlets.CGIServlet$CGIRunner of org.apache.catalina.servlets.CGIServlet
  protected HTTPHeaderInputStream = org.apache.catalina.servlets.CGIServlet$HTTPHeaderInputStream of org.apache.catalina.servlets.CGIServlet