(command.CommandList
  children: [
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_DollarName '$BALLS_LIB'))})
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_LIB)
              op: assign_op.Equal
              rhs: {<.>}
              spids: [15]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_DollarName '$BALLS_CONF'))})
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_CONF)
              op: assign_op.Equal
              rhs: {<'./config.sh'>}
              spids: [31]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_DollarName '$BALLS_ROOT'))})
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_ROOT)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (C {<readlink>} {<-f>} 
                        {
                          (DQ 
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              child: (C {<dirname>} {($ Id.VSub_DollarName '$BALLS_CONF')})
                            ) <'/../'>
                          )
                        }
                      )
                  )
                }
              spids: [46]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_DollarName '$BALLS_LIB'))})
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_LIB)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: (C {<dirname>} {($ Id.VSub_Number '$0')})
                  )
                }
              spids: [74]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_DollarName '$BALLS_TMP'))})
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_TMP)
              op: assign_op.Equal
              rhs: {<'/tmp/balls'>}
              spids: [94]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.DBracket
          expr: (bool_expr.Unary op_id:Id.BoolUnary_d child:{(DQ ($ Id.VSub_DollarName '$BALLS_TMP'))})
        )
        (C {<mkdir>} {(DQ ($ Id.VSub_DollarName '$BALLS_TMP'))})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_DollarName '$BALLS_PORT'))})
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_PORT)
              op: assign_op.Equal
              rhs: {<3000>}
              spids: [128]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: 
            (bool_expr.Unary
              op_id: Id.BoolUnary_z
              child: {(DQ ($ Id.VSub_DollarName '$BALLS_VIEWS'))}
            )
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_VIEWS)
              op: assign_op.Equal
              rhs: {($ Id.VSub_DollarName '$BALLS_ROOT') <'/views'>}
              spids: [144]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: 
            (bool_expr.Unary
              op_id: Id.BoolUnary_z
              child: {(DQ ($ Id.VSub_DollarName '$BALLS_ACTIONS'))}
            )
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BALLS_ACTIONS)
              op: assign_op.Equal
              rhs: {($ Id.VSub_DollarName '$BALLS_ROOT') <'/actions'>}
              spids: [160]
            )
          ]
        )
      ]
    )
    (C {<.>} {($ Id.VSub_DollarName '$BALLS_LIB') <'/util.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$BALLS_LIB') <'/http.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$BALLS_LIB') <'/router.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$BALLS_LIB') <'/server.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$BALLS_LIB') <'/view.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$BALLS_LIB') <'/model.sh'>})
  ]
)