// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/api/service.proto

package com.google.api;

/**
 * <pre>
 * `Service` is the root object of Google service configuration schema. It
 * describes basic information about a service, such as the name and the
 * title, and delegates other aspects to sub-sections. Each sub-section is
 * either a proto message or a repeated proto message that configures a
 * specific aspect, such as auth. See each proto message definition for details.
 * Example:
 *     type: google.api.Service
 *     config_version: 3
 *     name: calendar.googleapis.com
 *     title: Google Calendar API
 *     apis:
 *     - name: google.calendar.v3.Calendar
 *     authentication:
 *       providers:
 *       - id: google_calendar_auth
 *         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
 *         issuer: https://securetoken.google.com
 *       rules:
 *       - selector: "*"
 *         requirements:
 *           provider_id: google_calendar_auth
 * </pre>
 *
 * Protobuf type {@code google.api.Service}
 */
public  final class Service extends
    com.google.protobuf.GeneratedMessageV3 implements
    // @@protoc_insertion_point(message_implements:google.api.Service)
    ServiceOrBuilder {
private static final long serialVersionUID = 0L;
  // Use Service.newBuilder() to construct.
  private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
    super(builder);
  }
  private Service() {
    name_ = "";
    id_ = "";
    title_ = "";
    producerProjectId_ = "";
    apis_ = java.util.Collections.emptyList();
    types_ = java.util.Collections.emptyList();
    enums_ = java.util.Collections.emptyList();
    endpoints_ = java.util.Collections.emptyList();
    logs_ = java.util.Collections.emptyList();
    metrics_ = java.util.Collections.emptyList();
    monitoredResources_ = java.util.Collections.emptyList();
  }

  @java.lang.Override
  public final com.google.protobuf.UnknownFieldSet
  getUnknownFields() {
    return this.unknownFields;
  }
  private Service(
      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 10: {
            java.lang.String s = input.readStringRequireUtf8();

            name_ = s;
            break;
          }
          case 18: {
            java.lang.String s = input.readStringRequireUtf8();

            title_ = s;
            break;
          }
          case 26: {
            if (!((mutable_bitField0_ & 0x00000020) != 0)) {
              apis_ = new java.util.ArrayList<com.google.protobuf.Api>();
              mutable_bitField0_ |= 0x00000020;
            }
            apis_.add(
                input.readMessage(com.google.protobuf.Api.parser(), extensionRegistry));
            break;
          }
          case 34: {
            if (!((mutable_bitField0_ & 0x00000040) != 0)) {
              types_ = new java.util.ArrayList<com.google.protobuf.Type>();
              mutable_bitField0_ |= 0x00000040;
            }
            types_.add(
                input.readMessage(com.google.protobuf.Type.parser(), extensionRegistry));
            break;
          }
          case 42: {
            if (!((mutable_bitField0_ & 0x00000080) != 0)) {
              enums_ = new java.util.ArrayList<com.google.protobuf.Enum>();
              mutable_bitField0_ |= 0x00000080;
            }
            enums_.add(
                input.readMessage(com.google.protobuf.Enum.parser(), extensionRegistry));
            break;
          }
          case 50: {
            com.google.api.Documentation.Builder subBuilder = null;
            if (documentation_ != null) {
              subBuilder = documentation_.toBuilder();
            }
            documentation_ = input.readMessage(com.google.api.Documentation.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(documentation_);
              documentation_ = subBuilder.buildPartial();
            }

            break;
          }
          case 66: {
            com.google.api.Backend.Builder subBuilder = null;
            if (backend_ != null) {
              subBuilder = backend_.toBuilder();
            }
            backend_ = input.readMessage(com.google.api.Backend.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(backend_);
              backend_ = subBuilder.buildPartial();
            }

            break;
          }
          case 74: {
            com.google.api.Http.Builder subBuilder = null;
            if (http_ != null) {
              subBuilder = http_.toBuilder();
            }
            http_ = input.readMessage(com.google.api.Http.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(http_);
              http_ = subBuilder.buildPartial();
            }

            break;
          }
          case 82: {
            com.google.api.Quota.Builder subBuilder = null;
            if (quota_ != null) {
              subBuilder = quota_.toBuilder();
            }
            quota_ = input.readMessage(com.google.api.Quota.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(quota_);
              quota_ = subBuilder.buildPartial();
            }

            break;
          }
          case 90: {
            com.google.api.Authentication.Builder subBuilder = null;
            if (authentication_ != null) {
              subBuilder = authentication_.toBuilder();
            }
            authentication_ = input.readMessage(com.google.api.Authentication.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(authentication_);
              authentication_ = subBuilder.buildPartial();
            }

            break;
          }
          case 98: {
            com.google.api.Context.Builder subBuilder = null;
            if (context_ != null) {
              subBuilder = context_.toBuilder();
            }
            context_ = input.readMessage(com.google.api.Context.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(context_);
              context_ = subBuilder.buildPartial();
            }

            break;
          }
          case 122: {
            com.google.api.Usage.Builder subBuilder = null;
            if (usage_ != null) {
              subBuilder = usage_.toBuilder();
            }
            usage_ = input.readMessage(com.google.api.Usage.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(usage_);
              usage_ = subBuilder.buildPartial();
            }

            break;
          }
          case 146: {
            if (!((mutable_bitField0_ & 0x00008000) != 0)) {
              endpoints_ = new java.util.ArrayList<com.google.api.Endpoint>();
              mutable_bitField0_ |= 0x00008000;
            }
            endpoints_.add(
                input.readMessage(com.google.api.Endpoint.parser(), extensionRegistry));
            break;
          }
          case 162: {
            com.google.protobuf.UInt32Value.Builder subBuilder = null;
            if (configVersion_ != null) {
              subBuilder = configVersion_.toBuilder();
            }
            configVersion_ = input.readMessage(com.google.protobuf.UInt32Value.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(configVersion_);
              configVersion_ = subBuilder.buildPartial();
            }

            break;
          }
          case 170: {
            com.google.api.Control.Builder subBuilder = null;
            if (control_ != null) {
              subBuilder = control_.toBuilder();
            }
            control_ = input.readMessage(com.google.api.Control.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(control_);
              control_ = subBuilder.buildPartial();
            }

            break;
          }
          case 178: {
            java.lang.String s = input.readStringRequireUtf8();

            producerProjectId_ = s;
            break;
          }
          case 186: {
            if (!((mutable_bitField0_ & 0x00020000) != 0)) {
              logs_ = new java.util.ArrayList<com.google.api.LogDescriptor>();
              mutable_bitField0_ |= 0x00020000;
            }
            logs_.add(
                input.readMessage(com.google.api.LogDescriptor.parser(), extensionRegistry));
            break;
          }
          case 194: {
            if (!((mutable_bitField0_ & 0x00040000) != 0)) {
              metrics_ = new java.util.ArrayList<com.google.api.MetricDescriptor>();
              mutable_bitField0_ |= 0x00040000;
            }
            metrics_.add(
                input.readMessage(com.google.api.MetricDescriptor.parser(), extensionRegistry));
            break;
          }
          case 202: {
            if (!((mutable_bitField0_ & 0x00080000) != 0)) {
              monitoredResources_ = new java.util.ArrayList<com.google.api.MonitoredResourceDescriptor>();
              mutable_bitField0_ |= 0x00080000;
            }
            monitoredResources_.add(
                input.readMessage(com.google.api.MonitoredResourceDescriptor.parser(), extensionRegistry));
            break;
          }
          case 210: {
            com.google.api.Billing.Builder subBuilder = null;
            if (billing_ != null) {
              subBuilder = billing_.toBuilder();
            }
            billing_ = input.readMessage(com.google.api.Billing.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(billing_);
              billing_ = subBuilder.buildPartial();
            }

            break;
          }
          case 218: {
            com.google.api.Logging.Builder subBuilder = null;
            if (logging_ != null) {
              subBuilder = logging_.toBuilder();
            }
            logging_ = input.readMessage(com.google.api.Logging.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(logging_);
              logging_ = subBuilder.buildPartial();
            }

            break;
          }
          case 226: {
            com.google.api.Monitoring.Builder subBuilder = null;
            if (monitoring_ != null) {
              subBuilder = monitoring_.toBuilder();
            }
            monitoring_ = input.readMessage(com.google.api.Monitoring.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(monitoring_);
              monitoring_ = subBuilder.buildPartial();
            }

            break;
          }
          case 234: {
            com.google.api.SystemParameters.Builder subBuilder = null;
            if (systemParameters_ != null) {
              subBuilder = systemParameters_.toBuilder();
            }
            systemParameters_ = input.readMessage(com.google.api.SystemParameters.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(systemParameters_);
              systemParameters_ = subBuilder.buildPartial();
            }

            break;
          }
          case 266: {
            java.lang.String s = input.readStringRequireUtf8();

            id_ = s;
            break;
          }
          case 298: {
            com.google.api.SourceInfo.Builder subBuilder = null;
            if (sourceInfo_ != null) {
              subBuilder = sourceInfo_.toBuilder();
            }
            sourceInfo_ = input.readMessage(com.google.api.SourceInfo.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(sourceInfo_);
              sourceInfo_ = subBuilder.buildPartial();
            }

            break;
          }
          case 810: {
            com.google.api.Experimental.Builder subBuilder = null;
            if (experimental_ != null) {
              subBuilder = experimental_.toBuilder();
            }
            experimental_ = input.readMessage(com.google.api.Experimental.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(experimental_);
              experimental_ = subBuilder.buildPartial();
            }

            break;
          }
          default: {
            if (!parseUnknownField(
                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_ & 0x00000020) != 0)) {
        apis_ = java.util.Collections.unmodifiableList(apis_);
      }
      if (((mutable_bitField0_ & 0x00000040) != 0)) {
        types_ = java.util.Collections.unmodifiableList(types_);
      }
      if (((mutable_bitField0_ & 0x00000080) != 0)) {
        enums_ = java.util.Collections.unmodifiableList(enums_);
      }
      if (((mutable_bitField0_ & 0x00008000) != 0)) {
        endpoints_ = java.util.Collections.unmodifiableList(endpoints_);
      }
      if (((mutable_bitField0_ & 0x00020000) != 0)) {
        logs_ = java.util.Collections.unmodifiableList(logs_);
      }
      if (((mutable_bitField0_ & 0x00040000) != 0)) {
        metrics_ = java.util.Collections.unmodifiableList(metrics_);
      }
      if (((mutable_bitField0_ & 0x00080000) != 0)) {
        monitoredResources_ = java.util.Collections.unmodifiableList(monitoredResources_);
      }
      this.unknownFields = unknownFields.build();
      makeExtensionsImmutable();
    }
  }
  public static final com.google.protobuf.Descriptors.Descriptor
      getDescriptor() {
    return com.google.api.ServiceProto.internal_static_google_api_Service_descriptor;
  }

  @java.lang.Override
  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return com.google.api.ServiceProto.internal_static_google_api_Service_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            com.google.api.Service.class, com.google.api.Service.Builder.class);
  }

  private int bitField0_;
  public static final int CONFIG_VERSION_FIELD_NUMBER = 20;
  private com.google.protobuf.UInt32Value configVersion_;
  /**
   * <pre>
   * The semantic version of the service configuration. The config version
   * affects the interpretation of the service configuration. For example,
   * certain features are enabled by default for certain config versions.
   * The latest config version is `3`.
   * </pre>
   *
   * <code>.google.protobuf.UInt32Value config_version = 20;</code>
   */
  public boolean hasConfigVersion() {
    return configVersion_ != null;
  }
  /**
   * <pre>
   * The semantic version of the service configuration. The config version
   * affects the interpretation of the service configuration. For example,
   * certain features are enabled by default for certain config versions.
   * The latest config version is `3`.
   * </pre>
   *
   * <code>.google.protobuf.UInt32Value config_version = 20;</code>
   */
  public com.google.protobuf.UInt32Value getConfigVersion() {
    return configVersion_ == null ? com.google.protobuf.UInt32Value.getDefaultInstance() : configVersion_;
  }
  /**
   * <pre>
   * The semantic version of the service configuration. The config version
   * affects the interpretation of the service configuration. For example,
   * certain features are enabled by default for certain config versions.
   * The latest config version is `3`.
   * </pre>
   *
   * <code>.google.protobuf.UInt32Value config_version = 20;</code>
   */
  public com.google.protobuf.UInt32ValueOrBuilder getConfigVersionOrBuilder() {
    return getConfigVersion();
  }

  public static final int NAME_FIELD_NUMBER = 1;
  private volatile java.lang.Object name_;
  /**
   * <pre>
   * The service name, which is a DNS-like logical identifier for the
   * service, such as `calendar.googleapis.com`. The service name
   * typically goes through DNS verification to make sure the owner
   * of the service also owns the DNS name.
   * </pre>
   *
   * <code>string name = 1;</code>
   */
  public java.lang.String getName() {
    java.lang.Object ref = name_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      name_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The service name, which is a DNS-like logical identifier for the
   * service, such as `calendar.googleapis.com`. The service name
   * typically goes through DNS verification to make sure the owner
   * of the service also owns the DNS name.
   * </pre>
   *
   * <code>string name = 1;</code>
   */
  public com.google.protobuf.ByteString
      getNameBytes() {
    java.lang.Object ref = name_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      name_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int ID_FIELD_NUMBER = 33;
  private volatile java.lang.Object id_;
  /**
   * <pre>
   * A unique ID for a specific instance of this message, typically assigned
   * by the client for tracking purpose. If empty, the server may choose to
   * generate one instead. Must be no longer than 60 characters.
   * </pre>
   *
   * <code>string id = 33;</code>
   */
  public java.lang.String getId() {
    java.lang.Object ref = id_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      id_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * A unique ID for a specific instance of this message, typically assigned
   * by the client for tracking purpose. If empty, the server may choose to
   * generate one instead. Must be no longer than 60 characters.
   * </pre>
   *
   * <code>string id = 33;</code>
   */
  public com.google.protobuf.ByteString
      getIdBytes() {
    java.lang.Object ref = id_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      id_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int TITLE_FIELD_NUMBER = 2;
  private volatile java.lang.Object title_;
  /**
   * <pre>
   * The product title for this service.
   * </pre>
   *
   * <code>string title = 2;</code>
   */
  public java.lang.String getTitle() {
    java.lang.Object ref = title_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      title_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The product title for this service.
   * </pre>
   *
   * <code>string title = 2;</code>
   */
  public com.google.protobuf.ByteString
      getTitleBytes() {
    java.lang.Object ref = title_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      title_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int PRODUCER_PROJECT_ID_FIELD_NUMBER = 22;
  private volatile java.lang.Object producerProjectId_;
  /**
   * <pre>
   * The Google project that owns this service.
   * </pre>
   *
   * <code>string producer_project_id = 22;</code>
   */
  public java.lang.String getProducerProjectId() {
    java.lang.Object ref = producerProjectId_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      producerProjectId_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The Google project that owns this service.
   * </pre>
   *
   * <code>string producer_project_id = 22;</code>
   */
  public com.google.protobuf.ByteString
      getProducerProjectIdBytes() {
    java.lang.Object ref = producerProjectId_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      producerProjectId_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int APIS_FIELD_NUMBER = 3;
  private java.util.List<com.google.protobuf.Api> apis_;
  /**
   * <pre>
   * A list of API interfaces exported by this service. Only the `name` field
   * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
   * author, as the remaining fields will be derived from the IDL during the
   * normalization process. It is an error to specify an API interface here
   * which cannot be resolved against the associated IDL files.
   * </pre>
   *
   * <code>repeated .google.protobuf.Api apis = 3;</code>
   */
  public java.util.List<com.google.protobuf.Api> getApisList() {
    return apis_;
  }
  /**
   * <pre>
   * A list of API interfaces exported by this service. Only the `name` field
   * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
   * author, as the remaining fields will be derived from the IDL during the
   * normalization process. It is an error to specify an API interface here
   * which cannot be resolved against the associated IDL files.
   * </pre>
   *
   * <code>repeated .google.protobuf.Api apis = 3;</code>
   */
  public java.util.List<? extends com.google.protobuf.ApiOrBuilder> 
      getApisOrBuilderList() {
    return apis_;
  }
  /**
   * <pre>
   * A list of API interfaces exported by this service. Only the `name` field
   * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
   * author, as the remaining fields will be derived from the IDL during the
   * normalization process. It is an error to specify an API interface here
   * which cannot be resolved against the associated IDL files.
   * </pre>
   *
   * <code>repeated .google.protobuf.Api apis = 3;</code>
   */
  public int getApisCount() {
    return apis_.size();
  }
  /**
   * <pre>
   * A list of API interfaces exported by this service. Only the `name` field
   * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
   * author, as the remaining fields will be derived from the IDL during the
   * normalization process. It is an error to specify an API interface here
   * which cannot be resolved against the associated IDL files.
   * </pre>
   *
   * <code>repeated .google.protobuf.Api apis = 3;</code>
   */
  public com.google.protobuf.Api getApis(int index) {
    return apis_.get(index);
  }
  /**
   * <pre>
   * A list of API interfaces exported by this service. Only the `name` field
   * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
   * author, as the remaining fields will be derived from the IDL during the
   * normalization process. It is an error to specify an API interface here
   * which cannot be resolved against the associated IDL files.
   * </pre>
   *
   * <code>repeated .google.protobuf.Api apis = 3;</code>
   */
  public com.google.protobuf.ApiOrBuilder getApisOrBuilder(
      int index) {
    return apis_.get(index);
  }

  public static final int TYPES_FIELD_NUMBER = 4;
  private java.util.List<com.google.protobuf.Type> types_;
  /**
   * <pre>
   * A list of all proto message types included in this API service.
   * Types referenced directly or indirectly by the `apis` are
   * automatically included.  Messages which are not referenced but
   * shall be included, such as types used by the `google.protobuf.Any` type,
   * should be listed here by name. Example:
   *     types:
   *     - name: google.protobuf.Int32
   * </pre>
   *
   * <code>repeated .google.protobuf.Type types = 4;</code>
   */
  public java.util.List<com.google.protobuf.Type> getTypesList() {
    return types_;
  }
  /**
   * <pre>
   * A list of all proto message types included in this API service.
   * Types referenced directly or indirectly by the `apis` are
   * automatically included.  Messages which are not referenced but
   * shall be included, such as types used by the `google.protobuf.Any` type,
   * should be listed here by name. Example:
   *     types:
   *     - name: google.protobuf.Int32
   * </pre>
   *
   * <code>repeated .google.protobuf.Type types = 4;</code>
   */
  public java.util.List<? extends com.google.protobuf.TypeOrBuilder> 
      getTypesOrBuilderList() {
    return types_;
  }
  /**
   * <pre>
   * A list of all proto message types included in this API service.
   * Types referenced directly or indirectly by the `apis` are
   * automatically included.  Messages which are not referenced but
   * shall be included, such as types used by the `google.protobuf.Any` type,
   * should be listed here by name. Example:
   *     types:
   *     - name: google.protobuf.Int32
   * </pre>
   *
   * <code>repeated .google.protobuf.Type types = 4;</code>
   */
  public int getTypesCount() {
    return types_.size();
  }
  /**
   * <pre>
   * A list of all proto message types included in this API service.
   * Types referenced directly or indirectly by the `apis` are
   * automatically included.  Messages which are not referenced but
   * shall be included, such as types used by the `google.protobuf.Any` type,
   * should be listed here by name. Example:
   *     types:
   *     - name: google.protobuf.Int32
   * </pre>
   *
   * <code>repeated .google.protobuf.Type types = 4;</code>
   */
  public com.google.protobuf.Type getTypes(int index) {
    return types_.get(index);
  }
  /**
   * <pre>
   * A list of all proto message types included in this API service.
   * Types referenced directly or indirectly by the `apis` are
   * automatically included.  Messages which are not referenced but
   * shall be included, such as types used by the `google.protobuf.Any` type,
   * should be listed here by name. Example:
   *     types:
   *     - name: google.protobuf.Int32
   * </pre>
   *
   * <code>repeated .google.protobuf.Type types = 4;</code>
   */
  public com.google.protobuf.TypeOrBuilder getTypesOrBuilder(
      int index) {
    return types_.get(index);
  }

  public static final int ENUMS_FIELD_NUMBER = 5;
  private java.util.List<com.google.protobuf.Enum> enums_;
  /**
   * <pre>
   * A list of all enum types included in this API service.  Enums
   * referenced directly or indirectly by the `apis` are automatically
   * included.  Enums which are not referenced but shall be included
   * should be listed here by name. Example:
   *     enums:
   *     - name: google.someapi.v1.SomeEnum
   * </pre>
   *
   * <code>repeated .google.protobuf.Enum enums = 5;</code>
   */
  public java.util.List<com.google.protobuf.Enum> getEnumsList() {
    return enums_;
  }
  /**
   * <pre>
   * A list of all enum types included in this API service.  Enums
   * referenced directly or indirectly by the `apis` are automatically
   * included.  Enums which are not referenced but shall be included
   * should be listed here by name. Example:
   *     enums:
   *     - name: google.someapi.v1.SomeEnum
   * </pre>
   *
   * <code>repeated .google.protobuf.Enum enums = 5;</code>
   */
  public java.util.List<? extends com.google.protobuf.EnumOrBuilder> 
      getEnumsOrBuilderList() {
    return enums_;
  }
  /**
   * <pre>
   * A list of all enum types included in this API service.  Enums
   * referenced directly or indirectly by the `apis` are automatically
   * included.  Enums which are not referenced but shall be included
   * should be listed here by name. Example:
   *     enums:
   *     - name: google.someapi.v1.SomeEnum
   * </pre>
   *
   * <code>repeated .google.protobuf.Enum enums = 5;</code>
   */
  public int getEnumsCount() {
    return enums_.size();
  }
  /**
   * <pre>
   * A list of all enum types included in this API service.  Enums
   * referenced directly or indirectly by the `apis` are automatically
   * included.  Enums which are not referenced but shall be included
   * should be listed here by name. Example:
   *     enums:
   *     - name: google.someapi.v1.SomeEnum
   * </pre>
   *
   * <code>repeated .google.protobuf.Enum enums = 5;</code>
   */
  public com.google.protobuf.Enum getEnums(int index) {
    return enums_.get(index);
  }
  /**
   * <pre>
   * A list of all enum types included in this API service.  Enums
   * referenced directly or indirectly by the `apis` are automatically
   * included.  Enums which are not referenced but shall be included
   * should be listed here by name. Example:
   *     enums:
   *     - name: google.someapi.v1.SomeEnum
   * </pre>
   *
   * <code>repeated .google.protobuf.Enum enums = 5;</code>
   */
  public com.google.protobuf.EnumOrBuilder getEnumsOrBuilder(
      int index) {
    return enums_.get(index);
  }

  public static final int DOCUMENTATION_FIELD_NUMBER = 6;
  private com.google.api.Documentation documentation_;
  /**
   * <pre>
   * Additional API documentation.
   * </pre>
   *
   * <code>.google.api.Documentation documentation = 6;</code>
   */
  public boolean hasDocumentation() {
    return documentation_ != null;
  }
  /**
   * <pre>
   * Additional API documentation.
   * </pre>
   *
   * <code>.google.api.Documentation documentation = 6;</code>
   */
  public com.google.api.Documentation getDocumentation() {
    return documentation_ == null ? com.google.api.Documentation.getDefaultInstance() : documentation_;
  }
  /**
   * <pre>
   * Additional API documentation.
   * </pre>
   *
   * <code>.google.api.Documentation documentation = 6;</code>
   */
  public com.google.api.DocumentationOrBuilder getDocumentationOrBuilder() {
    return getDocumentation();
  }

  public static final int BACKEND_FIELD_NUMBER = 8;
  private com.google.api.Backend backend_;
  /**
   * <pre>
   * API backend configuration.
   * </pre>
   *
   * <code>.google.api.Backend backend = 8;</code>
   */
  public boolean hasBackend() {
    return backend_ != null;
  }
  /**
   * <pre>
   * API backend configuration.
   * </pre>
   *
   * <code>.google.api.Backend backend = 8;</code>
   */
  public com.google.api.Backend getBackend() {
    return backend_ == null ? com.google.api.Backend.getDefaultInstance() : backend_;
  }
  /**
   * <pre>
   * API backend configuration.
   * </pre>
   *
   * <code>.google.api.Backend backend = 8;</code>
   */
  public com.google.api.BackendOrBuilder getBackendOrBuilder() {
    return getBackend();
  }

  public static final int HTTP_FIELD_NUMBER = 9;
  private com.google.api.Http http_;
  /**
   * <pre>
   * HTTP configuration.
   * </pre>
   *
   * <code>.google.api.Http http = 9;</code>
   */
  public boolean hasHttp() {
    return http_ != null;
  }
  /**
   * <pre>
   * HTTP configuration.
   * </pre>
   *
   * <code>.google.api.Http http = 9;</code>
   */
  public com.google.api.Http getHttp() {
    return http_ == null ? com.google.api.Http.getDefaultInstance() : http_;
  }
  /**
   * <pre>
   * HTTP configuration.
   * </pre>
   *
   * <code>.google.api.Http http = 9;</code>
   */
  public com.google.api.HttpOrBuilder getHttpOrBuilder() {
    return getHttp();
  }

  public static final int QUOTA_FIELD_NUMBER = 10;
  private com.google.api.Quota quota_;
  /**
   * <pre>
   * Quota configuration.
   * </pre>
   *
   * <code>.google.api.Quota quota = 10;</code>
   */
  public boolean hasQuota() {
    return quota_ != null;
  }
  /**
   * <pre>
   * Quota configuration.
   * </pre>
   *
   * <code>.google.api.Quota quota = 10;</code>
   */
  public com.google.api.Quota getQuota() {
    return quota_ == null ? com.google.api.Quota.getDefaultInstance() : quota_;
  }
  /**
   * <pre>
   * Quota configuration.
   * </pre>
   *
   * <code>.google.api.Quota quota = 10;</code>
   */
  public com.google.api.QuotaOrBuilder getQuotaOrBuilder() {
    return getQuota();
  }

  public static final int AUTHENTICATION_FIELD_NUMBER = 11;
  private com.google.api.Authentication authentication_;
  /**
   * <pre>
   * Auth configuration.
   * </pre>
   *
   * <code>.google.api.Authentication authentication = 11;</code>
   */
  public boolean hasAuthentication() {
    return authentication_ != null;
  }
  /**
   * <pre>
   * Auth configuration.
   * </pre>
   *
   * <code>.google.api.Authentication authentication = 11;</code>
   */
  public com.google.api.Authentication getAuthentication() {
    return authentication_ == null ? com.google.api.Authentication.getDefaultInstance() : authentication_;
  }
  /**
   * <pre>
   * Auth configuration.
   * </pre>
   *
   * <code>.google.api.Authentication authentication = 11;</code>
   */
  public com.google.api.AuthenticationOrBuilder getAuthenticationOrBuilder() {
    return getAuthentication();
  }

  public static final int CONTEXT_FIELD_NUMBER = 12;
  private com.google.api.Context context_;
  /**
   * <pre>
   * Context configuration.
   * </pre>
   *
   * <code>.google.api.Context context = 12;</code>
   */
  public boolean hasContext() {
    return context_ != null;
  }
  /**
   * <pre>
   * Context configuration.
   * </pre>
   *
   * <code>.google.api.Context context = 12;</code>
   */
  public com.google.api.Context getContext() {
    return context_ == null ? com.google.api.Context.getDefaultInstance() : context_;
  }
  /**
   * <pre>
   * Context configuration.
   * </pre>
   *
   * <code>.google.api.Context context = 12;</code>
   */
  public com.google.api.ContextOrBuilder getContextOrBuilder() {
    return getContext();
  }

  public static final int USAGE_FIELD_NUMBER = 15;
  private com.google.api.Usage usage_;
  /**
   * <pre>
   * Configuration controlling usage of this service.
   * </pre>
   *
   * <code>.google.api.Usage usage = 15;</code>
   */
  public boolean hasUsage() {
    return usage_ != null;
  }
  /**
   * <pre>
   * Configuration controlling usage of this service.
   * </pre>
   *
   * <code>.google.api.Usage usage = 15;</code>
   */
  public com.google.api.Usage getUsage() {
    return usage_ == null ? com.google.api.Usage.getDefaultInstance() : usage_;
  }
  /**
   * <pre>
   * Configuration controlling usage of this service.
   * </pre>
   *
   * <code>.google.api.Usage usage = 15;</code>
   */
  public com.google.api.UsageOrBuilder getUsageOrBuilder() {
    return getUsage();
  }

  public static final int ENDPOINTS_FIELD_NUMBER = 18;
  private java.util.List<com.google.api.Endpoint> endpoints_;
  /**
   * <pre>
   * Configuration for network endpoints.  If this is empty, then an endpoint
   * with the same name as the service is automatically generated to service all
   * defined APIs.
   * </pre>
   *
   * <code>repeated .google.api.Endpoint endpoints = 18;</code>
   */
  public java.util.List<com.google.api.Endpoint> getEndpointsList() {
    return endpoints_;
  }
  /**
   * <pre>
   * Configuration for network endpoints.  If this is empty, then an endpoint
   * with the same name as the service is automatically generated to service all
   * defined APIs.
   * </pre>
   *
   * <code>repeated .google.api.Endpoint endpoints = 18;</code>
   */
  public java.util.List<? extends com.google.api.EndpointOrBuilder> 
      getEndpointsOrBuilderList() {
    return endpoints_;
  }
  /**
   * <pre>
   * Configuration for network endpoints.  If this is empty, then an endpoint
   * with the same name as the service is automatically generated to service all
   * defined APIs.
   * </pre>
   *
   * <code>repeated .google.api.Endpoint endpoints = 18;</code>
   */
  public int getEndpointsCount() {
    return endpoints_.size();
  }
  /**
   * <pre>
   * Configuration for network endpoints.  If this is empty, then an endpoint
   * with the same name as the service is automatically generated to service all
   * defined APIs.
   * </pre>
   *
   * <code>repeated .google.api.Endpoint endpoints = 18;</code>
   */
  public com.google.api.Endpoint getEndpoints(int index) {
    return endpoints_.get(index);
  }
  /**
   * <pre>
   * Configuration for network endpoints.  If this is empty, then an endpoint
   * with the same name as the service is automatically generated to service all
   * defined APIs.
   * </pre>
   *
   * <code>repeated .google.api.Endpoint endpoints = 18;</code>
   */
  public com.google.api.EndpointOrBuilder getEndpointsOrBuilder(
      int index) {
    return endpoints_.get(index);
  }

  public static final int CONTROL_FIELD_NUMBER = 21;
  private com.google.api.Control control_;
  /**
   * <pre>
   * Configuration for the service control plane.
   * </pre>
   *
   * <code>.google.api.Control control = 21;</code>
   */
  public boolean hasControl() {
    return control_ != null;
  }
  /**
   * <pre>
   * Configuration for the service control plane.
   * </pre>
   *
   * <code>.google.api.Control control = 21;</code>
   */
  public com.google.api.Control getControl() {
    return control_ == null ? com.google.api.Control.getDefaultInstance() : control_;
  }
  /**
   * <pre>
   * Configuration for the service control plane.
   * </pre>
   *
   * <code>.google.api.Control control = 21;</code>
   */
  public com.google.api.ControlOrBuilder getControlOrBuilder() {
    return getControl();
  }

  public static final int LOGS_FIELD_NUMBER = 23;
  private java.util.List<com.google.api.LogDescriptor> logs_;
  /**
   * <pre>
   * Defines the logs used by this service.
   * </pre>
   *
   * <code>repeated .google.api.LogDescriptor logs = 23;</code>
   */
  public java.util.List<com.google.api.LogDescriptor> getLogsList() {
    return logs_;
  }
  /**
   * <pre>
   * Defines the logs used by this service.
   * </pre>
   *
   * <code>repeated .google.api.LogDescriptor logs = 23;</code>
   */
  public java.util.List<? extends com.google.api.LogDescriptorOrBuilder> 
      getLogsOrBuilderList() {
    return logs_;
  }
  /**
   * <pre>
   * Defines the logs used by this service.
   * </pre>
   *
   * <code>repeated .google.api.LogDescriptor logs = 23;</code>
   */
  public int getLogsCount() {
    return logs_.size();
  }
  /**
   * <pre>
   * Defines the logs used by this service.
   * </pre>
   *
   * <code>repeated .google.api.LogDescriptor logs = 23;</code>
   */
  public com.google.api.LogDescriptor getLogs(int index) {
    return logs_.get(index);
  }
  /**
   * <pre>
   * Defines the logs used by this service.
   * </pre>
   *
   * <code>repeated .google.api.LogDescriptor logs = 23;</code>
   */
  public com.google.api.LogDescriptorOrBuilder getLogsOrBuilder(
      int index) {
    return logs_.get(index);
  }

  public static final int METRICS_FIELD_NUMBER = 24;
  private java.util.List<com.google.api.MetricDescriptor> metrics_;
  /**
   * <pre>
   * Defines the metrics used by this service.
   * </pre>
   *
   * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
   */
  public java.util.List<com.google.api.MetricDescriptor> getMetricsList() {
    return metrics_;
  }
  /**
   * <pre>
   * Defines the metrics used by this service.
   * </pre>
   *
   * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
   */
  public java.util.List<? extends com.google.api.MetricDescriptorOrBuilder> 
      getMetricsOrBuilderList() {
    return metrics_;
  }
  /**
   * <pre>
   * Defines the metrics used by this service.
   * </pre>
   *
   * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
   */
  public int getMetricsCount() {
    return metrics_.size();
  }
  /**
   * <pre>
   * Defines the metrics used by this service.
   * </pre>
   *
   * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
   */
  public com.google.api.MetricDescriptor getMetrics(int index) {
    return metrics_.get(index);
  }
  /**
   * <pre>
   * Defines the metrics used by this service.
   * </pre>
   *
   * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
   */
  public com.google.api.MetricDescriptorOrBuilder getMetricsOrBuilder(
      int index) {
    return metrics_.get(index);
  }

  public static final int MONITORED_RESOURCES_FIELD_NUMBER = 25;
  private java.util.List<com.google.api.MonitoredResourceDescriptor> monitoredResources_;
  /**
   * <pre>
   * Defines the monitored resources used by this service. This is required
   * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
   * </pre>
   *
   * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
   */
  public java.util.List<com.google.api.MonitoredResourceDescriptor> getMonitoredResourcesList() {
    return monitoredResources_;
  }
  /**
   * <pre>
   * Defines the monitored resources used by this service. This is required
   * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
   * </pre>
   *
   * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
   */
  public java.util.List<? extends com.google.api.MonitoredResourceDescriptorOrBuilder> 
      getMonitoredResourcesOrBuilderList() {
    return monitoredResources_;
  }
  /**
   * <pre>
   * Defines the monitored resources used by this service. This is required
   * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
   * </pre>
   *
   * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
   */
  public int getMonitoredResourcesCount() {
    return monitoredResources_.size();
  }
  /**
   * <pre>
   * Defines the monitored resources used by this service. This is required
   * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
   * </pre>
   *
   * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
   */
  public com.google.api.MonitoredResourceDescriptor getMonitoredResources(int index) {
    return monitoredResources_.get(index);
  }
  /**
   * <pre>
   * Defines the monitored resources used by this service. This is required
   * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
   * </pre>
   *
   * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
   */
  public com.google.api.MonitoredResourceDescriptorOrBuilder getMonitoredResourcesOrBuilder(
      int index) {
    return monitoredResources_.get(index);
  }

  public static final int BILLING_FIELD_NUMBER = 26;
  private com.google.api.Billing billing_;
  /**
   * <pre>
   * Billing configuration.
   * </pre>
   *
   * <code>.google.api.Billing billing = 26;</code>
   */
  public boolean hasBilling() {
    return billing_ != null;
  }
  /**
   * <pre>
   * Billing configuration.
   * </pre>
   *
   * <code>.google.api.Billing billing = 26;</code>
   */
  public com.google.api.Billing getBilling() {
    return billing_ == null ? com.google.api.Billing.getDefaultInstance() : billing_;
  }
  /**
   * <pre>
   * Billing configuration.
   * </pre>
   *
   * <code>.google.api.Billing billing = 26;</code>
   */
  public com.google.api.BillingOrBuilder getBillingOrBuilder() {
    return getBilling();
  }

  public static final int LOGGING_FIELD_NUMBER = 27;
  private com.google.api.Logging logging_;
  /**
   * <pre>
   * Logging configuration.
   * </pre>
   *
   * <code>.google.api.Logging logging = 27;</code>
   */
  public boolean hasLogging() {
    return logging_ != null;
  }
  /**
   * <pre>
   * Logging configuration.
   * </pre>
   *
   * <code>.google.api.Logging logging = 27;</code>
   */
  public com.google.api.Logging getLogging() {
    return logging_ == null ? com.google.api.Logging.getDefaultInstance() : logging_;
  }
  /**
   * <pre>
   * Logging configuration.
   * </pre>
   *
   * <code>.google.api.Logging logging = 27;</code>
   */
  public com.google.api.LoggingOrBuilder getLoggingOrBuilder() {
    return getLogging();
  }

  public static final int MONITORING_FIELD_NUMBER = 28;
  private com.google.api.Monitoring monitoring_;
  /**
   * <pre>
   * Monitoring configuration.
   * </pre>
   *
   * <code>.google.api.Monitoring monitoring = 28;</code>
   */
  public boolean hasMonitoring() {
    return monitoring_ != null;
  }
  /**
   * <pre>
   * Monitoring configuration.
   * </pre>
   *
   * <code>.google.api.Monitoring monitoring = 28;</code>
   */
  public com.google.api.Monitoring getMonitoring() {
    return monitoring_ == null ? com.google.api.Monitoring.getDefaultInstance() : monitoring_;
  }
  /**
   * <pre>
   * Monitoring configuration.
   * </pre>
   *
   * <code>.google.api.Monitoring monitoring = 28;</code>
   */
  public com.google.api.MonitoringOrBuilder getMonitoringOrBuilder() {
    return getMonitoring();
  }

  public static final int SYSTEM_PARAMETERS_FIELD_NUMBER = 29;
  private com.google.api.SystemParameters systemParameters_;
  /**
   * <pre>
   * System parameter configuration.
   * </pre>
   *
   * <code>.google.api.SystemParameters system_parameters = 29;</code>
   */
  public boolean hasSystemParameters() {
    return systemParameters_ != null;
  }
  /**
   * <pre>
   * System parameter configuration.
   * </pre>
   *
   * <code>.google.api.SystemParameters system_parameters = 29;</code>
   */
  public com.google.api.SystemParameters getSystemParameters() {
    return systemParameters_ == null ? com.google.api.SystemParameters.getDefaultInstance() : systemParameters_;
  }
  /**
   * <pre>
   * System parameter configuration.
   * </pre>
   *
   * <code>.google.api.SystemParameters system_parameters = 29;</code>
   */
  public com.google.api.SystemParametersOrBuilder getSystemParametersOrBuilder() {
    return getSystemParameters();
  }

  public static final int SOURCE_INFO_FIELD_NUMBER = 37;
  private com.google.api.SourceInfo sourceInfo_;
  /**
   * <pre>
   * Output only. The source information for this configuration if available.
   * </pre>
   *
   * <code>.google.api.SourceInfo source_info = 37;</code>
   */
  public boolean hasSourceInfo() {
    return sourceInfo_ != null;
  }
  /**
   * <pre>
   * Output only. The source information for this configuration if available.
   * </pre>
   *
   * <code>.google.api.SourceInfo source_info = 37;</code>
   */
  public com.google.api.SourceInfo getSourceInfo() {
    return sourceInfo_ == null ? com.google.api.SourceInfo.getDefaultInstance() : sourceInfo_;
  }
  /**
   * <pre>
   * Output only. The source information for this configuration if available.
   * </pre>
   *
   * <code>.google.api.SourceInfo source_info = 37;</code>
   */
  public com.google.api.SourceInfoOrBuilder getSourceInfoOrBuilder() {
    return getSourceInfo();
  }

  public static final int EXPERIMENTAL_FIELD_NUMBER = 101;
  private com.google.api.Experimental experimental_;
  /**
   * <pre>
   * Experimental configuration.
   * </pre>
   *
   * <code>.google.api.Experimental experimental = 101;</code>
   */
  public boolean hasExperimental() {
    return experimental_ != null;
  }
  /**
   * <pre>
   * Experimental configuration.
   * </pre>
   *
   * <code>.google.api.Experimental experimental = 101;</code>
   */
  public com.google.api.Experimental getExperimental() {
    return experimental_ == null ? com.google.api.Experimental.getDefaultInstance() : experimental_;
  }
  /**
   * <pre>
   * Experimental configuration.
   * </pre>
   *
   * <code>.google.api.Experimental experimental = 101;</code>
   */
  public com.google.api.ExperimentalOrBuilder getExperimentalOrBuilder() {
    return getExperimental();
  }

  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 {
    if (!getNameBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
    }
    if (!getTitleBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, title_);
    }
    for (int i = 0; i < apis_.size(); i++) {
      output.writeMessage(3, apis_.get(i));
    }
    for (int i = 0; i < types_.size(); i++) {
      output.writeMessage(4, types_.get(i));
    }
    for (int i = 0; i < enums_.size(); i++) {
      output.writeMessage(5, enums_.get(i));
    }
    if (documentation_ != null) {
      output.writeMessage(6, getDocumentation());
    }
    if (backend_ != null) {
      output.writeMessage(8, getBackend());
    }
    if (http_ != null) {
      output.writeMessage(9, getHttp());
    }
    if (quota_ != null) {
      output.writeMessage(10, getQuota());
    }
    if (authentication_ != null) {
      output.writeMessage(11, getAuthentication());
    }
    if (context_ != null) {
      output.writeMessage(12, getContext());
    }
    if (usage_ != null) {
      output.writeMessage(15, getUsage());
    }
    for (int i = 0; i < endpoints_.size(); i++) {
      output.writeMessage(18, endpoints_.get(i));
    }
    if (configVersion_ != null) {
      output.writeMessage(20, getConfigVersion());
    }
    if (control_ != null) {
      output.writeMessage(21, getControl());
    }
    if (!getProducerProjectIdBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 22, producerProjectId_);
    }
    for (int i = 0; i < logs_.size(); i++) {
      output.writeMessage(23, logs_.get(i));
    }
    for (int i = 0; i < metrics_.size(); i++) {
      output.writeMessage(24, metrics_.get(i));
    }
    for (int i = 0; i < monitoredResources_.size(); i++) {
      output.writeMessage(25, monitoredResources_.get(i));
    }
    if (billing_ != null) {
      output.writeMessage(26, getBilling());
    }
    if (logging_ != null) {
      output.writeMessage(27, getLogging());
    }
    if (monitoring_ != null) {
      output.writeMessage(28, getMonitoring());
    }
    if (systemParameters_ != null) {
      output.writeMessage(29, getSystemParameters());
    }
    if (!getIdBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 33, id_);
    }
    if (sourceInfo_ != null) {
      output.writeMessage(37, getSourceInfo());
    }
    if (experimental_ != null) {
      output.writeMessage(101, getExperimental());
    }
    unknownFields.writeTo(output);
  }

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

    size = 0;
    if (!getNameBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
    }
    if (!getTitleBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, title_);
    }
    for (int i = 0; i < apis_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(3, apis_.get(i));
    }
    for (int i = 0; i < types_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(4, types_.get(i));
    }
    for (int i = 0; i < enums_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(5, enums_.get(i));
    }
    if (documentation_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(6, getDocumentation());
    }
    if (backend_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(8, getBackend());
    }
    if (http_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(9, getHttp());
    }
    if (quota_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(10, getQuota());
    }
    if (authentication_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(11, getAuthentication());
    }
    if (context_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(12, getContext());
    }
    if (usage_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(15, getUsage());
    }
    for (int i = 0; i < endpoints_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(18, endpoints_.get(i));
    }
    if (configVersion_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(20, getConfigVersion());
    }
    if (control_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(21, getControl());
    }
    if (!getProducerProjectIdBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(22, producerProjectId_);
    }
    for (int i = 0; i < logs_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(23, logs_.get(i));
    }
    for (int i = 0; i < metrics_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(24, metrics_.get(i));
    }
    for (int i = 0; i < monitoredResources_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(25, monitoredResources_.get(i));
    }
    if (billing_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(26, getBilling());
    }
    if (logging_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(27, getLogging());
    }
    if (monitoring_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(28, getMonitoring());
    }
    if (systemParameters_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(29, getSystemParameters());
    }
    if (!getIdBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(33, id_);
    }
    if (sourceInfo_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(37, getSourceInfo());
    }
    if (experimental_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(101, getExperimental());
    }
    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 com.google.api.Service)) {
      return super.equals(obj);
    }
    com.google.api.Service other = (com.google.api.Service) obj;

    if (hasConfigVersion() != other.hasConfigVersion()) return false;
    if (hasConfigVersion()) {
      if (!getConfigVersion()
          .equals(other.getConfigVersion())) return false;
    }
    if (!getName()
        .equals(other.getName())) return false;
    if (!getId()
        .equals(other.getId())) return false;
    if (!getTitle()
        .equals(other.getTitle())) return false;
    if (!getProducerProjectId()
        .equals(other.getProducerProjectId())) return false;
    if (!getApisList()
        .equals(other.getApisList())) return false;
    if (!getTypesList()
        .equals(other.getTypesList())) return false;
    if (!getEnumsList()
        .equals(other.getEnumsList())) return false;
    if (hasDocumentation() != other.hasDocumentation()) return false;
    if (hasDocumentation()) {
      if (!getDocumentation()
          .equals(other.getDocumentation())) return false;
    }
    if (hasBackend() != other.hasBackend()) return false;
    if (hasBackend()) {
      if (!getBackend()
          .equals(other.getBackend())) return false;
    }
    if (hasHttp() != other.hasHttp()) return false;
    if (hasHttp()) {
      if (!getHttp()
          .equals(other.getHttp())) return false;
    }
    if (hasQuota() != other.hasQuota()) return false;
    if (hasQuota()) {
      if (!getQuota()
          .equals(other.getQuota())) return false;
    }
    if (hasAuthentication() != other.hasAuthentication()) return false;
    if (hasAuthentication()) {
      if (!getAuthentication()
          .equals(other.getAuthentication())) return false;
    }
    if (hasContext() != other.hasContext()) return false;
    if (hasContext()) {
      if (!getContext()
          .equals(other.getContext())) return false;
    }
    if (hasUsage() != other.hasUsage()) return false;
    if (hasUsage()) {
      if (!getUsage()
          .equals(other.getUsage())) return false;
    }
    if (!getEndpointsList()
        .equals(other.getEndpointsList())) return false;
    if (hasControl() != other.hasControl()) return false;
    if (hasControl()) {
      if (!getControl()
          .equals(other.getControl())) return false;
    }
    if (!getLogsList()
        .equals(other.getLogsList())) return false;
    if (!getMetricsList()
        .equals(other.getMetricsList())) return false;
    if (!getMonitoredResourcesList()
        .equals(other.getMonitoredResourcesList())) return false;
    if (hasBilling() != other.hasBilling()) return false;
    if (hasBilling()) {
      if (!getBilling()
          .equals(other.getBilling())) return false;
    }
    if (hasLogging() != other.hasLogging()) return false;
    if (hasLogging()) {
      if (!getLogging()
          .equals(other.getLogging())) return false;
    }
    if (hasMonitoring() != other.hasMonitoring()) return false;
    if (hasMonitoring()) {
      if (!getMonitoring()
          .equals(other.getMonitoring())) return false;
    }
    if (hasSystemParameters() != other.hasSystemParameters()) return false;
    if (hasSystemParameters()) {
      if (!getSystemParameters()
          .equals(other.getSystemParameters())) return false;
    }
    if (hasSourceInfo() != other.hasSourceInfo()) return false;
    if (hasSourceInfo()) {
      if (!getSourceInfo()
          .equals(other.getSourceInfo())) return false;
    }
    if (hasExperimental() != other.hasExperimental()) return false;
    if (hasExperimental()) {
      if (!getExperimental()
          .equals(other.getExperimental())) return false;
    }
    if (!unknownFields.equals(other.unknownFields)) return false;
    return true;
  }

  @java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    if (hasConfigVersion()) {
      hash = (37 * hash) + CONFIG_VERSION_FIELD_NUMBER;
      hash = (53 * hash) + getConfigVersion().hashCode();
    }
    hash = (37 * hash) + NAME_FIELD_NUMBER;
    hash = (53 * hash) + getName().hashCode();
    hash = (37 * hash) + ID_FIELD_NUMBER;
    hash = (53 * hash) + getId().hashCode();
    hash = (37 * hash) + TITLE_FIELD_NUMBER;
    hash = (53 * hash) + getTitle().hashCode();
    hash = (37 * hash) + PRODUCER_PROJECT_ID_FIELD_NUMBER;
    hash = (53 * hash) + getProducerProjectId().hashCode();
    if (getApisCount() > 0) {
      hash = (37 * hash) + APIS_FIELD_NUMBER;
      hash = (53 * hash) + getApisList().hashCode();
    }
    if (getTypesCount() > 0) {
      hash = (37 * hash) + TYPES_FIELD_NUMBER;
      hash = (53 * hash) + getTypesList().hashCode();
    }
    if (getEnumsCount() > 0) {
      hash = (37 * hash) + ENUMS_FIELD_NUMBER;
      hash = (53 * hash) + getEnumsList().hashCode();
    }
    if (hasDocumentation()) {
      hash = (37 * hash) + DOCUMENTATION_FIELD_NUMBER;
      hash = (53 * hash) + getDocumentation().hashCode();
    }
    if (hasBackend()) {
      hash = (37 * hash) + BACKEND_FIELD_NUMBER;
      hash = (53 * hash) + getBackend().hashCode();
    }
    if (hasHttp()) {
      hash = (37 * hash) + HTTP_FIELD_NUMBER;
      hash = (53 * hash) + getHttp().hashCode();
    }
    if (hasQuota()) {
      hash = (37 * hash) + QUOTA_FIELD_NUMBER;
      hash = (53 * hash) + getQuota().hashCode();
    }
    if (hasAuthentication()) {
      hash = (37 * hash) + AUTHENTICATION_FIELD_NUMBER;
      hash = (53 * hash) + getAuthentication().hashCode();
    }
    if (hasContext()) {
      hash = (37 * hash) + CONTEXT_FIELD_NUMBER;
      hash = (53 * hash) + getContext().hashCode();
    }
    if (hasUsage()) {
      hash = (37 * hash) + USAGE_FIELD_NUMBER;
      hash = (53 * hash) + getUsage().hashCode();
    }
    if (getEndpointsCount() > 0) {
      hash = (37 * hash) + ENDPOINTS_FIELD_NUMBER;
      hash = (53 * hash) + getEndpointsList().hashCode();
    }
    if (hasControl()) {
      hash = (37 * hash) + CONTROL_FIELD_NUMBER;
      hash = (53 * hash) + getControl().hashCode();
    }
    if (getLogsCount() > 0) {
      hash = (37 * hash) + LOGS_FIELD_NUMBER;
      hash = (53 * hash) + getLogsList().hashCode();
    }
    if (getMetricsCount() > 0) {
      hash = (37 * hash) + METRICS_FIELD_NUMBER;
      hash = (53 * hash) + getMetricsList().hashCode();
    }
    if (getMonitoredResourcesCount() > 0) {
      hash = (37 * hash) + MONITORED_RESOURCES_FIELD_NUMBER;
      hash = (53 * hash) + getMonitoredResourcesList().hashCode();
    }
    if (hasBilling()) {
      hash = (37 * hash) + BILLING_FIELD_NUMBER;
      hash = (53 * hash) + getBilling().hashCode();
    }
    if (hasLogging()) {
      hash = (37 * hash) + LOGGING_FIELD_NUMBER;
      hash = (53 * hash) + getLogging().hashCode();
    }
    if (hasMonitoring()) {
      hash = (37 * hash) + MONITORING_FIELD_NUMBER;
      hash = (53 * hash) + getMonitoring().hashCode();
    }
    if (hasSystemParameters()) {
      hash = (37 * hash) + SYSTEM_PARAMETERS_FIELD_NUMBER;
      hash = (53 * hash) + getSystemParameters().hashCode();
    }
    if (hasSourceInfo()) {
      hash = (37 * hash) + SOURCE_INFO_FIELD_NUMBER;
      hash = (53 * hash) + getSourceInfo().hashCode();
    }
    if (hasExperimental()) {
      hash = (37 * hash) + EXPERIMENTAL_FIELD_NUMBER;
      hash = (53 * hash) + getExperimental().hashCode();
    }
    hash = (29 * hash) + unknownFields.hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static com.google.api.Service parseFrom(
      java.nio.ByteBuffer data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.api.Service parseFrom(
      java.nio.ByteBuffer data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.api.Service parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.api.Service parseFrom(
      com.google.protobuf.ByteString data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.api.Service parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.api.Service parseFrom(
      byte[] data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.api.Service parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static com.google.api.Service 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 com.google.api.Service parseDelimitedFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseDelimitedWithIOException(PARSER, input);
  }
  public static com.google.api.Service 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 com.google.api.Service parseFrom(
      com.google.protobuf.CodedInputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static com.google.api.Service 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(com.google.api.Service 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>
   * `Service` is the root object of Google service configuration schema. It
   * describes basic information about a service, such as the name and the
   * title, and delegates other aspects to sub-sections. Each sub-section is
   * either a proto message or a repeated proto message that configures a
   * specific aspect, such as auth. See each proto message definition for details.
   * Example:
   *     type: google.api.Service
   *     config_version: 3
   *     name: calendar.googleapis.com
   *     title: Google Calendar API
   *     apis:
   *     - name: google.calendar.v3.Calendar
   *     authentication:
   *       providers:
   *       - id: google_calendar_auth
   *         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
   *         issuer: https://securetoken.google.com
   *       rules:
   *       - selector: "*"
   *         requirements:
   *           provider_id: google_calendar_auth
   * </pre>
   *
   * Protobuf type {@code google.api.Service}
   */
  public static final class Builder extends
      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
      // @@protoc_insertion_point(builder_implements:google.api.Service)
      com.google.api.ServiceOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.api.ServiceProto.internal_static_google_api_Service_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.api.ServiceProto.internal_static_google_api_Service_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.api.Service.class, com.google.api.Service.Builder.class);
    }

    // Construct using com.google.api.Service.newBuilder()
    private Builder() {
      maybeForceBuilderInitialization();
    }

    private Builder(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      super(parent);
      maybeForceBuilderInitialization();
    }
    private void maybeForceBuilderInitialization() {
      if (com.google.protobuf.GeneratedMessageV3
              .alwaysUseFieldBuilders) {
        getApisFieldBuilder();
        getTypesFieldBuilder();
        getEnumsFieldBuilder();
        getEndpointsFieldBuilder();
        getLogsFieldBuilder();
        getMetricsFieldBuilder();
        getMonitoredResourcesFieldBuilder();
      }
    }
    @java.lang.Override
    public Builder clear() {
      super.clear();
      if (configVersionBuilder_ == null) {
        configVersion_ = null;
      } else {
        configVersion_ = null;
        configVersionBuilder_ = null;
      }
      name_ = "";

      id_ = "";

      title_ = "";

      producerProjectId_ = "";

      if (apisBuilder_ == null) {
        apis_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
      } else {
        apisBuilder_.clear();
      }
      if (typesBuilder_ == null) {
        types_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
      } else {
        typesBuilder_.clear();
      }
      if (enumsBuilder_ == null) {
        enums_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000080);
      } else {
        enumsBuilder_.clear();
      }
      if (documentationBuilder_ == null) {
        documentation_ = null;
      } else {
        documentation_ = null;
        documentationBuilder_ = null;
      }
      if (backendBuilder_ == null) {
        backend_ = null;
      } else {
        backend_ = null;
        backendBuilder_ = null;
      }
      if (httpBuilder_ == null) {
        http_ = null;
      } else {
        http_ = null;
        httpBuilder_ = null;
      }
      if (quotaBuilder_ == null) {
        quota_ = null;
      } else {
        quota_ = null;
        quotaBuilder_ = null;
      }
      if (authenticationBuilder_ == null) {
        authentication_ = null;
      } else {
        authentication_ = null;
        authenticationBuilder_ = null;
      }
      if (contextBuilder_ == null) {
        context_ = null;
      } else {
        context_ = null;
        contextBuilder_ = null;
      }
      if (usageBuilder_ == null) {
        usage_ = null;
      } else {
        usage_ = null;
        usageBuilder_ = null;
      }
      if (endpointsBuilder_ == null) {
        endpoints_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00008000);
      } else {
        endpointsBuilder_.clear();
      }
      if (controlBuilder_ == null) {
        control_ = null;
      } else {
        control_ = null;
        controlBuilder_ = null;
      }
      if (logsBuilder_ == null) {
        logs_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00020000);
      } else {
        logsBuilder_.clear();
      }
      if (metricsBuilder_ == null) {
        metrics_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00040000);
      } else {
        metricsBuilder_.clear();
      }
      if (monitoredResourcesBuilder_ == null) {
        monitoredResources_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00080000);
      } else {
        monitoredResourcesBuilder_.clear();
      }
      if (billingBuilder_ == null) {
        billing_ = null;
      } else {
        billing_ = null;
        billingBuilder_ = null;
      }
      if (loggingBuilder_ == null) {
        logging_ = null;
      } else {
        logging_ = null;
        loggingBuilder_ = null;
      }
      if (monitoringBuilder_ == null) {
        monitoring_ = null;
      } else {
        monitoring_ = null;
        monitoringBuilder_ = null;
      }
      if (systemParametersBuilder_ == null) {
        systemParameters_ = null;
      } else {
        systemParameters_ = null;
        systemParametersBuilder_ = null;
      }
      if (sourceInfoBuilder_ == null) {
        sourceInfo_ = null;
      } else {
        sourceInfo_ = null;
        sourceInfoBuilder_ = null;
      }
      if (experimentalBuilder_ == null) {
        experimental_ = null;
      } else {
        experimental_ = null;
        experimentalBuilder_ = null;
      }
      return this;
    }

    @java.lang.Override
    public com.google.protobuf.Descriptors.Descriptor
        getDescriptorForType() {
      return com.google.api.ServiceProto.internal_static_google_api_Service_descriptor;
    }

    @java.lang.Override
    public com.google.api.Service getDefaultInstanceForType() {
      return com.google.api.Service.getDefaultInstance();
    }

    @java.lang.Override
    public com.google.api.Service build() {
      com.google.api.Service result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    @java.lang.Override
    public com.google.api.Service buildPartial() {
      com.google.api.Service result = new com.google.api.Service(this);
      int from_bitField0_ = bitField0_;
      int to_bitField0_ = 0;
      if (configVersionBuilder_ == null) {
        result.configVersion_ = configVersion_;
      } else {
        result.configVersion_ = configVersionBuilder_.build();
      }
      result.name_ = name_;
      result.id_ = id_;
      result.title_ = title_;
      result.producerProjectId_ = producerProjectId_;
      if (apisBuilder_ == null) {
        if (((bitField0_ & 0x00000020) != 0)) {
          apis_ = java.util.Collections.unmodifiableList(apis_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.apis_ = apis_;
      } else {
        result.apis_ = apisBuilder_.build();
      }
      if (typesBuilder_ == null) {
        if (((bitField0_ & 0x00000040) != 0)) {
          types_ = java.util.Collections.unmodifiableList(types_);
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.types_ = types_;
      } else {
        result.types_ = typesBuilder_.build();
      }
      if (enumsBuilder_ == null) {
        if (((bitField0_ & 0x00000080) != 0)) {
          enums_ = java.util.Collections.unmodifiableList(enums_);
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.enums_ = enums_;
      } else {
        result.enums_ = enumsBuilder_.build();
      }
      if (documentationBuilder_ == null) {
        result.documentation_ = documentation_;
      } else {
        result.documentation_ = documentationBuilder_.build();
      }
      if (backendBuilder_ == null) {
        result.backend_ = backend_;
      } else {
        result.backend_ = backendBuilder_.build();
      }
      if (httpBuilder_ == null) {
        result.http_ = http_;
      } else {
        result.http_ = httpBuilder_.build();
      }
      if (quotaBuilder_ == null) {
        result.quota_ = quota_;
      } else {
        result.quota_ = quotaBuilder_.build();
      }
      if (authenticationBuilder_ == null) {
        result.authentication_ = authentication_;
      } else {
        result.authentication_ = authenticationBuilder_.build();
      }
      if (contextBuilder_ == null) {
        result.context_ = context_;
      } else {
        result.context_ = contextBuilder_.build();
      }
      if (usageBuilder_ == null) {
        result.usage_ = usage_;
      } else {
        result.usage_ = usageBuilder_.build();
      }
      if (endpointsBuilder_ == null) {
        if (((bitField0_ & 0x00008000) != 0)) {
          endpoints_ = java.util.Collections.unmodifiableList(endpoints_);
          bitField0_ = (bitField0_ & ~0x00008000);
        }
        result.endpoints_ = endpoints_;
      } else {
        result.endpoints_ = endpointsBuilder_.build();
      }
      if (controlBuilder_ == null) {
        result.control_ = control_;
      } else {
        result.control_ = controlBuilder_.build();
      }
      if (logsBuilder_ == null) {
        if (((bitField0_ & 0x00020000) != 0)) {
          logs_ = java.util.Collections.unmodifiableList(logs_);
          bitField0_ = (bitField0_ & ~0x00020000);
        }
        result.logs_ = logs_;
      } else {
        result.logs_ = logsBuilder_.build();
      }
      if (metricsBuilder_ == null) {
        if (((bitField0_ & 0x00040000) != 0)) {
          metrics_ = java.util.Collections.unmodifiableList(metrics_);
          bitField0_ = (bitField0_ & ~0x00040000);
        }
        result.metrics_ = metrics_;
      } else {
        result.metrics_ = metricsBuilder_.build();
      }
      if (monitoredResourcesBuilder_ == null) {
        if (((bitField0_ & 0x00080000) != 0)) {
          monitoredResources_ = java.util.Collections.unmodifiableList(monitoredResources_);
          bitField0_ = (bitField0_ & ~0x00080000);
        }
        result.monitoredResources_ = monitoredResources_;
      } else {
        result.monitoredResources_ = monitoredResourcesBuilder_.build();
      }
      if (billingBuilder_ == null) {
        result.billing_ = billing_;
      } else {
        result.billing_ = billingBuilder_.build();
      }
      if (loggingBuilder_ == null) {
        result.logging_ = logging_;
      } else {
        result.logging_ = loggingBuilder_.build();
      }
      if (monitoringBuilder_ == null) {
        result.monitoring_ = monitoring_;
      } else {
        result.monitoring_ = monitoringBuilder_.build();
      }
      if (systemParametersBuilder_ == null) {
        result.systemParameters_ = systemParameters_;
      } else {
        result.systemParameters_ = systemParametersBuilder_.build();
      }
      if (sourceInfoBuilder_ == null) {
        result.sourceInfo_ = sourceInfo_;
      } else {
        result.sourceInfo_ = sourceInfoBuilder_.build();
      }
      if (experimentalBuilder_ == null) {
        result.experimental_ = experimental_;
      } else {
        result.experimental_ = experimentalBuilder_.build();
      }
      result.bitField0_ = to_bitField0_;
      onBuilt();
      return result;
    }

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

    public Builder mergeFrom(com.google.api.Service other) {
      if (other == com.google.api.Service.getDefaultInstance()) return this;
      if (other.hasConfigVersion()) {
        mergeConfigVersion(other.getConfigVersion());
      }
      if (!other.getName().isEmpty()) {
        name_ = other.name_;
        onChanged();
      }
      if (!other.getId().isEmpty()) {
        id_ = other.id_;
        onChanged();
      }
      if (!other.getTitle().isEmpty()) {
        title_ = other.title_;
        onChanged();
      }
      if (!other.getProducerProjectId().isEmpty()) {
        producerProjectId_ = other.producerProjectId_;
        onChanged();
      }
      if (apisBuilder_ == null) {
        if (!other.apis_.isEmpty()) {
          if (apis_.isEmpty()) {
            apis_ = other.apis_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureApisIsMutable();
            apis_.addAll(other.apis_);
          }
          onChanged();
        }
      } else {
        if (!other.apis_.isEmpty()) {
          if (apisBuilder_.isEmpty()) {
            apisBuilder_.dispose();
            apisBuilder_ = null;
            apis_ = other.apis_;
            bitField0_ = (bitField0_ & ~0x00000020);
            apisBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getApisFieldBuilder() : null;
          } else {
            apisBuilder_.addAllMessages(other.apis_);
          }
        }
      }
      if (typesBuilder_ == null) {
        if (!other.types_.isEmpty()) {
          if (types_.isEmpty()) {
            types_ = other.types_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureTypesIsMutable();
            types_.addAll(other.types_);
          }
          onChanged();
        }
      } else {
        if (!other.types_.isEmpty()) {
          if (typesBuilder_.isEmpty()) {
            typesBuilder_.dispose();
            typesBuilder_ = null;
            types_ = other.types_;
            bitField0_ = (bitField0_ & ~0x00000040);
            typesBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getTypesFieldBuilder() : null;
          } else {
            typesBuilder_.addAllMessages(other.types_);
          }
        }
      }
      if (enumsBuilder_ == null) {
        if (!other.enums_.isEmpty()) {
          if (enums_.isEmpty()) {
            enums_ = other.enums_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureEnumsIsMutable();
            enums_.addAll(other.enums_);
          }
          onChanged();
        }
      } else {
        if (!other.enums_.isEmpty()) {
          if (enumsBuilder_.isEmpty()) {
            enumsBuilder_.dispose();
            enumsBuilder_ = null;
            enums_ = other.enums_;
            bitField0_ = (bitField0_ & ~0x00000080);
            enumsBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getEnumsFieldBuilder() : null;
          } else {
            enumsBuilder_.addAllMessages(other.enums_);
          }
        }
      }
      if (other.hasDocumentation()) {
        mergeDocumentation(other.getDocumentation());
      }
      if (other.hasBackend()) {
        mergeBackend(other.getBackend());
      }
      if (other.hasHttp()) {
        mergeHttp(other.getHttp());
      }
      if (other.hasQuota()) {
        mergeQuota(other.getQuota());
      }
      if (other.hasAuthentication()) {
        mergeAuthentication(other.getAuthentication());
      }
      if (other.hasContext()) {
        mergeContext(other.getContext());
      }
      if (other.hasUsage()) {
        mergeUsage(other.getUsage());
      }
      if (endpointsBuilder_ == null) {
        if (!other.endpoints_.isEmpty()) {
          if (endpoints_.isEmpty()) {
            endpoints_ = other.endpoints_;
            bitField0_ = (bitField0_ & ~0x00008000);
          } else {
            ensureEndpointsIsMutable();
            endpoints_.addAll(other.endpoints_);
          }
          onChanged();
        }
      } else {
        if (!other.endpoints_.isEmpty()) {
          if (endpointsBuilder_.isEmpty()) {
            endpointsBuilder_.dispose();
            endpointsBuilder_ = null;
            endpoints_ = other.endpoints_;
            bitField0_ = (bitField0_ & ~0x00008000);
            endpointsBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getEndpointsFieldBuilder() : null;
          } else {
            endpointsBuilder_.addAllMessages(other.endpoints_);
          }
        }
      }
      if (other.hasControl()) {
        mergeControl(other.getControl());
      }
      if (logsBuilder_ == null) {
        if (!other.logs_.isEmpty()) {
          if (logs_.isEmpty()) {
            logs_ = other.logs_;
            bitField0_ = (bitField0_ & ~0x00020000);
          } else {
            ensureLogsIsMutable();
            logs_.addAll(other.logs_);
          }
          onChanged();
        }
      } else {
        if (!other.logs_.isEmpty()) {
          if (logsBuilder_.isEmpty()) {
            logsBuilder_.dispose();
            logsBuilder_ = null;
            logs_ = other.logs_;
            bitField0_ = (bitField0_ & ~0x00020000);
            logsBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getLogsFieldBuilder() : null;
          } else {
            logsBuilder_.addAllMessages(other.logs_);
          }
        }
      }
      if (metricsBuilder_ == null) {
        if (!other.metrics_.isEmpty()) {
          if (metrics_.isEmpty()) {
            metrics_ = other.metrics_;
            bitField0_ = (bitField0_ & ~0x00040000);
          } else {
            ensureMetricsIsMutable();
            metrics_.addAll(other.metrics_);
          }
          onChanged();
        }
      } else {
        if (!other.metrics_.isEmpty()) {
          if (metricsBuilder_.isEmpty()) {
            metricsBuilder_.dispose();
            metricsBuilder_ = null;
            metrics_ = other.metrics_;
            bitField0_ = (bitField0_ & ~0x00040000);
            metricsBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getMetricsFieldBuilder() : null;
          } else {
            metricsBuilder_.addAllMessages(other.metrics_);
          }
        }
      }
      if (monitoredResourcesBuilder_ == null) {
        if (!other.monitoredResources_.isEmpty()) {
          if (monitoredResources_.isEmpty()) {
            monitoredResources_ = other.monitoredResources_;
            bitField0_ = (bitField0_ & ~0x00080000);
          } else {
            ensureMonitoredResourcesIsMutable();
            monitoredResources_.addAll(other.monitoredResources_);
          }
          onChanged();
        }
      } else {
        if (!other.monitoredResources_.isEmpty()) {
          if (monitoredResourcesBuilder_.isEmpty()) {
            monitoredResourcesBuilder_.dispose();
            monitoredResourcesBuilder_ = null;
            monitoredResources_ = other.monitoredResources_;
            bitField0_ = (bitField0_ & ~0x00080000);
            monitoredResourcesBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getMonitoredResourcesFieldBuilder() : null;
          } else {
            monitoredResourcesBuilder_.addAllMessages(other.monitoredResources_);
          }
        }
      }
      if (other.hasBilling()) {
        mergeBilling(other.getBilling());
      }
      if (other.hasLogging()) {
        mergeLogging(other.getLogging());
      }
      if (other.hasMonitoring()) {
        mergeMonitoring(other.getMonitoring());
      }
      if (other.hasSystemParameters()) {
        mergeSystemParameters(other.getSystemParameters());
      }
      if (other.hasSourceInfo()) {
        mergeSourceInfo(other.getSourceInfo());
      }
      if (other.hasExperimental()) {
        mergeExperimental(other.getExperimental());
      }
      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 {
      com.google.api.Service parsedMessage = null;
      try {
        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        parsedMessage = (com.google.api.Service) e.getUnfinishedMessage();
        throw e.unwrapIOException();
      } finally {
        if (parsedMessage != null) {
          mergeFrom(parsedMessage);
        }
      }
      return this;
    }
    private int bitField0_;

    private com.google.protobuf.UInt32Value configVersion_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.protobuf.UInt32Value, com.google.protobuf.UInt32Value.Builder, com.google.protobuf.UInt32ValueOrBuilder> configVersionBuilder_;
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public boolean hasConfigVersion() {
      return configVersionBuilder_ != null || configVersion_ != null;
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public com.google.protobuf.UInt32Value getConfigVersion() {
      if (configVersionBuilder_ == null) {
        return configVersion_ == null ? com.google.protobuf.UInt32Value.getDefaultInstance() : configVersion_;
      } else {
        return configVersionBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public Builder setConfigVersion(com.google.protobuf.UInt32Value value) {
      if (configVersionBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        configVersion_ = value;
        onChanged();
      } else {
        configVersionBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public Builder setConfigVersion(
        com.google.protobuf.UInt32Value.Builder builderForValue) {
      if (configVersionBuilder_ == null) {
        configVersion_ = builderForValue.build();
        onChanged();
      } else {
        configVersionBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public Builder mergeConfigVersion(com.google.protobuf.UInt32Value value) {
      if (configVersionBuilder_ == null) {
        if (configVersion_ != null) {
          configVersion_ =
            com.google.protobuf.UInt32Value.newBuilder(configVersion_).mergeFrom(value).buildPartial();
        } else {
          configVersion_ = value;
        }
        onChanged();
      } else {
        configVersionBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public Builder clearConfigVersion() {
      if (configVersionBuilder_ == null) {
        configVersion_ = null;
        onChanged();
      } else {
        configVersion_ = null;
        configVersionBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public com.google.protobuf.UInt32Value.Builder getConfigVersionBuilder() {
      
      onChanged();
      return getConfigVersionFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    public com.google.protobuf.UInt32ValueOrBuilder getConfigVersionOrBuilder() {
      if (configVersionBuilder_ != null) {
        return configVersionBuilder_.getMessageOrBuilder();
      } else {
        return configVersion_ == null ?
            com.google.protobuf.UInt32Value.getDefaultInstance() : configVersion_;
      }
    }
    /**
     * <pre>
     * The semantic version of the service configuration. The config version
     * affects the interpretation of the service configuration. For example,
     * certain features are enabled by default for certain config versions.
     * The latest config version is `3`.
     * </pre>
     *
     * <code>.google.protobuf.UInt32Value config_version = 20;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.protobuf.UInt32Value, com.google.protobuf.UInt32Value.Builder, com.google.protobuf.UInt32ValueOrBuilder> 
        getConfigVersionFieldBuilder() {
      if (configVersionBuilder_ == null) {
        configVersionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.UInt32Value, com.google.protobuf.UInt32Value.Builder, com.google.protobuf.UInt32ValueOrBuilder>(
                getConfigVersion(),
                getParentForChildren(),
                isClean());
        configVersion_ = null;
      }
      return configVersionBuilder_;
    }

    private java.lang.Object name_ = "";
    /**
     * <pre>
     * The service name, which is a DNS-like logical identifier for the
     * service, such as `calendar.googleapis.com`. The service name
     * typically goes through DNS verification to make sure the owner
     * of the service also owns the DNS name.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The service name, which is a DNS-like logical identifier for the
     * service, such as `calendar.googleapis.com`. The service name
     * typically goes through DNS verification to make sure the owner
     * of the service also owns the DNS name.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The service name, which is a DNS-like logical identifier for the
     * service, such as `calendar.googleapis.com`. The service name
     * typically goes through DNS verification to make sure the owner
     * of the service also owns the DNS name.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public Builder setName(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      name_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The service name, which is a DNS-like logical identifier for the
     * service, such as `calendar.googleapis.com`. The service name
     * typically goes through DNS verification to make sure the owner
     * of the service also owns the DNS name.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public Builder clearName() {
      
      name_ = getDefaultInstance().getName();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The service name, which is a DNS-like logical identifier for the
     * service, such as `calendar.googleapis.com`. The service name
     * typically goes through DNS verification to make sure the owner
     * of the service also owns the DNS name.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public Builder setNameBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      name_ = value;
      onChanged();
      return this;
    }

    private java.lang.Object id_ = "";
    /**
     * <pre>
     * A unique ID for a specific instance of this message, typically assigned
     * by the client for tracking purpose. If empty, the server may choose to
     * generate one instead. Must be no longer than 60 characters.
     * </pre>
     *
     * <code>string id = 33;</code>
     */
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        id_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * A unique ID for a specific instance of this message, typically assigned
     * by the client for tracking purpose. If empty, the server may choose to
     * generate one instead. Must be no longer than 60 characters.
     * </pre>
     *
     * <code>string id = 33;</code>
     */
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * A unique ID for a specific instance of this message, typically assigned
     * by the client for tracking purpose. If empty, the server may choose to
     * generate one instead. Must be no longer than 60 characters.
     * </pre>
     *
     * <code>string id = 33;</code>
     */
    public Builder setId(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      id_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * A unique ID for a specific instance of this message, typically assigned
     * by the client for tracking purpose. If empty, the server may choose to
     * generate one instead. Must be no longer than 60 characters.
     * </pre>
     *
     * <code>string id = 33;</code>
     */
    public Builder clearId() {
      
      id_ = getDefaultInstance().getId();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * A unique ID for a specific instance of this message, typically assigned
     * by the client for tracking purpose. If empty, the server may choose to
     * generate one instead. Must be no longer than 60 characters.
     * </pre>
     *
     * <code>string id = 33;</code>
     */
    public Builder setIdBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      id_ = value;
      onChanged();
      return this;
    }

    private java.lang.Object title_ = "";
    /**
     * <pre>
     * The product title for this service.
     * </pre>
     *
     * <code>string title = 2;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        title_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The product title for this service.
     * </pre>
     *
     * <code>string title = 2;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The product title for this service.
     * </pre>
     *
     * <code>string title = 2;</code>
     */
    public Builder setTitle(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      title_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The product title for this service.
     * </pre>
     *
     * <code>string title = 2;</code>
     */
    public Builder clearTitle() {
      
      title_ = getDefaultInstance().getTitle();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The product title for this service.
     * </pre>
     *
     * <code>string title = 2;</code>
     */
    public Builder setTitleBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      title_ = value;
      onChanged();
      return this;
    }

    private java.lang.Object producerProjectId_ = "";
    /**
     * <pre>
     * The Google project that owns this service.
     * </pre>
     *
     * <code>string producer_project_id = 22;</code>
     */
    public java.lang.String getProducerProjectId() {
      java.lang.Object ref = producerProjectId_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        producerProjectId_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The Google project that owns this service.
     * </pre>
     *
     * <code>string producer_project_id = 22;</code>
     */
    public com.google.protobuf.ByteString
        getProducerProjectIdBytes() {
      java.lang.Object ref = producerProjectId_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        producerProjectId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The Google project that owns this service.
     * </pre>
     *
     * <code>string producer_project_id = 22;</code>
     */
    public Builder setProducerProjectId(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      producerProjectId_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The Google project that owns this service.
     * </pre>
     *
     * <code>string producer_project_id = 22;</code>
     */
    public Builder clearProducerProjectId() {
      
      producerProjectId_ = getDefaultInstance().getProducerProjectId();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The Google project that owns this service.
     * </pre>
     *
     * <code>string producer_project_id = 22;</code>
     */
    public Builder setProducerProjectIdBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      producerProjectId_ = value;
      onChanged();
      return this;
    }

    private java.util.List<com.google.protobuf.Api> apis_ =
      java.util.Collections.emptyList();
    private void ensureApisIsMutable() {
      if (!((bitField0_ & 0x00000020) != 0)) {
        apis_ = new java.util.ArrayList<com.google.protobuf.Api>(apis_);
        bitField0_ |= 0x00000020;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.protobuf.Api, com.google.protobuf.Api.Builder, com.google.protobuf.ApiOrBuilder> apisBuilder_;

    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public java.util.List<com.google.protobuf.Api> getApisList() {
      if (apisBuilder_ == null) {
        return java.util.Collections.unmodifiableList(apis_);
      } else {
        return apisBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public int getApisCount() {
      if (apisBuilder_ == null) {
        return apis_.size();
      } else {
        return apisBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public com.google.protobuf.Api getApis(int index) {
      if (apisBuilder_ == null) {
        return apis_.get(index);
      } else {
        return apisBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder setApis(
        int index, com.google.protobuf.Api value) {
      if (apisBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureApisIsMutable();
        apis_.set(index, value);
        onChanged();
      } else {
        apisBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder setApis(
        int index, com.google.protobuf.Api.Builder builderForValue) {
      if (apisBuilder_ == null) {
        ensureApisIsMutable();
        apis_.set(index, builderForValue.build());
        onChanged();
      } else {
        apisBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder addApis(com.google.protobuf.Api value) {
      if (apisBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureApisIsMutable();
        apis_.add(value);
        onChanged();
      } else {
        apisBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder addApis(
        int index, com.google.protobuf.Api value) {
      if (apisBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureApisIsMutable();
        apis_.add(index, value);
        onChanged();
      } else {
        apisBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder addApis(
        com.google.protobuf.Api.Builder builderForValue) {
      if (apisBuilder_ == null) {
        ensureApisIsMutable();
        apis_.add(builderForValue.build());
        onChanged();
      } else {
        apisBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder addApis(
        int index, com.google.protobuf.Api.Builder builderForValue) {
      if (apisBuilder_ == null) {
        ensureApisIsMutable();
        apis_.add(index, builderForValue.build());
        onChanged();
      } else {
        apisBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder addAllApis(
        java.lang.Iterable<? extends com.google.protobuf.Api> values) {
      if (apisBuilder_ == null) {
        ensureApisIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, apis_);
        onChanged();
      } else {
        apisBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder clearApis() {
      if (apisBuilder_ == null) {
        apis_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
      } else {
        apisBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public Builder removeApis(int index) {
      if (apisBuilder_ == null) {
        ensureApisIsMutable();
        apis_.remove(index);
        onChanged();
      } else {
        apisBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public com.google.protobuf.Api.Builder getApisBuilder(
        int index) {
      return getApisFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public com.google.protobuf.ApiOrBuilder getApisOrBuilder(
        int index) {
      if (apisBuilder_ == null) {
        return apis_.get(index);  } else {
        return apisBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public java.util.List<? extends com.google.protobuf.ApiOrBuilder> 
         getApisOrBuilderList() {
      if (apisBuilder_ != null) {
        return apisBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(apis_);
      }
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public com.google.protobuf.Api.Builder addApisBuilder() {
      return getApisFieldBuilder().addBuilder(
          com.google.protobuf.Api.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public com.google.protobuf.Api.Builder addApisBuilder(
        int index) {
      return getApisFieldBuilder().addBuilder(
          index, com.google.protobuf.Api.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of API interfaces exported by this service. Only the `name` field
     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
     * author, as the remaining fields will be derived from the IDL during the
     * normalization process. It is an error to specify an API interface here
     * which cannot be resolved against the associated IDL files.
     * </pre>
     *
     * <code>repeated .google.protobuf.Api apis = 3;</code>
     */
    public java.util.List<com.google.protobuf.Api.Builder> 
         getApisBuilderList() {
      return getApisFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.protobuf.Api, com.google.protobuf.Api.Builder, com.google.protobuf.ApiOrBuilder> 
        getApisFieldBuilder() {
      if (apisBuilder_ == null) {
        apisBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.protobuf.Api, com.google.protobuf.Api.Builder, com.google.protobuf.ApiOrBuilder>(
                apis_,
                ((bitField0_ & 0x00000020) != 0),
                getParentForChildren(),
                isClean());
        apis_ = null;
      }
      return apisBuilder_;
    }

    private java.util.List<com.google.protobuf.Type> types_ =
      java.util.Collections.emptyList();
    private void ensureTypesIsMutable() {
      if (!((bitField0_ & 0x00000040) != 0)) {
        types_ = new java.util.ArrayList<com.google.protobuf.Type>(types_);
        bitField0_ |= 0x00000040;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.protobuf.Type, com.google.protobuf.Type.Builder, com.google.protobuf.TypeOrBuilder> typesBuilder_;

    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public java.util.List<com.google.protobuf.Type> getTypesList() {
      if (typesBuilder_ == null) {
        return java.util.Collections.unmodifiableList(types_);
      } else {
        return typesBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public int getTypesCount() {
      if (typesBuilder_ == null) {
        return types_.size();
      } else {
        return typesBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public com.google.protobuf.Type getTypes(int index) {
      if (typesBuilder_ == null) {
        return types_.get(index);
      } else {
        return typesBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder setTypes(
        int index, com.google.protobuf.Type value) {
      if (typesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureTypesIsMutable();
        types_.set(index, value);
        onChanged();
      } else {
        typesBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder setTypes(
        int index, com.google.protobuf.Type.Builder builderForValue) {
      if (typesBuilder_ == null) {
        ensureTypesIsMutable();
        types_.set(index, builderForValue.build());
        onChanged();
      } else {
        typesBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder addTypes(com.google.protobuf.Type value) {
      if (typesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureTypesIsMutable();
        types_.add(value);
        onChanged();
      } else {
        typesBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder addTypes(
        int index, com.google.protobuf.Type value) {
      if (typesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureTypesIsMutable();
        types_.add(index, value);
        onChanged();
      } else {
        typesBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder addTypes(
        com.google.protobuf.Type.Builder builderForValue) {
      if (typesBuilder_ == null) {
        ensureTypesIsMutable();
        types_.add(builderForValue.build());
        onChanged();
      } else {
        typesBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder addTypes(
        int index, com.google.protobuf.Type.Builder builderForValue) {
      if (typesBuilder_ == null) {
        ensureTypesIsMutable();
        types_.add(index, builderForValue.build());
        onChanged();
      } else {
        typesBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder addAllTypes(
        java.lang.Iterable<? extends com.google.protobuf.Type> values) {
      if (typesBuilder_ == null) {
        ensureTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, types_);
        onChanged();
      } else {
        typesBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder clearTypes() {
      if (typesBuilder_ == null) {
        types_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
      } else {
        typesBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public Builder removeTypes(int index) {
      if (typesBuilder_ == null) {
        ensureTypesIsMutable();
        types_.remove(index);
        onChanged();
      } else {
        typesBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public com.google.protobuf.Type.Builder getTypesBuilder(
        int index) {
      return getTypesFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public com.google.protobuf.TypeOrBuilder getTypesOrBuilder(
        int index) {
      if (typesBuilder_ == null) {
        return types_.get(index);  } else {
        return typesBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public java.util.List<? extends com.google.protobuf.TypeOrBuilder> 
         getTypesOrBuilderList() {
      if (typesBuilder_ != null) {
        return typesBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(types_);
      }
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public com.google.protobuf.Type.Builder addTypesBuilder() {
      return getTypesFieldBuilder().addBuilder(
          com.google.protobuf.Type.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public com.google.protobuf.Type.Builder addTypesBuilder(
        int index) {
      return getTypesFieldBuilder().addBuilder(
          index, com.google.protobuf.Type.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of all proto message types included in this API service.
     * Types referenced directly or indirectly by the `apis` are
     * automatically included.  Messages which are not referenced but
     * shall be included, such as types used by the `google.protobuf.Any` type,
     * should be listed here by name. Example:
     *     types:
     *     - name: google.protobuf.Int32
     * </pre>
     *
     * <code>repeated .google.protobuf.Type types = 4;</code>
     */
    public java.util.List<com.google.protobuf.Type.Builder> 
         getTypesBuilderList() {
      return getTypesFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.protobuf.Type, com.google.protobuf.Type.Builder, com.google.protobuf.TypeOrBuilder> 
        getTypesFieldBuilder() {
      if (typesBuilder_ == null) {
        typesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.protobuf.Type, com.google.protobuf.Type.Builder, com.google.protobuf.TypeOrBuilder>(
                types_,
                ((bitField0_ & 0x00000040) != 0),
                getParentForChildren(),
                isClean());
        types_ = null;
      }
      return typesBuilder_;
    }

    private java.util.List<com.google.protobuf.Enum> enums_ =
      java.util.Collections.emptyList();
    private void ensureEnumsIsMutable() {
      if (!((bitField0_ & 0x00000080) != 0)) {
        enums_ = new java.util.ArrayList<com.google.protobuf.Enum>(enums_);
        bitField0_ |= 0x00000080;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.protobuf.Enum, com.google.protobuf.Enum.Builder, com.google.protobuf.EnumOrBuilder> enumsBuilder_;

    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public java.util.List<com.google.protobuf.Enum> getEnumsList() {
      if (enumsBuilder_ == null) {
        return java.util.Collections.unmodifiableList(enums_);
      } else {
        return enumsBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public int getEnumsCount() {
      if (enumsBuilder_ == null) {
        return enums_.size();
      } else {
        return enumsBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public com.google.protobuf.Enum getEnums(int index) {
      if (enumsBuilder_ == null) {
        return enums_.get(index);
      } else {
        return enumsBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder setEnums(
        int index, com.google.protobuf.Enum value) {
      if (enumsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureEnumsIsMutable();
        enums_.set(index, value);
        onChanged();
      } else {
        enumsBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder setEnums(
        int index, com.google.protobuf.Enum.Builder builderForValue) {
      if (enumsBuilder_ == null) {
        ensureEnumsIsMutable();
        enums_.set(index, builderForValue.build());
        onChanged();
      } else {
        enumsBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder addEnums(com.google.protobuf.Enum value) {
      if (enumsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureEnumsIsMutable();
        enums_.add(value);
        onChanged();
      } else {
        enumsBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder addEnums(
        int index, com.google.protobuf.Enum value) {
      if (enumsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureEnumsIsMutable();
        enums_.add(index, value);
        onChanged();
      } else {
        enumsBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder addEnums(
        com.google.protobuf.Enum.Builder builderForValue) {
      if (enumsBuilder_ == null) {
        ensureEnumsIsMutable();
        enums_.add(builderForValue.build());
        onChanged();
      } else {
        enumsBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder addEnums(
        int index, com.google.protobuf.Enum.Builder builderForValue) {
      if (enumsBuilder_ == null) {
        ensureEnumsIsMutable();
        enums_.add(index, builderForValue.build());
        onChanged();
      } else {
        enumsBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder addAllEnums(
        java.lang.Iterable<? extends com.google.protobuf.Enum> values) {
      if (enumsBuilder_ == null) {
        ensureEnumsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, enums_);
        onChanged();
      } else {
        enumsBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder clearEnums() {
      if (enumsBuilder_ == null) {
        enums_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
      } else {
        enumsBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public Builder removeEnums(int index) {
      if (enumsBuilder_ == null) {
        ensureEnumsIsMutable();
        enums_.remove(index);
        onChanged();
      } else {
        enumsBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public com.google.protobuf.Enum.Builder getEnumsBuilder(
        int index) {
      return getEnumsFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public com.google.protobuf.EnumOrBuilder getEnumsOrBuilder(
        int index) {
      if (enumsBuilder_ == null) {
        return enums_.get(index);  } else {
        return enumsBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public java.util.List<? extends com.google.protobuf.EnumOrBuilder> 
         getEnumsOrBuilderList() {
      if (enumsBuilder_ != null) {
        return enumsBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(enums_);
      }
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public com.google.protobuf.Enum.Builder addEnumsBuilder() {
      return getEnumsFieldBuilder().addBuilder(
          com.google.protobuf.Enum.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public com.google.protobuf.Enum.Builder addEnumsBuilder(
        int index) {
      return getEnumsFieldBuilder().addBuilder(
          index, com.google.protobuf.Enum.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of all enum types included in this API service.  Enums
     * referenced directly or indirectly by the `apis` are automatically
     * included.  Enums which are not referenced but shall be included
     * should be listed here by name. Example:
     *     enums:
     *     - name: google.someapi.v1.SomeEnum
     * </pre>
     *
     * <code>repeated .google.protobuf.Enum enums = 5;</code>
     */
    public java.util.List<com.google.protobuf.Enum.Builder> 
         getEnumsBuilderList() {
      return getEnumsFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.protobuf.Enum, com.google.protobuf.Enum.Builder, com.google.protobuf.EnumOrBuilder> 
        getEnumsFieldBuilder() {
      if (enumsBuilder_ == null) {
        enumsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.protobuf.Enum, com.google.protobuf.Enum.Builder, com.google.protobuf.EnumOrBuilder>(
                enums_,
                ((bitField0_ & 0x00000080) != 0),
                getParentForChildren(),
                isClean());
        enums_ = null;
      }
      return enumsBuilder_;
    }

    private com.google.api.Documentation documentation_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Documentation, com.google.api.Documentation.Builder, com.google.api.DocumentationOrBuilder> documentationBuilder_;
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public boolean hasDocumentation() {
      return documentationBuilder_ != null || documentation_ != null;
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public com.google.api.Documentation getDocumentation() {
      if (documentationBuilder_ == null) {
        return documentation_ == null ? com.google.api.Documentation.getDefaultInstance() : documentation_;
      } else {
        return documentationBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public Builder setDocumentation(com.google.api.Documentation value) {
      if (documentationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        documentation_ = value;
        onChanged();
      } else {
        documentationBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public Builder setDocumentation(
        com.google.api.Documentation.Builder builderForValue) {
      if (documentationBuilder_ == null) {
        documentation_ = builderForValue.build();
        onChanged();
      } else {
        documentationBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public Builder mergeDocumentation(com.google.api.Documentation value) {
      if (documentationBuilder_ == null) {
        if (documentation_ != null) {
          documentation_ =
            com.google.api.Documentation.newBuilder(documentation_).mergeFrom(value).buildPartial();
        } else {
          documentation_ = value;
        }
        onChanged();
      } else {
        documentationBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public Builder clearDocumentation() {
      if (documentationBuilder_ == null) {
        documentation_ = null;
        onChanged();
      } else {
        documentation_ = null;
        documentationBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public com.google.api.Documentation.Builder getDocumentationBuilder() {
      
      onChanged();
      return getDocumentationFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    public com.google.api.DocumentationOrBuilder getDocumentationOrBuilder() {
      if (documentationBuilder_ != null) {
        return documentationBuilder_.getMessageOrBuilder();
      } else {
        return documentation_ == null ?
            com.google.api.Documentation.getDefaultInstance() : documentation_;
      }
    }
    /**
     * <pre>
     * Additional API documentation.
     * </pre>
     *
     * <code>.google.api.Documentation documentation = 6;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Documentation, com.google.api.Documentation.Builder, com.google.api.DocumentationOrBuilder> 
        getDocumentationFieldBuilder() {
      if (documentationBuilder_ == null) {
        documentationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Documentation, com.google.api.Documentation.Builder, com.google.api.DocumentationOrBuilder>(
                getDocumentation(),
                getParentForChildren(),
                isClean());
        documentation_ = null;
      }
      return documentationBuilder_;
    }

    private com.google.api.Backend backend_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Backend, com.google.api.Backend.Builder, com.google.api.BackendOrBuilder> backendBuilder_;
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public boolean hasBackend() {
      return backendBuilder_ != null || backend_ != null;
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public com.google.api.Backend getBackend() {
      if (backendBuilder_ == null) {
        return backend_ == null ? com.google.api.Backend.getDefaultInstance() : backend_;
      } else {
        return backendBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public Builder setBackend(com.google.api.Backend value) {
      if (backendBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        backend_ = value;
        onChanged();
      } else {
        backendBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public Builder setBackend(
        com.google.api.Backend.Builder builderForValue) {
      if (backendBuilder_ == null) {
        backend_ = builderForValue.build();
        onChanged();
      } else {
        backendBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public Builder mergeBackend(com.google.api.Backend value) {
      if (backendBuilder_ == null) {
        if (backend_ != null) {
          backend_ =
            com.google.api.Backend.newBuilder(backend_).mergeFrom(value).buildPartial();
        } else {
          backend_ = value;
        }
        onChanged();
      } else {
        backendBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public Builder clearBackend() {
      if (backendBuilder_ == null) {
        backend_ = null;
        onChanged();
      } else {
        backend_ = null;
        backendBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public com.google.api.Backend.Builder getBackendBuilder() {
      
      onChanged();
      return getBackendFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    public com.google.api.BackendOrBuilder getBackendOrBuilder() {
      if (backendBuilder_ != null) {
        return backendBuilder_.getMessageOrBuilder();
      } else {
        return backend_ == null ?
            com.google.api.Backend.getDefaultInstance() : backend_;
      }
    }
    /**
     * <pre>
     * API backend configuration.
     * </pre>
     *
     * <code>.google.api.Backend backend = 8;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Backend, com.google.api.Backend.Builder, com.google.api.BackendOrBuilder> 
        getBackendFieldBuilder() {
      if (backendBuilder_ == null) {
        backendBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Backend, com.google.api.Backend.Builder, com.google.api.BackendOrBuilder>(
                getBackend(),
                getParentForChildren(),
                isClean());
        backend_ = null;
      }
      return backendBuilder_;
    }

    private com.google.api.Http http_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Http, com.google.api.Http.Builder, com.google.api.HttpOrBuilder> httpBuilder_;
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public boolean hasHttp() {
      return httpBuilder_ != null || http_ != null;
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public com.google.api.Http getHttp() {
      if (httpBuilder_ == null) {
        return http_ == null ? com.google.api.Http.getDefaultInstance() : http_;
      } else {
        return httpBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public Builder setHttp(com.google.api.Http value) {
      if (httpBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        http_ = value;
        onChanged();
      } else {
        httpBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public Builder setHttp(
        com.google.api.Http.Builder builderForValue) {
      if (httpBuilder_ == null) {
        http_ = builderForValue.build();
        onChanged();
      } else {
        httpBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public Builder mergeHttp(com.google.api.Http value) {
      if (httpBuilder_ == null) {
        if (http_ != null) {
          http_ =
            com.google.api.Http.newBuilder(http_).mergeFrom(value).buildPartial();
        } else {
          http_ = value;
        }
        onChanged();
      } else {
        httpBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public Builder clearHttp() {
      if (httpBuilder_ == null) {
        http_ = null;
        onChanged();
      } else {
        http_ = null;
        httpBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public com.google.api.Http.Builder getHttpBuilder() {
      
      onChanged();
      return getHttpFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    public com.google.api.HttpOrBuilder getHttpOrBuilder() {
      if (httpBuilder_ != null) {
        return httpBuilder_.getMessageOrBuilder();
      } else {
        return http_ == null ?
            com.google.api.Http.getDefaultInstance() : http_;
      }
    }
    /**
     * <pre>
     * HTTP configuration.
     * </pre>
     *
     * <code>.google.api.Http http = 9;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Http, com.google.api.Http.Builder, com.google.api.HttpOrBuilder> 
        getHttpFieldBuilder() {
      if (httpBuilder_ == null) {
        httpBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Http, com.google.api.Http.Builder, com.google.api.HttpOrBuilder>(
                getHttp(),
                getParentForChildren(),
                isClean());
        http_ = null;
      }
      return httpBuilder_;
    }

    private com.google.api.Quota quota_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Quota, com.google.api.Quota.Builder, com.google.api.QuotaOrBuilder> quotaBuilder_;
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public boolean hasQuota() {
      return quotaBuilder_ != null || quota_ != null;
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public com.google.api.Quota getQuota() {
      if (quotaBuilder_ == null) {
        return quota_ == null ? com.google.api.Quota.getDefaultInstance() : quota_;
      } else {
        return quotaBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public Builder setQuota(com.google.api.Quota value) {
      if (quotaBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        quota_ = value;
        onChanged();
      } else {
        quotaBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public Builder setQuota(
        com.google.api.Quota.Builder builderForValue) {
      if (quotaBuilder_ == null) {
        quota_ = builderForValue.build();
        onChanged();
      } else {
        quotaBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public Builder mergeQuota(com.google.api.Quota value) {
      if (quotaBuilder_ == null) {
        if (quota_ != null) {
          quota_ =
            com.google.api.Quota.newBuilder(quota_).mergeFrom(value).buildPartial();
        } else {
          quota_ = value;
        }
        onChanged();
      } else {
        quotaBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public Builder clearQuota() {
      if (quotaBuilder_ == null) {
        quota_ = null;
        onChanged();
      } else {
        quota_ = null;
        quotaBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public com.google.api.Quota.Builder getQuotaBuilder() {
      
      onChanged();
      return getQuotaFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    public com.google.api.QuotaOrBuilder getQuotaOrBuilder() {
      if (quotaBuilder_ != null) {
        return quotaBuilder_.getMessageOrBuilder();
      } else {
        return quota_ == null ?
            com.google.api.Quota.getDefaultInstance() : quota_;
      }
    }
    /**
     * <pre>
     * Quota configuration.
     * </pre>
     *
     * <code>.google.api.Quota quota = 10;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Quota, com.google.api.Quota.Builder, com.google.api.QuotaOrBuilder> 
        getQuotaFieldBuilder() {
      if (quotaBuilder_ == null) {
        quotaBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Quota, com.google.api.Quota.Builder, com.google.api.QuotaOrBuilder>(
                getQuota(),
                getParentForChildren(),
                isClean());
        quota_ = null;
      }
      return quotaBuilder_;
    }

    private com.google.api.Authentication authentication_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Authentication, com.google.api.Authentication.Builder, com.google.api.AuthenticationOrBuilder> authenticationBuilder_;
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public boolean hasAuthentication() {
      return authenticationBuilder_ != null || authentication_ != null;
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public com.google.api.Authentication getAuthentication() {
      if (authenticationBuilder_ == null) {
        return authentication_ == null ? com.google.api.Authentication.getDefaultInstance() : authentication_;
      } else {
        return authenticationBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public Builder setAuthentication(com.google.api.Authentication value) {
      if (authenticationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        authentication_ = value;
        onChanged();
      } else {
        authenticationBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public Builder setAuthentication(
        com.google.api.Authentication.Builder builderForValue) {
      if (authenticationBuilder_ == null) {
        authentication_ = builderForValue.build();
        onChanged();
      } else {
        authenticationBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public Builder mergeAuthentication(com.google.api.Authentication value) {
      if (authenticationBuilder_ == null) {
        if (authentication_ != null) {
          authentication_ =
            com.google.api.Authentication.newBuilder(authentication_).mergeFrom(value).buildPartial();
        } else {
          authentication_ = value;
        }
        onChanged();
      } else {
        authenticationBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public Builder clearAuthentication() {
      if (authenticationBuilder_ == null) {
        authentication_ = null;
        onChanged();
      } else {
        authentication_ = null;
        authenticationBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public com.google.api.Authentication.Builder getAuthenticationBuilder() {
      
      onChanged();
      return getAuthenticationFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    public com.google.api.AuthenticationOrBuilder getAuthenticationOrBuilder() {
      if (authenticationBuilder_ != null) {
        return authenticationBuilder_.getMessageOrBuilder();
      } else {
        return authentication_ == null ?
            com.google.api.Authentication.getDefaultInstance() : authentication_;
      }
    }
    /**
     * <pre>
     * Auth configuration.
     * </pre>
     *
     * <code>.google.api.Authentication authentication = 11;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Authentication, com.google.api.Authentication.Builder, com.google.api.AuthenticationOrBuilder> 
        getAuthenticationFieldBuilder() {
      if (authenticationBuilder_ == null) {
        authenticationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Authentication, com.google.api.Authentication.Builder, com.google.api.AuthenticationOrBuilder>(
                getAuthentication(),
                getParentForChildren(),
                isClean());
        authentication_ = null;
      }
      return authenticationBuilder_;
    }

    private com.google.api.Context context_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Context, com.google.api.Context.Builder, com.google.api.ContextOrBuilder> contextBuilder_;
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public boolean hasContext() {
      return contextBuilder_ != null || context_ != null;
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public com.google.api.Context getContext() {
      if (contextBuilder_ == null) {
        return context_ == null ? com.google.api.Context.getDefaultInstance() : context_;
      } else {
        return contextBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public Builder setContext(com.google.api.Context value) {
      if (contextBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        context_ = value;
        onChanged();
      } else {
        contextBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public Builder setContext(
        com.google.api.Context.Builder builderForValue) {
      if (contextBuilder_ == null) {
        context_ = builderForValue.build();
        onChanged();
      } else {
        contextBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public Builder mergeContext(com.google.api.Context value) {
      if (contextBuilder_ == null) {
        if (context_ != null) {
          context_ =
            com.google.api.Context.newBuilder(context_).mergeFrom(value).buildPartial();
        } else {
          context_ = value;
        }
        onChanged();
      } else {
        contextBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public Builder clearContext() {
      if (contextBuilder_ == null) {
        context_ = null;
        onChanged();
      } else {
        context_ = null;
        contextBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public com.google.api.Context.Builder getContextBuilder() {
      
      onChanged();
      return getContextFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    public com.google.api.ContextOrBuilder getContextOrBuilder() {
      if (contextBuilder_ != null) {
        return contextBuilder_.getMessageOrBuilder();
      } else {
        return context_ == null ?
            com.google.api.Context.getDefaultInstance() : context_;
      }
    }
    /**
     * <pre>
     * Context configuration.
     * </pre>
     *
     * <code>.google.api.Context context = 12;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Context, com.google.api.Context.Builder, com.google.api.ContextOrBuilder> 
        getContextFieldBuilder() {
      if (contextBuilder_ == null) {
        contextBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Context, com.google.api.Context.Builder, com.google.api.ContextOrBuilder>(
                getContext(),
                getParentForChildren(),
                isClean());
        context_ = null;
      }
      return contextBuilder_;
    }

    private com.google.api.Usage usage_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Usage, com.google.api.Usage.Builder, com.google.api.UsageOrBuilder> usageBuilder_;
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public boolean hasUsage() {
      return usageBuilder_ != null || usage_ != null;
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public com.google.api.Usage getUsage() {
      if (usageBuilder_ == null) {
        return usage_ == null ? com.google.api.Usage.getDefaultInstance() : usage_;
      } else {
        return usageBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public Builder setUsage(com.google.api.Usage value) {
      if (usageBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        usage_ = value;
        onChanged();
      } else {
        usageBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public Builder setUsage(
        com.google.api.Usage.Builder builderForValue) {
      if (usageBuilder_ == null) {
        usage_ = builderForValue.build();
        onChanged();
      } else {
        usageBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public Builder mergeUsage(com.google.api.Usage value) {
      if (usageBuilder_ == null) {
        if (usage_ != null) {
          usage_ =
            com.google.api.Usage.newBuilder(usage_).mergeFrom(value).buildPartial();
        } else {
          usage_ = value;
        }
        onChanged();
      } else {
        usageBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public Builder clearUsage() {
      if (usageBuilder_ == null) {
        usage_ = null;
        onChanged();
      } else {
        usage_ = null;
        usageBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public com.google.api.Usage.Builder getUsageBuilder() {
      
      onChanged();
      return getUsageFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    public com.google.api.UsageOrBuilder getUsageOrBuilder() {
      if (usageBuilder_ != null) {
        return usageBuilder_.getMessageOrBuilder();
      } else {
        return usage_ == null ?
            com.google.api.Usage.getDefaultInstance() : usage_;
      }
    }
    /**
     * <pre>
     * Configuration controlling usage of this service.
     * </pre>
     *
     * <code>.google.api.Usage usage = 15;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Usage, com.google.api.Usage.Builder, com.google.api.UsageOrBuilder> 
        getUsageFieldBuilder() {
      if (usageBuilder_ == null) {
        usageBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Usage, com.google.api.Usage.Builder, com.google.api.UsageOrBuilder>(
                getUsage(),
                getParentForChildren(),
                isClean());
        usage_ = null;
      }
      return usageBuilder_;
    }

    private java.util.List<com.google.api.Endpoint> endpoints_ =
      java.util.Collections.emptyList();
    private void ensureEndpointsIsMutable() {
      if (!((bitField0_ & 0x00008000) != 0)) {
        endpoints_ = new java.util.ArrayList<com.google.api.Endpoint>(endpoints_);
        bitField0_ |= 0x00008000;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.Endpoint, com.google.api.Endpoint.Builder, com.google.api.EndpointOrBuilder> endpointsBuilder_;

    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public java.util.List<com.google.api.Endpoint> getEndpointsList() {
      if (endpointsBuilder_ == null) {
        return java.util.Collections.unmodifiableList(endpoints_);
      } else {
        return endpointsBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public int getEndpointsCount() {
      if (endpointsBuilder_ == null) {
        return endpoints_.size();
      } else {
        return endpointsBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public com.google.api.Endpoint getEndpoints(int index) {
      if (endpointsBuilder_ == null) {
        return endpoints_.get(index);
      } else {
        return endpointsBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder setEndpoints(
        int index, com.google.api.Endpoint value) {
      if (endpointsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureEndpointsIsMutable();
        endpoints_.set(index, value);
        onChanged();
      } else {
        endpointsBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder setEndpoints(
        int index, com.google.api.Endpoint.Builder builderForValue) {
      if (endpointsBuilder_ == null) {
        ensureEndpointsIsMutable();
        endpoints_.set(index, builderForValue.build());
        onChanged();
      } else {
        endpointsBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder addEndpoints(com.google.api.Endpoint value) {
      if (endpointsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureEndpointsIsMutable();
        endpoints_.add(value);
        onChanged();
      } else {
        endpointsBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder addEndpoints(
        int index, com.google.api.Endpoint value) {
      if (endpointsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureEndpointsIsMutable();
        endpoints_.add(index, value);
        onChanged();
      } else {
        endpointsBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder addEndpoints(
        com.google.api.Endpoint.Builder builderForValue) {
      if (endpointsBuilder_ == null) {
        ensureEndpointsIsMutable();
        endpoints_.add(builderForValue.build());
        onChanged();
      } else {
        endpointsBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder addEndpoints(
        int index, com.google.api.Endpoint.Builder builderForValue) {
      if (endpointsBuilder_ == null) {
        ensureEndpointsIsMutable();
        endpoints_.add(index, builderForValue.build());
        onChanged();
      } else {
        endpointsBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder addAllEndpoints(
        java.lang.Iterable<? extends com.google.api.Endpoint> values) {
      if (endpointsBuilder_ == null) {
        ensureEndpointsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, endpoints_);
        onChanged();
      } else {
        endpointsBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder clearEndpoints() {
      if (endpointsBuilder_ == null) {
        endpoints_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00008000);
        onChanged();
      } else {
        endpointsBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public Builder removeEndpoints(int index) {
      if (endpointsBuilder_ == null) {
        ensureEndpointsIsMutable();
        endpoints_.remove(index);
        onChanged();
      } else {
        endpointsBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public com.google.api.Endpoint.Builder getEndpointsBuilder(
        int index) {
      return getEndpointsFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public com.google.api.EndpointOrBuilder getEndpointsOrBuilder(
        int index) {
      if (endpointsBuilder_ == null) {
        return endpoints_.get(index);  } else {
        return endpointsBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public java.util.List<? extends com.google.api.EndpointOrBuilder> 
         getEndpointsOrBuilderList() {
      if (endpointsBuilder_ != null) {
        return endpointsBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(endpoints_);
      }
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public com.google.api.Endpoint.Builder addEndpointsBuilder() {
      return getEndpointsFieldBuilder().addBuilder(
          com.google.api.Endpoint.getDefaultInstance());
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public com.google.api.Endpoint.Builder addEndpointsBuilder(
        int index) {
      return getEndpointsFieldBuilder().addBuilder(
          index, com.google.api.Endpoint.getDefaultInstance());
    }
    /**
     * <pre>
     * Configuration for network endpoints.  If this is empty, then an endpoint
     * with the same name as the service is automatically generated to service all
     * defined APIs.
     * </pre>
     *
     * <code>repeated .google.api.Endpoint endpoints = 18;</code>
     */
    public java.util.List<com.google.api.Endpoint.Builder> 
         getEndpointsBuilderList() {
      return getEndpointsFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.Endpoint, com.google.api.Endpoint.Builder, com.google.api.EndpointOrBuilder> 
        getEndpointsFieldBuilder() {
      if (endpointsBuilder_ == null) {
        endpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.api.Endpoint, com.google.api.Endpoint.Builder, com.google.api.EndpointOrBuilder>(
                endpoints_,
                ((bitField0_ & 0x00008000) != 0),
                getParentForChildren(),
                isClean());
        endpoints_ = null;
      }
      return endpointsBuilder_;
    }

    private com.google.api.Control control_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Control, com.google.api.Control.Builder, com.google.api.ControlOrBuilder> controlBuilder_;
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public boolean hasControl() {
      return controlBuilder_ != null || control_ != null;
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public com.google.api.Control getControl() {
      if (controlBuilder_ == null) {
        return control_ == null ? com.google.api.Control.getDefaultInstance() : control_;
      } else {
        return controlBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public Builder setControl(com.google.api.Control value) {
      if (controlBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        control_ = value;
        onChanged();
      } else {
        controlBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public Builder setControl(
        com.google.api.Control.Builder builderForValue) {
      if (controlBuilder_ == null) {
        control_ = builderForValue.build();
        onChanged();
      } else {
        controlBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public Builder mergeControl(com.google.api.Control value) {
      if (controlBuilder_ == null) {
        if (control_ != null) {
          control_ =
            com.google.api.Control.newBuilder(control_).mergeFrom(value).buildPartial();
        } else {
          control_ = value;
        }
        onChanged();
      } else {
        controlBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public Builder clearControl() {
      if (controlBuilder_ == null) {
        control_ = null;
        onChanged();
      } else {
        control_ = null;
        controlBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public com.google.api.Control.Builder getControlBuilder() {
      
      onChanged();
      return getControlFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    public com.google.api.ControlOrBuilder getControlOrBuilder() {
      if (controlBuilder_ != null) {
        return controlBuilder_.getMessageOrBuilder();
      } else {
        return control_ == null ?
            com.google.api.Control.getDefaultInstance() : control_;
      }
    }
    /**
     * <pre>
     * Configuration for the service control plane.
     * </pre>
     *
     * <code>.google.api.Control control = 21;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Control, com.google.api.Control.Builder, com.google.api.ControlOrBuilder> 
        getControlFieldBuilder() {
      if (controlBuilder_ == null) {
        controlBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Control, com.google.api.Control.Builder, com.google.api.ControlOrBuilder>(
                getControl(),
                getParentForChildren(),
                isClean());
        control_ = null;
      }
      return controlBuilder_;
    }

    private java.util.List<com.google.api.LogDescriptor> logs_ =
      java.util.Collections.emptyList();
    private void ensureLogsIsMutable() {
      if (!((bitField0_ & 0x00020000) != 0)) {
        logs_ = new java.util.ArrayList<com.google.api.LogDescriptor>(logs_);
        bitField0_ |= 0x00020000;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.LogDescriptor, com.google.api.LogDescriptor.Builder, com.google.api.LogDescriptorOrBuilder> logsBuilder_;

    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public java.util.List<com.google.api.LogDescriptor> getLogsList() {
      if (logsBuilder_ == null) {
        return java.util.Collections.unmodifiableList(logs_);
      } else {
        return logsBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public int getLogsCount() {
      if (logsBuilder_ == null) {
        return logs_.size();
      } else {
        return logsBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public com.google.api.LogDescriptor getLogs(int index) {
      if (logsBuilder_ == null) {
        return logs_.get(index);
      } else {
        return logsBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder setLogs(
        int index, com.google.api.LogDescriptor value) {
      if (logsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureLogsIsMutable();
        logs_.set(index, value);
        onChanged();
      } else {
        logsBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder setLogs(
        int index, com.google.api.LogDescriptor.Builder builderForValue) {
      if (logsBuilder_ == null) {
        ensureLogsIsMutable();
        logs_.set(index, builderForValue.build());
        onChanged();
      } else {
        logsBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder addLogs(com.google.api.LogDescriptor value) {
      if (logsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureLogsIsMutable();
        logs_.add(value);
        onChanged();
      } else {
        logsBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder addLogs(
        int index, com.google.api.LogDescriptor value) {
      if (logsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureLogsIsMutable();
        logs_.add(index, value);
        onChanged();
      } else {
        logsBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder addLogs(
        com.google.api.LogDescriptor.Builder builderForValue) {
      if (logsBuilder_ == null) {
        ensureLogsIsMutable();
        logs_.add(builderForValue.build());
        onChanged();
      } else {
        logsBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder addLogs(
        int index, com.google.api.LogDescriptor.Builder builderForValue) {
      if (logsBuilder_ == null) {
        ensureLogsIsMutable();
        logs_.add(index, builderForValue.build());
        onChanged();
      } else {
        logsBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder addAllLogs(
        java.lang.Iterable<? extends com.google.api.LogDescriptor> values) {
      if (logsBuilder_ == null) {
        ensureLogsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, logs_);
        onChanged();
      } else {
        logsBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder clearLogs() {
      if (logsBuilder_ == null) {
        logs_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00020000);
        onChanged();
      } else {
        logsBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public Builder removeLogs(int index) {
      if (logsBuilder_ == null) {
        ensureLogsIsMutable();
        logs_.remove(index);
        onChanged();
      } else {
        logsBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public com.google.api.LogDescriptor.Builder getLogsBuilder(
        int index) {
      return getLogsFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public com.google.api.LogDescriptorOrBuilder getLogsOrBuilder(
        int index) {
      if (logsBuilder_ == null) {
        return logs_.get(index);  } else {
        return logsBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public java.util.List<? extends com.google.api.LogDescriptorOrBuilder> 
         getLogsOrBuilderList() {
      if (logsBuilder_ != null) {
        return logsBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(logs_);
      }
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public com.google.api.LogDescriptor.Builder addLogsBuilder() {
      return getLogsFieldBuilder().addBuilder(
          com.google.api.LogDescriptor.getDefaultInstance());
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public com.google.api.LogDescriptor.Builder addLogsBuilder(
        int index) {
      return getLogsFieldBuilder().addBuilder(
          index, com.google.api.LogDescriptor.getDefaultInstance());
    }
    /**
     * <pre>
     * Defines the logs used by this service.
     * </pre>
     *
     * <code>repeated .google.api.LogDescriptor logs = 23;</code>
     */
    public java.util.List<com.google.api.LogDescriptor.Builder> 
         getLogsBuilderList() {
      return getLogsFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.LogDescriptor, com.google.api.LogDescriptor.Builder, com.google.api.LogDescriptorOrBuilder> 
        getLogsFieldBuilder() {
      if (logsBuilder_ == null) {
        logsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.api.LogDescriptor, com.google.api.LogDescriptor.Builder, com.google.api.LogDescriptorOrBuilder>(
                logs_,
                ((bitField0_ & 0x00020000) != 0),
                getParentForChildren(),
                isClean());
        logs_ = null;
      }
      return logsBuilder_;
    }

    private java.util.List<com.google.api.MetricDescriptor> metrics_ =
      java.util.Collections.emptyList();
    private void ensureMetricsIsMutable() {
      if (!((bitField0_ & 0x00040000) != 0)) {
        metrics_ = new java.util.ArrayList<com.google.api.MetricDescriptor>(metrics_);
        bitField0_ |= 0x00040000;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.MetricDescriptor, com.google.api.MetricDescriptor.Builder, com.google.api.MetricDescriptorOrBuilder> metricsBuilder_;

    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public java.util.List<com.google.api.MetricDescriptor> getMetricsList() {
      if (metricsBuilder_ == null) {
        return java.util.Collections.unmodifiableList(metrics_);
      } else {
        return metricsBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public int getMetricsCount() {
      if (metricsBuilder_ == null) {
        return metrics_.size();
      } else {
        return metricsBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public com.google.api.MetricDescriptor getMetrics(int index) {
      if (metricsBuilder_ == null) {
        return metrics_.get(index);
      } else {
        return metricsBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder setMetrics(
        int index, com.google.api.MetricDescriptor value) {
      if (metricsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureMetricsIsMutable();
        metrics_.set(index, value);
        onChanged();
      } else {
        metricsBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder setMetrics(
        int index, com.google.api.MetricDescriptor.Builder builderForValue) {
      if (metricsBuilder_ == null) {
        ensureMetricsIsMutable();
        metrics_.set(index, builderForValue.build());
        onChanged();
      } else {
        metricsBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder addMetrics(com.google.api.MetricDescriptor value) {
      if (metricsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureMetricsIsMutable();
        metrics_.add(value);
        onChanged();
      } else {
        metricsBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder addMetrics(
        int index, com.google.api.MetricDescriptor value) {
      if (metricsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureMetricsIsMutable();
        metrics_.add(index, value);
        onChanged();
      } else {
        metricsBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder addMetrics(
        com.google.api.MetricDescriptor.Builder builderForValue) {
      if (metricsBuilder_ == null) {
        ensureMetricsIsMutable();
        metrics_.add(builderForValue.build());
        onChanged();
      } else {
        metricsBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder addMetrics(
        int index, com.google.api.MetricDescriptor.Builder builderForValue) {
      if (metricsBuilder_ == null) {
        ensureMetricsIsMutable();
        metrics_.add(index, builderForValue.build());
        onChanged();
      } else {
        metricsBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder addAllMetrics(
        java.lang.Iterable<? extends com.google.api.MetricDescriptor> values) {
      if (metricsBuilder_ == null) {
        ensureMetricsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, metrics_);
        onChanged();
      } else {
        metricsBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder clearMetrics() {
      if (metricsBuilder_ == null) {
        metrics_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00040000);
        onChanged();
      } else {
        metricsBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public Builder removeMetrics(int index) {
      if (metricsBuilder_ == null) {
        ensureMetricsIsMutable();
        metrics_.remove(index);
        onChanged();
      } else {
        metricsBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public com.google.api.MetricDescriptor.Builder getMetricsBuilder(
        int index) {
      return getMetricsFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public com.google.api.MetricDescriptorOrBuilder getMetricsOrBuilder(
        int index) {
      if (metricsBuilder_ == null) {
        return metrics_.get(index);  } else {
        return metricsBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public java.util.List<? extends com.google.api.MetricDescriptorOrBuilder> 
         getMetricsOrBuilderList() {
      if (metricsBuilder_ != null) {
        return metricsBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(metrics_);
      }
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public com.google.api.MetricDescriptor.Builder addMetricsBuilder() {
      return getMetricsFieldBuilder().addBuilder(
          com.google.api.MetricDescriptor.getDefaultInstance());
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public com.google.api.MetricDescriptor.Builder addMetricsBuilder(
        int index) {
      return getMetricsFieldBuilder().addBuilder(
          index, com.google.api.MetricDescriptor.getDefaultInstance());
    }
    /**
     * <pre>
     * Defines the metrics used by this service.
     * </pre>
     *
     * <code>repeated .google.api.MetricDescriptor metrics = 24;</code>
     */
    public java.util.List<com.google.api.MetricDescriptor.Builder> 
         getMetricsBuilderList() {
      return getMetricsFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.MetricDescriptor, com.google.api.MetricDescriptor.Builder, com.google.api.MetricDescriptorOrBuilder> 
        getMetricsFieldBuilder() {
      if (metricsBuilder_ == null) {
        metricsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.api.MetricDescriptor, com.google.api.MetricDescriptor.Builder, com.google.api.MetricDescriptorOrBuilder>(
                metrics_,
                ((bitField0_ & 0x00040000) != 0),
                getParentForChildren(),
                isClean());
        metrics_ = null;
      }
      return metricsBuilder_;
    }

    private java.util.List<com.google.api.MonitoredResourceDescriptor> monitoredResources_ =
      java.util.Collections.emptyList();
    private void ensureMonitoredResourcesIsMutable() {
      if (!((bitField0_ & 0x00080000) != 0)) {
        monitoredResources_ = new java.util.ArrayList<com.google.api.MonitoredResourceDescriptor>(monitoredResources_);
        bitField0_ |= 0x00080000;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.MonitoredResourceDescriptor, com.google.api.MonitoredResourceDescriptor.Builder, com.google.api.MonitoredResourceDescriptorOrBuilder> monitoredResourcesBuilder_;

    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public java.util.List<com.google.api.MonitoredResourceDescriptor> getMonitoredResourcesList() {
      if (monitoredResourcesBuilder_ == null) {
        return java.util.Collections.unmodifiableList(monitoredResources_);
      } else {
        return monitoredResourcesBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public int getMonitoredResourcesCount() {
      if (monitoredResourcesBuilder_ == null) {
        return monitoredResources_.size();
      } else {
        return monitoredResourcesBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public com.google.api.MonitoredResourceDescriptor getMonitoredResources(int index) {
      if (monitoredResourcesBuilder_ == null) {
        return monitoredResources_.get(index);
      } else {
        return monitoredResourcesBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder setMonitoredResources(
        int index, com.google.api.MonitoredResourceDescriptor value) {
      if (monitoredResourcesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureMonitoredResourcesIsMutable();
        monitoredResources_.set(index, value);
        onChanged();
      } else {
        monitoredResourcesBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder setMonitoredResources(
        int index, com.google.api.MonitoredResourceDescriptor.Builder builderForValue) {
      if (monitoredResourcesBuilder_ == null) {
        ensureMonitoredResourcesIsMutable();
        monitoredResources_.set(index, builderForValue.build());
        onChanged();
      } else {
        monitoredResourcesBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder addMonitoredResources(com.google.api.MonitoredResourceDescriptor value) {
      if (monitoredResourcesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureMonitoredResourcesIsMutable();
        monitoredResources_.add(value);
        onChanged();
      } else {
        monitoredResourcesBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder addMonitoredResources(
        int index, com.google.api.MonitoredResourceDescriptor value) {
      if (monitoredResourcesBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureMonitoredResourcesIsMutable();
        monitoredResources_.add(index, value);
        onChanged();
      } else {
        monitoredResourcesBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder addMonitoredResources(
        com.google.api.MonitoredResourceDescriptor.Builder builderForValue) {
      if (monitoredResourcesBuilder_ == null) {
        ensureMonitoredResourcesIsMutable();
        monitoredResources_.add(builderForValue.build());
        onChanged();
      } else {
        monitoredResourcesBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder addMonitoredResources(
        int index, com.google.api.MonitoredResourceDescriptor.Builder builderForValue) {
      if (monitoredResourcesBuilder_ == null) {
        ensureMonitoredResourcesIsMutable();
        monitoredResources_.add(index, builderForValue.build());
        onChanged();
      } else {
        monitoredResourcesBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder addAllMonitoredResources(
        java.lang.Iterable<? extends com.google.api.MonitoredResourceDescriptor> values) {
      if (monitoredResourcesBuilder_ == null) {
        ensureMonitoredResourcesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, monitoredResources_);
        onChanged();
      } else {
        monitoredResourcesBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder clearMonitoredResources() {
      if (monitoredResourcesBuilder_ == null) {
        monitoredResources_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00080000);
        onChanged();
      } else {
        monitoredResourcesBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public Builder removeMonitoredResources(int index) {
      if (monitoredResourcesBuilder_ == null) {
        ensureMonitoredResourcesIsMutable();
        monitoredResources_.remove(index);
        onChanged();
      } else {
        monitoredResourcesBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public com.google.api.MonitoredResourceDescriptor.Builder getMonitoredResourcesBuilder(
        int index) {
      return getMonitoredResourcesFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public com.google.api.MonitoredResourceDescriptorOrBuilder getMonitoredResourcesOrBuilder(
        int index) {
      if (monitoredResourcesBuilder_ == null) {
        return monitoredResources_.get(index);  } else {
        return monitoredResourcesBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public java.util.List<? extends com.google.api.MonitoredResourceDescriptorOrBuilder> 
         getMonitoredResourcesOrBuilderList() {
      if (monitoredResourcesBuilder_ != null) {
        return monitoredResourcesBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(monitoredResources_);
      }
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public com.google.api.MonitoredResourceDescriptor.Builder addMonitoredResourcesBuilder() {
      return getMonitoredResourcesFieldBuilder().addBuilder(
          com.google.api.MonitoredResourceDescriptor.getDefaultInstance());
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public com.google.api.MonitoredResourceDescriptor.Builder addMonitoredResourcesBuilder(
        int index) {
      return getMonitoredResourcesFieldBuilder().addBuilder(
          index, com.google.api.MonitoredResourceDescriptor.getDefaultInstance());
    }
    /**
     * <pre>
     * Defines the monitored resources used by this service. This is required
     * by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
     * </pre>
     *
     * <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>
     */
    public java.util.List<com.google.api.MonitoredResourceDescriptor.Builder> 
         getMonitoredResourcesBuilderList() {
      return getMonitoredResourcesFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.api.MonitoredResourceDescriptor, com.google.api.MonitoredResourceDescriptor.Builder, com.google.api.MonitoredResourceDescriptorOrBuilder> 
        getMonitoredResourcesFieldBuilder() {
      if (monitoredResourcesBuilder_ == null) {
        monitoredResourcesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.api.MonitoredResourceDescriptor, com.google.api.MonitoredResourceDescriptor.Builder, com.google.api.MonitoredResourceDescriptorOrBuilder>(
                monitoredResources_,
                ((bitField0_ & 0x00080000) != 0),
                getParentForChildren(),
                isClean());
        monitoredResources_ = null;
      }
      return monitoredResourcesBuilder_;
    }

    private com.google.api.Billing billing_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Billing, com.google.api.Billing.Builder, com.google.api.BillingOrBuilder> billingBuilder_;
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public boolean hasBilling() {
      return billingBuilder_ != null || billing_ != null;
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public com.google.api.Billing getBilling() {
      if (billingBuilder_ == null) {
        return billing_ == null ? com.google.api.Billing.getDefaultInstance() : billing_;
      } else {
        return billingBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public Builder setBilling(com.google.api.Billing value) {
      if (billingBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        billing_ = value;
        onChanged();
      } else {
        billingBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public Builder setBilling(
        com.google.api.Billing.Builder builderForValue) {
      if (billingBuilder_ == null) {
        billing_ = builderForValue.build();
        onChanged();
      } else {
        billingBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public Builder mergeBilling(com.google.api.Billing value) {
      if (billingBuilder_ == null) {
        if (billing_ != null) {
          billing_ =
            com.google.api.Billing.newBuilder(billing_).mergeFrom(value).buildPartial();
        } else {
          billing_ = value;
        }
        onChanged();
      } else {
        billingBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public Builder clearBilling() {
      if (billingBuilder_ == null) {
        billing_ = null;
        onChanged();
      } else {
        billing_ = null;
        billingBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public com.google.api.Billing.Builder getBillingBuilder() {
      
      onChanged();
      return getBillingFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    public com.google.api.BillingOrBuilder getBillingOrBuilder() {
      if (billingBuilder_ != null) {
        return billingBuilder_.getMessageOrBuilder();
      } else {
        return billing_ == null ?
            com.google.api.Billing.getDefaultInstance() : billing_;
      }
    }
    /**
     * <pre>
     * Billing configuration.
     * </pre>
     *
     * <code>.google.api.Billing billing = 26;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Billing, com.google.api.Billing.Builder, com.google.api.BillingOrBuilder> 
        getBillingFieldBuilder() {
      if (billingBuilder_ == null) {
        billingBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Billing, com.google.api.Billing.Builder, com.google.api.BillingOrBuilder>(
                getBilling(),
                getParentForChildren(),
                isClean());
        billing_ = null;
      }
      return billingBuilder_;
    }

    private com.google.api.Logging logging_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Logging, com.google.api.Logging.Builder, com.google.api.LoggingOrBuilder> loggingBuilder_;
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public boolean hasLogging() {
      return loggingBuilder_ != null || logging_ != null;
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public com.google.api.Logging getLogging() {
      if (loggingBuilder_ == null) {
        return logging_ == null ? com.google.api.Logging.getDefaultInstance() : logging_;
      } else {
        return loggingBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public Builder setLogging(com.google.api.Logging value) {
      if (loggingBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        logging_ = value;
        onChanged();
      } else {
        loggingBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public Builder setLogging(
        com.google.api.Logging.Builder builderForValue) {
      if (loggingBuilder_ == null) {
        logging_ = builderForValue.build();
        onChanged();
      } else {
        loggingBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public Builder mergeLogging(com.google.api.Logging value) {
      if (loggingBuilder_ == null) {
        if (logging_ != null) {
          logging_ =
            com.google.api.Logging.newBuilder(logging_).mergeFrom(value).buildPartial();
        } else {
          logging_ = value;
        }
        onChanged();
      } else {
        loggingBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public Builder clearLogging() {
      if (loggingBuilder_ == null) {
        logging_ = null;
        onChanged();
      } else {
        logging_ = null;
        loggingBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public com.google.api.Logging.Builder getLoggingBuilder() {
      
      onChanged();
      return getLoggingFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    public com.google.api.LoggingOrBuilder getLoggingOrBuilder() {
      if (loggingBuilder_ != null) {
        return loggingBuilder_.getMessageOrBuilder();
      } else {
        return logging_ == null ?
            com.google.api.Logging.getDefaultInstance() : logging_;
      }
    }
    /**
     * <pre>
     * Logging configuration.
     * </pre>
     *
     * <code>.google.api.Logging logging = 27;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Logging, com.google.api.Logging.Builder, com.google.api.LoggingOrBuilder> 
        getLoggingFieldBuilder() {
      if (loggingBuilder_ == null) {
        loggingBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Logging, com.google.api.Logging.Builder, com.google.api.LoggingOrBuilder>(
                getLogging(),
                getParentForChildren(),
                isClean());
        logging_ = null;
      }
      return loggingBuilder_;
    }

    private com.google.api.Monitoring monitoring_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Monitoring, com.google.api.Monitoring.Builder, com.google.api.MonitoringOrBuilder> monitoringBuilder_;
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public boolean hasMonitoring() {
      return monitoringBuilder_ != null || monitoring_ != null;
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public com.google.api.Monitoring getMonitoring() {
      if (monitoringBuilder_ == null) {
        return monitoring_ == null ? com.google.api.Monitoring.getDefaultInstance() : monitoring_;
      } else {
        return monitoringBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public Builder setMonitoring(com.google.api.Monitoring value) {
      if (monitoringBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        monitoring_ = value;
        onChanged();
      } else {
        monitoringBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public Builder setMonitoring(
        com.google.api.Monitoring.Builder builderForValue) {
      if (monitoringBuilder_ == null) {
        monitoring_ = builderForValue.build();
        onChanged();
      } else {
        monitoringBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public Builder mergeMonitoring(com.google.api.Monitoring value) {
      if (monitoringBuilder_ == null) {
        if (monitoring_ != null) {
          monitoring_ =
            com.google.api.Monitoring.newBuilder(monitoring_).mergeFrom(value).buildPartial();
        } else {
          monitoring_ = value;
        }
        onChanged();
      } else {
        monitoringBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public Builder clearMonitoring() {
      if (monitoringBuilder_ == null) {
        monitoring_ = null;
        onChanged();
      } else {
        monitoring_ = null;
        monitoringBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public com.google.api.Monitoring.Builder getMonitoringBuilder() {
      
      onChanged();
      return getMonitoringFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    public com.google.api.MonitoringOrBuilder getMonitoringOrBuilder() {
      if (monitoringBuilder_ != null) {
        return monitoringBuilder_.getMessageOrBuilder();
      } else {
        return monitoring_ == null ?
            com.google.api.Monitoring.getDefaultInstance() : monitoring_;
      }
    }
    /**
     * <pre>
     * Monitoring configuration.
     * </pre>
     *
     * <code>.google.api.Monitoring monitoring = 28;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Monitoring, com.google.api.Monitoring.Builder, com.google.api.MonitoringOrBuilder> 
        getMonitoringFieldBuilder() {
      if (monitoringBuilder_ == null) {
        monitoringBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Monitoring, com.google.api.Monitoring.Builder, com.google.api.MonitoringOrBuilder>(
                getMonitoring(),
                getParentForChildren(),
                isClean());
        monitoring_ = null;
      }
      return monitoringBuilder_;
    }

    private com.google.api.SystemParameters systemParameters_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.SystemParameters, com.google.api.SystemParameters.Builder, com.google.api.SystemParametersOrBuilder> systemParametersBuilder_;
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public boolean hasSystemParameters() {
      return systemParametersBuilder_ != null || systemParameters_ != null;
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public com.google.api.SystemParameters getSystemParameters() {
      if (systemParametersBuilder_ == null) {
        return systemParameters_ == null ? com.google.api.SystemParameters.getDefaultInstance() : systemParameters_;
      } else {
        return systemParametersBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public Builder setSystemParameters(com.google.api.SystemParameters value) {
      if (systemParametersBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        systemParameters_ = value;
        onChanged();
      } else {
        systemParametersBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public Builder setSystemParameters(
        com.google.api.SystemParameters.Builder builderForValue) {
      if (systemParametersBuilder_ == null) {
        systemParameters_ = builderForValue.build();
        onChanged();
      } else {
        systemParametersBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public Builder mergeSystemParameters(com.google.api.SystemParameters value) {
      if (systemParametersBuilder_ == null) {
        if (systemParameters_ != null) {
          systemParameters_ =
            com.google.api.SystemParameters.newBuilder(systemParameters_).mergeFrom(value).buildPartial();
        } else {
          systemParameters_ = value;
        }
        onChanged();
      } else {
        systemParametersBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public Builder clearSystemParameters() {
      if (systemParametersBuilder_ == null) {
        systemParameters_ = null;
        onChanged();
      } else {
        systemParameters_ = null;
        systemParametersBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public com.google.api.SystemParameters.Builder getSystemParametersBuilder() {
      
      onChanged();
      return getSystemParametersFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    public com.google.api.SystemParametersOrBuilder getSystemParametersOrBuilder() {
      if (systemParametersBuilder_ != null) {
        return systemParametersBuilder_.getMessageOrBuilder();
      } else {
        return systemParameters_ == null ?
            com.google.api.SystemParameters.getDefaultInstance() : systemParameters_;
      }
    }
    /**
     * <pre>
     * System parameter configuration.
     * </pre>
     *
     * <code>.google.api.SystemParameters system_parameters = 29;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.SystemParameters, com.google.api.SystemParameters.Builder, com.google.api.SystemParametersOrBuilder> 
        getSystemParametersFieldBuilder() {
      if (systemParametersBuilder_ == null) {
        systemParametersBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.SystemParameters, com.google.api.SystemParameters.Builder, com.google.api.SystemParametersOrBuilder>(
                getSystemParameters(),
                getParentForChildren(),
                isClean());
        systemParameters_ = null;
      }
      return systemParametersBuilder_;
    }

    private com.google.api.SourceInfo sourceInfo_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.SourceInfo, com.google.api.SourceInfo.Builder, com.google.api.SourceInfoOrBuilder> sourceInfoBuilder_;
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public boolean hasSourceInfo() {
      return sourceInfoBuilder_ != null || sourceInfo_ != null;
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public com.google.api.SourceInfo getSourceInfo() {
      if (sourceInfoBuilder_ == null) {
        return sourceInfo_ == null ? com.google.api.SourceInfo.getDefaultInstance() : sourceInfo_;
      } else {
        return sourceInfoBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public Builder setSourceInfo(com.google.api.SourceInfo value) {
      if (sourceInfoBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        sourceInfo_ = value;
        onChanged();
      } else {
        sourceInfoBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public Builder setSourceInfo(
        com.google.api.SourceInfo.Builder builderForValue) {
      if (sourceInfoBuilder_ == null) {
        sourceInfo_ = builderForValue.build();
        onChanged();
      } else {
        sourceInfoBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public Builder mergeSourceInfo(com.google.api.SourceInfo value) {
      if (sourceInfoBuilder_ == null) {
        if (sourceInfo_ != null) {
          sourceInfo_ =
            com.google.api.SourceInfo.newBuilder(sourceInfo_).mergeFrom(value).buildPartial();
        } else {
          sourceInfo_ = value;
        }
        onChanged();
      } else {
        sourceInfoBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public Builder clearSourceInfo() {
      if (sourceInfoBuilder_ == null) {
        sourceInfo_ = null;
        onChanged();
      } else {
        sourceInfo_ = null;
        sourceInfoBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public com.google.api.SourceInfo.Builder getSourceInfoBuilder() {
      
      onChanged();
      return getSourceInfoFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    public com.google.api.SourceInfoOrBuilder getSourceInfoOrBuilder() {
      if (sourceInfoBuilder_ != null) {
        return sourceInfoBuilder_.getMessageOrBuilder();
      } else {
        return sourceInfo_ == null ?
            com.google.api.SourceInfo.getDefaultInstance() : sourceInfo_;
      }
    }
    /**
     * <pre>
     * Output only. The source information for this configuration if available.
     * </pre>
     *
     * <code>.google.api.SourceInfo source_info = 37;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.SourceInfo, com.google.api.SourceInfo.Builder, com.google.api.SourceInfoOrBuilder> 
        getSourceInfoFieldBuilder() {
      if (sourceInfoBuilder_ == null) {
        sourceInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.SourceInfo, com.google.api.SourceInfo.Builder, com.google.api.SourceInfoOrBuilder>(
                getSourceInfo(),
                getParentForChildren(),
                isClean());
        sourceInfo_ = null;
      }
      return sourceInfoBuilder_;
    }

    private com.google.api.Experimental experimental_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Experimental, com.google.api.Experimental.Builder, com.google.api.ExperimentalOrBuilder> experimentalBuilder_;
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public boolean hasExperimental() {
      return experimentalBuilder_ != null || experimental_ != null;
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public com.google.api.Experimental getExperimental() {
      if (experimentalBuilder_ == null) {
        return experimental_ == null ? com.google.api.Experimental.getDefaultInstance() : experimental_;
      } else {
        return experimentalBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public Builder setExperimental(com.google.api.Experimental value) {
      if (experimentalBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        experimental_ = value;
        onChanged();
      } else {
        experimentalBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public Builder setExperimental(
        com.google.api.Experimental.Builder builderForValue) {
      if (experimentalBuilder_ == null) {
        experimental_ = builderForValue.build();
        onChanged();
      } else {
        experimentalBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public Builder mergeExperimental(com.google.api.Experimental value) {
      if (experimentalBuilder_ == null) {
        if (experimental_ != null) {
          experimental_ =
            com.google.api.Experimental.newBuilder(experimental_).mergeFrom(value).buildPartial();
        } else {
          experimental_ = value;
        }
        onChanged();
      } else {
        experimentalBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public Builder clearExperimental() {
      if (experimentalBuilder_ == null) {
        experimental_ = null;
        onChanged();
      } else {
        experimental_ = null;
        experimentalBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public com.google.api.Experimental.Builder getExperimentalBuilder() {
      
      onChanged();
      return getExperimentalFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    public com.google.api.ExperimentalOrBuilder getExperimentalOrBuilder() {
      if (experimentalBuilder_ != null) {
        return experimentalBuilder_.getMessageOrBuilder();
      } else {
        return experimental_ == null ?
            com.google.api.Experimental.getDefaultInstance() : experimental_;
      }
    }
    /**
     * <pre>
     * Experimental configuration.
     * </pre>
     *
     * <code>.google.api.Experimental experimental = 101;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.api.Experimental, com.google.api.Experimental.Builder, com.google.api.ExperimentalOrBuilder> 
        getExperimentalFieldBuilder() {
      if (experimentalBuilder_ == null) {
        experimentalBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.api.Experimental, com.google.api.Experimental.Builder, com.google.api.ExperimentalOrBuilder>(
                getExperimental(),
                getParentForChildren(),
                isClean());
        experimental_ = null;
      }
      return experimentalBuilder_;
    }
    @java.lang.Override
    public final Builder setUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return super.setUnknownFields(unknownFields);
    }

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


    // @@protoc_insertion_point(builder_scope:google.api.Service)
  }

  // @@protoc_insertion_point(class_scope:google.api.Service)
  private static final com.google.api.Service DEFAULT_INSTANCE;
  static {
    DEFAULT_INSTANCE = new com.google.api.Service();
  }

  public static com.google.api.Service getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

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

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

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

  @java.lang.Override
  public com.google.api.Service getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }

}

