(command.CommandList
  children: [
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-n)} 
          {
            (DQ 
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:FLAGS_VERSION span_id:275)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
              )
            )
          } {(Id.Lit_RBracket ']')}
        )
        (command.ControlFlow
          token: (Token id:Id.ControlFlow_Return val:return span_id:284)
          arg_word: {(0)}
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_VERSION)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:1.2.3pre span_id:290))}
          spids: [288]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_TRUE)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [297]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_FALSE)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [300]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_ERROR)
          op: assign_op.Equal
          rhs: {(2)}
          spids: [303]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_LEVEL_DEBUG)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [310]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_LEVEL_INFO)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [313]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_LEVEL_WARN)
          op: assign_op.Equal
          rhs: {(2)}
          spids: [316]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_LEVEL_ERROR)
          op: assign_op.Equal
          rhs: {(3)}
          spids: [319]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_LEVEL_FATAL)
          op: assign_op.Equal
          rhs: {(4)}
          spids: [322]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_LEVEL_DEFAULT)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name FLAGS_LEVEL_WARN)}
          spids: [325]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_EXPR_CMD)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'expr --' span_id:336))}
          spids: [334]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_UNAME_S)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:340)
                command_list: (command.CommandList children:[(C {(uname)} {(-s)})])
              )
            }
          spids: [339]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name __FLAGS_UNAME_S))} 
                  {(Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:BSD span_id:361))} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:365)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__FLAGS_EXPR_CMD)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'gexpr --' span_id:372))}
                  spids: [370]
                )
              ]
            )
          ]
          spids: [348 367]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:_flags_output_)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:379)
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Simple
                            words: [{(${ Id.VSub_Name __FLAGS_EXPR_CMD)}]
                            redirects: [
                              (redir.Redir
                                op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:386)
                                fd: 2
                                arg_word: {(1)}
                              )
                            ]
                          )
                        ]
                      )
                  )
                }
              spids: [378]
            )
          ]
        )
        (command.If
          arms: [
            (if_arm
              cond: [
                (command.Sentence
                  child: 
                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} 
                      {(${ Id.VSub_Name FLAGS_TRUE)} {(-a)} {(DQ (${ Id.VSub_Name _flags_output_))} {(Id.Lit_Equals '=')} 
                      {(SQ (Token id:Id.Lit_Chars val:-- span_id:414))} {(Id.Lit_RBracket ']')}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:418)
                )
              ]
              action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:__FLAGS_EXPR_CMD)
                      op: assign_op.Equal
                      rhs: {(SQ (Token id:Id.Lit_Chars val:expr span_id:429))}
                      spids: [427]
                    )
                  ]
                )
              ]
              spids: [391 420]
            )
          ]
        )
        (C {(unset)} {(_flags_output_)})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_EXPR_CMD)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:FLAGS_EXPR_CMD span_id:448)
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {(${ Id.VSub_Name __FLAGS_EXPR_CMD)}
                  )
              )
            }
          spids: [446]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLAGS_GETOPT_CMD)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:FLAGS_GETOPT_CMD span_id:457)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(getopt)})
              )
            }
          spids: [455]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-n)} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:ZSH_VERSION span_id:474)
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                      )
                    )
                  } {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:480)
            )
          ]
          action: [
            (command.Pipeline
              children: [
                (C {(setopt)})
                (command.Simple
                  words: [{(grep)} {(DQ ('^shwordsplit') (Id.Lit_Other '$'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:495)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-ne)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:512)
                    )
                  ]
                  action: [
                    (C {(_flags_fatal)} 
                      {
                        (SQ 
                          (Token
                            id: Id.Lit_Chars
                            val: 'zsh shwordsplit option is required for proper zsh operation'
                            span_id: 520
                          )
                        )
                      }
                    )
                  ]
                  spids: [499 514]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:FLAGS_PARENT span_id:535)
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:541)
                    )
                  ]
                  action: [
                    (C {(_flags_fatal)} 
                      {
                        (DQ ('zsh does not pass ') 
                          (word_part.EscapedLiteral
                            token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:550)
                          ) ("0 through properly. please declare' ") 
                          (word_part.EscapedLiteral
                            token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:553)
                          ) ('FLAGS_PARENT=') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:555)) 
                          (0) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:557)) 
                          (' before calling shFlags')
                        )
                      }
                    )
                  ]
                  spids: [527 543]
                )
              ]
            )
          ]
          spids: [466 482]
        )
      ]
    )
    (command.Subshell
      command_list: 
        (command.CommandList
          children: [
            (command.Sentence
              child: 
                (C {(echo)} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:FLAGS_TRUE span_id:576)
                        suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(0)})
                      )
                    )
                  }
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:581)
            )
          ]
        )
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:585)
          fd: -1
          arg_word: {(/dev/null)}
        )
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'2>&' span_id:588) fd:2 arg_word:{(1)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} 
                  {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:604)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__FLAGS_USE_BUILTIN)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                  spids: [609]
                )
              ]
            )
          ]
          spids: [591 606]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:__FLAGS_USE_BUILTIN)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
              spids: [617]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_RESERVED_LIST)
          op: assign_op.Equal
          rhs: 
            {
              (SQ 
                (Token
                  id: Id.Lit_Chars
                  val: ' ARGC ARGV ERROR FALSE GETOPT_CMD HELP PARENT TRUE '
                  span_id: 641
                )
              )
            }
          spids: [639]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_RESERVED_LIST)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name __FLAGS_RESERVED_LIST) (' VERSION '))}
          spids: [644]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_GETOPT_VERS_STD)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [656]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_GETOPT_VERS_ENH)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [659]
        )
      ]
    )
    (command.ShFunction
      name: _flags_getopt_vers
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_getopt_cmd_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Number val:1 span_id:675)
                        suffix_op: 
                          (suffix_op.Unary
                            op_id: Id.VTest_ColonHyphen
                            arg_word: {(${ Id.VSub_Name FLAGS_GETOPT_CMD)}
                          )
                      )
                    }
                  spids: [673]
                )
              ]
            )
            (command.Case
              to_match: 
                {
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:686)
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Simple
                              words: [{(${ Id.VSub_Name _flags_getopt_cmd_)} {(-lfoo)} {(SQ )} {(--foo)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:700)
                                  fd: 2
                                  arg_word: {(1)}
                                )
                              ]
                            )
                          ]
                        )
                    )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [{(SQ (Token id:Id.Lit_Chars val:' -- --foo' span_id:709))}]
                  action: [(C {(echo)} {(${ Id.VSub_Name __FLAGS_GETOPT_VERS_STD)})]
                  spids: [708 711 719 -1]
                )
                (case_arm
                  pat_list: [{(SQ (Token id:Id.Lit_Chars val:' --foo --' span_id:723))}]
                  action: [(C {(echo)} {(${ Id.VSub_Name __FLAGS_GETOPT_VERS_ENH)})]
                  spids: [722 725 733 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [(C {(echo)} {(${ Id.VSub_Name __FLAGS_GETOPT_VERS_STD)})]
                  spids: [740 741 749 -1]
                )
              ]
            )
            (C {(unset)} {(_flags_getopt_cmd_)})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_GETOPT_VERS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:765)
                command_list: (command.CommandList children:[(C {(_flags_getopt_vers)})])
              )
            }
          spids: [764]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_OPTSTR_SHORT)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [775]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_OPTSTR_LONG)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [778]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_NULL)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'~' span_id:784))}
          spids: [782]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_INFO_DEFAULT)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:default span_id:793))}
          spids: [791]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_INFO_HELP)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:help span_id:798))}
          spids: [796]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_INFO_SHORT)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:short span_id:803))}
          spids: [801]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_INFO_TYPE)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:type span_id:808))}
          spids: [806]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_LEN_SHORT)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [815]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_LEN_LONG)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [818]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_TYPE_NONE)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [825]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_TYPE_BOOLEAN)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [828]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_TYPE_FLOAT)
          op: assign_op.Equal
          rhs: {(2)}
          spids: [831]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_TYPE_INTEGER)
          op: assign_op.Equal
          rhs: {(3)}
          spids: [834]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__FLAGS_TYPE_STRING)
          op: assign_op.Equal
          rhs: {(4)}
          spids: [837]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_constants)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:845)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(Id.KW_Set set)})
                          (C {(awk)} {(-F) (Id.Lit_Equals '=')} 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '/^FLAGS_/ || /^__FLAGS_/ {print $1}'
                                  span_id: 857
                                )
                              )
                            }
                          )
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [844]
        )
      ]
    )
    (command.ForEach
      iter_name: __flags_const
      iter_words: [{(${ Id.VSub_Name __flags_constants)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(${ Id.VSub_Name __flags_const)}
              arms: [
                (case_arm
                  pat_list: [{(FLAGS_HELP)}]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Continue val:continue span_id:891)
                    )
                  ]
                  spids: [888 889 893 -1]
                )
                (case_arm
                  pat_list: [{(FLAGS_PARENT)}]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Continue val:continue span_id:899)
                    )
                  ]
                  spids: [896 897 901 -1]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:ZSH_VERSION span_id:919)
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:925)
                    )
                  ]
                  action: [
                    (C {(readonly)} {(DQ (${ Id.VSub_Name __flags_const))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Continue val:continue span_id:939)
                    )
                  ]
                  spids: [911 927]
                )
              ]
            )
            (command.Case
              to_match: {(${ Id.VSub_Name ZSH_VERSION)}
              arms: [
                (case_arm
                  pat_list: [{(Id.Lit_LBracket '[') (123) (Id.Lit_RBracket ']') (.) (Id.Lit_Star '*')}]
                  action: [(C {(readonly)} {(DQ (${ Id.VSub_Name __flags_const))})]
                  spids: [954 959 969 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [(C {(readonly)} {(-g)} {(DQ (${ Id.VSub_Name __flags_const))})]
                  spids: [972 973 985 -1]
                )
              ]
            )
          ]
        )
    )
    (C {(unset)} {(__flags_const)} {(__flags_constants)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_boolNames)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:1017))}
          spids: [1015]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_longNames)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:1025))}
          spids: [1023]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_shortNames)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:1033))}
          spids: [1031]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_definedNames)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:1041))}
          spids: [1039]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_columns)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [1048]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_level)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [1055]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__flags_opts)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [1061]
        )
      ]
    )
    (command.ShFunction
      name: _flags_debug
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name __flags_level)} {(-le)} 
                  {(${ Id.VSub_Name FLAGS_LEVEL_DEBUG)} {(Id.Lit_RBracket ']')}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1105)
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('flags:DEBUG ') ($ Id.VSub_Star '$*'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1115)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_info
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name __flags_level)} {(-le)} 
                  {(${ Id.VSub_Name FLAGS_LEVEL_INFO)} {(Id.Lit_RBracket ']')}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1143)
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('flags:INFO ') ($ Id.VSub_Star '$*'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1153)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_warn
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name __flags_level)} {(-le)} 
                  {(${ Id.VSub_Name FLAGS_LEVEL_WARN)} {(Id.Lit_RBracket ']')}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1181)
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('flags:WARN ') ($ Id.VSub_Star '$*'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1191)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_error
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name __flags_level)} {(-le)} 
                  {(${ Id.VSub_Name FLAGS_LEVEL_ERROR)} {(Id.Lit_RBracket ']')}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1219)
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('flags:ERROR ') ($ Id.VSub_Star '$*'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1229)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_fatal
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name __flags_level)} {(-le)} 
                  {(${ Id.VSub_Name FLAGS_LEVEL_FATAL)} {(Id.Lit_RBracket ']')}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1257)
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('flags:FATAL ') ($ Id.VSub_Star '$*'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1267)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:1271)
              arg_word: {(${ Id.VSub_Name FLAGS_ERROR)}
            )
          ]
        )
    )
    (command.ShFunction
      name: flags_loggingLevel
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: (C {(echo)} {(${ Id.VSub_Name __flags_level)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1294)
            )
          ]
        )
    )
    (command.ShFunction
      name: flags_setLoggingLevel
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-ne)} {(1)} {(Id.Lit_RBracket ']')})
                (C {(_flags_fatal)} {(DQ ('flags_setLevel(): logging level missing'))})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_level_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1343]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_level_))} {(-ge)} 
                  {(DQ (${ Id.VSub_Name FLAGS_LEVEL_DEBUG))} {(-a)} {(DQ (${ Id.VSub_Name _flags_level_))} {(-le)} {(DQ (${ Id.VSub_Name FLAGS_LEVEL_FATAL))} 
                  {(Id.Lit_RBracket ']')}
                )
                (C {(_flags_fatal)} 
                  {(DQ ("Invalid logging level '") (${ Id.VSub_Name _flags_level_) ("' specified."))}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__flags_level)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1398]
                )
              ]
            )
            (C {(unset)} {(_flags_level_)})
          ]
        )
    )
    (command.ShFunction
      name: _flags_define
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-lt)} {(4)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1481)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_error)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: 'DEFINE error: too few arguments'
                                  span_id: 1488
                                )
                              )
                            }
                          spids: [1486]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                          spids: [1492]
                        )
                      ]
                    )
                    (C {(_flags_error)} {(DQ (${ Id.VSub_Name flags_error))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1507)
                      arg_word: {(${ Id.VSub_Name flags_return)}
                    )
                  ]
                  spids: [1470 1483]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_type_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1518]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_name_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [1522]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_default_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [1526]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_help_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Number val:4 span_id:1532)
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{('\xc2\xa7')})
                      )
                    }
                  spids: [1530]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_short_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Number val:5 span_id:1543)
                        suffix_op: 
                          (suffix_op.Unary
                            op_id: Id.VTest_ColonHyphen
                            arg_word: {(${ Id.VSub_Name __FLAGS_NULL)}
                          )
                      )
                    }
                  spids: [1541]
                )
              ]
            )
            (C {(_flags_debug)} 
              {
                (DQ ('type:') (${ Id.VSub_Name _flags_type_) (' name:') (${ Id.VSub_Name _flags_name_))
              } 
              {
                (DQ ("default:'") (${ Id.VSub_Name _flags_default_) ("' help:'") 
                  (${ Id.VSub_Name _flags_help_) ("'")
                )
              } {(DQ ('short:') (${ Id.VSub_Name _flags_short_))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_return_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                  spids: [1590]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_usName_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_Backtick val:'`' span_id:1598)
                          command_list: 
                            (command.CommandList
                              children: [
                                (C {(_flags_underscoreName)} {(DQ (${ Id.VSub_Name _flags_name_))})
                              ]
                            )
                        )
                      )
                    }
                  spids: [1596]
                )
              ]
            )
            (C {(_flags_itemInList)} {(DQ (${ Id.VSub_Name _flags_usName_))} 
              {(DQ (${ Id.VSub_Name __FLAGS_RESERVED_LIST))}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1645)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_error)
                          op: assign_op.Equal
                          rhs: {(DQ ('flag name (') (${ Id.VSub_Name _flags_name_) (') is reserved'))}
                          spids: [1650]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_return_)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                          spids: [1660]
                        )
                      ]
                    )
                  ]
                  spids: [1632 1647]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_return_)} {(-eq)} 
                      {(${ Id.VSub_Name FLAGS_TRUE)} {(-a)} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS))} {(-ne)} 
                      {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS_ENH))} {(-a)} {(DQ (${ Id.VSub_Name _flags_short_))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name __FLAGS_NULL))} 
                      {(Id.Lit_RBracket ']')}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_error)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ('short flag required for (') (${ Id.VSub_Name _flags_name_) 
                                (') on this platform')
                              )
                            }
                          spids: [1730]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_return_)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                          spids: [1740]
                        )
                      ]
                    )
                  ]
                  spids: [1674 1727]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_return_)} {(-eq)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1769)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(_flags_itemInList)} {(DQ (${ Id.VSub_Name _flags_usName_))} 
                                  {(DQ (${ Id.VSub_Name __flags_definedNames))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1789)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_error)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ('definition for ([no]') (${ Id.VSub_Name _flags_name_) 
                                        (') already exists')
                                      )
                                    }
                                  spids: [1794]
                                )
                              ]
                            )
                            (C {(_flags_warn)} {(DQ (${ Id.VSub_Name flags_error))})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_return_)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                                  spids: [1813]
                                )
                              ]
                            )
                          ]
                          spids: [1774 1791]
                        )
                      ]
                    )
                  ]
                  spids: [1754 1771]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_return_)} {(-eq)} 
                      {(${ Id.VSub_Name FLAGS_TRUE)} {(-a)} {(DQ (${ Id.VSub_Name _flags_short_))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                      {(DQ (${ Id.VSub_Name __FLAGS_NULL))} {(Id.Lit_RBracket ']')}
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(_flags_itemInList)} {(DQ (${ Id.VSub_Name _flags_short_))} 
                                  {(DQ (${ Id.VSub_Name __flags_shortNames))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1884)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_error)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ('flag short name (') (${ Id.VSub_Name _flags_short_) 
                                        (') already defined')
                                      )
                                    }
                                  spids: [1889]
                                )
                              ]
                            )
                            (C {(_flags_warn)} {(DQ (${ Id.VSub_Name flags_error))})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_return_)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                                  spids: [1908]
                                )
                              ]
                            )
                          ]
                          spids: [1869 1886]
                        )
                      ]
                    )
                  ]
                  spids: [1830 1866]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_return_)} {(-eq)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1948)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {(${ Id.VSub_Name _flags_type_)}
                      arms: [
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN)}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(_flags_validBool)} {(DQ (${ Id.VSub_Name _flags_default_))})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:1977)
                                    )
                                  ]
                                  action: [
                                    (command.Case
                                      to_match: {(${ Id.VSub_Name _flags_default_)}
                                      arms: [
                                        (case_arm
                                          pat_list: [{(true)} {(t)} {(0)}]
                                          action: [
                                            (command.ShAssignment
                                              pairs: [
                                                (assign_pair
                                                  lhs: (sh_lhs_expr.Name name:_flags_default_)
                                                  op: assign_op.Equal
                                                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                                                  spids: [1998]
                                                )
                                              ]
                                            )
                                          ]
                                          spids: [1991 1996 2003 -1]
                                        )
                                        (case_arm
                                          pat_list: [{(false)} {(f)} {(1)}]
                                          action: [
                                            (command.ShAssignment
                                              pairs: [
                                                (assign_pair
                                                  lhs: (sh_lhs_expr.Name name:_flags_default_)
                                                  op: assign_op.Equal
                                                  rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                                                  spids: [2013]
                                                )
                                              ]
                                            )
                                          ]
                                          spids: [2006 2011 2018 -1]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [1968 1979]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_error)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ("invalid default flag value '") 
                                            (${ Id.VSub_Name _flags_default_) ("'")
                                          )
                                        }
                                      spids: [2027]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_flags_return_)
                                      op: assign_op.Equal
                                      rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                      spids: [2037]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [1962 1965 2046 -1]
                        )
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_FLOAT)}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(_flags_validFloat)} 
                                          {(DQ (${ Id.VSub_Name _flags_default_))}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2065)
                                    )
                                  ]
                                  action: [(C {(Id.Lit_Other ':')})]
                                  spids: [2056 2067]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_error)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ("invalid default flag value '") 
                                            (${ Id.VSub_Name _flags_default_) ("'")
                                          )
                                        }
                                      spids: [2076]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_flags_return_)
                                      op: assign_op.Equal
                                      rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                      spids: [2086]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [2050 2053 2095 -1]
                        )
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_INTEGER)}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(_flags_validInt)} {(DQ (${ Id.VSub_Name _flags_default_))})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2114)
                                    )
                                  ]
                                  action: [(C {(Id.Lit_Other ':')})]
                                  spids: [2105 2116]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_error)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ("invalid default flag value '") 
                                            (${ Id.VSub_Name _flags_default_) ("'")
                                          )
                                        }
                                      spids: [2125]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_flags_return_)
                                      op: assign_op.Equal
                                      rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                      spids: [2135]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [2099 2102 2144 -1]
                        )
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_STRING)}]
                          spids: [2148 2151 2153 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_error)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ("unrecognized flag type '") (${ Id.VSub_Name _flags_type_) 
                                        ("'")
                                      )
                                    }
                                  spids: [2164]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_return_)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                  spids: [2174]
                                )
                              ]
                            )
                          ]
                          spids: [2160 2161 2180 -1]
                        )
                      ]
                    )
                  ]
                  spids: [1933 1950]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_return_)} {(-eq)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2205)
                    )
                  ]
                  action: [
                    (C {(eval)} 
                      {
                        (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ("='") 
                          (${ Id.VSub_Name _flags_default_) ("'")
                        )
                      }
                    )
                    (C {(eval)} 
                      {
                        (DQ (__flags_) (${ Id.VSub_Name _flags_usName_) (_) 
                          (${ Id.VSub_Name __FLAGS_INFO_TYPE) ('=') (${ Id.VSub_Name _flags_type_)
                        )
                      }
                    )
                    (C {(eval)} 
                      {
                        (DQ (__flags_) (${ Id.VSub_Name _flags_usName_) (_) 
                          (${ Id.VSub_Name __FLAGS_INFO_DEFAULT) ('=') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:2260)) 
                          (${ Id.VSub_Name _flags_default_) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:2264))
                        )
                      }
                    )
                    (C {(eval)} 
                      {
                        (DQ (__flags_) (${ Id.VSub_Name _flags_usName_) (_) 
                          (${ Id.VSub_Name __FLAGS_INFO_HELP) ('=') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:2280)) 
                          (${ Id.VSub_Name _flags_help_) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:2284))
                        )
                      }
                    )
                    (C {(eval)} 
                      {
                        (DQ (__flags_) (${ Id.VSub_Name _flags_usName_) (_) 
                          (${ Id.VSub_Name __FLAGS_INFO_SHORT) ("='") (${ Id.VSub_Name _flags_short_) ("'")
                        )
                      }
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__flags_shortNames)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name __flags_shortNames) (${ Id.VSub_Name _flags_short_) 
                                (' ')
                              )
                            }
                          spids: [2312]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__flags_longNames)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name __flags_longNames) (${ Id.VSub_Name _flags_name_) 
                                (' ')
                              )
                            }
                          spids: [2324]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_type_))} {(-eq)} 
                          {(DQ (${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN))} {(Id.Lit_RBracket ']')}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:__flags_boolNames)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ (${ Id.VSub_Name __flags_boolNames) (no) 
                                    (${ Id.VSub_Name _flags_name_) (' ')
                                  )
                                }
                              spids: [2358]
                            )
                          ]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__flags_definedNames)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name __flags_definedNames) 
                                (${ Id.VSub_Name _flags_usName_) (' ')
                              )
                            }
                          spids: [2376]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_type_))} {(-eq)} 
                          {(DQ (${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN))} {(Id.Lit_RBracket ']')}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:__flags_definedNames)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ (${ Id.VSub_Name __flags_definedNames) (no) 
                                    (${ Id.VSub_Name _flags_usName_) (' ')
                                  )
                                }
                              spids: [2410]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [2190 2207]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name _flags_return_)}
                  spids: [2427]
                )
              ]
            )
            (C {(unset)} {(_flags_default_)} {(_flags_help_)} {(_flags_name_)} {(_flags_return_)} 
              {(_flags_short_)} {(_flags_type_)} {(_flags_usName_)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name flags_return)} {(-eq)} 
                  {(${ Id.VSub_Name FLAGS_ERROR)} {(Id.Lit_RBracket ']')}
                )
                (C {(_flags_error)} {(DQ (${ Id.VSub_Name flags_error))})
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2477)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_underscoreName
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))})
                (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:- span_id:2521))} 
                  {(SQ (Token id:Id.Lit_Chars val:_ span_id:2525))}
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_genOptStr
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_optStrType_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2571]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_opts_)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [2576]
                )
              ]
            )
            (command.ForEach
              iter_name: _flags_name_
              iter_words: [{(${ Id.VSub_Name __flags_longNames)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_usName_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:2598)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {(_flags_underscoreName)} 
                                          {(DQ (${ Id.VSub_Name _flags_name_))}
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [2596]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_type_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:2614)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {(_flags_getFlagInfo)} 
                                          {(DQ (${ Id.VSub_Name _flags_usName_))} {(DQ (${ Id.VSub_Name __FLAGS_INFO_TYPE))}
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [2612]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                        (C {(_flags_fatal)} 
                          {
                            (SQ 
                              (Token
                                id: Id.Lit_Chars
                                val: 'call to _flags_type_ failed'
                                span_id: 2651
                              )
                            )
                          }
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(${ Id.VSub_Name _flags_optStrType_)}
                      arms: [
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_OPTSTR_SHORT)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_shortName_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_Backtick
                                              val: '`'
                                              span_id: 2672
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(_flags_getFlagInfo)} 
                                                  {(DQ (${ Id.VSub_Name _flags_usName_))} {(DQ (${ Id.VSub_Name __FLAGS_INFO_SHORT))}
                                                )
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  spids: [2670]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} 
                                          {(DQ (${ Id.VSub_Name _flags_shortName_))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name __FLAGS_NULL))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2717)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:_flags_opts_)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (DQ (${ Id.VSub_Name _flags_opts_) 
                                                (${ Id.VSub_Name _flags_shortName_)
                                              )
                                            }
                                          spids: [2722]
                                        )
                                      ]
                                    )
                                    (command.AndOr
                                      ops: [Id.Op_DAmp]
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_type_))} 
                                          {(-ne)} {(DQ (${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN))} {(Id.Lit_RBracket ']')}
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:_flags_opts_)
                                              op: assign_op.Equal
                                              rhs: {(DQ (${ Id.VSub_Name _flags_opts_) (':'))}
                                              spids: [2759]
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [2697 2719]
                                )
                              ]
                            )
                          ]
                          spids: [2664 2667 2771 -1]
                        )
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_OPTSTR_LONG)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_opts_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (braced_var_sub
                                          token: 
                                            (Token
                                              id: Id.VSub_Name
                                              val: _flags_opts_
                                              span_id: 2784
                                            )
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op_id: Id.VTest_ColonPlus
                                              arg_word: {(${ Id.VSub_Name _flags_opts_) (',')}
                                            )
                                        ) (${ Id.VSub_Name _flags_name_)
                                      )
                                    }
                                  spids: [2781]
                                )
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_type_))} {(-ne)} 
                                  {(DQ (${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN))} {(Id.Lit_RBracket ']')}
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_flags_opts_)
                                      op: assign_op.Equal
                                      rhs: {(DQ (${ Id.VSub_Name _flags_opts_) (':'))}
                                      spids: [2823]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [2775 2778 2832 -1]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {(echo)} {(DQ (${ Id.VSub_Name _flags_opts_))})
            (C {(unset)} {(_flags_name_)} {(_flags_opts_)} {(_flags_optStrType_)} {(_flags_shortName_)} 
              {(_flags_type_)} {(_flags_usName_)}
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2868)
              arg_word: {(${ Id.VSub_Name FLAGS_TRUE)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_getFlagInfo
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_gFI_usName_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2919]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_gFI_info_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [2923]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_infoVar_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ (__flags_) (${ Id.VSub_Name _flags_gFI_usName_) (_) 
                        (${ Id.VSub_Name _flags_gFI_info_)
                      )
                    }
                  spids: [2940]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_strToEval_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ('_flags_infoValue_=') 
                        (word_part.EscapedLiteral
                          token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:2956)
                        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:2957)) ('{') 
                        (${ Id.VSub_Name _flags_infoVar_) (':-}') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:2963))
                      )
                    }
                  spids: [2953]
                )
              ]
            )
            (C {(eval)} {(DQ (${ Id.VSub_Name _flags_strToEval_))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ (${ Id.VSub_Name _flags_infoValue_))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2989)
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_gFI_info_))} 
                          {(Id.Lit_Equals '=')} {(${ Id.VSub_Name __FLAGS_INFO_HELP)} {(-a)} {(DQ (${ Id.VSub_Name _flags_infoValue_))} 
                          {(Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:'\xc2\xa7' span_id:3025))} {(Id.Lit_RBracket ']')}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_flags_infoValue_)
                              op: assign_op.Equal
                              rhs: {(SQ )}
                              spids: [3032]
                            )
                          ]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                          spids: [3037]
                        )
                      ]
                    )
                  ]
                  spids: [2976 2991]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_flags_typeVar_)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ (__flags_) (${ Id.VSub_Name _flags_gFI_usName_) (_) 
                            (${ Id.VSub_Name __FLAGS_INFO_TYPE)
                          )
                        }
                      spids: [3090]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_flags_strToEval_)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ ('_flags_typeValue_=') 
                            (word_part.EscapedLiteral
                              token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:3106)
                            ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:3107)) ('{') 
                            (${ Id.VSub_Name _flags_typeVar_) (':-}') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:3113))
                          )
                        }
                      spids: [3103]
                    )
                  ]
                )
                (C {(eval)} {(DQ (${ Id.VSub_Name _flags_strToEval_))})
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_typeValue_))} 
                              {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name __FLAGS_TYPE_STRING))} {(Id.Lit_RBracket ']')}
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:3149)
                        )
                      ]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:flags_return)
                              op: assign_op.Equal
                              rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                              spids: [3154]
                            )
                          ]
                        )
                      ]
                      spids: [3130 3151]
                    )
                  ]
                  else_action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                          spids: [3163]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_error)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ('missing flag info variable (') (${ Id.VSub_Name _flags_infoVar_) 
                                (')')
                              )
                            }
                          spids: [3169]
                        )
                      ]
                    )
                  ]
                )
              ]
            )
            (C {(echo)} {(DQ (${ Id.VSub_Name _flags_infoValue_))})
            (C {(unset)} {(_flags_gFI_usName_)} {(_flags_gfI_info_)} {(_flags_infoValue_)} 
              {(_flags_infoVar_)} {(_flags_strToEval_)} {(_flags_typeValue_)} {(_flags_typeVar_)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name flags_return)} {(-eq)} 
                  {(${ Id.VSub_Name FLAGS_ERROR)} {(Id.Lit_RBracket ']')}
                )
                (C {(_flags_error)} {(DQ (${ Id.VSub_Name flags_error))})
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:3239)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_itemInList
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_str_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3285]
                )
              ]
            )
            (C {(shift)})
            (command.Case
              to_match: 
                {
                  (DQ (' ') 
                    (braced_var_sub
                      token: (Token id:Id.VSub_Star val:'*' span_id:3298)
                      suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                    ) (' ')
                  )
                }
              arms: [
                (case_arm
                  pat_list: [
                    {(Id.Lit_Star '*') 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\ ' span_id:3308)
                      ) (${ Id.VSub_Name _flags_str_) 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\ ' span_id:3312)
                      ) (Id.Lit_Star '*')
                    }
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                          spids: [3316]
                        )
                      ]
                    )
                  ]
                  spids: [3307 3314 3321 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                          spids: [3327]
                        )
                      ]
                    )
                  ]
                  spids: [3324 3325 3332 -1]
                )
              ]
            )
            (C {(unset)} {(_flags_str_)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:3344)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_columns
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name __flags_columns))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3385)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  words: [{(eval)} {(stty)} {(size)}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Great val:'>' span_id:3398)
                                      fd: -1
                                      arg_word: {(/dev/null)}
                                    )
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:3401)
                                      fd: 2
                                      arg_word: {(1)}
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:3403)
                            )
                          ]
                          action: [
                            (C {(Id.KW_Set set)} {(--)} 
                              {
                                (command_sub
                                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:3420)
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {(stty)} {(size)})]
                                    )
                                )
                              }
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:__flags_columns)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (braced_var_sub
                                          token: (Token id:Id.VSub_Number val:2 span_id:3432)
                                          suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                                        )
                                      )
                                    }
                                  spids: [3429]
                                )
                              ]
                            )
                          ]
                          spids: [3390 3405]
                        )
                      ]
                    )
                  ]
                  spids: [3372 3387]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name __flags_columns))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3457)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  words: [{(eval)} {(tput)} {(cols)}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Great val:'>' span_id:3470)
                                      fd: -1
                                      arg_word: {(/dev/null)}
                                    )
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:3473)
                                      fd: 2
                                      arg_word: {(1)}
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:3475)
                            )
                          ]
                          action: [
                            (C {(Id.KW_Set set)} {(--)} 
                              {
                                (command_sub
                                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:3488)
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {(tput)} {(cols)})]
                                    )
                                )
                              }
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:__flags_columns)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (braced_var_sub
                                          token: (Token id:Id.VSub_Number val:1 span_id:3500)
                                          suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                                        )
                                      )
                                    }
                                  spids: [3497]
                                )
                              ]
                            )
                          ]
                          spids: [3462 3477]
                        )
                      ]
                    )
                  ]
                  spids: [3444 3459]
                )
              ]
            )
            (C {(echo)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:__flags_columns span_id:3516)
                    suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(80)})
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_validBool
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_bool_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3550]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                  spids: [3555]
                )
              ]
            )
            (command.Case
              to_match: {(DQ (${ Id.VSub_Name _flags_bool_))}
              arms: [
                (case_arm pat_list:[{(true)} {(t)} {(0)}] spids:[3572 3577 3579 -1])
                (case_arm pat_list:[{(false)} {(f)} {(1)}] spids:[3582 3587 3589 -1])
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                          spids: [3595]
                        )
                      ]
                    )
                  ]
                  spids: [3592 3593 3600 -1]
                )
              ]
            )
            (C {(unset)} {(_flags_bool_)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:3612)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_validFloat
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                  spids: [3646]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:3664)
                  arg_word: {(${ Id.VSub_Name flags_return)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_float_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3671]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(_flags_validInt)} {(DQ (${ Id.VSub_Name _flags_float_))})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3685)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                          spids: [3690]
                        )
                      ]
                    )
                  ]
                  spids: [3676 3687]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(_flags_useBuiltin)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3699)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_float_whole_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:_flags_float_ span_id:3706)
                                suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{('.*')})
                              )
                            }
                          spids: [3704]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_float_fraction_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:_flags_float_ span_id:3714)
                                suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*.')})
                              )
                            }
                          spids: [3712]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(_flags_validInt)} 
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        token: 
                                          (Token
                                            id: Id.VSub_Name
                                            val: _flags_float_whole_
                                            span_id: 3726
                                          )
                                        suffix_op: 
                                          (suffix_op.Unary
                                            op_id: Id.VTest_ColonHyphen
                                            arg_word: {(0)}
                                          )
                                      )
                                    )
                                  } {(-a)} {(_flags_validInt)} {(DQ (${ Id.VSub_Name _flags_float_fraction_))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:3743)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_return)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                                  spids: [3748]
                                )
                              ]
                            )
                          ]
                          spids: [3720 3745]
                        )
                      ]
                    )
                    (C {(unset)} {(_flags_float_whole_)} {(_flags_float_fraction_)})
                  ]
                  spids: [3696 3701]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:flags_return)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                      spids: [3767]
                    )
                  ]
                )
                (command.Case
                  to_match: {(${ Id.VSub_Name _flags_float_)}
                  arms: [
                    (case_arm
                      pat_list: [{(-) (Id.Lit_Star '*')}]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_flags_test_)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:3791)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(${ Id.VSub_Name FLAGS_EXPR_CMD)} 
                                            {(DQ (${ Id.VSub_Name _flags_float_))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'\\(-[0-9]*\\.[0-9]*\\)' span_id:3817))}
                                          )
                                        ]
                                      )
                                  )
                                }
                              spids: [3790]
                            )
                          ]
                        )
                      ]
                      spids: [3782 3784 3822 -1]
                    )
                    (case_arm
                      pat_list: [{(Id.Lit_Star '*')}]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_flags_test_)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:3833)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(${ Id.VSub_Name FLAGS_EXPR_CMD)} 
                                            {(DQ (${ Id.VSub_Name _flags_float_))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'\\([0-9]*\\.[0-9]*\\)' span_id:3859))}
                                          )
                                        ]
                                      )
                                  )
                                }
                              spids: [3832]
                            )
                          ]
                        )
                      ]
                      spids: [3825 3826 3864 -1]
                    )
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_test_))} 
                      {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name _flags_float_))} {(Id.Lit_RBracket ']')}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                          spids: [3891]
                        )
                      ]
                    )
                  ]
                )
                (C {(unset)} {(_flags_test_)})
              ]
            )
            (C {(unset)} {(_flags_float_)} {(_flags_float_whole_)} {(_flags_float_fraction_)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:3915)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_validInt
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                  spids: [3949]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:3967)
                  arg_word: {(${ Id.VSub_Name flags_return)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_int_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3974]
                )
              ]
            )
            (command.Case
              to_match: {(${ Id.VSub_Name _flags_int_)}
              arms: [
                (case_arm
                  pat_list: [{(-) (Id.Lit_Star '*') (.) (Id.Lit_Star '*')}]
                  spids: [3988 3992 3994 -1]
                )
                (case_arm
                  pat_list: [{(-) (Id.Lit_Star '*')}]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: (C {(_flags_useBuiltin)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:4011)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_int_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:_flags_int_ span_id:4018)
                                        suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(-)})
                                      )
                                    }
                                  spids: [4016]
                                )
                              ]
                            )
                          ]
                          spids: [4008 4013]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_flags_int_)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:4028)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(${ Id.VSub_Name FLAGS_EXPR_CMD)} 
                                            {(DQ (${ Id.VSub_Name _flags_int_))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'-\\([0-9][0-9]*\\)' span_id:4048))}
                                          )
                                        ]
                                      )
                                  )
                                }
                              spids: [4027]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [4000 4002 4056 -1]
                )
              ]
            )
            (command.Case
              to_match: {(${ Id.VSub_Name _flags_int_)}
              arms: [
                (case_arm
                  pat_list: [
                    {(Id.Lit_Star '*') (Id.Lit_LBracket '[') (Id.KW_Bang '!') (0-9) 
                      (Id.Lit_RBracket ']') (Id.Lit_Star '*')
                    }
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                          spids: [4080]
                        )
                      ]
                    )
                  ]
                  spids: [4072 4078 4085 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                          spids: [4091]
                        )
                      ]
                    )
                  ]
                  spids: [4088 4089 4096 -1]
                )
              ]
            )
            (C {(unset)} {(_flags_int_)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:4108)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_getoptStandard
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                  spids: [4151]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_shortOpts_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4158)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_genOptStr)} {(${ Id.VSub_Name __FLAGS_OPTSTR_SHORT)})
                            ]
                          )
                      )
                    }
                  spids: [4157]
                )
              ]
            )
            (command.ForEach
              iter_name: _flags_opt_
              iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_match_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:4193)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(DQ (x) (${ Id.VSub_Name _flags_opt_) (x))})
                                          (C {(sed)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'s/ //g' span_id:4210))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [4192]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_match_))} 
                                  {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (x) (${ Id.VSub_Name _flags_opt_) (x))} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:4237)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_error)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 
'the available getopt does not support spaces in options'
                                          span_id: 4244
                                        )
                                      )
                                    }
                                  spids: [4242]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_return)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                  spids: [4248]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:4254)
                            )
                          ]
                          spids: [4215 4239]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name flags_return)} {(-eq)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4279)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__flags_opts)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:4285)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Simple
                                        words: [
                                          {(getopt)}
                                          {(DQ (${ Id.VSub_Name _flags_shortOpts_))}
                                          {(DQ ($ Id.VSub_At '$@'))}
                                        ]
                                        redirects: [
                                          (redir.Redir
                                            op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:4300)
                                            fd: 2
                                            arg_word: {(1)}
                                          )
                                        ]
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [4284]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_rtrn_)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_QMark '$?')}
                          spids: [4305]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_rtrn_)} {(-ne)} 
                                  {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:4324)
                            )
                          ]
                          action: [
                            (C {(_flags_warn)} {(DQ (${ Id.VSub_Name __flags_opts))})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_error)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 'unable to parse provided options with getopt.'
                                          span_id: 4340
                                        )
                                      )
                                    }
                                  spids: [4338]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_return)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                  spids: [4344]
                                )
                              ]
                            )
                          ]
                          spids: [4309 4326]
                        )
                      ]
                    )
                  ]
                  spids: [4264 4281]
                )
              ]
            )
            (C {(unset)} {(_flags_match_)} {(_flags_opt_)} {(_flags_rtrn_)} {(_flags_shortOpts_)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:4368)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_getoptEnhanced
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                  spids: [4411]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_shortOpts_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4418)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_genOptStr)} {(${ Id.VSub_Name __FLAGS_OPTSTR_SHORT)})
                            ]
                          )
                      )
                    }
                  spids: [4417]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_boolOpts_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4430)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {(DQ (${ Id.VSub_Name __flags_boolNames))})
                                  (C {(sed)} 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 's/^ *//;s/ *$//;s/ /,/g'
                                          span_id: 4450
                                        )
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [4429]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_longOpts_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4456)
                        command_list: 
                          (command.CommandList
                            children: [(C {(_flags_genOptStr)} {(${ Id.VSub_Name __FLAGS_OPTSTR_LONG)})]
                          )
                      )
                    }
                  spids: [4455]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__flags_opts)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4469)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [
                                  {(${ Id.VSub_Name FLAGS_GETOPT_CMD)}
                                  {(-o)}
                                  {(DQ (${ Id.VSub_Name _flags_shortOpts_))}
                                  {(-l)}
                                  {
                                    (DQ (${ Id.VSub_Name _flags_longOpts_) (',') 
                                      (${ Id.VSub_Name _flags_boolOpts_)
                                    )
                                  }
                                  {(--)}
                                  {(DQ ($ Id.VSub_At '$@'))}
                                ]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:4517)
                                    fd: 2
                                    arg_word: {(1)}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [4468]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_rtrn_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [4522]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_rtrn_)} {(-ne)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4541)
                    )
                  ]
                  action: [
                    (C {(_flags_warn)} {(DQ (${ Id.VSub_Name __flags_opts))})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_error)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: 'unable to parse provided options with getopt.'
                                  span_id: 4557
                                )
                              )
                            }
                          spids: [4555]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                          spids: [4561]
                        )
                      ]
                    )
                  ]
                  spids: [4526 4543]
                )
              ]
            )
            (C {(unset)} {(_flags_boolOpts_)} {(_flags_longOpts_)} {(_flags_rtrn_)} {(_flags_shortOpts_)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:4582)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_parseGetopt
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_argc_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4631]
                )
              ]
            )
            (C {(shift)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                  spids: [4639]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS))} {(-ne)} 
                          {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS_ENH))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4665)
                    )
                  ]
                  action: [(C {(Id.KW_Set set)} {(--)} {($ Id.VSub_At '$@')})]
                  spids: [4646 4667]
                )
              ]
              else_action: [(C {(eval)} {(Id.KW_Set set)} {(--)} {(DQ ($ Id.VSub_At '$@'))})]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FLAGS_ARGC)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4728)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_math)} 
                                {
                                  (DQ ($ Id.VSub_Pound '$#') (' - 1 - ') (${ Id.VSub_Name _flags_argc_))
                                }
                              )
                            ]
                          )
                      )
                    }
                  spids: [4727]
                )
              ]
            )
            (C {(export)} {(FLAGS_ARGC)})
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:4753)
              cond: [
                (command.Sentence
                  child: (C {(true)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:4756)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_opt_)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [4761]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_arg_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Number val:2 span_id:4767)
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                              )
                            }
                          spids: [4765]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_type_)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name __FLAGS_TYPE_NONE)}
                          spids: [4772]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_name_)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                          spids: [4778]
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(DQ (${ Id.VSub_Name _flags_opt_))}
                      arms: [
                        (case_arm
                          pat_list: [{(--)}]
                          action: [
                            (command.Sentence
                              child: (C {(shift)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:4803)
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:4805)
                            )
                          ]
                          spids: [4799 4800 4807 -1]
                        )
                        (case_arm
                          pat_list: [{(--) (Id.Lit_Star '*')}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: (C {(_flags_useBuiltin)})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:4825)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:_flags_opt_)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (braced_var_sub
                                                token: 
                                                  (Token
                                                    id: Id.VSub_Name
                                                    val: _flags_opt_
                                                    span_id: 4832
                                                  )
                                                suffix_op: 
                                                  (suffix_op.Unary
                                                    op_id: Id.VOp1_Pound
                                                    arg_word: {('*--')}
                                                  )
                                              )
                                            }
                                          spids: [4830]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [4822 4827]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_flags_opt_)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (command_sub
                                            left_token: 
                                              (Token
                                                id: Id.Left_Backtick
                                                val: '`'
                                                span_id: 4842
                                              )
                                            command_list: 
                                              (command.CommandList
                                                children: [
                                                  (C {(${ Id.VSub_Name FLAGS_EXPR_CMD)} 
                                                    {(DQ (${ Id.VSub_Name _flags_opt_))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'--\\(.*\\)' span_id:4862))}
                                                  )
                                                ]
                                              )
                                          )
                                        }
                                      spids: [4841]
                                    )
                                  ]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_len_)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name __FLAGS_LEN_LONG)}
                                  spids: [4870]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(_flags_itemInList)} {(DQ (${ Id.VSub_Name _flags_opt_))} 
                                          {(DQ (${ Id.VSub_Name __flags_longNames))}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:4891)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:_flags_name_)
                                          op: assign_op.Equal
                                          rhs: {(${ Id.VSub_Name _flags_opt_)}
                                          spids: [4896]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [4876 4893]
                                )
                              ]
                              else_action: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(_flags_itemInList)} 
                                              {(DQ (${ Id.VSub_Name _flags_opt_))} {(DQ (${ Id.VSub_Name __flags_boolNames))}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:4924)
                                        )
                                      ]
                                      action: [
                                        (command.If
                                          arms: [
                                            (if_arm
                                              cond: [
                                                (command.Sentence
                                                  child: (C {(_flags_useBuiltin)})
                                                  terminator: 
                                                    (Token
                                                      id: Id.Op_Semi
                                                      val: ';'
                                                      span_id: 4932
                                                    )
                                                )
                                              ]
                                              action: [
                                                (command.ShAssignment
                                                  pairs: [
                                                    (assign_pair
                                                      lhs: (sh_lhs_expr.Name name:_flags_name_)
                                                      op: assign_op.Equal
                                                      rhs: 
                                                        {
                                                          (braced_var_sub
                                                            token: 
                                                              (Token
                                                                id: Id.VSub_Name
                                                                val: _flags_opt_
                                                                span_id: 4939
                                                              )
                                                            suffix_op: 
                                                              (suffix_op.Unary
                                                                op_id: Id.VOp1_Pound
                                                                arg_word: {('*no')}
                                                              )
                                                          )
                                                        }
                                                      spids: [4937]
                                                    )
                                                  ]
                                                )
                                              ]
                                              spids: [4929 4934]
                                            )
                                          ]
                                          else_action: [
                                            (command.ShAssignment
                                              pairs: [
                                                (assign_pair
                                                  lhs: (sh_lhs_expr.Name name:_flags_name_)
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (command_sub
                                                        left_token: 
                                                          (Token
                                                            id: Id.Left_Backtick
                                                            val: '`'
                                                            span_id: 4949
                                                          )
                                                        command_list: 
                                                          (command.CommandList
                                                            children: [
                                                              (C {(${ Id.VSub_Name FLAGS_EXPR_CMD)} 
                                                                {(DQ (${ Id.VSub_Name _flags_opt_))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'no\\(.*\\)' span_id:4969))}
                                                              )
                                                            ]
                                                          )
                                                      )
                                                    }
                                                  spids: [4948]
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:_flags_type_)
                                              op: assign_op.Equal
                                              rhs: {(${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN)}
                                              spids: [4977]
                                            )
                                          ]
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:_flags_arg_)
                                              op: assign_op.Equal
                                              rhs: {(${ Id.VSub_Name __FLAGS_NULL)}
                                              spids: [4983]
                                            )
                                          ]
                                        )
                                      ]
                                      spids: [4909 4926]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [4814 4816 4995 -1]
                        )
                        (case_arm
                          pat_list: [{(-) (Id.Lit_Star '*')}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: (C {(_flags_useBuiltin)})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:5010)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:_flags_opt_)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (braced_var_sub
                                                token: 
                                                  (Token
                                                    id: Id.VSub_Name
                                                    val: _flags_opt_
                                                    span_id: 5017
                                                  )
                                                suffix_op: 
                                                  (suffix_op.Unary
                                                    op_id: Id.VOp1_Pound
                                                    arg_word: {('*-')}
                                                  )
                                              )
                                            }
                                          spids: [5015]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [5007 5012]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_flags_opt_)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (command_sub
                                            left_token: 
                                              (Token
                                                id: Id.Left_Backtick
                                                val: '`'
                                                span_id: 5027
                                              )
                                            command_list: 
                                              (command.CommandList
                                                children: [
                                                  (C {(${ Id.VSub_Name FLAGS_EXPR_CMD)} 
                                                    {(DQ (${ Id.VSub_Name _flags_opt_))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'-\\(.*\\)' span_id:5047))}
                                                  )
                                                ]
                                              )
                                          )
                                        }
                                      spids: [5026]
                                    )
                                  ]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_flags_len_)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name __FLAGS_LEN_SHORT)}
                                  spids: [5055]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(_flags_itemInList)} {(DQ (${ Id.VSub_Name _flags_opt_))} 
                                          {(DQ (${ Id.VSub_Name __flags_shortNames))}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:5076)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:_flags_pos_)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (command_sub
                                                left_token: 
                                                  (Token
                                                    id: Id.Left_Backtick
                                                    val: '`'
                                                    span_id: 5090
                                                  )
                                                command_list: 
                                                  (command.CommandList
                                                    children: [
                                                      (command.Pipeline
                                                        children: [
                                                          (C {(echo)} 
                                                            {
                                                              (DQ 
                                                                (${ Id.VSub_Name __flags_shortNames)
                                                              )
                                                            }
                                                          )
                                                          (C {(awk)} 
                                                            {
                                                              (SQ 
                                                                (Token
                                                                  id: Id.Lit_Chars
                                                                  val: 
'BEGIN{RS=" ";rn=0}$0==e{rn=NR}END{print rn}'
                                                                  span_id: 5113
                                                                )
                                                              )
                                                            } {(Id.Lit_VarLike 'e=') (DQ (${ Id.VSub_Name _flags_opt_))}
                                                          )
                                                        ]
                                                        negated: F
                                                      )
                                                    ]
                                                  )
                                              )
                                            }
                                          spids: [5089]
                                        )
                                      ]
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:_flags_name_)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (command_sub
                                                left_token: 
                                                  (Token
                                                    id: Id.Left_Backtick
                                                    val: '`'
                                                    span_id: 5128
                                                  )
                                                command_list: 
                                                  (command.CommandList
                                                    children: [
                                                      (command.Pipeline
                                                        children: [
                                                          (C {(echo)} 
                                                            {(DQ (${ Id.VSub_Name __flags_longNames))}
                                                          )
                                                          (C {(awk)} 
                                                            {
                                                              (SQ 
                                                                (Token
                                                                  id: Id.Lit_Chars
                                                                  val: 
'BEGIN{RS=" "}rn==NR{print $0}'
                                                                  span_id: 5148
                                                                )
                                                              )
                                                            } {(Id.Lit_VarLike 'rn=') (DQ (${ Id.VSub_Name _flags_pos_))}
                                                          )
                                                        ]
                                                        negated: F
                                                      )
                                                    ]
                                                  )
                                              )
                                            }
                                          spids: [5127]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [5061 5078]
                                )
                              ]
                            )
                          ]
                          spids: [4999 5001 5163 -1]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name _flags_name_))} 
                                  {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:5187)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_error)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ('unrecognized option (') (${ Id.VSub_Name _flags_opt_) (')'))
                                    }
                                  spids: [5192]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_return)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                  spids: [5202]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:5208)
                            )
                          ]
                          spids: [5174 5189]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_usName_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:5220)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (C {(_flags_underscoreName)} {(DQ (${ Id.VSub_Name _flags_name_))})
                                    ]
                                  )
                              )
                            }
                          spids: [5219]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_type_)} {(-eq)} 
                          {(${ Id.VSub_Name __FLAGS_TYPE_NONE)} {(Id.Lit_RBracket ']')}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_flags_type_)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:5252)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(_flags_getFlagInfo)} 
                                            {(DQ (${ Id.VSub_Name _flags_usName_))} {(${ Id.VSub_Name __FLAGS_INFO_TYPE)}
                                          )
                                        ]
                                      )
                                  )
                                }
                              spids: [5251]
                            )
                          ]
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(${ Id.VSub_Name _flags_type_)}
                      arms: [
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN)}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name _flags_len_)} 
                                          {(-eq)} {(${ Id.VSub_Name __FLAGS_LEN_LONG)} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:5304)
                                    )
                                  ]
                                  action: [
                                    (command.If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (command.Sentence
                                              child: 
                                                (C {(Id.Lit_LBracket '[')} 
                                                  {(DQ (${ Id.VSub_Name _flags_arg_))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name __FLAGS_NULL))} {(Id.Lit_RBracket ']')}
                                                )
                                              terminator: (Token id:Id.Op_Semi val:';' span_id:5329)
                                            )
                                          ]
                                          action: [
                                            (C {(eval)} 
                                              {
                                                (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ('=') 
                                                  (${ Id.VSub_Name FLAGS_TRUE)
                                                )
                                              }
                                            )
                                          ]
                                          spids: [5309 5331]
                                        )
                                      ]
                                      else_action: [
                                        (C {(eval)} 
                                          {
                                            (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ('=') 
                                              (${ Id.VSub_Name FLAGS_FALSE)
                                            )
                                          }
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [5289 5306]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_flags_strToEval_)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ('_flags_val_=') 
                                            (word_part.EscapedLiteral
                                              token: 
                                                (Token
                                                  id: Id.Lit_EscapedChar
                                                  val: '\\$'
                                                  span_id: 5375
                                                )
                                            ) ('{__flags_') (${ Id.VSub_Name _flags_usName_) (_) (${ Id.VSub_Name __FLAGS_INFO_DEFAULT) ('}')
                                          )
                                        }
                                      spids: [5371]
                                    )
                                  ]
                                )
                                (C {(eval)} {(DQ (${ Id.VSub_Name _flags_strToEval_))})
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} 
                                              {(DQ (${ Id.VSub_Name _flags_val_))} {(-eq)} {(${ Id.VSub_Name FLAGS_FALSE)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:5418)
                                        )
                                      ]
                                      action: [
                                        (C {(eval)} 
                                          {
                                            (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ('=') 
                                              (${ Id.VSub_Name FLAGS_TRUE)
                                            )
                                          }
                                        )
                                      ]
                                      spids: [5401 5420]
                                    )
                                  ]
                                  else_action: [
                                    (C {(eval)} 
                                      {
                                        (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ('=') 
                                          (${ Id.VSub_Name FLAGS_FALSE)
                                        )
                                      }
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [5283 5286 5460 -1]
                        )
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_FLOAT)}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(_flags_validFloat)} {(DQ (${ Id.VSub_Name _flags_arg_))})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:5479)
                                    )
                                  ]
                                  action: [
                                    (C {(eval)} 
                                      {
                                        (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ("='") 
                                          (${ Id.VSub_Name _flags_arg_) ("'")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [5470 5481]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_error)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ('invalid float value (') (${ Id.VSub_Name _flags_arg_) 
                                            (')')
                                          )
                                        }
                                      spids: [5502]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_return)
                                      op: assign_op.Equal
                                      rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                      spids: [5512]
                                    )
                                  ]
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:5518)
                                )
                              ]
                            )
                          ]
                          spids: [5464 5467 5524 -1]
                        )
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_INTEGER)}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(_flags_validInt)} {(DQ (${ Id.VSub_Name _flags_arg_))})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:5543)
                                    )
                                  ]
                                  action: [
                                    (C {(eval)} 
                                      {
                                        (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ("='") 
                                          (${ Id.VSub_Name _flags_arg_) ("'")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [5534 5545]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_error)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ('invalid integer value (') 
                                            (${ Id.VSub_Name _flags_arg_) (')')
                                          )
                                        }
                                      spids: [5566]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_return)
                                      op: assign_op.Equal
                                      rhs: {(${ Id.VSub_Name FLAGS_ERROR)}
                                      spids: [5576]
                                    )
                                  ]
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:5582)
                                )
                              ]
                            )
                          ]
                          spids: [5528 5531 5588 -1]
                        )
                        (case_arm
                          pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_STRING)}]
                          action: [
                            (C {(eval)} 
                              {
                                (DQ (FLAGS_) (${ Id.VSub_Name _flags_usName_) ("='") 
                                  (${ Id.VSub_Name _flags_arg_) ("'")
                                )
                              }
                            )
                          ]
                          spids: [5592 5595 5613 -1]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_usName_))} 
                                  {(Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:help span_id:5637))} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:5641)
                            )
                          ]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name FLAGS_help))} 
                                          {(-eq)} {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:5667)
                                    )
                                  ]
                                  action: [
                                    (C {(flags_help)})
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:flags_error)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (SQ 
                                                (Token
                                                  id: Id.Lit_Chars
                                                  val: 'help requested'
                                                  span_id: 5677
                                                )
                                              )
                                            }
                                          spids: [5675]
                                        )
                                      ]
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:flags_return)
                                          op: assign_op.Equal
                                          rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                                          spids: [5681]
                                        )
                                      ]
                                    )
                                    (command.ControlFlow
                                      token: (Token id:Id.ControlFlow_Break val:break span_id:5687)
                                    )
                                  ]
                                  spids: [5650 5669]
                                )
                              ]
                            )
                          ]
                          spids: [5624 5643]
                        )
                      ]
                    )
                    (C {(shift)})
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name _flags_type_))} 
                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN)} {(Id.Lit_RBracket ']')}
                        )
                        (C {(shift)})
                      ]
                    )
                  ]
                )
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FLAGS_ARGV)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [5734]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:5739)
              cond: [
                (command.Sentence
                  child: 
                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} 
                      {(Id.Lit_RBracket ']')}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:5750)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FLAGS_ARGV)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: (Token id:Id.VSub_Name val:FLAGS_ARGV span_id:5758)
                                  suffix_op: 
                                    (suffix_op.Unary
                                      op_id: Id.VTest_ColonPlus
                                      arg_word: {(${ Id.VSub_Name FLAGS_ARGV) (' ')}
                                    )
                                ) ("'") ($ Id.VSub_Number '$1') ("'")
                              )
                            }
                          spids: [5755]
                        )
                      ]
                    )
                    (C {(shift)})
                  ]
                )
            )
            (C {(unset)} {(_flags_arg_)} {(_flags_len_)} {(_flags_name_)} {(_flags_opt_)} {(_flags_pos_)} 
              {(_flags_strToEval_)} {(_flags_type_)} {(_flags_usName_)} {(_flags_val_)}
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:5801)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_math
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5852)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name FLAGS_FALSE)}
                          spids: [5857]
                        )
                      ]
                    )
                  ]
                  spids: [5841 5854]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(_flags_useBuiltin)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5866)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_flags_expr_)
                          op: assign_op.Equal
                          rhs: {(SQ (Token id:Id.Lit_Chars val:'$(($@))' span_id:5885))}
                          spids: [5883]
                        )
                      ]
                    )
                    (C {(eval)} {(echo)} {(${ Id.VSub_Name _flags_expr_)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_QMark '$?')}
                          spids: [5898]
                        )
                      ]
                    )
                    (C {(unset)} {(_flags_expr_)})
                  ]
                  spids: [5863 5868]
                )
              ]
              else_action: [
                (C {(eval)} {(expr)} {(DQ ($ Id.VSub_At '$@'))})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:flags_return)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '$?')}
                      spids: [5919]
                    )
                  ]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:5927)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_strlen
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_str_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Number val:1 span_id:5969)
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                      )
                    }
                  spids: [5967]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name _flags_str_))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5988)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_output)
                          op: assign_op.Equal
                          rhs: {(0)}
                          spids: [5993]
                        )
                      ]
                    )
                  ]
                  spids: [5975 5990]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(_flags_useBuiltin)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6000)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_output)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:_flags_str_ span_id:6008)
                                prefix_op: (Id.VSub_Pound)
                              )
                            }
                          spids: [6005]
                        )
                      ]
                    )
                  ]
                  spids: [5997 6002]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:flags_output)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:6016)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {(${ Id.VSub_Name FLAGS_EXPR_CMD)} 
                                    {(DQ (${ Id.VSub_Name _flags_str_))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'.*' span_id:6032))}
                                  )
                                ]
                              )
                          )
                        }
                      spids: [6015]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flags_return)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [6040]
                )
              ]
            )
            (C {(unset)} {(_flags_str_)})
            (C {(echo)} {(DQ (${ Id.VSub_Name flags_output))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:6059)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _flags_useBuiltin
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:6092)
                  arg_word: {(${ Id.VSub_Name __FLAGS_USE_BUILTIN)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:6097)
            )
          ]
        )
    )
    (command.ShFunction
      name: DEFINE_boolean
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {(_flags_define)} {(${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN)} {(DQ ($ Id.VSub_At '$@'))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:6165)
            )
          ]
        )
    )
    (command.ShFunction
      name: DEFINE_float
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {(_flags_define)} {(${ Id.VSub_Name __FLAGS_TYPE_FLOAT)} {(DQ ($ Id.VSub_At '$@'))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:6188)
            )
          ]
        )
    )
    (command.ShFunction
      name: DEFINE_integer
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {(_flags_define)} {(${ Id.VSub_Name __FLAGS_TYPE_INTEGER)} {(DQ ($ Id.VSub_At '$@'))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:6207)
            )
          ]
        )
    )
    (command.ShFunction
      name: DEFINE_string
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {(_flags_define)} {(${ Id.VSub_Name __FLAGS_TYPE_STRING)} {(DQ ($ Id.VSub_At '$@'))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:6226)
            )
          ]
        )
    )
    (command.ShFunction
      name: FLAGS
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-z)} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:__flags_help_type span_id:6266)
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                      )
                    )
                  } {(Id.Lit_RBracket ']')}
                )
                (C {(DEFINE_boolean)} {(SQ (Token id:Id.Lit_Chars val:help span_id:6280))} {(false)} 
                  {(SQ (Token id:Id.Lit_Chars val:'show this help' span_id:6286))} {(SQ (Token id:Id.Lit_Chars val:h span_id:6290))}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6310)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS))} 
                                  {(-ne)} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS_ENH))} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:6334)
                            )
                          ]
                          action: [(C {(_flags_getoptStandard)} {(DQ ($ Id.VSub_At '$@'))})]
                          spids: [6315 6336]
                        )
                      ]
                      else_action: [(C {(_flags_getoptEnhanced)} {(DQ ($ Id.VSub_At '$@'))})]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_QMark '$?')}
                          spids: [6359]
                        )
                      ]
                    )
                  ]
                  spids: [6299 6312]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:__flags_opts)
                      op: assign_op.Equal
                      rhs: {(SQ (Token id:Id.Lit_Chars val:-- span_id:6372))}
                      spids: [6370]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:flags_return)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name FLAGS_TRUE)}
                      spids: [6376]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name flags_return)} {(-eq)} 
                          {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6401)
                    )
                  ]
                  action: [
                    (C {(_flags_parseGetopt)} {($ Id.VSub_Pound '$#')} 
                      {(DQ (${ Id.VSub_Name __flags_opts))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_return)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_QMark '$?')}
                          spids: [6417]
                        )
                      ]
                    )
                  ]
                  spids: [6386 6403]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name flags_return)} {(-eq)} 
                  {(${ Id.VSub_Name FLAGS_ERROR)} {(Id.Lit_RBracket ']')}
                )
                (C {(_flags_fatal)} {(DQ (${ Id.VSub_Name flags_error))})
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:6450)
              arg_word: {(${ Id.VSub_Name flags_return)}
            )
          ]
        )
    )
    (command.ShFunction
      name: flags_getoptInfo
      body: 
        (command.BraceGroup
          children: [
            (C {(_flags_debug)} 
              {
                (DQ ('uname -a: ') 
                  (command_sub
                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:6504)
                    command_list: (command.CommandList children:[(C {(uname)} {(-a)})])
                  )
                )
              }
            )
            (C {(_flags_debug)} {(DQ ('PATH: ') (${ Id.VSub_Name PATH))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:BASH_VERSION span_id:6537)
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6543)
                    )
                  ]
                  action: [
                    (C {(_flags_debug)} {(SQ (Token id:Id.Lit_Chars val:'shell: bash' span_id:6551))})
                    (C {(_flags_debug)} {(DQ ('BASH_VERSION: ') (${ Id.VSub_Name BASH_VERSION))})
                  ]
                  spids: [6529 6545]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:ZSH_VERSION span_id:6573)
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6579)
                    )
                  ]
                  action: [
                    (C {(_flags_debug)} {(SQ (Token id:Id.Lit_Chars val:'shell: zsh' span_id:6587))})
                    (C {(_flags_debug)} {(DQ ('ZSH_VERSION: ') (${ Id.VSub_Name ZSH_VERSION))})
                  ]
                  spids: [6565 6581]
                )
              ]
            )
            (command.Simple
              words: [{(${ Id.VSub_Name FLAGS_GETOPT_CMD)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:6613)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_flags_getoptReturn)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [6617]
                )
              ]
            )
            (C {(_flags_debug)} {(DQ ('getopt return: ') (${ Id.VSub_Name _flags_getoptReturn))})
            (C {(_flags_debug)} 
              {
                (DQ ('getopt --version: ') 
                  (command_sub
                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:6635)
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Simple
                            words: [{(${ Id.VSub_Name FLAGS_GETOPT_CMD)} {(--version)}]
                            redirects: [
                              (redir.Redir
                                op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:6644)
                                fd: 2
                                arg_word: {(1)}
                              )
                            ]
                          )
                        ]
                      )
                  )
                )
              }
            )
            (C {(unset)} {(_flags_getoptReturn)})
          ]
        )
    )
    (command.ShFunction
      name: flags_getoptIsEnh
      body: 
        (command.BraceGroup
          children: [
            (C {(test)} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS))} {(-eq)} 
              {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS_ENH))}
            )
          ]
        )
    )
    (command.ShFunction
      name: flags_getoptIsStd
      body: 
        (command.BraceGroup
          children: [
            (C {(test)} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS))} {(-eq)} 
              {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS_STD))}
            )
          ]
        )
    )
    (command.ShFunction
      name: flags_help
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:FLAGS_HELP span_id:6794)
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6800)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ (${ Id.VSub_Name FLAGS_HELP))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:6813)
                          fd: -1
                          arg_word: {(2)}
                        )
                      ]
                    )
                  ]
                  spids: [6786 6802]
                )
              ]
              else_action: [
                (command.Simple
                  words: [
                    {(echo)}
                    {
                      (DQ ('USAGE: ') 
                        (braced_var_sub
                          token: (Token id:Id.VSub_Name val:FLAGS_PARENT span_id:6825)
                          suffix_op: 
                            (suffix_op.Unary
                              op_id: Id.VTest_ColonHyphen
                              arg_word: {($ Id.VSub_Number '$0')}
                            )
                        ) (' [flags] args')
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:6832)
                      fd: -1
                      arg_word: {(2)}
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ (${ Id.VSub_Name __flags_longNames))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6852)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(SQ (Token id:Id.Lit_Chars val:'flags:' span_id:6860))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:6863)
                          fd: -1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ForEach
                      iter_name: flags_name_
                      iter_words: [{(${ Id.VSub_Name __flags_longNames)}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_flagStr_)
                                  op: assign_op.Equal
                                  rhs: {(SQ )}
                                  spids: [6881]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_boolStr_)
                                  op: assign_op.Equal
                                  rhs: {(SQ )}
                                  spids: [6886]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_usName_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6892)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(_flags_underscoreName)} 
                                                {(DQ (${ Id.VSub_Name flags_name_))}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [6891]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_default_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6907)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(_flags_getFlagInfo)} 
                                                {(DQ (${ Id.VSub_Name flags_usName_))} {(${ Id.VSub_Name __FLAGS_INFO_DEFAULT)}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [6906]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_help_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6930)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(_flags_getFlagInfo)} 
                                                {(DQ (${ Id.VSub_Name flags_usName_))} {(${ Id.VSub_Name __FLAGS_INFO_HELP)}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [6929]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_short_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6953)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(_flags_getFlagInfo)} 
                                                {(DQ (${ Id.VSub_Name flags_usName_))} {(${ Id.VSub_Name __FLAGS_INFO_SHORT)}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [6952]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_type_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6976)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(_flags_getFlagInfo)} 
                                                {(DQ (${ Id.VSub_Name flags_usName_))} {(${ Id.VSub_Name __FLAGS_INFO_TYPE)}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [6975]
                                )
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name flags_short_))} 
                                  {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name __FLAGS_NULL))} {(Id.Lit_RBracket ']')}
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_flagStr_)
                                      op: assign_op.Equal
                                      rhs: {(DQ (-) (${ Id.VSub_Name flags_short_))}
                                      spids: [7022]
                                    )
                                  ]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} 
                                          {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS))} {(-eq)} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS_ENH))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:7051)
                                    )
                                  ]
                                  action: [
                                    (command.AndOr
                                      ops: [Id.Op_DAmp]
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name flags_short_))} 
                                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name __FLAGS_NULL))} {(Id.Lit_RBracket ']')}
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:flags_flagStr_)
                                              op: assign_op.Equal
                                              rhs: {(DQ (${ Id.VSub_Name flags_flagStr_) (','))}
                                              spids: [7079]
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                    (command.AndOr
                                      ops: [Id.Op_DAmp]
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name flags_type_))} 
                                          {(-eq)} {(${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN)} {(-a)} {(DQ (${ Id.VSub_Name flags_usName_))} 
                                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:help span_id:7120))} {(Id.Lit_RBracket ']')}
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:flags_boolStr_)
                                              op: assign_op.Equal
                                              rhs: 
                                                {(SQ (Token id:Id.Lit_Chars val:'[no]' span_id:7131))}
                                              spids: [7129]
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:flags_flagStr_)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (DQ (${ Id.VSub_Name flags_flagStr_) (--) 
                                                (${ Id.VSub_Name flags_boolStr_) (${ Id.VSub_Name flags_name_) (':')
                                              )
                                            }
                                          spids: [7135]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [7032 7053]
                                )
                              ]
                            )
                            (command.Case
                              to_match: {(${ Id.VSub_Name flags_type_)}
                              arms: [
                                (case_arm
                                  pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_BOOLEAN)}]
                                  action: [
                                    (command.If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (command.Sentence
                                              child: 
                                                (C {(Id.Lit_LBracket '[')} 
                                                  {(DQ (${ Id.VSub_Name flags_default_))} {(-eq)} {(${ Id.VSub_Name FLAGS_TRUE)} {(Id.Lit_RBracket ']')}
                                                )
                                              terminator: (Token id:Id.Op_Semi val:';' span_id:7187)
                                            )
                                          ]
                                          action: [
                                            (command.ShAssignment
                                              pairs: [
                                                (assign_pair
                                                  lhs: (sh_lhs_expr.Name name:flags_defaultStr_)
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: true
                                                          span_id: 7194
                                                        )
                                                      )
                                                    }
                                                  spids: [7192]
                                                )
                                              ]
                                            )
                                          ]
                                          spids: [7170 7189]
                                        )
                                      ]
                                      else_action: [
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:flags_defaultStr_)
                                              op: assign_op.Equal
                                              rhs: 
                                                {(SQ (Token id:Id.Lit_Chars val:false span_id:7203))}
                                              spids: [7201]
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [7164 7167 7210 -1]
                                )
                                (case_arm
                                  pat_list: [
                                    {(${ Id.VSub_Name __FLAGS_TYPE_FLOAT)}
                                    {(${ Id.VSub_Name __FLAGS_TYPE_INTEGER)}
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:flags_defaultStr_)
                                          op: assign_op.Equal
                                          rhs: {(${ Id.VSub_Name flags_default_)}
                                          spids: [7223]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [7213 7220 7228 -1]
                                )
                                (case_arm
                                  pat_list: [{(${ Id.VSub_Name __FLAGS_TYPE_STRING)}]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:flags_defaultStr_)
                                          op: assign_op.Equal
                                          rhs: {(DQ ("'") (${ Id.VSub_Name flags_default_) ("'"))}
                                          spids: [7236]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [7231 7234 7245 -1]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_defaultStr_)
                                  op: assign_op.Equal
                                  rhs: {(DQ ('(default: ') (${ Id.VSub_Name flags_defaultStr_) (')'))}
                                  spids: [7251]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_helpStr_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ('  ') (${ Id.VSub_Name flags_flagStr_) ('  ') 
                                        (braced_var_sub
                                          token: (Token id:Id.VSub_Name val:flags_help_ span_id:7270)
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op_id: Id.VTest_ColonPlus
                                              arg_word: {(${ Id.VSub_Name flags_help_) (' ')}
                                            )
                                        ) (${ Id.VSub_Name flags_defaultStr_)
                                      )
                                    }
                                  spids: [7262]
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(_flags_strlen)} {(DQ (${ Id.VSub_Name flags_helpStr_))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:7291)
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_helpStrLen_)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name flags_output)}
                                  spids: [7295]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_columns_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:7302)
                                        command_list: 
                                          (command.CommandList
                                            children: [(C {(_flags_columns)})]
                                          )
                                      )
                                    }
                                  spids: [7301]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} 
                                          {(DQ (${ Id.VSub_Name flags_helpStrLen_))} {(-lt)} {(DQ (${ Id.VSub_Name flags_columns_))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:7329)
                                    )
                                  ]
                                  action: [
                                    (command.Simple
                                      words: [{(echo)} {(DQ (${ Id.VSub_Name flags_helpStr_))}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:7342)
                                          fd: -1
                                          arg_word: {(2)}
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [7310 7331]
                                )
                              ]
                              else_action: [
                                (command.Simple
                                  words: [
                                    {(echo)}
                                    {
                                      (DQ ('  ') (${ Id.VSub_Name flags_flagStr_) ('  ') 
                                        (${ Id.VSub_Name flags_help_)
                                      )
                                    }
                                  ]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:7362)
                                      fd: -1
                                      arg_word: {(2)}
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_emptyStr_)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ 
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_Backtick
                                                  val: '`'
                                                  span_id: 7376
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (command.Pipeline
                                                      children: [
                                                        (C {(echo)} 
                                                          {
                                                            (DQ (x) (${ Id.VSub_Name flags_flagStr_) 
                                                              (x)
                                                            )
                                                          }
                                                        )
                                                        (C {(awk)} 
                                                          {
                                                            (SQ 
                                                              (Token
                                                                id: Id.Lit_Chars
                                                                val: 
'{printf "%"length($0)-2"s", ""}'
                                                                span_id: 7402
                                                              )
                                                            )
                                                          }
                                                        )
                                                      ]
                                                      negated: F
                                                    )
                                                  ]
                                                )
                                            )
                                          )
                                        }
                                      spids: [7374]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_helpStr_)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ('  ') (${ Id.VSub_Name flags_emptyStr_) ('  ') 
                                            (${ Id.VSub_Name flags_defaultStr_)
                                          )
                                        }
                                      spids: [7408]
                                    )
                                  ]
                                )
                                (command.Simple
                                  words: [{(_flags_strlen)} {(DQ (${ Id.VSub_Name flags_helpStr_))}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Great val:'>' span_id:7429)
                                      fd: -1
                                      arg_word: {(/dev/null)}
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:flags_helpStrLen_)
                                      op: assign_op.Equal
                                      rhs: {(${ Id.VSub_Name flags_output)}
                                      spids: [7433]
                                    )
                                  ]
                                )
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} 
                                              {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS))} {(-eq)} {(DQ (${ Id.VSub_Name __FLAGS_GETOPT_VERS_STD))} {(-o)} {(DQ (${ Id.VSub_Name flags_helpStrLen_))} 
                                              {(-lt)} {(DQ (${ Id.VSub_Name flags_columns_))} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:7477)
                                        )
                                      ]
                                      action: [
                                        (command.Simple
                                          words: [{(echo)} {(DQ (${ Id.VSub_Name flags_helpStr_))}]
                                          redirects: [
                                            (redir.Redir
                                              op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:7494)
                                              fd: -1
                                              arg_word: {(2)}
                                            )
                                          ]
                                        )
                                      ]
                                      spids: [7440 7479]
                                    )
                                  ]
                                  else_action: [
                                    (command.Simple
                                      words: [
                                        {(echo)}
                                        {(DQ ('    ') (${ Id.VSub_Name flags_defaultStr_))}
                                      ]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:7518)
                                          fd: -1
                                          arg_word: {(2)}
                                        )
                                      ]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                        )
                    )
                  ]
                  spids: [6839 6854]
                )
              ]
            )
            (C {(unset)} {(flags_boolStr_)} {(flags_default_)} {(flags_defaultStr_)} {(flags_emptyStr_)} 
              {(flags_flagStr_)} {(flags_help_)} {(flags_helpStr)} {(flags_helpStrLen)} {(flags_name_)} {(flags_columns_)} {(flags_short_)} 
              {(flags_type_)} {(flags_usName_)}
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:7568)
              arg_word: {(${ Id.VSub_Name FLAGS_TRUE)}
            )
          ]
        )
    )
    (command.ShFunction
      name: flags_reset
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: flags_name_
              iter_words: [{(${ Id.VSub_Name __flags_longNames)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_usName_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:7617)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (C {(_flags_underscoreName)} {(DQ (${ Id.VSub_Name flags_name_))})
                                    ]
                                  )
                              )
                            }
                          spids: [7616]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags_strToEval_)
                          op: assign_op.Equal
                          rhs: {(DQ ('unset FLAGS_') (${ Id.VSub_Name flags_usName_))}
                          spids: [7630]
                        )
                      ]
                    )
                    (command.ForEach
                      iter_name: flags_type_
                      iter_words: [
                        {(${ Id.VSub_Name __FLAGS_INFO_DEFAULT)}
                        {(${ Id.VSub_Name __FLAGS_INFO_HELP)}
                        {(${ Id.VSub_Name __FLAGS_INFO_SHORT)}
                        {(${ Id.VSub_Name __FLAGS_INFO_TYPE)}
                      ]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:flags_strToEval_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ (${ Id.VSub_Name flags_strToEval_) (' __flags_') 
                                        (${ Id.VSub_Name flags_usName_) (_) (${ Id.VSub_Name flags_type_)
                                      )
                                    }
                                  spids: [7673]
                                )
                              ]
                            )
                          ]
                        )
                    )
                    (C {(eval)} {(DQ (${ Id.VSub_Name flags_strToEval_))})
                  ]
                )
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__flags_boolNames)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:7712))}
                  spids: [7710]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__flags_longNames)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:7718))}
                  spids: [7716]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__flags_shortNames)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:7724))}
                  spids: [7722]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__flags_definedNames)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:7730))}
                  spids: [7728]
                )
              ]
            )
            (C {(flags_setLoggingLevel)} {(${ Id.VSub_Name __FLAGS_LEVEL_DEFAULT)})
            (C {(unset)} {(flags_name_)} {(flags_type_)} {(flags_strToEval_)} {(flags_usName_)})
          ]
        )
    )
    (C {(flags_setLoggingLevel)} {(${ Id.VSub_Name __FLAGS_LEVEL_DEFAULT)})
  ]
)