(CommandList
  children: [
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-ne)} {(2)} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(EOF)}
                  here_end_span_id: 53
                  stdin_parts: [
                    ('Usage: ')
                    ($ VSub_Number '$0')
                    (' <TARGET> <VERSION_NUMBER>\n')
                    ('\n')
                    ('TARGET: protoc | protoc-gen-javalite\n')
                    ('\n')
                    ('Example:\n')
                    ('  ')
                    (Lit_Other '$')
                    (' ')
                    ($ VSub_Number '$0')
                    (' protoc 3.0.0\n')
                    ('  ')
                    (Lit_Other '$')
                    (' ')
                    ($ VSub_Number '$0')
                    (' protoc-gen-javalite 3.0.0\n')
                    ('\n')
                    (
'This script will download pre-built protoc or protoc plugin binaries from maven\n'
                    )
                    ('repository and create .zip packages suitable to be included in the github\n')
                    (
'release page. If the target is protoc, well-known type .proto files will also be\n'
                    )
                    ('included. Each invocation will create 5 zip packages:\n')
                    ('  dist/<TARGET>-<VERSION_NUMBER>-win32.zip\n')
                    ('  dist/<TARGET>-<VERSION_NUMBER>-osx-x86_32.zip\n')
                    ('  dist/<TARGET>-<VERSION_NUMBER>-osx-x86_64.zip\n')
                    ('  dist/<TARGET>-<VERSION_NUMBER>-linux-x86_32.zip\n')
                    ('  dist/<TARGET>-<VERSION_NUMBER>-linux-x86_64.zip\n')
                  ]
                )
              ]
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 17]
        )
      ]
      spids: [16777215 59]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:TARGET) op:Equal rhs:{($ VSub_Number '$1')} spids:[62])]
      spids: [62]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VERSION_NUMBER)
          op: Equal
          rhs: {($ VSub_Number '$2')}
          spids: [65]
        )
      ]
      spids: [65]
    )
    (Assignment
      keyword: Assign_Declare
      flags: [-a]
      pairs: [
        (assign_pair
          lhs: (LhsName name:FILE_NAMES)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(win32.zip)}
                  {(windows-x86_32.exe)}
                  {(osx-x86_32.zip)}
                  {(osx-x86_32.exe)}
                  {(osx-x86_64.zip)}
                  {(osx-x86_64.exe)}
                  {(linux-x86_32.zip)}
                  {(linux-x86_32.exe)}
                  {(linux-x86_64.zip)}
                  {(linux-x86_64.exe)}
                ]
              )
            }
          spids: [76]
        )
      ]
      spids: [72]
    )
    (Assignment
      keyword: Assign_Declare
      flags: [-a]
      pairs: [
        (assign_pair
          lhs: (LhsName name:WELL_KNOWN_TYPES)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(google/protobuf/descriptor.proto)}
                  {(google/protobuf/any.proto)}
                  {(google/protobuf/api.proto)}
                  {(google/protobuf/duration.proto)}
                  {(google/protobuf/empty.proto)}
                  {(google/protobuf/field_mask.proto)}
                  {(google/protobuf/source_context.proto)}
                  {(google/protobuf/struct.proto)}
                  {(google/protobuf/timestamp.proto)}
                  {(google/protobuf/type.proto)}
                  {(google/protobuf/wrappers.proto)}
                  {(google/protobuf/compiler/plugin.proto)}
                ]
              )
            }
          spids: [120]
        )
      ]
      spids: [116]
    )
    (C {(set)} {(-e)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(mktemp)} {(-d)})])
                left_token: <Left_CommandSub '$('>
                spids: [184 188]
              )
            }
          spids: [183]
        )
      ]
      spids: [183]
    )
    (C {(mkdir)} {(-p)} {(${ VSub_Name DIR) (/include/google/protobuf/compiler)})
    (ForEach
      iter_name: PROTO
      iter_words: [
        {
          (BracedVarSub
            token: <VSub_Name WELL_KNOWN_TYPES>
            bracket_op: (WholeArray op_id:Lit_At)
            spids: [209 214]
          )
        }
      ]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (C {(cp)} {(-f)} {(../src/) (${ VSub_Name PROTO)} 
              {(${ VSub_Name DIR) (/include/) (${ VSub_Name PROTO)}
            )
          ]
          spids: [217 237]
        )
      spids: [208 215]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(EOF)}
          here_end_span_id: 267
          stdin_parts: [
            ("Protocol Buffers - Google's data interchange format\n")
            ('Copyright 2008 Google Inc.\n')
            ('https://developers.google.com/protocol-buffers/\n')
            ('\n')
            ('This package contains a precompiled binary version of the protocol buffer\n')
            ('compiler (protoc). This binary is intended for users who want to use Protocol\n')
            ('Buffers in languages other than C++ but do not want to compile protoc\n')
            ('themselves. To install, simply place this binary somewhere in your PATH.\n')
            ('\n')
            ('Please refer to our official github site for more installation instructions:\n')
            ('  https://github.com/google/protobuf\n')
          ]
        )
        (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(${ VSub_Name DIR) (/readme.txt)})
      ]
    )
    (C {(mkdir)} {(-p)} {(dist)})
    (C {(mkdir)} {(-p)} {(${ VSub_Name DIR) (/bin)})
    (ForExpr
      init: (BinaryAssign op_id:Arith_Equal left:(LhsName name:i) right:(ArithWord w:{(Lit_Digits 0)}))
      cond: 
        (ArithBinary
          op_id: Arith_Less
          left: (ArithVarRef name:i)
          right: 
            (ArithWord
              w: 
                {
                  (BracedVarSub
                    token: <VSub_Name FILE_NAMES>
                    prefix_op: VSub_Pound
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [295 301]
                  )
                }
            )
        )
      update: 
        (BinaryAssign
          op_id: Arith_PlusEqual
          left: (LhsName name:i)
          right: (ArithWord w:{(Lit_Digits 2)})
        )
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ZIP_NAME)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name FILE_NAMES>
                        bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name '$i')}))
                        spids: [313 318]
                      )
                    }
                  spids: [312]
                )
              ]
              spids: [312]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (BracedVarSub
                              token: <VSub_Name ZIP_NAME>
                              suffix_op: 
                                (Slice
                                  begin: (ArithWord w:{(Lit_Digits 0)})
                                  length: (ArithWord w:{(Lit_Digits 3)})
                                )
                              spids: [325 331]
                            )
                          } {(Lit_Other '=')} {(DQ (win))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BINARY)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$TARGET') (.exe))}
                          spids: [345]
                        )
                      ]
                      spids: [345]
                    )
                  ]
                  spids: [16777215 342]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:BINARY)
                      op: Equal
                      rhs: {(DQ ($ VSub_Name '$TARGET'))}
                      spids: [355]
                    )
                  ]
                  spids: [355]
                )
              ]
              spids: [352 361]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BINARY_NAME)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name FILE_NAMES>
                        bracket_op: 
                          (ArrayIndex
                            expr: 
                              (ArithWord
                                w: 
                                  {
                                    (ArithSubPart
                                      anode: 
                                        (ArithBinary
                                          op_id: Arith_Plus
                                          left: (ArithWord w:{($ VSub_Name '$i')})
                                          right: (ArithWord w:{(Lit_Digits 1)})
                                        )
                                      spids: [368 373]
                                    )
                                  }
                              )
                          )
                        spids: [365 375]
                      )
                    }
                  spids: [364]
                )
              ]
              spids: [364]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BINARY_URL)
                  op: Equal
                  rhs: 
                    {(http) (Lit_Other ':') (//repo1.maven.org/maven2/com/google/protobuf/) 
                      ($ VSub_Name '$TARGET') (/) (${ VSub_Name VERSION_NUMBER) (/) ($ VSub_Name '$TARGET') (-) (${ VSub_Name VERSION_NUMBER) (-) 
                      (${ VSub_Name BINARY_NAME)
                    }
                  spids: [378]
                )
              ]
              spids: [378]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [
                                {(wget)}
                                {(${ VSub_Name BINARY_URL)}
                                {(-O)}
                                {(${ VSub_Name DIR) (/bin/) ($ VSub_Name '$BINARY')}
                              ]
                              redirects: [
                                (Redir
                                  op: <Redir_AndGreat '&>'>
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ('[ERROR] Failed to download ') (${ VSub_Name BINARY_URL))}]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ('[ERROR] Skipped ') ($ VSub_Name '$TARGET') (-) 
                            (${ VSub_Name VERSION_NAME) (-) (${ VSub_Name ZIP_NAME)
                          )
                        }
                      ]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [16777215 422]
                )
              ]
              spids: [16777215 460]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:TARGET_ZIP_FILE)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(pwd)})])
                        left_token: <Left_Backtick '`'>
                        spids: [464 466]
                      ) (/dist/) ($ VSub_Name '$TARGET') (-) (${ VSub_Name VERSION_NUMBER) (-) (${ VSub_Name ZIP_NAME)
                    }
                  spids: [463]
                )
              ]
              spids: [463]
            )
            (SimpleCommand
              words: [{(pushd)} {($ VSub_Name '$DIR')}]
              redirects: [(Redir op:<Redir_AndGreat '&>'> fd:16777215 arg_word:{(/dev/null)})]
            )
            (C {(chmod)} {(Lit_Other '+') (x)} {(bin/) ($ VSub_Name '$BINARY')})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$TARGET'))} {(Lit_Other '=')} 
                          {(DQ (protoc))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(zip)}
                        {(-r)}
                        {(${ VSub_Name TARGET_ZIP_FILE)}
                        {(include)}
                        {(bin)}
                        {(readme.txt)}
                      ]
                      redirects: [(Redir op:<Redir_AndGreat '&>'> fd:16777215 arg_word:{(/dev/null)})]
                    )
                  ]
                  spids: [16777215 514]
                )
              ]
              else_action: [
                (SimpleCommand
                  words: [{(zip)} {(-r)} {(${ VSub_Name TARGET_ZIP_FILE)} {(bin)}]
                  redirects: [(Redir op:<Redir_AndGreat '&>'> fd:16777215 arg_word:{(/dev/null)})]
                )
              ]
              spids: [536 554]
            )
            (C {(rm)} {(bin/) ($ VSub_Name '$BINARY')})
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op:<Redir_AndGreat '&>'> fd:16777215 arg_word:{(/dev/null)})]
            )
            (C {(echo)} {(DQ ('[INFO] Successfully created ') (${ VSub_Name TARGET_ZIP_FILE))})
          ]
          spids: [309 579]
        )
    )
  ]
)