(CommandList
  children: [
    (C {(set)} {(-e)})
    (AndOr
      children: [
        (SimpleCommand
          words: [{(command)} {(-v)} {(tput)}]
          redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[17])]
        )
        (C {(exec)} {(grep)} {(-v)} {(DQ ('^begin '))})
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:header_pattern)
          op: Equal
          rhs: {(SQ <'[0-9]+\\.\\.[0-9]+'>)}
          spids: [33]
        )
      ]
      spids: [33]
    )
    (SimpleCommand
      words: [{(read)} {(-r)} {(header)}]
      more_env: [(env_pair name:IFS val:{(SQ )} spids:[38])]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_EqualTilde
                      left: {(DQ ($ VSub_Name '$header'))}
                      right: {($ VSub_Name '$header_pattern')}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:count)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name header>
                          suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 3)}))
                          spids: [67 71]
                        )
                      )
                    }
                  spids: [65]
                )
              ]
              spids: [65]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[75])]
              spids: [75]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:failures) op:Equal rhs:{(0)} spids:[79])]
              spids: [79]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:skipped) op:Equal rhs:{(0)} spids:[83])]
              spids: [83]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:name) op:Equal rhs:{(DQ )} spids:[87])]
              spids: [87]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:count_column_width)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: 
                              (ArithBinary
                                op_id: Arith_Star
                                left: 
                                  (ArithWord
                                    w: 
                                      {
                                        (BracedVarSub
                                          token: <VSub_Name count>
                                          prefix_op: VSub_Pound
                                          spids: [95 98]
                                        )
                                      }
                                  )
                                right: (ArithWord w:{(Lit_Digits 2)})
                              )
                            right: (ArithWord w:{(Lit_Digits 2)})
                          )
                        spids: [93 109]
                      )
                    }
                  spids: [92]
                )
              ]
              spids: [92]
            )
          ]
          spids: [16777215 62]
        )
      ]
      else_action: [
        (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$header'))})
        (C {(exec)} {(cat)})
      ]
      spids: [111 135]
    )
    (FuncDef
      name: update_screen_width
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:screen_width)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(tput)} {(cols)})])
                          left_token: <Left_CommandSub '$('>
                          spids: [147 151]
                        )
                      )
                    }
                  spids: [145]
                )
              ]
              spids: [145]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:count_column_left)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Minus
                            left: (ArithWord w:{($ VSub_Name '$screen_width')})
                            right: (ArithWord w:{($ VSub_Name '$count_column_width')})
                          )
                        spids: [156 165]
                      )
                    }
                  spids: [155]
                )
              ]
              spids: [155]
            )
          ]
          spids: [142]
        )
      spids: [138 141]
    )
    (C {(trap)} {(update_screen_width)} {(WINCH)})
    (C {(update_screen_width)})
    (FuncDef
      name: begin
      body: 
        (BraceGroup
          children: [
            (C {(go_to_column)} {(0)})
            (C {(printf_with_truncation)} 
              {
                (ArithSubPart
                  anode: 
                    (ArithBinary
                      op_id: Arith_Minus
                      left: (ArithWord w:{($ VSub_Name '$count_column_left')})
                      right: (ArithWord w:{(Lit_Digits 1)})
                    )
                  spids: [193 202]
                )
              } {(DQ ('   %s'))} {(DQ ($ VSub_Name '$name'))}
            )
            (C {(clear_to_end_of_line)})
            (C {(go_to_column)} {($ VSub_Name '$count_column_left')})
            (C {(printf)} 
              {
                (DQ ('%') (BracedVarSub token:<VSub_Name count> prefix_op:VSub_Pound spids:[225 228]) 
                  (s/) (${ VSub_Name count)
                )
              } {(DQ ($ VSub_Name '$index'))}
            )
            (C {(go_to_column)} {(1)})
          ]
          spids: [183]
        )
      spids: [179 182]
    )
    (FuncDef
      name: pass
      body: 
        (BraceGroup
          children: [
            (C {(go_to_column)} {(0)})
            (C {(printf)} {(DQ (' \xe2\x9c\x93 %s'))} {(DQ ($ VSub_Name '$name'))})
            (C {(advance)})
          ]
          spids: [251]
        )
      spids: [247 250]
    )
    (FuncDef
      name: skip
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:reason)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [284]
                )
              ]
              spids: [282]
            )
            (AndOr
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$reason'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:reason)
                      op: Equal
                      rhs: {(DQ (': ') ($ VSub_Name '$reason'))}
                      spids: [302]
                    )
                  ]
                  spids: [302]
                )
              ]
              op_id: Op_DPipe
            )
            (C {(go_to_column)} {(0)})
            (C {(printf)} {(DQ (' - %s (skipped%s)'))} {(DQ ($ VSub_Name '$name'))} 
              {(DQ ($ VSub_Name '$reason'))}
            )
            (C {(advance)})
          ]
          spids: [279]
        )
      spids: [275 278]
    )
    (FuncDef
      name: fail
      body: 
        (BraceGroup
          children: [
            (C {(go_to_column)} {(0)})
            (C {(set_color)} {(1)} {(bold)})
            (C {(printf)} {(DQ (' \xe2\x9c\x97 %s'))} {(DQ ($ VSub_Name '$name'))})
            (C {(advance)})
          ]
          spids: [338]
        )
      spids: [334 337]
    )
    (FuncDef
      name: log
      body: 
        (BraceGroup
          children: [
            (C {(set_color)} {(1)})
            (C {(printf)} {(DQ ('   %s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Number '$1'))})
            (C {(clear_color)})
          ]
          spids: [373]
        )
      spids: [369 372]
    )
    (FuncDef
      name: summary
      body: 
        (BraceGroup
          children: [
            (C {(printf)} {(DQ (Lit_Other '\\') ('n%d test%s'))} {(DQ ($ VSub_Name '$count'))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(plural)} {(DQ ($ VSub_Name '$count'))})]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [418 424]
                  )
                )
              }
            )
            (C {(printf)} {(DQ (', %d failure%s'))} {(DQ ($ VSub_Name '$failures'))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(plural)} {(DQ ($ VSub_Name '$failures'))})]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [440 446]
                  )
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$skipped'))} {(-gt)} {(0)} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(printf)} {(DQ (', %d skipped'))} {(DQ ($ VSub_Name '$skipped'))})]
                  spids: [16777215 466]
                )
              ]
              spids: [16777215 480]
            )
            (C {(printf)} {(DQ (Lit_Other '\\') (n))})
          ]
          spids: [403]
        )
      spids: [399 402]
    )
    (FuncDef
      name: printf_with_truncation
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:width)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [503]
                )
              ]
              spids: [501]
            )
            (C {(shift)})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:string)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(printf)} {(DQ ($ VSub_At '$@'))})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [516 522]
                        )
                      )
                    }
                  spids: [514]
                )
              ]
              spids: [512]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name string>
                                prefix_op: VSub_Pound
                                spids: [532 535]
                              )
                            )
                          } {(-gt)} {(DQ ($ VSub_Name '$width'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(printf)} {(DQ ('%s...'))} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name string>
                            suffix_op: 
                              (Slice
                                begin: (ArithWord w:{(Lit_Digits 0)})
                                length: 
                                  (ArithWord
                                    w: 
                                      {
                                        (ArithSubPart
                                          anode: 
                                            (ArithBinary
                                              op_id: Arith_Minus
                                              left: (ArithWord w:{($ VSub_Name '$width')})
                                              right: (ArithWord w:{(Lit_Digits 4)})
                                            )
                                          spids: [562 571]
                                        )
                                      }
                                  )
                              )
                            spids: [557 572]
                          )
                        )
                      }
                    )
                  ]
                  spids: [16777215 547]
                )
              ]
              else_action: [(C {(printf)} {(DQ ('%s'))} {(DQ ($ VSub_Name '$string'))})]
              spids: [576 590]
            )
          ]
          spids: [498]
        )
      spids: [494 497]
    )
    (FuncDef
      name: go_to_column
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:column)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [604]
                )
              ]
              spids: [602]
            )
            (C {(printf)} {(DQ (Lit_Other '\\') ('x1B[%dG'))} 
              {
                (ArithSubPart
                  anode: 
                    (ArithBinary
                      op_id: Arith_Plus
                      left: (ArithWord w:{($ VSub_Name '$column')})
                      right: (ArithWord w:{(Lit_Digits 1)})
                    )
                  spids: [617 626]
                )
              }
            )
          ]
          spids: [599]
        )
      spids: [595 598]
    )
    (FuncDef
      name: clear_to_end_of_line
      body: (BraceGroup children:[(C {(printf)} {(DQ (Lit_Other '\\') ('x1B[K'))})] spids:[635])
      spids: [631 634]
    )
    (FuncDef
      name: advance
      body: 
        (BraceGroup
          children: [(C {(clear_to_end_of_line)}) (C {(echo)}) (C {(clear_color)})]
          spids: [652]
        )
      spids: [648 651]
    )
    (FuncDef
      name: set_color
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [675]
                )
              ]
              spids: [673]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:weight)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [683]
                )
              ]
              spids: [681]
            )
            (C {(printf)} {(DQ (Lit_Other '\\') ('x1B[%d;%dm'))} 
              {
                (ArithSubPart
                  anode: 
                    (ArithBinary
                      op_id: Arith_Plus
                      left: (ArithWord w:{(Lit_Digits 30)})
                      right: (ArithWord w:{($ VSub_Name '$color')})
                    )
                  spids: [696 705]
                )
              } 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (AndOr
                            children: [
                              (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$weight'))} {(Lit_Other '=')} 
                                {(DQ (bold))} {(Lit_Other ']')}
                              )
                              (AndOr
                                children: [(C {(echo)} {(1)}) (C {(echo)} {(22)})]
                                op_id: Op_DPipe
                              )
                            ]
                            op_id: Op_DAmp
                          )
                        ]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [708 736]
                  )
                )
              }
            )
          ]
          spids: [670]
        )
      spids: [666 669]
    )
    (FuncDef
      name: clear_color
      body: (BraceGroup children:[(C {(printf)} {(DQ (Lit_Other '\\') ('x1B[0m'))})] spids:[746])
      spids: [742 745]
    )
    (FuncDef
      name: plural
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(-eq)} {(1)} {(Lit_Other ']')})
                (C {(echo)} {(DQ (s))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [763]
        )
      spids: [759 762]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:_buffer) op:Equal rhs:{(DQ )} spids:[789])]
      spids: [789]
    )
    (FuncDef
      name: buffer
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_buffer)
                  op: Equal
                  rhs: 
                    {
                      (DQ (${ VSub_Name _buffer) 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(DQ ($ VSub_At '$@'))})])
                          left_token: <Left_CommandSub '$('>
                          spids: [806 810]
                        )
                      )
                    }
                  spids: [801]
                )
              ]
              spids: [801]
            )
          ]
          spids: [798]
        )
      spids: [794 797]
    )
    (FuncDef
      name: flush
      body: 
        (BraceGroup
          children: [
            (C {(printf)} {(DQ ('%s'))} {(DQ ($ VSub_Name '$_buffer'))})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_buffer) op:Equal rhs:{(DQ )} spids:[834])]
              spids: [834]
            )
          ]
          spids: [820]
        )
      spids: [816 819]
    )
    (FuncDef
      name: finish
      body: 
        (BraceGroup
          children: [(C {(flush)}) (C {(printf)} {(DQ (Lit_Other '\\') (n))})]
          spids: [845]
        )
      spids: [841 844]
    )
    (C {(trap)} {(finish)} {(EXIT)})
    (While
      cond: [
        (Sentence
          child: 
            (SimpleCommand
              words: [{(read)} {(-r)} {(line)}]
              more_env: [(env_pair name:IFS val:{(SQ )} spids:[870])]
            )
          terminator: <Op_Semi ';'>
        )
      ]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {(DQ ($ VSub_Name '$line'))}
              arms: [
                (case_arm
                  pat_list: [{(DQ ('begin ')) (Lit_Other '*')}]
                  action: [
                    (C {(let)} {(Lit_VarLike 'index+=') (1)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name line>
                                  suffix_op: 
                                    (StringUnary
                                      op_id: VOp1_Pound
                                      arg_word: {('* ') ($ VSub_Name '$index') (' ')}
                                    )
                                  spids: [907 913]
                                )
                              )
                            }
                          spids: [905]
                        )
                      ]
                      spids: [905]
                    )
                    (C {(buffer)} {(begin)})
                    (C {(flush)})
                  ]
                  spids: [892 896 925 16777215]
                )
                (case_arm
                  pat_list: [{(DQ ('ok ')) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:skip_expr)
                          op: Equal
                          rhs: 
                            {
                              (DQ ('ok ') ($ VSub_Name '$index') (' # skip (') (Lit_Other '\\') 
                                ('(([^)]*)') (Lit_Other '\\') ('))?')
                              )
                            }
                          spids: [936]
                        )
                      ]
                      spids: [936]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_EqualTilde
                                      left: {(DQ ($ VSub_Name '$line'))}
                                      right: {($ VSub_Name '$skip_expr')}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(let)} {(Lit_VarLike 'skipped+=') (1)})
                            (C {(buffer)} {(skip)} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name BASH_REMATCH>
                                    bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)}))
                                    spids: [977 982]
                                  )
                                )
                              }
                            )
                          ]
                          spids: [16777215 963]
                        )
                      ]
                      else_action: [(C {(buffer)} {(pass)})]
                      spids: [986 994]
                    )
                  ]
                  spids: [929 933 997 16777215]
                )
                (case_arm
                  pat_list: [{(DQ ('not ok ')) (Lit_Other '*')}]
                  action: [(C {(let)} {(Lit_VarLike 'failures+=') (1)}) (C {(buffer)} {(fail)})]
                  spids: [1001 1005 1019 16777215]
                )
                (case_arm
                  pat_list: [{(DQ ('# ')) (Lit_Other '*')}]
                  action: [
                    (C {(buffer)} {(log)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name line>
                            suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 2)}))
                            spids: [1035 1039]
                          )
                        )
                      }
                    )
                  ]
                  spids: [1023 1027 1043 16777215]
                )
              ]
              spids: [882 888 1046]
            )
          ]
          spids: [879 1048]
        )
    )
    (C {(buffer)} {(summary)})
  ]
)