(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FAILED)
          op: assign_op.Equal
          rhs: {<no>}
          spids: [89]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WORKDIR)
          op: assign_op.Equal
          rhs: {<work>}
          spids: [92]
        )
      ]
    )
    (command.ShFunction
      name: usage
      body: 
        (BraceGroup
          children: [
            (C {<echo>} {(DQ <'Usage: tzsetup.sh [-s script] [-w workdir]'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:COMMAND)
          op: assign_op.Equal
          rhs: {<etcupdate>}
          spids: [120]
        )
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: (C {<getopts>} {(DQ <'s:w:'>)} {<option>})
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_DollarName '$option')}
              arms: [
                (case_arm
                  pat_list: [{<s>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:COMMAND)
                          op: assign_op.Equal
                          rhs: {(DQ <'sh '> ($ Id.VSub_DollarName '$OPTARG'))}
                          spids: [148]
                        )
                      ]
                    )
                  ]
                  spids: [144 145 155 -1]
                )
                (case_arm
                  pat_list: [{<w>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:WORKDIR)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$OPTARG')}
                          spids: [162]
                        )
                      ]
                    )
                  ]
                  spids: [158 159 166 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [(C {<echo>}) (C {<usage>})]
                  spids: [169 170 179 -1]
                )
              ]
            )
          ]
        )
    )
    (C {<shift>} 
      {
        (word_part.ArithSub
          anode: 
            (arith_expr.Binary
              op_id: Id.Arith_Minus
              left: <Id.Lit_ArithVarLike OPTIND>
              right: {<Id.Lit_Digits 1>}
            )
        )
      }
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<0>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<usage>})]
          spids: [197 210]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CONFLICTS)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/conflicts'>}
          spids: [218]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OLD)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/old'>}
          spids: [222]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:NEW)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/current'>}
          spids: [226]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEST)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/test'>}
          spids: [230]
        )
      ]
    )
    (command.ShFunction
      name: build_trees
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<i>} {<j>} {<k>})
            (C {<rm>} {<-rf>} {($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')} 
              {($ Id.VSub_DollarName '$TEST')} {($ Id.VSub_DollarName '$CONFLICTS')}
            )
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')} 
              {($ Id.VSub_DollarName '$TEST')}
            )
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/etc'>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/var/db'>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/usr/share/zoneinfo'>})
            (command.Simple
              words: [{<echo>} {(DQ <foo>)}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$TEST') <'/usr/share/zoneinfo/foo'>}
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: missing
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-e>} 
                              {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<-o>} {<-L>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be missing'>)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FAILED)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [368]
                        )
                      ]
                    )
                  ]
                  spids: [335 356]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: link
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<val>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              children: [
                                (C {<Id.Lit_LBracket '['>} {<-L>} 
                                  {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                              negated: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a link'>)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FAILED)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [423]
                        )
                      ]
                    )
                  ]
                  spids: [396 411]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<1>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:val)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (C {<readlink>} 
                                    {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')}
                                  )
                              )
                            }
                          spids: [443]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$val'))} 
                                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} 
                              {
                                (DQ <'Link '> ($ Id.VSub_Number '$1') <' should link to '> 
                                  (word_part.EscapedLiteral
                                    token: <Id.Lit_EscapedChar '\\"'>
                                  ) ($ Id.VSub_Number '$2') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                                )
                              }
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:FAILED)
                                  op: assign_op.Equal
                                  rhs: {<yes>}
                                  spids: [488]
                                )
                              ]
                            )
                          ]
                          spids: [455 473]
                        )
                      ]
                    )
                  ]
                  spids: [427 440]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: file
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<contents>} {<sum>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              children: [
                                (C {<Id.Lit_LBracket '['>} {<-f>} 
                                  {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                              negated: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a regular file'>)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FAILED)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [551]
                        )
                      ]
                    )
                  ]
                  spids: [524 539]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<2>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:contents)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (C {<cat>} 
                                    {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')}
                                  )
                              )
                            }
                          spids: [571]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$contents'))} 
                                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' has wrong contents'>)})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:FAILED)
                                  op: assign_op.Equal
                                  rhs: {<yes>}
                                  spids: [613]
                                )
                              ]
                            )
                          ]
                          spids: [583 601]
                        )
                      ]
                    )
                  ]
                  spids: [555 568]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:sum)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (C {<md5>} {<-q>} 
                                    {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')}
                                  )
                              )
                            }
                          spids: [636]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$sum'))} 
                                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$3'))} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' has wrong contents'>)})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:FAILED)
                                  op: assign_op.Equal
                                  rhs: {<yes>}
                                  spids: [680]
                                )
                              ]
                            )
                          ]
                          spids: [650 668]
                        )
                      ]
                    )
                  ]
                  spids: [620 633]
                )
              ]
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} 
                      {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<id>} {<-u>}))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'must be root'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [692 711]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<-r>} {<'/etc/etcupdate.conf'>} {<Id.Lit_RBracket ']'>})
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<echo>} {(DQ <'WARNING: /etc/etcupdate.conf settings may break some tests.'>)})]
          spids: [728 739]
        )
      ]
    )
    (C {<build_trees>})
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-nr>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: (redir_param.HereDoc here_begin:{<EOF>} here_end_span_id:787)
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for no /etc/localtime with -n:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [821]
            )
          ]
        )
      ]
    )
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-r>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for no /etc/localtime:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [875]
            )
          ]
        )
      ]
    )
    (C {<missing>} {<'/etc/localtime'>})
    (C {<missing>} {<'/var/db/zoneinfo'>})
    (C {<build_trees>})
    (C {<ln>} {<-s>} {<'/dev/null'>} {($ Id.VSub_DollarName '$TEST') <'/etc/localtime'>})
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-nr>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: (redir_param.HereDoc here_begin:{<EOF>} here_end_span_id:933)
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for symlinked /etc/localtime with -n:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [967]
            )
          ]
        )
      ]
    )
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-r>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for symlinked /etc/localtime:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [1021]
            )
          ]
        )
      ]
    )
    (C {<link>} {<'/etc/localtime'>} {(DQ <'/dev/null'>)})
    (C {<missing>} {<'/var/db/zoneinfo'>})
    (C {<build_trees>})
    (command.Simple
      words: [{<echo>} {(DQ <bar>)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$TEST') <'/etc/localtime'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-nr>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 1087
              stdin_parts: [
                <'Warnings:\n'>
                <'  Needs update: /etc/localtime (required manual update via tzsetup(8))\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for missing /var/db/zoneinfo with -n:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [1121]
            )
          ]
        )
      ]
    )
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-r>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for missing /var/db/zoneinfo:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [1175]
            )
          ]
        )
      ]
    )
    (C {<file>} {<'/etc/localtime'>} {(DQ <bar>)})
    (C {<missing>} {<'/var/db/zoneinfo'>})
    (C {<build_trees>})
    (command.Simple
      words: [{<echo>} {(DQ <bar>)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$TEST') <'/etc/localtime'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<echo>} {(DQ <foo>)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$TEST') <'/var/db/zoneinfo'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-nr>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: (redir_param.HereDoc here_begin:{<EOF>} here_end_span_id:1250)
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for real update with -n:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [1284]
            )
          ]
        )
      ]
    )
    (command.Simple
      words: [
        {($ Id.VSub_DollarName '$COMMAND')}
        {<-r>}
        {<-d>}
        {($ Id.VSub_DollarName '$WORKDIR')}
        {<-D>}
        {($ Id.VSub_DollarName '$TEST')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
      ]
      do_fork: T
    )
    (C {<echo>} {(DQ <'Differences for real update:'>)})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} 
          {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FAILED)
              op: assign_op.Equal
              rhs: {<yes>}
              spids: [1338]
            )
          ]
        )
      ]
    )
    (C {<file>} {<'/etc/localtime'>} {(DQ <foo>)})
    (C {<file>} {<'/var/db/zoneinfo'>} {(DQ <foo>)})
    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FAILED))} {<Id.Lit_Equals '='>} {<no>} 
      {<Id.Lit_RBracket ']'>}
    )
  ]
)