public class ch.qos.logback.core.subst.NodeToStringTransformer
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: ch.qos.logback.core.subst.NodeToStringTransformer
  super_class: java.lang.Object
{
  final ch.qos.logback.core.subst.Node node;
    descriptor: Lch/qos/logback/core/subst/Node;
    flags: (0x0010) ACC_FINAL

  final ch.qos.logback.core.spi.PropertyContainer propertyContainer0;
    descriptor: Lch/qos/logback/core/spi/PropertyContainer;
    flags: (0x0010) ACC_FINAL

  final ch.qos.logback.core.spi.PropertyContainer propertyContainer1;
    descriptor: Lch/qos/logback/core/spi/PropertyContainer;
    flags: (0x0010) ACC_FINAL

  private static volatile int[] $SWITCH_TABLE$ch$qos$logback$core$subst$Node$Type;
    descriptor: [I
    flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC

  public void <init>(ch.qos.logback.core.subst.Node, ch.qos.logback.core.spi.PropertyContainer, ch.qos.logback.core.spi.PropertyContainer);
    descriptor: (Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node node
        start local 2 // ch.qos.logback.core.spi.PropertyContainer propertyContainer0
        start local 3 // ch.qos.logback.core.spi.PropertyContainer propertyContainer1
         0: .line 35
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 36
            aload 0 /* this */
            aload 1 /* node */
            putfield ch.qos.logback.core.subst.NodeToStringTransformer.node:Lch/qos/logback/core/subst/Node;
         2: .line 37
            aload 0 /* this */
            aload 2 /* propertyContainer0 */
            putfield ch.qos.logback.core.subst.NodeToStringTransformer.propertyContainer0:Lch/qos/logback/core/spi/PropertyContainer;
         3: .line 38
            aload 0 /* this */
            aload 3 /* propertyContainer1 */
            putfield ch.qos.logback.core.subst.NodeToStringTransformer.propertyContainer1:Lch/qos/logback/core/spi/PropertyContainer;
         4: .line 39
            return
        end local 3 // ch.qos.logback.core.spi.PropertyContainer propertyContainer1
        end local 2 // ch.qos.logback.core.spi.PropertyContainer propertyContainer0
        end local 1 // ch.qos.logback.core.subst.Node node
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    5     0                this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0    5     1                node  Lch/qos/logback/core/subst/Node;
            0    5     2  propertyContainer0  Lch/qos/logback/core/spi/PropertyContainer;
            0    5     3  propertyContainer1  Lch/qos/logback/core/spi/PropertyContainer;
    MethodParameters:
                    Name  Flags
      node                
      propertyContainer0  
      propertyContainer1  

  public void <init>(ch.qos.logback.core.subst.Node, ch.qos.logback.core.spi.PropertyContainer);
    descriptor: (Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/spi/PropertyContainer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node node
        start local 2 // ch.qos.logback.core.spi.PropertyContainer propertyContainer0
         0: .line 42
            aload 0 /* this */
            aload 1 /* node */
            aload 2 /* propertyContainer0 */
            aconst_null
            invokespecial ch.qos.logback.core.subst.NodeToStringTransformer.<init>:(Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)V
         1: .line 43
            return
        end local 2 // ch.qos.logback.core.spi.PropertyContainer propertyContainer0
        end local 1 // ch.qos.logback.core.subst.Node node
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    2     0                this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0    2     1                node  Lch/qos/logback/core/subst/Node;
            0    2     2  propertyContainer0  Lch/qos/logback/core/spi/PropertyContainer;
    MethodParameters:
                    Name  Flags
      node                
      propertyContainer0  

  public static java.lang.String substituteVariable(java.lang.String, ch.qos.logback.core.spi.PropertyContainer, ch.qos.logback.core.spi.PropertyContainer);
    descriptor: (Ljava/lang/String;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // java.lang.String input
        start local 1 // ch.qos.logback.core.spi.PropertyContainer pc0
        start local 2 // ch.qos.logback.core.spi.PropertyContainer pc1
         0: .line 46
            aload 0 /* input */
            invokestatic ch.qos.logback.core.subst.NodeToStringTransformer.tokenizeAndParseString:(Ljava/lang/String;)Lch/qos/logback/core/subst/Node;
            astore 3 /* node */
        start local 3 // ch.qos.logback.core.subst.Node node
         1: .line 47
            new ch.qos.logback.core.subst.NodeToStringTransformer
            dup
            aload 3 /* node */
            aload 1 /* pc0 */
            aload 2 /* pc1 */
            invokespecial ch.qos.logback.core.subst.NodeToStringTransformer.<init>:(Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)V
            astore 4 /* nodeToStringTransformer */
        start local 4 // ch.qos.logback.core.subst.NodeToStringTransformer nodeToStringTransformer
         2: .line 48
            aload 4 /* nodeToStringTransformer */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.transform:()Ljava/lang/String;
            areturn
        end local 4 // ch.qos.logback.core.subst.NodeToStringTransformer nodeToStringTransformer
        end local 3 // ch.qos.logback.core.subst.Node node
        end local 2 // ch.qos.logback.core.spi.PropertyContainer pc1
        end local 1 // ch.qos.logback.core.spi.PropertyContainer pc0
        end local 0 // java.lang.String input
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0    3     0                    input  Ljava/lang/String;
            0    3     1                      pc0  Lch/qos/logback/core/spi/PropertyContainer;
            0    3     2                      pc1  Lch/qos/logback/core/spi/PropertyContainer;
            1    3     3                     node  Lch/qos/logback/core/subst/Node;
            2    3     4  nodeToStringTransformer  Lch/qos/logback/core/subst/NodeToStringTransformer;
    Exceptions:
      throws ch.qos.logback.core.spi.ScanException
    MethodParameters:
       Name  Flags
      input  
      pc0    
      pc1    

  private static ch.qos.logback.core.subst.Node tokenizeAndParseString(java.lang.String);
    descriptor: (Ljava/lang/String;)Lch/qos/logback/core/subst/Node;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // java.lang.String value
         0: .line 52
            new ch.qos.logback.core.subst.Tokenizer
            dup
            aload 0 /* value */
            invokespecial ch.qos.logback.core.subst.Tokenizer.<init>:(Ljava/lang/String;)V
            astore 1 /* tokenizer */
        start local 1 // ch.qos.logback.core.subst.Tokenizer tokenizer
         1: .line 53
            aload 1 /* tokenizer */
            invokevirtual ch.qos.logback.core.subst.Tokenizer.tokenize:()Ljava/util/List;
            astore 2 /* tokens */
        start local 2 // java.util.List tokens
         2: .line 54
            new ch.qos.logback.core.subst.Parser
            dup
            aload 2 /* tokens */
            invokespecial ch.qos.logback.core.subst.Parser.<init>:(Ljava/util/List;)V
            astore 3 /* parser */
        start local 3 // ch.qos.logback.core.subst.Parser parser
         3: .line 55
            aload 3 /* parser */
            invokevirtual ch.qos.logback.core.subst.Parser.parse:()Lch/qos/logback/core/subst/Node;
            areturn
        end local 3 // ch.qos.logback.core.subst.Parser parser
        end local 2 // java.util.List tokens
        end local 1 // ch.qos.logback.core.subst.Tokenizer tokenizer
        end local 0 // java.lang.String value
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0      value  Ljava/lang/String;
            1    4     1  tokenizer  Lch/qos/logback/core/subst/Tokenizer;
            2    4     2     tokens  Ljava/util/List<Lch/qos/logback/core/subst/Token;>;
            3    4     3     parser  Lch/qos/logback/core/subst/Parser;
    Exceptions:
      throws ch.qos.logback.core.spi.ScanException
    MethodParameters:
       Name  Flags
      value  

  public java.lang.String transform();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
         0: .line 59
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 1 /* stringBuilder */
        start local 1 // java.lang.StringBuilder stringBuilder
         1: .line 60
            aload 0 /* this */
            aload 0 /* this */
            getfield ch.qos.logback.core.subst.NodeToStringTransformer.node:Lch/qos/logback/core/subst/Node;
            aload 1 /* stringBuilder */
            new java.util.Stack
            dup
            invokespecial java.util.Stack.<init>:()V
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.compileNode:(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V
         2: .line 61
            aload 1 /* stringBuilder */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 1 // java.lang.StringBuilder stringBuilder
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    3     0           this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            1    3     1  stringBuilder  Ljava/lang/StringBuilder;
    Exceptions:
      throws ch.qos.logback.core.spi.ScanException

  private void compileNode(ch.qos.logback.core.subst.Node, java.lang.StringBuilder, java.util.Stack<ch.qos.logback.core.subst.Node>);
    descriptor: (Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=4
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node inputNode
        start local 2 // java.lang.StringBuilder stringBuilder
        start local 3 // java.util.Stack cycleCheckStack
         0: .line 65
            aload 1 /* inputNode */
            astore 4 /* n */
        start local 4 // ch.qos.logback.core.subst.Node n
         1: .line 66
            goto 8
         2: .line 67
      StackMap locals: ch.qos.logback.core.subst.Node
      StackMap stack:
            invokestatic ch.qos.logback.core.subst.NodeToStringTransformer.$SWITCH_TABLE$ch$qos$logback$core$subst$Node$Type:()[I
            aload 4 /* n */
            getfield ch.qos.logback.core.subst.Node.type:Lch/qos/logback/core/subst/Node$Type;
            invokevirtual ch.qos.logback.core.subst.Node$Type.ordinal:()I
            iaload
            tableswitch { // 1 - 2
                    1: 3
                    2: 5
              default: 6
          }
         3: .line 69
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 4 /* n */
            aload 2 /* stringBuilder */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.handleLiteral:(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;)V
         4: .line 70
            goto 6
         5: .line 72
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 4 /* n */
            aload 2 /* stringBuilder */
            aload 3 /* cycleCheckStack */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.handleVariable:(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V
         6: .line 74
      StackMap locals:
      StackMap stack:
            aload 4 /* n */
         7: .line 75
            getfield ch.qos.logback.core.subst.Node.next:Lch/qos/logback/core/subst/Node;
            astore 4 /* n */
         8: .line 66
      StackMap locals:
      StackMap stack:
            aload 4 /* n */
            ifnonnull 2
         9: .line 77
            return
        end local 4 // ch.qos.logback.core.subst.Node n
        end local 3 // java.util.Stack cycleCheckStack
        end local 2 // java.lang.StringBuilder stringBuilder
        end local 1 // ch.qos.logback.core.subst.Node inputNode
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   10     0             this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0   10     1        inputNode  Lch/qos/logback/core/subst/Node;
            0   10     2    stringBuilder  Ljava/lang/StringBuilder;
            0   10     3  cycleCheckStack  Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;
            1   10     4                n  Lch/qos/logback/core/subst/Node;
    Exceptions:
      throws ch.qos.logback.core.spi.ScanException
    Signature: (Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;)V
    MethodParameters:
                 Name  Flags
      inputNode        
      stringBuilder    
      cycleCheckStack  

  private void handleVariable(ch.qos.logback.core.subst.Node, java.lang.StringBuilder, java.util.Stack<ch.qos.logback.core.subst.Node>);
    descriptor: (Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=11, args_size=4
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node n
        start local 2 // java.lang.StringBuilder stringBuilder
        start local 3 // java.util.Stack cycleCheckStack
         0: .line 82
            aload 0 /* this */
            aload 1 /* n */
            aload 3 /* cycleCheckStack */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.haveVisitedNodeAlready:(Lch/qos/logback/core/subst/Node;Ljava/util/Stack;)Z
            ifeq 4
         1: .line 83
            aload 3 /* cycleCheckStack */
            aload 1 /* n */
            invokevirtual java.util.Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 84
            aload 0 /* this */
            aload 3 /* cycleCheckStack */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.constructRecursionErrorMessage:(Ljava/util/Stack;)Ljava/lang/String;
            astore 4 /* error */
        start local 4 // java.lang.String error
         3: .line 85
            new java.lang.IllegalArgumentException
            dup
            aload 4 /* error */
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 4 // java.lang.String error
         4: .line 87
      StackMap locals:
      StackMap stack:
            aload 3 /* cycleCheckStack */
            aload 1 /* n */
            invokevirtual java.util.Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 89
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 4 /* keyBuffer */
        start local 4 // java.lang.StringBuilder keyBuffer
         6: .line 90
            aload 1 /* n */
            getfield ch.qos.logback.core.subst.Node.payload:Ljava/lang/Object;
            checkcast ch.qos.logback.core.subst.Node
            astore 5 /* payload */
        start local 5 // ch.qos.logback.core.subst.Node payload
         7: .line 91
            aload 0 /* this */
            aload 5 /* payload */
            aload 4 /* keyBuffer */
            aload 3 /* cycleCheckStack */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.compileNode:(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V
         8: .line 92
            aload 4 /* keyBuffer */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 6 /* key */
        start local 6 // java.lang.String key
         9: .line 93
            aload 0 /* this */
            aload 6 /* key */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.lookupKey:(Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* value */
        start local 7 // java.lang.String value
        10: .line 95
            aload 7 /* value */
            ifnull 15
        11: .line 96
            aload 7 /* value */
            invokestatic ch.qos.logback.core.subst.NodeToStringTransformer.tokenizeAndParseString:(Ljava/lang/String;)Lch/qos/logback/core/subst/Node;
            astore 8 /* innerNode */
        start local 8 // ch.qos.logback.core.subst.Node innerNode
        12: .line 97
            aload 0 /* this */
            aload 8 /* innerNode */
            aload 2 /* stringBuilder */
            aload 3 /* cycleCheckStack */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.compileNode:(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V
        13: .line 98
            aload 3 /* cycleCheckStack */
            invokevirtual java.util.Stack.pop:()Ljava/lang/Object;
            pop
        14: .line 99
            return
        end local 8 // ch.qos.logback.core.subst.Node innerNode
        15: .line 102
      StackMap locals: ch.qos.logback.core.subst.NodeToStringTransformer ch.qos.logback.core.subst.Node java.lang.StringBuilder java.util.Stack java.lang.StringBuilder ch.qos.logback.core.subst.Node java.lang.String java.lang.String
      StackMap stack:
            aload 1 /* n */
            getfield ch.qos.logback.core.subst.Node.defaultPart:Ljava/lang/Object;
            ifnonnull 19
        16: .line 103
            aload 2 /* stringBuilder */
            new java.lang.StringBuilder
            dup
            aload 6 /* key */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "_IS_UNDEFINED"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        17: .line 104
            aload 3 /* cycleCheckStack */
            invokevirtual java.util.Stack.pop:()Ljava/lang/Object;
            pop
        18: .line 105
            return
        19: .line 108
      StackMap locals:
      StackMap stack:
            aload 1 /* n */
            getfield ch.qos.logback.core.subst.Node.defaultPart:Ljava/lang/Object;
            checkcast ch.qos.logback.core.subst.Node
            astore 8 /* defaultPart */
        start local 8 // ch.qos.logback.core.subst.Node defaultPart
        20: .line 109
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 9 /* defaultPartBuffer */
        start local 9 // java.lang.StringBuilder defaultPartBuffer
        21: .line 110
            aload 0 /* this */
            aload 8 /* defaultPart */
            aload 9 /* defaultPartBuffer */
            aload 3 /* cycleCheckStack */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.compileNode:(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V
        22: .line 111
            aload 3 /* cycleCheckStack */
            invokevirtual java.util.Stack.pop:()Ljava/lang/Object;
            pop
        23: .line 112
            aload 9 /* defaultPartBuffer */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 10 /* defaultVal */
        start local 10 // java.lang.String defaultVal
        24: .line 113
            aload 2 /* stringBuilder */
            aload 10 /* defaultVal */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        25: .line 114
            return
        end local 10 // java.lang.String defaultVal
        end local 9 // java.lang.StringBuilder defaultPartBuffer
        end local 8 // ch.qos.logback.core.subst.Node defaultPart
        end local 7 // java.lang.String value
        end local 6 // java.lang.String key
        end local 5 // ch.qos.logback.core.subst.Node payload
        end local 4 // java.lang.StringBuilder keyBuffer
        end local 3 // java.util.Stack cycleCheckStack
        end local 2 // java.lang.StringBuilder stringBuilder
        end local 1 // ch.qos.logback.core.subst.Node n
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   26     0               this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0   26     1                  n  Lch/qos/logback/core/subst/Node;
            0   26     2      stringBuilder  Ljava/lang/StringBuilder;
            0   26     3    cycleCheckStack  Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;
            3    4     4              error  Ljava/lang/String;
            6   26     4          keyBuffer  Ljava/lang/StringBuilder;
            7   26     5            payload  Lch/qos/logback/core/subst/Node;
            9   26     6                key  Ljava/lang/String;
           10   26     7              value  Ljava/lang/String;
           12   15     8          innerNode  Lch/qos/logback/core/subst/Node;
           20   26     8        defaultPart  Lch/qos/logback/core/subst/Node;
           21   26     9  defaultPartBuffer  Ljava/lang/StringBuilder;
           24   26    10         defaultVal  Ljava/lang/String;
    Exceptions:
      throws ch.qos.logback.core.spi.ScanException
    Signature: (Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;)V
    MethodParameters:
                 Name  Flags
      n                
      stringBuilder    
      cycleCheckStack  

  private java.lang.String lookupKey(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // java.lang.String key
         0: .line 117
            aload 0 /* this */
            getfield ch.qos.logback.core.subst.NodeToStringTransformer.propertyContainer0:Lch/qos/logback/core/spi/PropertyContainer;
            aload 1 /* key */
            invokeinterface ch.qos.logback.core.spi.PropertyContainer.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 2 /* value */
        start local 2 // java.lang.String value
         1: .line 118
            aload 2 /* value */
            ifnull 3
         2: .line 119
            aload 2 /* value */
            areturn
         3: .line 121
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield ch.qos.logback.core.subst.NodeToStringTransformer.propertyContainer1:Lch/qos/logback/core/spi/PropertyContainer;
            ifnull 7
         4: .line 122
            aload 0 /* this */
            getfield ch.qos.logback.core.subst.NodeToStringTransformer.propertyContainer1:Lch/qos/logback/core/spi/PropertyContainer;
            aload 1 /* key */
            invokeinterface ch.qos.logback.core.spi.PropertyContainer.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 2 /* value */
         5: .line 123
            aload 2 /* value */
            ifnull 7
         6: .line 124
            aload 2 /* value */
            areturn
         7: .line 127
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            aconst_null
            invokestatic ch.qos.logback.core.util.OptionHelper.getSystemProperty:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            astore 2 /* value */
         8: .line 128
            aload 2 /* value */
            ifnull 10
         9: .line 129
            aload 2 /* value */
            areturn
        10: .line 131
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            invokestatic ch.qos.logback.core.util.OptionHelper.getEnv:(Ljava/lang/String;)Ljava/lang/String;
            astore 2 /* value */
        11: .line 132
            aload 2 /* value */
            ifnull 13
        12: .line 133
            aload 2 /* value */
            areturn
        13: .line 136
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 2 // java.lang.String value
        end local 1 // java.lang.String key
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   14     0   this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0   14     1    key  Ljava/lang/String;
            1   14     2  value  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      key   

  private void handleLiteral(ch.qos.logback.core.subst.Node, java.lang.StringBuilder);
    descriptor: (Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node n
        start local 2 // java.lang.StringBuilder stringBuilder
         0: .line 140
            aload 2 /* stringBuilder */
            aload 1 /* n */
            getfield ch.qos.logback.core.subst.Node.payload:Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         1: .line 141
            return
        end local 2 // java.lang.StringBuilder stringBuilder
        end local 1 // ch.qos.logback.core.subst.Node n
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0    2     1              n  Lch/qos/logback/core/subst/Node;
            0    2     2  stringBuilder  Ljava/lang/StringBuilder;
    MethodParameters:
               Name  Flags
      n              
      stringBuilder  

  private java.lang.String variableNodeValue(ch.qos.logback.core.subst.Node);
    descriptor: (Lch/qos/logback/core/subst/Node;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=3, args_size=2
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node variableNode
         0: .line 144
            aload 1 /* variableNode */
            getfield ch.qos.logback.core.subst.Node.payload:Ljava/lang/Object;
            checkcast ch.qos.logback.core.subst.Node
            astore 2 /* literalPayload */
        start local 2 // ch.qos.logback.core.subst.Node literalPayload
         1: .line 145
            aload 2 /* literalPayload */
            getfield ch.qos.logback.core.subst.Node.payload:Ljava/lang/Object;
            checkcast java.lang.String
            areturn
        end local 2 // ch.qos.logback.core.subst.Node literalPayload
        end local 1 // ch.qos.logback.core.subst.Node variableNode
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0    2     1    variableNode  Lch/qos/logback/core/subst/Node;
            1    2     2  literalPayload  Lch/qos/logback/core/subst/Node;
    MethodParameters:
              Name  Flags
      variableNode  

  private java.lang.String constructRecursionErrorMessage(java.util.Stack<ch.qos.logback.core.subst.Node>);
    descriptor: (Ljava/util/Stack;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // java.util.Stack recursionNodes
         0: .line 149
            new java.lang.StringBuilder
            dup
            ldc "Circular variable reference detected while parsing input ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            astore 2 /* errorBuilder */
        start local 2 // java.lang.StringBuilder errorBuilder
         1: .line 151
            aload 1 /* recursionNodes */
            invokevirtual java.util.Stack.iterator:()Ljava/util/Iterator;
            astore 4
            goto 6
      StackMap locals: ch.qos.logback.core.subst.NodeToStringTransformer java.util.Stack java.lang.StringBuilder top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast ch.qos.logback.core.subst.Node
            astore 3 /* stackNode */
        start local 3 // ch.qos.logback.core.subst.Node stackNode
         3: .line 152
            aload 2 /* errorBuilder */
            ldc "${"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            aload 3 /* stackNode */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.variableNodeValue:(Lch/qos/logback/core/subst/Node;)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;
            pop
         4: .line 153
            aload 1 /* recursionNodes */
            invokevirtual java.util.Stack.lastElement:()Ljava/lang/Object;
            aload 3 /* stackNode */
            if_acmpeq 6
         5: .line 154
            aload 2 /* errorBuilder */
            ldc " --> "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        end local 3 // ch.qos.logback.core.subst.Node stackNode
         6: .line 151
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         7: .line 157
            aload 2 /* errorBuilder */
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         8: .line 158
            aload 2 /* errorBuilder */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 2 // java.lang.StringBuilder errorBuilder
        end local 1 // java.util.Stack recursionNodes
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    9     0            this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0    9     1  recursionNodes  Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;
            1    9     2    errorBuilder  Ljava/lang/StringBuilder;
            3    6     3       stackNode  Lch/qos/logback/core/subst/Node;
    Signature: (Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;)Ljava/lang/String;
    MethodParameters:
                Name  Flags
      recursionNodes  

  private boolean haveVisitedNodeAlready(ch.qos.logback.core.subst.Node, java.util.Stack<ch.qos.logback.core.subst.Node>);
    descriptor: (Lch/qos/logback/core/subst/Node;Ljava/util/Stack;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node node
        start local 2 // java.util.Stack cycleDetectionStack
         0: .line 167
            aload 2 /* cycleDetectionStack */
            invokevirtual java.util.Stack.iterator:()Ljava/util/Iterator;
            astore 4
            goto 4
      StackMap locals: ch.qos.logback.core.subst.NodeToStringTransformer ch.qos.logback.core.subst.Node java.util.Stack top java.util.Iterator
      StackMap stack:
         1: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast ch.qos.logback.core.subst.Node
            astore 3 /* cycleNode */
        start local 3 // ch.qos.logback.core.subst.Node cycleNode
         2: .line 168
            aload 0 /* this */
            aload 1 /* node */
            aload 3 /* cycleNode */
            invokevirtual ch.qos.logback.core.subst.NodeToStringTransformer.equalNodes:(Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/subst/Node;)Z
            ifeq 4
         3: .line 169
            iconst_1
            ireturn
        end local 3 // ch.qos.logback.core.subst.Node cycleNode
         4: .line 167
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         5: .line 172
            iconst_0
            ireturn
        end local 2 // java.util.Stack cycleDetectionStack
        end local 1 // ch.qos.logback.core.subst.Node node
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    6     0                 this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0    6     1                 node  Lch/qos/logback/core/subst/Node;
            0    6     2  cycleDetectionStack  Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;
            2    4     3            cycleNode  Lch/qos/logback/core/subst/Node;
    Signature: (Lch/qos/logback/core/subst/Node;Ljava/util/Stack<Lch/qos/logback/core/subst/Node;>;)Z
    MethodParameters:
                     Name  Flags
      node                 
      cycleDetectionStack  

  private boolean equalNodes(ch.qos.logback.core.subst.Node, ch.qos.logback.core.subst.Node);
    descriptor: (Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/subst/Node;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
        start local 1 // ch.qos.logback.core.subst.Node node1
        start local 2 // ch.qos.logback.core.subst.Node node2
         0: .line 176
            aload 1 /* node1 */
            getfield ch.qos.logback.core.subst.Node.type:Lch/qos/logback/core/subst/Node$Type;
            ifnull 2
            aload 1 /* node1 */
            getfield ch.qos.logback.core.subst.Node.type:Lch/qos/logback/core/subst/Node$Type;
            aload 2 /* node2 */
            getfield ch.qos.logback.core.subst.Node.type:Lch/qos/logback/core/subst/Node$Type;
            invokevirtual ch.qos.logback.core.subst.Node$Type.equals:(Ljava/lang/Object;)Z
            ifne 2
         1: .line 177
            iconst_0
            ireturn
         2: .line 178
      StackMap locals:
      StackMap stack:
            aload 1 /* node1 */
            getfield ch.qos.logback.core.subst.Node.payload:Ljava/lang/Object;
            ifnull 4
            aload 1 /* node1 */
            getfield ch.qos.logback.core.subst.Node.payload:Ljava/lang/Object;
            aload 2 /* node2 */
            getfield ch.qos.logback.core.subst.Node.payload:Ljava/lang/Object;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 4
         3: .line 179
            iconst_0
            ireturn
         4: .line 180
      StackMap locals:
      StackMap stack:
            aload 1 /* node1 */
            getfield ch.qos.logback.core.subst.Node.defaultPart:Ljava/lang/Object;
            ifnull 6
            aload 1 /* node1 */
            getfield ch.qos.logback.core.subst.Node.defaultPart:Ljava/lang/Object;
            aload 2 /* node2 */
            getfield ch.qos.logback.core.subst.Node.defaultPart:Ljava/lang/Object;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 6
         5: .line 181
            iconst_0
            ireturn
         6: .line 183
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 2 // ch.qos.logback.core.subst.Node node2
        end local 1 // ch.qos.logback.core.subst.Node node1
        end local 0 // ch.qos.logback.core.subst.NodeToStringTransformer this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Lch/qos/logback/core/subst/NodeToStringTransformer;
            0    7     1  node1  Lch/qos/logback/core/subst/Node;
            0    7     2  node2  Lch/qos/logback/core/subst/Node;
    MethodParameters:
       Name  Flags
      node1  
      node2  

  static int[] $SWITCH_TABLE$ch$qos$logback$core$subst$Node$Type();
    descriptor: ()[I
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 29
            getstatic ch.qos.logback.core.subst.NodeToStringTransformer.$SWITCH_TABLE$ch$qos$logback$core$subst$Node$Type:[I
            dup
            ifnull 1
            areturn
      StackMap locals:
      StackMap stack: int[]
         1: pop
            invokestatic ch.qos.logback.core.subst.Node$Type.values:()[Lch/qos/logback/core/subst/Node$Type;
            arraylength
            newarray 10
            astore 0
         2: aload 0
            getstatic ch.qos.logback.core.subst.Node$Type.LITERAL:Lch/qos/logback/core/subst/Node$Type;
            invokevirtual ch.qos.logback.core.subst.Node$Type.ordinal:()I
            iconst_1
            iastore
         3: goto 5
      StackMap locals: int[]
      StackMap stack: java.lang.NoSuchFieldError
         4: pop
      StackMap locals:
      StackMap stack:
         5: aload 0
            getstatic ch.qos.logback.core.subst.Node$Type.VARIABLE:Lch/qos/logback/core/subst/Node$Type;
            invokevirtual ch.qos.logback.core.subst.Node$Type.ordinal:()I
            iconst_2
            iastore
         6: goto 8
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
         7: pop
      StackMap locals:
      StackMap stack:
         8: aload 0
            dup
            putstatic ch.qos.logback.core.subst.NodeToStringTransformer.$SWITCH_TABLE$ch$qos$logback$core$subst$Node$Type:[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
}
SourceFile: "NodeToStringTransformer.java"
InnerClasses:
  final Type = ch.qos.logback.core.subst.Node$Type of ch.qos.logback.core.subst.Node