(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:tid)
          op: Equal
          rhs: {(DQ ('basic sftp put/get with ssh.com server'))}
          spids: [7]
        )
      ]
      spids: [7]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SFTPCMDFILE)
          op: Equal
          rhs: {(${ VSub_Name OBJ) (/batch)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name '$SFTPCMDFILE')} spids:[22])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ('version\n') ('get ') ($ VSub_Name '$DATA') (' ') (${ VSub_Name COPY) ('.1\n') ('put ') 
                ($ VSub_Name '$DATA') (' ') (${ VSub_Name COPY) ('.2\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [25]
        )
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BUFFERSIZE)
          op: Equal
          rhs: {(DQ ('5 1000 32000 64000'))}
          spids: [45]
        )
      ]
      spids: [45]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:REQUESTS) op:Equal rhs:{(DQ ('1 2 10'))} spids:[50])]
      spids: [50]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ (X) (${ VSub_Name TEST_COMBASE))} {(Lit_Other '=')} {(DQ (X))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(fatal)} {(SQ <'$TEST_COMBASE is not set'>)})]
          spids: [-1 79]
        )
      ]
      spids: [-1 88]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VERSIONS)
          op: Equal
          rhs: 
            {
              (DQ ('\n') ('\t2.0.10\n') ('\t2.0.12\n') ('\t2.0.13\n') ('\t2.1.0\n') ('\t2.2.0\n') 
                ('\t2.3.0\n') ('\t2.3.1\n') ('\t2.4.0\n') ('\t3.0.0\n') ('\t3.1.0\n') ('\t3.2.0\n') ('\t3.2.2\n') ('\t3.2.3\n') 
                ('\t3.2.5\n') ('\t3.2.9\n') ('\t3.2.9.1\n') ('\t3.3.0')
              )
            }
          spids: [91]
        )
      ]
      spids: [91]
    )
    (ForEach
      iter_name: v
      iter_words: [{(${ VSub_Name VERSIONS)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:server)
                  op: Equal
                  rhs: {(${ VSub_Name TEST_COMBASE) (/) (${ VSub_Name v) (/sftp-server2)}
                  spids: [131]
                )
              ]
              spids: [131]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(-x)} {(${ VSub_Name server)} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                  spids: [-1 157]
                )
              ]
              spids: [-1 163]
            )
            (C {(verbose)} {(DQ ('sftp-server ') ($ VSub_Name '$v'))})
            (ForEach
              iter_name: B
              iter_words: [{(${ VSub_Name BUFFERSIZE)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (ForEach
                      iter_name: R
                      iter_words: [{(${ VSub_Name REQUESTS)}]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (C {(verbose)} 
                              {
                                (DQ ('test ') ($ VSub_Name '$tid') (': buffer_size ') ($ VSub_Name '$B') 
                                  (' num_requests ') ($ VSub_Name '$R')
                                )
                              }
                            )
                            (C {(rm)} {(-f)} {(${ VSub_Name COPY) (.1)} {(${ VSub_Name COPY) (.2)})
                            (SimpleCommand
                              words: [
                                {(${ VSub_Name SFTP)}
                                {(-D)}
                                {(${ VSub_Name server)}
                                {(-B)}
                                {($ VSub_Name '$B')}
                                {(-R)}
                                {($ VSub_Name '$R')}
                                {(-b)}
                                {($ VSub_Name '$SFTPCMDFILE')}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [253]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [257]
                                )
                              ]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:r)
                                  op: Equal
                                  rhs: {($ VSub_QMark '$?')}
                                  spids: [261]
                                )
                              ]
                              spids: [261]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (C {(Lit_Other '[')} {($ VSub_Name '$r')} {(-ne)} {(0)} 
                                          {(Lit_Other ']')}
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [(C {(fail)} {(DQ ('sftp failed with ') ($ VSub_Name '$r'))})]
                                  spids: [-1 278]
                                )
                              ]
                              else_action: [
                                (AndOr
                                  children: [
                                    (C {(cmp)} {($ VSub_Name '$DATA')} {(${ VSub_Name COPY) (.1)})
                                    (C {(fail)} {(DQ ('corrupted copy after get'))})
                                  ]
                                  op_id: Op_DPipe
                                )
                                (AndOr
                                  children: [
                                    (C {(cmp)} {($ VSub_Name '$DATA')} {(${ VSub_Name COPY) (.2)})
                                    (C {(fail)} {(DQ ('corrupted copy after put'))})
                                  ]
                                  op_id: Op_DPipe
                                )
                              ]
                              spids: [289 329]
                            )
                          ]
                          spids: [199 332]
                        )
                      spids: [193 197]
                    )
                  ]
                  spids: [185 335]
                )
              spids: [179 183]
            )
          ]
          spids: [128 337]
        )
      spids: [122 126]
    )
    (C {(rm)} {(-f)} {(${ VSub_Name COPY) (.1)} {(${ VSub_Name COPY) (.2)})
    (C {(rm)} {(-f)} {($ VSub_Name '$SFTPCMDFILE')})
  ]
)