(CommandList
  children: [
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:GCS_BUCKET)
          op: Equal
          rhs: {(DQ ('gs://kythe-builds'))}
          spids: [45]
        )
      ]
      spids: [43]
    )
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ('usage: ') 
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [(C {(basename)} {(DQ ($ VSub_Number '$0'))})]
                        )
                      left_token: <Left_CommandSub '$('>
                      spids: [62 68]
                    ) (' cache-dir')
                  )
                }
              ]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
          ]
          spids: [55]
        )
      spids: [51 54]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolBinary op_id:BoolBinary_GlobNEqual left:{($ VSub_Pound '$#')} right:{(1)})
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})]
          spids: [16777215 91]
        )
      ]
      spids: [16777215 101]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CACHE)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(readlink)} {(-m)} {(DQ ($ VSub_Number '$1'))})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [106 114]
                )
              )
            }
          spids: [104]
        )
      ]
      spids: [104]
    )
    (C {(echo)} {(DQ ('Cache Root:      ') ($ VSub_Name '$CACHE'))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:REPO)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (C {(readlink)} {(-e)} 
                          {
                            (DQ 
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(dirname)} {(DQ ($ VSub_Number '$0'))})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [133 139]
                              ) (/..)
                            )
                          }
                        )
                      ]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [127 142]
                )
              )
            }
          spids: [125]
        )
      ]
      spids: [125]
    )
    (C {(echo)} {(DQ ('Repository Root: ') ($ VSub_Name '$REPO'))})
    (C {(.)} {(tools/modules/versions.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:NAME)
          op: Equal
          rhs: {(DQ (llvm-) (${ VSub_Name FULL_SHA))}
          spids: [157]
        )
      ]
      spids: [157]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:LLVM)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$CACHE') (/) ($ VSub_Name '$NAME'))}
          spids: [165]
        )
      ]
      spids: [165]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (LogicalNot
                      child: (BoolUnary op_id:BoolUnary_d child:{(DQ ($ VSub_Name '$LLVM'))})
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:TMP)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(mktemp)} {(-d)})])
                          left_token: <Left_CommandSub '$('>
                          spids: [193 197]
                        )
                      )
                    }
                  spids: [191]
                )
              ]
              spids: [191]
            )
            (C {(trap)} {(DQ ("rm -rf '") ($ VSub_Name '$TMP') ("'"))} {(EXIT)} {(ERR)} {(INT)})
            (C {(cd)} {(DQ ($ VSub_Name '$TMP'))})
            (C {(gsutil)} {(cp)} {(DQ (${ VSub_Name GCS_BUCKET) (/) ($ VSub_Name '$NAME') (.tar.gz))} 
              {(.)}
            )
            (C {(tar)} {(xzf)} {(DQ ($ VSub_Name '$NAME') (.tar.gz))})
            (C {(mkdir)} {(-p)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(dirname)} {(DQ ($ VSub_Name '$LLVM'))})]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [254 260]
                  )
                )
              }
            )
            (C {(mv)} {(llvm)} {(DQ ($ VSub_Name '$LLVM'))})
          ]
          spids: [16777215 188]
        )
      ]
      else_action: [(C {(echo)} {(DQ ('Reusing cached LLVM version at ') ($ VSub_Name '$LLVM'))})]
      spids: [272 282]
    )
    (C {(rm)} {(-rf)} {(DQ ($ VSub_Name '$REPO')) (/third_party/llvm/llvm)})
    (C {(cp)} {(-r)} {(DQ ($ VSub_Name '$LLVM'))} {(DQ ($ VSub_Name '$REPO')) (/third_party/llvm/llvm)})
  ]
)