(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:counter)
          op: assign_op.Equal
          rhs: {<2>}
          spids: [14]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:remainder)
          op: assign_op.Equal
          rhs: {<1>}
          spids: [17]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [{<echo>} {(DQ <'Usage: isprime NUMBER'>)}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [21 35]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:number)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [55]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$number')} {<-lt>} {<2>} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Sentence
              child: (C {<echo>} {(DQ <'No, '> ($ Id.VSub_DollarName '$number') <' is not a prime'>)})
              terminator: <Id.Op_Semi _>
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [63 77]
        )
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: [
        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$counter')} {<-le>} 
          {
            (command_sub
              left_token: <Id.Left_DollarParen '$('>
              child: (C {<expr>} {($ Id.VSub_DollarName '$number')} {<'/'>} {<2>})
            )
          } {<-a>} {($ Id.VSub_DollarName '$remainder')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>}
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:remainder)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<expr>} {($ Id.VSub_DollarName '$number')} {<Id.Lit_Other '%'>} 
                            {($ Id.VSub_DollarName '$counter')}
                          )
                      )
                    }
                  spids: [132]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:counter)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<expr>} {($ Id.VSub_DollarName '$counter')} {<Id.Lit_Other '+'>} {<1>})
                      )
                    }
                  spids: [151]
                )
              ]
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$remainder')} {<-eq>} {<0>} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [(C {<echo>} {(DQ <'No, '> ($ Id.VSub_DollarName '$number') <' is not a prime'>)})]
          spids: [165 179]
        )
      ]
      else_action: [(C {<echo>} {(DQ <'Yes, '> ($ Id.VSub_DollarName '$number') <' is a prime'>)})]
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)