// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: build/bazel/remote/execution/v2/remote_execution.proto

package build.bazel.remote.execution.v2;

/**
 * <pre>
 * An ActionResult represents the result of an
 * [Action][build.bazel.remote.execution.v2.Action] being run.
 * </pre>
 *
 * Protobuf type {@code build.bazel.remote.execution.v2.ActionResult}
 */
public  final class ActionResult extends
    com.google.protobuf.GeneratedMessageV3 implements
    // @@protoc_insertion_point(message_implements:build.bazel.remote.execution.v2.ActionResult)
    ActionResultOrBuilder {
private static final long serialVersionUID = 0L;
  // Use ActionResult.newBuilder() to construct.
  private ActionResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
    super(builder);
  }
  private ActionResult() {
    outputFiles_ = java.util.Collections.emptyList();
    outputFileSymlinks_ = java.util.Collections.emptyList();
    outputDirectories_ = java.util.Collections.emptyList();
    outputDirectorySymlinks_ = java.util.Collections.emptyList();
    exitCode_ = 0;
    stdoutRaw_ = com.google.protobuf.ByteString.EMPTY;
    stderrRaw_ = com.google.protobuf.ByteString.EMPTY;
  }

  @java.lang.Override
  public final com.google.protobuf.UnknownFieldSet
  getUnknownFields() {
    return this.unknownFields;
  }
  private ActionResult(
      com.google.protobuf.CodedInputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    this();
    if (extensionRegistry == null) {
      throw new java.lang.NullPointerException();
    }
    int mutable_bitField0_ = 0;
    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
        com.google.protobuf.UnknownFieldSet.newBuilder();
    try {
      boolean done = false;
      while (!done) {
        int tag = input.readTag();
        switch (tag) {
          case 0:
            done = true;
            break;
          case 18: {
            if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
              outputFiles_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputFile>();
              mutable_bitField0_ |= 0x00000001;
            }
            outputFiles_.add(
                input.readMessage(build.bazel.remote.execution.v2.OutputFile.parser(), extensionRegistry));
            break;
          }
          case 26: {
            if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
              outputDirectories_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputDirectory>();
              mutable_bitField0_ |= 0x00000004;
            }
            outputDirectories_.add(
                input.readMessage(build.bazel.remote.execution.v2.OutputDirectory.parser(), extensionRegistry));
            break;
          }
          case 32: {

            exitCode_ = input.readInt32();
            break;
          }
          case 42: {

            stdoutRaw_ = input.readBytes();
            break;
          }
          case 50: {
            build.bazel.remote.execution.v2.Digest.Builder subBuilder = null;
            if (stdoutDigest_ != null) {
              subBuilder = stdoutDigest_.toBuilder();
            }
            stdoutDigest_ = input.readMessage(build.bazel.remote.execution.v2.Digest.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(stdoutDigest_);
              stdoutDigest_ = subBuilder.buildPartial();
            }

            break;
          }
          case 58: {

            stderrRaw_ = input.readBytes();
            break;
          }
          case 66: {
            build.bazel.remote.execution.v2.Digest.Builder subBuilder = null;
            if (stderrDigest_ != null) {
              subBuilder = stderrDigest_.toBuilder();
            }
            stderrDigest_ = input.readMessage(build.bazel.remote.execution.v2.Digest.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(stderrDigest_);
              stderrDigest_ = subBuilder.buildPartial();
            }

            break;
          }
          case 74: {
            build.bazel.remote.execution.v2.ExecutedActionMetadata.Builder subBuilder = null;
            if (executionMetadata_ != null) {
              subBuilder = executionMetadata_.toBuilder();
            }
            executionMetadata_ = input.readMessage(build.bazel.remote.execution.v2.ExecutedActionMetadata.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(executionMetadata_);
              executionMetadata_ = subBuilder.buildPartial();
            }

            break;
          }
          case 82: {
            if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
              outputFileSymlinks_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputSymlink>();
              mutable_bitField0_ |= 0x00000002;
            }
            outputFileSymlinks_.add(
                input.readMessage(build.bazel.remote.execution.v2.OutputSymlink.parser(), extensionRegistry));
            break;
          }
          case 90: {
            if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
              outputDirectorySymlinks_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputSymlink>();
              mutable_bitField0_ |= 0x00000008;
            }
            outputDirectorySymlinks_.add(
                input.readMessage(build.bazel.remote.execution.v2.OutputSymlink.parser(), extensionRegistry));
            break;
          }
          default: {
            if (!parseUnknownFieldProto3(
                input, unknownFields, extensionRegistry, tag)) {
              done = true;
            }
            break;
          }
        }
      }
    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
      throw e.setUnfinishedMessage(this);
    } catch (java.io.IOException e) {
      throw new com.google.protobuf.InvalidProtocolBufferException(
          e).setUnfinishedMessage(this);
    } finally {
      if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
        outputFiles_ = java.util.Collections.unmodifiableList(outputFiles_);
      }
      if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
        outputDirectories_ = java.util.Collections.unmodifiableList(outputDirectories_);
      }
      if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
        outputFileSymlinks_ = java.util.Collections.unmodifiableList(outputFileSymlinks_);
      }
      if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
        outputDirectorySymlinks_ = java.util.Collections.unmodifiableList(outputDirectorySymlinks_);
      }
      this.unknownFields = unknownFields.build();
      makeExtensionsImmutable();
    }
  }
  public static final com.google.protobuf.Descriptors.Descriptor
      getDescriptor() {
    return build.bazel.remote.execution.v2.RemoteExecutionProto.internal_static_build_bazel_remote_execution_v2_ActionResult_descriptor;
  }

  @java.lang.Override
  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return build.bazel.remote.execution.v2.RemoteExecutionProto.internal_static_build_bazel_remote_execution_v2_ActionResult_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            build.bazel.remote.execution.v2.ActionResult.class, build.bazel.remote.execution.v2.ActionResult.Builder.class);
  }

  private int bitField0_;
  public static final int OUTPUT_FILES_FIELD_NUMBER = 2;
  private java.util.List<build.bazel.remote.execution.v2.OutputFile> outputFiles_;
  /**
   * <pre>
   * The output files of the action. For each output file requested in the
   * `output_files` field of the Action, if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the output_file_symlinks field, if the file was a symbolic link to
   * another file.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
   */
  public java.util.List<build.bazel.remote.execution.v2.OutputFile> getOutputFilesList() {
    return outputFiles_;
  }
  /**
   * <pre>
   * The output files of the action. For each output file requested in the
   * `output_files` field of the Action, if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the output_file_symlinks field, if the file was a symbolic link to
   * another file.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
   */
  public java.util.List<? extends build.bazel.remote.execution.v2.OutputFileOrBuilder> 
      getOutputFilesOrBuilderList() {
    return outputFiles_;
  }
  /**
   * <pre>
   * The output files of the action. For each output file requested in the
   * `output_files` field of the Action, if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the output_file_symlinks field, if the file was a symbolic link to
   * another file.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
   */
  public int getOutputFilesCount() {
    return outputFiles_.size();
  }
  /**
   * <pre>
   * The output files of the action. For each output file requested in the
   * `output_files` field of the Action, if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the output_file_symlinks field, if the file was a symbolic link to
   * another file.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
   */
  public build.bazel.remote.execution.v2.OutputFile getOutputFiles(int index) {
    return outputFiles_.get(index);
  }
  /**
   * <pre>
   * The output files of the action. For each output file requested in the
   * `output_files` field of the Action, if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the output_file_symlinks field, if the file was a symbolic link to
   * another file.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
   */
  public build.bazel.remote.execution.v2.OutputFileOrBuilder getOutputFilesOrBuilder(
      int index) {
    return outputFiles_.get(index);
  }

  public static final int OUTPUT_FILE_SYMLINKS_FIELD_NUMBER = 10;
  private java.util.List<build.bazel.remote.execution.v2.OutputSymlink> outputFileSymlinks_;
  /**
   * <pre>
   * The output files of the action that are symbolic links to other files. Those
   * may be links to other output files, or input files, or even absolute paths
   * outside of the working directory, if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output file requested in the `output_files` field of the Action,
   * if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_files` field, if the file was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
   */
  public java.util.List<build.bazel.remote.execution.v2.OutputSymlink> getOutputFileSymlinksList() {
    return outputFileSymlinks_;
  }
  /**
   * <pre>
   * The output files of the action that are symbolic links to other files. Those
   * may be links to other output files, or input files, or even absolute paths
   * outside of the working directory, if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output file requested in the `output_files` field of the Action,
   * if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_files` field, if the file was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
   */
  public java.util.List<? extends build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> 
      getOutputFileSymlinksOrBuilderList() {
    return outputFileSymlinks_;
  }
  /**
   * <pre>
   * The output files of the action that are symbolic links to other files. Those
   * may be links to other output files, or input files, or even absolute paths
   * outside of the working directory, if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output file requested in the `output_files` field of the Action,
   * if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_files` field, if the file was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
   */
  public int getOutputFileSymlinksCount() {
    return outputFileSymlinks_.size();
  }
  /**
   * <pre>
   * The output files of the action that are symbolic links to other files. Those
   * may be links to other output files, or input files, or even absolute paths
   * outside of the working directory, if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output file requested in the `output_files` field of the Action,
   * if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_files` field, if the file was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
   */
  public build.bazel.remote.execution.v2.OutputSymlink getOutputFileSymlinks(int index) {
    return outputFileSymlinks_.get(index);
  }
  /**
   * <pre>
   * The output files of the action that are symbolic links to other files. Those
   * may be links to other output files, or input files, or even absolute paths
   * outside of the working directory, if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output file requested in the `output_files` field of the Action,
   * if the corresponding file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_files` field, if the file was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * directory where a regular file is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
   */
  public build.bazel.remote.execution.v2.OutputSymlinkOrBuilder getOutputFileSymlinksOrBuilder(
      int index) {
    return outputFileSymlinks_.get(index);
  }

  public static final int OUTPUT_DIRECTORIES_FIELD_NUMBER = 3;
  private java.util.List<build.bazel.remote.execution.v2.OutputDirectory> outputDirectories_;
  /**
   * <pre>
   * The output directories of the action. For each output directory requested
   * in the `output_directories` field of the Action, if the corresponding
   * directory existed after the action completed, a single entry will be
   * present in the output list, which will contain the digest of a
   * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
   * directory tree, and the path equal exactly to the corresponding Action
   * output_directories member.
   * As an example, suppose the Action had an output directory `a/b/dir` and the
   * execution produced the following contents in `a/b/dir`: a file named `bar`
   * and a directory named `foo` with an executable file named `baz`. Then,
   * output_directory will contain (hashes shortened for readability):
   * ```json
   * // OutputDirectory proto:
   * {
   *   path: "a/b/dir"
   *   tree_digest: {
   *     hash: "4a73bc9d03...",
   *     size: 55
   *   }
   * }
   * // Tree proto with hash "4a73bc9d03..." and size 55:
   * {
   *   root: {
   *     files: [
   *       {
   *         name: "bar",
   *         digest: {
   *           hash: "4a73bc9d03...",
   *           size: 65534
   *         }
   *       }
   *     ],
   *     directories: [
   *       {
   *         name: "foo",
   *         digest: {
   *           hash: "4cf2eda940...",
   *           size: 43
   *         }
   *       }
   *     ]
   *   }
   *   children : {
   *     // (Directory proto with hash "4cf2eda940..." and size 43)
   *     files: [
   *       {
   *         name: "baz",
   *         digest: {
   *           hash: "b2c941073e...",
   *           size: 1294,
   *         },
   *         is_executable: true
   *       }
   *     ]
   *   }
   * }
   * ```
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
   */
  public java.util.List<build.bazel.remote.execution.v2.OutputDirectory> getOutputDirectoriesList() {
    return outputDirectories_;
  }
  /**
   * <pre>
   * The output directories of the action. For each output directory requested
   * in the `output_directories` field of the Action, if the corresponding
   * directory existed after the action completed, a single entry will be
   * present in the output list, which will contain the digest of a
   * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
   * directory tree, and the path equal exactly to the corresponding Action
   * output_directories member.
   * As an example, suppose the Action had an output directory `a/b/dir` and the
   * execution produced the following contents in `a/b/dir`: a file named `bar`
   * and a directory named `foo` with an executable file named `baz`. Then,
   * output_directory will contain (hashes shortened for readability):
   * ```json
   * // OutputDirectory proto:
   * {
   *   path: "a/b/dir"
   *   tree_digest: {
   *     hash: "4a73bc9d03...",
   *     size: 55
   *   }
   * }
   * // Tree proto with hash "4a73bc9d03..." and size 55:
   * {
   *   root: {
   *     files: [
   *       {
   *         name: "bar",
   *         digest: {
   *           hash: "4a73bc9d03...",
   *           size: 65534
   *         }
   *       }
   *     ],
   *     directories: [
   *       {
   *         name: "foo",
   *         digest: {
   *           hash: "4cf2eda940...",
   *           size: 43
   *         }
   *       }
   *     ]
   *   }
   *   children : {
   *     // (Directory proto with hash "4cf2eda940..." and size 43)
   *     files: [
   *       {
   *         name: "baz",
   *         digest: {
   *           hash: "b2c941073e...",
   *           size: 1294,
   *         },
   *         is_executable: true
   *       }
   *     ]
   *   }
   * }
   * ```
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
   */
  public java.util.List<? extends build.bazel.remote.execution.v2.OutputDirectoryOrBuilder> 
      getOutputDirectoriesOrBuilderList() {
    return outputDirectories_;
  }
  /**
   * <pre>
   * The output directories of the action. For each output directory requested
   * in the `output_directories` field of the Action, if the corresponding
   * directory existed after the action completed, a single entry will be
   * present in the output list, which will contain the digest of a
   * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
   * directory tree, and the path equal exactly to the corresponding Action
   * output_directories member.
   * As an example, suppose the Action had an output directory `a/b/dir` and the
   * execution produced the following contents in `a/b/dir`: a file named `bar`
   * and a directory named `foo` with an executable file named `baz`. Then,
   * output_directory will contain (hashes shortened for readability):
   * ```json
   * // OutputDirectory proto:
   * {
   *   path: "a/b/dir"
   *   tree_digest: {
   *     hash: "4a73bc9d03...",
   *     size: 55
   *   }
   * }
   * // Tree proto with hash "4a73bc9d03..." and size 55:
   * {
   *   root: {
   *     files: [
   *       {
   *         name: "bar",
   *         digest: {
   *           hash: "4a73bc9d03...",
   *           size: 65534
   *         }
   *       }
   *     ],
   *     directories: [
   *       {
   *         name: "foo",
   *         digest: {
   *           hash: "4cf2eda940...",
   *           size: 43
   *         }
   *       }
   *     ]
   *   }
   *   children : {
   *     // (Directory proto with hash "4cf2eda940..." and size 43)
   *     files: [
   *       {
   *         name: "baz",
   *         digest: {
   *           hash: "b2c941073e...",
   *           size: 1294,
   *         },
   *         is_executable: true
   *       }
   *     ]
   *   }
   * }
   * ```
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
   */
  public int getOutputDirectoriesCount() {
    return outputDirectories_.size();
  }
  /**
   * <pre>
   * The output directories of the action. For each output directory requested
   * in the `output_directories` field of the Action, if the corresponding
   * directory existed after the action completed, a single entry will be
   * present in the output list, which will contain the digest of a
   * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
   * directory tree, and the path equal exactly to the corresponding Action
   * output_directories member.
   * As an example, suppose the Action had an output directory `a/b/dir` and the
   * execution produced the following contents in `a/b/dir`: a file named `bar`
   * and a directory named `foo` with an executable file named `baz`. Then,
   * output_directory will contain (hashes shortened for readability):
   * ```json
   * // OutputDirectory proto:
   * {
   *   path: "a/b/dir"
   *   tree_digest: {
   *     hash: "4a73bc9d03...",
   *     size: 55
   *   }
   * }
   * // Tree proto with hash "4a73bc9d03..." and size 55:
   * {
   *   root: {
   *     files: [
   *       {
   *         name: "bar",
   *         digest: {
   *           hash: "4a73bc9d03...",
   *           size: 65534
   *         }
   *       }
   *     ],
   *     directories: [
   *       {
   *         name: "foo",
   *         digest: {
   *           hash: "4cf2eda940...",
   *           size: 43
   *         }
   *       }
   *     ]
   *   }
   *   children : {
   *     // (Directory proto with hash "4cf2eda940..." and size 43)
   *     files: [
   *       {
   *         name: "baz",
   *         digest: {
   *           hash: "b2c941073e...",
   *           size: 1294,
   *         },
   *         is_executable: true
   *       }
   *     ]
   *   }
   * }
   * ```
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
   */
  public build.bazel.remote.execution.v2.OutputDirectory getOutputDirectories(int index) {
    return outputDirectories_.get(index);
  }
  /**
   * <pre>
   * The output directories of the action. For each output directory requested
   * in the `output_directories` field of the Action, if the corresponding
   * directory existed after the action completed, a single entry will be
   * present in the output list, which will contain the digest of a
   * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
   * directory tree, and the path equal exactly to the corresponding Action
   * output_directories member.
   * As an example, suppose the Action had an output directory `a/b/dir` and the
   * execution produced the following contents in `a/b/dir`: a file named `bar`
   * and a directory named `foo` with an executable file named `baz`. Then,
   * output_directory will contain (hashes shortened for readability):
   * ```json
   * // OutputDirectory proto:
   * {
   *   path: "a/b/dir"
   *   tree_digest: {
   *     hash: "4a73bc9d03...",
   *     size: 55
   *   }
   * }
   * // Tree proto with hash "4a73bc9d03..." and size 55:
   * {
   *   root: {
   *     files: [
   *       {
   *         name: "bar",
   *         digest: {
   *           hash: "4a73bc9d03...",
   *           size: 65534
   *         }
   *       }
   *     ],
   *     directories: [
   *       {
   *         name: "foo",
   *         digest: {
   *           hash: "4cf2eda940...",
   *           size: 43
   *         }
   *       }
   *     ]
   *   }
   *   children : {
   *     // (Directory proto with hash "4cf2eda940..." and size 43)
   *     files: [
   *       {
   *         name: "baz",
   *         digest: {
   *           hash: "b2c941073e...",
   *           size: 1294,
   *         },
   *         is_executable: true
   *       }
   *     ]
   *   }
   * }
   * ```
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
   */
  public build.bazel.remote.execution.v2.OutputDirectoryOrBuilder getOutputDirectoriesOrBuilder(
      int index) {
    return outputDirectories_.get(index);
  }

  public static final int OUTPUT_DIRECTORY_SYMLINKS_FIELD_NUMBER = 11;
  private java.util.List<build.bazel.remote.execution.v2.OutputSymlink> outputDirectorySymlinks_;
  /**
   * <pre>
   * The output directories of the action that are symbolic links to other
   * directories. Those may be links to other output directories, or input
   * directories, or even absolute paths outside of the working directory,
   * if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output directory requested in the `output_directories` field of
   * the Action, if the directory file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_directories` field, if the directory was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * file where a directory is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
   */
  public java.util.List<build.bazel.remote.execution.v2.OutputSymlink> getOutputDirectorySymlinksList() {
    return outputDirectorySymlinks_;
  }
  /**
   * <pre>
   * The output directories of the action that are symbolic links to other
   * directories. Those may be links to other output directories, or input
   * directories, or even absolute paths outside of the working directory,
   * if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output directory requested in the `output_directories` field of
   * the Action, if the directory file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_directories` field, if the directory was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * file where a directory is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
   */
  public java.util.List<? extends build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> 
      getOutputDirectorySymlinksOrBuilderList() {
    return outputDirectorySymlinks_;
  }
  /**
   * <pre>
   * The output directories of the action that are symbolic links to other
   * directories. Those may be links to other output directories, or input
   * directories, or even absolute paths outside of the working directory,
   * if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output directory requested in the `output_directories` field of
   * the Action, if the directory file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_directories` field, if the directory was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * file where a directory is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
   */
  public int getOutputDirectorySymlinksCount() {
    return outputDirectorySymlinks_.size();
  }
  /**
   * <pre>
   * The output directories of the action that are symbolic links to other
   * directories. Those may be links to other output directories, or input
   * directories, or even absolute paths outside of the working directory,
   * if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output directory requested in the `output_directories` field of
   * the Action, if the directory file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_directories` field, if the directory was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * file where a directory is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
   */
  public build.bazel.remote.execution.v2.OutputSymlink getOutputDirectorySymlinks(int index) {
    return outputDirectorySymlinks_.get(index);
  }
  /**
   * <pre>
   * The output directories of the action that are symbolic links to other
   * directories. Those may be links to other output directories, or input
   * directories, or even absolute paths outside of the working directory,
   * if the server supports
   * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
   * For each output directory requested in the `output_directories` field of
   * the Action, if the directory file existed after
   * the action completed, a single entry will be present either in this field,
   * or in the `output_directories` field, if the directory was not a symbolic link.
   * If the action does not produce the requested output, or produces a
   * file where a directory is expected or vice versa, then that output
   * will be omitted from the list. The server is free to arrange the output
   * list as desired; clients MUST NOT assume that the output list is sorted.
   * </pre>
   *
   * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
   */
  public build.bazel.remote.execution.v2.OutputSymlinkOrBuilder getOutputDirectorySymlinksOrBuilder(
      int index) {
    return outputDirectorySymlinks_.get(index);
  }

  public static final int EXIT_CODE_FIELD_NUMBER = 4;
  private int exitCode_;
  /**
   * <pre>
   * The exit code of the command.
   * </pre>
   *
   * <code>int32 exit_code = 4;</code>
   */
  public int getExitCode() {
    return exitCode_;
  }

  public static final int STDOUT_RAW_FIELD_NUMBER = 5;
  private com.google.protobuf.ByteString stdoutRaw_;
  /**
   * <pre>
   * The standard output buffer of the action. The server will determine, based
   * on the size of the buffer, whether to return it in raw form or to return
   * a digest in `stdout_digest` that points to the buffer. If neither is set,
   * then the buffer is empty. The client SHOULD NOT assume it will get one of
   * the raw buffer or a digest on any given request and should be prepared to
   * handle either.
   * </pre>
   *
   * <code>bytes stdout_raw = 5;</code>
   */
  public com.google.protobuf.ByteString getStdoutRaw() {
    return stdoutRaw_;
  }

  public static final int STDOUT_DIGEST_FIELD_NUMBER = 6;
  private build.bazel.remote.execution.v2.Digest stdoutDigest_;
  /**
   * <pre>
   * The digest for a blob containing the standard output of the action, which
   * can be retrieved from the
   * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
   * See `stdout_raw` for when this will be set.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
   */
  public boolean hasStdoutDigest() {
    return stdoutDigest_ != null;
  }
  /**
   * <pre>
   * The digest for a blob containing the standard output of the action, which
   * can be retrieved from the
   * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
   * See `stdout_raw` for when this will be set.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
   */
  public build.bazel.remote.execution.v2.Digest getStdoutDigest() {
    return stdoutDigest_ == null ? build.bazel.remote.execution.v2.Digest.getDefaultInstance() : stdoutDigest_;
  }
  /**
   * <pre>
   * The digest for a blob containing the standard output of the action, which
   * can be retrieved from the
   * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
   * See `stdout_raw` for when this will be set.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
   */
  public build.bazel.remote.execution.v2.DigestOrBuilder getStdoutDigestOrBuilder() {
    return getStdoutDigest();
  }

  public static final int STDERR_RAW_FIELD_NUMBER = 7;
  private com.google.protobuf.ByteString stderrRaw_;
  /**
   * <pre>
   * The standard error buffer of the action. The server will determine, based
   * on the size of the buffer, whether to return it in raw form or to return
   * a digest in `stderr_digest` that points to the buffer. If neither is set,
   * then the buffer is empty. The client SHOULD NOT assume it will get one of
   * the raw buffer or a digest on any given request and should be prepared to
   * handle either.
   * </pre>
   *
   * <code>bytes stderr_raw = 7;</code>
   */
  public com.google.protobuf.ByteString getStderrRaw() {
    return stderrRaw_;
  }

  public static final int STDERR_DIGEST_FIELD_NUMBER = 8;
  private build.bazel.remote.execution.v2.Digest stderrDigest_;
  /**
   * <pre>
   * The digest for a blob containing the standard error of the action, which
   * can be retrieved from the
   * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
   * See `stderr_raw` for when this will be set.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
   */
  public boolean hasStderrDigest() {
    return stderrDigest_ != null;
  }
  /**
   * <pre>
   * The digest for a blob containing the standard error of the action, which
   * can be retrieved from the
   * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
   * See `stderr_raw` for when this will be set.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
   */
  public build.bazel.remote.execution.v2.Digest getStderrDigest() {
    return stderrDigest_ == null ? build.bazel.remote.execution.v2.Digest.getDefaultInstance() : stderrDigest_;
  }
  /**
   * <pre>
   * The digest for a blob containing the standard error of the action, which
   * can be retrieved from the
   * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
   * See `stderr_raw` for when this will be set.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
   */
  public build.bazel.remote.execution.v2.DigestOrBuilder getStderrDigestOrBuilder() {
    return getStderrDigest();
  }

  public static final int EXECUTION_METADATA_FIELD_NUMBER = 9;
  private build.bazel.remote.execution.v2.ExecutedActionMetadata executionMetadata_;
  /**
   * <pre>
   * The details of the execution that originally produced this result.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
   */
  public boolean hasExecutionMetadata() {
    return executionMetadata_ != null;
  }
  /**
   * <pre>
   * The details of the execution that originally produced this result.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
   */
  public build.bazel.remote.execution.v2.ExecutedActionMetadata getExecutionMetadata() {
    return executionMetadata_ == null ? build.bazel.remote.execution.v2.ExecutedActionMetadata.getDefaultInstance() : executionMetadata_;
  }
  /**
   * <pre>
   * The details of the execution that originally produced this result.
   * </pre>
   *
   * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
   */
  public build.bazel.remote.execution.v2.ExecutedActionMetadataOrBuilder getExecutionMetadataOrBuilder() {
    return getExecutionMetadata();
  }

  private byte memoizedIsInitialized = -1;
  @java.lang.Override
  public final boolean isInitialized() {
    byte isInitialized = memoizedIsInitialized;
    if (isInitialized == 1) return true;
    if (isInitialized == 0) return false;

    memoizedIsInitialized = 1;
    return true;
  }

  @java.lang.Override
  public void writeTo(com.google.protobuf.CodedOutputStream output)
                      throws java.io.IOException {
    for (int i = 0; i < outputFiles_.size(); i++) {
      output.writeMessage(2, outputFiles_.get(i));
    }
    for (int i = 0; i < outputDirectories_.size(); i++) {
      output.writeMessage(3, outputDirectories_.get(i));
    }
    if (exitCode_ != 0) {
      output.writeInt32(4, exitCode_);
    }
    if (!stdoutRaw_.isEmpty()) {
      output.writeBytes(5, stdoutRaw_);
    }
    if (stdoutDigest_ != null) {
      output.writeMessage(6, getStdoutDigest());
    }
    if (!stderrRaw_.isEmpty()) {
      output.writeBytes(7, stderrRaw_);
    }
    if (stderrDigest_ != null) {
      output.writeMessage(8, getStderrDigest());
    }
    if (executionMetadata_ != null) {
      output.writeMessage(9, getExecutionMetadata());
    }
    for (int i = 0; i < outputFileSymlinks_.size(); i++) {
      output.writeMessage(10, outputFileSymlinks_.get(i));
    }
    for (int i = 0; i < outputDirectorySymlinks_.size(); i++) {
      output.writeMessage(11, outputDirectorySymlinks_.get(i));
    }
    unknownFields.writeTo(output);
  }

  @java.lang.Override
  public int getSerializedSize() {
    int size = memoizedSize;
    if (size != -1) return size;

    size = 0;
    for (int i = 0; i < outputFiles_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(2, outputFiles_.get(i));
    }
    for (int i = 0; i < outputDirectories_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(3, outputDirectories_.get(i));
    }
    if (exitCode_ != 0) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt32Size(4, exitCode_);
    }
    if (!stdoutRaw_.isEmpty()) {
      size += com.google.protobuf.CodedOutputStream
        .computeBytesSize(5, stdoutRaw_);
    }
    if (stdoutDigest_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(6, getStdoutDigest());
    }
    if (!stderrRaw_.isEmpty()) {
      size += com.google.protobuf.CodedOutputStream
        .computeBytesSize(7, stderrRaw_);
    }
    if (stderrDigest_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(8, getStderrDigest());
    }
    if (executionMetadata_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(9, getExecutionMetadata());
    }
    for (int i = 0; i < outputFileSymlinks_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(10, outputFileSymlinks_.get(i));
    }
    for (int i = 0; i < outputDirectorySymlinks_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(11, outputDirectorySymlinks_.get(i));
    }
    size += unknownFields.getSerializedSize();
    memoizedSize = size;
    return size;
  }

  @java.lang.Override
  public boolean equals(final java.lang.Object obj) {
    if (obj == this) {
     return true;
    }
    if (!(obj instanceof build.bazel.remote.execution.v2.ActionResult)) {
      return super.equals(obj);
    }
    build.bazel.remote.execution.v2.ActionResult other = (build.bazel.remote.execution.v2.ActionResult) obj;

    boolean result = true;
    result = result && getOutputFilesList()
        .equals(other.getOutputFilesList());
    result = result && getOutputFileSymlinksList()
        .equals(other.getOutputFileSymlinksList());
    result = result && getOutputDirectoriesList()
        .equals(other.getOutputDirectoriesList());
    result = result && getOutputDirectorySymlinksList()
        .equals(other.getOutputDirectorySymlinksList());
    result = result && (getExitCode()
        == other.getExitCode());
    result = result && getStdoutRaw()
        .equals(other.getStdoutRaw());
    result = result && (hasStdoutDigest() == other.hasStdoutDigest());
    if (hasStdoutDigest()) {
      result = result && getStdoutDigest()
          .equals(other.getStdoutDigest());
    }
    result = result && getStderrRaw()
        .equals(other.getStderrRaw());
    result = result && (hasStderrDigest() == other.hasStderrDigest());
    if (hasStderrDigest()) {
      result = result && getStderrDigest()
          .equals(other.getStderrDigest());
    }
    result = result && (hasExecutionMetadata() == other.hasExecutionMetadata());
    if (hasExecutionMetadata()) {
      result = result && getExecutionMetadata()
          .equals(other.getExecutionMetadata());
    }
    result = result && unknownFields.equals(other.unknownFields);
    return result;
  }

  @java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    if (getOutputFilesCount() > 0) {
      hash = (37 * hash) + OUTPUT_FILES_FIELD_NUMBER;
      hash = (53 * hash) + getOutputFilesList().hashCode();
    }
    if (getOutputFileSymlinksCount() > 0) {
      hash = (37 * hash) + OUTPUT_FILE_SYMLINKS_FIELD_NUMBER;
      hash = (53 * hash) + getOutputFileSymlinksList().hashCode();
    }
    if (getOutputDirectoriesCount() > 0) {
      hash = (37 * hash) + OUTPUT_DIRECTORIES_FIELD_NUMBER;
      hash = (53 * hash) + getOutputDirectoriesList().hashCode();
    }
    if (getOutputDirectorySymlinksCount() > 0) {
      hash = (37 * hash) + OUTPUT_DIRECTORY_SYMLINKS_FIELD_NUMBER;
      hash = (53 * hash) + getOutputDirectorySymlinksList().hashCode();
    }
    hash = (37 * hash) + EXIT_CODE_FIELD_NUMBER;
    hash = (53 * hash) + getExitCode();
    hash = (37 * hash) + STDOUT_RAW_FIELD_NUMBER;
    hash = (53 * hash) + getStdoutRaw().hashCode();
    if (hasStdoutDigest()) {
      hash = (37 * hash) + STDOUT_DIGEST_FIELD_NUMBER;
      hash = (53 * hash) + getStdoutDigest().hashCode();
    }
    hash = (37 * hash) + STDERR_RAW_FIELD_NUMBER;
    hash = (53 * hash) + getStderrRaw().hashCode();
    if (hasStderrDigest()) {
      hash = (37 * hash) + STDERR_DIGEST_FIELD_NUMBER;
      hash = (53 * hash) + getStderrDigest().hashCode();
    }
    if (hasExecutionMetadata()) {
      hash = (37 * hash) + EXECUTION_METADATA_FIELD_NUMBER;
      hash = (53 * hash) + getExecutionMetadata().hashCode();
    }
    hash = (29 * hash) + unknownFields.hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      java.nio.ByteBuffer data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      java.nio.ByteBuffer data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      com.google.protobuf.ByteString data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      byte[] data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input, extensionRegistry);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseDelimitedFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseDelimitedWithIOException(PARSER, input);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseDelimitedFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      com.google.protobuf.CodedInputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static build.bazel.remote.execution.v2.ActionResult parseFrom(
      com.google.protobuf.CodedInputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input, extensionRegistry);
  }

  @java.lang.Override
  public Builder newBuilderForType() { return newBuilder(); }
  public static Builder newBuilder() {
    return DEFAULT_INSTANCE.toBuilder();
  }
  public static Builder newBuilder(build.bazel.remote.execution.v2.ActionResult prototype) {
    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
  }
  @java.lang.Override
  public Builder toBuilder() {
    return this == DEFAULT_INSTANCE
        ? new Builder() : new Builder().mergeFrom(this);
  }

  @java.lang.Override
  protected Builder newBuilderForType(
      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
    Builder builder = new Builder(parent);
    return builder;
  }
  /**
   * <pre>
   * An ActionResult represents the result of an
   * [Action][build.bazel.remote.execution.v2.Action] being run.
   * </pre>
   *
   * Protobuf type {@code build.bazel.remote.execution.v2.ActionResult}
   */
  public static final class Builder extends
      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
      // @@protoc_insertion_point(builder_implements:build.bazel.remote.execution.v2.ActionResult)
      build.bazel.remote.execution.v2.ActionResultOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return build.bazel.remote.execution.v2.RemoteExecutionProto.internal_static_build_bazel_remote_execution_v2_ActionResult_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return build.bazel.remote.execution.v2.RemoteExecutionProto.internal_static_build_bazel_remote_execution_v2_ActionResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              build.bazel.remote.execution.v2.ActionResult.class, build.bazel.remote.execution.v2.ActionResult.Builder.class);
    }

    // Construct using build.bazel.remote.execution.v2.ActionResult.newBuilder()
    private Builder() {
      maybeForceBuilderInitialization();
    }

    private Builder(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      super(parent);
      maybeForceBuilderInitialization();
    }
    private void maybeForceBuilderInitialization() {
      if (com.google.protobuf.GeneratedMessageV3
              .alwaysUseFieldBuilders) {
        getOutputFilesFieldBuilder();
        getOutputFileSymlinksFieldBuilder();
        getOutputDirectoriesFieldBuilder();
        getOutputDirectorySymlinksFieldBuilder();
      }
    }
    @java.lang.Override
    public Builder clear() {
      super.clear();
      if (outputFilesBuilder_ == null) {
        outputFiles_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
      } else {
        outputFilesBuilder_.clear();
      }
      if (outputFileSymlinksBuilder_ == null) {
        outputFileSymlinks_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
      } else {
        outputFileSymlinksBuilder_.clear();
      }
      if (outputDirectoriesBuilder_ == null) {
        outputDirectories_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
      } else {
        outputDirectoriesBuilder_.clear();
      }
      if (outputDirectorySymlinksBuilder_ == null) {
        outputDirectorySymlinks_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
      } else {
        outputDirectorySymlinksBuilder_.clear();
      }
      exitCode_ = 0;

      stdoutRaw_ = com.google.protobuf.ByteString.EMPTY;

      if (stdoutDigestBuilder_ == null) {
        stdoutDigest_ = null;
      } else {
        stdoutDigest_ = null;
        stdoutDigestBuilder_ = null;
      }
      stderrRaw_ = com.google.protobuf.ByteString.EMPTY;

      if (stderrDigestBuilder_ == null) {
        stderrDigest_ = null;
      } else {
        stderrDigest_ = null;
        stderrDigestBuilder_ = null;
      }
      if (executionMetadataBuilder_ == null) {
        executionMetadata_ = null;
      } else {
        executionMetadata_ = null;
        executionMetadataBuilder_ = null;
      }
      return this;
    }

    @java.lang.Override
    public com.google.protobuf.Descriptors.Descriptor
        getDescriptorForType() {
      return build.bazel.remote.execution.v2.RemoteExecutionProto.internal_static_build_bazel_remote_execution_v2_ActionResult_descriptor;
    }

    @java.lang.Override
    public build.bazel.remote.execution.v2.ActionResult getDefaultInstanceForType() {
      return build.bazel.remote.execution.v2.ActionResult.getDefaultInstance();
    }

    @java.lang.Override
    public build.bazel.remote.execution.v2.ActionResult build() {
      build.bazel.remote.execution.v2.ActionResult result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    @java.lang.Override
    public build.bazel.remote.execution.v2.ActionResult buildPartial() {
      build.bazel.remote.execution.v2.ActionResult result = new build.bazel.remote.execution.v2.ActionResult(this);
      int from_bitField0_ = bitField0_;
      int to_bitField0_ = 0;
      if (outputFilesBuilder_ == null) {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          outputFiles_ = java.util.Collections.unmodifiableList(outputFiles_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.outputFiles_ = outputFiles_;
      } else {
        result.outputFiles_ = outputFilesBuilder_.build();
      }
      if (outputFileSymlinksBuilder_ == null) {
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          outputFileSymlinks_ = java.util.Collections.unmodifiableList(outputFileSymlinks_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.outputFileSymlinks_ = outputFileSymlinks_;
      } else {
        result.outputFileSymlinks_ = outputFileSymlinksBuilder_.build();
      }
      if (outputDirectoriesBuilder_ == null) {
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          outputDirectories_ = java.util.Collections.unmodifiableList(outputDirectories_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.outputDirectories_ = outputDirectories_;
      } else {
        result.outputDirectories_ = outputDirectoriesBuilder_.build();
      }
      if (outputDirectorySymlinksBuilder_ == null) {
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          outputDirectorySymlinks_ = java.util.Collections.unmodifiableList(outputDirectorySymlinks_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.outputDirectorySymlinks_ = outputDirectorySymlinks_;
      } else {
        result.outputDirectorySymlinks_ = outputDirectorySymlinksBuilder_.build();
      }
      result.exitCode_ = exitCode_;
      result.stdoutRaw_ = stdoutRaw_;
      if (stdoutDigestBuilder_ == null) {
        result.stdoutDigest_ = stdoutDigest_;
      } else {
        result.stdoutDigest_ = stdoutDigestBuilder_.build();
      }
      result.stderrRaw_ = stderrRaw_;
      if (stderrDigestBuilder_ == null) {
        result.stderrDigest_ = stderrDigest_;
      } else {
        result.stderrDigest_ = stderrDigestBuilder_.build();
      }
      if (executionMetadataBuilder_ == null) {
        result.executionMetadata_ = executionMetadata_;
      } else {
        result.executionMetadata_ = executionMetadataBuilder_.build();
      }
      result.bitField0_ = to_bitField0_;
      onBuilt();
      return result;
    }

    @java.lang.Override
    public Builder clone() {
      return (Builder) super.clone();
    }
    @java.lang.Override
    public Builder setField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        java.lang.Object value) {
      return (Builder) super.setField(field, value);
    }
    @java.lang.Override
    public Builder clearField(
        com.google.protobuf.Descriptors.FieldDescriptor field) {
      return (Builder) super.clearField(field);
    }
    @java.lang.Override
    public Builder clearOneof(
        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
      return (Builder) super.clearOneof(oneof);
    }
    @java.lang.Override
    public Builder setRepeatedField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        int index, java.lang.Object value) {
      return (Builder) super.setRepeatedField(field, index, value);
    }
    @java.lang.Override
    public Builder addRepeatedField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        java.lang.Object value) {
      return (Builder) super.addRepeatedField(field, value);
    }
    @java.lang.Override
    public Builder mergeFrom(com.google.protobuf.Message other) {
      if (other instanceof build.bazel.remote.execution.v2.ActionResult) {
        return mergeFrom((build.bazel.remote.execution.v2.ActionResult)other);
      } else {
        super.mergeFrom(other);
        return this;
      }
    }

    public Builder mergeFrom(build.bazel.remote.execution.v2.ActionResult other) {
      if (other == build.bazel.remote.execution.v2.ActionResult.getDefaultInstance()) return this;
      if (outputFilesBuilder_ == null) {
        if (!other.outputFiles_.isEmpty()) {
          if (outputFiles_.isEmpty()) {
            outputFiles_ = other.outputFiles_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureOutputFilesIsMutable();
            outputFiles_.addAll(other.outputFiles_);
          }
          onChanged();
        }
      } else {
        if (!other.outputFiles_.isEmpty()) {
          if (outputFilesBuilder_.isEmpty()) {
            outputFilesBuilder_.dispose();
            outputFilesBuilder_ = null;
            outputFiles_ = other.outputFiles_;
            bitField0_ = (bitField0_ & ~0x00000001);
            outputFilesBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getOutputFilesFieldBuilder() : null;
          } else {
            outputFilesBuilder_.addAllMessages(other.outputFiles_);
          }
        }
      }
      if (outputFileSymlinksBuilder_ == null) {
        if (!other.outputFileSymlinks_.isEmpty()) {
          if (outputFileSymlinks_.isEmpty()) {
            outputFileSymlinks_ = other.outputFileSymlinks_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureOutputFileSymlinksIsMutable();
            outputFileSymlinks_.addAll(other.outputFileSymlinks_);
          }
          onChanged();
        }
      } else {
        if (!other.outputFileSymlinks_.isEmpty()) {
          if (outputFileSymlinksBuilder_.isEmpty()) {
            outputFileSymlinksBuilder_.dispose();
            outputFileSymlinksBuilder_ = null;
            outputFileSymlinks_ = other.outputFileSymlinks_;
            bitField0_ = (bitField0_ & ~0x00000002);
            outputFileSymlinksBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getOutputFileSymlinksFieldBuilder() : null;
          } else {
            outputFileSymlinksBuilder_.addAllMessages(other.outputFileSymlinks_);
          }
        }
      }
      if (outputDirectoriesBuilder_ == null) {
        if (!other.outputDirectories_.isEmpty()) {
          if (outputDirectories_.isEmpty()) {
            outputDirectories_ = other.outputDirectories_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureOutputDirectoriesIsMutable();
            outputDirectories_.addAll(other.outputDirectories_);
          }
          onChanged();
        }
      } else {
        if (!other.outputDirectories_.isEmpty()) {
          if (outputDirectoriesBuilder_.isEmpty()) {
            outputDirectoriesBuilder_.dispose();
            outputDirectoriesBuilder_ = null;
            outputDirectories_ = other.outputDirectories_;
            bitField0_ = (bitField0_ & ~0x00000004);
            outputDirectoriesBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getOutputDirectoriesFieldBuilder() : null;
          } else {
            outputDirectoriesBuilder_.addAllMessages(other.outputDirectories_);
          }
        }
      }
      if (outputDirectorySymlinksBuilder_ == null) {
        if (!other.outputDirectorySymlinks_.isEmpty()) {
          if (outputDirectorySymlinks_.isEmpty()) {
            outputDirectorySymlinks_ = other.outputDirectorySymlinks_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureOutputDirectorySymlinksIsMutable();
            outputDirectorySymlinks_.addAll(other.outputDirectorySymlinks_);
          }
          onChanged();
        }
      } else {
        if (!other.outputDirectorySymlinks_.isEmpty()) {
          if (outputDirectorySymlinksBuilder_.isEmpty()) {
            outputDirectorySymlinksBuilder_.dispose();
            outputDirectorySymlinksBuilder_ = null;
            outputDirectorySymlinks_ = other.outputDirectorySymlinks_;
            bitField0_ = (bitField0_ & ~0x00000008);
            outputDirectorySymlinksBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getOutputDirectorySymlinksFieldBuilder() : null;
          } else {
            outputDirectorySymlinksBuilder_.addAllMessages(other.outputDirectorySymlinks_);
          }
        }
      }
      if (other.getExitCode() != 0) {
        setExitCode(other.getExitCode());
      }
      if (other.getStdoutRaw() != com.google.protobuf.ByteString.EMPTY) {
        setStdoutRaw(other.getStdoutRaw());
      }
      if (other.hasStdoutDigest()) {
        mergeStdoutDigest(other.getStdoutDigest());
      }
      if (other.getStderrRaw() != com.google.protobuf.ByteString.EMPTY) {
        setStderrRaw(other.getStderrRaw());
      }
      if (other.hasStderrDigest()) {
        mergeStderrDigest(other.getStderrDigest());
      }
      if (other.hasExecutionMetadata()) {
        mergeExecutionMetadata(other.getExecutionMetadata());
      }
      this.mergeUnknownFields(other.unknownFields);
      onChanged();
      return this;
    }

    @java.lang.Override
    public final boolean isInitialized() {
      return true;
    }

    @java.lang.Override
    public Builder mergeFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      build.bazel.remote.execution.v2.ActionResult parsedMessage = null;
      try {
        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        parsedMessage = (build.bazel.remote.execution.v2.ActionResult) e.getUnfinishedMessage();
        throw e.unwrapIOException();
      } finally {
        if (parsedMessage != null) {
          mergeFrom(parsedMessage);
        }
      }
      return this;
    }
    private int bitField0_;

    private java.util.List<build.bazel.remote.execution.v2.OutputFile> outputFiles_ =
      java.util.Collections.emptyList();
    private void ensureOutputFilesIsMutable() {
      if (!((bitField0_ & 0x00000001) == 0x00000001)) {
        outputFiles_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputFile>(outputFiles_);
        bitField0_ |= 0x00000001;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputFile, build.bazel.remote.execution.v2.OutputFile.Builder, build.bazel.remote.execution.v2.OutputFileOrBuilder> outputFilesBuilder_;

    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputFile> getOutputFilesList() {
      if (outputFilesBuilder_ == null) {
        return java.util.Collections.unmodifiableList(outputFiles_);
      } else {
        return outputFilesBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public int getOutputFilesCount() {
      if (outputFilesBuilder_ == null) {
        return outputFiles_.size();
      } else {
        return outputFilesBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public build.bazel.remote.execution.v2.OutputFile getOutputFiles(int index) {
      if (outputFilesBuilder_ == null) {
        return outputFiles_.get(index);
      } else {
        return outputFilesBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder setOutputFiles(
        int index, build.bazel.remote.execution.v2.OutputFile value) {
      if (outputFilesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputFilesIsMutable();
        outputFiles_.set(index, value);
        onChanged();
      } else {
        outputFilesBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder setOutputFiles(
        int index, build.bazel.remote.execution.v2.OutputFile.Builder builderForValue) {
      if (outputFilesBuilder_ == null) {
        ensureOutputFilesIsMutable();
        outputFiles_.set(index, builderForValue.build());
        onChanged();
      } else {
        outputFilesBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder addOutputFiles(build.bazel.remote.execution.v2.OutputFile value) {
      if (outputFilesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputFilesIsMutable();
        outputFiles_.add(value);
        onChanged();
      } else {
        outputFilesBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder addOutputFiles(
        int index, build.bazel.remote.execution.v2.OutputFile value) {
      if (outputFilesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputFilesIsMutable();
        outputFiles_.add(index, value);
        onChanged();
      } else {
        outputFilesBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder addOutputFiles(
        build.bazel.remote.execution.v2.OutputFile.Builder builderForValue) {
      if (outputFilesBuilder_ == null) {
        ensureOutputFilesIsMutable();
        outputFiles_.add(builderForValue.build());
        onChanged();
      } else {
        outputFilesBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder addOutputFiles(
        int index, build.bazel.remote.execution.v2.OutputFile.Builder builderForValue) {
      if (outputFilesBuilder_ == null) {
        ensureOutputFilesIsMutable();
        outputFiles_.add(index, builderForValue.build());
        onChanged();
      } else {
        outputFilesBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder addAllOutputFiles(
        java.lang.Iterable<? extends build.bazel.remote.execution.v2.OutputFile> values) {
      if (outputFilesBuilder_ == null) {
        ensureOutputFilesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, outputFiles_);
        onChanged();
      } else {
        outputFilesBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder clearOutputFiles() {
      if (outputFilesBuilder_ == null) {
        outputFiles_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
      } else {
        outputFilesBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public Builder removeOutputFiles(int index) {
      if (outputFilesBuilder_ == null) {
        ensureOutputFilesIsMutable();
        outputFiles_.remove(index);
        onChanged();
      } else {
        outputFilesBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public build.bazel.remote.execution.v2.OutputFile.Builder getOutputFilesBuilder(
        int index) {
      return getOutputFilesFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public build.bazel.remote.execution.v2.OutputFileOrBuilder getOutputFilesOrBuilder(
        int index) {
      if (outputFilesBuilder_ == null) {
        return outputFiles_.get(index);  } else {
        return outputFilesBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public java.util.List<? extends build.bazel.remote.execution.v2.OutputFileOrBuilder> 
         getOutputFilesOrBuilderList() {
      if (outputFilesBuilder_ != null) {
        return outputFilesBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(outputFiles_);
      }
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public build.bazel.remote.execution.v2.OutputFile.Builder addOutputFilesBuilder() {
      return getOutputFilesFieldBuilder().addBuilder(
          build.bazel.remote.execution.v2.OutputFile.getDefaultInstance());
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public build.bazel.remote.execution.v2.OutputFile.Builder addOutputFilesBuilder(
        int index) {
      return getOutputFilesFieldBuilder().addBuilder(
          index, build.bazel.remote.execution.v2.OutputFile.getDefaultInstance());
    }
    /**
     * <pre>
     * The output files of the action. For each output file requested in the
     * `output_files` field of the Action, if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the output_file_symlinks field, if the file was a symbolic link to
     * another file.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputFile output_files = 2;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputFile.Builder> 
         getOutputFilesBuilderList() {
      return getOutputFilesFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputFile, build.bazel.remote.execution.v2.OutputFile.Builder, build.bazel.remote.execution.v2.OutputFileOrBuilder> 
        getOutputFilesFieldBuilder() {
      if (outputFilesBuilder_ == null) {
        outputFilesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            build.bazel.remote.execution.v2.OutputFile, build.bazel.remote.execution.v2.OutputFile.Builder, build.bazel.remote.execution.v2.OutputFileOrBuilder>(
                outputFiles_,
                ((bitField0_ & 0x00000001) == 0x00000001),
                getParentForChildren(),
                isClean());
        outputFiles_ = null;
      }
      return outputFilesBuilder_;
    }

    private java.util.List<build.bazel.remote.execution.v2.OutputSymlink> outputFileSymlinks_ =
      java.util.Collections.emptyList();
    private void ensureOutputFileSymlinksIsMutable() {
      if (!((bitField0_ & 0x00000002) == 0x00000002)) {
        outputFileSymlinks_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputSymlink>(outputFileSymlinks_);
        bitField0_ |= 0x00000002;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputSymlink, build.bazel.remote.execution.v2.OutputSymlink.Builder, build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> outputFileSymlinksBuilder_;

    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputSymlink> getOutputFileSymlinksList() {
      if (outputFileSymlinksBuilder_ == null) {
        return java.util.Collections.unmodifiableList(outputFileSymlinks_);
      } else {
        return outputFileSymlinksBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public int getOutputFileSymlinksCount() {
      if (outputFileSymlinksBuilder_ == null) {
        return outputFileSymlinks_.size();
      } else {
        return outputFileSymlinksBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink getOutputFileSymlinks(int index) {
      if (outputFileSymlinksBuilder_ == null) {
        return outputFileSymlinks_.get(index);
      } else {
        return outputFileSymlinksBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder setOutputFileSymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink value) {
      if (outputFileSymlinksBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputFileSymlinksIsMutable();
        outputFileSymlinks_.set(index, value);
        onChanged();
      } else {
        outputFileSymlinksBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder setOutputFileSymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink.Builder builderForValue) {
      if (outputFileSymlinksBuilder_ == null) {
        ensureOutputFileSymlinksIsMutable();
        outputFileSymlinks_.set(index, builderForValue.build());
        onChanged();
      } else {
        outputFileSymlinksBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder addOutputFileSymlinks(build.bazel.remote.execution.v2.OutputSymlink value) {
      if (outputFileSymlinksBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputFileSymlinksIsMutable();
        outputFileSymlinks_.add(value);
        onChanged();
      } else {
        outputFileSymlinksBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder addOutputFileSymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink value) {
      if (outputFileSymlinksBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputFileSymlinksIsMutable();
        outputFileSymlinks_.add(index, value);
        onChanged();
      } else {
        outputFileSymlinksBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder addOutputFileSymlinks(
        build.bazel.remote.execution.v2.OutputSymlink.Builder builderForValue) {
      if (outputFileSymlinksBuilder_ == null) {
        ensureOutputFileSymlinksIsMutable();
        outputFileSymlinks_.add(builderForValue.build());
        onChanged();
      } else {
        outputFileSymlinksBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder addOutputFileSymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink.Builder builderForValue) {
      if (outputFileSymlinksBuilder_ == null) {
        ensureOutputFileSymlinksIsMutable();
        outputFileSymlinks_.add(index, builderForValue.build());
        onChanged();
      } else {
        outputFileSymlinksBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder addAllOutputFileSymlinks(
        java.lang.Iterable<? extends build.bazel.remote.execution.v2.OutputSymlink> values) {
      if (outputFileSymlinksBuilder_ == null) {
        ensureOutputFileSymlinksIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, outputFileSymlinks_);
        onChanged();
      } else {
        outputFileSymlinksBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder clearOutputFileSymlinks() {
      if (outputFileSymlinksBuilder_ == null) {
        outputFileSymlinks_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
      } else {
        outputFileSymlinksBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public Builder removeOutputFileSymlinks(int index) {
      if (outputFileSymlinksBuilder_ == null) {
        ensureOutputFileSymlinksIsMutable();
        outputFileSymlinks_.remove(index);
        onChanged();
      } else {
        outputFileSymlinksBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink.Builder getOutputFileSymlinksBuilder(
        int index) {
      return getOutputFileSymlinksFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlinkOrBuilder getOutputFileSymlinksOrBuilder(
        int index) {
      if (outputFileSymlinksBuilder_ == null) {
        return outputFileSymlinks_.get(index);  } else {
        return outputFileSymlinksBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public java.util.List<? extends build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> 
         getOutputFileSymlinksOrBuilderList() {
      if (outputFileSymlinksBuilder_ != null) {
        return outputFileSymlinksBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(outputFileSymlinks_);
      }
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink.Builder addOutputFileSymlinksBuilder() {
      return getOutputFileSymlinksFieldBuilder().addBuilder(
          build.bazel.remote.execution.v2.OutputSymlink.getDefaultInstance());
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink.Builder addOutputFileSymlinksBuilder(
        int index) {
      return getOutputFileSymlinksFieldBuilder().addBuilder(
          index, build.bazel.remote.execution.v2.OutputSymlink.getDefaultInstance());
    }
    /**
     * <pre>
     * The output files of the action that are symbolic links to other files. Those
     * may be links to other output files, or input files, or even absolute paths
     * outside of the working directory, if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output file requested in the `output_files` field of the Action,
     * if the corresponding file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_files` field, if the file was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * directory where a regular file is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_file_symlinks = 10;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputSymlink.Builder> 
         getOutputFileSymlinksBuilderList() {
      return getOutputFileSymlinksFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputSymlink, build.bazel.remote.execution.v2.OutputSymlink.Builder, build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> 
        getOutputFileSymlinksFieldBuilder() {
      if (outputFileSymlinksBuilder_ == null) {
        outputFileSymlinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            build.bazel.remote.execution.v2.OutputSymlink, build.bazel.remote.execution.v2.OutputSymlink.Builder, build.bazel.remote.execution.v2.OutputSymlinkOrBuilder>(
                outputFileSymlinks_,
                ((bitField0_ & 0x00000002) == 0x00000002),
                getParentForChildren(),
                isClean());
        outputFileSymlinks_ = null;
      }
      return outputFileSymlinksBuilder_;
    }

    private java.util.List<build.bazel.remote.execution.v2.OutputDirectory> outputDirectories_ =
      java.util.Collections.emptyList();
    private void ensureOutputDirectoriesIsMutable() {
      if (!((bitField0_ & 0x00000004) == 0x00000004)) {
        outputDirectories_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputDirectory>(outputDirectories_);
        bitField0_ |= 0x00000004;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputDirectory, build.bazel.remote.execution.v2.OutputDirectory.Builder, build.bazel.remote.execution.v2.OutputDirectoryOrBuilder> outputDirectoriesBuilder_;

    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputDirectory> getOutputDirectoriesList() {
      if (outputDirectoriesBuilder_ == null) {
        return java.util.Collections.unmodifiableList(outputDirectories_);
      } else {
        return outputDirectoriesBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public int getOutputDirectoriesCount() {
      if (outputDirectoriesBuilder_ == null) {
        return outputDirectories_.size();
      } else {
        return outputDirectoriesBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public build.bazel.remote.execution.v2.OutputDirectory getOutputDirectories(int index) {
      if (outputDirectoriesBuilder_ == null) {
        return outputDirectories_.get(index);
      } else {
        return outputDirectoriesBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder setOutputDirectories(
        int index, build.bazel.remote.execution.v2.OutputDirectory value) {
      if (outputDirectoriesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputDirectoriesIsMutable();
        outputDirectories_.set(index, value);
        onChanged();
      } else {
        outputDirectoriesBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder setOutputDirectories(
        int index, build.bazel.remote.execution.v2.OutputDirectory.Builder builderForValue) {
      if (outputDirectoriesBuilder_ == null) {
        ensureOutputDirectoriesIsMutable();
        outputDirectories_.set(index, builderForValue.build());
        onChanged();
      } else {
        outputDirectoriesBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder addOutputDirectories(build.bazel.remote.execution.v2.OutputDirectory value) {
      if (outputDirectoriesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputDirectoriesIsMutable();
        outputDirectories_.add(value);
        onChanged();
      } else {
        outputDirectoriesBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder addOutputDirectories(
        int index, build.bazel.remote.execution.v2.OutputDirectory value) {
      if (outputDirectoriesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputDirectoriesIsMutable();
        outputDirectories_.add(index, value);
        onChanged();
      } else {
        outputDirectoriesBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder addOutputDirectories(
        build.bazel.remote.execution.v2.OutputDirectory.Builder builderForValue) {
      if (outputDirectoriesBuilder_ == null) {
        ensureOutputDirectoriesIsMutable();
        outputDirectories_.add(builderForValue.build());
        onChanged();
      } else {
        outputDirectoriesBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder addOutputDirectories(
        int index, build.bazel.remote.execution.v2.OutputDirectory.Builder builderForValue) {
      if (outputDirectoriesBuilder_ == null) {
        ensureOutputDirectoriesIsMutable();
        outputDirectories_.add(index, builderForValue.build());
        onChanged();
      } else {
        outputDirectoriesBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder addAllOutputDirectories(
        java.lang.Iterable<? extends build.bazel.remote.execution.v2.OutputDirectory> values) {
      if (outputDirectoriesBuilder_ == null) {
        ensureOutputDirectoriesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, outputDirectories_);
        onChanged();
      } else {
        outputDirectoriesBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder clearOutputDirectories() {
      if (outputDirectoriesBuilder_ == null) {
        outputDirectories_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
      } else {
        outputDirectoriesBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public Builder removeOutputDirectories(int index) {
      if (outputDirectoriesBuilder_ == null) {
        ensureOutputDirectoriesIsMutable();
        outputDirectories_.remove(index);
        onChanged();
      } else {
        outputDirectoriesBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public build.bazel.remote.execution.v2.OutputDirectory.Builder getOutputDirectoriesBuilder(
        int index) {
      return getOutputDirectoriesFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public build.bazel.remote.execution.v2.OutputDirectoryOrBuilder getOutputDirectoriesOrBuilder(
        int index) {
      if (outputDirectoriesBuilder_ == null) {
        return outputDirectories_.get(index);  } else {
        return outputDirectoriesBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public java.util.List<? extends build.bazel.remote.execution.v2.OutputDirectoryOrBuilder> 
         getOutputDirectoriesOrBuilderList() {
      if (outputDirectoriesBuilder_ != null) {
        return outputDirectoriesBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(outputDirectories_);
      }
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public build.bazel.remote.execution.v2.OutputDirectory.Builder addOutputDirectoriesBuilder() {
      return getOutputDirectoriesFieldBuilder().addBuilder(
          build.bazel.remote.execution.v2.OutputDirectory.getDefaultInstance());
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public build.bazel.remote.execution.v2.OutputDirectory.Builder addOutputDirectoriesBuilder(
        int index) {
      return getOutputDirectoriesFieldBuilder().addBuilder(
          index, build.bazel.remote.execution.v2.OutputDirectory.getDefaultInstance());
    }
    /**
     * <pre>
     * The output directories of the action. For each output directory requested
     * in the `output_directories` field of the Action, if the corresponding
     * directory existed after the action completed, a single entry will be
     * present in the output list, which will contain the digest of a
     * [Tree][build.bazel.remote.execution.v2.Tree] message containing the
     * directory tree, and the path equal exactly to the corresponding Action
     * output_directories member.
     * As an example, suppose the Action had an output directory `a/b/dir` and the
     * execution produced the following contents in `a/b/dir`: a file named `bar`
     * and a directory named `foo` with an executable file named `baz`. Then,
     * output_directory will contain (hashes shortened for readability):
     * ```json
     * // OutputDirectory proto:
     * {
     *   path: "a/b/dir"
     *   tree_digest: {
     *     hash: "4a73bc9d03...",
     *     size: 55
     *   }
     * }
     * // Tree proto with hash "4a73bc9d03..." and size 55:
     * {
     *   root: {
     *     files: [
     *       {
     *         name: "bar",
     *         digest: {
     *           hash: "4a73bc9d03...",
     *           size: 65534
     *         }
     *       }
     *     ],
     *     directories: [
     *       {
     *         name: "foo",
     *         digest: {
     *           hash: "4cf2eda940...",
     *           size: 43
     *         }
     *       }
     *     ]
     *   }
     *   children : {
     *     // (Directory proto with hash "4cf2eda940..." and size 43)
     *     files: [
     *       {
     *         name: "baz",
     *         digest: {
     *           hash: "b2c941073e...",
     *           size: 1294,
     *         },
     *         is_executable: true
     *       }
     *     ]
     *   }
     * }
     * ```
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputDirectory output_directories = 3;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputDirectory.Builder> 
         getOutputDirectoriesBuilderList() {
      return getOutputDirectoriesFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputDirectory, build.bazel.remote.execution.v2.OutputDirectory.Builder, build.bazel.remote.execution.v2.OutputDirectoryOrBuilder> 
        getOutputDirectoriesFieldBuilder() {
      if (outputDirectoriesBuilder_ == null) {
        outputDirectoriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            build.bazel.remote.execution.v2.OutputDirectory, build.bazel.remote.execution.v2.OutputDirectory.Builder, build.bazel.remote.execution.v2.OutputDirectoryOrBuilder>(
                outputDirectories_,
                ((bitField0_ & 0x00000004) == 0x00000004),
                getParentForChildren(),
                isClean());
        outputDirectories_ = null;
      }
      return outputDirectoriesBuilder_;
    }

    private java.util.List<build.bazel.remote.execution.v2.OutputSymlink> outputDirectorySymlinks_ =
      java.util.Collections.emptyList();
    private void ensureOutputDirectorySymlinksIsMutable() {
      if (!((bitField0_ & 0x00000008) == 0x00000008)) {
        outputDirectorySymlinks_ = new java.util.ArrayList<build.bazel.remote.execution.v2.OutputSymlink>(outputDirectorySymlinks_);
        bitField0_ |= 0x00000008;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputSymlink, build.bazel.remote.execution.v2.OutputSymlink.Builder, build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> outputDirectorySymlinksBuilder_;

    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputSymlink> getOutputDirectorySymlinksList() {
      if (outputDirectorySymlinksBuilder_ == null) {
        return java.util.Collections.unmodifiableList(outputDirectorySymlinks_);
      } else {
        return outputDirectorySymlinksBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public int getOutputDirectorySymlinksCount() {
      if (outputDirectorySymlinksBuilder_ == null) {
        return outputDirectorySymlinks_.size();
      } else {
        return outputDirectorySymlinksBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink getOutputDirectorySymlinks(int index) {
      if (outputDirectorySymlinksBuilder_ == null) {
        return outputDirectorySymlinks_.get(index);
      } else {
        return outputDirectorySymlinksBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder setOutputDirectorySymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink value) {
      if (outputDirectorySymlinksBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputDirectorySymlinksIsMutable();
        outputDirectorySymlinks_.set(index, value);
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder setOutputDirectorySymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink.Builder builderForValue) {
      if (outputDirectorySymlinksBuilder_ == null) {
        ensureOutputDirectorySymlinksIsMutable();
        outputDirectorySymlinks_.set(index, builderForValue.build());
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder addOutputDirectorySymlinks(build.bazel.remote.execution.v2.OutputSymlink value) {
      if (outputDirectorySymlinksBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputDirectorySymlinksIsMutable();
        outputDirectorySymlinks_.add(value);
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder addOutputDirectorySymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink value) {
      if (outputDirectorySymlinksBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputDirectorySymlinksIsMutable();
        outputDirectorySymlinks_.add(index, value);
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder addOutputDirectorySymlinks(
        build.bazel.remote.execution.v2.OutputSymlink.Builder builderForValue) {
      if (outputDirectorySymlinksBuilder_ == null) {
        ensureOutputDirectorySymlinksIsMutable();
        outputDirectorySymlinks_.add(builderForValue.build());
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder addOutputDirectorySymlinks(
        int index, build.bazel.remote.execution.v2.OutputSymlink.Builder builderForValue) {
      if (outputDirectorySymlinksBuilder_ == null) {
        ensureOutputDirectorySymlinksIsMutable();
        outputDirectorySymlinks_.add(index, builderForValue.build());
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder addAllOutputDirectorySymlinks(
        java.lang.Iterable<? extends build.bazel.remote.execution.v2.OutputSymlink> values) {
      if (outputDirectorySymlinksBuilder_ == null) {
        ensureOutputDirectorySymlinksIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, outputDirectorySymlinks_);
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder clearOutputDirectorySymlinks() {
      if (outputDirectorySymlinksBuilder_ == null) {
        outputDirectorySymlinks_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public Builder removeOutputDirectorySymlinks(int index) {
      if (outputDirectorySymlinksBuilder_ == null) {
        ensureOutputDirectorySymlinksIsMutable();
        outputDirectorySymlinks_.remove(index);
        onChanged();
      } else {
        outputDirectorySymlinksBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink.Builder getOutputDirectorySymlinksBuilder(
        int index) {
      return getOutputDirectorySymlinksFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlinkOrBuilder getOutputDirectorySymlinksOrBuilder(
        int index) {
      if (outputDirectorySymlinksBuilder_ == null) {
        return outputDirectorySymlinks_.get(index);  } else {
        return outputDirectorySymlinksBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public java.util.List<? extends build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> 
         getOutputDirectorySymlinksOrBuilderList() {
      if (outputDirectorySymlinksBuilder_ != null) {
        return outputDirectorySymlinksBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(outputDirectorySymlinks_);
      }
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink.Builder addOutputDirectorySymlinksBuilder() {
      return getOutputDirectorySymlinksFieldBuilder().addBuilder(
          build.bazel.remote.execution.v2.OutputSymlink.getDefaultInstance());
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public build.bazel.remote.execution.v2.OutputSymlink.Builder addOutputDirectorySymlinksBuilder(
        int index) {
      return getOutputDirectorySymlinksFieldBuilder().addBuilder(
          index, build.bazel.remote.execution.v2.OutputSymlink.getDefaultInstance());
    }
    /**
     * <pre>
     * The output directories of the action that are symbolic links to other
     * directories. Those may be links to other output directories, or input
     * directories, or even absolute paths outside of the working directory,
     * if the server supports
     * [SymlinkAbsolutePathStrategy.ALLOWED][build.bazel.remote.execution.v2.SymlinkAbsolutePathStrategy].
     * For each output directory requested in the `output_directories` field of
     * the Action, if the directory file existed after
     * the action completed, a single entry will be present either in this field,
     * or in the `output_directories` field, if the directory was not a symbolic link.
     * If the action does not produce the requested output, or produces a
     * file where a directory is expected or vice versa, then that output
     * will be omitted from the list. The server is free to arrange the output
     * list as desired; clients MUST NOT assume that the output list is sorted.
     * </pre>
     *
     * <code>repeated .build.bazel.remote.execution.v2.OutputSymlink output_directory_symlinks = 11;</code>
     */
    public java.util.List<build.bazel.remote.execution.v2.OutputSymlink.Builder> 
         getOutputDirectorySymlinksBuilderList() {
      return getOutputDirectorySymlinksFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        build.bazel.remote.execution.v2.OutputSymlink, build.bazel.remote.execution.v2.OutputSymlink.Builder, build.bazel.remote.execution.v2.OutputSymlinkOrBuilder> 
        getOutputDirectorySymlinksFieldBuilder() {
      if (outputDirectorySymlinksBuilder_ == null) {
        outputDirectorySymlinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            build.bazel.remote.execution.v2.OutputSymlink, build.bazel.remote.execution.v2.OutputSymlink.Builder, build.bazel.remote.execution.v2.OutputSymlinkOrBuilder>(
                outputDirectorySymlinks_,
                ((bitField0_ & 0x00000008) == 0x00000008),
                getParentForChildren(),
                isClean());
        outputDirectorySymlinks_ = null;
      }
      return outputDirectorySymlinksBuilder_;
    }

    private int exitCode_ ;
    /**
     * <pre>
     * The exit code of the command.
     * </pre>
     *
     * <code>int32 exit_code = 4;</code>
     */
    public int getExitCode() {
      return exitCode_;
    }
    /**
     * <pre>
     * The exit code of the command.
     * </pre>
     *
     * <code>int32 exit_code = 4;</code>
     */
    public Builder setExitCode(int value) {
      
      exitCode_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The exit code of the command.
     * </pre>
     *
     * <code>int32 exit_code = 4;</code>
     */
    public Builder clearExitCode() {
      
      exitCode_ = 0;
      onChanged();
      return this;
    }

    private com.google.protobuf.ByteString stdoutRaw_ = com.google.protobuf.ByteString.EMPTY;
    /**
     * <pre>
     * The standard output buffer of the action. The server will determine, based
     * on the size of the buffer, whether to return it in raw form or to return
     * a digest in `stdout_digest` that points to the buffer. If neither is set,
     * then the buffer is empty. The client SHOULD NOT assume it will get one of
     * the raw buffer or a digest on any given request and should be prepared to
     * handle either.
     * </pre>
     *
     * <code>bytes stdout_raw = 5;</code>
     */
    public com.google.protobuf.ByteString getStdoutRaw() {
      return stdoutRaw_;
    }
    /**
     * <pre>
     * The standard output buffer of the action. The server will determine, based
     * on the size of the buffer, whether to return it in raw form or to return
     * a digest in `stdout_digest` that points to the buffer. If neither is set,
     * then the buffer is empty. The client SHOULD NOT assume it will get one of
     * the raw buffer or a digest on any given request and should be prepared to
     * handle either.
     * </pre>
     *
     * <code>bytes stdout_raw = 5;</code>
     */
    public Builder setStdoutRaw(com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      stdoutRaw_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The standard output buffer of the action. The server will determine, based
     * on the size of the buffer, whether to return it in raw form or to return
     * a digest in `stdout_digest` that points to the buffer. If neither is set,
     * then the buffer is empty. The client SHOULD NOT assume it will get one of
     * the raw buffer or a digest on any given request and should be prepared to
     * handle either.
     * </pre>
     *
     * <code>bytes stdout_raw = 5;</code>
     */
    public Builder clearStdoutRaw() {
      
      stdoutRaw_ = getDefaultInstance().getStdoutRaw();
      onChanged();
      return this;
    }

    private build.bazel.remote.execution.v2.Digest stdoutDigest_ = null;
    private com.google.protobuf.SingleFieldBuilderV3<
        build.bazel.remote.execution.v2.Digest, build.bazel.remote.execution.v2.Digest.Builder, build.bazel.remote.execution.v2.DigestOrBuilder> stdoutDigestBuilder_;
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public boolean hasStdoutDigest() {
      return stdoutDigestBuilder_ != null || stdoutDigest_ != null;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public build.bazel.remote.execution.v2.Digest getStdoutDigest() {
      if (stdoutDigestBuilder_ == null) {
        return stdoutDigest_ == null ? build.bazel.remote.execution.v2.Digest.getDefaultInstance() : stdoutDigest_;
      } else {
        return stdoutDigestBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public Builder setStdoutDigest(build.bazel.remote.execution.v2.Digest value) {
      if (stdoutDigestBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        stdoutDigest_ = value;
        onChanged();
      } else {
        stdoutDigestBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public Builder setStdoutDigest(
        build.bazel.remote.execution.v2.Digest.Builder builderForValue) {
      if (stdoutDigestBuilder_ == null) {
        stdoutDigest_ = builderForValue.build();
        onChanged();
      } else {
        stdoutDigestBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public Builder mergeStdoutDigest(build.bazel.remote.execution.v2.Digest value) {
      if (stdoutDigestBuilder_ == null) {
        if (stdoutDigest_ != null) {
          stdoutDigest_ =
            build.bazel.remote.execution.v2.Digest.newBuilder(stdoutDigest_).mergeFrom(value).buildPartial();
        } else {
          stdoutDigest_ = value;
        }
        onChanged();
      } else {
        stdoutDigestBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public Builder clearStdoutDigest() {
      if (stdoutDigestBuilder_ == null) {
        stdoutDigest_ = null;
        onChanged();
      } else {
        stdoutDigest_ = null;
        stdoutDigestBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public build.bazel.remote.execution.v2.Digest.Builder getStdoutDigestBuilder() {
      
      onChanged();
      return getStdoutDigestFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    public build.bazel.remote.execution.v2.DigestOrBuilder getStdoutDigestOrBuilder() {
      if (stdoutDigestBuilder_ != null) {
        return stdoutDigestBuilder_.getMessageOrBuilder();
      } else {
        return stdoutDigest_ == null ?
            build.bazel.remote.execution.v2.Digest.getDefaultInstance() : stdoutDigest_;
      }
    }
    /**
     * <pre>
     * The digest for a blob containing the standard output of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stdout_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stdout_digest = 6;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        build.bazel.remote.execution.v2.Digest, build.bazel.remote.execution.v2.Digest.Builder, build.bazel.remote.execution.v2.DigestOrBuilder> 
        getStdoutDigestFieldBuilder() {
      if (stdoutDigestBuilder_ == null) {
        stdoutDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            build.bazel.remote.execution.v2.Digest, build.bazel.remote.execution.v2.Digest.Builder, build.bazel.remote.execution.v2.DigestOrBuilder>(
                getStdoutDigest(),
                getParentForChildren(),
                isClean());
        stdoutDigest_ = null;
      }
      return stdoutDigestBuilder_;
    }

    private com.google.protobuf.ByteString stderrRaw_ = com.google.protobuf.ByteString.EMPTY;
    /**
     * <pre>
     * The standard error buffer of the action. The server will determine, based
     * on the size of the buffer, whether to return it in raw form or to return
     * a digest in `stderr_digest` that points to the buffer. If neither is set,
     * then the buffer is empty. The client SHOULD NOT assume it will get one of
     * the raw buffer or a digest on any given request and should be prepared to
     * handle either.
     * </pre>
     *
     * <code>bytes stderr_raw = 7;</code>
     */
    public com.google.protobuf.ByteString getStderrRaw() {
      return stderrRaw_;
    }
    /**
     * <pre>
     * The standard error buffer of the action. The server will determine, based
     * on the size of the buffer, whether to return it in raw form or to return
     * a digest in `stderr_digest` that points to the buffer. If neither is set,
     * then the buffer is empty. The client SHOULD NOT assume it will get one of
     * the raw buffer or a digest on any given request and should be prepared to
     * handle either.
     * </pre>
     *
     * <code>bytes stderr_raw = 7;</code>
     */
    public Builder setStderrRaw(com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      stderrRaw_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The standard error buffer of the action. The server will determine, based
     * on the size of the buffer, whether to return it in raw form or to return
     * a digest in `stderr_digest` that points to the buffer. If neither is set,
     * then the buffer is empty. The client SHOULD NOT assume it will get one of
     * the raw buffer or a digest on any given request and should be prepared to
     * handle either.
     * </pre>
     *
     * <code>bytes stderr_raw = 7;</code>
     */
    public Builder clearStderrRaw() {
      
      stderrRaw_ = getDefaultInstance().getStderrRaw();
      onChanged();
      return this;
    }

    private build.bazel.remote.execution.v2.Digest stderrDigest_ = null;
    private com.google.protobuf.SingleFieldBuilderV3<
        build.bazel.remote.execution.v2.Digest, build.bazel.remote.execution.v2.Digest.Builder, build.bazel.remote.execution.v2.DigestOrBuilder> stderrDigestBuilder_;
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public boolean hasStderrDigest() {
      return stderrDigestBuilder_ != null || stderrDigest_ != null;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public build.bazel.remote.execution.v2.Digest getStderrDigest() {
      if (stderrDigestBuilder_ == null) {
        return stderrDigest_ == null ? build.bazel.remote.execution.v2.Digest.getDefaultInstance() : stderrDigest_;
      } else {
        return stderrDigestBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public Builder setStderrDigest(build.bazel.remote.execution.v2.Digest value) {
      if (stderrDigestBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        stderrDigest_ = value;
        onChanged();
      } else {
        stderrDigestBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public Builder setStderrDigest(
        build.bazel.remote.execution.v2.Digest.Builder builderForValue) {
      if (stderrDigestBuilder_ == null) {
        stderrDigest_ = builderForValue.build();
        onChanged();
      } else {
        stderrDigestBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public Builder mergeStderrDigest(build.bazel.remote.execution.v2.Digest value) {
      if (stderrDigestBuilder_ == null) {
        if (stderrDigest_ != null) {
          stderrDigest_ =
            build.bazel.remote.execution.v2.Digest.newBuilder(stderrDigest_).mergeFrom(value).buildPartial();
        } else {
          stderrDigest_ = value;
        }
        onChanged();
      } else {
        stderrDigestBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public Builder clearStderrDigest() {
      if (stderrDigestBuilder_ == null) {
        stderrDigest_ = null;
        onChanged();
      } else {
        stderrDigest_ = null;
        stderrDigestBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public build.bazel.remote.execution.v2.Digest.Builder getStderrDigestBuilder() {
      
      onChanged();
      return getStderrDigestFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    public build.bazel.remote.execution.v2.DigestOrBuilder getStderrDigestOrBuilder() {
      if (stderrDigestBuilder_ != null) {
        return stderrDigestBuilder_.getMessageOrBuilder();
      } else {
        return stderrDigest_ == null ?
            build.bazel.remote.execution.v2.Digest.getDefaultInstance() : stderrDigest_;
      }
    }
    /**
     * <pre>
     * The digest for a blob containing the standard error of the action, which
     * can be retrieved from the
     * [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage].
     * See `stderr_raw` for when this will be set.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.Digest stderr_digest = 8;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        build.bazel.remote.execution.v2.Digest, build.bazel.remote.execution.v2.Digest.Builder, build.bazel.remote.execution.v2.DigestOrBuilder> 
        getStderrDigestFieldBuilder() {
      if (stderrDigestBuilder_ == null) {
        stderrDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            build.bazel.remote.execution.v2.Digest, build.bazel.remote.execution.v2.Digest.Builder, build.bazel.remote.execution.v2.DigestOrBuilder>(
                getStderrDigest(),
                getParentForChildren(),
                isClean());
        stderrDigest_ = null;
      }
      return stderrDigestBuilder_;
    }

    private build.bazel.remote.execution.v2.ExecutedActionMetadata executionMetadata_ = null;
    private com.google.protobuf.SingleFieldBuilderV3<
        build.bazel.remote.execution.v2.ExecutedActionMetadata, build.bazel.remote.execution.v2.ExecutedActionMetadata.Builder, build.bazel.remote.execution.v2.ExecutedActionMetadataOrBuilder> executionMetadataBuilder_;
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public boolean hasExecutionMetadata() {
      return executionMetadataBuilder_ != null || executionMetadata_ != null;
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public build.bazel.remote.execution.v2.ExecutedActionMetadata getExecutionMetadata() {
      if (executionMetadataBuilder_ == null) {
        return executionMetadata_ == null ? build.bazel.remote.execution.v2.ExecutedActionMetadata.getDefaultInstance() : executionMetadata_;
      } else {
        return executionMetadataBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public Builder setExecutionMetadata(build.bazel.remote.execution.v2.ExecutedActionMetadata value) {
      if (executionMetadataBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        executionMetadata_ = value;
        onChanged();
      } else {
        executionMetadataBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public Builder setExecutionMetadata(
        build.bazel.remote.execution.v2.ExecutedActionMetadata.Builder builderForValue) {
      if (executionMetadataBuilder_ == null) {
        executionMetadata_ = builderForValue.build();
        onChanged();
      } else {
        executionMetadataBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public Builder mergeExecutionMetadata(build.bazel.remote.execution.v2.ExecutedActionMetadata value) {
      if (executionMetadataBuilder_ == null) {
        if (executionMetadata_ != null) {
          executionMetadata_ =
            build.bazel.remote.execution.v2.ExecutedActionMetadata.newBuilder(executionMetadata_).mergeFrom(value).buildPartial();
        } else {
          executionMetadata_ = value;
        }
        onChanged();
      } else {
        executionMetadataBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public Builder clearExecutionMetadata() {
      if (executionMetadataBuilder_ == null) {
        executionMetadata_ = null;
        onChanged();
      } else {
        executionMetadata_ = null;
        executionMetadataBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public build.bazel.remote.execution.v2.ExecutedActionMetadata.Builder getExecutionMetadataBuilder() {
      
      onChanged();
      return getExecutionMetadataFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    public build.bazel.remote.execution.v2.ExecutedActionMetadataOrBuilder getExecutionMetadataOrBuilder() {
      if (executionMetadataBuilder_ != null) {
        return executionMetadataBuilder_.getMessageOrBuilder();
      } else {
        return executionMetadata_ == null ?
            build.bazel.remote.execution.v2.ExecutedActionMetadata.getDefaultInstance() : executionMetadata_;
      }
    }
    /**
     * <pre>
     * The details of the execution that originally produced this result.
     * </pre>
     *
     * <code>.build.bazel.remote.execution.v2.ExecutedActionMetadata execution_metadata = 9;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        build.bazel.remote.execution.v2.ExecutedActionMetadata, build.bazel.remote.execution.v2.ExecutedActionMetadata.Builder, build.bazel.remote.execution.v2.ExecutedActionMetadataOrBuilder> 
        getExecutionMetadataFieldBuilder() {
      if (executionMetadataBuilder_ == null) {
        executionMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            build.bazel.remote.execution.v2.ExecutedActionMetadata, build.bazel.remote.execution.v2.ExecutedActionMetadata.Builder, build.bazel.remote.execution.v2.ExecutedActionMetadataOrBuilder>(
                getExecutionMetadata(),
                getParentForChildren(),
                isClean());
        executionMetadata_ = null;
      }
      return executionMetadataBuilder_;
    }
    @java.lang.Override
    public final Builder setUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return super.setUnknownFieldsProto3(unknownFields);
    }

    @java.lang.Override
    public final Builder mergeUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return super.mergeUnknownFields(unknownFields);
    }


    // @@protoc_insertion_point(builder_scope:build.bazel.remote.execution.v2.ActionResult)
  }

  // @@protoc_insertion_point(class_scope:build.bazel.remote.execution.v2.ActionResult)
  private static final build.bazel.remote.execution.v2.ActionResult DEFAULT_INSTANCE;
  static {
    DEFAULT_INSTANCE = new build.bazel.remote.execution.v2.ActionResult();
  }

  public static build.bazel.remote.execution.v2.ActionResult getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

  private static final com.google.protobuf.Parser<ActionResult>
      PARSER = new com.google.protobuf.AbstractParser<ActionResult>() {
    @java.lang.Override
    public ActionResult parsePartialFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return new ActionResult(input, extensionRegistry);
    }
  };

  public static com.google.protobuf.Parser<ActionResult> parser() {
    return PARSER;
  }

  @java.lang.Override
  public com.google.protobuf.Parser<ActionResult> getParserForType() {
    return PARSER;
  }

  @java.lang.Override
  public build.bazel.remote.execution.v2.ActionResult getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }

}

