(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SAVEPATH)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$PATH'))}
          spids: [66]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<source>} {<sources/include.sh>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:STAGE_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name HOSTTOOLS))}
          spids: [82]
        )
      ]
    )
    (C {<blank_tempdir>} {(DQ ($ Id.VSub_DollarName '$WORK'))})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [(C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$STAGE_DIR'))}) (C {<dienow>})]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: (command.CommandList children:[(C {<hosttools_path>})])
                ) <':'> ($ Id.VSub_DollarName '$PATH')
              )
            }
          spids: [179]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$BUILD_STATIC'))} 
              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<none>} {<Id.Lit_RBracket ']'>}
            )
          ]
          action: [
            (C {($ Id.VSub_DollarName '$CC')} 
              {(DQ ($ Id.VSub_DollarName '$SOURCES') </root-filesystem/src/hello.c>)} {<--static>} {<-o>} {</dev/null>}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{<echo>} {(DQ <'Your host toolchain does not support static linking.'>)}]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                    )
                    (command.Simple
                      words: [{<echo>} {(DQ <'Either install support, or export BUILD_STATIC=none'>)}]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                    )
                    (C {<dienow>})
                  ]
                  spids: [226 239]
                )
              ]
            )
          ]
          spids: [193 208]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
          {(DQ ($ Id.VSub_DollarName '$STAGE_DIR') </busybox>)} {<Id.Lit_RBracket ']'>}
        )
        (C {<build_section>} {<busybox>})
        (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$STAGE_DIR') </sh>)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
          {(DQ ($ Id.VSub_DollarName '$STAGE_DIR') </toybox>)} {<Id.Lit_RBracket ']'>}
        )
        (C {<build_section>} {<toybox>})
      ]
    )
    (command.ForEach
      iter_name: i
      iter_words: [
        {<ar>}
        {<as>}
        {<nm>}
        {<cc>}
        {<make>}
        {<ld>}
        {<gcc>}
        {<objdump>}
        {<sh>}
        {($ Id.VSub_DollarName '$HOST_EXTRA')}
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
                      {(DQ ($ Id.VSub_DollarName '$STAGE_DIR') </> ($ Id.VSub_DollarName '$i'))} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:X)
                          op: assign_op.Equal
                          rhs: {<0>}
                          spids: [415]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FALLBACK)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$STAGE_DIR'))}
                          spids: [419]
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(DQ ($ Id.VSub_DollarName '$STAGE_DIR') </which>)}
                            {<-a>}
                            {(DQ ($ Id.VSub_DollarName '$i'))}
                          ]
                          more_env: [
                            (env_pair
                              name: PATH
                              val: {(DQ ($ Id.VSub_DollarName '$SAVEPATH'))}
                              spids: [425]
                            )
                          ]
                        )
                        (command.WhileUntil
                          keyword: <Id.KW_While while>
                          cond: [(C {<read>} {<j>})]
                          body: 
                            (command.DoGroup
                              children: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} 
                                          {
                                            (DQ ($ Id.VSub_DollarName '$FALLBACK') </> 
                                              ($ Id.VSub_DollarName '$i')
                                            )
                                          } {<Id.Lit_RBracket ']'>}
                                        )
                                      ]
                                      action: [
                                        (command.AndOr
                                          ops: [Id.Op_DAmp Id.Op_DPipe]
                                          children: [
                                            (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$FALLBACK'))})
                                            (C {<ln>} {<-sf>} {(DQ ($ Id.VSub_DollarName '$j'))} 
                                              {
                                                (DQ ($ Id.VSub_DollarName '$FALLBACK') </> 
                                                  ($ Id.VSub_DollarName '$i')
                                                )
                                              }
                                            )
                                            (C {<dienow>})
                                          ]
                                        )
                                      ]
                                      spids: [453 470]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:X)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (word_part.ExprSub
                                            left: <Id.Left_DollarBracket '$['>
                                            child: 
                                              (expr.Binary
                                                op: <Id.Arith_Plus _>
                                                left: ($ Id.VSub_DollarName '$X')
                                                right: (Const Id.Expr_DecInt 1)
                                              )
                                          )
                                        }
                                      spids: [507]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:FALLBACK)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ ($ Id.VSub_DollarName '$STAGE_DIR') </fallback-> 
                                            ($ Id.VSub_DollarName '$X')
                                          )
                                        }
                                      spids: [515]
                                    )
                                  ]
                                )
                              ]
                            )
                        )
                      ]
                      negated: F
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
                              {
                                (DQ ($ Id.VSub_DollarName '$STAGE_DIR') </> ($ Id.VSub_DollarName '$i'))
                              } {<Id.Lit_RBracket ']'>}
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {<echo>}
                                {(DQ <'Toolchain component missing: '> ($ Id.VSub_DollarName '$i'))}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  fd: -1
                                  arg_word: {<2>}
                                )
                              ]
                            )
                            (C {<dienow>})
                          ]
                          spids: [527 544]
                        )
                      ]
                    )
                  ]
                  spids: [390 407]
                )
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ET_TU_UBUNTU)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.Simple
                          words: [{(DQ ($ Id.VSub_DollarName '$STAGE_DIR') </which>)} {<gcc.real>}]
                          more_env: [
                            (env_pair
                              name: PATH
                              val: {(DQ ($ Id.VSub_DollarName '$SAVEPATH'))}
                              spids: [579]
                            )
                          ]
                        )
                      ]
                    )
                )
              )
            }
          spids: [576]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} {(DQ ($ Id.VSub_DollarName '$ET_TU_UBUNTU'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (command.Simple
          words: [
            {<ln>}
            {<-s>}
            {(DQ ($ Id.VSub_DollarName '$ET_TU_UBUNTU'))}
            {(DQ ($ Id.VSub_DollarName '$STAGE_DIR') </gcc.real>)}
          ]
          redirects: [(redir.Redir op:<Id.Redir_Great '2>'> fd:2 arg_word:{</dev/null>})]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: (command.CommandList children:[(C {<hosttools_path>})])
                )
              )
            }
          spids: [631]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Simple
                            words: [
                              {<find>}
                              {(DQ ($ Id.VSub_DollarName '$STAGE_DIR'))}
                              {<-newer>}
                              {(DQ ($ Id.VSub_DollarName '$BUILD') </record-commands>)}
                            ]
                            redirects: [
                              (redir.Redir
                                op: <Id.Redir_Great '2>'>
                                fd: 2
                                arg_word: {</dev/null>}
                              )
                            ]
                          )
                        ]
                      )
                  )
                )
              } {<Id.Lit_RBracket ']'>}
            )
          ]
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {<cd>} {(DQ ($ Id.VSub_DollarName '$TOP'))})
                (C {<more/record-commands.sh>})
                (C {<dienow>})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PATH)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$WRAPDIR'))}
                  spids: [686]
                )
              ]
            )
          ]
          spids: [638 668]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {<Id.Lit_LBracket '['>} {<-z>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: (command.CommandList children:[(C {<which>} {<distccd>})])
                  )
                )
              } {<Id.Lit_RBracket ']'>}
            )
          ]
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<setupfor>} {<distcc>})
                (C {<./configure>} {<--with-included-popt>} {<--disable-Werror>})
                (C {<make>} {<-j>} {(DQ ($ Id.VSub_DollarName '$CPUS'))})
                (C {<cp>} {<distcc>} {<distccd>} {(DQ (${ Id.VSub_Name STAGE_DIR))})
              ]
            )
            (C {<cleanup>})
          ]
          spids: [720 736]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
              {(DQ (${ Id.VSub_Name STAGE_DIR)) </genext2fs>} {<Id.Lit_RBracket ']'>}
            )
          ]
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<setupfor>} {<genext2fs>})
                (C {<./configure>})
                (C {<make>} {<-j>} {($ Id.VSub_DollarName '$CPUS')})
                (C {<cp>} {<genext2fs>} {(DQ (${ Id.VSub_Name STAGE_DIR))})
              ]
            )
            (C {<cleanup>})
          ]
          spids: [792 809]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
              {(DQ (${ Id.VSub_Name STAGE_DIR)) </mke2fs>} {<Id.Lit_RBracket ']'>}
            )
          ]
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<setupfor>} {<e2fsprogs>})
                (C {<./configure>} {<--disable-tls>} {<--disable-nls>} {<--enable-htree>})
                (C {<make>} {<-j>} {(DQ ($ Id.VSub_DollarName '$CPUS'))})
                (C {<cp>} 
                  (word.BracedTree
                    parts: [<misc/> (word_part.BracedTuple words:[{<mke2fs>} {<tune2fs>}])]
                  ) {<resize/resize2fs>} {(DQ (${ Id.VSub_Name STAGE_DIR))}
                )
                (C {<cp>} {<e2fsck/e2fsck>} {(DQ ($ Id.VSub_DollarName '$STAGE_DIR')) </fsck.ext2>})
              ]
            )
            (C {<cleanup>})
          ]
          spids: [883 900]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
              {(DQ (${ Id.VSub_Name STAGE_DIR)) </mksquashfs>} {<Id.Lit_RBracket ']'>}
            )
          ]
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<setupfor>} {<zlib>})
                (C {<./configure>})
                (C {<make>} {<-j>} {($ Id.VSub_DollarName '$CPUS')})
                (C {<mv>} {<z> <Id.Lit_Star '*'> <.h>} {<libz.a>} {<..>})
              ]
            )
            (C {<cleanup>})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<setupfor>} {<squashfs>})
                (C {<cd>} {<squashfs-tools>})
                (C {<sed>} {<-i>} {(DQ <'/^XATTR_/d'>)} {<Makefile>})
                (command.Simple
                  words: [{<make>} {<-j>} {($ Id.VSub_DollarName '$CPUS')}]
                  more_env: [
                    (env_pair
                      name: CC
                      val: {(DQ ($ Id.VSub_DollarName '$CC') <' -I ../.. -L ../..'>)}
                      spids: [1064]
                    )
                  ]
                )
                (C {<cp>} {<mksquashfs>} {<unsquashfs>} {(DQ (${ Id.VSub_Name STAGE_DIR))})
                (C {<rm>} 
                  (word.BracedTree
                    parts: [
                      <../../>
                      (word_part.BracedTuple
                        words: [{<z> <Id.Lit_Star '*'> <.h>} {<libz.a>}]
                      )
                    ]
                  )
                )
              ]
            )
            (C {<cleanup>})
          ]
          spids: [972 989]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Simple
                            words: [
                              {<find>}
                              {(DQ ($ Id.VSub_DollarName '$STAGE_DIR'))}
                              {<-newer>}
                              {(DQ ($ Id.VSub_DollarName '$BUILD') </record-commands>)}
                            ]
                            redirects: [
                              (redir.Redir
                                op: <Id.Redir_Great '2>'>
                                fd: 2
                                arg_word: {</dev/null>}
                              )
                            ]
                          )
                        ]
                      )
                  )
                )
              } {<Id.Lit_RBracket ']'>}
            )
          ]
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {<cd>} {(DQ ($ Id.VSub_DollarName '$TOP'))})
                (C {<more/record-commands.sh>})
                (C {<dienow>})
              ]
            )
          ]
          spids: [1115 1145]
        )
      ]
    )
    (C {<echo>} {<-e>} 
      {(DQ <Id.Lit_Other '\\'> <'e[32mHost tools build complete.'> <Id.Lit_Other '\\'> <'e[0m'>)}
    )
  ]
)