(command.CommandList
  children: [
    (C {<set>} {<-ex>})
    (C {<pushd>} 
      {
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          child: (C {<dirname>} {($ Id.VSub_Number '$0')})
        ) <'/..'>
      }
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$PROTOC'))} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-x>} {<'cmake/build/Debug/protoc.exe'>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:PROTOC)
                          op: assign_op.Equal
                          rhs: {<'cmake/build/Debug/protoc.exe'>}
                          spids: [74]
                        )
                      ]
                    )
                  ]
                  spids: [60 71]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-x>} {<'cmake/build/Release/protoc.exe'>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:PROTOC)
                          op: assign_op.Equal
                          rhs: {<'cmake/build/Release/protoc.exe'>}
                          spids: [92]
                        )
                      ]
                    )
                  ]
                  spids: [78 89]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-x>} {<'src/protoc'>} {<Id.Lit_RBracket ']'>})
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:PROTOC)
                          op: assign_op.Equal
                          rhs: {<'src/protoc'>}
                          spids: [110]
                        )
                      ]
                    )
                  ]
                  spids: [96 107]
                )
              ]
              else_action: [
                (C {<echo>} {(DQ <'Unable to find protocol buffer compiler.'>)})
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
          spids: [40 53]
        )
      ]
    )
    (C {($ Id.VSub_DollarName '$PROTOC')} {<-Isrc>} 
      {<--csharp_out> <Id.Lit_Equals '='> <'csharp/src/Google.Protobuf'>} {<--csharp_opt> <Id.Lit_Equals '='> <Id.Lit_VarLike 'base_namespace='> <Google.Protobuf>} 
      {<'src/google/protobuf/descriptor.proto'>} {<'src/google/protobuf/any.proto'>} {<'src/google/protobuf/api.proto'>} 
      {<'src/google/protobuf/duration.proto'>} {<'src/google/protobuf/empty.proto'>} {<'src/google/protobuf/field_mask.proto'>} 
      {<'src/google/protobuf/source_context.proto'>} {<'src/google/protobuf/struct.proto'>} {<'src/google/protobuf/timestamp.proto'>} 
      {<'src/google/protobuf/type.proto'>} {<'src/google/protobuf/wrappers.proto'>}
    )
    (C {($ Id.VSub_DollarName '$PROTOC')} {<-Isrc>} 
      {<--csharp_out> <Id.Lit_Equals '='> <'csharp/src/Google.Protobuf.Test'>} {<--csharp_opt> <Id.Lit_Equals '='> <Id.Lit_VarLike 'base_namespace='> <Google.Protobuf>} 
      {<'src/google/protobuf/map_unittest_proto3.proto'>} {<'src/google/protobuf/unittest_proto3.proto'>} {<'src/google/protobuf/unittest_import_proto3.proto'>} 
      {<'src/google/protobuf/unittest_import_public_proto3.proto'>} {<'src/google/protobuf/unittest_well_known_types.proto'>}
    )
    (C {($ Id.VSub_DollarName '$PROTOC')} {<'-Icsharp/protos'>} 
      {<--csharp_out> <Id.Lit_Equals '='> <'csharp/src/Google.Protobuf.Test'>} {<--csharp_opt> <Id.Lit_Equals '='> <Id.Lit_VarLike 'base_namespace='> <UnitTest.Issues>} 
      {<'csharp/protos/unittest_issues.proto'>}
    )
    (C {($ Id.VSub_DollarName '$PROTOC')} {<-Iexamples>} 
      {<--csharp_out> <Id.Lit_Equals '='> <'csharp/src/AddressBook'>} {<'examples/addressbook.proto'>}
    )
    (C {($ Id.VSub_DollarName '$PROTOC')} {<-Iconformance>} {<-Isrc>} 
      {<--csharp_out> <Id.Lit_Equals '='> <'csharp/src/Google.Protobuf.Conformance'>} {<'conformance/conformance.proto'>}
    )
  ]
)