(command.CommandList
  children: [
    (C {<set>} {<-e>})
    (C {<.>} 
      {
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          child: (C {<dirname>} {(${ Id.VSub_Number 0)})
        ) <'/atexit.sh'>
      }
    )
    (C {<.>} 
      {
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          child: (C {<dirname>} {(${ Id.VSub_Number 0)})
        ) <'/colors.sh'>
      }
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<test>} {(${ Id.VSub_Pound '#')} {<-eq>} {<2>})
        (BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {<echo>} 
                  {
                    (DQ <'Usage: '> 
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<basename>} {(${ Id.VSub_Number 0)})
                      ) <' [version] [candidate]'>
                    )
                  }
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Sentence
              child: (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSION)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Number 1)}
          spids: [90]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CANDIDATE)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Number 2)}
          spids: [95]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TAG)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name VERSION) <-rc> (${ Id.VSub_Name CANDIDATE))}
          spids: [100]
        )
      ]
    )
    (C {<echo>} 
      {
        (DQ (${ Id.VSub_Name GREEN) <'Voting for mesos-'> (${ Id.VSub_Name VERSION) <' candidate '> 
          (${ Id.VSub_Name CANDIDATE) (${ Id.VSub_Name NORMAL)
        )
      }
    )
    (C {<read>} {<-p>} {(DQ <'Hit enter to continue ... '>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MESOS_GIT_URL)
          op: assign_op.Equal
          rhs: {(DQ <'https://git-wip-us.apache.org/repos/asf/mesos.git'>)}
          spids: [141]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WORK_DIR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<mktemp>} {<-d>} {<'/tmp/mesos-vote-XXXX'>})
              )
            }
          spids: [147]
        )
      ]
    )
    (C {<atexit>} {(DQ <'rm -rf '> (${ Id.VSub_Name WORK_DIR))})
    (C {<pushd>} {(${ Id.VSub_Name WORK_DIR)})
    (C {<echo>} 
      {(DQ (${ Id.VSub_Name GREEN) <'Checking out '> (${ Id.VSub_Name TAG) (${ Id.VSub_Name NORMAL))}
    )
    (C {<git>} {<clone>} {<--depth>} {<1>} {<--branch>} {(${ Id.VSub_Name TAG)} 
      {(${ Id.VSub_Name MESOS_GIT_URL)}
    )
    (C {<pushd>} {<mesos>})
    (C {<grep>} 
      {
        (DQ <Id.Lit_BadBackslash '\\'> <'[mesos'> <Id.Lit_BadBackslash '\\'> <'], '> 
          <Id.Lit_BadBackslash '\\'> <'['> (${ Id.VSub_Name VERSION) <Id.Lit_BadBackslash '\\'> <']'>
        )
      } {<configure.ac>}
    )
    (C {<'./bootstrap'>})
    (C {<mkdir>} {<build>})
    (C {<pushd>} {<build>})
    (C {<'../configure'>} {<--disable-optimize>})
    (C {<pushd>} {<3rdparty>})
    (C {<make>} {<-j3>})
    (C {<popd>})
    (C {<make>} {<-j3>} {<maven-install>})
    (C {<mvn>} {<deploy>} {<-f>} {<'src/java/mesos.pom'>})
    (C {<echo>} 
      {
        (DQ (${ Id.VSub_Name GREEN) <'Successfully deployed the jar to staging maven repository ...'> 
          (${ Id.VSub_Name NORMAL)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MAVEN_REPO)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [309]
        )
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<-z>} {(${ Id.VSub_Name MAVEN_REPO)} {<Id.Lit_RBracket ']'>})
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (C {<read>} {<-p>} 
              {(DQ <'Please *close* the staging repository and provide its URL here: '>)} {<MAVEN_REPO>}
            )
          ]
        )
    )
    (C {<echo>} 
      {(DQ (${ Id.VSub_Name GREEN) <'Building the distribution ...'> (${ Id.VSub_Name NORMAL))}
    )
    (C {<make>} {<-j3>} {<dist>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TARBALL)
          op: assign_op.Equal
          rhs: {<mesos-> (${ Id.VSub_Name VERSION) <.tar.gz>}
          spids: [364]
        )
      ]
    )
    (C {<echo>} {(DQ (${ Id.VSub_Name GREEN) <'Signing the distribution ...'> (${ Id.VSub_Name NORMAL))})
    (C {<gpg>} {<--armor>} {<--output>} {(${ Id.VSub_Name TARBALL) <.asc>} {<--detach-sig>} 
      {(${ Id.VSub_Name TARBALL)}
    )
    (C {<echo>} {(DQ (${ Id.VSub_Name GREEN) <'Creating a MD5 checksum...'> (${ Id.VSub_Name NORMAL))})
    (command.Simple
      words: [{<gpg>} {<--print-md>} {<MD5>} {(${ Id.VSub_Name TARBALL)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name TARBALL) <.md5>}
        )
      ]
      do_fork: T
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SVN_DEV_REPO)
          op: assign_op.Equal
          rhs: {(DQ <'https://dist.apache.org/repos/dist/dev/mesos'>)}
          spids: [440]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SVN_DEV_LOCAL)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name WORK_DIR) <'/dev'>)}
          spids: [445]
        )
      ]
    )
    (C {<echo>} 
      {(DQ (${ Id.VSub_Name GREEN) <'Checking out svn dev repo ...'> (${ Id.VSub_Name NORMAL))}
    )
    (C {<svn>} {<co>} {<--depth> <Id.Lit_Equals '='> <empty>} {(${ Id.VSub_Name SVN_DEV_REPO)} 
      {(${ Id.VSub_Name SVN_DEV_LOCAL)}
    )
    (C {<echo>} {(DQ (${ Id.VSub_Name GREEN) <'Uploading the artifacts (the distribution,'>)} 
      {(DQ <'signature, and MD5) ...'> (${ Id.VSub_Name NORMAL))}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RELEASE_DIRECTORY)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name SVN_DEV_LOCAL) <'/'> (${ Id.VSub_Name TAG))}
          spids: [509]
        )
      ]
    )
    (C {<mkdir>} {(${ Id.VSub_Name RELEASE_DIRECTORY)})
    (C {<mv>} {(${ Id.VSub_Name TARBALL)} {(${ Id.VSub_Name TARBALL) <.asc>} 
      {(${ Id.VSub_Name TARBALL) <.md5>} {(${ Id.VSub_Name RELEASE_DIRECTORY)}
    )
    (C {<popd>})
    (C {<popd>})
    (C {<pushd>} {(${ Id.VSub_Name SVN_DEV_LOCAL)})
    (C {<svn>} {<add>} {(${ Id.VSub_Name TAG)})
    (C {<svn>} {<commit>} {<-m>} {(DQ <'Adding mesos-'> (${ Id.VSub_Name TAG) <.>)})
    (C {<popd>})
    (C {<popd>})
    (C {<echo>} 
      {
        (DQ (${ Id.VSub_Name GREEN) <'Success! Now send the following VOTE email ...'> 
          (${ Id.VSub_Name NORMAL)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MESSAGE)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    words: [{<cat>}]
                    redirects: [
                      (redir
                        op: <Id.Redir_DLess '<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: 
                          (redir_param.HereDoc
                            here_begin: {<__EOF__>}
                            here_end_span_id: 752
                            stdin_parts: [
                              <'To: dev@mesos.apache.org, user@mesos.apache.org\n'>
                              <'Subject: [VOTE] Release Apache Mesos '>
                              (${ Id.VSub_Name VERSION)
                              <' (rc'>
                              (${ Id.VSub_Name CANDIDATE)
                              <')\n'>
                              <'\n'>
                              <'Hi all,\n'>
                              <'\n'>
                              <'Please vote on releasing the following candidate as Apache Mesos '>
                              (${ Id.VSub_Name VERSION)
                              <'.\n'>
                              <'\n'>
                              <'\n'>
                              (${ Id.VSub_Name VERSION)
                              <' includes the following:\n'>
                              <
'--------------------------------------------------------------------------------\n'
                              >
                              <'*****Announce major features here*****\n'>
                              <'*****Announce major bug fixes here*****\n'>
                              <'\n'>
                              <'The CHANGELOG for the release is available at:\n'>
                              <
'https://git-wip-us.apache.org/repos/asf?p=mesos.git;a=blob_plain;f=CHANGELOG;hb='
                              >
                              (${ Id.VSub_Name TAG)
                              <'\n'>
                              <
'--------------------------------------------------------------------------------\n'
                              >
                              <'\n'>
                              <'The candidate for Mesos '>
                              (${ Id.VSub_Name VERSION)
                              <' release is available at:\n'>
                              (${ Id.VSub_Name SVN_DEV_REPO)
                              <'/'>
                              (${ Id.VSub_Name TAG)
                              <'/'>
                              (${ Id.VSub_Name TARBALL)
                              <'\n'>
                              <'\n'>
                              <'The tag to be voted on is '>
                              (${ Id.VSub_Name TAG)
                              <':\n'>
                              <'https://git-wip-us.apache.org/repos/asf?p=mesos.git;a=commit;h='>
                              (${ Id.VSub_Name TAG)
                              <'\n'>
                              <'\n'>
                              <'The MD5 checksum of the tarball can be found at:\n'>
                              (${ Id.VSub_Name SVN_DEV_REPO)
                              <'/'>
                              (${ Id.VSub_Name TAG)
                              <'/'>
                              (${ Id.VSub_Name TARBALL)
                              <'.md5\n'>
                              <'\n'>
                              <'The signature of the tarball can be found at:\n'>
                              (${ Id.VSub_Name SVN_DEV_REPO)
                              <'/'>
                              (${ Id.VSub_Name TAG)
                              <'/'>
                              (${ Id.VSub_Name TARBALL)
                              <'.asc\n'>
                              <'\n'>
                              <'The PGP key used to sign the release is here:\n'>
                              <'https://dist.apache.org/repos/dist/release/mesos/KEYS\n'>
                              <'\n'>
                              <'The JAR is up in Maven in a staging repository here:\n'>
                              (${ Id.VSub_Name MAVEN_REPO)
                              <'\n'>
                              <'\n'>
                              <'Please vote on releasing this package as Apache Mesos '>
                              (${ Id.VSub_Name VERSION)
                              <'!\n'>
                              <'\n'>
                              <'The vote is open until '>
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: (C {<date>} {<-v> <Id.Lit_Other '+'> <3d>})
                              )
                              <' and passes if a majority of at least 3 +1 PMC votes are cast.\n'>
                              <'\n'>
                              <'[ ] +1 Release this package as Apache Mesos '>
                              (${ Id.VSub_Name VERSION)
                              <'\n'>
                              <'[ ] -1 Do not release this package because ...\n'>
                              <'\n'>
                              <'Thanks,\n'>
                            ]
                          )
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [616]
        )
      ]
    )
    (C {<echo>} {(DQ (${ Id.VSub_Name MESSAGE))})
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)