(command.CommandList
  children: [
    (command.FuncDef
      name: get_variable_value
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:FILENAME spids:[25])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [25]
                )
              ]
              spids: [23]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:VARNAME spids:[31])
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [31]
                )
              ]
              spids: [29]
            )
            (command.Pipeline
              children: [
                (C {(awk)} 
                  {
                    (DQ ('\n') ('    BEGIN { start = 0; }\n') ('    /^') ($ VSub_Name '$VARNAME') 
                      (' =/ { start = 1; }\n') ('    { if (start) { print ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0; } }\n') 
                      ('    /') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
                      (word_part.EscapedLiteralPart
                        token: <Lit_EscapedChar '\\\\'>
                      ) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('/ { next; }\n') ('    { start = 0; }\n') 
                      ('  ')
                    )
                  } {($ VSub_Name '$FILENAME')}
                )
                (C {(sed)} {(DQ ('s/^') ($ VSub_Name '$VARNAME') (' =//'))})
                (C {(sed)} 
                  {
                    (DQ ('s/[ ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (']//g'))
                  }
                )
                (C {(grep)} {(-v)} 
                  {
                    (DQ ('^') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
                      (Lit_Other '$')
                    )
                  }
                )
                (C {(grep)} {(-v)} {(DQ ('^') (Lit_Other '$'))})
                (command.SimpleCommand
                  words: [{(sort)}]
                  more_env: [(env_pair name:LC_ALL val:{(C)} spids:[112])]
                )
                (C {(uniq)})
              ]
              negated: F
            )
          ]
          spids: [20]
        )
      spids: [16 19]
    )
    (command.FuncDef
      name: get_header_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [(C {(get_variable_value)} {($ VSub_At '$@')}) (C {(grep)} {(SQ <'\\.h$'>)})]
              negated: F
            )
          ]
          spids: [128]
        )
      spids: [124 127]
    )
    (command.FuncDef
      name: get_source_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(get_variable_value)} {($ VSub_At '$@')})
                (C {(grep)} {(DQ (cc) (Lit_Other '$'))})
              ]
              negated: F
            )
          ]
          spids: [150]
        )
      spids: [146 149]
    )
    (command.FuncDef
      name: get_proto_files_blacklisted
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(get_proto_files)} {($ VSub_At '$@')})
                (C {(sed)} {(SQ <'/^google\\/protobuf\\/unittest_enormous_descriptor.proto$/d'>)})
              ]
              negated: F
            )
          ]
          spids: [173]
        )
      spids: [169 172]
    )
    (command.FuncDef
      name: get_proto_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(get_variable_value)} {($ VSub_At '$@')})
                (C {(grep)} {(DQ (pb.cc) (Lit_Other '$'))})
                (C {(sed)} {(DQ (s/pb.cc/proto/))})
              ]
              negated: F
            )
          ]
          spids: [195]
        )
      spids: [191 194]
    )
    (command.FuncDef
      name: sort_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: FILE
                  iter_words: [{($ VSub_At '$@')}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [(C {(echo)} {($ VSub_Name '$FILE')})]
                      spids: [238 246]
                    )
                  spids: [234 236]
                )
                (command.SimpleCommand
                  words: [{(sort)}]
                  more_env: [(env_pair name:LC_ALL val:{(C)} spids:[250])]
                )
                (C {(uniq)})
              ]
              negated: F
            )
          ]
          spids: [226]
        )
      spids: [222 225]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:MAKEFILE spids:[262])
          op: Equal
          rhs: {(src/Makefile.am)}
          spids: [262]
        )
      ]
      spids: [262]
    )
    (command.AndOr
      ops: [Op_DPipe]
      children: [
        (C {(Lit_Other '[')} {(-f)} {(DQ ($ VSub_Name '$MAKEFILE'))} {(Lit_Other ']')})
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('Cannot find: ') ($ VSub_Name '$MAKEFILE'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [278]
        )
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:GZHEADERS spids:[299])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [(C {(get_variable_value)} {($ VSub_Name '$MAKEFILE')} {(GZHEADERS)})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [300 306]
              )
            }
          spids: [299]
        )
      ]
      spids: [299]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:HEADERS spids:[308])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_variable_value)} {($ VSub_Name '$MAKEFILE')} {(nobase_include_HEADERS)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [309 315]
              )
            }
          spids: [308]
        )
      ]
      spids: [308]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:PUBLIC_HEADERS spids:[317])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(sort_files)} {($ VSub_Name '$GZHEADERS')} {($ VSub_Name '$HEADERS')})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [318 324]
              )
            }
          spids: [317]
        )
      ]
      spids: [317]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:LIBPROTOBUF_LITE_SOURCES spids:[326])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} 
                        {(libprotobuf_lite_la_SOURCES)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [327 333]
              )
            }
          spids: [326]
        )
      ]
      spids: [326]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:LIBPROTOBUF_SOURCES spids:[335])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} {(libprotobuf_la_SOURCES)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [336 342]
              )
            }
          spids: [335]
        )
      ]
      spids: [335]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:LIBPROTOC_SOURCES spids:[344])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} {(libprotoc_la_SOURCES)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [345 351]
              )
            }
          spids: [344]
        )
      ]
      spids: [344]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:LITE_PROTOS spids:[353])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_proto_files)} {($ VSub_Name '$MAKEFILE')} {(protoc_lite_outputs)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [354 360]
              )
            }
          spids: [353]
        )
      ]
      spids: [353]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:PROTOS spids:[362])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [(C {(get_proto_files)} {($ VSub_Name '$MAKEFILE')} {(protoc_outputs)})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [363 369]
              )
            }
          spids: [362]
        )
      ]
      spids: [362]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:PROTOS_BLACKLISTED spids:[371])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_proto_files_blacklisted)} {($ VSub_Name '$MAKEFILE')} {(protoc_outputs)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [372 378]
              )
            }
          spids: [371]
        )
      ]
      spids: [371]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:WKT_PROTOS spids:[380])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_variable_value)} {($ VSub_Name '$MAKEFILE')} {(nobase_dist_proto_DATA)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [381 387]
              )
            }
          spids: [380]
        )
      ]
      spids: [380]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:COMMON_TEST_SOURCES spids:[389])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} {(COMMON_TEST_SOURCES)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [390 396]
              )
            }
          spids: [389]
        )
      ]
      spids: [389]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:COMMON_LITE_TEST_SOURCES spids:[398])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} {(COMMON_LITE_TEST_SOURCES)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [399 405]
              )
            }
          spids: [398]
        )
      ]
      spids: [398]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:TEST_SOURCES spids:[407])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} {(protobuf_test_SOURCES)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [408 414]
              )
            }
          spids: [407]
        )
      ]
      spids: [407]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:LITE_TEST_SOURCES spids:[416])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} {(protobuf_lite_test_SOURCES)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [417 423]
              )
            }
          spids: [416]
        )
      ]
      spids: [416]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:LITE_ARENA_TEST_SOURCES spids:[425])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} 
                        {(protobuf_lite_arena_test_SOURCES)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [426 432]
              )
            }
          spids: [425]
        )
      ]
      spids: [425]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:TEST_PLUGIN_SOURCES spids:[434])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ VSub_Name '$MAKEFILE')} {(test_plugin_SOURCES)})
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [435 441]
              )
            }
          spids: [434]
        )
      ]
      spids: [434]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:CMAKE_DIR spids:[454])
          op: Equal
          rhs: {(cmake)}
          spids: [454]
        )
      ]
      spids: [454]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:EXTRACT_INCLUDES_BAT spids:[457])
          op: Equal
          rhs: {(cmake/extract_includes.bat.in)}
          spids: [457]
        )
      ]
      spids: [457]
    )
    (command.AndOr
      ops: [Op_DPipe]
      children: [
        (C {(Lit_Other '[')} {(-d)} {(DQ ($ VSub_Name '$CMAKE_DIR'))} {(Lit_Other ']')})
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('Cannot find: ') ($ VSub_Name '$CMAKE_DIR'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [472]
        )
      ]
    )
    (command.AndOr
      ops: [Op_DPipe]
      children: [
        (C {(Lit_Other '[')} {(-f)} {(DQ ($ VSub_Name '$EXTRACT_INCLUDES_BAT'))} {(Lit_Other ']')})
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('Cannot find: ') ($ VSub_Name '$EXTRACT_INCLUDES_BAT'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [502]
        )
      ]
    )
    (command.FuncDef
      name: set_cmake_value
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:FILENAME spids:[529])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [529]
                )
              ]
              spids: [527]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:VARNAME spids:[535])
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [535]
                )
              ]
              spids: [533]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PREFIX spids:[541])
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [541]
                )
              ]
              spids: [539]
            )
            (C {(shift)})
            (C {(shift)})
            (C {(shift)})
            (command.SimpleCommand
              words: [
                {(awk)}
                {(-v)}
                {(Lit_VarLike 'values=') (DQ ($ VSub_Star '$*'))}
                {(-v)}
                {(Lit_VarLike 'prefix=') (DQ ($ VSub_Name '$PREFIX'))}
                {
                  (DQ ('\n') ('    BEGIN { start = 0; }\n') ('    /^set') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('(') ($ VSub_Name '$VARNAME') ('/ {\n') ('      start = 1;\n') ('      print ') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0;\n') ('      len = split(values, vlist, ') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (');\n') 
                    ('      for (i = 1; i <= len; ++i) {\n') ('        printf(') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('  %s%s') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (n) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', prefix, vlist[i]);\n') 
                    ('      }\n') ('      next;\n') ('    }\n') ('    start && /^') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (')/ {\n') ('      start = 0;\n') ('    }\n') ('    !start {\n') ('      print ') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0;\n') ('    }\n') ('  ')
                  )
                }
                {($ VSub_Name '$FILENAME')}
              ]
              redirects: [
                (redir.Redir
                  op: <Redir_Great '>'>
                  fd: 16777215
                  arg_word: {(/tmp/) ($ VSub_Dollar '$$')}
                )
              ]
            )
            (C {(cp)} {(/tmp/) ($ VSub_Dollar '$$')} {($ VSub_Name '$FILENAME')})
          ]
          spids: [524]
        )
      spids: [520 523]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:CMAKE_PREFIX spids:[633])
          op: Equal
          rhs: 
            {
              (DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                ('{protobuf_source_dir}/src/')
              )
            }
          spids: [633]
        )
      ]
      spids: [633]
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/libprotobuf-lite.cmake)} 
      {(libprotobuf_lite_files)} {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$LIBPROTOBUF_LITE_SOURCES')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/libprotobuf.cmake)} {(libprotobuf_files)} 
      {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$LIBPROTOBUF_SOURCES')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/libprotoc.cmake)} {(libprotoc_files)} 
      {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$LIBPROTOC_SOURCES')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/tests.cmake)} {(lite_test_protos)} {(DQ )} 
      {($ VSub_Name '$LITE_PROTOS')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/tests.cmake)} {(tests_protos)} {(DQ )} 
      {($ VSub_Name '$PROTOS_BLACKLISTED')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/tests.cmake)} {(common_test_files)} 
      {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$COMMON_TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/tests.cmake)} {(common_lite_test_files)} 
      {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$COMMON_LITE_TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/tests.cmake)} {(tests_files)} 
      {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/tests.cmake)} {(lite_test_files)} 
      {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$LITE_TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ VSub_Name '$CMAKE_DIR') (/tests.cmake)} {(lite_arena_test_files)} 
      {($ VSub_Name '$CMAKE_PREFIX')} {($ VSub_Name '$LITE_ARENA_TEST_SOURCES')}
    )
    (command.SimpleCommand
      words: [{(echo)} {(DQ ('mkdir include'))}]
      redirects: [
        (redir.Redir
          op: <Redir_Great '>'>
          fd: 16777215
          arg_word: {($ VSub_Name '$EXTRACT_INCLUDES_BAT')}
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.ForEach
          iter_name: HEADER
          iter_words: [{($ VSub_Name '$PUBLIC_HEADERS')}]
          do_arg_iter: F
          body: 
            (command.DoGroup
              children: [
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:HEADER_DIR spids:[777])
                      op: Equal
                      rhs: 
                        {
                          (word_part.CommandSubPart
                            command_list: 
                              (command.CommandList
                                children: [(C {(dirname)} {($ VSub_Name '$HEADER')})]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [778 782]
                          )
                        }
                      spids: [777]
                    )
                  ]
                  spids: [777]
                )
                (command.WhileUntil
                  keyword: <KW_While while>
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(DQ ($ VSub_Name '$HEADER_DIR'))} 
                          {(Lit_Other '=')} {(DQ (.))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Pipeline
                          children: [
                            (C {(echo)} {($ VSub_Name '$HEADER_DIR')})
                            (C {(sed)} 
                              {
                                (DQ (s/) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
                                  (//) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
                                  (word_part.EscapedLiteralPart
                                    token: <Lit_EscapedChar '\\\\'>
                                  ) (/g)
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:HEADER_DIR spids:[825])
                              op: Equal
                              rhs: 
                                {
                                  (word_part.CommandSubPart
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(dirname)} {($ VSub_Name '$HEADER_DIR')})]
                                      )
                                    left_token: <Left_CommandSub '$('>
                                    spids: [826 830]
                                  )
                                }
                              spids: [825]
                            )
                          ]
                          spids: [825]
                        )
                      ]
                      spids: [804 833]
                    )
                )
              ]
              spids: [774 835]
            )
          spids: [770 772]
        )
        (C {(sort)})
        (C {(uniq)})
        (command.SimpleCommand
          words: [
            {(sed)}
            {
              (DQ ('s/^/mkdir include') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
                (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (/)
              )
            }
          ]
          redirects: [
            (redir.Redir
              op: <Redir_DGreat '>>'>
              fd: 16777215
              arg_word: {($ VSub_Name '$EXTRACT_INCLUDES_BAT')}
            )
          ]
        )
      ]
      negated: F
    )
    (command.ForEach
      iter_name: HEADER
      iter_words: [{($ VSub_Name '$PUBLIC_HEADERS')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:WINPATH spids:[872])
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {($ VSub_Name '$HEADER')})
                                  (C {(sed)} {(SQ <'s;/;\\\\;g'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [873 885]
                      )
                    }
                  spids: [872]
                )
              ]
              spids: [872]
            )
            (command.SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ('copy ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                    ('{PROTOBUF_SOURCE_WIN32_PATH}') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (..) 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (src) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ($ VSub_Name '$WINPATH') 
                    (' include') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ($ VSub_Name '$WINPATH')
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: <Redir_DGreat '>>'>
                  fd: 16777215
                  arg_word: {($ VSub_Name '$EXTRACT_INCLUDES_BAT')}
                )
              ]
            )
          ]
          spids: [869 909]
        )
      spids: [865 867]
    )
    (command.FuncDef
      name: set_bazel_value
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:FILENAME spids:[931])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [931]
                )
              ]
              spids: [929]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:VARNAME spids:[937])
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [937]
                )
              ]
              spids: [935]
            )
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PREFIX spids:[943])
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [943]
                )
              ]
              spids: [941]
            )
            (C {(shift)})
            (C {(shift)})
            (C {(shift)})
            (command.SimpleCommand
              words: [
                {(awk)}
                {(-v)}
                {(Lit_VarLike 'values=') (DQ ($ VSub_Star '$*'))}
                {(-v)}
                {(Lit_VarLike 'prefix=') (DQ ($ VSub_Name '$PREFIX'))}
                {
                  (DQ ('\n') ('    BEGIN { start = 0; }\n') ('    /# AUTOGEN') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('(') ($ VSub_Name '$VARNAME') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (')/ {\n') 
                    ('      start = 1;\n') ('      print ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0;\n') 
                    ('      # replace ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0 with indent.\n') ('      sub(/#.*/, ') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', ') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0)\n') ('      len = split(values, vlist, ') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (');\n') 
                    ('      for (i = 1; i <= len; ++i) {\n') ('        printf(') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('%s') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('%s%s') 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (',') (Lit_Other '\\') (n) 
                    (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0, prefix, vlist[i]);\n') 
                    ('      }\n') ('      next;\n') ('    }\n') ('    start && /') (Lit_Other '\\') (']/ {\n') ('      start = 0\n') 
                    ('    }\n') ('    !start {\n') ('      print ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                    ('0;\n') ('    }\n') ('  ')
                  )
                }
                {($ VSub_Name '$FILENAME')}
              ]
              redirects: [
                (redir.Redir
                  op: <Redir_Great '>'>
                  fd: 16777215
                  arg_word: {(/tmp/) ($ VSub_Dollar '$$')}
                )
              ]
            )
            (C {(cp)} {(/tmp/) ($ VSub_Dollar '$$')} {($ VSub_Name '$FILENAME')})
          ]
          spids: [926]
        )
      spids: [922 925]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:BAZEL_BUILD spids:[1050])
          op: Equal
          rhs: {(./BUILD)}
          spids: [1050]
        )
      ]
      spids: [1050]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:BAZEL_PREFIX spids:[1053])
          op: Equal
          rhs: {(DQ (src/))}
          spids: [1053]
        )
      ]
      spids: [1053]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(Lit_Other '[')} {(-f)} {(DQ ($ VSub_Name '$BAZEL_BUILD'))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(protobuf_lite_srcs)} 
              {($ VSub_Name '$BAZEL_PREFIX')} {($ VSub_Name '$LIBPROTOBUF_LITE_SOURCES')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(protobuf_srcs)} 
              {($ VSub_Name '$BAZEL_PREFIX')} {($ VSub_Name '$LIBPROTOBUF_SOURCES')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(protoc_lib_srcs)} 
              {($ VSub_Name '$BAZEL_PREFIX')} {($ VSub_Name '$LIBPROTOC_SOURCES')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(lite_test_protos)} {(DQ )} 
              {($ VSub_Name '$LITE_PROTOS')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(well_known_protos)} {(DQ )} 
              {($ VSub_Name '$WKT_PROTOS')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(test_protos)} {(DQ )} 
              {($ VSub_Name '$PROTOS')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(common_test_srcs)} 
              {($ VSub_Name '$BAZEL_PREFIX')} {($ VSub_Name '$COMMON_TEST_SOURCES')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(test_srcs)} 
              {($ VSub_Name '$BAZEL_PREFIX')} {($ VSub_Name '$TEST_SOURCES')}
            )
            (C {(set_bazel_value)} {($ VSub_Name '$BAZEL_BUILD')} {(test_plugin_srcs)} 
              {($ VSub_Name '$BAZEL_PREFIX')} {($ VSub_Name '$TEST_PLUGIN_SOURCES')}
            )
          ]
          spids: [16777215 1071]
        )
      ]
      else_action: [(C {(echo)} {(DQ ('Skipped BUILD file update.'))})]
      spids: [1175 1184]
    )
  ]
)