(command.CommandList
  children: [
    (command.ShFunction
      name: copy_to_nonexistent_with_opts
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<testf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad copy'>)})]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} {<copyf.bak>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'no backup expected'>)})
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<copy_to_nonexistent>})
    (command.ShFunction
      name: copy_to_nonexistent_body
      body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>})])
    )
    (C {<atf_test_case>} {<copy_to_nonexistent_safe>})
    (command.ShFunction
      name: copy_to_nonexistent_safe_body
      body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-S>})])
    )
    (C {<atf_test_case>} {<copy_to_nonexistent_comparing>})
    (command.ShFunction
      name: copy_to_nonexistent_comparing_body
      body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-C>})])
    )
    (C {<atf_test_case>} {<copy_to_nonexistent_safe_comparing>})
    (command.ShFunction
      name: copy_to_nonexistent_safe_comparing_body
      body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-S>} {<-C>})])
    )
    (C {<atf_test_case>} {<copy_to_nonexistent_backup>})
    (command.ShFunction
      name: copy_to_nonexistent_backup_body
      body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-b>} {<-B.bak>})])
    )
    (C {<atf_test_case>} {<copy_to_nonexistent_backup_safe>})
    (command.ShFunction
      name: copy_to_nonexistent_backup_safe_body
      body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-b>} {<-B.bak>} {<-S>})])
    )
    (C {<atf_test_case>} {<copy_to_nonexistent_preserving>})
    (command.ShFunction
      name: copy_to_nonexistent_preserving_body
      body: 
        (BraceGroup
          children: [
            (C {<copy_to_nonexistent_with_opts>} {<-p>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-ot>} {<copyf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp 2'>)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: copy_self_with_opts
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf2>})]
              do_fork: T
            )
            (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} 
              {<match> <Id.Lit_Colon ':'> <.>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<testf>}
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<cmp>} {<testf>} {<testf2>})
                (C {<atf_fail>} {(DQ <'file changed after self-copy attempt'>)})
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<copy_self>})
    (command.ShFunction
      name: copy_self_body
      body: (BraceGroup children:[(C {<copy_self_with_opts>})])
    )
    (C {<atf_test_case>} {<copy_self_safe>})
    (command.ShFunction
      name: copy_self_safe_body
      body: (BraceGroup children:[(C {<copy_self_with_opts>} {<-S>})])
    )
    (C {<atf_test_case>} {<copy_self_comparing>})
    (command.ShFunction
      name: copy_self_comparing_body
      body: (BraceGroup children:[(C {<copy_self_with_opts>} {<-C>})])
    )
    (C {<atf_test_case>} {<copy_self_safe_comparing>})
    (command.ShFunction
      name: copy_self_safe_comparing_body
      body: (BraceGroup children:[(C {<copy_self_with_opts>} {<-S>} {<-C>})])
    )
    (command.ShFunction
      name: overwrite_with_opts
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<otherf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<testf>} {<otherf>}) (C {<atf_fail>} {(DQ <'bad overwrite'>)})]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<otherf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<overwrite>})
    (command.ShFunction
      name: overwrite_body
      body: (BraceGroup children:[(C {<overwrite_with_opts>})])
    )
    (C {<atf_test_case>} {<overwrite_safe>})
    (command.ShFunction
      name: overwrite_safe_body
      body: (BraceGroup children:[(C {<overwrite_with_opts>} {<-S>})])
    )
    (C {<atf_test_case>} {<overwrite_comparing>})
    (command.ShFunction
      name: overwrite_comparing_body
      body: (BraceGroup children:[(C {<overwrite_with_opts>} {<-C>})])
    )
    (C {<atf_test_case>} {<overwrite_safe_comparing>})
    (command.ShFunction
      name: overwrite_safe_comparing_body
      body: (BraceGroup children:[(C {<overwrite_with_opts>} {<-S>} {<-C>})])
    )
    (command.ShFunction
      name: overwrite_eq_with_opts
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<otherf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<testf>} {<otherf>}) (C {<atf_fail>} {(DQ <'bad overwrite'>)})]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<otherf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<overwrite_eq>})
    (command.ShFunction
      name: overwrite_eq_body
      body: (BraceGroup children:[(C {<overwrite_eq_with_opts>})])
    )
    (C {<atf_test_case>} {<overwrite_eq_safe>})
    (command.ShFunction
      name: overwrite_eq_safe_body
      body: (BraceGroup children:[(C {<overwrite_eq_with_opts>} {<-S>})])
    )
    (C {<atf_test_case>} {<overwrite_eq_comparing>})
    (command.ShFunction
      name: overwrite_eq_comparing_body
      body: (BraceGroup children:[(C {<overwrite_eq_with_opts>} {<-C>})])
    )
    (C {<atf_test_case>} {<overwrite_eq_safe_comparing>})
    (command.ShFunction
      name: overwrite_eq_safe_comparing_body
      body: (BraceGroup children:[(C {<overwrite_eq_with_opts>} {<-S>} {<-C>})])
    )
    (command.ShFunction
      name: overwrite_backup_with_opts
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})]
              do_fork: T
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf2>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-b>} {<-B.bak>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<otherf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<testf>} {<otherf>}) (C {<atf_fail>} {(DQ <'bad overwrite'>)})]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<otherf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<otherf.bak>} {<otherf2>}) (C {<atf_fail>} {(DQ <'bad backup'>)})]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<overwrite_backup>})
    (command.ShFunction
      name: overwrite_backup_body
      body: (BraceGroup children:[(C {<overwrite_backup_with_opts>})])
    )
    (C {<atf_test_case>} {<overwrite_backup_safe>})
    (command.ShFunction
      name: overwrite_backup_safe_body
      body: (BraceGroup children:[(C {<overwrite_backup_with_opts>} {<-S>})])
    )
    (C {<atf_test_case>} {<overwrite_backup_comparing>})
    (command.ShFunction
      name: overwrite_backup_comparing_body
      body: (BraceGroup children:[(C {<overwrite_backup_with_opts>} {<-C>})])
    )
    (C {<atf_test_case>} {<overwrite_backup_safe_comparing>})
    (command.ShFunction
      name: overwrite_backup_safe_comparing_body
      body: (BraceGroup children:[(C {<overwrite_backup_with_opts>} {<-S>} {<-C>})])
    )
    (command.ShFunction
      name: setup_stripbin
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: 
                        {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\S'>) <TRIPBIN>}
                      here_end_span_id: 964
                      stdin_parts: [
                        <'#!/bin/sh\n'>
                        <'tr z @ <"$1" >"$1.new" && mv -- "$1.new" "$1"\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<stripbin>}
                )
              ]
              do_fork: T
            )
            (C {<chmod>} {<755>} {<stripbin>})
            (C {<export>} 
              {<Id.Lit_VarLike 'STRIPBIN='> (DQ ($ Id.VSub_DollarName '$PWD') <'/stripbin'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: strip_changing_with_opts
      body: 
        (BraceGroup
          children: [
            (C {<setup_stripbin>})
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-s>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<strip_changing>})
    (command.ShFunction
      name: strip_changing_body
      body: (BraceGroup children:[(C {<strip_changing_with_opts>})])
    )
    (C {<atf_test_case>} {<strip_changing_comparing>})
    (command.ShFunction
      name: strip_changing_comparing_body
      body: (BraceGroup children:[(C {<strip_changing_with_opts>} {<-C>})])
    )
    (command.ShFunction
      name: strip_changing_overwrite_with_opts
      body: 
        (BraceGroup
          children: [
            (C {<setup_stripbin>})
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<copyf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-s>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<strip_changing_overwrite>})
    (command.ShFunction
      name: strip_changing_overwrite_body
      body: (BraceGroup children:[(C {<strip_changing_overwrite_with_opts>})])
    )
    (C {<atf_test_case>} {<strip_changing_overwrite_comparing>})
    (command.ShFunction
      name: strip_changing_overwrite_comparing_body
      body: (BraceGroup children:[(C {<strip_changing_overwrite_with_opts>} {<-C>})])
    )
    (command.ShFunction
      name: strip_changing_overwrite_eq_with_opts
      body: 
        (BraceGroup
          children: [
            (C {<setup_stripbin>})
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<copyf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-s>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<strip_changing_overwrite_eq>})
    (command.ShFunction
      name: strip_changing_overwrite_eq_body
      body: (BraceGroup children:[(C {<strip_changing_overwrite_eq_with_opts>})])
    )
    (C {<atf_test_case>} {<strip_changing_overwrite_eq_comparing>})
    (command.ShFunction
      name: strip_changing_overwrite_eq_comparing_body
      body: (BraceGroup children:[(C {<strip_changing_overwrite_eq_with_opts>} {<-C>})])
    )
    (C {<atf_test_case>} {<strip_noop>})
    (command.ShFunction
      name: strip_noop_body
      body: 
        (BraceGroup
          children: [
            (C {<export>} {<Id.Lit_VarLike 'STRIPBIN='> <true>})
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-s>} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'bad timestamp'>)})
              ]
            )
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})]
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<hard_link>})
    (command.ShFunction
      name: hard_link_body
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-l>} {<h>} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'not same file'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'copy is symlink'>)})
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<symbolic_link>})
    (command.ShFunction
      name: symbolic_link_body
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-l>} {<s>} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'not same file'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'copy is not symlink'>)})
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<symbolic_link_absolute>})
    (command.ShFunction
      name: symbolic_link_absolute_body
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-l>} {<sa>} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'not same file'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'copy is not symlink'>)})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:copyf_path)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<readlink>} {<copyf>})
                      )
                    }
                  spids: [1657]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:testf_path)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>} {<-P>})) 
                        <'/testf'>
                      )
                    }
                  spids: [1665]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$copyf_path'))} 
                              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$testf_path'))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_fail>} 
                      {
                        (DQ <'unexpected symlink contents (\''> ($ Id.VSub_DollarName '$copyf_path') 
                          <'\' != \''> ($ Id.VSub_DollarName '$testf_path') <'\')'>
                        )
                      }
                    )
                  ]
                  spids: [1676 1694]
                )
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<symbolic_link_relative>})
    (command.ShFunction
      name: symbolic_link_relative_body
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})]
              do_fork: T
            )
            (C {<atf_check>} {<install>} {<-l>} {<sr>} {<testf>} {<copyf>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'not same file'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'copy is not symlink'>)})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:copyf_path)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<readlink>} {<copyf>})
                      )
                    }
                  spids: [1783]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:testf_path)
                  op: assign_op.Equal
                  rhs: {(DQ <testf>)}
                  spids: [1791]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$copyf_path'))} 
                              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$testf_path'))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_fail>} 
                      {
                        (DQ <'unexpected symlink contents (\''> ($ Id.VSub_DollarName '$copyf_path') 
                          <'\' != \''> ($ Id.VSub_DollarName '$testf_path') <'\')'>
                        )
                      }
                    )
                  ]
                  spids: [1797 1815]
                )
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<symbolic_link_relative_absolute_source_and_dest1>})
    (command.ShFunction
      name: symbolic_link_relative_absolute_source_and_dest1_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} 
              {(DQ <'Verify -l rs with absolute paths (.../copyf -> .../a/b/c/testf)'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: symbolic_link_relative_absolute_source_and_dest1_body
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path)
                  op: assign_op.Equal
                  rhs: {<'a/b/c/testf'>}
                  spids: [1864]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path_prefixed)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$PWD') <'/'> ($ Id.VSub_DollarName '$src_path')}
                  spids: [1868]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dest_path)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$PWD') <'/copyf'>}
                  spids: [1874]
                )
              ]
            )
            (C {<atf_check>} {<mkdir>} {<-p>} {<'a/b/c'>})
            (C {<atf_check>} {<touch>} {($ Id.VSub_DollarName '$src_path')})
            (C {<atf_check>} {<install>} {<-l>} {<sr>} {($ Id.VSub_DollarName '$src_path_prefixed')} 
              {($ Id.VSub_DollarName '$dest_path')}
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$src_path_prefixed')} {<-ef>} 
                  {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'not same file'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$dest_path')} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'copy is not symlink'>)})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dest_path_relative)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<readlink>} {($ Id.VSub_DollarName '$dest_path')})
                      )
                    }
                  spids: [1945]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path_relative)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$src_path'))}
                  spids: [1953]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {(DQ ($ Id.VSub_DollarName '$src_path_relative'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$dest_path_relative'))} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_fail>} 
                      {
                        (DQ <'unexpected symlink contents (\''> 
                          ($ Id.VSub_DollarName '$src_path_relative') <'\' != \''> ($ Id.VSub_DollarName '$dest_path_relative') <'\')'>
                        )
                      }
                    )
                  ]
                  spids: [1959 1977]
                )
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<symbolic_link_relative_absolute_source_and_dest1_double_slash>})
    (command.ShFunction
      name: symbolic_link_relative_absolute_source_and_dest1_double_slash_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} 
              {
                (DQ 
                  <
'Verify -l rs with absolute paths (.../copyf -> .../a/b/c/testf), using double-slashes'
                  >
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: symbolic_link_relative_absolute_source_and_dest1_double_slash_body
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path)
                  op: assign_op.Equal
                  rhs: {<'a//b//c//testf'>}
                  spids: [2026]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path_prefixed)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$PWD') <'/'> ($ Id.VSub_DollarName '$src_path')}
                  spids: [2030]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dest_path)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$PWD') <'/copyf'>}
                  spids: [2036]
                )
              ]
            )
            (C {<atf_check>} {<mkdir>} {<-p>} {<'a/b/c'>})
            (C {<atf_check>} {<touch>} {($ Id.VSub_DollarName '$src_path')})
            (C {<atf_check>} {<install>} {<-l>} {<sr>} {($ Id.VSub_DollarName '$src_path_prefixed')} 
              {($ Id.VSub_DollarName '$dest_path')}
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$src_path_prefixed')} {<-ef>} 
                  {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'not same file'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$dest_path')} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'copy is not symlink'>)})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dest_path_relative)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<readlink>} {($ Id.VSub_DollarName '$dest_path')})
                      )
                    }
                  spids: [2107]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path_relative)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (C {<echo>} {($ Id.VSub_DollarName '$src_path')})
                                (C {<sed>} {<-e>} {(SQ <'s,//,/,g'>)})
                              ]
                              negated: F
                            )
                        )
                      )
                    }
                  spids: [2115]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {(DQ ($ Id.VSub_DollarName '$src_path_relative'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$dest_path_relative'))} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_fail>} 
                      {
                        (DQ <'unexpected symlink contents (\''> 
                          ($ Id.VSub_DollarName '$src_path_relative') <'\' != \''> ($ Id.VSub_DollarName '$dest_path_relative') <'\')'>
                        )
                      }
                    )
                  ]
                  spids: [2135 2153]
                )
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<symbolic_link_relative_absolute_source_and_dest2>})
    (command.ShFunction
      name: symbolic_link_relative_absolute_source_and_dest2_head
      body: 
        (BraceGroup
          children: [
            (C {<atf_set>} {(DQ <descr>)} 
              {(DQ <'Verify -l rs with absolute paths (.../a/b/c/copyf -> .../testf)'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: symbolic_link_relative_absolute_source_and_dest2_body
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path)
                  op: assign_op.Equal
                  rhs: {<testf>}
                  spids: [2202]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path_prefixed)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$PWD') <'/'> ($ Id.VSub_DollarName '$src_path')}
                  spids: [2206]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dest_path)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$PWD') <'/a/b/c/copyf'>}
                  spids: [2212]
                )
              ]
            )
            (C {<atf_check>} {<mkdir>} {<-p>} {<'a/b/c'>})
            (C {<atf_check>} {<touch>} {($ Id.VSub_DollarName '$src_path')})
            (C {<atf_check>} {<install>} {<-l>} {<sr>} {($ Id.VSub_DollarName '$src_path_prefixed')} 
              {($ Id.VSub_DollarName '$dest_path')}
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$src_path_prefixed')} {<-ef>} 
                  {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'not same file'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$dest_path')} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<atf_fail>} {(DQ <'copy is not symlink'>)})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dest_path_relative)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<readlink>} {($ Id.VSub_DollarName '$dest_path')})
                      )
                    }
                  spids: [2283]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src_path_relative)
                  op: assign_op.Equal
                  rhs: {(DQ <'../../../'> ($ Id.VSub_DollarName '$src_path'))}
                  spids: [2291]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {(DQ ($ Id.VSub_DollarName '$src_path_relative'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$dest_path_relative'))} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<atf_fail>} 
                      {
                        (DQ <'unexpected symlink contents (\''> 
                          ($ Id.VSub_DollarName '$src_path_relative') <'\' != \''> ($ Id.VSub_DollarName '$dest_path_relative') <'\')'>
                        )
                      }
                    )
                  ]
                  spids: [2298 2316]
                )
              ]
            )
          ]
        )
    )
    (C {<atf_test_case>} {<mkdir_simple>})
    (command.ShFunction
      name: mkdir_simple_body
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<install>} {<-d>} {<'dir1/dir2'>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-d>} {<dir1>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'dir1 missing'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-d>} {<'dir1/dir2'>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'dir2 missing'>)})
              ]
            )
            (C {<atf_check>} {<install>} {<-d>} {<'dir1/dir2/dir3'>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-d>} {<'dir1/dir2/dir3'>} {<Id.Lit_RBracket ']'>})
                (C {<atf_fail>} {(DQ <'dir3 missing'>)})
              ]
            )
            (C {<atf_check>} {<install>} {<-d>} {<dir1>})
            (C {<atf_check>} {<install>} {<-d>} {<'dir1/dir2/dir3'>})
          ]
        )
    )
    (command.ShFunction
      name: atf_init_test_cases
      body: 
        (BraceGroup
          children: [
            (C {<atf_add_test_case>} {<copy_to_nonexistent>})
            (C {<atf_add_test_case>} {<copy_to_nonexistent_safe>})
            (C {<atf_add_test_case>} {<copy_to_nonexistent_comparing>})
            (C {<atf_add_test_case>} {<copy_to_nonexistent_safe_comparing>})
            (C {<atf_add_test_case>} {<copy_to_nonexistent_backup>})
            (C {<atf_add_test_case>} {<copy_to_nonexistent_backup_safe>})
            (C {<atf_add_test_case>} {<copy_to_nonexistent_preserving>})
            (C {<atf_add_test_case>} {<copy_self>})
            (C {<atf_add_test_case>} {<copy_self_safe>})
            (C {<atf_add_test_case>} {<copy_self_comparing>})
            (C {<atf_add_test_case>} {<copy_self_safe_comparing>})
            (C {<atf_add_test_case>} {<overwrite>})
            (C {<atf_add_test_case>} {<overwrite_safe>})
            (C {<atf_add_test_case>} {<overwrite_comparing>})
            (C {<atf_add_test_case>} {<overwrite_safe_comparing>})
            (C {<atf_add_test_case>} {<overwrite_eq>})
            (C {<atf_add_test_case>} {<overwrite_eq_safe>})
            (C {<atf_add_test_case>} {<overwrite_eq_comparing>})
            (C {<atf_add_test_case>} {<overwrite_eq_safe_comparing>})
            (C {<atf_add_test_case>} {<overwrite_backup>})
            (C {<atf_add_test_case>} {<overwrite_backup_safe>})
            (C {<atf_add_test_case>} {<overwrite_backup_comparing>})
            (C {<atf_add_test_case>} {<overwrite_backup_safe_comparing>})
            (C {<atf_add_test_case>} {<strip_changing>})
            (C {<atf_add_test_case>} {<strip_changing_comparing>})
            (C {<atf_add_test_case>} {<strip_changing_overwrite>})
            (C {<atf_add_test_case>} {<strip_changing_overwrite_comparing>})
            (C {<atf_add_test_case>} {<strip_changing_overwrite_eq>})
            (C {<atf_add_test_case>} {<strip_changing_overwrite_eq_comparing>})
            (C {<atf_add_test_case>} {<strip_noop>})
            (C {<atf_add_test_case>} {<hard_link>})
            (C {<atf_add_test_case>} {<symbolic_link>})
            (C {<atf_add_test_case>} {<symbolic_link_absolute>})
            (C {<atf_add_test_case>} {<symbolic_link_relative>})
            (C {<atf_add_test_case>} {<symbolic_link_relative_absolute_source_and_dest1>})
            (C {<atf_add_test_case>} {<symbolic_link_relative_absolute_source_and_dest1_double_slash>})
            (C {<atf_add_test_case>} {<symbolic_link_relative_absolute_source_and_dest2>})
            (C {<atf_add_test_case>} {<mkdir_simple>})
          ]
        )
    )
  ]
)