@ ProgramNode (location: (0...190))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...190))
    └── body: (length: 10)
        ├── @ AndNode (location: (0...19))
        │   ├── left:
        │   │   @ CallNode (location: (0...7))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (4...7))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (4...7) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (0...3) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   ├── right:
        │   │   @ CallNode (location: (12...19))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (16...19))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (16...19) = "bar"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "bar"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (12...15) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   └── operator_loc: (8...11) = "and"
        ├── @ CallNode (location: (21...37))
        │   ├── receiver:
        │   │   @ AndNode (location: (25...36))
        │   │   ├── left:
        │   │   │   @ CallNode (location: (25...28))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (25...28) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── right:
        │   │   │   @ CallNode (location: (33...36))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (33...36) = "bar"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "bar"
        │   │   └── operator_loc: (29...32) = "and"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (21...24) = "not"
        │   ├── opening_loc: (24...25) = "("
        │   ├── arguments: ∅
        │   ├── closing_loc: (36...37) = ")"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "!"
        ├── @ CallNode (location: (39...46))
        │   ├── receiver:
        │   │   @ CallNode (location: (43...46))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (43...46) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (39...42) = "not"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "!"
        ├── @ AndNode (location: (48...69))
        │   ├── left:
        │   │   @ CallNode (location: (48...55))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (52...55))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (52...55) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (48...51) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   ├── right:
        │   │   @ CallNode (location: (60...69))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (66...69))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (66...69) = "bar"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "bar"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (60...63) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   └── operator_loc: (56...59) = "and"
        ├── @ AndNode (location: (72...97))
        │   ├── left:
        │   │   @ CallNode (location: (72...79))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (76...79))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (76...79) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (72...75) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   ├── right:
        │   │   @ CallNode (location: (88...97))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (94...97))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (94...97) = "bar"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "bar"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (88...91) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   └── operator_loc: (80...83) = "and"
        ├── @ AndNode (location: (100...125))
        │   ├── left:
        │   │   @ CallNode (location: (100...107))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (104...107))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (104...107) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (100...103) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   ├── right:
        │   │   @ CallNode (location: (114...125))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (122...125))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (122...125) = "bar"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "bar"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (114...117) = "not"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "!"
        │   └── operator_loc: (108...111) = "and"
        ├── @ CallNode (location: (127...138))
        │   ├── receiver:
        │   │   @ CallNode (location: (131...134))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (131...134) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (127...130) = "not"
        │   ├── opening_loc: (130...131) = "("
        │   ├── arguments: ∅
        │   ├── closing_loc: (137...138) = ")"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "!"
        ├── @ CallNode (location: (140...156))
        │   ├── receiver:
        │   │   @ CallNode (location: (147...150))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (147...150) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (140...143) = "not"
        │   ├── opening_loc: (143...144) = "("
        │   ├── arguments: ∅
        │   ├── closing_loc: (155...156) = ")"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "!"
        ├── @ CallNode (location: (158...172))
        │   ├── receiver:
        │   │   @ FlipFlopNode (location: (162...172))
        │   │   ├── left:
        │   │   │   @ CallNode (location: (162...165))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (162...165) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── right:
        │   │   │   @ CallNode (location: (169...172))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (169...172) = "bar"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "bar"
        │   │   ├── operator_loc: (166...168) = ".."
        │   │   └── flags: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (158...161) = "not"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "!"
        └── @ CallNode (location: (174...190))
            ├── receiver:
            │   @ ParenthesesNode (location: (178...190))
            │   ├── body:
            │   │   @ StatementsNode (location: (179...189))
            │   │   └── body: (length: 1)
            │   │       └── @ FlipFlopNode (location: (179...189))
            │   │           ├── left:
            │   │           │   @ CallNode (location: (179...182))
            │   │           │   ├── receiver: ∅
            │   │           │   ├── call_operator_loc: ∅
            │   │           │   ├── message_loc: (179...182) = "foo"
            │   │           │   ├── opening_loc: ∅
            │   │           │   ├── arguments: ∅
            │   │           │   ├── closing_loc: ∅
            │   │           │   ├── block: ∅
            │   │           │   ├── flags: variable_call
            │   │           │   └── name: "foo"
            │   │           ├── right:
            │   │           │   @ CallNode (location: (186...189))
            │   │           │   ├── receiver: ∅
            │   │           │   ├── call_operator_loc: ∅
            │   │           │   ├── message_loc: (186...189) = "bar"
            │   │           │   ├── opening_loc: ∅
            │   │           │   ├── arguments: ∅
            │   │           │   ├── closing_loc: ∅
            │   │           │   ├── block: ∅
            │   │           │   ├── flags: variable_call
            │   │           │   └── name: "bar"
            │   │           ├── operator_loc: (183...185) = ".."
            │   │           └── flags: ∅
            │   ├── opening_loc: (178...179) = "("
            │   └── closing_loc: (189...190) = ")"
            ├── call_operator_loc: ∅
            ├── message_loc: (174...177) = "not"
            ├── opening_loc: ∅
            ├── arguments: ∅
            ├── closing_loc: ∅
            ├── block: ∅
            ├── flags: ∅
            └── name: "!"
