(command.CommandList
  children: [
    (command.ShFunction
      name: __gtar_parse_help_opt
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(opttype)} {(arg)} {(opt)} {(separator)} {(optvar)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opttype)
                  op: assign_op.Equal
                  rhs: {(long)}
                  spids: [138]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:arg)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [142]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [148]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:separator)
                  op: assign_op.Equal
                  rhs: {(DQ (' '))}
                  spids: [154]
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$opt'))}
              arms: [
                (case_arm pat_list:[{(--) (Id.Lit_Star '*')}] spids:[170 172 175 -1])
                (case_arm
                  pat_list: [
                    {(-) 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\?' span_id:179)
                      )
                    }
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:183)
                    )
                  ]
                  spids: [178 180 185 -1]
                )
                (case_arm
                  pat_list: [{(-) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:opttype)
                          op: assign_op.Equal
                          rhs: {(short)}
                          spids: [193]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:opt)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:opt span_id:199)
                                suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{(-)})
                              )
                            }
                          spids: [197]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:separator)
                          op: assign_op.Equal
                          rhs: (word.Empty)
                          spids: [205]
                        )
                      ]
                    )
                  ]
                  spids: [188 190 208 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ ('not an option ') ($ Id.VSub_DollarName '$opt'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:217)
                          fd: -1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:226)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [211 212 231 -1]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:opt span_id:244)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: 
                              {
                                (word_part.EscapedLiteral
                                  token: (Token id:Id.Lit_EscapedChar val:'\\[' span_id:247)
                                ) ('*')
                              }
                            replace: {}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [242]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:opt span_id:255)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: {('=*')}
                            replace: {('=')}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [253]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:opt span_id:271)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: 
                              {
                                (word_part.EscapedLiteral
                                  token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:274)
                                ) ('*')
                              }
                            replace: {}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [269]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:opt span_id:282)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: 
                              {
                                (word_part.EscapedLiteral
                                  token: (Token id:Id.Lit_EscapedChar val:"\\'" span_id:285)
                                ) ('*')
                              }
                            replace: {}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [280]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:opt span_id:293)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: 
                              {
                                (word_part.EscapedLiteral
                                  token: (Token id:Id.Lit_EscapedChar val:'\\;' span_id:296)
                                ) ('*')
                              }
                            replace: {}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [291]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:optvar)
                  op: assign_op.Equal
                  rhs: 
                    {($ Id.VSub_DollarName '$opttype') 
                      (SQ (Token id:Id.Lit_Chars val:_arg_ span_id:306)) ($ Id.VSub_DollarName '$arg')
                    }
                  spids: [303]
                )
              ]
            )
            (C {(eval)} 
              {
                (DQ ($ Id.VSub_DollarName '$optvar') ('=') 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:317)
                  ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:318)) 
                  ($ Id.VSub_DollarName '$optvar') ($ Id.VSub_DollarName '$separator') 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:321)
                  ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:322)) 
                  ($ Id.VSub_DollarName '$opt') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:324))
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: __gtar_parse_help_line
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(i)})
            (command.ForEach
              iter_name: i
              iter_words: [{($ Id.VSub_Number '$1')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$i'))}
                      arms: [
                        (case_arm
                          pat_list: [{(--) (Id.Lit_Star '*')} {(-) (Id.Lit_Star '*')}]
                          action: [
                            (C {(__gtar_parse_help_opt)} {(DQ ($ Id.VSub_DollarName '$i'))} 
                              {(DQ ($ Id.VSub_Number '$2'))}
                            )
                          ]
                          spids: [369 374 388 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:400)
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:401)
                            )
                          ]
                          spids: [396 397 -1 404]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: __gnu_tar_parse_help
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(str)} {(line)} {(arg)})
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:429)
              cond: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [{(read)} {(line)}]
                      more_env: [(env_pair name:IFS val:(word.Empty) spids:[431])]
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:436)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_EqualTilde
                                      left: {(DQ ($ Id.VSub_DollarName '$line'))}
                                      right: 
                                        {(Id.Lit_Other '^') (Id.Lit_Other '[') (Id.Lit_Other '[') 
                                          (Id.Lit_Other ':') (blank) (Id.Lit_Other ':') (Id.Lit_Other ']') (Id.Lit_Other ']') (Id.Lit_Other '{') (1) (Id.Lit_Other ',') 
                                          (10) (Id.Lit_Other '}') (Id.Lit_Other '(') (Id.Lit_Other '(') (Id.Lit_Other '(') (Id.Lit_Other ',') 
                                          (Id.Lit_Other '[') (Id.Lit_Other '[') (Id.Lit_Other ':') (blank) (Id.Lit_Other ':') (Id.Lit_Other ']') (Id.Lit_Other ']') 
                                          (Id.Lit_Other ')') (Id.Lit_Other '?') (Id.Lit_Other '(') (--) (Id.Lit_Other '?') (Id.Lit_Other '(') (Id.Lit_Other '[') 
                                          (Id.Lit_RegexMeta '\\]') (Id.Lit_RegexMeta '\\[') (a-zA-Z0-9) (Id.Lit_Other '?') (-) (Id.Lit_Other '=') (Id.Lit_Other ']') 
                                          (Id.Lit_Other '+') (Id.Lit_Other ')') (Id.Lit_Other ')') (Id.Lit_Other '(') (Id.Lit_Other ',') (Id.Lit_Other '[') 
                                          (Id.Lit_Other '[') (Id.Lit_Other ':') (space) (Id.Lit_Other ':') (Id.Lit_Other ']') (Id.Lit_Other ']') (Id.Lit_Other ')') 
                                          (Id.Lit_Other '?') (Id.Lit_Other ')') (Id.Lit_Other '+') (Id.Lit_Other ')') (Id.Lit_Other .) (Id.Lit_Other '*') 
                                          (Id.Lit_Other '$')
                                        }
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:529)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:line)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:BASH_REMATCH span_id:537)
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                          )
                                      )
                                    }
                                  spids: [535]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:str)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (braced_var_sub
                                          token: (Token id:Id.VSub_Name val:line span_id:547)
                                          suffix_op: 
                                            (suffix_op.PatSub
                                              pat: {(',')}
                                              replace: {(' ')}
                                              replace_mode: Id.Lit_Slash
                                            )
                                        )
                                      )
                                    }
                                  spids: [544]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:arg)
                                  op: assign_op.Equal
                                  rhs: {(none)}
                                  spids: [574]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_EqualTilde
                                              left: {(DQ ($ Id.VSub_DollarName '$line'))}
                                              right: 
                                                {(--) (Id.Lit_Other '[') (A-Za-z0-9-) 
                                                  (Id.Lit_Other ']') (Id.Lit_Other '+') (Id.Lit_Other '(') (Id.Lit_RegexMeta '\\[') (Id.Lit_Other '?') (Id.Lit_Other ')') 
                                                  (Id.Lit_Other '=')
                                                }
                                            )
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:600)
                                    )
                                  ]
                                  action: [
                                    (command.AndOr
                                      ops: [Id.Op_DAmp Id.Op_DPipe]
                                      children: [
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Unary
                                              op_id: Id.BoolUnary_n
                                              child: 
                                                {
                                                  (DQ 
                                                    (braced_var_sub
                                                      token: 
                                                        (Token
                                                          id: Id.VSub_Name
                                                          val: BASH_REMATCH
                                                          span_id: 611
                                                        )
                                                      bracket_op: 
                                                        (bracket_op.ArrayIndex
                                                          expr: 
                                                            (arith_expr.ArithWord
                                                              w: {(Id.Lit_Digits 1)}
                                                            )
                                                        )
                                                    )
                                                  )
                                                }
                                            )
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:arg)
                                              op: assign_op.Equal
                                              rhs: {(opt)}
                                              spids: [622]
                                            )
                                          ]
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:arg)
                                              op: assign_op.Equal
                                              rhs: {(req)}
                                              spids: [627]
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [578 602]
                                )
                              ]
                            )
                            (C {(__gtar_parse_help_line)} {(DQ ($ Id.VSub_DollarName '$str'))} 
                              {(DQ ($ Id.VSub_DollarName '$arg'))}
                            )
                          ]
                          spids: [457 531]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_TLess val:'<<<' span_id:651)
                  fd: -1
                  arg_word: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:653)
                          command_list: (command.CommandList children:[(C {(tar)} {(--help)})])
                        )
                      )
                    }
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:long_opts)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ('        ') ($ Id.VSub_DollarName '$long_arg_none') ('        ') 
                        ($ Id.VSub_DollarName '$long_arg_opt') ('        ') ($ Id.VSub_DollarName '$long_arg_req')
                      )
                    }
                  spids: [662]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:short_opts)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$short_arg_none') 
                        ($ Id.VSub_DollarName '$short_arg_opt') ($ Id.VSub_DollarName '$short_arg_req')
                      )
                    }
                  spids: [677]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __gtar_parse_warnings
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(line)})
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:703)
              cond: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [{(read)} {(line)}]
                      more_env: [(env_pair name:IFS val:(word.Empty) spids:[705])]
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:710)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_EqualTilde
                                      left: {($ Id.VSub_DollarName '$line')}
                                      right: 
                                        {(Id.Lit_Other '^') (Id.Lit_Other '[') (Id.Lit_Other '[') 
                                          (Id.Lit_Other ':') (blank) (Id.Lit_Other ':') (Id.Lit_Other ']') (Id.Lit_Other ']') (Id.Lit_Other '*') (-) (Id.Lit_Other '[') 
                                          (Id.Lit_Other '[') (Id.Lit_Other ':') (blank) (Id.Lit_Other ':') (Id.Lit_Other ']') (Id.Lit_Other ']') (Id.Lit_Other '*') 
                                          (Id.Lit_Other '[') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\`' span_id:742)) 
                                          (word_part.EscapedLiteral
                                            token: 
                                              (Token
                                                id: Id.Lit_EscapedChar
                                                val: "\\'"
                                                span_id: 743
                                              )
                                          ) (Id.Lit_Other ']') (Id.Lit_Other '(') (Id.Lit_Other '[') (a-zA-Z0-9-) (Id.Lit_Other ']') 
                                          (Id.Lit_Other '+') (Id.Lit_Other ')') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:751)) 
                                          (Id.Lit_Other '$')
                                        }
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:755)
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ 
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:BASH_REMATCH span_id:764)
                                    bracket_op: 
                                      (bracket_op.ArrayIndex
                                        expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                      )
                                  ) (' no-') 
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:BASH_REMATCH span_id:771)
                                    bracket_op: 
                                      (bracket_op.ArrayIndex
                                        expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                      )
                                  )
                                )
                              }
                            )
                          ]
                          spids: [715 757]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_TLess val:'<<<' span_id:784)
                  fd: -1
                  arg_word: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:786)
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Simple
                                  words: [{(tar)} {(--warning) (Id.Lit_Equals '=')}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:795)
                                      fd: 2
                                      arg_word: {(1)}
                                    )
                                  ]
                                  more_env: [(env_pair name:LC_ALL val:{(C)} spids:[787])]
                                )
                              ]
                            )
                        )
                      )
                    }
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_last_char
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Number val:1 span_id:818)
                    suffix_op: 
                      (suffix_op.Slice
                        begin: 
                          (arith_expr.ArithWord
                            w: 
                              {
                                (word_part.ArithSub
                                  anode: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Minus
                                      left: 
                                        (arith_expr.ArithWord
                                          w: 
                                            {
                                              (braced_var_sub
                                                token: (Token id:Id.VSub_Number val:1 span_id:825)
                                                prefix_op: (Id.VSub_Pound)
                                              )
                                            }
                                        )
                                      right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                    )
                                )
                              }
                          )
                      )
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_parse_old_opt
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(first_word)} {(char)})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.LogicalAnd
                      left: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_eq
                          left: {(DQ ($ Id.VSub_DollarName '$cword'))}
                          right: {(1)}
                        )
                      right: 
                        (bool_expr.LogicalAnd
                          left: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ ($ Id.VSub_DollarName '$cur'))}
                            )
                          right: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobNEqual
                              left: 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: (Token id:Id.VSub_Name val:cur span_id:881)
                                      suffix_op: 
                                        (suffix_op.Slice
                                          begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                                          length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                        )
                                    )
                                  )
                                }
                              right: {(SQ (Token id:Id.Lit_Chars val:- span_id:892))}
                            )
                        )
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:old_opt_progress)
                      op: assign_op.Equal
                      rhs: {(1)}
                      spids: [901]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:first_word)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:words span_id:912)
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                    }
                  spids: [910]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.LogicalAnd
                      left: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ ($ Id.VSub_DollarName '$first_word'))}
                        )
                      right: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobNEqual
                          left: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: (Token id:Id.VSub_Name val:first_word span_id:931)
                                  suffix_op: 
                                    (suffix_op.Slice
                                      begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                                      length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                    )
                                )
                              )
                            }
                          right: {(DQ (-))}
                        )
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:old_opt_used)
                      op: assign_op.Equal
                      rhs: {(1)}
                      spids: [951]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_eq
                              left: {($ Id.VSub_DollarName '$old_opt_used')}
                              right: {(1)}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:975)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:char)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:first_word span_id:982)
                                suffix_op: 
                                  (suffix_op.Slice
                                    begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                                    length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [980]
                        )
                      ]
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:990)
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_n
                                  child: {(DQ ($ Id.VSub_DollarName '$char'))}
                                )
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:1001)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(__tar_is_argreq)} {(DQ ($ Id.VSub_DollarName '$char'))})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:1013)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:old_opt_parsed)
                                          op: assign_op.PlusEqual
                                          rhs: 
                                            {
                                              (sh_array_literal
                                                left: (Token id:Id.Op_LParen val:'(' span_id:1019)
                                                words: [{(DQ ($ Id.VSub_DollarName '$char'))}]
                                              )
                                            }
                                          spids: [1018]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [1006 1015]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:first_word)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:first_word span_id:1031)
                                        suffix_op: 
                                          (suffix_op.Unary
                                            op_id: Id.VOp1_DPound
                                            arg_word: {($ Id.VSub_DollarName '$char')}
                                          )
                                      )
                                    }
                                  spids: [1029]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:char)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:first_word span_id:1039)
                                        suffix_op: 
                                          (suffix_op.Slice
                                            begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                                            length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                          )
                                      )
                                    }
                                  spids: [1037]
                                )
                              ]
                            )
                          ]
                        )
                    )
                  ]
                  spids: [964 977]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_preparse_cmdline
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(first_arg)} {(my_args)} {(tmparg)} {(i)} 
              {(Id.Lit_VarLike 'modes=') (DQ (ctxurdA))}
            )
            (C {(shift)})
            (C {(__tar_parse_old_opt)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:first_arg)
                  op: assign_op.Equal
                  rhs: {(1)}
                  spids: [1094]
                )
              ]
            )
            (command.ForEach
              iter_name: i
              iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$i'))}
                      arms: [
                        (case_arm
                          pat_list: [{(--delete)} {(--test-label)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:tar_mode)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:i span_id:1129)
                                        suffix_op: 
                                          (suffix_op.Slice
                                            begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)})
                                            length: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)})
                                          )
                                      )
                                    }
                                  spids: [1127]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:tar_mode_arg)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName '$i')}
                                  spids: [1137]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:1141)
                            )
                          ]
                          spids: [1121 1124 1144 -1]
                        )
                        (case_arm
                          pat_list: [{(--) (Id.Lit_Star '*')}]
                          spids: [1147 1149 1156 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(-) (Id.Lit_Star '*') (Id.Lit_LBracket '[') 
                              ($ Id.VSub_DollarName '$modes') (Id.Lit_RBracket ']') (Id.Lit_Star '*')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:tar_mode)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:i span_id:1170)
                                        suffix_op: 
                                          (suffix_op.PatSub
                                            pat: {('[^') ($ Id.VSub_DollarName '$modes') (']')}
                                            replace: {}
                                            replace_mode: Id.Lit_Slash
                                          )
                                      )
                                    }
                                  spids: [1168]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:tar_mode)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:tar_mode span_id:1182)
                                        suffix_op: 
                                          (suffix_op.Slice
                                            begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                                            length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                          )
                                      )
                                    }
                                  spids: [1180]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:tar_mode_arg)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName '$i')}
                                  spids: [1190]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:1194)
                            )
                          ]
                          spids: [1159 1165 1197 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_Star '*') (Id.Lit_LBracket '[') ($ Id.VSub_DollarName '$modes') 
                              (Id.Lit_RBracket ']') (Id.Lit_Star '*')
                            }
                          ]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_eq
                                              left: {($ Id.VSub_DollarName '$first_arg')}
                                              right: {(1)}
                                            )
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:1223)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:tar_mode)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (braced_var_sub
                                                token: (Token id:Id.VSub_Name val:i span_id:1230)
                                                suffix_op: 
                                                  (suffix_op.PatSub
                                                    pat: 
                                                      {('[^') ($ Id.VSub_DollarName '$modes') (']')}
                                                    replace: {}
                                                    replace_mode: Id.Lit_Slash
                                                  )
                                              )
                                            }
                                          spids: [1228]
                                        )
                                      ]
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:tar_mode)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (braced_var_sub
                                                token: 
                                                  (Token
                                                    id: Id.VSub_Name
                                                    val: tar_mode
                                                    span_id: 1242
                                                  )
                                                suffix_op: 
                                                  (suffix_op.Slice
                                                    begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                                                    length: 
                                                      (arith_expr.ArithWord
                                                        w: {(Id.Lit_Digits 1)}
                                                      )
                                                  )
                                              )
                                            }
                                          spids: [1240]
                                        )
                                      ]
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:tar_mode_arg)
                                          op: assign_op.Equal
                                          rhs: {($ Id.VSub_DollarName '$i')}
                                          spids: [1250]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [1212 1225]
                                )
                              ]
                            )
                          ]
                          spids: [1200 1205 1257 -1]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:first_arg)
                          op: assign_op.Equal
                          rhs: {(0)}
                          spids: [1263]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_file_option
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'ext=') (DQ ($ Id.VSub_Number '$1'))})
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$tar_mode'))}
              arms: [
                (case_arm
                  pat_list: [{(c)}]
                  action: [(C {(_filedir)} {(-d)})]
                  spids: [1301 1302 1314 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [(C {(_filedir)} {(DQ ($ Id.VSub_DollarName '$ext'))})]
                  spids: [1317 1318 1328 -1]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_is_argreq
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(opt)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:opt)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1355]
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$opt'))}
              arms: [
                (case_arm
                  pat_list: [
                    {(-) (Id.Lit_LBracket '[') (A-Za-z0-9) (Id.Lit_QMark '?') (Id.Lit_RBracket ']')}
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_EqualTilde
                              left: {(DQ ($ Id.VSub_DollarName '$short_arg_req'))}
                              right: 
                                {
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:opt span_id:1385)
                                    suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{(-)})
                                  )
                                }
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1394)
                          arg_word: {(0)}
                        )
                      ]
                    )
                  ]
                  spids: [1368 1373 1399 -1]
                )
                (case_arm
                  pat_list: [
                    {(Id.Lit_LBracket '[') (A-Za-z0-9) (Id.Lit_QMark '?') (Id.Lit_RBracket ']')}
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_EqualTilde
                              left: {(DQ ($ Id.VSub_DollarName '$short_arg_req'))}
                              right: {(${ Id.VSub_Name opt)}
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1425)
                          arg_word: {(0)}
                        )
                      ]
                    )
                  ]
                  spids: [1402 1406 1430 -1]
                )
                (case_arm
                  pat_list: [{(--) (Id.Lit_Star '*')}]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_EqualTilde
                              left: {(DQ ($ Id.VSub_DollarName '$long_arg_req'))}
                              right: 
                                {(Id.Lit_Other '[') (Id.Lit_Other '[') (Id.Lit_Other ':') (blank) 
                                  (Id.Lit_Other ':') (Id.Lit_Other ']') (Id.Lit_Other ']') ($ Id.VSub_DollarName '$opt') (Id.Lit_Other '=') (Id.Lit_Other '[') 
                                  (Id.Lit_Other '[') (Id.Lit_Other ':') (blank) (Id.Lit_Other ':') (Id.Lit_Other ']') (Id.Lit_Other ']')
                                }
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1467)
                          arg_word: {(0)}
                        )
                      ]
                    )
                  ]
                  spids: [1433 1435 1472 -1]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:1479)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_complete_mode
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(short_modes)} {(has_mode)} {(rawopt)} {(generated)} {(allshort_raw_unused)} 
              {(allshort_raw)} {(filler)} {(i)}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:short_modes)
                  op: assign_op.Equal
                  rhs: {(DQ (ctx))}
                  spids: [1521]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: Id.BoolUnary_z
                      child: {(DQ ($ Id.VSub_DollarName '$basic_tar'))}
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:short_modes)
                      op: assign_op.Equal
                      rhs: {(DQ (ctxurdA))}
                      spids: [1539]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:rawopt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:cur span_id:1552)
                        suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(-)})
                      )
                    }
                  spids: [1550]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:allshort_raw)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:short_opts span_id:1565)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: {('[- ]')}
                            replace: {}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [1563]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ ($ Id.VSub_DollarName '$tar_mode'))}
                              right: {(none)}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1591)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:filler)
                          op: assign_op.Equal
                          rhs: (word.Empty)
                          spids: [1601]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.LogicalAnd
                                      left: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_z
                                          child: {(DQ ($ Id.VSub_DollarName '$cur'))}
                                        )
                                      right: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_z
                                          child: {(DQ ($ Id.VSub_DollarName '$basic_tar'))}
                                        )
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1623)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:filler)
                                  op: assign_op.Equal
                                  rhs: {(-)}
                                  spids: [1628]
                                )
                              ]
                            )
                          ]
                          spids: [1604 1625]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:generated)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [1636]
                        )
                      ]
                    )
                    (command.ForExpr
                      init: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: (sh_lhs_expr.Name name:i)
                          right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                        )
                      cond: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                      update: 
                        (arith_expr.UnaryAssign
                          op_id: Id.Node_PostDPlus
                          child: (sh_lhs_expr.Name name:i)
                        )
                      body: 
                        (command.DoGroup
                          children: [
                            (C {(local)} 
                              {(Id.Lit_VarLike 'c=') 
                                (DQ 
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:short_modes span_id:1669)
                                    suffix_op: 
                                      (suffix_op.Slice
                                        begin: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')})
                                        length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                      )
                                  )
                                )
                              }
                            )
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ ($ Id.VSub_DollarName '$c'))}
                                    )
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:1690)
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:generated)
                                  op: assign_op.PlusEqual
                                  rhs: 
                                    {
                                      (DQ (' ') ($ Id.VSub_DollarName '$filler') 
                                        ($ Id.VSub_DollarName '$cur') ($ Id.VSub_DollarName '$c')
                                      )
                                    }
                                  spids: [1693]
                                )
                              ]
                            )
                          ]
                        )
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:COMPREPLY)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (sh_array_literal
                                left: (Token id:Id.Op_LParen val:'(' span_id:1707)
                                words: [
                                  {
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 1709
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(compgen)} {(-W)} 
                                              {(DQ ($ Id.VSub_DollarName '$generated'))}
                                            )
                                          ]
                                        )
                                    )
                                  }
                                ]
                              )
                            }
                          spids: [1706]
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1723)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [1578 1593]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {(DQ ($ Id.VSub_DollarName '$old_opt_progress'))}
                                  right: {(0)}
                                )
                            )
                            (C {(__tar_is_argreq)} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1761)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(__tar_last_char)} {(DQ ($ Id.VSub_DollarName '$cur'))})
                                        ]
                                      )
                                  )
                                )
                              }
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1769)
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:COMPREPLY)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (sh_array_literal
                                    left: (Token id:Id.Op_LParen val:'(' span_id:1775)
                                    words: [{(DQ ($ Id.VSub_DollarName '$cur'))}]
                                  )
                                }
                              spids: [1774]
                            )
                          ]
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1785)
                          arg_word: {(0)}
                        )
                      ]
                    )
                  ]
                  spids: [1740 1771]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:allshort_raw_unused)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:allshort_raw span_id:1796)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: {('[') ($ Id.VSub_DollarName '$rawopt') (']')}
                            replace: {}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [1794]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobNEqual
                              left: {(DQ ($ Id.VSub_DollarName '$tar_mode'))}
                              right: {(none)}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1819)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:allshort_raw_unused)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:allshort_raw_unused span_id:1826)
                                suffix_op: 
                                  (suffix_op.PatSub
                                    pat: {('[') ($ Id.VSub_DollarName '$short_modes') (']')}
                                    replace_mode: Id.Lit_Slash
                                  )
                              )
                            }
                          spids: [1824]
                        )
                      ]
                    )
                  ]
                  spids: [1806 1821]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:generated)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [1839]
                )
              ]
            )
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: (sh_lhs_expr.Name name:i)
                  right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                )
              cond: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:i))
              body: 
                (command.DoGroup
                  children: [
                    (C {(local)} 
                      {(Id.Lit_VarLike 'c=') 
                        (DQ 
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:allshort_raw_unused span_id:1870)
                            suffix_op: 
                              (suffix_op.Slice
                                begin: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')})
                                length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                              )
                          )
                        )
                      }
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_z
                              child: {(DQ ($ Id.VSub_DollarName '$c'))}
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Break val:break span_id:1891)
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:generated)
                          op: assign_op.PlusEqual
                          rhs: {(DQ (' ') ($ Id.VSub_DollarName '$cur') ($ Id.VSub_DollarName '$c'))}
                          spids: [1894]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1907)
                        words: [
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1909)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(compgen)} {(-W)} {(DQ ($ Id.VSub_DollarName '$generated'))})
                                  ]
                                )
                            )
                          }
                        ]
                      )
                    }
                  spids: [1906]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:1925)
              arg_word: {(0)}
            )
          ]
        )
    )
    (command.ShFunction
      name: __gtar_complete_lopts
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(rv)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1946)
                        words: [
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1948)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(compgen)} {(-W)} {(DQ ($ Id.VSub_DollarName '$long_opts'))} 
                                      {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                    )
                                  ]
                                )
                            )
                          }
                        ]
                      )
                    }
                  spids: [1945]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:rv)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [1969]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: {($ Id.VSub_DollarName '$COMPREPLY')}
                      right: {(Id.Lit_Other '*') (Id.BoolBinary_GlobEqual '=')}
                    )
                )
                (C {(compopt)} {(-o)} {(nospace)})
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:1993)
              arg_word: {($ Id.VSub_DollarName '$rv')}
            )
          ]
        )
    )
    (command.ShFunction
      name: __gtar_complete_sopts
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(generated)} {(short_mode_opts)} {(i)} {(c)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:short_mode_opts)
                  op: assign_op.Equal
                  rhs: {(DQ (ctxurdA))}
                  spids: [2019]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:generated)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:short_opts span_id:2027)
                        suffix_op: 
                          (suffix_op.PatSub
                            pat: {('[') ($ Id.VSub_DollarName '$short_mode_opts') (']')}
                            replace: {}
                            replace_mode: Id.Lit_Slash
                          )
                      )
                    }
                  spids: [2025]
                )
              ]
            )
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: (sh_lhs_expr.Name name:i)
                  right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                )
              cond: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:i))
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:c)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: (Token id:Id.VSub_Name val:allshort_raw_unused span_id:2064)
                                  suffix_op: 
                                    (suffix_op.Slice
                                      begin: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')})
                                      length: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                    )
                                )
                              )
                            }
                          spids: [2061]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_z
                              child: {(DQ ($ Id.VSub_DollarName '$c'))}
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Break val:break span_id:2085)
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:generated)
                          op: assign_op.PlusEqual
                          rhs: {(DQ (' ') ($ Id.VSub_DollarName '$cur') ($ Id.VSub_DollarName '$c'))}
                          spids: [2088]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:2101)
                        words: [
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2103)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(compgen)} {(-W)} {(DQ ($ Id.VSub_DollarName '$generated'))} 
                                      {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                    )
                                  ]
                                )
                            )
                          }
                        ]
                      )
                    }
                  spids: [2100]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_try_mode
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$cur'))}
              arms: [
                (case_arm
                  pat_list: [{(--) (Id.Lit_Star '*')}]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ ($ Id.VSub_DollarName '$basic_tar'))}
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:2164)
                          arg_word: {(0)}
                        )
                      ]
                    )
                    (C {(__gtar_complete_lopts)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:2172)
                      arg_word: {($ Id.VSub_QMark '$?')}
                    )
                  ]
                  spids: [2143 2145 2177 -1]
                )
                (case_arm
                  pat_list: [{(-) (Id.Lit_Star '*')}]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ ($ Id.VSub_DollarName '$basic_tar'))}
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:2202)
                          arg_word: {(0)}
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(__tar_complete_mode)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:2212)
                          arg_word: {(0)}
                        )
                      ]
                    )
                  ]
                  spids: [2181 2183 2217 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.LogicalOr
                                      left: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {(DQ ($ Id.VSub_DollarName '$cword'))}
                                          right: {(1)}
                                        )
                                      right: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$tar_mode'))}
                                          right: {(none)}
                                        )
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2248)
                            )
                          ]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {(__tar_complete_mode)})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:2257)
                                  arg_word: {(0)}
                                )
                              ]
                            )
                          ]
                          spids: [2225 2250]
                        )
                      ]
                    )
                  ]
                  spids: [2221 2222 2265 -1]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2271)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_adjust_PREV_from_old_option
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.LogicalAnd
                              left: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {(DQ ($ Id.VSub_DollarName '$old_opt_used'))}
                                  right: {(1)}
                                )
                              right: 
                                (bool_expr.LogicalAnd
                                  left: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_gt
                                      left: {(DQ ($ Id.VSub_DollarName '$cword'))}
                                      right: {(1)}
                                    )
                                  right: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_lt
                                      left: {(DQ ($ Id.VSub_DollarName '$cword'))}
                                      right: 
                                        {
                                          (word_part.ArithSub
                                            anode: 
                                              (arith_expr.Binary
                                                op_id: Id.Arith_Plus
                                                left: 
                                                  (arith_expr.ArithWord
                                                    w: 
                                                      {
                                                        (braced_var_sub
                                                          token: 
                                                            (Token
                                                              id: Id.VSub_Name
                                                              val: old_opt_parsed
                                                              span_id: 2334
                                                            )
                                                          prefix_op: (Id.VSub_Pound)
                                                          bracket_op: 
                                                            (bracket_op.WholeArray
                                                              op_id: Id.Lit_At
                                                            )
                                                        )
                                                      }
                                                  )
                                                right: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)})
                                              )
                                          )
                                        }
                                    )
                                )
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2348)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:prev)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (-) 
                                (braced_var_sub
                                  token: (Token id:Id.VSub_Name val:old_opt_parsed span_id:2362)
                                  bracket_op: 
                                    (bracket_op.ArrayIndex
                                      expr: 
                                        (arith_expr.Binary
                                          op_id: Id.Arith_Minus
                                          left: 
                                            (arith_expr.ArithWord
                                              w: {($ Id.VSub_DollarName '$cword')}
                                            )
                                          right: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)})
                                        )
                                    )
                                )
                              )
                            }
                          spids: [2358]
                        )
                      ]
                    )
                  ]
                  spids: [2298 2351]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_extract_like_mode
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(i)})
            (command.ForEach
              iter_name: i
              iter_words: [{(x)} {(d)} {(t)} {(delete)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ ($ Id.VSub_DollarName '$tar_mode'))}
                              right: {(DQ ($ Id.VSub_DollarName '$i'))}
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:2428)
                          arg_word: {(0)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2436)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_try_list_archive
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(tarball)} {(tarbin)} {(untar)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(__tar_extract_like_mode)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:2465)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(Id.KW_Set set)} {(--)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:words span_id:2486)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:tarbin)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2494]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:untar)
                  op: assign_op.Equal
                  rhs: {(DQ (tf))}
                  spids: [2498]
                )
              ]
            )
            (C {(shift)})
            (command.Simple
              words: [{(read)} {(tarball)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_TLess val:'<<<' span_id:2512)
                  fd: -1
                  arg_word: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2514)
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {(printf)} {(--)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:2520))} {(DQ ($ Id.VSub_At '$@'))}
                                    )
                                    (C {(sed)} {(-n)} 
                                      {
                                        (DQ ('/^.') (Id.Lit_Other '\\') ('{1,') (Id.Lit_Other '\\') ('}') 
                                          ($ Id.VSub_DollarName '$regex') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:2542)) (/p)
                                        )
                                      }
                                    )
                                    (C {(tee)} {(/tmp/jetel)})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                        )
                      )
                    }
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ ($ Id.VSub_DollarName '$tarball'))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2566)
                    )
                  ]
                  action: [
                    (C {(local)} 
                      {(Id.Lit_VarLike 'IFS=') 
                        (single_quoted
                          left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:2574)
                          tokens: [(Token id:Id.Char_OneChar val:'\\n' span_id:2575)]
                        )
                      }
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:COMPREPLY)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (sh_array_literal
                                left: (Token id:Id.Op_LParen val:'(' span_id:2580)
                                words: [
                                  {
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 2581
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(compgen)} {(-o)} {(filenames)} {(-W)} 
                                              {
                                                (DQ 
                                                  (command_sub
                                                    left_token: 
                                                      (Token
                                                        id: Id.Left_DollarParen
                                                        val: '$('
                                                        span_id: 2591
                                                      )
                                                    command_list: 
                                                      (command.CommandList
                                                        children: [
                                                          (command.WhileUntil
                                                            keyword: 
                                                              (Token
                                                                id: Id.KW_While
                                                                val: while
                                                                span_id: 2594
                                                              )
                                                            cond: [
                                                              (command.Sentence
                                                                child: (C {(read)} {(line)})
                                                                terminator: 
                                                                  (Token
                                                                    id: Id.Op_Semi
                                                                    val: ';'
                                                                    span_id: 2599
                                                                  )
                                                              )
                                                            ]
                                                            body: 
                                                              (command.DoGroup
                                                                children: [
                                                                  (C {(printf)} 
                                                                    {
                                                                      (DQ ('%q') (Id.Lit_Other '\\') 
                                                                        (n)
                                                                      )
                                                                    } 
                                                                    {
                                                                      (DQ 
                                                                        (command_sub
                                                                          left_token: 
                                                                            (Token
                                                                              id: 
Id.Left_DollarParen
                                                                              val: '$('
                                                                              span_id: 2613
                                                                            )
                                                                          command_list: 
                                                                            (command.CommandList
                                                                              children: [
                                                                                (C {(printf)} 
                                                                                  {
                                                                                    (Id.Lit_Other 
'%'
                                                                                    ) (q) (DQ (Id.Lit_Other '\\') (n))
                                                                                  } {(DQ ($ Id.VSub_DollarName '$line'))}
                                                                                )
                                                                              ]
                                                                            )
                                                                        )
                                                                      )
                                                                    }
                                                                  )
                                                                ]
                                                              )
                                                            redirects: [
                                                              (redir.Redir
                                                                op: 
                                                                  (Token
                                                                    id: Id.Redir_TLess
                                                                    val: '<<<'
                                                                    span_id: 2632
                                                                  )
                                                                fd: -1
                                                                arg_word: 
                                                                  {
                                                                    (DQ 
                                                                      (command_sub
                                                                        left_token: 
                                                                          (Token
                                                                            id: Id.Left_DollarParen
                                                                            val: '$('
                                                                            span_id: 2634
                                                                          )
                                                                        command_list: 
                                                                          (command.CommandList
                                                                            children: [
                                                                              (command.Simple
                                                                                words: [
                                                                                  {
                                                                                    ($ 
Id.VSub_DollarName '$tarbin'
                                                                                    )
                                                                                  }
                                                                                  {
                                                                                    ($ 
Id.VSub_DollarName '$untar'
                                                                                    )
                                                                                  }
                                                                                  {
                                                                                    (DQ 
                                                                                      ($ 
Id.VSub_DollarName '$tarball'
                                                                                      )
                                                                                    )
                                                                                  }
                                                                                ]
                                                                                redirects: [
                                                                                  (redir.Redir
                                                                                    op: 
                                                                                      (Token
                                                                                        id: 
Id.Redir_Great
                                                                                        val: '2>'
                                                                                        span_id: 
2643
                                                                                      )
                                                                                    fd: 2
                                                                                    arg_word: 
                                                                                      {(/dev/null)}
                                                                                  )
                                                                                ]
                                                                              )
                                                                            ]
                                                                          )
                                                                      )
                                                                    )
                                                                  }
                                                              )
                                                            ]
                                                          )
                                                        ]
                                                      )
                                                  )
                                                )
                                              } {(--)} 
                                              {
                                                (DQ 
                                                  (command_sub
                                                    left_token: 
                                                      (Token
                                                        id: Id.Left_DollarParen
                                                        val: '$('
                                                        span_id: 2655
                                                      )
                                                    command_list: 
                                                      (command.CommandList
                                                        children: [
                                                          (C {(printf)} 
                                                            {(DQ ('%q') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                          )
                                                        ]
                                                      )
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                        )
                                    )
                                  }
                                ]
                              )
                            }
                          spids: [2579]
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:2673)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [2555 2568]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_cleanup_prev
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_EqualTilde
                              left: {(DQ ($ Id.VSub_DollarName '$prev'))}
                              right: 
                                {(Id.Lit_Other '^') (-) (Id.Lit_Other '[') (a-zA-Z0-9) 
                                  (Id.Lit_Other '?') (Id.Lit_Other ']') (Id.Lit_Other '*') (Id.Lit_Other '$')
                                }
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2710)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:prev)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (-) 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2722)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {(__tar_last_char)} {(DQ ($ Id.VSub_DollarName '$prev'))})
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [2719]
                        )
                      ]
                    )
                  ]
                  spids: [2690 2712]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_detect_ext
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} 
              {(Id.Lit_VarLike 'tars=') 
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: '@(@(tar|gem|spkg)?(.@(Z|[bgx]z|bz2|lz?(ma)))|t@([abglx]z|b?(z)2))'
                    span_id: 2748
                  )
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ext)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$tars'))}
                  spids: [2752]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:regex)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: 
'\\(\\(tar\\|gem\\|spkg\\)\\(\\.\\(Z\\|[bgx]z\\|bz2\\|lz\\(ma\\)\\?\\)\\)\\?\\|t\\([abglx]z\\|bz\\?2\\)\\)'
                          span_id: 2760
                        )
                      )
                    }
                  spids: [2758]
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$tar_mode_arg'))}
              arms: [
                (case_arm
                  pat_list: [{(--) (Id.Lit_Star '*')}]
                  spids: [2774 2776 2783 -1]
                )
                (case_arm
                  pat_list: [
                    {
                      (word_part.ExtGlob
                        op: (Token id:Id.ExtGlob_QMark val:'?(' span_id:2786)
                        arms: [{(-)}]
                      ) (Id.Lit_Star '*') (Id.Lit_LBracket '[') (cr) (Id.Lit_RBracket ']') (Id.Lit_Star '*') (f)
                    }
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ext)
                          op: assign_op.Equal
                          rhs: {(SQ (Token id:Id.Lit_Chars val:'@(tar|gem|spkg)' span_id:2800))}
                          spids: [2798]
                        )
                      ]
                    )
                    (command.Case
                      to_match: 
                        {
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:words span_id:2807)
                            bracket_op: 
                              (bracket_op.ArrayIndex
                                expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                              )
                          )
                        }
                      arms: [
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*') (a) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ext)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName '$tars'))}
                                  spids: [2821]
                                )
                              ]
                            )
                          ]
                          spids: [2816 2819 2826 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*') (z) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ext)
                                  op: assign_op.Equal
                                  rhs: {(SQ (Token id:Id.Lit_Chars val:'t?(ar.)gz' span_id:2836))}
                                  spids: [2834]
                                )
                              ]
                            )
                          ]
                          spids: [2829 2832 2839 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*') (Z) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ext)
                                  op: assign_op.Equal
                                  rhs: {(SQ (Token id:Id.Lit_Chars val:'ta@(r.Z|z)' span_id:2849))}
                                  spids: [2847]
                                )
                              ]
                            )
                          ]
                          spids: [2842 2845 2852 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_Star '*') (Id.Lit_LBracket '[') (jy) (Id.Lit_RBracket ']') 
                              (Id.Lit_Star '*')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ext)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 't@(?(ar.)bz?(2)|b2)'
                                          span_id: 2864
                                        )
                                      )
                                    }
                                  spids: [2862]
                                )
                              ]
                            )
                          ]
                          spids: [2855 2860 2867 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*') (J) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ext)
                                  op: assign_op.Equal
                                  rhs: {(SQ (Token id:Id.Lit_Chars val:'t?(ar.)xz' span_id:2877))}
                                  spids: [2875]
                                )
                              ]
                            )
                          ]
                          spids: [2870 2873 2880 -1]
                        )
                      ]
                    )
                  ]
                  spids: [2786 2795 2886 -1]
                )
                (case_arm
                  pat_list: [
                    {
                      (word_part.ExtGlob
                        op: (Token id:Id.ExtGlob_Plus val:'+(' span_id:2889)
                        arms: [{('[^ZzJjy]')}]
                      ) (f)
                    }
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ext)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$tars'))}
                          spids: [2896]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:regex)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: 
'\\(\\(tar\\|gem\\|spkg\\)\\(\\.\\(Z\\|[bgx]z\\|bz2\\|lz\\(ma\\)\\?\\)\\)\\?\\|t\\([abglx]z\\|bz\\?2\\)\\)'
                                  span_id: 2904
                                )
                              )
                            }
                          spids: [2902]
                        )
                      ]
                    )
                  ]
                  spids: [2889 2893 2908 -1]
                )
                (case_arm
                  pat_list: [
                    {(Id.Lit_Star '*') (Id.Lit_LBracket '[') (Zz) (Id.Lit_RBracket ']') 
                      (Id.Lit_Star '*') (f)
                    }
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ext)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '@(@(t?(ar.)|gem.|spkg.)@(gz|Z)|taz)'
                                  span_id: 2922
                                )
                              )
                            }
                          spids: [2920]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:regex)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: 
'\\(\\(t\\(ar\\.\\)\\?\\|gem\\.\\|spkg\\.\\)\\(gz\\|Z\\)\\|taz\\)'
                                  span_id: 2928
                                )
                              )
                            }
                          spids: [2926]
                        )
                      ]
                    )
                  ]
                  spids: [2911 2917 2932 -1]
                )
                (case_arm
                  pat_list: [
                    {(Id.Lit_Star '*') (Id.Lit_LBracket '[') (jy) (Id.Lit_RBracket ']') 
                      (Id.Lit_Star '*') (f)
                    }
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ext)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '@(@(t?(ar.)|gem.)bz?(2)|spkg|tb2)'
                                  span_id: 2946
                                )
                              )
                            }
                          spids: [2944]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:regex)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '\\(\\(t\\(ar\\.\\)\\?\\|gem\\.\\)bz2\\?\\|spkg\\|tb2\\)'
                                  span_id: 2952
                                )
                              )
                            }
                          spids: [2950]
                        )
                      ]
                    )
                  ]
                  spids: [2935 2941 2956 -1]
                )
                (case_arm
                  pat_list: [
                    {(Id.Lit_Star '*') (Id.Lit_LBracket '[') (J) (Id.Lit_RBracket ']') (Id.Lit_Star '*') 
                      (f)
                    }
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ext)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '@(@(tar|gem|spkg).@(lzma|xz)|t[lx]z)'
                                  span_id: 2970
                                )
                              )
                            }
                          spids: [2968]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:regex)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '\\(\\(tar\\|gem\\|spkg\\)\\.\\(lzma\\|xz\\)\\|t[lx]z\\)'
                                  span_id: 2976
                                )
                              )
                            }
                          spids: [2974]
                        )
                      ]
                    )
                  ]
                  spids: [2959 2965 2980 -1]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _gtar
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(long_opts)} {(short_opts)} {(long_arg_none)} {(long_arg_opt)} {(long_arg_req)} 
              {(short_arg_none)} {(short_arg_opt)} {(short_arg_req)} {(tar_mode)} {(tar_mode_arg)} 
              {(Id.Lit_VarLike 'old_opt_progress=') (0)} {(Id.Lit_VarLike 'old_opt_used=') (0)} 
              {(Id.Lit_VarLike 'old_opt_parsed=') 
                (sh_array_literal left:(Token id:Id.Op_LParen val:'(' span_id:3033))
              }
            )
            (C {(local)} {(Id.Lit_VarLike 'tar_mode=') (none)})
            (C {(local)} {(Id.Lit_VarLike 'tar_mode_arg=')})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ ($ Id.VSub_DollarName '$_TAR_OPT_DEBUG'))}
                              right: {(1)}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3076)
                    )
                  ]
                  action: [
                    (C {(Id.KW_Set set)} {(-x)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:PS4)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (word_part.EscapedLiteral
                                  token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3088)
                                ) ('BASH_SOURCE:') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:3090)) 
                                ('LINENO: ')
                              )
                            }
                          spids: [3086]
                        )
                      ]
                    )
                  ]
                  spids: [3063 3078]
                )
              ]
            )
            (C {(local)} {(cur)} {(prev)} {(words)} {(cword)} {(split)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(_init_completion)} {(-s)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:3119)
                )
              ]
            )
            (C {(__gnu_tar_parse_help)})
            (C {(__tar_preparse_cmdline)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:words span_id:3135)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
            (C {(local)} {(ext)} {(regex)} {(tar)} {(untar)})
            (C {(__tar_detect_ext)})
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:3160)
              cond: [
                (command.Sentence
                  child: (C {(true)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:3163)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(__tar_adjust_PREV_from_old_option)})
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(__tar_posix_prev_handle)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Break val:break span_id:3178)
                        )
                      ]
                    )
                    (C {(__tar_cleanup_prev)})
                    (command.Case
                      to_match: {($ Id.VSub_DollarName '$prev')}
                      arms: [
                        (case_arm
                          pat_list: [{(-C)} {(--directory)}]
                          action: [
                            (C {(_filedir)} {(-d)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3215)
                            )
                          ]
                          spids: [3204 3207 3218 -1]
                        )
                        (case_arm
                          pat_list: [{(--atime-preserve)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3226)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3228
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-W)} 
                                                      {
                                                        (SQ 
                                                          (Token
                                                            id: Id.Lit_Chars
                                                            val: 'replace system'
                                                            span_id: 3235
                                                          )
                                                        )
                                                      } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3225]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3249)
                            )
                          ]
                          spids: [3221 3222 3252 -1]
                        )
                        (case_arm
                          pat_list: [{(--group)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3260)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3262
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-g)} {(--)} 
                                                      {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3259]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3279)
                            )
                          ]
                          spids: [3255 3256 3282 -1]
                        )
                        (case_arm
                          pat_list: [{(--owner)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3290)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3292
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-u)} {(--)} 
                                                      {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3289]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3309)
                            )
                          ]
                          spids: [3285 3286 3312 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(-F)}
                            {(--info-script)}
                            {(--new-volume-script)}
                            {(--rmt-command)}
                            {(--rsh-command)}
                            {(-I)}
                            {(--use-compress-program)}
                          ]
                          action: [
                            (C {(compopt)} {(-o)} {(filenames)})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3341)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3343
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-c)} {(--)} 
                                                      {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3340]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3360)
                            )
                          ]
                          spids: [3315 3330 3363 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(--volno-file)}
                            {(--add-file)}
                            {(-T)}
                            {(--files-from)}
                            {(-X)}
                            {(--exclude-from)}
                            {(--index-file)}
                            {(--listed-incremental)}
                            {(-g)}
                          ]
                          action: [
                            (C {(_filedir)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3391)
                            )
                          ]
                          spids: [3366 3385 3394 -1]
                        )
                        (case_arm
                          pat_list: [{(-H)} {(--format)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3404)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3406
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-W)} 
                                                      {
                                                        (SQ 
                                                          (Token
                                                            id: Id.Lit_Chars
                                                            val: 'gnu oldgnu pax posix ustar v7'
                                                            span_id: 3413
                                                          )
                                                        )
                                                      } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3403]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3429)
                            )
                          ]
                          spids: [3397 3400 3432 -1]
                        )
                        (case_arm
                          pat_list: [{(--quoting-style)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3440)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3442
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-W)} 
                                                      {
                                                        (SQ 
                                                          (Token
                                                            id: Id.Lit_Chars
                                                            val: 
'literal shell shell-always c c-maybe\n'
                                                            span_id: 3449
                                                          ) (Token id:Id.Lit_Chars val:'                    escape locale clocale' span_id:3450)
                                                        )
                                                      } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3439]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3464)
                            )
                          ]
                          spids: [3435 3436 3467 -1]
                        )
                        (case_arm
                          pat_list: [{(--totals)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3475)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3477
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-W)} 
                                                      {
                                                        (SQ 
                                                          (Token
                                                            id: Id.Lit_Chars
                                                            val: 
'SIGHUP SIGQUIT SIGINT SIGUSR1 SIGUSR2'
                                                            span_id: 3484
                                                          )
                                                        )
                                                      } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3474]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3500)
                            )
                          ]
                          spids: [3470 3471 3503 -1]
                        )
                        (case_arm
                          pat_list: [{(--warning)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:3511)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 3513
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-W)} 
                                                      {
                                                        (DQ 
                                                          (command_sub
                                                            left_token: 
                                                              (Token
                                                                id: Id.Left_DollarParen
                                                                val: '$('
                                                                span_id: 3520
                                                              )
                                                            command_list: 
                                                              (command.CommandList
                                                                children: [
                                                                  (C {(__gtar_parse_warnings)})
                                                                ]
                                                              )
                                                          )
                                                        )
                                                      } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [3510]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3536)
                            )
                          ]
                          spids: [3506 3507 3539 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(--file)}
                            {(-f)}
                            {(-) 
                              (word_part.ExtGlob
                                op: (Token id:Id.ExtGlob_Bang val:'!(' span_id:3547)
                                arms: [{(-) (Id.Lit_Other '*')}]
                              ) (f)
                            }
                          ]
                          action: [
                            (C {(__tar_file_option)} {(DQ ($ Id.VSub_DollarName '$ext'))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3562)
                            )
                          ]
                          spids: [3542 3552 3565 -1]
                        )
                        (case_arm
                          pat_list: [{(--) (Id.Lit_Star '*')}]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_EqualTilde
                                      left: {(DQ (' ') ($ Id.VSub_DollarName '$long_arg_req') (' '))}
                                      right: 
                                        {
                                          (word_part.EscapedLiteral
                                            token: 
                                              (Token
                                                id: Id.Lit_EscapedChar
                                                val: '\\ '
                                                span_id: 3587
                                              )
                                          ) ($ Id.VSub_DollarName '$prev') (Id.Lit_Other '=') 
                                          (word_part.EscapedLiteral
                                            token: 
                                              (Token
                                                id: Id.Lit_EscapedChar
                                                val: '\\ '
                                                span_id: 3590
                                              )
                                          )
                                        }
                                    )
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:3596)
                                )
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_EqualTilde
                                      left: {(DQ (' ') ($ Id.VSub_DollarName '$long_arg_opt') (' '))}
                                      right: 
                                        {
                                          (word_part.EscapedLiteral
                                            token: 
                                              (Token
                                                id: Id.Lit_EscapedChar
                                                val: '\\ '
                                                span_id: 3618
                                              )
                                          ) ($ Id.VSub_DollarName '$prev') 
                                          (word_part.EscapedLiteral
                                            token: 
                                              (Token
                                                id: Id.Lit_EscapedChar
                                                val: '\\ '
                                                span_id: 3620
                                              )
                                          )
                                        }
                                    )
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:3626)
                                )
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {($ Id.VSub_DollarName '$split')})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:3646)
                                )
                              ]
                            )
                          ]
                          spids: [3568 3570 3658 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(-) (Id.Lit_LBracket '[') (a-zA-Z0-9) (Id.Lit_QMark '?') 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_EqualTilde
                                      left: {(DQ ($ Id.VSub_DollarName '$short_arg_req'))}
                                      right: 
                                        {
                                          (braced_var_sub
                                            token: (Token id:Id.VSub_Name val:prev span_id:3682)
                                            suffix_op: 
                                              (suffix_op.Unary
                                                op_id: Id.VOp1_DPound
                                                arg_word: {(-)}
                                              )
                                          )
                                        }
                                    )
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:3691)
                                )
                              ]
                            )
                          ]
                          spids: [3661 3666 3694 -1]
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$cur'))}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(-) (Id.Lit_LBracket '[') (a-zA-Z0-9) (Id.Lit_ArrayLhsClose ']=') 
                              (Id.Lit_Star '*')
                            }
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3726)
                            )
                          ]
                          spids: [3714 3719 3729 -1]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(__tar_try_mode)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Break val:break span_id:3748)
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$cur'))}
                      arms: [
                        (case_arm
                          pat_list: [{(--) (Id.Lit_Star '*')}]
                          action: [
                            (C {(__gtar_complete_lopts)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3773)
                            )
                          ]
                          spids: [3765 3767 3776 -1]
                        )
                        (case_arm
                          pat_list: [{(-) (Id.Lit_Star '*')}]
                          action: [
                            (C {(__gtar_complete_sopts)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:3791)
                            )
                          ]
                          spids: [3779 3781 3794 -1]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_eq
                              left: {(DQ ($ Id.VSub_DollarName '$cword'))}
                              right: {(1)}
                            )
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Break val:break span_id:3823)
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(__tar_try_list_archive)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Break val:break span_id:3831)
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobNEqual
                                      left: {($ Id.VSub_DollarName '$tar_mode')}
                                      right: {(none)}
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:3850)
                            )
                          ]
                          action: [(C {(_filedir)})]
                          spids: [3839 3852]
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Break val:break span_id:3862)
                    )
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ ($ Id.VSub_DollarName '$_TAR_OPT_DEBUG'))}
                              right: {(1)}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3885)
                    )
                  ]
                  action: [(C {(Id.KW_Set set)} {(Id.Lit_Other '+') (x)}) (C {(unset)} {(PS4)})]
                  spids: [3872 3887]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:3905)
              arg_word: {(0)}
            )
          ]
        )
    )
    (command.ShFunction
      name: __tar_posix_prev_handle
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$prev'))}
              arms: [
                (case_arm
                  pat_list: [{(-f)}]
                  action: [
                    (C {(__tar_file_option)} {(DQ ($ Id.VSub_DollarName '$ext'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:3940)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [3929 3930 3945 -1]
                )
                (case_arm
                  pat_list: [{(-b)}]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:3952)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [3948 3949 -1 3957]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:3961)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: _posix_tar
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(long_opts)} {(short_opts)} {(basic_tar)} {(long_arg_none)} {(long_arg_opt)} 
              {(long_arg_req)} {(short_arg_none)} {(short_arg_opt)} {(short_arg_req)} {(tar_mode)} {(tar_mode_arg)} 
              {(Id.Lit_VarLike 'old_opt_progress=') (0)} {(Id.Lit_VarLike 'old_opt_used=') (1)} 
              {(Id.Lit_VarLike 'old_opt_parsed=') 
                (sh_array_literal left:(Token id:Id.Op_LParen val:'(' span_id:4015))
              }
            )
            (C {(local)} {(Id.Lit_VarLike 'tar_mode=') (none)})
            (C {(local)} {(Id.Lit_VarLike 'tar_mode_arg=')})
            (C {(local)} {(cur)} {(prev)} {(words)} {(cword)} {(split)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(_init_completion)} {(-s)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:4061)
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:basic_tar)
                  op: assign_op.Equal
                  rhs: {(yes)}
                  spids: [4065]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:tar_mode)
                  op: assign_op.Equal
                  rhs: {(none)}
                  spids: [4069]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:short_arg_req)
                  op: assign_op.Equal
                  rhs: {(DQ (fb))}
                  spids: [4082]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:short_arg_none)
                  op: assign_op.Equal
                  rhs: {(DQ (wmv))}
                  spids: [4088]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:short_opts)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$short_arg_req') 
                        ($ Id.VSub_DollarName '$short_arg_none')
                      )
                    }
                  spids: [4094]
                )
              ]
            )
            (C {(__tar_preparse_cmdline)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:words span_id:4106)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
            (C {(local)} {(ext)} {(regex)} {(tar)} {(untar)})
            (C {(__tar_detect_ext)})
            (C {(__tar_adjust_PREV_from_old_option)})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(__tar_posix_prev_handle)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:4139)
                  arg_word: {(0)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(__tar_try_mode)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:4149)
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(__tar_try_list_archive)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:4157)
                )
              ]
            )
            (C {(_filedir)})
          ]
        )
    )
    (command.ShFunction
      name: _tar
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} 
              {(Id.Lit_VarLike 'cmd=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:COMP_WORDS span_id:4182)
                  bracket_op: (bracket_op.ArrayIndex expr:(arith_expr.ArithWord w:{(Id.Lit_Digits 0)}))
                )
              } {(output)} {(line)}
            )
            (command.Simple
              words: [{(read)} {(line)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_TLess val:'<<<' span_id:4197)
                  fd: -1
                  arg_word: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4199)
                          command_list: 
                            (command.CommandList
                              children: [(C {($ Id.VSub_DollarName '$cmd')} {(--version)})]
                            )
                        )
                      )
                    }
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$line'))}
              arms: [
                (case_arm
                  pat_list: [{(Id.Lit_Star '*') (GNU) (Id.Lit_Star '*')}]
                  action: [(C {(_gtar)} {(DQ ($ Id.VSub_At '$@'))})]
                  spids: [4216 4219 4229 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [(C {(_posix_tar)} {(DQ ($ Id.VSub_At '$@'))})]
                  spids: [4232 4233 4243 -1]
                )
              ]
            )
          ]
        )
    )
    (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:COMP_TAR_INTERNAL_PATHS span_id:4260)
                        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:4266)
            )
          ]
          action: [
            (C {(complete)} {(-F)} {(_tar)} {(-o)} {(dirnames)} {(tar)})
            (C {(complete)} {(-F)} {(_gtar)} {(-o)} {(dirnames)} {(gtar)})
            (C {(complete)} {(-F)} {(_posix_tar)} {(-o)} {(dirnames)} {(bsdtar)})
            (C {(complete)} {(-F)} {(_posix_tar)} {(-o)} {(dirnames)} {(star)})
          ]
          spids: [4252 4268]
        )
      ]
      else_action: [
        (C {(complete)} {(-F)} {(_tar)} {(tar)})
        (C {(complete)} {(-F)} {(_gtar)} {(gtar)})
        (C {(complete)} {(-F)} {(_posix_tar)} {(bsdtar)})
        (C {(complete)} {(-F)} {(_posix_tar)} {(star)})
      ]
    )
  ]
)