(CommandList
  children: [
    (FuncDef
      name: throw
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_Star '$*'))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[17])]
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [8]
        )
      spids: [4 7]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:BRIEF) op:Equal rhs:{(0)} spids:[28])]
      spids: [28]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:LEAFONLY) op:Equal rhs:{(0)} spids:[31])]
      spids: [31]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:PRUNE) op:Equal rhs:{(0)} spids:[34])]
      spids: [34]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:NO_HEAD) op:Equal rhs:{(0)} spids:[37])]
      spids: [37]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:NORMALIZE_SOLIDUS) op:Equal rhs:{(0)} spids:[40])]
      spids: [40]
    )
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)})
            (C {(echo)} {(DQ ('Usage: JSON.sh [-b] [-l] [-p] [-s] [-h]'))})
            (C {(echo)})
            (C {(echo)} {(DQ ('-p - Prune empty. Exclude fields with empty values.'))})
            (C {(echo)} {(DQ ('-l - Leaf only. Only show leaf nodes, which stops data duplication.'))})
            (C {(echo)} {(DQ ("-b - Brief. Combines 'Leaf only' and 'Prune empty' options."))})
            (C {(echo)} 
              {
                (DQ ('-n - No-head. Do not show nodes that have no path (lines that start with []).'))
              }
            )
            (C {(echo)} {(DQ ('-s - Remove escaping of the solidus symbol (straight slash).'))})
            (C {(echo)} {(DQ ('-h - This help text.'))})
            (C {(echo)})
          ]
          spids: [48]
        )
      spids: [44 47]
    )
    (FuncDef
      name: parse_options
      body: 
        (BraceGroup
          children: [
            (C {(set)} {(--)} {(DQ ($ VSub_At '$@'))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ARGN)
                  op: Equal
                  rhs: {($ VSub_Pound '$#')}
                  spids: [129]
                )
              ]
              spids: [127]
            )
            (While
              cond: [(C {(Lit_Other '[')} {(DQ ($ VSub_Name '$ARGN'))} {(-ne)} {(0)} {(Lit_Other ']')})]
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {($ VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [{(-h)}]
                          action: [
                            (C {(usage)})
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(0)}
                            )
                          ]
                          spids: [158 159 169 16777215]
                        )
                        (case_arm
                          pat_list: [{(-b)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BRIEF)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [175]
                                )
                              ]
                              spids: [175]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:LEAFONLY)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [179]
                                )
                              ]
                              spids: [179]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:PRUNE)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [183]
                                )
                              ]
                              spids: [183]
                            )
                          ]
                          spids: [172 173 187 16777215]
                        )
                        (case_arm
                          pat_list: [{(-l)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:LEAFONLY)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [193]
                                )
                              ]
                              spids: [193]
                            )
                          ]
                          spids: [190 191 197 16777215]
                        )
                        (case_arm
                          pat_list: [{(-p)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:PRUNE)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [203]
                                )
                              ]
                              spids: [203]
                            )
                          ]
                          spids: [200 201 207 16777215]
                        )
                        (case_arm
                          pat_list: [{(-n)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:NO_HEAD)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [213]
                                )
                              ]
                              spids: [213]
                            )
                          ]
                          spids: [210 211 217 16777215]
                        )
                        (case_arm
                          pat_list: [{(-s)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:NORMALIZE_SOLIDUS)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [223]
                                )
                              ]
                              spids: [223]
                            )
                          ]
                          spids: [220 221 227 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '?') (Lit_Other '*')}]
                          action: [
                            (C {(echo)} {(DQ ('ERROR: Unknown option.'))})
                            (C {(usage)})
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(0)}
                            )
                          ]
                          spids: [230 232 249 16777215]
                        )
                      ]
                      spids: [151 155 252]
                    )
                    (C {(shift)} {(1)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ARGN)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithVarRef name:ARGN)
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [261 266]
                              )
                            }
                          spids: [260]
                        )
                      ]
                      spids: [260]
                    )
                  ]
                  spids: [148 269]
                )
            )
          ]
          spids: [115]
        )
      spids: [111 114]
    )
    (FuncDef
      name: awk_egrep
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pattern_string)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [284]
                )
              ]
              spids: [282]
            )
            (C {(gawk)} 
              {
                (SQ <'{\n'> <'    while ($0) {\n'> <'      start=match($0, pattern);\n'> 
                  <'      token=substr($0, start, RLENGTH);\n'> <'      print token;\n'> <'      $0=substr($0, start+RLENGTH);\n'> <'    }\n'> <'  }'>
                )
              } {(Lit_VarLike 'pattern=') (DQ ($ VSub_Name '$pattern_string'))}
            )
          ]
          spids: [279]
        )
      spids: [274 278]
    )
    (FuncDef
      name: tokenize
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:GREP) op:Equal spids:[320])]
              spids: [318]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:ESCAPE) op:Equal spids:[325])]
              spids: [323]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:CHAR) op:Equal spids:[330])]
              spids: [328]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [
                        (C {(echo)} {(DQ ('test string'))})
                        (SimpleCommand
                          words: [{(egrep)} {(-ao)} {(--color) (Lit_Other '=') (never)} {(DQ (test))}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [356]
                            )
                            (Redir
                              op_id: Redir_GreatAnd
                              fd: 2
                              arg_word: {(1)}
                              spids: [359]
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:GREP)
                          op: Equal
                          rhs: {(SQ <'egrep -ao --color=never'>)}
                          spids: [366]
                        )
                      ]
                      spids: [366]
                    )
                  ]
                  spids: [16777215 363]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:GREP)
                      op: Equal
                      rhs: {(SQ <'egrep -ao'>)}
                      spids: [375]
                    )
                  ]
                  spids: [375]
                )
              ]
              spids: [372 381]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [
                        (C {(echo)} {(DQ ('test string'))})
                        (SimpleCommand
                          words: [{(egrep)} {(-o)} {(DQ (test))}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [403]
                            )
                            (Redir
                              op_id: Redir_GreatAnd
                              fd: 2
                              arg_word: {(1)}
                              spids: [406]
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ESCAPE)
                          op: Equal
                          rhs: {(SQ <'(\\\\[^u[:cntrl:]]|\\\\u[0-9a-fA-F]{4})'>)}
                          spids: [413]
                        )
                      ]
                      spids: [413]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CHAR)
                          op: Equal
                          rhs: {(SQ <'[^[:cntrl:]"\\\\]'>)}
                          spids: [419]
                        )
                      ]
                      spids: [419]
                    )
                  ]
                  spids: [16777215 410]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:GREP)
                      op: Equal
                      rhs: {(awk_egrep)}
                      spids: [428]
                    )
                  ]
                  spids: [428]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:ESCAPE)
                      op: Equal
                      rhs: {(SQ <'(\\\\\\\\[^u[:cntrl:]]|\\\\u[0-9a-fA-F]{4})'>)}
                      spids: [432]
                    )
                  ]
                  spids: [432]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:CHAR)
                      op: Equal
                      rhs: {(SQ <'[^[:cntrl:]"\\\\\\\\]'>)}
                      spids: [438]
                    )
                  ]
                  spids: [438]
                )
              ]
              spids: [425 444]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:STRING)
                  op: Equal
                  rhs: 
                    {
                      (DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_Name '$CHAR') 
                        ('*(') ($ VSub_Name '$ESCAPE') ($ VSub_Name '$CHAR') ('*)*') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                      )
                    }
                  spids: [450]
                )
              ]
              spids: [448]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:NUMBER)
                  op: Equal
                  rhs: {(SQ <'-?(0|[1-9][0-9]*)([.][0-9]*)?([eE][+-]?[0-9]*)?'>)}
                  spids: [464]
                )
              ]
              spids: [462]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KEYWORD)
                  op: Equal
                  rhs: {(SQ <'null|false|true'>)}
                  spids: [472]
                )
              ]
              spids: [470]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:SPACE)
                  op: Equal
                  rhs: {(SQ <'[[:space:]]+'>)}
                  spids: [480]
                )
              ]
              spids: [478]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:is_wordsplit_disabled)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (SimpleCommand
                                    words: [{(unsetopt)}]
                                    redirects: [
                                      (Redir
                                        op_id: Redir_Great
                                        fd: 2
                                        arg_word: {(/dev/null)}
                                        spids: [497]
                                      )
                                    ]
                                  )
                                  (C {(grep)} {(-c)} {(SQ <'^shwordsplit$'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [494 509]
                      )
                    }
                  spids: [493]
                )
              ]
              spids: [491]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_Name '$is_wordsplit_disabled')} 
                          {(KW_Bang '!') (Lit_Other '=')} {(0)} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(Sentence child:(C {(setopt)} {(shwordsplit)}) terminator:<Op_Semi ';'>)]
                  spids: [16777215 526]
                )
              ]
              spids: [16777215 533]
            )
            (Pipeline
              children: [
                (C {($ VSub_Name '$GREP')} 
                  {
                    (DQ ($ VSub_Name '$STRING') ('|') ($ VSub_Name '$NUMBER') ('|') 
                      ($ VSub_Name '$KEYWORD') ('|') ($ VSub_Name '$SPACE') ('|.')
                    )
                  }
                )
                (C {(egrep)} {(-v)} {(DQ ('^') ($ VSub_Name '$SPACE') (Lit_Other '$'))})
              ]
              negated: F
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_Name '$is_wordsplit_disabled')} 
                          {(KW_Bang '!') (Lit_Other '=')} {(0)} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(Sentence child:(C {(unsetopt)} {(shwordsplit)}) terminator:<Op_Semi ';'>)]
                  spids: [16777215 576]
                )
              ]
              spids: [16777215 583]
            )
          ]
          spids: [315]
        )
      spids: [310 314]
    )
    (FuncDef
      name: parse_array
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[598])]
              spids: [596]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:ary) op:Equal rhs:{(SQ )} spids:[604])]
              spids: [602]
            )
            (C {(read)} {(-r)} {(token)})
            (Case
              to_match: {(DQ ($ VSub_Name '$token'))}
              arms: [
                (case_arm pat_list:[{(SQ <']'>)}] spids:[626 628 630 16777215])
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (While
                      cond: [(C {(Lit_Other ':')})]
                      body: 
                        (DoGroup
                          children: [
                            (C {(parse_value)} {(DQ ($ VSub_Number '$1'))} {(DQ ($ VSub_Name '$index'))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:index)
                                  op: Equal
                                  rhs: 
                                    {
                                      (ArithSubPart
                                        anode: 
                                          (ArithBinary
                                            op_id: Arith_Plus
                                            left: (ArithVarRef name:index)
                                            right: (ArithWord w:{(Lit_Digits 1)})
                                          )
                                        spids: [657 662]
                                      )
                                    }
                                  spids: [656]
                                )
                              ]
                              spids: [656]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:ary)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name '$ary')) (DQ ($ VSub_Name '$value'))}
                                  spids: [665]
                                )
                              ]
                              spids: [665]
                            )
                            (C {(read)} {(-r)} {(token)})
                            (Case
                              to_match: {(DQ ($ VSub_Name '$token'))}
                              arms: [
                                (case_arm
                                  pat_list: [{(SQ <']'>)}]
                                  action: [(ControlFlow token:<ControlFlow_Break break>)]
                                  spids: [692 694 698 16777215]
                                )
                                (case_arm
                                  pat_list: [{(SQ <','>)}]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:ary)
                                          op: Equal
                                          rhs: {(DQ ($ VSub_Name '$ary') (','))}
                                          spids: [706]
                                        )
                                      ]
                                      spids: [706]
                                    )
                                  ]
                                  spids: [702 704 712 16777215]
                                )
                                (case_arm
                                  pat_list: [{(Lit_Other '*')}]
                                  action: [
                                    (C {(throw)} 
                                      {
                                        (DQ ('EXPECTED , or ] GOT ') 
                                          (BracedVarSub
                                            token: <VSub_Name token>
                                            suffix_op: 
                                              (StringUnary
                                                op_id: VTest_ColonHyphen
                                                arg_word: {(EOF)}
                                              )
                                            spids: [722 726]
                                          )
                                        )
                                      }
                                    )
                                  ]
                                  spids: [715 716 729 16777215]
                                )
                              ]
                              spids: [682 688 732]
                            )
                            (C {(read)} {(-r)} {(token)})
                          ]
                          spids: [642 742]
                        )
                    )
                  ]
                  spids: [633 634 745 16777215]
                )
              ]
              spids: [616 622 748]
            )
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$BRIEF'))} {(-eq)} {(0)} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:value)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(printf)} {(SQ <'[%s]'>)} {(DQ ($ VSub_Name '$ary'))})]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [766 776]
                          )
                        }
                      spids: [765]
                    )
                  ]
                  spids: [765]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:value)
                      op: Equal
                      rhs: {(EmptyPart)}
                      spids: [780]
                    )
                  ]
                  spids: [780]
                )
              ]
            )
            (C {(Lit_Other ':')})
          ]
          spids: [593]
        )
      spids: [588 592]
    )
    (FuncDef
      name: parse_object
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:key) op:Equal spids:[798])]
              spids: [796]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:obj) op:Equal rhs:{(SQ )} spids:[803])]
              spids: [801]
            )
            (C {(read)} {(-r)} {(token)})
            (Case
              to_match: {(DQ ($ VSub_Name '$token'))}
              arms: [
                (case_arm pat_list:[{(SQ <'}'>)}] spids:[825 827 829 16777215])
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (While
                      cond: [(C {(Lit_Other ':')})]
                      body: 
                        (DoGroup
                          children: [
                            (Case
                              to_match: {(DQ ($ VSub_Name '$token'))}
                              arms: [
                                (case_arm
                                  pat_list: [{(SQ <'"'>) (Lit_Other '*') (SQ <'"'>)}]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:key)
                                          op: Equal
                                          rhs: {($ VSub_Name '$token')}
                                          spids: [862]
                                        )
                                      ]
                                      spids: [862]
                                    )
                                  ]
                                  spids: [854 860 865 16777215]
                                )
                                (case_arm
                                  pat_list: [{(Lit_Other '*')}]
                                  action: [
                                    (C {(throw)} 
                                      {
                                        (DQ ('EXPECTED string GOT ') 
                                          (BracedVarSub
                                            token: <VSub_Name token>
                                            suffix_op: 
                                              (StringUnary
                                                op_id: VTest_ColonHyphen
                                                arg_word: {(EOF)}
                                              )
                                            spids: [875 879]
                                          )
                                        )
                                      }
                                    )
                                  ]
                                  spids: [868 869 882 16777215]
                                )
                              ]
                              spids: [844 850 885]
                            )
                            (C {(read)} {(-r)} {(token)})
                            (Case
                              to_match: {(DQ ($ VSub_Name '$token'))}
                              arms: [
                                (case_arm
                                  pat_list: [{(SQ <':'>)}]
                                  spids: [905 907 909 16777215]
                                )
                                (case_arm
                                  pat_list: [{(Lit_Other '*')}]
                                  action: [
                                    (C {(throw)} 
                                      {
                                        (DQ ('EXPECTED : GOT ') 
                                          (BracedVarSub
                                            token: <VSub_Name token>
                                            suffix_op: 
                                              (StringUnary
                                                op_id: VTest_ColonHyphen
                                                arg_word: {(EOF)}
                                              )
                                            spids: [919 923]
                                          )
                                        )
                                      }
                                    )
                                  ]
                                  spids: [912 913 926 16777215]
                                )
                              ]
                              spids: [895 901 929]
                            )
                            (C {(read)} {(-r)} {(token)})
                            (C {(parse_value)} {(DQ ($ VSub_Number '$1'))} {(DQ ($ VSub_Name '$key'))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:obj)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ ($ VSub_Name '$obj') ($ VSub_Name '$key') (':') 
                                        ($ VSub_Name '$value')
                                      )
                                    }
                                  spids: [950]
                                )
                              ]
                              spids: [950]
                            )
                            (C {(read)} {(-r)} {(token)})
                            (Case
                              to_match: {(DQ ($ VSub_Name '$token'))}
                              arms: [
                                (case_arm
                                  pat_list: [{(SQ <'}'>)}]
                                  action: [(ControlFlow token:<ControlFlow_Break break>)]
                                  spids: [977 979 983 16777215]
                                )
                                (case_arm
                                  pat_list: [{(SQ <','>)}]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:obj)
                                          op: Equal
                                          rhs: {(DQ ($ VSub_Name '$obj') (','))}
                                          spids: [991]
                                        )
                                      ]
                                      spids: [991]
                                    )
                                  ]
                                  spids: [987 989 997 16777215]
                                )
                                (case_arm
                                  pat_list: [{(Lit_Other '*')}]
                                  action: [
                                    (C {(throw)} 
                                      {
                                        (DQ ('EXPECTED , or } GOT ') 
                                          (BracedVarSub
                                            token: <VSub_Name token>
                                            suffix_op: 
                                              (StringUnary
                                                op_id: VTest_ColonHyphen
                                                arg_word: {(EOF)}
                                              )
                                            spids: [1007 1011]
                                          )
                                        )
                                      }
                                    )
                                  ]
                                  spids: [1000 1001 1014 16777215]
                                )
                              ]
                              spids: [967 973 1017]
                            )
                            (C {(read)} {(-r)} {(token)})
                          ]
                          spids: [841 1027]
                        )
                    )
                  ]
                  spids: [832 833 1030 16777215]
                )
              ]
              spids: [815 821 1033]
            )
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$BRIEF'))} {(-eq)} {(0)} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:value)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(printf)} {(SQ <'{%s}'>)} {(DQ ($ VSub_Name '$obj'))})]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [1051 1061]
                          )
                        }
                      spids: [1050]
                    )
                  ]
                  spids: [1050]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:value)
                      op: Equal
                      rhs: {(EmptyPart)}
                      spids: [1065]
                    )
                  ]
                  spids: [1065]
                )
              ]
            )
            (C {(Lit_Other ':')})
          ]
          spids: [793]
        )
      spids: [788 792]
    )
    (FuncDef
      name: parse_value
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:jpath)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Number 1>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_ColonPlus
                              arg_word: {($ VSub_Number '$1') (',')}
                            )
                          spids: [1085 1090]
                        ) ($ VSub_Number '$2')
                      )
                    }
                  spids: [1083]
                )
                (assign_pair
                  lhs: (LhsName name:isleaf)
                  op: Equal
                  rhs: {(0)}
                  spids: [1094]
                )
                (assign_pair
                  lhs: (LhsName name:isempty)
                  op: Equal
                  rhs: {(0)}
                  spids: [1097]
                )
                (assign_pair
                  lhs: (LhsName name:print)
                  op: Equal
                  rhs: {(0)}
                  spids: [1100]
                )
              ]
              spids: [1081]
            )
            (Case
              to_match: {(DQ ($ VSub_Name '$token'))}
              arms: [
                (case_arm
                  pat_list: [{(SQ <'{'>)}]
                  action: [(C {(parse_object)} {(DQ ($ VSub_Name '$jpath'))})]
                  spids: [1114 1116 1124 16777215]
                )
                (case_arm
                  pat_list: [{(SQ <'['>)}]
                  action: [(C {(parse_array)} {(DQ ($ VSub_Name '$jpath'))})]
                  spids: [1128 1130 1138 16777215]
                )
                (case_arm
                  pat_list: [{(SQ )} {(Lit_Other '[') (KW_Bang '!') (0-9) (Lit_Other ']')}]
                  action: [
                    (C {(throw)} 
                      {
                        (DQ ('EXPECTED value GOT ') 
                          (BracedVarSub
                            token: <VSub_Name token>
                            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(EOF)})
                            spids: [1158 1162]
                          )
                        )
                      }
                    )
                  ]
                  spids: [16777215 1152 1165 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:value)
                          op: Equal
                          rhs: {($ VSub_Name '$token')}
                          spids: [1171]
                        )
                      ]
                      spids: [1171]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$NORMALIZE_SOLIDUS'))} {(-eq)} {(1)} 
                          {(Lit_Other ']')}
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:value)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (Pipeline
                                            children: [
                                              (C {(echo)} {(DQ ($ VSub_Name '$value'))})
                                              (C {(sed)} {(SQ <'s#\\\\/#/#g'>)})
                                            ]
                                            negated: F
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub '$('>
                                    spids: [1194 1208]
                                  )
                                }
                              spids: [1193]
                            )
                          ]
                          spids: [1193]
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:isleaf) op:Equal rhs:{(1)} spids:[1211])]
                      spids: [1211]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$value'))} {(Lit_Other '=')} {(SQ <'""'>)} 
                          {(Lit_Other ']')}
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:isempty)
                              op: Equal
                              rhs: {(1)}
                              spids: [1231]
                            )
                          ]
                          spids: [1231]
                        )
                      ]
                    )
                  ]
                  spids: [1168 1169 1235 16777215]
                )
              ]
              spids: [1104 1110 1238]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$value'))} {(Lit_Other '=')} {(SQ )} 
                  {(Lit_Other ']')}
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$NO_HEAD'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$jpath'))} {(Lit_Other ']')})
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$LEAFONLY'))} {(-eq)} {(0)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$PRUNE'))} {(-eq)} {(0)} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:print) op:Equal rhs:{(1)} spids:[1317])]
                  spids: [1317]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$LEAFONLY'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$isleaf'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {($ VSub_Name '$PRUNE')} {(-eq)} {(0)} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:print) op:Equal rhs:{(1)} spids:[1361])]
                  spids: [1361]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$LEAFONLY'))} {(-eq)} {(0)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$PRUNE'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$isempty'))} {(-eq)} {(0)} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:print) op:Equal rhs:{(1)} spids:[1407])]
                  spids: [1407]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$LEAFONLY'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$isleaf'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {($ VSub_Name '$PRUNE')} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(Lit_Other '[')} {($ VSub_Name '$isempty')} {(-eq)} {(0)} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:print) op:Equal rhs:{(1)} spids:[1465])]
                  spids: [1465]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$print'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(printf)} {(DQ ('[%s]') (Lit_Other '\\') ('t%s') (Lit_Other '\\') (n))} 
                  {(DQ ($ VSub_Name '$jpath'))} {(DQ ($ VSub_Name '$value'))}
                )
              ]
            )
            (C {(Lit_Other ':')})
          ]
          spids: [1078]
        )
      spids: [1073 1077]
    )
    (FuncDef
      name: parse
      body: 
        (BraceGroup
          children: [
            (C {(read)} {(-r)} {(token)})
            (C {(parse_value)})
            (C {(read)} {(-r)} {(token)})
            (Case
              to_match: {(DQ ($ VSub_Name '$token'))}
              arms: [
                (case_arm pat_list:[{(SQ )}] spids:[16777215 1543 1545 16777215])
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(C {(throw)} {(DQ ('EXPECTED EOF GOT ') ($ VSub_Name '$token'))})]
                  spids: [1548 1549 1558 16777215]
                )
              ]
              spids: [1532 1538 1561]
            )
          ]
          spids: [1512]
        )
      spids: [1507 1511]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Subshell
                  child: 
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$0'))} {(Lit_Other '=')} 
                          {(DQ ($ VSub_Name '$BASH_SOURCE'))} {(Lit_Other ']')}
                        )
                        (Pipeline
                          children: [
                            (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$BASH_SOURCE'))} 
                              {(Lit_Other ']')}
                            )
                          ]
                          negated: T
                        )
                      ]
                    )
                  spids: [1568 1596]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(parse_options)} {(DQ ($ VSub_At '$@'))})
            (Pipeline children:[(C {(tokenize)}) (C {(parse)})] negated:F)
          ]
          spids: [16777215 1599]
        )
      ]
      spids: [16777215 1615]
    )
  ]
)