(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:test_description spids:[12])
          op: Equal
          rhs: {(SQ <'CRLF conversion all combinations'>)}
          spids: [12]
        )
      ]
      spids: [12]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test_have_prereq)} {(EXPENSIVE)})] negated:T)]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:skip_all spids:[34])
                  op: Equal
                  rhs: {(DQ ('EXPENSIVE not set'))}
                  spids: [34]
                )
              ]
              spids: [34]
            )
            (C {(test_done)})
          ]
          spids: [16777215 31]
        )
      ]
      spids: [16777215 42]
    )
    (command.FuncDef
      name: compare_files
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (command.SimpleCommand
                  words: [{(tr)} {(SQ <'\\015\\000'>)} {(QN)}]
                  redirects: [
                    (redir.Redir
                      op: <Redir_Less '<'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Number '$1'))}
                    )
                    (redir.Redir
                      op: <Redir_Great '>'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Number '$1')) (.expect)}
                    )
                  ]
                )
                (command.Pipeline
                  children: [
                    (command.SimpleCommand
                      words: [{(tr)} {(SQ <'\\015\\000'>)} {(QN)}]
                      redirects: [
                        (redir.Redir
                          op: <Redir_Less '<'>
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Number '$2'))}
                        )
                      ]
                    )
                    (command.SimpleCommand
                      words: [{(tr)} {(-d)} {(SQ <Z>)}]
                      redirects: [
                        (redir.Redir
                          op: <Redir_Great '>'>
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Number '$2')) (.actual)}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
                (C {(test_cmp)} {(DQ ($ VSub_Number '$1')) (.expect)} 
                  {(DQ ($ VSub_Number '$2')) (.actual)}
                )
                (C {(rm)} {(DQ ($ VSub_Number '$1')) (.expect)} {(DQ ($ VSub_Number '$2')) (.actual)})
              ]
            )
          ]
          spids: [50]
        )
      spids: [45 49]
    )
    (command.FuncDef
      name: compare_ws_file
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:pfx spids:[145])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [145]
                )
              ]
              spids: [145]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:exp spids:[149])
                  op: Equal
                  rhs: {($ VSub_Number '$2') (.expect)}
                  spids: [149]
                )
              ]
              spids: [149]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:act spids:[154])
                  op: Equal
                  rhs: {($ VSub_Name '$pfx') (.actual.) ($ VSub_Number '$3')}
                  spids: [154]
                )
              ]
              spids: [154]
            )
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (command.SimpleCommand
                  words: [{(tr)} {(SQ <'\\015\\000abcdef0123456789'>)} {(QN00000000000000000)}]
                  redirects: [
                    (redir.Redir
                      op: <Redir_Less '<'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Number '$2'))}
                    )
                    (redir.Redir
                      op: <Redir_Great '>'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$exp'))}
                    )
                  ]
                )
                (command.SimpleCommand
                  words: [{(tr)} {(SQ <'\\015\\000abcdef0123456789'>)} {(QN00000000000000000)}]
                  redirects: [
                    (redir.Redir
                      op: <Redir_Less '<'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Number '$3'))}
                    )
                    (redir.Redir
                      op: <Redir_Great '>'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$act'))}
                    )
                  ]
                )
                (C {(test_cmp)} {(DQ ($ VSub_Name '$exp'))} {(DQ ($ VSub_Name '$act'))})
                (C {(rm)} {(DQ ($ VSub_Name '$exp'))} {(DQ ($ VSub_Name '$act'))})
              ]
            )
          ]
          spids: [142]
        )
      spids: [137 141]
    )
    (command.FuncDef
      name: create_gitattributes
      body: 
        (command.BraceGroup
          children: [
            (command.BraceGroup
              children: [
                (command.WhileUntil
                  keyword: <KW_While while>
                  cond: [(C {(test)} {(DQ ($ VSub_Pound '$#'))} {(KW_Bang '!') (Lit_Other '=')} {(0)})]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Op_DAmp]
                          children: [
                            (command.Case
                              to_match: {(DQ ($ VSub_Number '$1'))}
                              arms: [
                                (case_arm
                                  pat_list: [{(auto)}]
                                  action: [(C {(echo)} {(SQ <'*.txt text=auto'>)})]
                                  spids: [265 266 274 16777215]
                                )
                                (case_arm
                                  pat_list: [{(ident)}]
                                  action: [(C {(echo)} {(SQ <'*.txt ident'>)})]
                                  spids: [277 278 286 16777215]
                                )
                                (case_arm
                                  pat_list: [{(text)}]
                                  action: [(C {(echo)} {(SQ <'*.txt text'>)})]
                                  spids: [289 290 298 16777215]
                                )
                                (case_arm
                                  pat_list: [{(-text)}]
                                  action: [(C {(echo)} {(SQ <'*.txt -text'>)})]
                                  spids: [301 302 310 16777215]
                                )
                                (case_arm
                                  pat_list: [{(crlf)}]
                                  action: [(C {(echo)} {(SQ <'*.txt eol=crlf'>)})]
                                  spids: [313 314 322 16777215]
                                )
                                (case_arm
                                  pat_list: [{(lf)}]
                                  action: [(C {(echo)} {(SQ <'*.txt eol=lf'>)})]
                                  spids: [325 326 334 16777215]
                                )
                                (case_arm
                                  pat_list: [{(DQ )}]
                                  spids: [337 339 341 16777215]
                                )
                                (case_arm
                                  pat_list: [{(Lit_Other '*')}]
                                  action: [
                                    (command.SimpleCommand
                                      words: [
                                        {(echo)}
                                        {(invalid)}
                                        {(attribute) (Lit_Other ':')}
                                        {(DQ ($ VSub_Number '$1'))}
                                      ]
                                      redirects: [
                                        (redir.Redir
                                          op: <Redir_GreatAnd '>&'>
                                          fd: 16777215
                                          arg_word: {(2)}
                                        )
                                      ]
                                    )
                                    (command.ControlFlow
                                      token: <ControlFlow_Exit exit>
                                      arg_word: {(1)}
                                    )
                                  ]
                                  spids: [344 345 368 16777215]
                                )
                              ]
                              spids: [256 262 371]
                            )
                            (C {(shift)})
                          ]
                        )
                      ]
                      spids: [253 379]
                    )
                )
              ]
              redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(.gitattributes)})]
              spids: [236]
            )
          ]
          spids: [233]
        )
      spids: [228 232]
    )
    (command.FuncDef
      name: create_NNO_files
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: crlf
              iter_words: [{(false)} {(true)} {(input)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ForEach
                      iter_name: attr
                      iter_words: [{(DQ )} {(auto)} {(text)} {(-text)}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (command.ForEach
                              iter_name: aeol
                              iter_words: [{(DQ )} {(lf)} {(crlf)}]
                              do_arg_iter: F
                              body: 
                                (command.DoGroup
                                  children: [
                                    (command.Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (lhs_expr.LhsName name:pfx spids:[450])
                                          op: Equal
                                          rhs: 
                                            {(NNO_attr_) (${ VSub_Name attr) (_aeol_) 
                                              (${ VSub_Name aeol) (_) (${ VSub_Name crlf)
                                            }
                                          spids: [450]
                                        )
                                      ]
                                      spids: [450]
                                    )
                                    (command.AndOr
                                      ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
                                      children: [
                                        (C {(cp)} {(CRLF_mix_LF)} {(${ VSub_Name pfx) (_LF.txt)})
                                        (C {(cp)} {(CRLF_mix_LF)} {(${ VSub_Name pfx) (_CRLF.txt)})
                                        (C {(cp)} {(CRLF_mix_LF)} 
                                          {(${ VSub_Name pfx) (_CRLF_mix_LF.txt)}
                                        )
                                        (C {(cp)} {(CRLF_mix_LF)} {(${ VSub_Name pfx) (_LF_mix_CR.txt)})
                                        (C {(cp)} {(CRLF_mix_LF)} {(${ VSub_Name pfx) (_CRLF_nul.txt)})
                                      ]
                                    )
                                  ]
                                  spids: [447 523]
                                )
                              spids: [438 16777215]
                            )
                          ]
                          spids: [430 526]
                        )
                      spids: [419 16777215]
                    )
                  ]
                  spids: [411 529]
                )
              spids: [403 16777215]
            )
          ]
          spids: [395]
        )
      spids: [390 394]
    )
    (command.FuncDef
      name: check_warning
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(LF_CRLF)}]
                  action: [
                    (command.SimpleCommand
                      words: [{(echo)} {(DQ ('warning: LF will be replaced by CRLF'))}]
                      redirects: [
                        (redir.Redir
                          op: <Redir_Great '>'>
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Number '$2')) (.expect)}
                        )
                      ]
                    )
                  ]
                  spids: [551 552 566 16777215]
                )
                (case_arm
                  pat_list: [{(CRLF_LF)}]
                  action: [
                    (command.SimpleCommand
                      words: [{(echo)} {(DQ ('warning: CRLF will be replaced by LF'))}]
                      redirects: [
                        (redir.Redir
                          op: <Redir_Great '>'>
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Number '$2')) (.expect)}
                        )
                      ]
                    )
                  ]
                  spids: [569 570 584 16777215]
                )
                (case_arm
                  pat_list: [{(SQ )}]
                  action: [
                    (command.SimpleCommand
                      redirects: [
                        (redir.Redir
                          op: <Redir_Great '>'>
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Number '$2')) (.expect)}
                        )
                      ]
                    )
                  ]
                  spids: [587 589 597 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (command.Sentence
                      child: 
                        (command.SimpleCommand
                          words: [
                            {(echo)}
                            {(DQ ('Illegal 1')) (Lit_Other ':')}
                            {(DQ ($ VSub_Number '$1'))}
                          ]
                          redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (command.ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {(false)}
                    )
                  ]
                  spids: [600 601 623 16777215]
                )
              ]
              spids: [542 548 626]
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(DQ ('will be replaced by'))} {(DQ ($ VSub_Number '$2'))})
                (C {(sed)} {(-e)} 
                  {
                    (DQ (s/) (Lit_Other '\\') ('(.*') (Lit_Other '\\') (') in [^ ]*') (Lit_Other '$') (/) 
                      (Lit_Other '\\') (1/)
                    )
                  }
                )
                (command.SimpleCommand
                  words: [{(uniq)}]
                  redirects: [
                    (redir.Redir
                      op: <Redir_Great '>'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Number '$2')) (.actual)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(test_cmp)} {(DQ ($ VSub_Number '$2')) (.expect)} {(DQ ($ VSub_Number '$2')) (.actual)})
          ]
          spids: [539]
        )
      spids: [534 538]
    )
    (command.FuncDef
      name: commit_check_warn
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:crlf spids:[691])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [691]
                )
              ]
              spids: [691]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:attr spids:[695])
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [695]
                )
              ]
              spids: [695]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:lfname spids:[699])
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [699]
                )
              ]
              spids: [699]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:crlfname spids:[703])
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [703]
                )
              ]
              spids: [703]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:lfmixcrlf spids:[707])
                  op: Equal
                  rhs: {($ VSub_Number '$5')}
                  spids: [707]
                )
              ]
              spids: [707]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:lfmixcr spids:[711])
                  op: Equal
                  rhs: {($ VSub_Number '$6')}
                  spids: [711]
                )
              ]
              spids: [711]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:crlfnul spids:[715])
                  op: Equal
                  rhs: {($ VSub_Number '$7')}
                  spids: [715]
                )
              ]
              spids: [715]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:pfx spids:[719])
                  op: Equal
                  rhs: {(crlf_) (${ VSub_Name crlf) (_attr_) (${ VSub_Name attr)}
                  spids: [719]
                )
              ]
              spids: [719]
            )
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(create_gitattributes)} {(DQ ($ VSub_Name '$attr'))})
                (command.ForEach
                  iter_name: f
                  iter_words: [{(LF)} {(CRLF)} {(LF_mix_CR)} {(CRLF_mix_LF)} {(LF_nul)} {(CRLF_nul)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Op_DAmp Op_DAmp]
                          children: [
                            (command.Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (lhs_expr.LhsName name:fname spids:[761])
                                  op: Equal
                                  rhs: {(${ VSub_Name pfx) (_) ($ VSub_Name '$f') (.txt)}
                                  spids: [761]
                                )
                              ]
                              spids: [761]
                            )
                            (C {(cp)} {($ VSub_Name '$f')} {($ VSub_Name '$fname')})
                            (command.SimpleCommand
                              words: [
                                {(git)}
                                {(-c)}
                                {(core.autocrlf) (Lit_Other '=') ($ VSub_Name '$crlf')}
                                {(add)}
                                {($ VSub_Name '$fname')}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: <Redir_Great '2>'>
                                  fd: 2
                                  arg_word: {(DQ (${ VSub_Name pfx) (_) ($ VSub_Name '$f') (.err))}
                                )
                              ]
                            )
                          ]
                        )
                      ]
                      spids: [758 804]
                    )
                  spids: [744 16777215]
                )
                (C {(git)} {(commit)} {(-m)} {(DQ ('core.autocrlf ') ($ VSub_Name '$crlf'))})
                (C {(check_warning)} {(DQ ($ VSub_Name '$lfname'))} {(${ VSub_Name pfx) (_LF.err)})
                (C {(check_warning)} {(DQ ($ VSub_Name '$crlfname'))} {(${ VSub_Name pfx) (_CRLF.err)})
                (C {(check_warning)} {(DQ ($ VSub_Name '$lfmixcrlf'))} 
                  {(${ VSub_Name pfx) (_CRLF_mix_LF.err)}
                )
                (C {(check_warning)} {(DQ ($ VSub_Name '$lfmixcr'))} 
                  {(${ VSub_Name pfx) (_LF_mix_CR.err)}
                )
                (C {(check_warning)} {(DQ ($ VSub_Name '$crlfnul'))} 
                  {(${ VSub_Name pfx) (_CRLF_nul.err)}
                )
              ]
            )
          ]
          spids: [688]
        )
      spids: [683 687]
    )
    (command.FuncDef
      name: commit_chk_wrnNNO
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:attr spids:[901])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [901]
                    )
                  ]
                  spids: [901]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:aeol spids:[909])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [909]
                    )
                  ]
                  spids: [909]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlf spids:[917])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [917]
                    )
                  ]
                  spids: [917]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfwarn spids:[925])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [925]
                    )
                  ]
                  spids: [925]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlfwarn spids:[933])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [933]
                    )
                  ]
                  spids: [933]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfmixcrlf spids:[941])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [941]
                    )
                  ]
                  spids: [941]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfmixcr spids:[949])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [949]
                    )
                  ]
                  spids: [949]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlfnul spids:[957])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [957]
                    )
                  ]
                  spids: [957]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:pfx spids:[965])
                  op: Equal
                  rhs: 
                    {(NNO_attr_) (${ VSub_Name attr) (_aeol_) (${ VSub_Name aeol) (_) 
                      (${ VSub_Name crlf)
                    }
                  spids: [965]
                )
              ]
              spids: [965]
            )
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (C {(create_gitattributes)} {(DQ ($ VSub_Name '$attr'))} {($ VSub_Name '$aeol')})
                (command.ForEach
                  iter_name: f
                  iter_words: [{(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Op_DAmp Op_DAmp Op_DAmp]
                          children: [
                            (command.Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (lhs_expr.LhsName name:fname spids:[1015])
                                  op: Equal
                                  rhs: {(${ VSub_Name pfx) (_) ($ VSub_Name '$f') (.txt)}
                                  spids: [1015]
                                )
                              ]
                              spids: [1015]
                            )
                            (C {(cp)} {($ VSub_Name '$f')} {($ VSub_Name '$fname')})
                            (command.SimpleCommand
                              words: [{(printf)} {(Z)}]
                              redirects: [
                                (redir.Redir
                                  op: <Redir_DGreat '>>'>
                                  fd: 16777215
                                  arg_word: {(DQ ($ VSub_Name '$fname'))}
                                )
                              ]
                            )
                            (command.SimpleCommand
                              words: [
                                {(git)}
                                {(-c)}
                                {(core.autocrlf) (Lit_Other '=') ($ VSub_Name '$crlf')}
                                {(add)}
                                {($ VSub_Name '$fname')}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: <Redir_Great '2>'>
                                  fd: 2
                                  arg_word: {(DQ (${ VSub_Name pfx) (_) ($ VSub_Name '$f') (.err))}
                                )
                              ]
                            )
                          ]
                        )
                      ]
                      spids: [1012 1070]
                    )
                  spids: [1000 16777215]
                )
              ]
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files crlf=') ($ VSub_Name '$crlf') (' attr=') ($ VSub_Name '$attr') 
                  (' LF')
                )
              } {(SQ <'\n'> <'\t\tcheck_warning "$lfwarn" ${pfx}_LF.err\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ VSub_Name '$attr') (' aeol=') ($ VSub_Name '$aeol') 
                  (' crlf=') ($ VSub_Name '$crlf') (' CRLF')
                )
              } {(SQ <'\n'> <'\t\tcheck_warning "$crlfwarn" ${pfx}_CRLF.err\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ VSub_Name '$attr') (' aeol=') ($ VSub_Name '$aeol') 
                  (' crlf=') ($ VSub_Name '$crlf') (' CRLF_mix_LF')
                )
              } {(SQ <'\n'> <'\t\tcheck_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ VSub_Name '$attr') (' aeol=') ($ VSub_Name '$aeol') 
                  (' crlf=') ($ VSub_Name '$crlf') (' LF_mix_cr')
                )
              } {(SQ <'\n'> <'\t\tcheck_warning "$lfmixcr" ${pfx}_LF_mix_CR.err\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ VSub_Name '$attr') (' aeol=') ($ VSub_Name '$aeol') 
                  (' crlf=') ($ VSub_Name '$crlf') (' CRLF_nul')
                )
              } {(SQ <'\n'> <'\t\tcheck_warning "$crlfnul" ${pfx}_CRLF_nul.err\n'> <'\t'>)}
            )
          ]
          spids: [898]
        )
      spids: [893 897]
    )
    (command.FuncDef
      name: stats_ascii
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(LF)}]
                  action: [(C {(echo)} {(lf)})]
                  spids: [1189 1190 1198 16777215]
                )
                (case_arm
                  pat_list: [{(CRLF)}]
                  action: [(C {(echo)} {(crlf)})]
                  spids: [1201 1202 1210 16777215]
                )
                (case_arm
                  pat_list: [{(CRLF_mix_LF)}]
                  action: [(C {(echo)} {(mixed)})]
                  spids: [1213 1214 1222 16777215]
                )
                (case_arm
                  pat_list: [{(LF_mix_CR)} {(CRLF_nul)} {(LF_nul)} {(CRLF_mix_CR)}]
                  action: [(C {(echo)} {(DQ (-text))})]
                  spids: [1225 1232 1242 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(C {(echo)} {(error_invalid)} {($ VSub_Number '$1')})]
                  spids: [1245 1246 1256 16777215]
                )
              ]
              spids: [1180 1186 1259]
            )
          ]
          spids: [1177]
        )
      spids: [1172 1176]
    )
    (command.FuncDef
      name: attr_ascii
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {($ VSub_Number '$1') (Lit_Comma ',') ($ VSub_Number '$2')}
              arms: [
                (case_arm
                  pat_list: [{(-text) (Lit_Comma ',') (Lit_Other '*')}]
                  action: [(C {(echo)} {(DQ (-text))})]
                  spids: [1292 1295 1303 16777215]
                )
                (case_arm
                  pat_list: [{(text) (Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ (text))})]
                  spids: [1306 1308 1316 16777215]
                )
                (case_arm
                  pat_list: [{(text) (Lit_Comma ',') (lf)}]
                  action: [(C {(echo)} {(DQ ('text eol=lf'))})]
                  spids: [1319 1322 1330 16777215]
                )
                (case_arm
                  pat_list: [{(text) (Lit_Comma ',') (crlf)}]
                  action: [(C {(echo)} {(DQ ('text eol=crlf'))})]
                  spids: [1333 1336 1344 16777215]
                )
                (case_arm
                  pat_list: [{(auto) (Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ ('text=auto'))})]
                  spids: [1347 1349 1357 16777215]
                )
                (case_arm
                  pat_list: [{(auto) (Lit_Comma ',') (lf)}]
                  action: [(C {(echo)} {(DQ ('text=auto eol=lf'))})]
                  spids: [1360 1363 1371 16777215]
                )
                (case_arm
                  pat_list: [{(auto) (Lit_Comma ',') (crlf)}]
                  action: [(C {(echo)} {(DQ ('text=auto eol=crlf'))})]
                  spids: [1374 1377 1385 16777215]
                )
                (case_arm
                  pat_list: [{(lf) (Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ ('text eol=lf'))})]
                  spids: [1388 1390 1398 16777215]
                )
                (case_arm
                  pat_list: [{(crlf) (Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ ('text eol=crlf'))})]
                  spids: [1401 1403 1411 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ )})]
                  spids: [1414 1415 1422 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(echo)} {(invalid_attr)} {(DQ ($ VSub_Number '$1') (',') ($ VSub_Number '$2'))})
                  ]
                  spids: [1425 1426 1438 16777215]
                )
              ]
              spids: [1283 1289 1441]
            )
          ]
          spids: [1280]
        )
      spids: [1275 1279]
    )
    (command.FuncDef
      name: check_files_in_repo
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:crlf spids:[1454])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1454]
                )
              ]
              spids: [1454]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:attr spids:[1458])
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [1458]
                )
              ]
              spids: [1458]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:lfname spids:[1462])
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [1462]
                )
              ]
              spids: [1462]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:crlfname spids:[1466])
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [1466]
                )
              ]
              spids: [1466]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:lfmixcrlf spids:[1470])
                  op: Equal
                  rhs: {($ VSub_Number '$5')}
                  spids: [1470]
                )
              ]
              spids: [1470]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:lfmixcr spids:[1474])
                  op: Equal
                  rhs: {($ VSub_Number '$6')}
                  spids: [1474]
                )
              ]
              spids: [1474]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:crlfnul spids:[1478])
                  op: Equal
                  rhs: {($ VSub_Number '$7')}
                  spids: [1478]
                )
              ]
              spids: [1478]
            )
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:pfx spids:[1482])
                      op: Equal
                      rhs: {(crlf_) (${ VSub_Name crlf) (_attr_) (${ VSub_Name attr) (_)}
                      spids: [1482]
                    )
                  ]
                  spids: [1482]
                )
                (C {(compare_files)} {($ VSub_Name '$lfname')} {(${ VSub_Name pfx) (LF.txt)})
                (C {(compare_files)} {($ VSub_Name '$crlfname')} {(${ VSub_Name pfx) (CRLF.txt)})
                (C {(compare_files)} {($ VSub_Name '$lfmixcrlf')} {(${ VSub_Name pfx) (CRLF_mix_LF.txt)})
                (C {(compare_files)} {($ VSub_Name '$lfmixcr')} {(${ VSub_Name pfx) (LF_mix_CR.txt)})
                (C {(compare_files)} {($ VSub_Name '$crlfnul')} {(${ VSub_Name pfx) (CRLF_nul.txt)})
              ]
            )
          ]
          spids: [1451]
        )
      spids: [1446 1450]
    )
    (command.FuncDef
      name: check_in_repo_NNO
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:attr spids:[1564])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1564]
                    )
                  ]
                  spids: [1564]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:aeol spids:[1572])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1572]
                    )
                  ]
                  spids: [1572]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlf spids:[1580])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1580]
                    )
                  ]
                  spids: [1580]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfname spids:[1588])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1588]
                    )
                  ]
                  spids: [1588]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlfname spids:[1596])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1596]
                    )
                  ]
                  spids: [1596]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfmixcrlf spids:[1604])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1604]
                    )
                  ]
                  spids: [1604]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfmixcr spids:[1612])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1612]
                    )
                  ]
                  spids: [1612]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlfnul spids:[1620])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1620]
                    )
                  ]
                  spids: [1620]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:pfx spids:[1628])
                  op: Equal
                  rhs: 
                    {(NNO_attr_) (${ VSub_Name attr) (_aeol_) (${ VSub_Name aeol) (_) 
                      (${ VSub_Name crlf)
                    }
                  spids: [1628]
                )
              ]
              spids: [1628]
            )
            (C {(test_expect_success)} 
              {(DQ ('compare_files ') ($ VSub_Name '$lfname') (' ') (${ VSub_Name pfx) (_LF.txt))} {(SQ <'\n'> <'\t\tcompare_files $lfname ${pfx}_LF.txt\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ VSub_Name '$crlfname') (' ') (${ VSub_Name pfx) (_CRLF.txt))
              } {(SQ <'\n'> <'\t\tcompare_files $crlfname ${pfx}_CRLF.txt\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ VSub_Name '$lfmixcrlf') (' ') (${ VSub_Name pfx) 
                  (_CRLF_mix_LF.txt)
                )
              } {(SQ <'\n'> <'\t\tcompare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ VSub_Name '$lfmixcr') (' ') (${ VSub_Name pfx) (_LF_mix_CR.txt))
              } {(SQ <'\n'> <'\t\tcompare_files $lfmixcr ${pfx}_LF_mix_CR.txt\n'> <'\t'>)}
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ VSub_Name '$crlfnul') (' ') (${ VSub_Name pfx) (_CRLF_nul.txt))
              } {(SQ <'\n'> <'\t\tcompare_files $crlfnul ${pfx}_CRLF_nul.txt\n'> <'\t'>)}
            )
          ]
          spids: [1561]
        )
      spids: [1556 1560]
    )
    (command.FuncDef
      name: checkout_files
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:attr spids:[1748])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1748]
                    )
                  ]
                  spids: [1748]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:ident spids:[1756])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1756]
                    )
                  ]
                  spids: [1756]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:aeol spids:[1763])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1763]
                    )
                  ]
                  spids: [1763]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlf spids:[1771])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1771]
                    )
                  ]
                  spids: [1771]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:ceol spids:[1779])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1779]
                    )
                  ]
                  spids: [1779]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfname spids:[1787])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1787]
                    )
                  ]
                  spids: [1787]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlfname spids:[1795])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1795]
                    )
                  ]
                  spids: [1795]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfmixcrlf spids:[1803])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1803]
                    )
                  ]
                  spids: [1803]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:lfmixcr spids:[1811])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1811]
                    )
                  ]
                  spids: [1811]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:crlfnul spids:[1819])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1819]
                    )
                  ]
                  spids: [1819]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(create_gitattributes)} {(DQ ($ VSub_Name '$attr'))} {($ VSub_Name '$ident')} 
                  {($ VSub_Name '$aeol')}
                )
                (C {(git)} {(config)} {(core.autocrlf)} {($ VSub_Name '$crlf')})
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:pfx spids:[1851])
                      op: Equal
                      rhs: 
                        {(eol_) (${ VSub_Name ceol) (_crlf_) (${ VSub_Name crlf) (_attr_) 
                          (${ VSub_Name attr) (_)
                        }
                      spids: [1851]
                    )
                  ]
                  spids: [1851]
                )
                (command.ForEach
                  iter_name: f
                  iter_words: [{(LF)} {(CRLF)} {(LF_mix_CR)} {(CRLF_mix_LF)} {(LF_nul)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Op_DAmp]
                          children: [
                            (C {(rm)} {(crlf_false_attr__) ($ VSub_Name '$f') (.txt)})
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$ceol'))})
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(git)} {(checkout)} 
                                      {(crlf_false_attr__) ($ VSub_Name '$f') (.txt)}
                                    )
                                  ]
                                  spids: [16777215 1909]
                                )
                              ]
                              else_action: [
                                (C {(git)} {(-c)} {(core.eol) (Lit_Other '=') ($ VSub_Name '$ceol')} 
                                  {(checkout)} {(crlf_false_attr__) ($ VSub_Name '$f') (.txt)}
                                )
                              ]
                              spids: [1921 1939]
                            )
                          ]
                        )
                      ]
                      spids: [1886 1942]
                    )
                  spids: [1874 16777215]
                )
              ]
            )
            (C {(test_expect_success)} 
              {
                (DQ ('ls-files --eol attr=') ($ VSub_Name '$attr') (' ') ($ VSub_Name '$ident') 
                  (' aeol=') ($ VSub_Name '$aeol') (' core.autocrlf=') ($ VSub_Name '$crlf') (' core.eol=') ($ VSub_Name '$ceol')
                )
              } 
              {
                (SQ <'\n'> <'\t\ttest_when_finished "rm expect actual" &&\n'> 
                  <'\t\tsort <<-EOF >expect &&\n'> <'\t\ti/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt\n'> 
                  <
'\t\ti/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt\n'
                  > <'\t\ti/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt\n'> 
                  <
'\t\ti/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt\n'
                  > 
                  <
'\t\ti/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt\n'
                  > 
                  <
'\t\ti/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt\n'
                  > <'\t\tEOF\n'> <'\t\tgit ls-files --eol crlf_false_attr__* |\n'> 
                  <'\t\tsed -e "s/\t/ /g" -e "s/  */ /g" |\n'> <'\t\tsort >actual &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ VSub_Name '$attr') (' ') ($ VSub_Name '$ident') (' aeol=') 
                  ($ VSub_Name '$aeol') (' core.autocrlf=') ($ VSub_Name '$crlf') (' core.eol=') ($ VSub_Name '$ceol') (' file=LF')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ VSub_Name '$pfx') (' ') ($ VSub_Name '$lfname') 
                  ('    crlf_false_attr__LF.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ VSub_Name '$attr') (' ') ($ VSub_Name '$ident') (' aeol=') 
                  ($ VSub_Name '$aeol') (' core.autocrlf=') ($ VSub_Name '$crlf') (' core.eol=') ($ VSub_Name '$ceol') (' file=CRLF')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ VSub_Name '$pfx') (' ') ($ VSub_Name '$crlfname') 
                  ('  crlf_false_attr__CRLF.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ VSub_Name '$attr') (' ') ($ VSub_Name '$ident') (' aeol=') 
                  ($ VSub_Name '$aeol') (' core.autocrlf=') ($ VSub_Name '$crlf') (' core.eol=') ($ VSub_Name '$ceol') (' file=CRLF_mix_LF')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ VSub_Name '$pfx') (' ') ($ VSub_Name '$lfmixcrlf') 
                  (' crlf_false_attr__CRLF_mix_LF.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ VSub_Name '$attr') (' ') ($ VSub_Name '$ident') (' aeol=') 
                  ($ VSub_Name '$aeol') (' core.autocrlf=') ($ VSub_Name '$crlf') (' core.eol=') ($ VSub_Name '$ceol') (' file=LF_mix_CR')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ VSub_Name '$pfx') (' ') ($ VSub_Name '$lfmixcr') 
                  ('   crlf_false_attr__LF_mix_CR.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ VSub_Name '$attr') (' ') ($ VSub_Name '$ident') (' aeol=') 
                  ($ VSub_Name '$aeol') (' core.autocrlf=') ($ VSub_Name '$crlf') (' core.eol=') ($ VSub_Name '$ceol') (' file=LF_nul')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ VSub_Name '$pfx') (' ') ($ VSub_Name '$crlfnul') 
                  ('   crlf_false_attr__LF_nul.txt\n') ('\t')
                )
              }
            )
          ]
          spids: [1745]
        )
      spids: [1740 1744]
    )
    (C {(test_expect_success)} {(SQ <'ls-files --eol -o Text/Binary'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm expect actual TeBi_*" &&\n'> 
          <'\tSTRT=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA &&\n'> <'\tSTR=$STRT$STRT$STRT$STRT &&\n'> <'\tprintf "${STR}BBB\\001" >TeBi_127_S &&\n'> 
          <'\tprintf "${STR}BBBB\\001">TeBi_128_S &&\n'> <'\tprintf "${STR}BBB\\032" >TeBi_127_E &&\n'> <'\tprintf "\\032${STR}BBB" >TeBi_E_127 &&\n'> 
          <'\tprintf "${STR}BBBB\\000">TeBi_128_N &&\n'> <'\tprintf "${STR}BBB\\012">TeBi_128_L &&\n'> <'\tprintf "${STR}BBB\\015">TeBi_127_C &&\n'> 
          <'\tprintf "${STR}BB\\015\\012" >TeBi_126_CL &&\n'> <'\tprintf "${STR}BB\\015\\012\\015" >TeBi_126_CLC &&\n'> <'\tsort <<-\\EOF >expect &&\n'> 
          <'\ti/ w/-text TeBi_127_S\n'> <'\ti/ w/none TeBi_128_S\n'> <'\ti/ w/none TeBi_127_E\n'> <'\ti/ w/-text TeBi_E_127\n'> 
          <'\ti/ w/-text TeBi_128_N\n'> <'\ti/ w/lf TeBi_128_L\n'> <'\ti/ w/-text TeBi_127_C\n'> <'\ti/ w/crlf TeBi_126_CL\n'> 
          <'\ti/ w/-text TeBi_126_CLC\n'> <'\tEOF\n'> <'\tgit ls-files --eol -o |\n'> <'\tsed -n -e "/TeBi_/{s!attr/[\t]*!!g\n'> <'\ts!\t! !g\n'> 
          <'\ts!  *! !g\n'> <'\tp\n'> <'\t}" | sort >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup master'>)} 
      {
        (SQ <'\n'> <'\techo >.gitattributes &&\n'> <'\tgit checkout -b master &&\n'> 
          <'\tgit add .gitattributes &&\n'> <'\tgit commit -m "add .gitattributes" "" &&\n'> 
          <
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONE\\nLINETWO\\nLINETHREE"     >LF &&\n'
          > 
          <
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\r\\nLINEONE\\r\\nLINETWO\\r\\nLINETHREE" >CRLF &&\n'
          > 
          <
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONE\\r\\nLINETWO\\nLINETHREE"   >CRLF_mix_LF &&\n'
          > 
          <
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONE\\nLINETWO\\rLINETHREE"     >LF_mix_CR &&\n'
          > 
          <
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\r\\nLINEONE\\r\\nLINETWO\\rLINETHREE"   >CRLF_mix_CR &&\n'
          > 
          <
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\r\\nLINEONEQ\\r\\nLINETWO\\r\\nLINETHREE" | q_to_nul >CRLF_nul &&\n'
          > 
          <
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONEQ\\nLINETWO\\nLINETHREE" | q_to_nul >LF_nul &&\n'
          > <'\tcreate_NNO_files CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF &&\n'> 
          <'\tgit -c core.autocrlf=false add NNO_*.txt &&\n'> <'\tgit commit -m "mixed line endings" &&\n'> <'\ttest_tick\n'>
        )
      }
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:warn_LF_CRLF spids:[2192])
          op: Equal
          rhs: {(DQ ('LF will be replaced by CRLF'))}
          spids: [2192]
        )
      ]
      spids: [2192]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:warn_CRLF_LF spids:[2197])
          op: Equal
          rhs: {(DQ ('CRLF will be replaced by LF'))}
          spids: [2197]
        )
      ]
      spids: [2197]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(NATIVE_CRLF)})]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:WILC spids:[2221])
                  op: Equal
                  rhs: {(LF_CRLF)}
                  spids: [2221]
                )
              ]
              spids: [2221]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:WICL spids:[2225])
                  op: Equal
                  rhs: (word.EmptyWord)
                  spids: [2225]
                )
              ]
              spids: [2225]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:WAMIX spids:[2228])
                  op: Equal
                  rhs: {(LF_CRLF)}
                  spids: [2228]
                )
              ]
              spids: [2228]
            )
          ]
          spids: [16777215 2218]
        )
      ]
      else_action: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:WILC spids:[2234])
              op: Equal
              rhs: (word.EmptyWord)
              spids: [2234]
            )
          ]
          spids: [2234]
        )
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:WICL spids:[2237])
              op: Equal
              rhs: {(CRLF_LF)}
              spids: [2237]
            )
          ]
          spids: [2237]
        )
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:WAMIX spids:[2241])
              op: Equal
              rhs: {(CRLF_LF)}
              spids: [2241]
            )
          ]
          spids: [2241]
        )
      ]
      spids: [2231 2244]
    )
    (C {(test_expect_success)} {(SQ <'commit files empty attr'>)} 
      {
        (SQ <'\n'> 
          <'\tcommit_check_warn false ""     ""        ""        ""        ""        "" &&\n'> <'\tcommit_check_warn true  ""     "LF_CRLF" ""        "LF_CRLF" ""        "" &&\n'> 
          <'\tcommit_check_warn input ""     ""        "CRLF_LF" "CRLF_LF" ""        ""\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit files attr=auto'>)} 
      {
        (SQ <'\n'> 
          <'\tcommit_check_warn false "auto" "$WILC"   "$WICL"   "$WAMIX"  ""        "" &&\n'> <'\tcommit_check_warn true  "auto" "LF_CRLF" ""        "LF_CRLF" ""        "" &&\n'> 
          <'\tcommit_check_warn input "auto" ""        "CRLF_LF" "CRLF_LF" ""        ""\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit files attr=text'>)} 
      {
        (SQ <'\n'> 
          <
'\tcommit_check_warn false "text" "$WILC"   "$WICL"   "$WAMIX"  "$WILC"   "$WICL"   &&\n'
          > <'\tcommit_check_warn true  "text" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""        &&\n'> 
          <'\tcommit_check_warn input "text" ""        "CRLF_LF" "CRLF_LF" ""        "CRLF_LF"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit files attr=-text'>)} 
      {
        (SQ <'\n'> 
          <'\tcommit_check_warn false "-text" ""       ""        ""        ""        "" &&\n'> <'\tcommit_check_warn true  "-text" ""       ""        ""        ""        "" &&\n'> 
          <'\tcommit_check_warn input "-text" ""       ""        ""        ""        ""\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit files attr=lf'>)} 
      {
        (SQ <'\n'> 
          <
'\tcommit_check_warn false "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF" &&\n'
          > <'\tcommit_check_warn true  "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF" &&\n'> 
          <'\tcommit_check_warn input "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit files attr=crlf'>)} 
      {
        (SQ <'\n'> 
          <'\tcommit_check_warn false "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&\n'> <'\tcommit_check_warn true  "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&\n'> 
          <'\tcommit_check_warn input "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""\n'>
        )
      }
    )
    (C {(commit_chk_wrnNNO)} {(DQ )} {(DQ )} {(false)} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ )} {(DQ )} {(true)} {(LF_CRLF)} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ )} {(DQ )} {(input)} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (auto))} {(DQ )} {(false)} {(DQ ($ VSub_Name '$WILC'))} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (auto))} {(DQ )} {(true)} {(LF_CRLF)} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (auto))} {(DQ )} {(input)} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (command.ForEach
      iter_name: crlf
      iter_words: [{(true)} {(false)} {(input)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(commit_chk_wrnNNO)} {(-text)} {(DQ )} {($ VSub_Name '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(-text)} {(lf)} {($ VSub_Name '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(-text)} {(crlf)} {($ VSub_Name '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(DQ )} {(lf)} {($ VSub_Name '$crlf')} {(DQ )} {(CRLF_LF)} {(CRLF_LF)} {(DQ )} 
              {(CRLF_LF)}
            )
            (C {(commit_chk_wrnNNO)} {(DQ )} {(crlf)} {($ VSub_Name '$crlf')} {(LF_CRLF)} {(DQ )} 
              {(LF_CRLF)} {(LF_CRLF)} {(DQ )}
            )
            (C {(commit_chk_wrnNNO)} {(auto)} {(lf)} {($ VSub_Name '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(auto)} {(crlf)} {($ VSub_Name '$crlf')} {(LF_CRLF)} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(text)} {(lf)} {($ VSub_Name '$crlf')} {(DQ )} {(CRLF_LF)} {(CRLF_LF)} {(DQ )} 
              {(CRLF_LF)}
            )
            (C {(commit_chk_wrnNNO)} {(text)} {(crlf)} {($ VSub_Name '$crlf')} {(LF_CRLF)} {(DQ )} 
              {(LF_CRLF)} {(LF_CRLF)} {(DQ )}
            )
          ]
          spids: [2502 2710]
        )
      spids: [2495 16777215]
    )
    (C {(commit_chk_wrnNNO)} {(DQ (text))} {(DQ )} {(false)} {(DQ ($ VSub_Name '$WILC'))} 
      {(DQ ($ VSub_Name '$WICL'))} {(DQ ($ VSub_Name '$WAMIX'))} {(DQ ($ VSub_Name '$WILC'))} {(DQ ($ VSub_Name '$WICL'))}
    )
    (C {(commit_chk_wrnNNO)} {(DQ (text))} {(DQ )} {(true)} {(LF_CRLF)} {(DQ )} {(LF_CRLF)} {(LF_CRLF)} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (text))} {(DQ )} {(input)} {(DQ )} {(CRLF_LF)} {(CRLF_LF)} {(DQ )} 
      {(CRLF_LF)}
    )
    (C {(test_expect_success)} {(SQ <'commit NNO and cleanup'>)} 
      {
        (SQ <'\n'> <'\tgit commit -m "commit files on top of NNO" &&\n'> <'\trm -f *.txt &&\n'> 
          <'\tgit -c core.autocrlf=false reset --hard\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit empty gitattribues'>)} 
      {
        (SQ <'\n'> <'\tcheck_files_in_repo false ""      LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&\n'> 
          <'\tcheck_files_in_repo true  ""      LF LF   LF          LF_mix_CR CRLF_nul &&\n'> <'\tcheck_files_in_repo input ""      LF LF   LF          LF_mix_CR CRLF_nul\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit text=auto'>)} 
      {
        (SQ <'\n'> <'\tcheck_files_in_repo false "auto"  LF LF   LF          LF_mix_CR CRLF_nul &&\n'> 
          <'\tcheck_files_in_repo true  "auto"  LF LF   LF          LF_mix_CR CRLF_nul &&\n'> <'\tcheck_files_in_repo input "auto"  LF LF   LF          LF_mix_CR CRLF_nul\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit text'>)} 
      {
        (SQ <'\n'> <'\tcheck_files_in_repo false "text"  LF LF   LF          LF_mix_CR LF_nul &&\n'> 
          <'\tcheck_files_in_repo true  "text"  LF LF   LF          LF_mix_CR LF_nul &&\n'> <'\tcheck_files_in_repo input "text"  LF LF   LF          LF_mix_CR LF_nul\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit -text'>)} 
      {
        (SQ <'\n'> <'\tcheck_files_in_repo false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&\n'> 
          <'\tcheck_files_in_repo true  "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&\n'> <'\tcheck_files_in_repo input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul\n'>
        )
      }
    )
    (command.ForEach
      iter_name: crlf
      iter_words: [{(true)} {(false)} {(input)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(check_in_repo_NNO)} {(DQ )} {(DQ )} {($ VSub_Name '$crlf')} {(LF)} {(CRLF)} {(CRLF_mix_LF)} 
              {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(-text)} {(DQ )} {($ VSub_Name '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(-text)} {(lf)} {($ VSub_Name '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(-text)} {(crlf)} {($ VSub_Name '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(auto)} {(DQ )} {($ VSub_Name '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(auto)} {(lf)} {($ VSub_Name '$crlf')} {(LF)} {(CRLF)} {(CRLF_mix_LF)} 
              {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(auto)} {(crlf)} {($ VSub_Name '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(text)} {(DQ )} {($ VSub_Name '$crlf')} {(LF)} {(LF)} {(LF)} 
              {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(check_in_repo_NNO)} {(text)} {(lf)} {($ VSub_Name '$crlf')} {(LF)} {(LF)} {(LF)} 
              {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(check_in_repo_NNO)} {(text)} {(crlf)} {($ VSub_Name '$crlf')} {(LF)} {(LF)} {(LF)} 
              {(LF_mix_CR)} {(LF_nul)}
            )
          ]
          spids: [2873 3074]
        )
      spids: [2866 16777215]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(NATIVE_CRLF)})]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:MIX_CRLF_LF spids:[3133])
                  op: Equal
                  rhs: {(CRLF)}
                  spids: [3133]
                )
              ]
              spids: [3133]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:MIX_LF_CR spids:[3136])
                  op: Equal
                  rhs: {(CRLF_mix_CR)}
                  spids: [3136]
                )
              ]
              spids: [3136]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:NL spids:[3139])
                  op: Equal
                  rhs: {(CRLF)}
                  spids: [3139]
                )
              ]
              spids: [3139]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:LFNUL spids:[3142])
                  op: Equal
                  rhs: {(CRLF_nul)}
                  spids: [3142]
                )
              ]
              spids: [3142]
            )
          ]
          spids: [16777215 3131]
        )
      ]
      else_action: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:MIX_CRLF_LF spids:[3147])
              op: Equal
              rhs: {(CRLF_mix_LF)}
              spids: [3147]
            )
          ]
          spids: [3147]
        )
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:MIX_LF_CR spids:[3150])
              op: Equal
              rhs: {(LF_mix_CR)}
              spids: [3150]
            )
          ]
          spids: [3150]
        )
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:NL spids:[3153])
              op: Equal
              rhs: {(LF)}
              spids: [3153]
            )
          ]
          spids: [3153]
        )
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:LFNUL spids:[3156])
              op: Equal
              rhs: {(LF_nul)}
              spids: [3156]
            )
          ]
          spids: [3156]
        )
      ]
      spids: [3145 3159]
    )
    (C {(export)} {(CRLF_MIX_LF_CR)} {(MIX)} {(NL)})
    (command.ForEach
      iter_name: id
      iter_words: [{(DQ )} {(ident)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ForEach
              iter_name: ceol
              iter_words: [{(lf)} {(crlf)} {(native)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ForEach
                      iter_name: crlf
                      iter_words: [{(true)} {(false)} {(input)}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (C {(checkout_files)} {(-text)} {(DQ ($ VSub_Name '$id'))} {(DQ )} 
                              {(DQ ($ VSub_Name '$crlf'))} {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(-text)} {(DQ ($ VSub_Name '$id'))} {(DQ (lf))} 
                              {(DQ ($ VSub_Name '$crlf'))} {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(-text)} {(DQ ($ VSub_Name '$id'))} {(DQ (crlf))} 
                              {(DQ ($ VSub_Name '$crlf'))} {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ (lf))} 
                              {(DQ ($ VSub_Name '$crlf'))} {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ (crlf))} 
                              {(DQ ($ VSub_Name '$crlf'))} {(DQ ($ VSub_Name '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF)} {(CRLF_mix_CR)} {(CRLF_nul)}
                            )
                            (C {(checkout_files)} {(auto)} {(DQ ($ VSub_Name '$id'))} {(DQ (lf))} 
                              {(DQ ($ VSub_Name '$crlf'))} {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(auto)} {(DQ ($ VSub_Name '$id'))} {(DQ (crlf))} 
                              {(DQ ($ VSub_Name '$crlf'))} {(DQ ($ VSub_Name '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                          ]
                          spids: [3216 3451]
                        )
                      spids: [3208 16777215]
                    )
                    (C {(checkout_files)} {(DQ )} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(false)} 
                      {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(DQ )} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(true)} 
                      {(DQ ($ VSub_Name '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(auto)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(true)} 
                      {(DQ ($ VSub_Name '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(true)} 
                      {(DQ ($ VSub_Name '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF)} {(CRLF_mix_CR)} {(CRLF_nul)}
                    )
                    (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(input)} 
                      {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(auto)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(input)} 
                      {(DQ ($ VSub_Name '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                  ]
                  spids: [3200 3645]
                )
              spids: [3192 16777215]
            )
            (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(false)} {(crlf)} {(CRLF)} 
              {(CRLF)} {(CRLF)} {(CRLF_mix_CR)} {(CRLF_nul)}
            )
            (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(false)} {(lf)} {(LF)} 
              {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(false)} {(DQ )} 
              {($ VSub_Name '$NL')} {(CRLF)} {($ VSub_Name '$MIX_CRLF_LF')} {($ VSub_Name '$MIX_LF_CR')} {($ VSub_Name '$LFNUL')}
            )
            (C {(checkout_files)} {(text)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(false)} {(native)} 
              {($ VSub_Name '$NL')} {(CRLF)} {($ VSub_Name '$MIX_CRLF_LF')} {($ VSub_Name '$MIX_LF_CR')} {($ VSub_Name '$LFNUL')}
            )
            (C {(checkout_files)} {(auto)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(false)} {(DQ )} 
              {($ VSub_Name '$NL')} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(checkout_files)} {(auto)} {(DQ ($ VSub_Name '$id'))} {(DQ )} {(false)} {(native)} 
              {($ VSub_Name '$NL')} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
            )
          ]
          spids: [3184 3817]
        )
      spids: [3178 16777215]
    )
    (C {(test_expect_success)} {(SQ <'ls-files --eol -d -z'>)} 
      {
        (SQ <'\n'> 
          <
'\trm crlf_false_attr__CRLF.txt crlf_false_attr__CRLF_mix_LF.txt crlf_false_attr__LF.txt .gitattributes &&\n'
          > <'\tcat >expect <<-\\EOF &&\n'> <'\ti/crlf w/ crlf_false_attr__CRLF.txt\n'> 
          <'\ti/lf w/ .gitattributes\n'> <'\ti/lf w/ crlf_false_attr__LF.txt\n'> <'\ti/mixed w/ crlf_false_attr__CRLF_mix_LF.txt\n'> <'\tEOF\n'> 
          <'\tgit ls-files --eol -d |\n'> <'\tsed -e "s!attr/[^\t]*!!g" -e "s/\t/ /g" -e "s/  */ /g" |\n'> <'\tsort >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)