// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/ads/googleads/v14/common/metrics.proto

package com.google.ads.googleads.v14.common;

/**
 * <pre>
 * Metrics data.
 * </pre>
 *
 * Protobuf type {@code google.ads.googleads.v14.common.Metrics}
 */
public final class Metrics extends
    com.google.protobuf.GeneratedMessageV3 implements
    // @@protoc_insertion_point(message_implements:google.ads.googleads.v14.common.Metrics)
    MetricsOrBuilder {
private static final long serialVersionUID = 0L;
  // Use Metrics.newBuilder() to construct.
  private Metrics(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
    super(builder);
  }
  private Metrics() {
    conversionLastReceivedRequestDateTime_ = "";
    conversionLastConversionDate_ = "";
    historicalCreativeQualityScore_ = 0;
    historicalLandingPageQualityScore_ = 0;
    historicalSearchPredictedCtr_ = 0;
    interactionEventTypes_ = java.util.Collections.emptyList();
    optimizationScoreUrl_ = "";
  }

  @java.lang.Override
  @SuppressWarnings({"unused"})
  protected java.lang.Object newInstance(
      UnusedPrivateParameter unused) {
    return new Metrics();
  }

  public static final com.google.protobuf.Descriptors.Descriptor
      getDescriptor() {
    return com.google.ads.googleads.v14.common.MetricsProto.internal_static_google_ads_googleads_v14_common_Metrics_descriptor;
  }

  @java.lang.Override
  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return com.google.ads.googleads.v14.common.MetricsProto.internal_static_google_ads_googleads_v14_common_Metrics_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            com.google.ads.googleads.v14.common.Metrics.class, com.google.ads.googleads.v14.common.Metrics.Builder.class);
  }

  private int bitField0_;
  private int bitField1_;
  private int bitField2_;
  private int bitField3_;
  private int bitField4_;
  public static final int ABSOLUTE_TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER = 183;
  private double absoluteTopImpressionPercentage_ = 0D;
  /**
   * <pre>
   * The percent of your ad impressions that are shown as the very first ad
   * above the organic search results.
   * </pre>
   *
   * <code>optional double absolute_top_impression_percentage = 183;</code>
   * @return Whether the absoluteTopImpressionPercentage field is set.
   */
  @java.lang.Override
  public boolean hasAbsoluteTopImpressionPercentage() {
    return ((bitField0_ & 0x00000001) != 0);
  }
  /**
   * <pre>
   * The percent of your ad impressions that are shown as the very first ad
   * above the organic search results.
   * </pre>
   *
   * <code>optional double absolute_top_impression_percentage = 183;</code>
   * @return The absoluteTopImpressionPercentage.
   */
  @java.lang.Override
  public double getAbsoluteTopImpressionPercentage() {
    return absoluteTopImpressionPercentage_;
  }

  public static final int ACTIVE_VIEW_CPM_FIELD_NUMBER = 184;
  private double activeViewCpm_ = 0D;
  /**
   * <pre>
   * Average cost of viewable impressions (`active_view_impressions`).
   * </pre>
   *
   * <code>optional double active_view_cpm = 184;</code>
   * @return Whether the activeViewCpm field is set.
   */
  @java.lang.Override
  public boolean hasActiveViewCpm() {
    return ((bitField0_ & 0x00000002) != 0);
  }
  /**
   * <pre>
   * Average cost of viewable impressions (`active_view_impressions`).
   * </pre>
   *
   * <code>optional double active_view_cpm = 184;</code>
   * @return The activeViewCpm.
   */
  @java.lang.Override
  public double getActiveViewCpm() {
    return activeViewCpm_;
  }

  public static final int ACTIVE_VIEW_CTR_FIELD_NUMBER = 185;
  private double activeViewCtr_ = 0D;
  /**
   * <pre>
   * Active view measurable clicks divided by active view viewable impressions.
   *
   * This metric is reported only for the Display Network.
   * </pre>
   *
   * <code>optional double active_view_ctr = 185;</code>
   * @return Whether the activeViewCtr field is set.
   */
  @java.lang.Override
  public boolean hasActiveViewCtr() {
    return ((bitField0_ & 0x00000004) != 0);
  }
  /**
   * <pre>
   * Active view measurable clicks divided by active view viewable impressions.
   *
   * This metric is reported only for the Display Network.
   * </pre>
   *
   * <code>optional double active_view_ctr = 185;</code>
   * @return The activeViewCtr.
   */
  @java.lang.Override
  public double getActiveViewCtr() {
    return activeViewCtr_;
  }

  public static final int ACTIVE_VIEW_IMPRESSIONS_FIELD_NUMBER = 186;
  private long activeViewImpressions_ = 0L;
  /**
   * <pre>
   * A measurement of how often your ad has become viewable on a Display
   * Network site.
   * </pre>
   *
   * <code>optional int64 active_view_impressions = 186;</code>
   * @return Whether the activeViewImpressions field is set.
   */
  @java.lang.Override
  public boolean hasActiveViewImpressions() {
    return ((bitField0_ & 0x00000008) != 0);
  }
  /**
   * <pre>
   * A measurement of how often your ad has become viewable on a Display
   * Network site.
   * </pre>
   *
   * <code>optional int64 active_view_impressions = 186;</code>
   * @return The activeViewImpressions.
   */
  @java.lang.Override
  public long getActiveViewImpressions() {
    return activeViewImpressions_;
  }

  public static final int ACTIVE_VIEW_MEASURABILITY_FIELD_NUMBER = 187;
  private double activeViewMeasurability_ = 0D;
  /**
   * <pre>
   * The ratio of impressions that could be measured by Active View over the
   * number of served impressions.
   * </pre>
   *
   * <code>optional double active_view_measurability = 187;</code>
   * @return Whether the activeViewMeasurability field is set.
   */
  @java.lang.Override
  public boolean hasActiveViewMeasurability() {
    return ((bitField0_ & 0x00000010) != 0);
  }
  /**
   * <pre>
   * The ratio of impressions that could be measured by Active View over the
   * number of served impressions.
   * </pre>
   *
   * <code>optional double active_view_measurability = 187;</code>
   * @return The activeViewMeasurability.
   */
  @java.lang.Override
  public double getActiveViewMeasurability() {
    return activeViewMeasurability_;
  }

  public static final int ACTIVE_VIEW_MEASURABLE_COST_MICROS_FIELD_NUMBER = 188;
  private long activeViewMeasurableCostMicros_ = 0L;
  /**
   * <pre>
   * The cost of the impressions you received that were measurable by Active
   * View.
   * </pre>
   *
   * <code>optional int64 active_view_measurable_cost_micros = 188;</code>
   * @return Whether the activeViewMeasurableCostMicros field is set.
   */
  @java.lang.Override
  public boolean hasActiveViewMeasurableCostMicros() {
    return ((bitField0_ & 0x00000020) != 0);
  }
  /**
   * <pre>
   * The cost of the impressions you received that were measurable by Active
   * View.
   * </pre>
   *
   * <code>optional int64 active_view_measurable_cost_micros = 188;</code>
   * @return The activeViewMeasurableCostMicros.
   */
  @java.lang.Override
  public long getActiveViewMeasurableCostMicros() {
    return activeViewMeasurableCostMicros_;
  }

  public static final int ACTIVE_VIEW_MEASURABLE_IMPRESSIONS_FIELD_NUMBER = 189;
  private long activeViewMeasurableImpressions_ = 0L;
  /**
   * <pre>
   * The number of times your ads are appearing on placements in positions
   * where they can be seen.
   * </pre>
   *
   * <code>optional int64 active_view_measurable_impressions = 189;</code>
   * @return Whether the activeViewMeasurableImpressions field is set.
   */
  @java.lang.Override
  public boolean hasActiveViewMeasurableImpressions() {
    return ((bitField0_ & 0x00000040) != 0);
  }
  /**
   * <pre>
   * The number of times your ads are appearing on placements in positions
   * where they can be seen.
   * </pre>
   *
   * <code>optional int64 active_view_measurable_impressions = 189;</code>
   * @return The activeViewMeasurableImpressions.
   */
  @java.lang.Override
  public long getActiveViewMeasurableImpressions() {
    return activeViewMeasurableImpressions_;
  }

  public static final int ACTIVE_VIEW_VIEWABILITY_FIELD_NUMBER = 190;
  private double activeViewViewability_ = 0D;
  /**
   * <pre>
   * The percentage of time when your ad appeared on an Active View enabled site
   * (measurable impressions) and was viewable (viewable impressions).
   * </pre>
   *
   * <code>optional double active_view_viewability = 190;</code>
   * @return Whether the activeViewViewability field is set.
   */
  @java.lang.Override
  public boolean hasActiveViewViewability() {
    return ((bitField0_ & 0x00000080) != 0);
  }
  /**
   * <pre>
   * The percentage of time when your ad appeared on an Active View enabled site
   * (measurable impressions) and was viewable (viewable impressions).
   * </pre>
   *
   * <code>optional double active_view_viewability = 190;</code>
   * @return The activeViewViewability.
   */
  @java.lang.Override
  public double getActiveViewViewability() {
    return activeViewViewability_;
  }

  public static final int ALL_CONVERSIONS_FROM_INTERACTIONS_RATE_FIELD_NUMBER = 191;
  private double allConversionsFromInteractionsRate_ = 0D;
  /**
   * <pre>
   * All conversions from interactions (as oppose to view through conversions)
   * divided by the number of ad interactions.
   * </pre>
   *
   * <code>optional double all_conversions_from_interactions_rate = 191;</code>
   * @return Whether the allConversionsFromInteractionsRate field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromInteractionsRate() {
    return ((bitField0_ & 0x00000100) != 0);
  }
  /**
   * <pre>
   * All conversions from interactions (as oppose to view through conversions)
   * divided by the number of ad interactions.
   * </pre>
   *
   * <code>optional double all_conversions_from_interactions_rate = 191;</code>
   * @return The allConversionsFromInteractionsRate.
   */
  @java.lang.Override
  public double getAllConversionsFromInteractionsRate() {
    return allConversionsFromInteractionsRate_;
  }

  public static final int ALL_CONVERSIONS_VALUE_FIELD_NUMBER = 192;
  private double allConversionsValue_ = 0D;
  /**
   * <pre>
   * The value of all conversions.
   * </pre>
   *
   * <code>optional double all_conversions_value = 192;</code>
   * @return Whether the allConversionsValue field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsValue() {
    return ((bitField0_ & 0x00000200) != 0);
  }
  /**
   * <pre>
   * The value of all conversions.
   * </pre>
   *
   * <code>optional double all_conversions_value = 192;</code>
   * @return The allConversionsValue.
   */
  @java.lang.Override
  public double getAllConversionsValue() {
    return allConversionsValue_;
  }

  public static final int ALL_CONVERSIONS_VALUE_BY_CONVERSION_DATE_FIELD_NUMBER = 240;
  private double allConversionsValueByConversionDate_ = 0D;
  /**
   * <pre>
   * The value of all conversions. When this column is selected with date, the
   * values in date column means the conversion date. Details for the
   * by_conversion_date columns are available at
   * https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>double all_conversions_value_by_conversion_date = 240;</code>
   * @return The allConversionsValueByConversionDate.
   */
  @java.lang.Override
  public double getAllConversionsValueByConversionDate() {
    return allConversionsValueByConversionDate_;
  }

  public static final int ALL_NEW_CUSTOMER_LIFETIME_VALUE_FIELD_NUMBER = 294;
  private double allNewCustomerLifetimeValue_ = 0D;
  /**
   * <pre>
   * All of new customers' lifetime conversion value. If you have set up
   * customer acquisition goal at either account level or campaign level, this
   * will include the additional conversion value from new customers for both
   * biddable and non-biddable conversions. If your campaign has adopted the
   * customer acquisition goal and selected "bid higher for new customers",
   * these values will be included in "all_conversions_value". See
   * https://support.google.com/google-ads/answer/12080169 for more details.
   * </pre>
   *
   * <code>optional double all_new_customer_lifetime_value = 294;</code>
   * @return Whether the allNewCustomerLifetimeValue field is set.
   */
  @java.lang.Override
  public boolean hasAllNewCustomerLifetimeValue() {
    return ((bitField0_ & 0x00000400) != 0);
  }
  /**
   * <pre>
   * All of new customers' lifetime conversion value. If you have set up
   * customer acquisition goal at either account level or campaign level, this
   * will include the additional conversion value from new customers for both
   * biddable and non-biddable conversions. If your campaign has adopted the
   * customer acquisition goal and selected "bid higher for new customers",
   * these values will be included in "all_conversions_value". See
   * https://support.google.com/google-ads/answer/12080169 for more details.
   * </pre>
   *
   * <code>optional double all_new_customer_lifetime_value = 294;</code>
   * @return The allNewCustomerLifetimeValue.
   */
  @java.lang.Override
  public double getAllNewCustomerLifetimeValue() {
    return allNewCustomerLifetimeValue_;
  }

  public static final int ALL_CONVERSIONS_FIELD_NUMBER = 193;
  private double allConversions_ = 0D;
  /**
   * <pre>
   * The total number of conversions. This includes all conversions regardless
   * of the value of include_in_conversions_metric.
   * </pre>
   *
   * <code>optional double all_conversions = 193;</code>
   * @return Whether the allConversions field is set.
   */
  @java.lang.Override
  public boolean hasAllConversions() {
    return ((bitField0_ & 0x00000800) != 0);
  }
  /**
   * <pre>
   * The total number of conversions. This includes all conversions regardless
   * of the value of include_in_conversions_metric.
   * </pre>
   *
   * <code>optional double all_conversions = 193;</code>
   * @return The allConversions.
   */
  @java.lang.Override
  public double getAllConversions() {
    return allConversions_;
  }

  public static final int ALL_CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER = 241;
  private double allConversionsByConversionDate_ = 0D;
  /**
   * <pre>
   * The total number of conversions. This includes all conversions regardless
   * of the value of include_in_conversions_metric. When this column is selected
   * with date, the values in date column means the conversion date. Details for
   * the by_conversion_date columns are available at
   * https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>double all_conversions_by_conversion_date = 241;</code>
   * @return The allConversionsByConversionDate.
   */
  @java.lang.Override
  public double getAllConversionsByConversionDate() {
    return allConversionsByConversionDate_;
  }

  public static final int ALL_CONVERSIONS_VALUE_PER_COST_FIELD_NUMBER = 194;
  private double allConversionsValuePerCost_ = 0D;
  /**
   * <pre>
   * The value of all conversions divided by the total cost of ad interactions
   * (such as clicks for text ads or views for video ads).
   * </pre>
   *
   * <code>optional double all_conversions_value_per_cost = 194;</code>
   * @return Whether the allConversionsValuePerCost field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsValuePerCost() {
    return ((bitField0_ & 0x00001000) != 0);
  }
  /**
   * <pre>
   * The value of all conversions divided by the total cost of ad interactions
   * (such as clicks for text ads or views for video ads).
   * </pre>
   *
   * <code>optional double all_conversions_value_per_cost = 194;</code>
   * @return The allConversionsValuePerCost.
   */
  @java.lang.Override
  public double getAllConversionsValuePerCost() {
    return allConversionsValuePerCost_;
  }

  public static final int ALL_CONVERSIONS_FROM_CLICK_TO_CALL_FIELD_NUMBER = 195;
  private double allConversionsFromClickToCall_ = 0D;
  /**
   * <pre>
   * The number of times people clicked the "Call" button to call a store during
   * or after clicking an ad. This number doesn't include whether or not calls
   * were connected, or the duration of any calls.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_click_to_call = 195;</code>
   * @return Whether the allConversionsFromClickToCall field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromClickToCall() {
    return ((bitField0_ & 0x00002000) != 0);
  }
  /**
   * <pre>
   * The number of times people clicked the "Call" button to call a store during
   * or after clicking an ad. This number doesn't include whether or not calls
   * were connected, or the duration of any calls.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_click_to_call = 195;</code>
   * @return The allConversionsFromClickToCall.
   */
  @java.lang.Override
  public double getAllConversionsFromClickToCall() {
    return allConversionsFromClickToCall_;
  }

  public static final int ALL_CONVERSIONS_FROM_DIRECTIONS_FIELD_NUMBER = 196;
  private double allConversionsFromDirections_ = 0D;
  /**
   * <pre>
   * The number of times people clicked a "Get directions" button to navigate to
   * a store after clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_directions = 196;</code>
   * @return Whether the allConversionsFromDirections field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromDirections() {
    return ((bitField0_ & 0x00004000) != 0);
  }
  /**
   * <pre>
   * The number of times people clicked a "Get directions" button to navigate to
   * a store after clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_directions = 196;</code>
   * @return The allConversionsFromDirections.
   */
  @java.lang.Override
  public double getAllConversionsFromDirections() {
    return allConversionsFromDirections_;
  }

  public static final int ALL_CONVERSIONS_FROM_INTERACTIONS_VALUE_PER_INTERACTION_FIELD_NUMBER = 197;
  private double allConversionsFromInteractionsValuePerInteraction_ = 0D;
  /**
   * <pre>
   * The value of all conversions from interactions divided by the total number
   * of interactions.
   * </pre>
   *
   * <code>optional double all_conversions_from_interactions_value_per_interaction = 197;</code>
   * @return Whether the allConversionsFromInteractionsValuePerInteraction field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromInteractionsValuePerInteraction() {
    return ((bitField0_ & 0x00008000) != 0);
  }
  /**
   * <pre>
   * The value of all conversions from interactions divided by the total number
   * of interactions.
   * </pre>
   *
   * <code>optional double all_conversions_from_interactions_value_per_interaction = 197;</code>
   * @return The allConversionsFromInteractionsValuePerInteraction.
   */
  @java.lang.Override
  public double getAllConversionsFromInteractionsValuePerInteraction() {
    return allConversionsFromInteractionsValuePerInteraction_;
  }

  public static final int ALL_CONVERSIONS_FROM_MENU_FIELD_NUMBER = 198;
  private double allConversionsFromMenu_ = 0D;
  /**
   * <pre>
   * The number of times people clicked a link to view a store's menu after
   * clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_menu = 198;</code>
   * @return Whether the allConversionsFromMenu field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromMenu() {
    return ((bitField0_ & 0x00010000) != 0);
  }
  /**
   * <pre>
   * The number of times people clicked a link to view a store's menu after
   * clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_menu = 198;</code>
   * @return The allConversionsFromMenu.
   */
  @java.lang.Override
  public double getAllConversionsFromMenu() {
    return allConversionsFromMenu_;
  }

  public static final int ALL_CONVERSIONS_FROM_ORDER_FIELD_NUMBER = 199;
  private double allConversionsFromOrder_ = 0D;
  /**
   * <pre>
   * The number of times people placed an order at a store after clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_order = 199;</code>
   * @return Whether the allConversionsFromOrder field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromOrder() {
    return ((bitField0_ & 0x00020000) != 0);
  }
  /**
   * <pre>
   * The number of times people placed an order at a store after clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_order = 199;</code>
   * @return The allConversionsFromOrder.
   */
  @java.lang.Override
  public double getAllConversionsFromOrder() {
    return allConversionsFromOrder_;
  }

  public static final int ALL_CONVERSIONS_FROM_OTHER_ENGAGEMENT_FIELD_NUMBER = 200;
  private double allConversionsFromOtherEngagement_ = 0D;
  /**
   * <pre>
   * The number of other conversions (for example, posting a review or saving a
   * location for a store) that occurred after people clicked an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_other_engagement = 200;</code>
   * @return Whether the allConversionsFromOtherEngagement field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromOtherEngagement() {
    return ((bitField0_ & 0x00040000) != 0);
  }
  /**
   * <pre>
   * The number of other conversions (for example, posting a review or saving a
   * location for a store) that occurred after people clicked an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_other_engagement = 200;</code>
   * @return The allConversionsFromOtherEngagement.
   */
  @java.lang.Override
  public double getAllConversionsFromOtherEngagement() {
    return allConversionsFromOtherEngagement_;
  }

  public static final int ALL_CONVERSIONS_FROM_STORE_VISIT_FIELD_NUMBER = 201;
  private double allConversionsFromStoreVisit_ = 0D;
  /**
   * <pre>
   * Estimated number of times people visited a store after clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_store_visit = 201;</code>
   * @return Whether the allConversionsFromStoreVisit field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromStoreVisit() {
    return ((bitField0_ & 0x00080000) != 0);
  }
  /**
   * <pre>
   * Estimated number of times people visited a store after clicking an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_store_visit = 201;</code>
   * @return The allConversionsFromStoreVisit.
   */
  @java.lang.Override
  public double getAllConversionsFromStoreVisit() {
    return allConversionsFromStoreVisit_;
  }

  public static final int ALL_CONVERSIONS_FROM_STORE_WEBSITE_FIELD_NUMBER = 202;
  private double allConversionsFromStoreWebsite_ = 0D;
  /**
   * <pre>
   * The number of times that people were taken to a store's URL after clicking
   * an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_store_website = 202;</code>
   * @return Whether the allConversionsFromStoreWebsite field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromStoreWebsite() {
    return ((bitField0_ & 0x00100000) != 0);
  }
  /**
   * <pre>
   * The number of times that people were taken to a store's URL after clicking
   * an ad.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional double all_conversions_from_store_website = 202;</code>
   * @return The allConversionsFromStoreWebsite.
   */
  @java.lang.Override
  public double getAllConversionsFromStoreWebsite() {
    return allConversionsFromStoreWebsite_;
  }

  public static final int AUCTION_INSIGHT_SEARCH_ABSOLUTE_TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER = 258;
  private double auctionInsightSearchAbsoluteTopImpressionPercentage_ = 0D;
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * the ads of another participant showed as the very first ad above the
   * organic search results.
   * This percentage is computed only over the auctions that you appeared in
   * the page.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_absolute_top_impression_percentage = 258;</code>
   * @return Whether the auctionInsightSearchAbsoluteTopImpressionPercentage field is set.
   */
  @java.lang.Override
  public boolean hasAuctionInsightSearchAbsoluteTopImpressionPercentage() {
    return ((bitField0_ & 0x00200000) != 0);
  }
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * the ads of another participant showed as the very first ad above the
   * organic search results.
   * This percentage is computed only over the auctions that you appeared in
   * the page.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_absolute_top_impression_percentage = 258;</code>
   * @return The auctionInsightSearchAbsoluteTopImpressionPercentage.
   */
  @java.lang.Override
  public double getAuctionInsightSearchAbsoluteTopImpressionPercentage() {
    return auctionInsightSearchAbsoluteTopImpressionPercentage_;
  }

  public static final int AUCTION_INSIGHT_SEARCH_IMPRESSION_SHARE_FIELD_NUMBER = 259;
  private double auctionInsightSearchImpressionShare_ = 0D;
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells the
   * percentage of impressions that another participant obtained, over the total
   * number of impressions that your ads were eligible for.
   * Any value below 0.1 is reported as 0.0999.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_impression_share = 259;</code>
   * @return Whether the auctionInsightSearchImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasAuctionInsightSearchImpressionShare() {
    return ((bitField0_ & 0x00400000) != 0);
  }
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells the
   * percentage of impressions that another participant obtained, over the total
   * number of impressions that your ads were eligible for.
   * Any value below 0.1 is reported as 0.0999.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_impression_share = 259;</code>
   * @return The auctionInsightSearchImpressionShare.
   */
  @java.lang.Override
  public double getAuctionInsightSearchImpressionShare() {
    return auctionInsightSearchImpressionShare_;
  }

  public static final int AUCTION_INSIGHT_SEARCH_OUTRANKING_SHARE_FIELD_NUMBER = 260;
  private double auctionInsightSearchOutrankingShare_ = 0D;
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells the
   * percentage of impressions that your ads outranked (showed above)
   * another participant in the auction, compared to the total number of
   * impressions that your ads were eligible for.
   * Any value below 0.1 is reported as 0.0999.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_outranking_share = 260;</code>
   * @return Whether the auctionInsightSearchOutrankingShare field is set.
   */
  @java.lang.Override
  public boolean hasAuctionInsightSearchOutrankingShare() {
    return ((bitField0_ & 0x00800000) != 0);
  }
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells the
   * percentage of impressions that your ads outranked (showed above)
   * another participant in the auction, compared to the total number of
   * impressions that your ads were eligible for.
   * Any value below 0.1 is reported as 0.0999.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_outranking_share = 260;</code>
   * @return The auctionInsightSearchOutrankingShare.
   */
  @java.lang.Override
  public double getAuctionInsightSearchOutrankingShare() {
    return auctionInsightSearchOutrankingShare_;
  }

  public static final int AUCTION_INSIGHT_SEARCH_OVERLAP_RATE_FIELD_NUMBER = 261;
  private double auctionInsightSearchOverlapRate_ = 0D;
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * another participant's ad received an impression when your ad also received
   * an impression.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_overlap_rate = 261;</code>
   * @return Whether the auctionInsightSearchOverlapRate field is set.
   */
  @java.lang.Override
  public boolean hasAuctionInsightSearchOverlapRate() {
    return ((bitField0_ & 0x01000000) != 0);
  }
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * another participant's ad received an impression when your ad also received
   * an impression.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_overlap_rate = 261;</code>
   * @return The auctionInsightSearchOverlapRate.
   */
  @java.lang.Override
  public double getAuctionInsightSearchOverlapRate() {
    return auctionInsightSearchOverlapRate_;
  }

  public static final int AUCTION_INSIGHT_SEARCH_POSITION_ABOVE_RATE_FIELD_NUMBER = 262;
  private double auctionInsightSearchPositionAboveRate_ = 0D;
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * another participant's ad was shown in a higher position than yours, when
   * both of your ads were shown at the same page.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_position_above_rate = 262;</code>
   * @return Whether the auctionInsightSearchPositionAboveRate field is set.
   */
  @java.lang.Override
  public boolean hasAuctionInsightSearchPositionAboveRate() {
    return ((bitField0_ & 0x02000000) != 0);
  }
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * another participant's ad was shown in a higher position than yours, when
   * both of your ads were shown at the same page.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_position_above_rate = 262;</code>
   * @return The auctionInsightSearchPositionAboveRate.
   */
  @java.lang.Override
  public double getAuctionInsightSearchPositionAboveRate() {
    return auctionInsightSearchPositionAboveRate_;
  }

  public static final int AUCTION_INSIGHT_SEARCH_TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER = 263;
  private double auctionInsightSearchTopImpressionPercentage_ = 0D;
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * the ads of another participant showed above the organic search results.
   * This percentage is computed only over the auctions that you appeared in
   * the page.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_top_impression_percentage = 263;</code>
   * @return Whether the auctionInsightSearchTopImpressionPercentage field is set.
   */
  @java.lang.Override
  public boolean hasAuctionInsightSearchTopImpressionPercentage() {
    return ((bitField0_ & 0x04000000) != 0);
  }
  /**
   * <pre>
   * This metric is part of the Auction Insights report, and tells how often
   * the ads of another participant showed above the organic search results.
   * This percentage is computed only over the auctions that you appeared in
   * the page.
   *
   * This metric is not publicly available.
   * </pre>
   *
   * <code>optional double auction_insight_search_top_impression_percentage = 263;</code>
   * @return The auctionInsightSearchTopImpressionPercentage.
   */
  @java.lang.Override
  public double getAuctionInsightSearchTopImpressionPercentage() {
    return auctionInsightSearchTopImpressionPercentage_;
  }

  public static final int AVERAGE_COST_FIELD_NUMBER = 203;
  private double averageCost_ = 0D;
  /**
   * <pre>
   * The average amount you pay per interaction. This amount is the total cost
   * of your ads divided by the total number of interactions.
   * </pre>
   *
   * <code>optional double average_cost = 203;</code>
   * @return Whether the averageCost field is set.
   */
  @java.lang.Override
  public boolean hasAverageCost() {
    return ((bitField0_ & 0x08000000) != 0);
  }
  /**
   * <pre>
   * The average amount you pay per interaction. This amount is the total cost
   * of your ads divided by the total number of interactions.
   * </pre>
   *
   * <code>optional double average_cost = 203;</code>
   * @return The averageCost.
   */
  @java.lang.Override
  public double getAverageCost() {
    return averageCost_;
  }

  public static final int AVERAGE_CPC_FIELD_NUMBER = 204;
  private double averageCpc_ = 0D;
  /**
   * <pre>
   * The total cost of all clicks divided by the total number of clicks
   * received.
   * </pre>
   *
   * <code>optional double average_cpc = 204;</code>
   * @return Whether the averageCpc field is set.
   */
  @java.lang.Override
  public boolean hasAverageCpc() {
    return ((bitField0_ & 0x10000000) != 0);
  }
  /**
   * <pre>
   * The total cost of all clicks divided by the total number of clicks
   * received.
   * </pre>
   *
   * <code>optional double average_cpc = 204;</code>
   * @return The averageCpc.
   */
  @java.lang.Override
  public double getAverageCpc() {
    return averageCpc_;
  }

  public static final int AVERAGE_CPE_FIELD_NUMBER = 205;
  private double averageCpe_ = 0D;
  /**
   * <pre>
   * The average amount that you've been charged for an ad engagement. This
   * amount is the total cost of all ad engagements divided by the total number
   * of ad engagements.
   * </pre>
   *
   * <code>optional double average_cpe = 205;</code>
   * @return Whether the averageCpe field is set.
   */
  @java.lang.Override
  public boolean hasAverageCpe() {
    return ((bitField0_ & 0x20000000) != 0);
  }
  /**
   * <pre>
   * The average amount that you've been charged for an ad engagement. This
   * amount is the total cost of all ad engagements divided by the total number
   * of ad engagements.
   * </pre>
   *
   * <code>optional double average_cpe = 205;</code>
   * @return The averageCpe.
   */
  @java.lang.Override
  public double getAverageCpe() {
    return averageCpe_;
  }

  public static final int AVERAGE_CPM_FIELD_NUMBER = 206;
  private double averageCpm_ = 0D;
  /**
   * <pre>
   * Average cost-per-thousand impressions (CPM).
   * </pre>
   *
   * <code>optional double average_cpm = 206;</code>
   * @return Whether the averageCpm field is set.
   */
  @java.lang.Override
  public boolean hasAverageCpm() {
    return ((bitField0_ & 0x40000000) != 0);
  }
  /**
   * <pre>
   * Average cost-per-thousand impressions (CPM).
   * </pre>
   *
   * <code>optional double average_cpm = 206;</code>
   * @return The averageCpm.
   */
  @java.lang.Override
  public double getAverageCpm() {
    return averageCpm_;
  }

  public static final int AVERAGE_CPV_FIELD_NUMBER = 207;
  private double averageCpv_ = 0D;
  /**
   * <pre>
   * The average amount you pay each time someone views your ad.
   * The average CPV is defined by the total cost of all ad views divided by
   * the number of views.
   * </pre>
   *
   * <code>optional double average_cpv = 207;</code>
   * @return Whether the averageCpv field is set.
   */
  @java.lang.Override
  public boolean hasAverageCpv() {
    return ((bitField0_ & 0x80000000) != 0);
  }
  /**
   * <pre>
   * The average amount you pay each time someone views your ad.
   * The average CPV is defined by the total cost of all ad views divided by
   * the number of views.
   * </pre>
   *
   * <code>optional double average_cpv = 207;</code>
   * @return The averageCpv.
   */
  @java.lang.Override
  public double getAverageCpv() {
    return averageCpv_;
  }

  public static final int AVERAGE_PAGE_VIEWS_FIELD_NUMBER = 208;
  private double averagePageViews_ = 0D;
  /**
   * <pre>
   * Average number of pages viewed per session.
   * </pre>
   *
   * <code>optional double average_page_views = 208;</code>
   * @return Whether the averagePageViews field is set.
   */
  @java.lang.Override
  public boolean hasAveragePageViews() {
    return ((bitField1_ & 0x00000001) != 0);
  }
  /**
   * <pre>
   * Average number of pages viewed per session.
   * </pre>
   *
   * <code>optional double average_page_views = 208;</code>
   * @return The averagePageViews.
   */
  @java.lang.Override
  public double getAveragePageViews() {
    return averagePageViews_;
  }

  public static final int AVERAGE_TIME_ON_SITE_FIELD_NUMBER = 209;
  private double averageTimeOnSite_ = 0D;
  /**
   * <pre>
   * Total duration of all sessions (in seconds) / number of sessions. Imported
   * from Google Analytics.
   * </pre>
   *
   * <code>optional double average_time_on_site = 209;</code>
   * @return Whether the averageTimeOnSite field is set.
   */
  @java.lang.Override
  public boolean hasAverageTimeOnSite() {
    return ((bitField1_ & 0x00000002) != 0);
  }
  /**
   * <pre>
   * Total duration of all sessions (in seconds) / number of sessions. Imported
   * from Google Analytics.
   * </pre>
   *
   * <code>optional double average_time_on_site = 209;</code>
   * @return The averageTimeOnSite.
   */
  @java.lang.Override
  public double getAverageTimeOnSite() {
    return averageTimeOnSite_;
  }

  public static final int BENCHMARK_AVERAGE_MAX_CPC_FIELD_NUMBER = 210;
  private double benchmarkAverageMaxCpc_ = 0D;
  /**
   * <pre>
   * An indication of how other advertisers are bidding on similar products.
   * </pre>
   *
   * <code>optional double benchmark_average_max_cpc = 210;</code>
   * @return Whether the benchmarkAverageMaxCpc field is set.
   */
  @java.lang.Override
  public boolean hasBenchmarkAverageMaxCpc() {
    return ((bitField1_ & 0x00000004) != 0);
  }
  /**
   * <pre>
   * An indication of how other advertisers are bidding on similar products.
   * </pre>
   *
   * <code>optional double benchmark_average_max_cpc = 210;</code>
   * @return The benchmarkAverageMaxCpc.
   */
  @java.lang.Override
  public double getBenchmarkAverageMaxCpc() {
    return benchmarkAverageMaxCpc_;
  }

  public static final int BIDDABLE_APP_INSTALL_CONVERSIONS_FIELD_NUMBER = 254;
  private double biddableAppInstallConversions_ = 0D;
  /**
   * <pre>
   * Number of app installs.
   * </pre>
   *
   * <code>optional double biddable_app_install_conversions = 254;</code>
   * @return Whether the biddableAppInstallConversions field is set.
   */
  @java.lang.Override
  public boolean hasBiddableAppInstallConversions() {
    return ((bitField1_ & 0x00000008) != 0);
  }
  /**
   * <pre>
   * Number of app installs.
   * </pre>
   *
   * <code>optional double biddable_app_install_conversions = 254;</code>
   * @return The biddableAppInstallConversions.
   */
  @java.lang.Override
  public double getBiddableAppInstallConversions() {
    return biddableAppInstallConversions_;
  }

  public static final int BIDDABLE_APP_POST_INSTALL_CONVERSIONS_FIELD_NUMBER = 255;
  private double biddableAppPostInstallConversions_ = 0D;
  /**
   * <pre>
   * Number of in-app actions.
   * </pre>
   *
   * <code>optional double biddable_app_post_install_conversions = 255;</code>
   * @return Whether the biddableAppPostInstallConversions field is set.
   */
  @java.lang.Override
  public boolean hasBiddableAppPostInstallConversions() {
    return ((bitField1_ & 0x00000010) != 0);
  }
  /**
   * <pre>
   * Number of in-app actions.
   * </pre>
   *
   * <code>optional double biddable_app_post_install_conversions = 255;</code>
   * @return The biddableAppPostInstallConversions.
   */
  @java.lang.Override
  public double getBiddableAppPostInstallConversions() {
    return biddableAppPostInstallConversions_;
  }

  public static final int BENCHMARK_CTR_FIELD_NUMBER = 211;
  private double benchmarkCtr_ = 0D;
  /**
   * <pre>
   * An indication on how other advertisers' Shopping ads for similar products
   * are performing based on how often people who see their ad click on it.
   * </pre>
   *
   * <code>optional double benchmark_ctr = 211;</code>
   * @return Whether the benchmarkCtr field is set.
   */
  @java.lang.Override
  public boolean hasBenchmarkCtr() {
    return ((bitField1_ & 0x00000020) != 0);
  }
  /**
   * <pre>
   * An indication on how other advertisers' Shopping ads for similar products
   * are performing based on how often people who see their ad click on it.
   * </pre>
   *
   * <code>optional double benchmark_ctr = 211;</code>
   * @return The benchmarkCtr.
   */
  @java.lang.Override
  public double getBenchmarkCtr() {
    return benchmarkCtr_;
  }

  public static final int BOUNCE_RATE_FIELD_NUMBER = 212;
  private double bounceRate_ = 0D;
  /**
   * <pre>
   * Percentage of clicks where the user only visited a single page on your
   * site. Imported from Google Analytics.
   * </pre>
   *
   * <code>optional double bounce_rate = 212;</code>
   * @return Whether the bounceRate field is set.
   */
  @java.lang.Override
  public boolean hasBounceRate() {
    return ((bitField1_ & 0x00000040) != 0);
  }
  /**
   * <pre>
   * Percentage of clicks where the user only visited a single page on your
   * site. Imported from Google Analytics.
   * </pre>
   *
   * <code>optional double bounce_rate = 212;</code>
   * @return The bounceRate.
   */
  @java.lang.Override
  public double getBounceRate() {
    return bounceRate_;
  }

  public static final int CLICKS_FIELD_NUMBER = 131;
  private long clicks_ = 0L;
  /**
   * <pre>
   * The number of clicks.
   * </pre>
   *
   * <code>optional int64 clicks = 131;</code>
   * @return Whether the clicks field is set.
   */
  @java.lang.Override
  public boolean hasClicks() {
    return ((bitField1_ & 0x00000080) != 0);
  }
  /**
   * <pre>
   * The number of clicks.
   * </pre>
   *
   * <code>optional int64 clicks = 131;</code>
   * @return The clicks.
   */
  @java.lang.Override
  public long getClicks() {
    return clicks_;
  }

  public static final int COMBINED_CLICKS_FIELD_NUMBER = 156;
  private long combinedClicks_ = 0L;
  /**
   * <pre>
   * The number of times your ad or your site's listing in the unpaid
   * results was clicked. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 combined_clicks = 156;</code>
   * @return Whether the combinedClicks field is set.
   */
  @java.lang.Override
  public boolean hasCombinedClicks() {
    return ((bitField1_ & 0x00000100) != 0);
  }
  /**
   * <pre>
   * The number of times your ad or your site's listing in the unpaid
   * results was clicked. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 combined_clicks = 156;</code>
   * @return The combinedClicks.
   */
  @java.lang.Override
  public long getCombinedClicks() {
    return combinedClicks_;
  }

  public static final int COMBINED_CLICKS_PER_QUERY_FIELD_NUMBER = 157;
  private double combinedClicksPerQuery_ = 0D;
  /**
   * <pre>
   * The number of times your ad or your site's listing in the unpaid
   * results was clicked (combined_clicks) divided by combined_queries. See the
   * help page at https://support.google.com/google-ads/answer/3097241 for
   * details.
   * </pre>
   *
   * <code>optional double combined_clicks_per_query = 157;</code>
   * @return Whether the combinedClicksPerQuery field is set.
   */
  @java.lang.Override
  public boolean hasCombinedClicksPerQuery() {
    return ((bitField1_ & 0x00000200) != 0);
  }
  /**
   * <pre>
   * The number of times your ad or your site's listing in the unpaid
   * results was clicked (combined_clicks) divided by combined_queries. See the
   * help page at https://support.google.com/google-ads/answer/3097241 for
   * details.
   * </pre>
   *
   * <code>optional double combined_clicks_per_query = 157;</code>
   * @return The combinedClicksPerQuery.
   */
  @java.lang.Override
  public double getCombinedClicksPerQuery() {
    return combinedClicksPerQuery_;
  }

  public static final int COMBINED_QUERIES_FIELD_NUMBER = 158;
  private long combinedQueries_ = 0L;
  /**
   * <pre>
   * The number of searches that returned pages from your site in the unpaid
   * results or showed one of your text ads. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 combined_queries = 158;</code>
   * @return Whether the combinedQueries field is set.
   */
  @java.lang.Override
  public boolean hasCombinedQueries() {
    return ((bitField1_ & 0x00000400) != 0);
  }
  /**
   * <pre>
   * The number of searches that returned pages from your site in the unpaid
   * results or showed one of your text ads. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 combined_queries = 158;</code>
   * @return The combinedQueries.
   */
  @java.lang.Override
  public long getCombinedQueries() {
    return combinedQueries_;
  }

  public static final int CONTENT_BUDGET_LOST_IMPRESSION_SHARE_FIELD_NUMBER = 159;
  private double contentBudgetLostImpressionShare_ = 0D;
  /**
   * <pre>
   * The estimated percent of times that your ad was eligible to show
   * on the Display Network but didn't because your budget was too low.
   * Note: Content budget lost impression share is reported in the range of 0
   * to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double content_budget_lost_impression_share = 159;</code>
   * @return Whether the contentBudgetLostImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasContentBudgetLostImpressionShare() {
    return ((bitField1_ & 0x00000800) != 0);
  }
  /**
   * <pre>
   * The estimated percent of times that your ad was eligible to show
   * on the Display Network but didn't because your budget was too low.
   * Note: Content budget lost impression share is reported in the range of 0
   * to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double content_budget_lost_impression_share = 159;</code>
   * @return The contentBudgetLostImpressionShare.
   */
  @java.lang.Override
  public double getContentBudgetLostImpressionShare() {
    return contentBudgetLostImpressionShare_;
  }

  public static final int CONTENT_IMPRESSION_SHARE_FIELD_NUMBER = 160;
  private double contentImpressionShare_ = 0D;
  /**
   * <pre>
   * The impressions you've received on the Display Network divided
   * by the estimated number of impressions you were eligible to receive.
   * Note: Content impression share is reported in the range of 0.1 to 1. Any
   * value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double content_impression_share = 160;</code>
   * @return Whether the contentImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasContentImpressionShare() {
    return ((bitField1_ & 0x00001000) != 0);
  }
  /**
   * <pre>
   * The impressions you've received on the Display Network divided
   * by the estimated number of impressions you were eligible to receive.
   * Note: Content impression share is reported in the range of 0.1 to 1. Any
   * value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double content_impression_share = 160;</code>
   * @return The contentImpressionShare.
   */
  @java.lang.Override
  public double getContentImpressionShare() {
    return contentImpressionShare_;
  }

  public static final int CONVERSION_LAST_RECEIVED_REQUEST_DATE_TIME_FIELD_NUMBER = 161;
  @SuppressWarnings("serial")
  private volatile java.lang.Object conversionLastReceivedRequestDateTime_ = "";
  /**
   * <pre>
   * The last date/time a conversion tag for this conversion action successfully
   * fired and was seen by Google Ads. This firing event may not have been the
   * result of an attributable conversion (for example, because the tag was
   * fired from a browser that did not previously click an ad from an
   * appropriate advertiser). The date/time is in the customer's time zone.
   * </pre>
   *
   * <code>optional string conversion_last_received_request_date_time = 161;</code>
   * @return Whether the conversionLastReceivedRequestDateTime field is set.
   */
  @java.lang.Override
  public boolean hasConversionLastReceivedRequestDateTime() {
    return ((bitField1_ & 0x00002000) != 0);
  }
  /**
   * <pre>
   * The last date/time a conversion tag for this conversion action successfully
   * fired and was seen by Google Ads. This firing event may not have been the
   * result of an attributable conversion (for example, because the tag was
   * fired from a browser that did not previously click an ad from an
   * appropriate advertiser). The date/time is in the customer's time zone.
   * </pre>
   *
   * <code>optional string conversion_last_received_request_date_time = 161;</code>
   * @return The conversionLastReceivedRequestDateTime.
   */
  @java.lang.Override
  public java.lang.String getConversionLastReceivedRequestDateTime() {
    java.lang.Object ref = conversionLastReceivedRequestDateTime_;
    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();
      conversionLastReceivedRequestDateTime_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The last date/time a conversion tag for this conversion action successfully
   * fired and was seen by Google Ads. This firing event may not have been the
   * result of an attributable conversion (for example, because the tag was
   * fired from a browser that did not previously click an ad from an
   * appropriate advertiser). The date/time is in the customer's time zone.
   * </pre>
   *
   * <code>optional string conversion_last_received_request_date_time = 161;</code>
   * @return The bytes for conversionLastReceivedRequestDateTime.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getConversionLastReceivedRequestDateTimeBytes() {
    java.lang.Object ref = conversionLastReceivedRequestDateTime_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      conversionLastReceivedRequestDateTime_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int CONVERSION_LAST_CONVERSION_DATE_FIELD_NUMBER = 162;
  @SuppressWarnings("serial")
  private volatile java.lang.Object conversionLastConversionDate_ = "";
  /**
   * <pre>
   * The date of the most recent conversion for this conversion action. The date
   * is in the customer's time zone.
   * </pre>
   *
   * <code>optional string conversion_last_conversion_date = 162;</code>
   * @return Whether the conversionLastConversionDate field is set.
   */
  @java.lang.Override
  public boolean hasConversionLastConversionDate() {
    return ((bitField1_ & 0x00004000) != 0);
  }
  /**
   * <pre>
   * The date of the most recent conversion for this conversion action. The date
   * is in the customer's time zone.
   * </pre>
   *
   * <code>optional string conversion_last_conversion_date = 162;</code>
   * @return The conversionLastConversionDate.
   */
  @java.lang.Override
  public java.lang.String getConversionLastConversionDate() {
    java.lang.Object ref = conversionLastConversionDate_;
    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();
      conversionLastConversionDate_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The date of the most recent conversion for this conversion action. The date
   * is in the customer's time zone.
   * </pre>
   *
   * <code>optional string conversion_last_conversion_date = 162;</code>
   * @return The bytes for conversionLastConversionDate.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getConversionLastConversionDateBytes() {
    java.lang.Object ref = conversionLastConversionDate_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      conversionLastConversionDate_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int CONTENT_RANK_LOST_IMPRESSION_SHARE_FIELD_NUMBER = 163;
  private double contentRankLostImpressionShare_ = 0D;
  /**
   * <pre>
   * The estimated percentage of impressions on the Display Network
   * that your ads didn't receive due to poor Ad Rank.
   * Note: Content rank lost impression share is reported in the range of 0
   * to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double content_rank_lost_impression_share = 163;</code>
   * @return Whether the contentRankLostImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasContentRankLostImpressionShare() {
    return ((bitField1_ & 0x00008000) != 0);
  }
  /**
   * <pre>
   * The estimated percentage of impressions on the Display Network
   * that your ads didn't receive due to poor Ad Rank.
   * Note: Content rank lost impression share is reported in the range of 0
   * to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double content_rank_lost_impression_share = 163;</code>
   * @return The contentRankLostImpressionShare.
   */
  @java.lang.Override
  public double getContentRankLostImpressionShare() {
    return contentRankLostImpressionShare_;
  }

  public static final int CONVERSIONS_FROM_INTERACTIONS_RATE_FIELD_NUMBER = 164;
  private double conversionsFromInteractionsRate_ = 0D;
  /**
   * <pre>
   * Conversions from interactions divided by the number of ad interactions
   * (such as clicks for text ads or views for video ads). This only includes
   * conversion actions which include_in_conversions_metric attribute is set to
   * true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   * </pre>
   *
   * <code>optional double conversions_from_interactions_rate = 164;</code>
   * @return Whether the conversionsFromInteractionsRate field is set.
   */
  @java.lang.Override
  public boolean hasConversionsFromInteractionsRate() {
    return ((bitField1_ & 0x00010000) != 0);
  }
  /**
   * <pre>
   * Conversions from interactions divided by the number of ad interactions
   * (such as clicks for text ads or views for video ads). This only includes
   * conversion actions which include_in_conversions_metric attribute is set to
   * true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   * </pre>
   *
   * <code>optional double conversions_from_interactions_rate = 164;</code>
   * @return The conversionsFromInteractionsRate.
   */
  @java.lang.Override
  public double getConversionsFromInteractionsRate() {
    return conversionsFromInteractionsRate_;
  }

  public static final int CONVERSIONS_VALUE_FIELD_NUMBER = 165;
  private double conversionsValue_ = 0D;
  /**
   * <pre>
   * The value of conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double conversions_value = 165;</code>
   * @return Whether the conversionsValue field is set.
   */
  @java.lang.Override
  public boolean hasConversionsValue() {
    return ((bitField1_ & 0x00020000) != 0);
  }
  /**
   * <pre>
   * The value of conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double conversions_value = 165;</code>
   * @return The conversionsValue.
   */
  @java.lang.Override
  public double getConversionsValue() {
    return conversionsValue_;
  }

  public static final int CONVERSIONS_VALUE_BY_CONVERSION_DATE_FIELD_NUMBER = 242;
  private double conversionsValueByConversionDate_ = 0D;
  /**
   * <pre>
   * The value of conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions. When this column is selected with date, the values in date
   * column means the conversion date. Details for the by_conversion_date
   * columns are available at
   * https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>double conversions_value_by_conversion_date = 242;</code>
   * @return The conversionsValueByConversionDate.
   */
  @java.lang.Override
  public double getConversionsValueByConversionDate() {
    return conversionsValueByConversionDate_;
  }

  public static final int NEW_CUSTOMER_LIFETIME_VALUE_FIELD_NUMBER = 293;
  private double newCustomerLifetimeValue_ = 0D;
  /**
   * <pre>
   * New customers' lifetime conversion value. If you have set up
   * customer acquisition goal at either account level or campaign level, this
   * will include the additional conversion value from new customers for
   * biddable conversions. If your campaign has adopted the customer
   * acquisition goal and selected "bid higher for new customers", these values
   * will be included in "conversions_value" for optimization. See
   * https://support.google.com/google-ads/answer/12080169 for more details.
   * </pre>
   *
   * <code>optional double new_customer_lifetime_value = 293;</code>
   * @return Whether the newCustomerLifetimeValue field is set.
   */
  @java.lang.Override
  public boolean hasNewCustomerLifetimeValue() {
    return ((bitField1_ & 0x00040000) != 0);
  }
  /**
   * <pre>
   * New customers' lifetime conversion value. If you have set up
   * customer acquisition goal at either account level or campaign level, this
   * will include the additional conversion value from new customers for
   * biddable conversions. If your campaign has adopted the customer
   * acquisition goal and selected "bid higher for new customers", these values
   * will be included in "conversions_value" for optimization. See
   * https://support.google.com/google-ads/answer/12080169 for more details.
   * </pre>
   *
   * <code>optional double new_customer_lifetime_value = 293;</code>
   * @return The newCustomerLifetimeValue.
   */
  @java.lang.Override
  public double getNewCustomerLifetimeValue() {
    return newCustomerLifetimeValue_;
  }

  public static final int CONVERSIONS_VALUE_PER_COST_FIELD_NUMBER = 166;
  private double conversionsValuePerCost_ = 0D;
  /**
   * <pre>
   * The value of conversions divided by the cost of ad interactions. This only
   * includes conversion actions which include_in_conversions_metric attribute
   * is set to true. If you use conversion-based bidding, your bid strategies
   * will optimize for these conversions.
   * </pre>
   *
   * <code>optional double conversions_value_per_cost = 166;</code>
   * @return Whether the conversionsValuePerCost field is set.
   */
  @java.lang.Override
  public boolean hasConversionsValuePerCost() {
    return ((bitField1_ & 0x00080000) != 0);
  }
  /**
   * <pre>
   * The value of conversions divided by the cost of ad interactions. This only
   * includes conversion actions which include_in_conversions_metric attribute
   * is set to true. If you use conversion-based bidding, your bid strategies
   * will optimize for these conversions.
   * </pre>
   *
   * <code>optional double conversions_value_per_cost = 166;</code>
   * @return The conversionsValuePerCost.
   */
  @java.lang.Override
  public double getConversionsValuePerCost() {
    return conversionsValuePerCost_;
  }

  public static final int CONVERSIONS_FROM_INTERACTIONS_VALUE_PER_INTERACTION_FIELD_NUMBER = 167;
  private double conversionsFromInteractionsValuePerInteraction_ = 0D;
  /**
   * <pre>
   * The value of conversions from interactions divided by the number of ad
   * interactions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double conversions_from_interactions_value_per_interaction = 167;</code>
   * @return Whether the conversionsFromInteractionsValuePerInteraction field is set.
   */
  @java.lang.Override
  public boolean hasConversionsFromInteractionsValuePerInteraction() {
    return ((bitField1_ & 0x00100000) != 0);
  }
  /**
   * <pre>
   * The value of conversions from interactions divided by the number of ad
   * interactions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double conversions_from_interactions_value_per_interaction = 167;</code>
   * @return The conversionsFromInteractionsValuePerInteraction.
   */
  @java.lang.Override
  public double getConversionsFromInteractionsValuePerInteraction() {
    return conversionsFromInteractionsValuePerInteraction_;
  }

  public static final int CONVERSIONS_FIELD_NUMBER = 168;
  private double conversions_ = 0D;
  /**
   * <pre>
   * The number of conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double conversions = 168;</code>
   * @return Whether the conversions field is set.
   */
  @java.lang.Override
  public boolean hasConversions() {
    return ((bitField1_ & 0x00200000) != 0);
  }
  /**
   * <pre>
   * The number of conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double conversions = 168;</code>
   * @return The conversions.
   */
  @java.lang.Override
  public double getConversions() {
    return conversions_;
  }

  public static final int CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER = 243;
  private double conversionsByConversionDate_ = 0D;
  /**
   * <pre>
   * The number of conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions. When this column is selected with date, the values in date
   * column means the conversion date. Details for the by_conversion_date
   * columns are available at
   * https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>double conversions_by_conversion_date = 243;</code>
   * @return The conversionsByConversionDate.
   */
  @java.lang.Override
  public double getConversionsByConversionDate() {
    return conversionsByConversionDate_;
  }

  public static final int COST_MICROS_FIELD_NUMBER = 169;
  private long costMicros_ = 0L;
  /**
   * <pre>
   * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
   * (CPM) costs during this period.
   * </pre>
   *
   * <code>optional int64 cost_micros = 169;</code>
   * @return Whether the costMicros field is set.
   */
  @java.lang.Override
  public boolean hasCostMicros() {
    return ((bitField1_ & 0x00400000) != 0);
  }
  /**
   * <pre>
   * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
   * (CPM) costs during this period.
   * </pre>
   *
   * <code>optional int64 cost_micros = 169;</code>
   * @return The costMicros.
   */
  @java.lang.Override
  public long getCostMicros() {
    return costMicros_;
  }

  public static final int COST_PER_ALL_CONVERSIONS_FIELD_NUMBER = 170;
  private double costPerAllConversions_ = 0D;
  /**
   * <pre>
   * The cost of ad interactions divided by all conversions.
   * </pre>
   *
   * <code>optional double cost_per_all_conversions = 170;</code>
   * @return Whether the costPerAllConversions field is set.
   */
  @java.lang.Override
  public boolean hasCostPerAllConversions() {
    return ((bitField1_ & 0x00800000) != 0);
  }
  /**
   * <pre>
   * The cost of ad interactions divided by all conversions.
   * </pre>
   *
   * <code>optional double cost_per_all_conversions = 170;</code>
   * @return The costPerAllConversions.
   */
  @java.lang.Override
  public double getCostPerAllConversions() {
    return costPerAllConversions_;
  }

  public static final int COST_PER_CONVERSION_FIELD_NUMBER = 171;
  private double costPerConversion_ = 0D;
  /**
   * <pre>
   * The cost of ad interactions divided by conversions. This only includes
   * conversion actions which include_in_conversions_metric attribute is set to
   * true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   * </pre>
   *
   * <code>optional double cost_per_conversion = 171;</code>
   * @return Whether the costPerConversion field is set.
   */
  @java.lang.Override
  public boolean hasCostPerConversion() {
    return ((bitField1_ & 0x01000000) != 0);
  }
  /**
   * <pre>
   * The cost of ad interactions divided by conversions. This only includes
   * conversion actions which include_in_conversions_metric attribute is set to
   * true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   * </pre>
   *
   * <code>optional double cost_per_conversion = 171;</code>
   * @return The costPerConversion.
   */
  @java.lang.Override
  public double getCostPerConversion() {
    return costPerConversion_;
  }

  public static final int COST_PER_CURRENT_MODEL_ATTRIBUTED_CONVERSION_FIELD_NUMBER = 172;
  private double costPerCurrentModelAttributedConversion_ = 0D;
  /**
   * <pre>
   * The cost of ad interactions divided by current model attributed
   * conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double cost_per_current_model_attributed_conversion = 172;</code>
   * @return Whether the costPerCurrentModelAttributedConversion field is set.
   */
  @java.lang.Override
  public boolean hasCostPerCurrentModelAttributedConversion() {
    return ((bitField1_ & 0x02000000) != 0);
  }
  /**
   * <pre>
   * The cost of ad interactions divided by current model attributed
   * conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double cost_per_current_model_attributed_conversion = 172;</code>
   * @return The costPerCurrentModelAttributedConversion.
   */
  @java.lang.Override
  public double getCostPerCurrentModelAttributedConversion() {
    return costPerCurrentModelAttributedConversion_;
  }

  public static final int CROSS_DEVICE_CONVERSIONS_FIELD_NUMBER = 173;
  private double crossDeviceConversions_ = 0D;
  /**
   * <pre>
   * Conversions from when a customer clicks on a Google Ads ad on one device,
   * then converts on a different device or browser.
   * Cross-device conversions are already included in all_conversions.
   * </pre>
   *
   * <code>optional double cross_device_conversions = 173;</code>
   * @return Whether the crossDeviceConversions field is set.
   */
  @java.lang.Override
  public boolean hasCrossDeviceConversions() {
    return ((bitField1_ & 0x04000000) != 0);
  }
  /**
   * <pre>
   * Conversions from when a customer clicks on a Google Ads ad on one device,
   * then converts on a different device or browser.
   * Cross-device conversions are already included in all_conversions.
   * </pre>
   *
   * <code>optional double cross_device_conversions = 173;</code>
   * @return The crossDeviceConversions.
   */
  @java.lang.Override
  public double getCrossDeviceConversions() {
    return crossDeviceConversions_;
  }

  public static final int CTR_FIELD_NUMBER = 174;
  private double ctr_ = 0D;
  /**
   * <pre>
   * The number of clicks your ad receives (Clicks) divided by the number
   * of times your ad is shown (Impressions).
   * </pre>
   *
   * <code>optional double ctr = 174;</code>
   * @return Whether the ctr field is set.
   */
  @java.lang.Override
  public boolean hasCtr() {
    return ((bitField1_ & 0x08000000) != 0);
  }
  /**
   * <pre>
   * The number of clicks your ad receives (Clicks) divided by the number
   * of times your ad is shown (Impressions).
   * </pre>
   *
   * <code>optional double ctr = 174;</code>
   * @return The ctr.
   */
  @java.lang.Override
  public double getCtr() {
    return ctr_;
  }

  public static final int CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_FIELD_NUMBER = 175;
  private double currentModelAttributedConversions_ = 0D;
  /**
   * <pre>
   * Shows how your historic conversions data would look under the attribution
   * model you've currently selected. This only includes conversion actions
   * which include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions = 175;</code>
   * @return Whether the currentModelAttributedConversions field is set.
   */
  @java.lang.Override
  public boolean hasCurrentModelAttributedConversions() {
    return ((bitField1_ & 0x10000000) != 0);
  }
  /**
   * <pre>
   * Shows how your historic conversions data would look under the attribution
   * model you've currently selected. This only includes conversion actions
   * which include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions = 175;</code>
   * @return The currentModelAttributedConversions.
   */
  @java.lang.Override
  public double getCurrentModelAttributedConversions() {
    return currentModelAttributedConversions_;
  }

  public static final int CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_FROM_INTERACTIONS_RATE_FIELD_NUMBER = 176;
  private double currentModelAttributedConversionsFromInteractionsRate_ = 0D;
  /**
   * <pre>
   * Current model attributed conversions from interactions divided by the
   * number of ad interactions (such as clicks for text ads or views for video
   * ads). This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_from_interactions_rate = 176;</code>
   * @return Whether the currentModelAttributedConversionsFromInteractionsRate field is set.
   */
  @java.lang.Override
  public boolean hasCurrentModelAttributedConversionsFromInteractionsRate() {
    return ((bitField1_ & 0x20000000) != 0);
  }
  /**
   * <pre>
   * Current model attributed conversions from interactions divided by the
   * number of ad interactions (such as clicks for text ads or views for video
   * ads). This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_from_interactions_rate = 176;</code>
   * @return The currentModelAttributedConversionsFromInteractionsRate.
   */
  @java.lang.Override
  public double getCurrentModelAttributedConversionsFromInteractionsRate() {
    return currentModelAttributedConversionsFromInteractionsRate_;
  }

  public static final int CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_FROM_INTERACTIONS_VALUE_PER_INTERACTION_FIELD_NUMBER = 177;
  private double currentModelAttributedConversionsFromInteractionsValuePerInteraction_ = 0D;
  /**
   * <pre>
   * The value of current model attributed conversions from interactions divided
   * by the number of ad interactions. This only includes conversion actions
   * which include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_from_interactions_value_per_interaction = 177;</code>
   * @return Whether the currentModelAttributedConversionsFromInteractionsValuePerInteraction field is set.
   */
  @java.lang.Override
  public boolean hasCurrentModelAttributedConversionsFromInteractionsValuePerInteraction() {
    return ((bitField1_ & 0x40000000) != 0);
  }
  /**
   * <pre>
   * The value of current model attributed conversions from interactions divided
   * by the number of ad interactions. This only includes conversion actions
   * which include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_from_interactions_value_per_interaction = 177;</code>
   * @return The currentModelAttributedConversionsFromInteractionsValuePerInteraction.
   */
  @java.lang.Override
  public double getCurrentModelAttributedConversionsFromInteractionsValuePerInteraction() {
    return currentModelAttributedConversionsFromInteractionsValuePerInteraction_;
  }

  public static final int CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_VALUE_FIELD_NUMBER = 178;
  private double currentModelAttributedConversionsValue_ = 0D;
  /**
   * <pre>
   * The value of current model attributed conversions. This only includes
   * conversion actions which include_in_conversions_metric attribute is set to
   * true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_value = 178;</code>
   * @return Whether the currentModelAttributedConversionsValue field is set.
   */
  @java.lang.Override
  public boolean hasCurrentModelAttributedConversionsValue() {
    return ((bitField1_ & 0x80000000) != 0);
  }
  /**
   * <pre>
   * The value of current model attributed conversions. This only includes
   * conversion actions which include_in_conversions_metric attribute is set to
   * true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_value = 178;</code>
   * @return The currentModelAttributedConversionsValue.
   */
  @java.lang.Override
  public double getCurrentModelAttributedConversionsValue() {
    return currentModelAttributedConversionsValue_;
  }

  public static final int CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_VALUE_PER_COST_FIELD_NUMBER = 179;
  private double currentModelAttributedConversionsValuePerCost_ = 0D;
  /**
   * <pre>
   * The value of current model attributed conversions divided by the cost of ad
   * interactions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_value_per_cost = 179;</code>
   * @return Whether the currentModelAttributedConversionsValuePerCost field is set.
   */
  @java.lang.Override
  public boolean hasCurrentModelAttributedConversionsValuePerCost() {
    return ((bitField2_ & 0x00000001) != 0);
  }
  /**
   * <pre>
   * The value of current model attributed conversions divided by the cost of ad
   * interactions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double current_model_attributed_conversions_value_per_cost = 179;</code>
   * @return The currentModelAttributedConversionsValuePerCost.
   */
  @java.lang.Override
  public double getCurrentModelAttributedConversionsValuePerCost() {
    return currentModelAttributedConversionsValuePerCost_;
  }

  public static final int ENGAGEMENT_RATE_FIELD_NUMBER = 180;
  private double engagementRate_ = 0D;
  /**
   * <pre>
   * How often people engage with your ad after it's shown to them. This is the
   * number of ad expansions divided by the number of times your ad is shown.
   * </pre>
   *
   * <code>optional double engagement_rate = 180;</code>
   * @return Whether the engagementRate field is set.
   */
  @java.lang.Override
  public boolean hasEngagementRate() {
    return ((bitField2_ & 0x00000002) != 0);
  }
  /**
   * <pre>
   * How often people engage with your ad after it's shown to them. This is the
   * number of ad expansions divided by the number of times your ad is shown.
   * </pre>
   *
   * <code>optional double engagement_rate = 180;</code>
   * @return The engagementRate.
   */
  @java.lang.Override
  public double getEngagementRate() {
    return engagementRate_;
  }

  public static final int ENGAGEMENTS_FIELD_NUMBER = 181;
  private long engagements_ = 0L;
  /**
   * <pre>
   * The number of engagements.
   * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
   * future, other ad types may support engagement metrics.
   * </pre>
   *
   * <code>optional int64 engagements = 181;</code>
   * @return Whether the engagements field is set.
   */
  @java.lang.Override
  public boolean hasEngagements() {
    return ((bitField2_ & 0x00000004) != 0);
  }
  /**
   * <pre>
   * The number of engagements.
   * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
   * future, other ad types may support engagement metrics.
   * </pre>
   *
   * <code>optional int64 engagements = 181;</code>
   * @return The engagements.
   */
  @java.lang.Override
  public long getEngagements() {
    return engagements_;
  }

  public static final int HOTEL_AVERAGE_LEAD_VALUE_MICROS_FIELD_NUMBER = 213;
  private double hotelAverageLeadValueMicros_ = 0D;
  /**
   * <pre>
   * Average lead value based on clicks.
   * </pre>
   *
   * <code>optional double hotel_average_lead_value_micros = 213;</code>
   * @return Whether the hotelAverageLeadValueMicros field is set.
   */
  @java.lang.Override
  public boolean hasHotelAverageLeadValueMicros() {
    return ((bitField2_ & 0x00000008) != 0);
  }
  /**
   * <pre>
   * Average lead value based on clicks.
   * </pre>
   *
   * <code>optional double hotel_average_lead_value_micros = 213;</code>
   * @return The hotelAverageLeadValueMicros.
   */
  @java.lang.Override
  public double getHotelAverageLeadValueMicros() {
    return hotelAverageLeadValueMicros_;
  }

  public static final int HOTEL_COMMISSION_RATE_MICROS_FIELD_NUMBER = 256;
  private long hotelCommissionRateMicros_ = 0L;
  /**
   * <pre>
   * Commission bid rate in micros. A 20% commission is represented as
   * 200,000.
   * </pre>
   *
   * <code>optional int64 hotel_commission_rate_micros = 256;</code>
   * @return Whether the hotelCommissionRateMicros field is set.
   */
  @java.lang.Override
  public boolean hasHotelCommissionRateMicros() {
    return ((bitField2_ & 0x00000010) != 0);
  }
  /**
   * <pre>
   * Commission bid rate in micros. A 20% commission is represented as
   * 200,000.
   * </pre>
   *
   * <code>optional int64 hotel_commission_rate_micros = 256;</code>
   * @return The hotelCommissionRateMicros.
   */
  @java.lang.Override
  public long getHotelCommissionRateMicros() {
    return hotelCommissionRateMicros_;
  }

  public static final int HOTEL_EXPECTED_COMMISSION_COST_FIELD_NUMBER = 257;
  private double hotelExpectedCommissionCost_ = 0D;
  /**
   * <pre>
   * Expected commission cost. The result of multiplying the commission value
   * times the hotel_commission_rate in advertiser currency.
   * </pre>
   *
   * <code>optional double hotel_expected_commission_cost = 257;</code>
   * @return Whether the hotelExpectedCommissionCost field is set.
   */
  @java.lang.Override
  public boolean hasHotelExpectedCommissionCost() {
    return ((bitField2_ & 0x00000020) != 0);
  }
  /**
   * <pre>
   * Expected commission cost. The result of multiplying the commission value
   * times the hotel_commission_rate in advertiser currency.
   * </pre>
   *
   * <code>optional double hotel_expected_commission_cost = 257;</code>
   * @return The hotelExpectedCommissionCost.
   */
  @java.lang.Override
  public double getHotelExpectedCommissionCost() {
    return hotelExpectedCommissionCost_;
  }

  public static final int HOTEL_PRICE_DIFFERENCE_PERCENTAGE_FIELD_NUMBER = 214;
  private double hotelPriceDifferencePercentage_ = 0D;
  /**
   * <pre>
   * The average price difference between the price offered by reporting hotel
   * advertiser and the cheapest price offered by the competing advertiser.
   * </pre>
   *
   * <code>optional double hotel_price_difference_percentage = 214;</code>
   * @return Whether the hotelPriceDifferencePercentage field is set.
   */
  @java.lang.Override
  public boolean hasHotelPriceDifferencePercentage() {
    return ((bitField2_ & 0x00000040) != 0);
  }
  /**
   * <pre>
   * The average price difference between the price offered by reporting hotel
   * advertiser and the cheapest price offered by the competing advertiser.
   * </pre>
   *
   * <code>optional double hotel_price_difference_percentage = 214;</code>
   * @return The hotelPriceDifferencePercentage.
   */
  @java.lang.Override
  public double getHotelPriceDifferencePercentage() {
    return hotelPriceDifferencePercentage_;
  }

  public static final int HOTEL_ELIGIBLE_IMPRESSIONS_FIELD_NUMBER = 215;
  private long hotelEligibleImpressions_ = 0L;
  /**
   * <pre>
   * The number of impressions that hotel partners could have had given their
   * feed performance.
   * </pre>
   *
   * <code>optional int64 hotel_eligible_impressions = 215;</code>
   * @return Whether the hotelEligibleImpressions field is set.
   */
  @java.lang.Override
  public boolean hasHotelEligibleImpressions() {
    return ((bitField2_ & 0x00000080) != 0);
  }
  /**
   * <pre>
   * The number of impressions that hotel partners could have had given their
   * feed performance.
   * </pre>
   *
   * <code>optional int64 hotel_eligible_impressions = 215;</code>
   * @return The hotelEligibleImpressions.
   */
  @java.lang.Override
  public long getHotelEligibleImpressions() {
    return hotelEligibleImpressions_;
  }

  public static final int HISTORICAL_CREATIVE_QUALITY_SCORE_FIELD_NUMBER = 80;
  private int historicalCreativeQualityScore_ = 0;
  /**
   * <pre>
   * The creative historical quality score.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_creative_quality_score = 80;</code>
   * @return The enum numeric value on the wire for historicalCreativeQualityScore.
   */
  @java.lang.Override public int getHistoricalCreativeQualityScoreValue() {
    return historicalCreativeQualityScore_;
  }
  /**
   * <pre>
   * The creative historical quality score.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_creative_quality_score = 80;</code>
   * @return The historicalCreativeQualityScore.
   */
  @java.lang.Override public com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket getHistoricalCreativeQualityScore() {
    com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket result = com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.forNumber(historicalCreativeQualityScore_);
    return result == null ? com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNRECOGNIZED : result;
  }

  public static final int HISTORICAL_LANDING_PAGE_QUALITY_SCORE_FIELD_NUMBER = 81;
  private int historicalLandingPageQualityScore_ = 0;
  /**
   * <pre>
   * The quality of historical landing page experience.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_landing_page_quality_score = 81;</code>
   * @return The enum numeric value on the wire for historicalLandingPageQualityScore.
   */
  @java.lang.Override public int getHistoricalLandingPageQualityScoreValue() {
    return historicalLandingPageQualityScore_;
  }
  /**
   * <pre>
   * The quality of historical landing page experience.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_landing_page_quality_score = 81;</code>
   * @return The historicalLandingPageQualityScore.
   */
  @java.lang.Override public com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket getHistoricalLandingPageQualityScore() {
    com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket result = com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.forNumber(historicalLandingPageQualityScore_);
    return result == null ? com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNRECOGNIZED : result;
  }

  public static final int HISTORICAL_QUALITY_SCORE_FIELD_NUMBER = 216;
  private long historicalQualityScore_ = 0L;
  /**
   * <pre>
   * The historical quality score.
   * </pre>
   *
   * <code>optional int64 historical_quality_score = 216;</code>
   * @return Whether the historicalQualityScore field is set.
   */
  @java.lang.Override
  public boolean hasHistoricalQualityScore() {
    return ((bitField2_ & 0x00000100) != 0);
  }
  /**
   * <pre>
   * The historical quality score.
   * </pre>
   *
   * <code>optional int64 historical_quality_score = 216;</code>
   * @return The historicalQualityScore.
   */
  @java.lang.Override
  public long getHistoricalQualityScore() {
    return historicalQualityScore_;
  }

  public static final int HISTORICAL_SEARCH_PREDICTED_CTR_FIELD_NUMBER = 83;
  private int historicalSearchPredictedCtr_ = 0;
  /**
   * <pre>
   * The historical search predicted click through rate (CTR).
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_search_predicted_ctr = 83;</code>
   * @return The enum numeric value on the wire for historicalSearchPredictedCtr.
   */
  @java.lang.Override public int getHistoricalSearchPredictedCtrValue() {
    return historicalSearchPredictedCtr_;
  }
  /**
   * <pre>
   * The historical search predicted click through rate (CTR).
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_search_predicted_ctr = 83;</code>
   * @return The historicalSearchPredictedCtr.
   */
  @java.lang.Override public com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket getHistoricalSearchPredictedCtr() {
    com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket result = com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.forNumber(historicalSearchPredictedCtr_);
    return result == null ? com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNRECOGNIZED : result;
  }

  public static final int GMAIL_FORWARDS_FIELD_NUMBER = 217;
  private long gmailForwards_ = 0L;
  /**
   * <pre>
   * The number of times the ad was forwarded to someone else as a message.
   * </pre>
   *
   * <code>optional int64 gmail_forwards = 217;</code>
   * @return Whether the gmailForwards field is set.
   */
  @java.lang.Override
  public boolean hasGmailForwards() {
    return ((bitField2_ & 0x00000200) != 0);
  }
  /**
   * <pre>
   * The number of times the ad was forwarded to someone else as a message.
   * </pre>
   *
   * <code>optional int64 gmail_forwards = 217;</code>
   * @return The gmailForwards.
   */
  @java.lang.Override
  public long getGmailForwards() {
    return gmailForwards_;
  }

  public static final int GMAIL_SAVES_FIELD_NUMBER = 218;
  private long gmailSaves_ = 0L;
  /**
   * <pre>
   * The number of times someone has saved your Gmail ad to their inbox as a
   * message.
   * </pre>
   *
   * <code>optional int64 gmail_saves = 218;</code>
   * @return Whether the gmailSaves field is set.
   */
  @java.lang.Override
  public boolean hasGmailSaves() {
    return ((bitField2_ & 0x00000400) != 0);
  }
  /**
   * <pre>
   * The number of times someone has saved your Gmail ad to their inbox as a
   * message.
   * </pre>
   *
   * <code>optional int64 gmail_saves = 218;</code>
   * @return The gmailSaves.
   */
  @java.lang.Override
  public long getGmailSaves() {
    return gmailSaves_;
  }

  public static final int GMAIL_SECONDARY_CLICKS_FIELD_NUMBER = 219;
  private long gmailSecondaryClicks_ = 0L;
  /**
   * <pre>
   * The number of clicks to the landing page on the expanded state of Gmail
   * ads.
   * </pre>
   *
   * <code>optional int64 gmail_secondary_clicks = 219;</code>
   * @return Whether the gmailSecondaryClicks field is set.
   */
  @java.lang.Override
  public boolean hasGmailSecondaryClicks() {
    return ((bitField2_ & 0x00000800) != 0);
  }
  /**
   * <pre>
   * The number of clicks to the landing page on the expanded state of Gmail
   * ads.
   * </pre>
   *
   * <code>optional int64 gmail_secondary_clicks = 219;</code>
   * @return The gmailSecondaryClicks.
   */
  @java.lang.Override
  public long getGmailSecondaryClicks() {
    return gmailSecondaryClicks_;
  }

  public static final int IMPRESSIONS_FROM_STORE_REACH_FIELD_NUMBER = 220;
  private long impressionsFromStoreReach_ = 0L;
  /**
   * <pre>
   * The number of times a store's location-based ad was shown.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional int64 impressions_from_store_reach = 220;</code>
   * @return Whether the impressionsFromStoreReach field is set.
   */
  @java.lang.Override
  public boolean hasImpressionsFromStoreReach() {
    return ((bitField2_ & 0x00001000) != 0);
  }
  /**
   * <pre>
   * The number of times a store's location-based ad was shown.
   *
   * This metric applies to feed items only.
   * </pre>
   *
   * <code>optional int64 impressions_from_store_reach = 220;</code>
   * @return The impressionsFromStoreReach.
   */
  @java.lang.Override
  public long getImpressionsFromStoreReach() {
    return impressionsFromStoreReach_;
  }

  public static final int IMPRESSIONS_FIELD_NUMBER = 221;
  private long impressions_ = 0L;
  /**
   * <pre>
   * Count of how often your ad has appeared on a search results page or
   * website on the Google Network.
   * </pre>
   *
   * <code>optional int64 impressions = 221;</code>
   * @return Whether the impressions field is set.
   */
  @java.lang.Override
  public boolean hasImpressions() {
    return ((bitField2_ & 0x00002000) != 0);
  }
  /**
   * <pre>
   * Count of how often your ad has appeared on a search results page or
   * website on the Google Network.
   * </pre>
   *
   * <code>optional int64 impressions = 221;</code>
   * @return The impressions.
   */
  @java.lang.Override
  public long getImpressions() {
    return impressions_;
  }

  public static final int INTERACTION_RATE_FIELD_NUMBER = 222;
  private double interactionRate_ = 0D;
  /**
   * <pre>
   * How often people interact with your ad after it is shown to them.
   * This is the number of interactions divided by the number of times your ad
   * is shown.
   * </pre>
   *
   * <code>optional double interaction_rate = 222;</code>
   * @return Whether the interactionRate field is set.
   */
  @java.lang.Override
  public boolean hasInteractionRate() {
    return ((bitField2_ & 0x00004000) != 0);
  }
  /**
   * <pre>
   * How often people interact with your ad after it is shown to them.
   * This is the number of interactions divided by the number of times your ad
   * is shown.
   * </pre>
   *
   * <code>optional double interaction_rate = 222;</code>
   * @return The interactionRate.
   */
  @java.lang.Override
  public double getInteractionRate() {
    return interactionRate_;
  }

  public static final int INTERACTIONS_FIELD_NUMBER = 223;
  private long interactions_ = 0L;
  /**
   * <pre>
   * The number of interactions.
   * An interaction is the main user action associated with an ad format-clicks
   * for text and shopping ads, views for video ads, and so on.
   * </pre>
   *
   * <code>optional int64 interactions = 223;</code>
   * @return Whether the interactions field is set.
   */
  @java.lang.Override
  public boolean hasInteractions() {
    return ((bitField2_ & 0x00008000) != 0);
  }
  /**
   * <pre>
   * The number of interactions.
   * An interaction is the main user action associated with an ad format-clicks
   * for text and shopping ads, views for video ads, and so on.
   * </pre>
   *
   * <code>optional int64 interactions = 223;</code>
   * @return The interactions.
   */
  @java.lang.Override
  public long getInteractions() {
    return interactions_;
  }

  public static final int INTERACTION_EVENT_TYPES_FIELD_NUMBER = 100;
  @SuppressWarnings("serial")
  private java.util.List<java.lang.Integer> interactionEventTypes_;
  private static final com.google.protobuf.Internal.ListAdapter.Converter<
      java.lang.Integer, com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType> interactionEventTypes_converter_ =
          new com.google.protobuf.Internal.ListAdapter.Converter<
              java.lang.Integer, com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType>() {
            public com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType convert(java.lang.Integer from) {
              com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType result = com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType.forNumber(from);
              return result == null ? com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType.UNRECOGNIZED : result;
            }
          };
  /**
   * <pre>
   * The types of payable and free interactions.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
   * @return A list containing the interactionEventTypes.
   */
  @java.lang.Override
  public java.util.List<com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType> getInteractionEventTypesList() {
    return new com.google.protobuf.Internal.ListAdapter<
        java.lang.Integer, com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType>(interactionEventTypes_, interactionEventTypes_converter_);
  }
  /**
   * <pre>
   * The types of payable and free interactions.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
   * @return The count of interactionEventTypes.
   */
  @java.lang.Override
  public int getInteractionEventTypesCount() {
    return interactionEventTypes_.size();
  }
  /**
   * <pre>
   * The types of payable and free interactions.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
   * @param index The index of the element to return.
   * @return The interactionEventTypes at the given index.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType getInteractionEventTypes(int index) {
    return interactionEventTypes_converter_.convert(interactionEventTypes_.get(index));
  }
  /**
   * <pre>
   * The types of payable and free interactions.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
   * @return A list containing the enum numeric values on the wire for interactionEventTypes.
   */
  @java.lang.Override
  public java.util.List<java.lang.Integer>
  getInteractionEventTypesValueList() {
    return interactionEventTypes_;
  }
  /**
   * <pre>
   * The types of payable and free interactions.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
   * @param index The index of the value to return.
   * @return The enum numeric value on the wire of interactionEventTypes at the given index.
   */
  @java.lang.Override
  public int getInteractionEventTypesValue(int index) {
    return interactionEventTypes_.get(index);
  }
  private int interactionEventTypesMemoizedSerializedSize;

  public static final int INVALID_CLICK_RATE_FIELD_NUMBER = 224;
  private double invalidClickRate_ = 0D;
  /**
   * <pre>
   * The percentage of clicks filtered out of your total number of clicks
   * (filtered + non-filtered clicks) during the reporting period.
   * </pre>
   *
   * <code>optional double invalid_click_rate = 224;</code>
   * @return Whether the invalidClickRate field is set.
   */
  @java.lang.Override
  public boolean hasInvalidClickRate() {
    return ((bitField2_ & 0x00010000) != 0);
  }
  /**
   * <pre>
   * The percentage of clicks filtered out of your total number of clicks
   * (filtered + non-filtered clicks) during the reporting period.
   * </pre>
   *
   * <code>optional double invalid_click_rate = 224;</code>
   * @return The invalidClickRate.
   */
  @java.lang.Override
  public double getInvalidClickRate() {
    return invalidClickRate_;
  }

  public static final int INVALID_CLICKS_FIELD_NUMBER = 225;
  private long invalidClicks_ = 0L;
  /**
   * <pre>
   * Number of clicks Google considers illegitimate and doesn't charge you for.
   * </pre>
   *
   * <code>optional int64 invalid_clicks = 225;</code>
   * @return Whether the invalidClicks field is set.
   */
  @java.lang.Override
  public boolean hasInvalidClicks() {
    return ((bitField2_ & 0x00020000) != 0);
  }
  /**
   * <pre>
   * Number of clicks Google considers illegitimate and doesn't charge you for.
   * </pre>
   *
   * <code>optional int64 invalid_clicks = 225;</code>
   * @return The invalidClicks.
   */
  @java.lang.Override
  public long getInvalidClicks() {
    return invalidClicks_;
  }

  public static final int MESSAGE_CHATS_FIELD_NUMBER = 226;
  private long messageChats_ = 0L;
  /**
   * <pre>
   * Number of message chats initiated for Click To Message impressions that
   * were message tracking eligible.
   * </pre>
   *
   * <code>optional int64 message_chats = 226;</code>
   * @return Whether the messageChats field is set.
   */
  @java.lang.Override
  public boolean hasMessageChats() {
    return ((bitField2_ & 0x00040000) != 0);
  }
  /**
   * <pre>
   * Number of message chats initiated for Click To Message impressions that
   * were message tracking eligible.
   * </pre>
   *
   * <code>optional int64 message_chats = 226;</code>
   * @return The messageChats.
   */
  @java.lang.Override
  public long getMessageChats() {
    return messageChats_;
  }

  public static final int MESSAGE_IMPRESSIONS_FIELD_NUMBER = 227;
  private long messageImpressions_ = 0L;
  /**
   * <pre>
   * Number of Click To Message impressions that were message tracking eligible.
   * </pre>
   *
   * <code>optional int64 message_impressions = 227;</code>
   * @return Whether the messageImpressions field is set.
   */
  @java.lang.Override
  public boolean hasMessageImpressions() {
    return ((bitField2_ & 0x00080000) != 0);
  }
  /**
   * <pre>
   * Number of Click To Message impressions that were message tracking eligible.
   * </pre>
   *
   * <code>optional int64 message_impressions = 227;</code>
   * @return The messageImpressions.
   */
  @java.lang.Override
  public long getMessageImpressions() {
    return messageImpressions_;
  }

  public static final int MESSAGE_CHAT_RATE_FIELD_NUMBER = 228;
  private double messageChatRate_ = 0D;
  /**
   * <pre>
   * Number of message chats initiated (message_chats) divided by the number
   * of message impressions (message_impressions).
   * Rate at which a user initiates a message chat from an ad impression with
   * a messaging option and message tracking enabled.
   * Note that this rate can be more than 1.0 for a given message impression.
   * </pre>
   *
   * <code>optional double message_chat_rate = 228;</code>
   * @return Whether the messageChatRate field is set.
   */
  @java.lang.Override
  public boolean hasMessageChatRate() {
    return ((bitField2_ & 0x00100000) != 0);
  }
  /**
   * <pre>
   * Number of message chats initiated (message_chats) divided by the number
   * of message impressions (message_impressions).
   * Rate at which a user initiates a message chat from an ad impression with
   * a messaging option and message tracking enabled.
   * Note that this rate can be more than 1.0 for a given message impression.
   * </pre>
   *
   * <code>optional double message_chat_rate = 228;</code>
   * @return The messageChatRate.
   */
  @java.lang.Override
  public double getMessageChatRate() {
    return messageChatRate_;
  }

  public static final int MOBILE_FRIENDLY_CLICKS_PERCENTAGE_FIELD_NUMBER = 229;
  private double mobileFriendlyClicksPercentage_ = 0D;
  /**
   * <pre>
   * The percentage of mobile clicks that go to a mobile-friendly page.
   * </pre>
   *
   * <code>optional double mobile_friendly_clicks_percentage = 229;</code>
   * @return Whether the mobileFriendlyClicksPercentage field is set.
   */
  @java.lang.Override
  public boolean hasMobileFriendlyClicksPercentage() {
    return ((bitField2_ & 0x00200000) != 0);
  }
  /**
   * <pre>
   * The percentage of mobile clicks that go to a mobile-friendly page.
   * </pre>
   *
   * <code>optional double mobile_friendly_clicks_percentage = 229;</code>
   * @return The mobileFriendlyClicksPercentage.
   */
  @java.lang.Override
  public double getMobileFriendlyClicksPercentage() {
    return mobileFriendlyClicksPercentage_;
  }

  public static final int OPTIMIZATION_SCORE_UPLIFT_FIELD_NUMBER = 247;
  private double optimizationScoreUplift_ = 0D;
  /**
   * <pre>
   * Total optimization score uplift of all recommendations.
   * </pre>
   *
   * <code>optional double optimization_score_uplift = 247;</code>
   * @return Whether the optimizationScoreUplift field is set.
   */
  @java.lang.Override
  public boolean hasOptimizationScoreUplift() {
    return ((bitField2_ & 0x00400000) != 0);
  }
  /**
   * <pre>
   * Total optimization score uplift of all recommendations.
   * </pre>
   *
   * <code>optional double optimization_score_uplift = 247;</code>
   * @return The optimizationScoreUplift.
   */
  @java.lang.Override
  public double getOptimizationScoreUplift() {
    return optimizationScoreUplift_;
  }

  public static final int OPTIMIZATION_SCORE_URL_FIELD_NUMBER = 248;
  @SuppressWarnings("serial")
  private volatile java.lang.Object optimizationScoreUrl_ = "";
  /**
   * <pre>
   * URL for the optimization score page in the Google Ads web interface.
   * This metric can be selected from `customer` or `campaign`, and can be
   * segmented by `segments.recommendation_type`. For example, `SELECT
   * metrics.optimization_score_url, segments.recommendation_type FROM
   * customer` will return a URL for each unique (customer, recommendation_type)
   * combination.
   * </pre>
   *
   * <code>optional string optimization_score_url = 248;</code>
   * @return Whether the optimizationScoreUrl field is set.
   */
  @java.lang.Override
  public boolean hasOptimizationScoreUrl() {
    return ((bitField2_ & 0x00800000) != 0);
  }
  /**
   * <pre>
   * URL for the optimization score page in the Google Ads web interface.
   * This metric can be selected from `customer` or `campaign`, and can be
   * segmented by `segments.recommendation_type`. For example, `SELECT
   * metrics.optimization_score_url, segments.recommendation_type FROM
   * customer` will return a URL for each unique (customer, recommendation_type)
   * combination.
   * </pre>
   *
   * <code>optional string optimization_score_url = 248;</code>
   * @return The optimizationScoreUrl.
   */
  @java.lang.Override
  public java.lang.String getOptimizationScoreUrl() {
    java.lang.Object ref = optimizationScoreUrl_;
    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();
      optimizationScoreUrl_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * URL for the optimization score page in the Google Ads web interface.
   * This metric can be selected from `customer` or `campaign`, and can be
   * segmented by `segments.recommendation_type`. For example, `SELECT
   * metrics.optimization_score_url, segments.recommendation_type FROM
   * customer` will return a URL for each unique (customer, recommendation_type)
   * combination.
   * </pre>
   *
   * <code>optional string optimization_score_url = 248;</code>
   * @return The bytes for optimizationScoreUrl.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getOptimizationScoreUrlBytes() {
    java.lang.Object ref = optimizationScoreUrl_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      optimizationScoreUrl_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int ORGANIC_CLICKS_FIELD_NUMBER = 230;
  private long organicClicks_ = 0L;
  /**
   * <pre>
   * The number of times someone clicked your site's listing in the unpaid
   * results for a particular query. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 organic_clicks = 230;</code>
   * @return Whether the organicClicks field is set.
   */
  @java.lang.Override
  public boolean hasOrganicClicks() {
    return ((bitField2_ & 0x01000000) != 0);
  }
  /**
   * <pre>
   * The number of times someone clicked your site's listing in the unpaid
   * results for a particular query. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 organic_clicks = 230;</code>
   * @return The organicClicks.
   */
  @java.lang.Override
  public long getOrganicClicks() {
    return organicClicks_;
  }

  public static final int ORGANIC_CLICKS_PER_QUERY_FIELD_NUMBER = 231;
  private double organicClicksPerQuery_ = 0D;
  /**
   * <pre>
   * The number of times someone clicked your site's listing in the unpaid
   * results (organic_clicks) divided by the total number of searches that
   * returned pages from your site (organic_queries). See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional double organic_clicks_per_query = 231;</code>
   * @return Whether the organicClicksPerQuery field is set.
   */
  @java.lang.Override
  public boolean hasOrganicClicksPerQuery() {
    return ((bitField2_ & 0x02000000) != 0);
  }
  /**
   * <pre>
   * The number of times someone clicked your site's listing in the unpaid
   * results (organic_clicks) divided by the total number of searches that
   * returned pages from your site (organic_queries). See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional double organic_clicks_per_query = 231;</code>
   * @return The organicClicksPerQuery.
   */
  @java.lang.Override
  public double getOrganicClicksPerQuery() {
    return organicClicksPerQuery_;
  }

  public static final int ORGANIC_IMPRESSIONS_FIELD_NUMBER = 232;
  private long organicImpressions_ = 0L;
  /**
   * <pre>
   * The number of listings for your site in the unpaid search results. See the
   * help page at https://support.google.com/google-ads/answer/3097241 for
   * details.
   * </pre>
   *
   * <code>optional int64 organic_impressions = 232;</code>
   * @return Whether the organicImpressions field is set.
   */
  @java.lang.Override
  public boolean hasOrganicImpressions() {
    return ((bitField2_ & 0x04000000) != 0);
  }
  /**
   * <pre>
   * The number of listings for your site in the unpaid search results. See the
   * help page at https://support.google.com/google-ads/answer/3097241 for
   * details.
   * </pre>
   *
   * <code>optional int64 organic_impressions = 232;</code>
   * @return The organicImpressions.
   */
  @java.lang.Override
  public long getOrganicImpressions() {
    return organicImpressions_;
  }

  public static final int ORGANIC_IMPRESSIONS_PER_QUERY_FIELD_NUMBER = 233;
  private double organicImpressionsPerQuery_ = 0D;
  /**
   * <pre>
   * The number of times a page from your site was listed in the unpaid search
   * results (organic_impressions) divided by the number of searches returning
   * your site's listing in the unpaid results (organic_queries). See the help
   * page at https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional double organic_impressions_per_query = 233;</code>
   * @return Whether the organicImpressionsPerQuery field is set.
   */
  @java.lang.Override
  public boolean hasOrganicImpressionsPerQuery() {
    return ((bitField2_ & 0x08000000) != 0);
  }
  /**
   * <pre>
   * The number of times a page from your site was listed in the unpaid search
   * results (organic_impressions) divided by the number of searches returning
   * your site's listing in the unpaid results (organic_queries). See the help
   * page at https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional double organic_impressions_per_query = 233;</code>
   * @return The organicImpressionsPerQuery.
   */
  @java.lang.Override
  public double getOrganicImpressionsPerQuery() {
    return organicImpressionsPerQuery_;
  }

  public static final int ORGANIC_QUERIES_FIELD_NUMBER = 234;
  private long organicQueries_ = 0L;
  /**
   * <pre>
   * The total number of searches that returned your site's listing in the
   * unpaid results. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 organic_queries = 234;</code>
   * @return Whether the organicQueries field is set.
   */
  @java.lang.Override
  public boolean hasOrganicQueries() {
    return ((bitField2_ & 0x10000000) != 0);
  }
  /**
   * <pre>
   * The total number of searches that returned your site's listing in the
   * unpaid results. See the help page at
   * https://support.google.com/google-ads/answer/3097241 for details.
   * </pre>
   *
   * <code>optional int64 organic_queries = 234;</code>
   * @return The organicQueries.
   */
  @java.lang.Override
  public long getOrganicQueries() {
    return organicQueries_;
  }

  public static final int PERCENT_NEW_VISITORS_FIELD_NUMBER = 235;
  private double percentNewVisitors_ = 0D;
  /**
   * <pre>
   * Percentage of first-time sessions (from people who had never visited your
   * site before). Imported from Google Analytics.
   * </pre>
   *
   * <code>optional double percent_new_visitors = 235;</code>
   * @return Whether the percentNewVisitors field is set.
   */
  @java.lang.Override
  public boolean hasPercentNewVisitors() {
    return ((bitField2_ & 0x20000000) != 0);
  }
  /**
   * <pre>
   * Percentage of first-time sessions (from people who had never visited your
   * site before). Imported from Google Analytics.
   * </pre>
   *
   * <code>optional double percent_new_visitors = 235;</code>
   * @return The percentNewVisitors.
   */
  @java.lang.Override
  public double getPercentNewVisitors() {
    return percentNewVisitors_;
  }

  public static final int PHONE_CALLS_FIELD_NUMBER = 236;
  private long phoneCalls_ = 0L;
  /**
   * <pre>
   * Number of offline phone calls.
   * </pre>
   *
   * <code>optional int64 phone_calls = 236;</code>
   * @return Whether the phoneCalls field is set.
   */
  @java.lang.Override
  public boolean hasPhoneCalls() {
    return ((bitField2_ & 0x40000000) != 0);
  }
  /**
   * <pre>
   * Number of offline phone calls.
   * </pre>
   *
   * <code>optional int64 phone_calls = 236;</code>
   * @return The phoneCalls.
   */
  @java.lang.Override
  public long getPhoneCalls() {
    return phoneCalls_;
  }

  public static final int PHONE_IMPRESSIONS_FIELD_NUMBER = 237;
  private long phoneImpressions_ = 0L;
  /**
   * <pre>
   * Number of offline phone impressions.
   * </pre>
   *
   * <code>optional int64 phone_impressions = 237;</code>
   * @return Whether the phoneImpressions field is set.
   */
  @java.lang.Override
  public boolean hasPhoneImpressions() {
    return ((bitField2_ & 0x80000000) != 0);
  }
  /**
   * <pre>
   * Number of offline phone impressions.
   * </pre>
   *
   * <code>optional int64 phone_impressions = 237;</code>
   * @return The phoneImpressions.
   */
  @java.lang.Override
  public long getPhoneImpressions() {
    return phoneImpressions_;
  }

  public static final int PHONE_THROUGH_RATE_FIELD_NUMBER = 238;
  private double phoneThroughRate_ = 0D;
  /**
   * <pre>
   * Number of phone calls received (phone_calls) divided by the number of
   * times your phone number is shown (phone_impressions).
   * </pre>
   *
   * <code>optional double phone_through_rate = 238;</code>
   * @return Whether the phoneThroughRate field is set.
   */
  @java.lang.Override
  public boolean hasPhoneThroughRate() {
    return ((bitField3_ & 0x00000001) != 0);
  }
  /**
   * <pre>
   * Number of phone calls received (phone_calls) divided by the number of
   * times your phone number is shown (phone_impressions).
   * </pre>
   *
   * <code>optional double phone_through_rate = 238;</code>
   * @return The phoneThroughRate.
   */
  @java.lang.Override
  public double getPhoneThroughRate() {
    return phoneThroughRate_;
  }

  public static final int RELATIVE_CTR_FIELD_NUMBER = 239;
  private double relativeCtr_ = 0D;
  /**
   * <pre>
   * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
   * all advertisers on the websites that show your ads. Measures how your ads
   * perform on Display Network sites compared to other ads on the same sites.
   * </pre>
   *
   * <code>optional double relative_ctr = 239;</code>
   * @return Whether the relativeCtr field is set.
   */
  @java.lang.Override
  public boolean hasRelativeCtr() {
    return ((bitField3_ & 0x00000002) != 0);
  }
  /**
   * <pre>
   * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
   * all advertisers on the websites that show your ads. Measures how your ads
   * perform on Display Network sites compared to other ads on the same sites.
   * </pre>
   *
   * <code>optional double relative_ctr = 239;</code>
   * @return The relativeCtr.
   */
  @java.lang.Override
  public double getRelativeCtr() {
    return relativeCtr_;
  }

  public static final int SEARCH_ABSOLUTE_TOP_IMPRESSION_SHARE_FIELD_NUMBER = 136;
  private double searchAbsoluteTopImpressionShare_ = 0D;
  /**
   * <pre>
   * The percentage of the customer's Shopping or Search ad impressions that are
   * shown in the most prominent Shopping position. See
   * https://support.google.com/google-ads/answer/7501826
   * for details. Any value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_absolute_top_impression_share = 136;</code>
   * @return Whether the searchAbsoluteTopImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchAbsoluteTopImpressionShare() {
    return ((bitField3_ & 0x00000004) != 0);
  }
  /**
   * <pre>
   * The percentage of the customer's Shopping or Search ad impressions that are
   * shown in the most prominent Shopping position. See
   * https://support.google.com/google-ads/answer/7501826
   * for details. Any value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_absolute_top_impression_share = 136;</code>
   * @return The searchAbsoluteTopImpressionShare.
   */
  @java.lang.Override
  public double getSearchAbsoluteTopImpressionShare() {
    return searchAbsoluteTopImpressionShare_;
  }

  public static final int SEARCH_BUDGET_LOST_ABSOLUTE_TOP_IMPRESSION_SHARE_FIELD_NUMBER = 137;
  private double searchBudgetLostAbsoluteTopImpressionShare_ = 0D;
  /**
   * <pre>
   * The number estimating how often your ad wasn't the very first ad above the
   * organic search results due to a low budget. Note: Search
   * budget lost absolute top impression share is reported in the range of 0 to
   * 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_budget_lost_absolute_top_impression_share = 137;</code>
   * @return Whether the searchBudgetLostAbsoluteTopImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchBudgetLostAbsoluteTopImpressionShare() {
    return ((bitField3_ & 0x00000008) != 0);
  }
  /**
   * <pre>
   * The number estimating how often your ad wasn't the very first ad above the
   * organic search results due to a low budget. Note: Search
   * budget lost absolute top impression share is reported in the range of 0 to
   * 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_budget_lost_absolute_top_impression_share = 137;</code>
   * @return The searchBudgetLostAbsoluteTopImpressionShare.
   */
  @java.lang.Override
  public double getSearchBudgetLostAbsoluteTopImpressionShare() {
    return searchBudgetLostAbsoluteTopImpressionShare_;
  }

  public static final int SEARCH_BUDGET_LOST_IMPRESSION_SHARE_FIELD_NUMBER = 138;
  private double searchBudgetLostImpressionShare_ = 0D;
  /**
   * <pre>
   * The estimated percent of times that your ad was eligible to show on the
   * Search Network but didn't because your budget was too low. Note: Search
   * budget lost impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_budget_lost_impression_share = 138;</code>
   * @return Whether the searchBudgetLostImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchBudgetLostImpressionShare() {
    return ((bitField3_ & 0x00000010) != 0);
  }
  /**
   * <pre>
   * The estimated percent of times that your ad was eligible to show on the
   * Search Network but didn't because your budget was too low. Note: Search
   * budget lost impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_budget_lost_impression_share = 138;</code>
   * @return The searchBudgetLostImpressionShare.
   */
  @java.lang.Override
  public double getSearchBudgetLostImpressionShare() {
    return searchBudgetLostImpressionShare_;
  }

  public static final int SEARCH_BUDGET_LOST_TOP_IMPRESSION_SHARE_FIELD_NUMBER = 139;
  private double searchBudgetLostTopImpressionShare_ = 0D;
  /**
   * <pre>
   * The number estimating how often your ad didn't show anywhere above the
   * organic search results due to a low budget. Note: Search
   * budget lost top impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_budget_lost_top_impression_share = 139;</code>
   * @return Whether the searchBudgetLostTopImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchBudgetLostTopImpressionShare() {
    return ((bitField3_ & 0x00000020) != 0);
  }
  /**
   * <pre>
   * The number estimating how often your ad didn't show anywhere above the
   * organic search results due to a low budget. Note: Search
   * budget lost top impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_budget_lost_top_impression_share = 139;</code>
   * @return The searchBudgetLostTopImpressionShare.
   */
  @java.lang.Override
  public double getSearchBudgetLostTopImpressionShare() {
    return searchBudgetLostTopImpressionShare_;
  }

  public static final int SEARCH_CLICK_SHARE_FIELD_NUMBER = 140;
  private double searchClickShare_ = 0D;
  /**
   * <pre>
   * The number of clicks you've received on the Search Network
   * divided by the estimated number of clicks you were eligible to receive.
   * Note: Search click share is reported in the range of 0.1 to 1. Any value
   * below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_click_share = 140;</code>
   * @return Whether the searchClickShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchClickShare() {
    return ((bitField3_ & 0x00000040) != 0);
  }
  /**
   * <pre>
   * The number of clicks you've received on the Search Network
   * divided by the estimated number of clicks you were eligible to receive.
   * Note: Search click share is reported in the range of 0.1 to 1. Any value
   * below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_click_share = 140;</code>
   * @return The searchClickShare.
   */
  @java.lang.Override
  public double getSearchClickShare() {
    return searchClickShare_;
  }

  public static final int SEARCH_EXACT_MATCH_IMPRESSION_SHARE_FIELD_NUMBER = 141;
  private double searchExactMatchImpressionShare_ = 0D;
  /**
   * <pre>
   * The impressions you've received divided by the estimated number of
   * impressions you were eligible to receive on the Search Network for search
   * terms that matched your keywords exactly (or were close variants of your
   * keyword), regardless of your keyword match types. Note: Search exact match
   * impression share is reported in the range of 0.1 to 1. Any value below 0.1
   * is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_exact_match_impression_share = 141;</code>
   * @return Whether the searchExactMatchImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchExactMatchImpressionShare() {
    return ((bitField3_ & 0x00000080) != 0);
  }
  /**
   * <pre>
   * The impressions you've received divided by the estimated number of
   * impressions you were eligible to receive on the Search Network for search
   * terms that matched your keywords exactly (or were close variants of your
   * keyword), regardless of your keyword match types. Note: Search exact match
   * impression share is reported in the range of 0.1 to 1. Any value below 0.1
   * is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_exact_match_impression_share = 141;</code>
   * @return The searchExactMatchImpressionShare.
   */
  @java.lang.Override
  public double getSearchExactMatchImpressionShare() {
    return searchExactMatchImpressionShare_;
  }

  public static final int SEARCH_IMPRESSION_SHARE_FIELD_NUMBER = 142;
  private double searchImpressionShare_ = 0D;
  /**
   * <pre>
   * The impressions you've received on the Search Network divided
   * by the estimated number of impressions you were eligible to receive.
   * Note: Search impression share is reported in the range of 0.1 to 1. Any
   * value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_impression_share = 142;</code>
   * @return Whether the searchImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchImpressionShare() {
    return ((bitField3_ & 0x00000100) != 0);
  }
  /**
   * <pre>
   * The impressions you've received on the Search Network divided
   * by the estimated number of impressions you were eligible to receive.
   * Note: Search impression share is reported in the range of 0.1 to 1. Any
   * value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_impression_share = 142;</code>
   * @return The searchImpressionShare.
   */
  @java.lang.Override
  public double getSearchImpressionShare() {
    return searchImpressionShare_;
  }

  public static final int SEARCH_RANK_LOST_ABSOLUTE_TOP_IMPRESSION_SHARE_FIELD_NUMBER = 143;
  private double searchRankLostAbsoluteTopImpressionShare_ = 0D;
  /**
   * <pre>
   * The number estimating how often your ad wasn't the very first ad above the
   * organic search results due to poor Ad Rank.
   * Note: Search rank lost absolute top impression share is reported in the
   * range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_rank_lost_absolute_top_impression_share = 143;</code>
   * @return Whether the searchRankLostAbsoluteTopImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchRankLostAbsoluteTopImpressionShare() {
    return ((bitField3_ & 0x00000200) != 0);
  }
  /**
   * <pre>
   * The number estimating how often your ad wasn't the very first ad above the
   * organic search results due to poor Ad Rank.
   * Note: Search rank lost absolute top impression share is reported in the
   * range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_rank_lost_absolute_top_impression_share = 143;</code>
   * @return The searchRankLostAbsoluteTopImpressionShare.
   */
  @java.lang.Override
  public double getSearchRankLostAbsoluteTopImpressionShare() {
    return searchRankLostAbsoluteTopImpressionShare_;
  }

  public static final int SEARCH_RANK_LOST_IMPRESSION_SHARE_FIELD_NUMBER = 144;
  private double searchRankLostImpressionShare_ = 0D;
  /**
   * <pre>
   * The estimated percentage of impressions on the Search Network
   * that your ads didn't receive due to poor Ad Rank.
   * Note: Search rank lost impression share is reported in the range of 0 to
   * 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_rank_lost_impression_share = 144;</code>
   * @return Whether the searchRankLostImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchRankLostImpressionShare() {
    return ((bitField3_ & 0x00000400) != 0);
  }
  /**
   * <pre>
   * The estimated percentage of impressions on the Search Network
   * that your ads didn't receive due to poor Ad Rank.
   * Note: Search rank lost impression share is reported in the range of 0 to
   * 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_rank_lost_impression_share = 144;</code>
   * @return The searchRankLostImpressionShare.
   */
  @java.lang.Override
  public double getSearchRankLostImpressionShare() {
    return searchRankLostImpressionShare_;
  }

  public static final int SEARCH_RANK_LOST_TOP_IMPRESSION_SHARE_FIELD_NUMBER = 145;
  private double searchRankLostTopImpressionShare_ = 0D;
  /**
   * <pre>
   * The number estimating how often your ad didn't show anywhere above the
   * organic search results due to poor Ad Rank.
   * Note: Search rank lost top impression share is reported in the range of 0
   * to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_rank_lost_top_impression_share = 145;</code>
   * @return Whether the searchRankLostTopImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchRankLostTopImpressionShare() {
    return ((bitField3_ & 0x00000800) != 0);
  }
  /**
   * <pre>
   * The number estimating how often your ad didn't show anywhere above the
   * organic search results due to poor Ad Rank.
   * Note: Search rank lost top impression share is reported in the range of 0
   * to 0.9. Any value above 0.9 is reported as 0.9001.
   * </pre>
   *
   * <code>optional double search_rank_lost_top_impression_share = 145;</code>
   * @return The searchRankLostTopImpressionShare.
   */
  @java.lang.Override
  public double getSearchRankLostTopImpressionShare() {
    return searchRankLostTopImpressionShare_;
  }

  public static final int SEARCH_TOP_IMPRESSION_SHARE_FIELD_NUMBER = 146;
  private double searchTopImpressionShare_ = 0D;
  /**
   * <pre>
   * The impressions you've received in the top location (anywhere above the
   * organic search results) compared to the estimated number of impressions you
   * were eligible to receive in the top location.
   * Note: Search top impression share is reported in the range of 0.1 to 1. Any
   * value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_top_impression_share = 146;</code>
   * @return Whether the searchTopImpressionShare field is set.
   */
  @java.lang.Override
  public boolean hasSearchTopImpressionShare() {
    return ((bitField3_ & 0x00001000) != 0);
  }
  /**
   * <pre>
   * The impressions you've received in the top location (anywhere above the
   * organic search results) compared to the estimated number of impressions you
   * were eligible to receive in the top location.
   * Note: Search top impression share is reported in the range of 0.1 to 1. Any
   * value below 0.1 is reported as 0.0999.
   * </pre>
   *
   * <code>optional double search_top_impression_share = 146;</code>
   * @return The searchTopImpressionShare.
   */
  @java.lang.Override
  public double getSearchTopImpressionShare() {
    return searchTopImpressionShare_;
  }

  public static final int SEARCH_VOLUME_FIELD_NUMBER = 295;
  private com.google.ads.googleads.v14.common.SearchVolumeRange searchVolume_;
  /**
   * <pre>
   * Search volume range for a search term insight category.
   * </pre>
   *
   * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
   * @return Whether the searchVolume field is set.
   */
  @java.lang.Override
  public boolean hasSearchVolume() {
    return ((bitField3_ & 0x00002000) != 0);
  }
  /**
   * <pre>
   * Search volume range for a search term insight category.
   * </pre>
   *
   * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
   * @return The searchVolume.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.SearchVolumeRange getSearchVolume() {
    return searchVolume_ == null ? com.google.ads.googleads.v14.common.SearchVolumeRange.getDefaultInstance() : searchVolume_;
  }
  /**
   * <pre>
   * Search volume range for a search term insight category.
   * </pre>
   *
   * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.SearchVolumeRangeOrBuilder getSearchVolumeOrBuilder() {
    return searchVolume_ == null ? com.google.ads.googleads.v14.common.SearchVolumeRange.getDefaultInstance() : searchVolume_;
  }

  public static final int SPEED_SCORE_FIELD_NUMBER = 147;
  private long speedScore_ = 0L;
  /**
   * <pre>
   * A measure of how quickly your page loads after clicks on your mobile ads.
   * The score is a range from 1 to 10, 10 being the fastest.
   * </pre>
   *
   * <code>optional int64 speed_score = 147;</code>
   * @return Whether the speedScore field is set.
   */
  @java.lang.Override
  public boolean hasSpeedScore() {
    return ((bitField3_ & 0x00004000) != 0);
  }
  /**
   * <pre>
   * A measure of how quickly your page loads after clicks on your mobile ads.
   * The score is a range from 1 to 10, 10 being the fastest.
   * </pre>
   *
   * <code>optional int64 speed_score = 147;</code>
   * @return The speedScore.
   */
  @java.lang.Override
  public long getSpeedScore() {
    return speedScore_;
  }

  public static final int AVERAGE_TARGET_CPA_MICROS_FIELD_NUMBER = 290;
  private long averageTargetCpaMicros_ = 0L;
  /**
   * <pre>
   * The average Target CPA, or unset if not available (for example, for
   * campaigns that had traffic from portfolio bidding strategies or non-tCPA).
   * </pre>
   *
   * <code>optional int64 average_target_cpa_micros = 290;</code>
   * @return Whether the averageTargetCpaMicros field is set.
   */
  @java.lang.Override
  public boolean hasAverageTargetCpaMicros() {
    return ((bitField3_ & 0x00008000) != 0);
  }
  /**
   * <pre>
   * The average Target CPA, or unset if not available (for example, for
   * campaigns that had traffic from portfolio bidding strategies or non-tCPA).
   * </pre>
   *
   * <code>optional int64 average_target_cpa_micros = 290;</code>
   * @return The averageTargetCpaMicros.
   */
  @java.lang.Override
  public long getAverageTargetCpaMicros() {
    return averageTargetCpaMicros_;
  }

  public static final int AVERAGE_TARGET_ROAS_FIELD_NUMBER = 250;
  private double averageTargetRoas_ = 0D;
  /**
   * <pre>
   * The average Target ROAS, or unset if not available (for example, for
   * campaigns that had traffic from portfolio bidding strategies or non-tROAS).
   * </pre>
   *
   * <code>optional double average_target_roas = 250;</code>
   * @return Whether the averageTargetRoas field is set.
   */
  @java.lang.Override
  public boolean hasAverageTargetRoas() {
    return ((bitField3_ & 0x00010000) != 0);
  }
  /**
   * <pre>
   * The average Target ROAS, or unset if not available (for example, for
   * campaigns that had traffic from portfolio bidding strategies or non-tROAS).
   * </pre>
   *
   * <code>optional double average_target_roas = 250;</code>
   * @return The averageTargetRoas.
   */
  @java.lang.Override
  public double getAverageTargetRoas() {
    return averageTargetRoas_;
  }

  public static final int TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER = 148;
  private double topImpressionPercentage_ = 0D;
  /**
   * <pre>
   * The percent of your ad impressions that are shown anywhere above the
   * organic search results.
   * </pre>
   *
   * <code>optional double top_impression_percentage = 148;</code>
   * @return Whether the topImpressionPercentage field is set.
   */
  @java.lang.Override
  public boolean hasTopImpressionPercentage() {
    return ((bitField3_ & 0x00020000) != 0);
  }
  /**
   * <pre>
   * The percent of your ad impressions that are shown anywhere above the
   * organic search results.
   * </pre>
   *
   * <code>optional double top_impression_percentage = 148;</code>
   * @return The topImpressionPercentage.
   */
  @java.lang.Override
  public double getTopImpressionPercentage() {
    return topImpressionPercentage_;
  }

  public static final int VALID_ACCELERATED_MOBILE_PAGES_CLICKS_PERCENTAGE_FIELD_NUMBER = 149;
  private double validAcceleratedMobilePagesClicksPercentage_ = 0D;
  /**
   * <pre>
   * The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages
   * that reach a valid AMP page.
   * </pre>
   *
   * <code>optional double valid_accelerated_mobile_pages_clicks_percentage = 149;</code>
   * @return Whether the validAcceleratedMobilePagesClicksPercentage field is set.
   */
  @java.lang.Override
  public boolean hasValidAcceleratedMobilePagesClicksPercentage() {
    return ((bitField3_ & 0x00040000) != 0);
  }
  /**
   * <pre>
   * The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages
   * that reach a valid AMP page.
   * </pre>
   *
   * <code>optional double valid_accelerated_mobile_pages_clicks_percentage = 149;</code>
   * @return The validAcceleratedMobilePagesClicksPercentage.
   */
  @java.lang.Override
  public double getValidAcceleratedMobilePagesClicksPercentage() {
    return validAcceleratedMobilePagesClicksPercentage_;
  }

  public static final int VALUE_PER_ALL_CONVERSIONS_FIELD_NUMBER = 150;
  private double valuePerAllConversions_ = 0D;
  /**
   * <pre>
   * The value of all conversions divided by the number of all conversions.
   * </pre>
   *
   * <code>optional double value_per_all_conversions = 150;</code>
   * @return Whether the valuePerAllConversions field is set.
   */
  @java.lang.Override
  public boolean hasValuePerAllConversions() {
    return ((bitField3_ & 0x00080000) != 0);
  }
  /**
   * <pre>
   * The value of all conversions divided by the number of all conversions.
   * </pre>
   *
   * <code>optional double value_per_all_conversions = 150;</code>
   * @return The valuePerAllConversions.
   */
  @java.lang.Override
  public double getValuePerAllConversions() {
    return valuePerAllConversions_;
  }

  public static final int VALUE_PER_ALL_CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER = 244;
  private double valuePerAllConversionsByConversionDate_ = 0D;
  /**
   * <pre>
   * The value of all conversions divided by the number of all conversions. When
   * this column is selected with date, the values in date column means the
   * conversion date. Details for the by_conversion_date columns are available
   * at https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>optional double value_per_all_conversions_by_conversion_date = 244;</code>
   * @return Whether the valuePerAllConversionsByConversionDate field is set.
   */
  @java.lang.Override
  public boolean hasValuePerAllConversionsByConversionDate() {
    return ((bitField3_ & 0x00100000) != 0);
  }
  /**
   * <pre>
   * The value of all conversions divided by the number of all conversions. When
   * this column is selected with date, the values in date column means the
   * conversion date. Details for the by_conversion_date columns are available
   * at https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>optional double value_per_all_conversions_by_conversion_date = 244;</code>
   * @return The valuePerAllConversionsByConversionDate.
   */
  @java.lang.Override
  public double getValuePerAllConversionsByConversionDate() {
    return valuePerAllConversionsByConversionDate_;
  }

  public static final int VALUE_PER_CONVERSION_FIELD_NUMBER = 151;
  private double valuePerConversion_ = 0D;
  /**
   * <pre>
   * The value of conversions divided by the number of conversions. This only
   * includes conversion actions which include_in_conversions_metric attribute
   * is set to true. If you use conversion-based bidding, your bid strategies
   * will optimize for these conversions.
   * </pre>
   *
   * <code>optional double value_per_conversion = 151;</code>
   * @return Whether the valuePerConversion field is set.
   */
  @java.lang.Override
  public boolean hasValuePerConversion() {
    return ((bitField3_ & 0x00200000) != 0);
  }
  /**
   * <pre>
   * The value of conversions divided by the number of conversions. This only
   * includes conversion actions which include_in_conversions_metric attribute
   * is set to true. If you use conversion-based bidding, your bid strategies
   * will optimize for these conversions.
   * </pre>
   *
   * <code>optional double value_per_conversion = 151;</code>
   * @return The valuePerConversion.
   */
  @java.lang.Override
  public double getValuePerConversion() {
    return valuePerConversion_;
  }

  public static final int VALUE_PER_CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER = 245;
  private double valuePerConversionsByConversionDate_ = 0D;
  /**
   * <pre>
   * The value of conversions divided by the number of conversions. This only
   * includes conversion actions which include_in_conversions_metric attribute
   * is set to true. If you use conversion-based bidding, your bid strategies
   * will optimize for these conversions. When this column is selected with
   * date, the values in date column means the conversion date. Details for the
   * by_conversion_date columns are available at
   * https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>optional double value_per_conversions_by_conversion_date = 245;</code>
   * @return Whether the valuePerConversionsByConversionDate field is set.
   */
  @java.lang.Override
  public boolean hasValuePerConversionsByConversionDate() {
    return ((bitField3_ & 0x00400000) != 0);
  }
  /**
   * <pre>
   * The value of conversions divided by the number of conversions. This only
   * includes conversion actions which include_in_conversions_metric attribute
   * is set to true. If you use conversion-based bidding, your bid strategies
   * will optimize for these conversions. When this column is selected with
   * date, the values in date column means the conversion date. Details for the
   * by_conversion_date columns are available at
   * https://support.google.com/google-ads/answer/9549009.
   * </pre>
   *
   * <code>optional double value_per_conversions_by_conversion_date = 245;</code>
   * @return The valuePerConversionsByConversionDate.
   */
  @java.lang.Override
  public double getValuePerConversionsByConversionDate() {
    return valuePerConversionsByConversionDate_;
  }

  public static final int VALUE_PER_CURRENT_MODEL_ATTRIBUTED_CONVERSION_FIELD_NUMBER = 152;
  private double valuePerCurrentModelAttributedConversion_ = 0D;
  /**
   * <pre>
   * The value of current model attributed conversions divided by the number of
   * the conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double value_per_current_model_attributed_conversion = 152;</code>
   * @return Whether the valuePerCurrentModelAttributedConversion field is set.
   */
  @java.lang.Override
  public boolean hasValuePerCurrentModelAttributedConversion() {
    return ((bitField3_ & 0x00800000) != 0);
  }
  /**
   * <pre>
   * The value of current model attributed conversions divided by the number of
   * the conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   * </pre>
   *
   * <code>optional double value_per_current_model_attributed_conversion = 152;</code>
   * @return The valuePerCurrentModelAttributedConversion.
   */
  @java.lang.Override
  public double getValuePerCurrentModelAttributedConversion() {
    return valuePerCurrentModelAttributedConversion_;
  }

  public static final int VIDEO_QUARTILE_P100_RATE_FIELD_NUMBER = 132;
  private double videoQuartileP100Rate_ = 0D;
  /**
   * <pre>
   * Percentage of impressions where the viewer watched all of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p100_rate = 132;</code>
   * @return Whether the videoQuartileP100Rate field is set.
   */
  @java.lang.Override
  public boolean hasVideoQuartileP100Rate() {
    return ((bitField3_ & 0x01000000) != 0);
  }
  /**
   * <pre>
   * Percentage of impressions where the viewer watched all of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p100_rate = 132;</code>
   * @return The videoQuartileP100Rate.
   */
  @java.lang.Override
  public double getVideoQuartileP100Rate() {
    return videoQuartileP100Rate_;
  }

  public static final int VIDEO_QUARTILE_P25_RATE_FIELD_NUMBER = 133;
  private double videoQuartileP25Rate_ = 0D;
  /**
   * <pre>
   * Percentage of impressions where the viewer watched 25% of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p25_rate = 133;</code>
   * @return Whether the videoQuartileP25Rate field is set.
   */
  @java.lang.Override
  public boolean hasVideoQuartileP25Rate() {
    return ((bitField3_ & 0x02000000) != 0);
  }
  /**
   * <pre>
   * Percentage of impressions where the viewer watched 25% of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p25_rate = 133;</code>
   * @return The videoQuartileP25Rate.
   */
  @java.lang.Override
  public double getVideoQuartileP25Rate() {
    return videoQuartileP25Rate_;
  }

  public static final int VIDEO_QUARTILE_P50_RATE_FIELD_NUMBER = 134;
  private double videoQuartileP50Rate_ = 0D;
  /**
   * <pre>
   * Percentage of impressions where the viewer watched 50% of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p50_rate = 134;</code>
   * @return Whether the videoQuartileP50Rate field is set.
   */
  @java.lang.Override
  public boolean hasVideoQuartileP50Rate() {
    return ((bitField3_ & 0x04000000) != 0);
  }
  /**
   * <pre>
   * Percentage of impressions where the viewer watched 50% of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p50_rate = 134;</code>
   * @return The videoQuartileP50Rate.
   */
  @java.lang.Override
  public double getVideoQuartileP50Rate() {
    return videoQuartileP50Rate_;
  }

  public static final int VIDEO_QUARTILE_P75_RATE_FIELD_NUMBER = 135;
  private double videoQuartileP75Rate_ = 0D;
  /**
   * <pre>
   * Percentage of impressions where the viewer watched 75% of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p75_rate = 135;</code>
   * @return Whether the videoQuartileP75Rate field is set.
   */
  @java.lang.Override
  public boolean hasVideoQuartileP75Rate() {
    return ((bitField3_ & 0x08000000) != 0);
  }
  /**
   * <pre>
   * Percentage of impressions where the viewer watched 75% of your video.
   * </pre>
   *
   * <code>optional double video_quartile_p75_rate = 135;</code>
   * @return The videoQuartileP75Rate.
   */
  @java.lang.Override
  public double getVideoQuartileP75Rate() {
    return videoQuartileP75Rate_;
  }

  public static final int VIDEO_VIEW_RATE_FIELD_NUMBER = 153;
  private double videoViewRate_ = 0D;
  /**
   * <pre>
   * The number of views your TrueView video ad receives divided by its number
   * of impressions, including thumbnail impressions for TrueView in-display
   * ads.
   * </pre>
   *
   * <code>optional double video_view_rate = 153;</code>
   * @return Whether the videoViewRate field is set.
   */
  @java.lang.Override
  public boolean hasVideoViewRate() {
    return ((bitField3_ & 0x10000000) != 0);
  }
  /**
   * <pre>
   * The number of views your TrueView video ad receives divided by its number
   * of impressions, including thumbnail impressions for TrueView in-display
   * ads.
   * </pre>
   *
   * <code>optional double video_view_rate = 153;</code>
   * @return The videoViewRate.
   */
  @java.lang.Override
  public double getVideoViewRate() {
    return videoViewRate_;
  }

  public static final int VIDEO_VIEWS_FIELD_NUMBER = 154;
  private long videoViews_ = 0L;
  /**
   * <pre>
   * The number of times your video ads were viewed.
   * </pre>
   *
   * <code>optional int64 video_views = 154;</code>
   * @return Whether the videoViews field is set.
   */
  @java.lang.Override
  public boolean hasVideoViews() {
    return ((bitField3_ & 0x20000000) != 0);
  }
  /**
   * <pre>
   * The number of times your video ads were viewed.
   * </pre>
   *
   * <code>optional int64 video_views = 154;</code>
   * @return The videoViews.
   */
  @java.lang.Override
  public long getVideoViews() {
    return videoViews_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FIELD_NUMBER = 155;
  private long viewThroughConversions_ = 0L;
  /**
   * <pre>
   * The total number of view-through conversions.
   * These happen when a customer sees an image or rich media ad, then later
   * completes a conversion on your site without interacting with (for example,
   * clicking on) another ad.
   * </pre>
   *
   * <code>optional int64 view_through_conversions = 155;</code>
   * @return Whether the viewThroughConversions field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversions() {
    return ((bitField3_ & 0x40000000) != 0);
  }
  /**
   * <pre>
   * The total number of view-through conversions.
   * These happen when a customer sees an image or rich media ad, then later
   * completes a conversion on your site without interacting with (for example,
   * clicking on) another ad.
   * </pre>
   *
   * <code>optional int64 view_through_conversions = 155;</code>
   * @return The viewThroughConversions.
   */
  @java.lang.Override
  public long getViewThroughConversions() {
    return viewThroughConversions_;
  }

  public static final int SK_AD_NETWORK_CONVERSIONS_FIELD_NUMBER = 246;
  private long skAdNetworkConversions_ = 0L;
  /**
   * <pre>
   * The number of iOS Store Kit Ad Network conversions.
   * </pre>
   *
   * <code>int64 sk_ad_network_conversions = 246;</code>
   * @return The skAdNetworkConversions.
   */
  @java.lang.Override
  public long getSkAdNetworkConversions() {
    return skAdNetworkConversions_;
  }

  public static final int PUBLISHER_PURCHASED_CLICKS_FIELD_NUMBER = 264;
  private long publisherPurchasedClicks_ = 0L;
  /**
   * <pre>
   * Clicks from properties not owned by the publisher for which the traffic
   * the publisher has paid for or acquired through incentivized activity
   * </pre>
   *
   * <code>int64 publisher_purchased_clicks = 264;</code>
   * @return The publisherPurchasedClicks.
   */
  @java.lang.Override
  public long getPublisherPurchasedClicks() {
    return publisherPurchasedClicks_;
  }

  public static final int PUBLISHER_ORGANIC_CLICKS_FIELD_NUMBER = 265;
  private long publisherOrganicClicks_ = 0L;
  /**
   * <pre>
   * Clicks from properties for which the traffic the publisher has not paid
   * for or acquired through incentivized activity
   * </pre>
   *
   * <code>int64 publisher_organic_clicks = 265;</code>
   * @return The publisherOrganicClicks.
   */
  @java.lang.Override
  public long getPublisherOrganicClicks() {
    return publisherOrganicClicks_;
  }

  public static final int PUBLISHER_UNKNOWN_CLICKS_FIELD_NUMBER = 266;
  private long publisherUnknownClicks_ = 0L;
  /**
   * <pre>
   * Clicks from traffic which is not identified as "Publisher Purchased" or
   * "Publisher Organic"
   * </pre>
   *
   * <code>int64 publisher_unknown_clicks = 266;</code>
   * @return The publisherUnknownClicks.
   */
  @java.lang.Override
  public long getPublisherUnknownClicks() {
    return publisherUnknownClicks_;
  }

  public static final int ALL_CONVERSIONS_FROM_LOCATION_ASSET_CLICK_TO_CALL_FIELD_NUMBER = 267;
  private double allConversionsFromLocationAssetClickToCall_ = 0D;
  /**
   * <pre>
   * Number of call button clicks on any location surface after a chargeable ad
   * event (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_click_to_call = 267;</code>
   * @return Whether the allConversionsFromLocationAssetClickToCall field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromLocationAssetClickToCall() {
    return ((bitField3_ & 0x80000000) != 0);
  }
  /**
   * <pre>
   * Number of call button clicks on any location surface after a chargeable ad
   * event (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_click_to_call = 267;</code>
   * @return The allConversionsFromLocationAssetClickToCall.
   */
  @java.lang.Override
  public double getAllConversionsFromLocationAssetClickToCall() {
    return allConversionsFromLocationAssetClickToCall_;
  }

  public static final int ALL_CONVERSIONS_FROM_LOCATION_ASSET_DIRECTIONS_FIELD_NUMBER = 268;
  private double allConversionsFromLocationAssetDirections_ = 0D;
  /**
   * <pre>
   * Number of driving directions clicks on any location surface after a
   * chargeable ad event (click or impression). This measure is coming
   * from Asset based location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_directions = 268;</code>
   * @return Whether the allConversionsFromLocationAssetDirections field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromLocationAssetDirections() {
    return ((bitField4_ & 0x00000001) != 0);
  }
  /**
   * <pre>
   * Number of driving directions clicks on any location surface after a
   * chargeable ad event (click or impression). This measure is coming
   * from Asset based location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_directions = 268;</code>
   * @return The allConversionsFromLocationAssetDirections.
   */
  @java.lang.Override
  public double getAllConversionsFromLocationAssetDirections() {
    return allConversionsFromLocationAssetDirections_;
  }

  public static final int ALL_CONVERSIONS_FROM_LOCATION_ASSET_MENU_FIELD_NUMBER = 269;
  private double allConversionsFromLocationAssetMenu_ = 0D;
  /**
   * <pre>
   * Number of menu link clicks on any location surface after a chargeable ad
   * event (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_menu = 269;</code>
   * @return Whether the allConversionsFromLocationAssetMenu field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromLocationAssetMenu() {
    return ((bitField4_ & 0x00000002) != 0);
  }
  /**
   * <pre>
   * Number of menu link clicks on any location surface after a chargeable ad
   * event (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_menu = 269;</code>
   * @return The allConversionsFromLocationAssetMenu.
   */
  @java.lang.Override
  public double getAllConversionsFromLocationAssetMenu() {
    return allConversionsFromLocationAssetMenu_;
  }

  public static final int ALL_CONVERSIONS_FROM_LOCATION_ASSET_ORDER_FIELD_NUMBER = 270;
  private double allConversionsFromLocationAssetOrder_ = 0D;
  /**
   * <pre>
   * Number of order clicks on any location surface after a chargeable ad event
   * (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_order = 270;</code>
   * @return Whether the allConversionsFromLocationAssetOrder field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromLocationAssetOrder() {
    return ((bitField4_ & 0x00000004) != 0);
  }
  /**
   * <pre>
   * Number of order clicks on any location surface after a chargeable ad event
   * (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_order = 270;</code>
   * @return The allConversionsFromLocationAssetOrder.
   */
  @java.lang.Override
  public double getAllConversionsFromLocationAssetOrder() {
    return allConversionsFromLocationAssetOrder_;
  }

  public static final int ALL_CONVERSIONS_FROM_LOCATION_ASSET_OTHER_ENGAGEMENT_FIELD_NUMBER = 271;
  private double allConversionsFromLocationAssetOtherEngagement_ = 0D;
  /**
   * <pre>
   * Number of other types of local action clicks on any location surface after
   * a chargeable ad event (click or impression). This measure is coming
   * from Asset based location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_other_engagement = 271;</code>
   * @return Whether the allConversionsFromLocationAssetOtherEngagement field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromLocationAssetOtherEngagement() {
    return ((bitField4_ & 0x00000008) != 0);
  }
  /**
   * <pre>
   * Number of other types of local action clicks on any location surface after
   * a chargeable ad event (click or impression). This measure is coming
   * from Asset based location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_other_engagement = 271;</code>
   * @return The allConversionsFromLocationAssetOtherEngagement.
   */
  @java.lang.Override
  public double getAllConversionsFromLocationAssetOtherEngagement() {
    return allConversionsFromLocationAssetOtherEngagement_;
  }

  public static final int ALL_CONVERSIONS_FROM_LOCATION_ASSET_STORE_VISITS_FIELD_NUMBER = 272;
  private double allConversionsFromLocationAssetStoreVisits_ = 0D;
  /**
   * <pre>
   * Estimated number of visits to the store after a chargeable
   * ad event (click or impression). This measure is coming from Asset
   * based location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_store_visits = 272;</code>
   * @return Whether the allConversionsFromLocationAssetStoreVisits field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromLocationAssetStoreVisits() {
    return ((bitField4_ & 0x00000010) != 0);
  }
  /**
   * <pre>
   * Estimated number of visits to the store after a chargeable
   * ad event (click or impression). This measure is coming from Asset
   * based location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_store_visits = 272;</code>
   * @return The allConversionsFromLocationAssetStoreVisits.
   */
  @java.lang.Override
  public double getAllConversionsFromLocationAssetStoreVisits() {
    return allConversionsFromLocationAssetStoreVisits_;
  }

  public static final int ALL_CONVERSIONS_FROM_LOCATION_ASSET_WEBSITE_FIELD_NUMBER = 273;
  private double allConversionsFromLocationAssetWebsite_ = 0D;
  /**
   * <pre>
   * Number of website URL clicks on any location surface after a chargeable ad
   * event (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_website = 273;</code>
   * @return Whether the allConversionsFromLocationAssetWebsite field is set.
   */
  @java.lang.Override
  public boolean hasAllConversionsFromLocationAssetWebsite() {
    return ((bitField4_ & 0x00000020) != 0);
  }
  /**
   * <pre>
   * Number of website URL clicks on any location surface after a chargeable ad
   * event (click or impression). This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional double all_conversions_from_location_asset_website = 273;</code>
   * @return The allConversionsFromLocationAssetWebsite.
   */
  @java.lang.Override
  public double getAllConversionsFromLocationAssetWebsite() {
    return allConversionsFromLocationAssetWebsite_;
  }

  public static final int ELIGIBLE_IMPRESSIONS_FROM_LOCATION_ASSET_STORE_REACH_FIELD_NUMBER = 274;
  private long eligibleImpressionsFromLocationAssetStoreReach_ = 0L;
  /**
   * <pre>
   * Number of impressions in which the store location was shown or the location
   * was used for targeting. This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional int64 eligible_impressions_from_location_asset_store_reach = 274;</code>
   * @return Whether the eligibleImpressionsFromLocationAssetStoreReach field is set.
   */
  @java.lang.Override
  public boolean hasEligibleImpressionsFromLocationAssetStoreReach() {
    return ((bitField4_ & 0x00000040) != 0);
  }
  /**
   * <pre>
   * Number of impressions in which the store location was shown or the location
   * was used for targeting. This measure is coming from Asset based
   * location.
   * </pre>
   *
   * <code>optional int64 eligible_impressions_from_location_asset_store_reach = 274;</code>
   * @return The eligibleImpressionsFromLocationAssetStoreReach.
   */
  @java.lang.Override
  public long getEligibleImpressionsFromLocationAssetStoreReach() {
    return eligibleImpressionsFromLocationAssetStoreReach_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_CLICK_TO_CALL_FIELD_NUMBER = 275;
  private double viewThroughConversionsFromLocationAssetClickToCall_ = 0D;
  /**
   * <pre>
   * Number of call button clicks on any location surface after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_click_to_call = 275;</code>
   * @return Whether the viewThroughConversionsFromLocationAssetClickToCall field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversionsFromLocationAssetClickToCall() {
    return ((bitField4_ & 0x00000080) != 0);
  }
  /**
   * <pre>
   * Number of call button clicks on any location surface after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_click_to_call = 275;</code>
   * @return The viewThroughConversionsFromLocationAssetClickToCall.
   */
  @java.lang.Override
  public double getViewThroughConversionsFromLocationAssetClickToCall() {
    return viewThroughConversionsFromLocationAssetClickToCall_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_DIRECTIONS_FIELD_NUMBER = 276;
  private double viewThroughConversionsFromLocationAssetDirections_ = 0D;
  /**
   * <pre>
   * Number of driving directions clicks on any location surface after an
   * impression. This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_directions = 276;</code>
   * @return Whether the viewThroughConversionsFromLocationAssetDirections field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversionsFromLocationAssetDirections() {
    return ((bitField4_ & 0x00000100) != 0);
  }
  /**
   * <pre>
   * Number of driving directions clicks on any location surface after an
   * impression. This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_directions = 276;</code>
   * @return The viewThroughConversionsFromLocationAssetDirections.
   */
  @java.lang.Override
  public double getViewThroughConversionsFromLocationAssetDirections() {
    return viewThroughConversionsFromLocationAssetDirections_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_MENU_FIELD_NUMBER = 277;
  private double viewThroughConversionsFromLocationAssetMenu_ = 0D;
  /**
   * <pre>
   * Number of menu link clicks on any location surface after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_menu = 277;</code>
   * @return Whether the viewThroughConversionsFromLocationAssetMenu field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversionsFromLocationAssetMenu() {
    return ((bitField4_ & 0x00000200) != 0);
  }
  /**
   * <pre>
   * Number of menu link clicks on any location surface after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_menu = 277;</code>
   * @return The viewThroughConversionsFromLocationAssetMenu.
   */
  @java.lang.Override
  public double getViewThroughConversionsFromLocationAssetMenu() {
    return viewThroughConversionsFromLocationAssetMenu_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_ORDER_FIELD_NUMBER = 278;
  private double viewThroughConversionsFromLocationAssetOrder_ = 0D;
  /**
   * <pre>
   * Number of order clicks on any location surface after an impression. This
   * measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_order = 278;</code>
   * @return Whether the viewThroughConversionsFromLocationAssetOrder field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversionsFromLocationAssetOrder() {
    return ((bitField4_ & 0x00000400) != 0);
  }
  /**
   * <pre>
   * Number of order clicks on any location surface after an impression. This
   * measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_order = 278;</code>
   * @return The viewThroughConversionsFromLocationAssetOrder.
   */
  @java.lang.Override
  public double getViewThroughConversionsFromLocationAssetOrder() {
    return viewThroughConversionsFromLocationAssetOrder_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_OTHER_ENGAGEMENT_FIELD_NUMBER = 279;
  private double viewThroughConversionsFromLocationAssetOtherEngagement_ = 0D;
  /**
   * <pre>
   * Number of other types of local action clicks on any location surface after
   * an impression. This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_other_engagement = 279;</code>
   * @return Whether the viewThroughConversionsFromLocationAssetOtherEngagement field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversionsFromLocationAssetOtherEngagement() {
    return ((bitField4_ & 0x00000800) != 0);
  }
  /**
   * <pre>
   * Number of other types of local action clicks on any location surface after
   * an impression. This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_other_engagement = 279;</code>
   * @return The viewThroughConversionsFromLocationAssetOtherEngagement.
   */
  @java.lang.Override
  public double getViewThroughConversionsFromLocationAssetOtherEngagement() {
    return viewThroughConversionsFromLocationAssetOtherEngagement_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_STORE_VISITS_FIELD_NUMBER = 280;
  private double viewThroughConversionsFromLocationAssetStoreVisits_ = 0D;
  /**
   * <pre>
   * Estimated number of visits to the store after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_store_visits = 280;</code>
   * @return Whether the viewThroughConversionsFromLocationAssetStoreVisits field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversionsFromLocationAssetStoreVisits() {
    return ((bitField4_ & 0x00001000) != 0);
  }
  /**
   * <pre>
   * Estimated number of visits to the store after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_store_visits = 280;</code>
   * @return The viewThroughConversionsFromLocationAssetStoreVisits.
   */
  @java.lang.Override
  public double getViewThroughConversionsFromLocationAssetStoreVisits() {
    return viewThroughConversionsFromLocationAssetStoreVisits_;
  }

  public static final int VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_WEBSITE_FIELD_NUMBER = 281;
  private double viewThroughConversionsFromLocationAssetWebsite_ = 0D;
  /**
   * <pre>
   * Number of website URL clicks on any location surface after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_website = 281;</code>
   * @return Whether the viewThroughConversionsFromLocationAssetWebsite field is set.
   */
  @java.lang.Override
  public boolean hasViewThroughConversionsFromLocationAssetWebsite() {
    return ((bitField4_ & 0x00002000) != 0);
  }
  /**
   * <pre>
   * Number of website URL clicks on any location surface after an impression.
   * This measure is coming from Asset based location.
   * </pre>
   *
   * <code>optional double view_through_conversions_from_location_asset_website = 281;</code>
   * @return The viewThroughConversionsFromLocationAssetWebsite.
   */
  @java.lang.Override
  public double getViewThroughConversionsFromLocationAssetWebsite() {
    return viewThroughConversionsFromLocationAssetWebsite_;
  }

  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 {
    getSerializedSize();
    if (historicalCreativeQualityScore_ != com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNSPECIFIED.getNumber()) {
      output.writeEnum(80, historicalCreativeQualityScore_);
    }
    if (historicalLandingPageQualityScore_ != com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNSPECIFIED.getNumber()) {
      output.writeEnum(81, historicalLandingPageQualityScore_);
    }
    if (historicalSearchPredictedCtr_ != com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNSPECIFIED.getNumber()) {
      output.writeEnum(83, historicalSearchPredictedCtr_);
    }
    if (getInteractionEventTypesList().size() > 0) {
      output.writeUInt32NoTag(802);
      output.writeUInt32NoTag(interactionEventTypesMemoizedSerializedSize);
    }
    for (int i = 0; i < interactionEventTypes_.size(); i++) {
      output.writeEnumNoTag(interactionEventTypes_.get(i));
    }
    if (((bitField1_ & 0x00000080) != 0)) {
      output.writeInt64(131, clicks_);
    }
    if (((bitField3_ & 0x01000000) != 0)) {
      output.writeDouble(132, videoQuartileP100Rate_);
    }
    if (((bitField3_ & 0x02000000) != 0)) {
      output.writeDouble(133, videoQuartileP25Rate_);
    }
    if (((bitField3_ & 0x04000000) != 0)) {
      output.writeDouble(134, videoQuartileP50Rate_);
    }
    if (((bitField3_ & 0x08000000) != 0)) {
      output.writeDouble(135, videoQuartileP75Rate_);
    }
    if (((bitField3_ & 0x00000004) != 0)) {
      output.writeDouble(136, searchAbsoluteTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000008) != 0)) {
      output.writeDouble(137, searchBudgetLostAbsoluteTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000010) != 0)) {
      output.writeDouble(138, searchBudgetLostImpressionShare_);
    }
    if (((bitField3_ & 0x00000020) != 0)) {
      output.writeDouble(139, searchBudgetLostTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000040) != 0)) {
      output.writeDouble(140, searchClickShare_);
    }
    if (((bitField3_ & 0x00000080) != 0)) {
      output.writeDouble(141, searchExactMatchImpressionShare_);
    }
    if (((bitField3_ & 0x00000100) != 0)) {
      output.writeDouble(142, searchImpressionShare_);
    }
    if (((bitField3_ & 0x00000200) != 0)) {
      output.writeDouble(143, searchRankLostAbsoluteTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000400) != 0)) {
      output.writeDouble(144, searchRankLostImpressionShare_);
    }
    if (((bitField3_ & 0x00000800) != 0)) {
      output.writeDouble(145, searchRankLostTopImpressionShare_);
    }
    if (((bitField3_ & 0x00001000) != 0)) {
      output.writeDouble(146, searchTopImpressionShare_);
    }
    if (((bitField3_ & 0x00004000) != 0)) {
      output.writeInt64(147, speedScore_);
    }
    if (((bitField3_ & 0x00020000) != 0)) {
      output.writeDouble(148, topImpressionPercentage_);
    }
    if (((bitField3_ & 0x00040000) != 0)) {
      output.writeDouble(149, validAcceleratedMobilePagesClicksPercentage_);
    }
    if (((bitField3_ & 0x00080000) != 0)) {
      output.writeDouble(150, valuePerAllConversions_);
    }
    if (((bitField3_ & 0x00200000) != 0)) {
      output.writeDouble(151, valuePerConversion_);
    }
    if (((bitField3_ & 0x00800000) != 0)) {
      output.writeDouble(152, valuePerCurrentModelAttributedConversion_);
    }
    if (((bitField3_ & 0x10000000) != 0)) {
      output.writeDouble(153, videoViewRate_);
    }
    if (((bitField3_ & 0x20000000) != 0)) {
      output.writeInt64(154, videoViews_);
    }
    if (((bitField3_ & 0x40000000) != 0)) {
      output.writeInt64(155, viewThroughConversions_);
    }
    if (((bitField1_ & 0x00000100) != 0)) {
      output.writeInt64(156, combinedClicks_);
    }
    if (((bitField1_ & 0x00000200) != 0)) {
      output.writeDouble(157, combinedClicksPerQuery_);
    }
    if (((bitField1_ & 0x00000400) != 0)) {
      output.writeInt64(158, combinedQueries_);
    }
    if (((bitField1_ & 0x00000800) != 0)) {
      output.writeDouble(159, contentBudgetLostImpressionShare_);
    }
    if (((bitField1_ & 0x00001000) != 0)) {
      output.writeDouble(160, contentImpressionShare_);
    }
    if (((bitField1_ & 0x00002000) != 0)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 161, conversionLastReceivedRequestDateTime_);
    }
    if (((bitField1_ & 0x00004000) != 0)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 162, conversionLastConversionDate_);
    }
    if (((bitField1_ & 0x00008000) != 0)) {
      output.writeDouble(163, contentRankLostImpressionShare_);
    }
    if (((bitField1_ & 0x00010000) != 0)) {
      output.writeDouble(164, conversionsFromInteractionsRate_);
    }
    if (((bitField1_ & 0x00020000) != 0)) {
      output.writeDouble(165, conversionsValue_);
    }
    if (((bitField1_ & 0x00080000) != 0)) {
      output.writeDouble(166, conversionsValuePerCost_);
    }
    if (((bitField1_ & 0x00100000) != 0)) {
      output.writeDouble(167, conversionsFromInteractionsValuePerInteraction_);
    }
    if (((bitField1_ & 0x00200000) != 0)) {
      output.writeDouble(168, conversions_);
    }
    if (((bitField1_ & 0x00400000) != 0)) {
      output.writeInt64(169, costMicros_);
    }
    if (((bitField1_ & 0x00800000) != 0)) {
      output.writeDouble(170, costPerAllConversions_);
    }
    if (((bitField1_ & 0x01000000) != 0)) {
      output.writeDouble(171, costPerConversion_);
    }
    if (((bitField1_ & 0x02000000) != 0)) {
      output.writeDouble(172, costPerCurrentModelAttributedConversion_);
    }
    if (((bitField1_ & 0x04000000) != 0)) {
      output.writeDouble(173, crossDeviceConversions_);
    }
    if (((bitField1_ & 0x08000000) != 0)) {
      output.writeDouble(174, ctr_);
    }
    if (((bitField1_ & 0x10000000) != 0)) {
      output.writeDouble(175, currentModelAttributedConversions_);
    }
    if (((bitField1_ & 0x20000000) != 0)) {
      output.writeDouble(176, currentModelAttributedConversionsFromInteractionsRate_);
    }
    if (((bitField1_ & 0x40000000) != 0)) {
      output.writeDouble(177, currentModelAttributedConversionsFromInteractionsValuePerInteraction_);
    }
    if (((bitField1_ & 0x80000000) != 0)) {
      output.writeDouble(178, currentModelAttributedConversionsValue_);
    }
    if (((bitField2_ & 0x00000001) != 0)) {
      output.writeDouble(179, currentModelAttributedConversionsValuePerCost_);
    }
    if (((bitField2_ & 0x00000002) != 0)) {
      output.writeDouble(180, engagementRate_);
    }
    if (((bitField2_ & 0x00000004) != 0)) {
      output.writeInt64(181, engagements_);
    }
    if (((bitField0_ & 0x00000001) != 0)) {
      output.writeDouble(183, absoluteTopImpressionPercentage_);
    }
    if (((bitField0_ & 0x00000002) != 0)) {
      output.writeDouble(184, activeViewCpm_);
    }
    if (((bitField0_ & 0x00000004) != 0)) {
      output.writeDouble(185, activeViewCtr_);
    }
    if (((bitField0_ & 0x00000008) != 0)) {
      output.writeInt64(186, activeViewImpressions_);
    }
    if (((bitField0_ & 0x00000010) != 0)) {
      output.writeDouble(187, activeViewMeasurability_);
    }
    if (((bitField0_ & 0x00000020) != 0)) {
      output.writeInt64(188, activeViewMeasurableCostMicros_);
    }
    if (((bitField0_ & 0x00000040) != 0)) {
      output.writeInt64(189, activeViewMeasurableImpressions_);
    }
    if (((bitField0_ & 0x00000080) != 0)) {
      output.writeDouble(190, activeViewViewability_);
    }
    if (((bitField0_ & 0x00000100) != 0)) {
      output.writeDouble(191, allConversionsFromInteractionsRate_);
    }
    if (((bitField0_ & 0x00000200) != 0)) {
      output.writeDouble(192, allConversionsValue_);
    }
    if (((bitField0_ & 0x00000800) != 0)) {
      output.writeDouble(193, allConversions_);
    }
    if (((bitField0_ & 0x00001000) != 0)) {
      output.writeDouble(194, allConversionsValuePerCost_);
    }
    if (((bitField0_ & 0x00002000) != 0)) {
      output.writeDouble(195, allConversionsFromClickToCall_);
    }
    if (((bitField0_ & 0x00004000) != 0)) {
      output.writeDouble(196, allConversionsFromDirections_);
    }
    if (((bitField0_ & 0x00008000) != 0)) {
      output.writeDouble(197, allConversionsFromInteractionsValuePerInteraction_);
    }
    if (((bitField0_ & 0x00010000) != 0)) {
      output.writeDouble(198, allConversionsFromMenu_);
    }
    if (((bitField0_ & 0x00020000) != 0)) {
      output.writeDouble(199, allConversionsFromOrder_);
    }
    if (((bitField0_ & 0x00040000) != 0)) {
      output.writeDouble(200, allConversionsFromOtherEngagement_);
    }
    if (((bitField0_ & 0x00080000) != 0)) {
      output.writeDouble(201, allConversionsFromStoreVisit_);
    }
    if (((bitField0_ & 0x00100000) != 0)) {
      output.writeDouble(202, allConversionsFromStoreWebsite_);
    }
    if (((bitField0_ & 0x08000000) != 0)) {
      output.writeDouble(203, averageCost_);
    }
    if (((bitField0_ & 0x10000000) != 0)) {
      output.writeDouble(204, averageCpc_);
    }
    if (((bitField0_ & 0x20000000) != 0)) {
      output.writeDouble(205, averageCpe_);
    }
    if (((bitField0_ & 0x40000000) != 0)) {
      output.writeDouble(206, averageCpm_);
    }
    if (((bitField0_ & 0x80000000) != 0)) {
      output.writeDouble(207, averageCpv_);
    }
    if (((bitField1_ & 0x00000001) != 0)) {
      output.writeDouble(208, averagePageViews_);
    }
    if (((bitField1_ & 0x00000002) != 0)) {
      output.writeDouble(209, averageTimeOnSite_);
    }
    if (((bitField1_ & 0x00000004) != 0)) {
      output.writeDouble(210, benchmarkAverageMaxCpc_);
    }
    if (((bitField1_ & 0x00000020) != 0)) {
      output.writeDouble(211, benchmarkCtr_);
    }
    if (((bitField1_ & 0x00000040) != 0)) {
      output.writeDouble(212, bounceRate_);
    }
    if (((bitField2_ & 0x00000008) != 0)) {
      output.writeDouble(213, hotelAverageLeadValueMicros_);
    }
    if (((bitField2_ & 0x00000040) != 0)) {
      output.writeDouble(214, hotelPriceDifferencePercentage_);
    }
    if (((bitField2_ & 0x00000080) != 0)) {
      output.writeInt64(215, hotelEligibleImpressions_);
    }
    if (((bitField2_ & 0x00000100) != 0)) {
      output.writeInt64(216, historicalQualityScore_);
    }
    if (((bitField2_ & 0x00000200) != 0)) {
      output.writeInt64(217, gmailForwards_);
    }
    if (((bitField2_ & 0x00000400) != 0)) {
      output.writeInt64(218, gmailSaves_);
    }
    if (((bitField2_ & 0x00000800) != 0)) {
      output.writeInt64(219, gmailSecondaryClicks_);
    }
    if (((bitField2_ & 0x00001000) != 0)) {
      output.writeInt64(220, impressionsFromStoreReach_);
    }
    if (((bitField2_ & 0x00002000) != 0)) {
      output.writeInt64(221, impressions_);
    }
    if (((bitField2_ & 0x00004000) != 0)) {
      output.writeDouble(222, interactionRate_);
    }
    if (((bitField2_ & 0x00008000) != 0)) {
      output.writeInt64(223, interactions_);
    }
    if (((bitField2_ & 0x00010000) != 0)) {
      output.writeDouble(224, invalidClickRate_);
    }
    if (((bitField2_ & 0x00020000) != 0)) {
      output.writeInt64(225, invalidClicks_);
    }
    if (((bitField2_ & 0x00040000) != 0)) {
      output.writeInt64(226, messageChats_);
    }
    if (((bitField2_ & 0x00080000) != 0)) {
      output.writeInt64(227, messageImpressions_);
    }
    if (((bitField2_ & 0x00100000) != 0)) {
      output.writeDouble(228, messageChatRate_);
    }
    if (((bitField2_ & 0x00200000) != 0)) {
      output.writeDouble(229, mobileFriendlyClicksPercentage_);
    }
    if (((bitField2_ & 0x01000000) != 0)) {
      output.writeInt64(230, organicClicks_);
    }
    if (((bitField2_ & 0x02000000) != 0)) {
      output.writeDouble(231, organicClicksPerQuery_);
    }
    if (((bitField2_ & 0x04000000) != 0)) {
      output.writeInt64(232, organicImpressions_);
    }
    if (((bitField2_ & 0x08000000) != 0)) {
      output.writeDouble(233, organicImpressionsPerQuery_);
    }
    if (((bitField2_ & 0x10000000) != 0)) {
      output.writeInt64(234, organicQueries_);
    }
    if (((bitField2_ & 0x20000000) != 0)) {
      output.writeDouble(235, percentNewVisitors_);
    }
    if (((bitField2_ & 0x40000000) != 0)) {
      output.writeInt64(236, phoneCalls_);
    }
    if (((bitField2_ & 0x80000000) != 0)) {
      output.writeInt64(237, phoneImpressions_);
    }
    if (((bitField3_ & 0x00000001) != 0)) {
      output.writeDouble(238, phoneThroughRate_);
    }
    if (((bitField3_ & 0x00000002) != 0)) {
      output.writeDouble(239, relativeCtr_);
    }
    if (java.lang.Double.doubleToRawLongBits(allConversionsValueByConversionDate_) != 0) {
      output.writeDouble(240, allConversionsValueByConversionDate_);
    }
    if (java.lang.Double.doubleToRawLongBits(allConversionsByConversionDate_) != 0) {
      output.writeDouble(241, allConversionsByConversionDate_);
    }
    if (java.lang.Double.doubleToRawLongBits(conversionsValueByConversionDate_) != 0) {
      output.writeDouble(242, conversionsValueByConversionDate_);
    }
    if (java.lang.Double.doubleToRawLongBits(conversionsByConversionDate_) != 0) {
      output.writeDouble(243, conversionsByConversionDate_);
    }
    if (((bitField3_ & 0x00100000) != 0)) {
      output.writeDouble(244, valuePerAllConversionsByConversionDate_);
    }
    if (((bitField3_ & 0x00400000) != 0)) {
      output.writeDouble(245, valuePerConversionsByConversionDate_);
    }
    if (skAdNetworkConversions_ != 0L) {
      output.writeInt64(246, skAdNetworkConversions_);
    }
    if (((bitField2_ & 0x00400000) != 0)) {
      output.writeDouble(247, optimizationScoreUplift_);
    }
    if (((bitField2_ & 0x00800000) != 0)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 248, optimizationScoreUrl_);
    }
    if (((bitField3_ & 0x00010000) != 0)) {
      output.writeDouble(250, averageTargetRoas_);
    }
    if (((bitField1_ & 0x00000008) != 0)) {
      output.writeDouble(254, biddableAppInstallConversions_);
    }
    if (((bitField1_ & 0x00000010) != 0)) {
      output.writeDouble(255, biddableAppPostInstallConversions_);
    }
    if (((bitField2_ & 0x00000010) != 0)) {
      output.writeInt64(256, hotelCommissionRateMicros_);
    }
    if (((bitField2_ & 0x00000020) != 0)) {
      output.writeDouble(257, hotelExpectedCommissionCost_);
    }
    if (((bitField0_ & 0x00200000) != 0)) {
      output.writeDouble(258, auctionInsightSearchAbsoluteTopImpressionPercentage_);
    }
    if (((bitField0_ & 0x00400000) != 0)) {
      output.writeDouble(259, auctionInsightSearchImpressionShare_);
    }
    if (((bitField0_ & 0x00800000) != 0)) {
      output.writeDouble(260, auctionInsightSearchOutrankingShare_);
    }
    if (((bitField0_ & 0x01000000) != 0)) {
      output.writeDouble(261, auctionInsightSearchOverlapRate_);
    }
    if (((bitField0_ & 0x02000000) != 0)) {
      output.writeDouble(262, auctionInsightSearchPositionAboveRate_);
    }
    if (((bitField0_ & 0x04000000) != 0)) {
      output.writeDouble(263, auctionInsightSearchTopImpressionPercentage_);
    }
    if (publisherPurchasedClicks_ != 0L) {
      output.writeInt64(264, publisherPurchasedClicks_);
    }
    if (publisherOrganicClicks_ != 0L) {
      output.writeInt64(265, publisherOrganicClicks_);
    }
    if (publisherUnknownClicks_ != 0L) {
      output.writeInt64(266, publisherUnknownClicks_);
    }
    if (((bitField3_ & 0x80000000) != 0)) {
      output.writeDouble(267, allConversionsFromLocationAssetClickToCall_);
    }
    if (((bitField4_ & 0x00000001) != 0)) {
      output.writeDouble(268, allConversionsFromLocationAssetDirections_);
    }
    if (((bitField4_ & 0x00000002) != 0)) {
      output.writeDouble(269, allConversionsFromLocationAssetMenu_);
    }
    if (((bitField4_ & 0x00000004) != 0)) {
      output.writeDouble(270, allConversionsFromLocationAssetOrder_);
    }
    if (((bitField4_ & 0x00000008) != 0)) {
      output.writeDouble(271, allConversionsFromLocationAssetOtherEngagement_);
    }
    if (((bitField4_ & 0x00000010) != 0)) {
      output.writeDouble(272, allConversionsFromLocationAssetStoreVisits_);
    }
    if (((bitField4_ & 0x00000020) != 0)) {
      output.writeDouble(273, allConversionsFromLocationAssetWebsite_);
    }
    if (((bitField4_ & 0x00000040) != 0)) {
      output.writeInt64(274, eligibleImpressionsFromLocationAssetStoreReach_);
    }
    if (((bitField4_ & 0x00000080) != 0)) {
      output.writeDouble(275, viewThroughConversionsFromLocationAssetClickToCall_);
    }
    if (((bitField4_ & 0x00000100) != 0)) {
      output.writeDouble(276, viewThroughConversionsFromLocationAssetDirections_);
    }
    if (((bitField4_ & 0x00000200) != 0)) {
      output.writeDouble(277, viewThroughConversionsFromLocationAssetMenu_);
    }
    if (((bitField4_ & 0x00000400) != 0)) {
      output.writeDouble(278, viewThroughConversionsFromLocationAssetOrder_);
    }
    if (((bitField4_ & 0x00000800) != 0)) {
      output.writeDouble(279, viewThroughConversionsFromLocationAssetOtherEngagement_);
    }
    if (((bitField4_ & 0x00001000) != 0)) {
      output.writeDouble(280, viewThroughConversionsFromLocationAssetStoreVisits_);
    }
    if (((bitField4_ & 0x00002000) != 0)) {
      output.writeDouble(281, viewThroughConversionsFromLocationAssetWebsite_);
    }
    if (((bitField3_ & 0x00008000) != 0)) {
      output.writeInt64(290, averageTargetCpaMicros_);
    }
    if (((bitField1_ & 0x00040000) != 0)) {
      output.writeDouble(293, newCustomerLifetimeValue_);
    }
    if (((bitField0_ & 0x00000400) != 0)) {
      output.writeDouble(294, allNewCustomerLifetimeValue_);
    }
    if (((bitField3_ & 0x00002000) != 0)) {
      output.writeMessage(295, getSearchVolume());
    }
    getUnknownFields().writeTo(output);
  }

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

    size = 0;
    if (historicalCreativeQualityScore_ != com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNSPECIFIED.getNumber()) {
      size += com.google.protobuf.CodedOutputStream
        .computeEnumSize(80, historicalCreativeQualityScore_);
    }
    if (historicalLandingPageQualityScore_ != com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNSPECIFIED.getNumber()) {
      size += com.google.protobuf.CodedOutputStream
        .computeEnumSize(81, historicalLandingPageQualityScore_);
    }
    if (historicalSearchPredictedCtr_ != com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNSPECIFIED.getNumber()) {
      size += com.google.protobuf.CodedOutputStream
        .computeEnumSize(83, historicalSearchPredictedCtr_);
    }
    {
      int dataSize = 0;
      for (int i = 0; i < interactionEventTypes_.size(); i++) {
        dataSize += com.google.protobuf.CodedOutputStream
          .computeEnumSizeNoTag(interactionEventTypes_.get(i));
      }
      size += dataSize;
      if (!getInteractionEventTypesList().isEmpty()) {  size += 2;
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32SizeNoTag(dataSize);
      }interactionEventTypesMemoizedSerializedSize = dataSize;
    }
    if (((bitField1_ & 0x00000080) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(131, clicks_);
    }
    if (((bitField3_ & 0x01000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(132, videoQuartileP100Rate_);
    }
    if (((bitField3_ & 0x02000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(133, videoQuartileP25Rate_);
    }
    if (((bitField3_ & 0x04000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(134, videoQuartileP50Rate_);
    }
    if (((bitField3_ & 0x08000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(135, videoQuartileP75Rate_);
    }
    if (((bitField3_ & 0x00000004) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(136, searchAbsoluteTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000008) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(137, searchBudgetLostAbsoluteTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000010) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(138, searchBudgetLostImpressionShare_);
    }
    if (((bitField3_ & 0x00000020) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(139, searchBudgetLostTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000040) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(140, searchClickShare_);
    }
    if (((bitField3_ & 0x00000080) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(141, searchExactMatchImpressionShare_);
    }
    if (((bitField3_ & 0x00000100) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(142, searchImpressionShare_);
    }
    if (((bitField3_ & 0x00000200) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(143, searchRankLostAbsoluteTopImpressionShare_);
    }
    if (((bitField3_ & 0x00000400) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(144, searchRankLostImpressionShare_);
    }
    if (((bitField3_ & 0x00000800) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(145, searchRankLostTopImpressionShare_);
    }
    if (((bitField3_ & 0x00001000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(146, searchTopImpressionShare_);
    }
    if (((bitField3_ & 0x00004000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(147, speedScore_);
    }
    if (((bitField3_ & 0x00020000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(148, topImpressionPercentage_);
    }
    if (((bitField3_ & 0x00040000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(149, validAcceleratedMobilePagesClicksPercentage_);
    }
    if (((bitField3_ & 0x00080000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(150, valuePerAllConversions_);
    }
    if (((bitField3_ & 0x00200000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(151, valuePerConversion_);
    }
    if (((bitField3_ & 0x00800000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(152, valuePerCurrentModelAttributedConversion_);
    }
    if (((bitField3_ & 0x10000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(153, videoViewRate_);
    }
    if (((bitField3_ & 0x20000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(154, videoViews_);
    }
    if (((bitField3_ & 0x40000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(155, viewThroughConversions_);
    }
    if (((bitField1_ & 0x00000100) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(156, combinedClicks_);
    }
    if (((bitField1_ & 0x00000200) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(157, combinedClicksPerQuery_);
    }
    if (((bitField1_ & 0x00000400) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(158, combinedQueries_);
    }
    if (((bitField1_ & 0x00000800) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(159, contentBudgetLostImpressionShare_);
    }
    if (((bitField1_ & 0x00001000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(160, contentImpressionShare_);
    }
    if (((bitField1_ & 0x00002000) != 0)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(161, conversionLastReceivedRequestDateTime_);
    }
    if (((bitField1_ & 0x00004000) != 0)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(162, conversionLastConversionDate_);
    }
    if (((bitField1_ & 0x00008000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(163, contentRankLostImpressionShare_);
    }
    if (((bitField1_ & 0x00010000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(164, conversionsFromInteractionsRate_);
    }
    if (((bitField1_ & 0x00020000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(165, conversionsValue_);
    }
    if (((bitField1_ & 0x00080000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(166, conversionsValuePerCost_);
    }
    if (((bitField1_ & 0x00100000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(167, conversionsFromInteractionsValuePerInteraction_);
    }
    if (((bitField1_ & 0x00200000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(168, conversions_);
    }
    if (((bitField1_ & 0x00400000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(169, costMicros_);
    }
    if (((bitField1_ & 0x00800000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(170, costPerAllConversions_);
    }
    if (((bitField1_ & 0x01000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(171, costPerConversion_);
    }
    if (((bitField1_ & 0x02000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(172, costPerCurrentModelAttributedConversion_);
    }
    if (((bitField1_ & 0x04000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(173, crossDeviceConversions_);
    }
    if (((bitField1_ & 0x08000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(174, ctr_);
    }
    if (((bitField1_ & 0x10000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(175, currentModelAttributedConversions_);
    }
    if (((bitField1_ & 0x20000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(176, currentModelAttributedConversionsFromInteractionsRate_);
    }
    if (((bitField1_ & 0x40000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(177, currentModelAttributedConversionsFromInteractionsValuePerInteraction_);
    }
    if (((bitField1_ & 0x80000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(178, currentModelAttributedConversionsValue_);
    }
    if (((bitField2_ & 0x00000001) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(179, currentModelAttributedConversionsValuePerCost_);
    }
    if (((bitField2_ & 0x00000002) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(180, engagementRate_);
    }
    if (((bitField2_ & 0x00000004) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(181, engagements_);
    }
    if (((bitField0_ & 0x00000001) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(183, absoluteTopImpressionPercentage_);
    }
    if (((bitField0_ & 0x00000002) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(184, activeViewCpm_);
    }
    if (((bitField0_ & 0x00000004) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(185, activeViewCtr_);
    }
    if (((bitField0_ & 0x00000008) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(186, activeViewImpressions_);
    }
    if (((bitField0_ & 0x00000010) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(187, activeViewMeasurability_);
    }
    if (((bitField0_ & 0x00000020) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(188, activeViewMeasurableCostMicros_);
    }
    if (((bitField0_ & 0x00000040) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(189, activeViewMeasurableImpressions_);
    }
    if (((bitField0_ & 0x00000080) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(190, activeViewViewability_);
    }
    if (((bitField0_ & 0x00000100) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(191, allConversionsFromInteractionsRate_);
    }
    if (((bitField0_ & 0x00000200) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(192, allConversionsValue_);
    }
    if (((bitField0_ & 0x00000800) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(193, allConversions_);
    }
    if (((bitField0_ & 0x00001000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(194, allConversionsValuePerCost_);
    }
    if (((bitField0_ & 0x00002000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(195, allConversionsFromClickToCall_);
    }
    if (((bitField0_ & 0x00004000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(196, allConversionsFromDirections_);
    }
    if (((bitField0_ & 0x00008000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(197, allConversionsFromInteractionsValuePerInteraction_);
    }
    if (((bitField0_ & 0x00010000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(198, allConversionsFromMenu_);
    }
    if (((bitField0_ & 0x00020000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(199, allConversionsFromOrder_);
    }
    if (((bitField0_ & 0x00040000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(200, allConversionsFromOtherEngagement_);
    }
    if (((bitField0_ & 0x00080000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(201, allConversionsFromStoreVisit_);
    }
    if (((bitField0_ & 0x00100000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(202, allConversionsFromStoreWebsite_);
    }
    if (((bitField0_ & 0x08000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(203, averageCost_);
    }
    if (((bitField0_ & 0x10000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(204, averageCpc_);
    }
    if (((bitField0_ & 0x20000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(205, averageCpe_);
    }
    if (((bitField0_ & 0x40000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(206, averageCpm_);
    }
    if (((bitField0_ & 0x80000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(207, averageCpv_);
    }
    if (((bitField1_ & 0x00000001) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(208, averagePageViews_);
    }
    if (((bitField1_ & 0x00000002) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(209, averageTimeOnSite_);
    }
    if (((bitField1_ & 0x00000004) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(210, benchmarkAverageMaxCpc_);
    }
    if (((bitField1_ & 0x00000020) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(211, benchmarkCtr_);
    }
    if (((bitField1_ & 0x00000040) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(212, bounceRate_);
    }
    if (((bitField2_ & 0x00000008) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(213, hotelAverageLeadValueMicros_);
    }
    if (((bitField2_ & 0x00000040) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(214, hotelPriceDifferencePercentage_);
    }
    if (((bitField2_ & 0x00000080) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(215, hotelEligibleImpressions_);
    }
    if (((bitField2_ & 0x00000100) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(216, historicalQualityScore_);
    }
    if (((bitField2_ & 0x00000200) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(217, gmailForwards_);
    }
    if (((bitField2_ & 0x00000400) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(218, gmailSaves_);
    }
    if (((bitField2_ & 0x00000800) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(219, gmailSecondaryClicks_);
    }
    if (((bitField2_ & 0x00001000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(220, impressionsFromStoreReach_);
    }
    if (((bitField2_ & 0x00002000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(221, impressions_);
    }
    if (((bitField2_ & 0x00004000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(222, interactionRate_);
    }
    if (((bitField2_ & 0x00008000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(223, interactions_);
    }
    if (((bitField2_ & 0x00010000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(224, invalidClickRate_);
    }
    if (((bitField2_ & 0x00020000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(225, invalidClicks_);
    }
    if (((bitField2_ & 0x00040000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(226, messageChats_);
    }
    if (((bitField2_ & 0x00080000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(227, messageImpressions_);
    }
    if (((bitField2_ & 0x00100000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(228, messageChatRate_);
    }
    if (((bitField2_ & 0x00200000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(229, mobileFriendlyClicksPercentage_);
    }
    if (((bitField2_ & 0x01000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(230, organicClicks_);
    }
    if (((bitField2_ & 0x02000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(231, organicClicksPerQuery_);
    }
    if (((bitField2_ & 0x04000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(232, organicImpressions_);
    }
    if (((bitField2_ & 0x08000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(233, organicImpressionsPerQuery_);
    }
    if (((bitField2_ & 0x10000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(234, organicQueries_);
    }
    if (((bitField2_ & 0x20000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(235, percentNewVisitors_);
    }
    if (((bitField2_ & 0x40000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(236, phoneCalls_);
    }
    if (((bitField2_ & 0x80000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(237, phoneImpressions_);
    }
    if (((bitField3_ & 0x00000001) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(238, phoneThroughRate_);
    }
    if (((bitField3_ & 0x00000002) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(239, relativeCtr_);
    }
    if (java.lang.Double.doubleToRawLongBits(allConversionsValueByConversionDate_) != 0) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(240, allConversionsValueByConversionDate_);
    }
    if (java.lang.Double.doubleToRawLongBits(allConversionsByConversionDate_) != 0) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(241, allConversionsByConversionDate_);
    }
    if (java.lang.Double.doubleToRawLongBits(conversionsValueByConversionDate_) != 0) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(242, conversionsValueByConversionDate_);
    }
    if (java.lang.Double.doubleToRawLongBits(conversionsByConversionDate_) != 0) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(243, conversionsByConversionDate_);
    }
    if (((bitField3_ & 0x00100000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(244, valuePerAllConversionsByConversionDate_);
    }
    if (((bitField3_ & 0x00400000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(245, valuePerConversionsByConversionDate_);
    }
    if (skAdNetworkConversions_ != 0L) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(246, skAdNetworkConversions_);
    }
    if (((bitField2_ & 0x00400000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(247, optimizationScoreUplift_);
    }
    if (((bitField2_ & 0x00800000) != 0)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(248, optimizationScoreUrl_);
    }
    if (((bitField3_ & 0x00010000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(250, averageTargetRoas_);
    }
    if (((bitField1_ & 0x00000008) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(254, biddableAppInstallConversions_);
    }
    if (((bitField1_ & 0x00000010) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(255, biddableAppPostInstallConversions_);
    }
    if (((bitField2_ & 0x00000010) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(256, hotelCommissionRateMicros_);
    }
    if (((bitField2_ & 0x00000020) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(257, hotelExpectedCommissionCost_);
    }
    if (((bitField0_ & 0x00200000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(258, auctionInsightSearchAbsoluteTopImpressionPercentage_);
    }
    if (((bitField0_ & 0x00400000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(259, auctionInsightSearchImpressionShare_);
    }
    if (((bitField0_ & 0x00800000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(260, auctionInsightSearchOutrankingShare_);
    }
    if (((bitField0_ & 0x01000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(261, auctionInsightSearchOverlapRate_);
    }
    if (((bitField0_ & 0x02000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(262, auctionInsightSearchPositionAboveRate_);
    }
    if (((bitField0_ & 0x04000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(263, auctionInsightSearchTopImpressionPercentage_);
    }
    if (publisherPurchasedClicks_ != 0L) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(264, publisherPurchasedClicks_);
    }
    if (publisherOrganicClicks_ != 0L) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(265, publisherOrganicClicks_);
    }
    if (publisherUnknownClicks_ != 0L) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(266, publisherUnknownClicks_);
    }
    if (((bitField3_ & 0x80000000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(267, allConversionsFromLocationAssetClickToCall_);
    }
    if (((bitField4_ & 0x00000001) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(268, allConversionsFromLocationAssetDirections_);
    }
    if (((bitField4_ & 0x00000002) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(269, allConversionsFromLocationAssetMenu_);
    }
    if (((bitField4_ & 0x00000004) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(270, allConversionsFromLocationAssetOrder_);
    }
    if (((bitField4_ & 0x00000008) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(271, allConversionsFromLocationAssetOtherEngagement_);
    }
    if (((bitField4_ & 0x00000010) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(272, allConversionsFromLocationAssetStoreVisits_);
    }
    if (((bitField4_ & 0x00000020) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(273, allConversionsFromLocationAssetWebsite_);
    }
    if (((bitField4_ & 0x00000040) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(274, eligibleImpressionsFromLocationAssetStoreReach_);
    }
    if (((bitField4_ & 0x00000080) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(275, viewThroughConversionsFromLocationAssetClickToCall_);
    }
    if (((bitField4_ & 0x00000100) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(276, viewThroughConversionsFromLocationAssetDirections_);
    }
    if (((bitField4_ & 0x00000200) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(277, viewThroughConversionsFromLocationAssetMenu_);
    }
    if (((bitField4_ & 0x00000400) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(278, viewThroughConversionsFromLocationAssetOrder_);
    }
    if (((bitField4_ & 0x00000800) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(279, viewThroughConversionsFromLocationAssetOtherEngagement_);
    }
    if (((bitField4_ & 0x00001000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(280, viewThroughConversionsFromLocationAssetStoreVisits_);
    }
    if (((bitField4_ & 0x00002000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(281, viewThroughConversionsFromLocationAssetWebsite_);
    }
    if (((bitField3_ & 0x00008000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(290, averageTargetCpaMicros_);
    }
    if (((bitField1_ & 0x00040000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(293, newCustomerLifetimeValue_);
    }
    if (((bitField0_ & 0x00000400) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeDoubleSize(294, allNewCustomerLifetimeValue_);
    }
    if (((bitField3_ & 0x00002000) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(295, getSearchVolume());
    }
    size += getUnknownFields().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.ads.googleads.v14.common.Metrics)) {
      return super.equals(obj);
    }
    com.google.ads.googleads.v14.common.Metrics other = (com.google.ads.googleads.v14.common.Metrics) obj;

    if (hasAbsoluteTopImpressionPercentage() != other.hasAbsoluteTopImpressionPercentage()) return false;
    if (hasAbsoluteTopImpressionPercentage()) {
      if (java.lang.Double.doubleToLongBits(getAbsoluteTopImpressionPercentage())
          != java.lang.Double.doubleToLongBits(
              other.getAbsoluteTopImpressionPercentage())) return false;
    }
    if (hasActiveViewCpm() != other.hasActiveViewCpm()) return false;
    if (hasActiveViewCpm()) {
      if (java.lang.Double.doubleToLongBits(getActiveViewCpm())
          != java.lang.Double.doubleToLongBits(
              other.getActiveViewCpm())) return false;
    }
    if (hasActiveViewCtr() != other.hasActiveViewCtr()) return false;
    if (hasActiveViewCtr()) {
      if (java.lang.Double.doubleToLongBits(getActiveViewCtr())
          != java.lang.Double.doubleToLongBits(
              other.getActiveViewCtr())) return false;
    }
    if (hasActiveViewImpressions() != other.hasActiveViewImpressions()) return false;
    if (hasActiveViewImpressions()) {
      if (getActiveViewImpressions()
          != other.getActiveViewImpressions()) return false;
    }
    if (hasActiveViewMeasurability() != other.hasActiveViewMeasurability()) return false;
    if (hasActiveViewMeasurability()) {
      if (java.lang.Double.doubleToLongBits(getActiveViewMeasurability())
          != java.lang.Double.doubleToLongBits(
              other.getActiveViewMeasurability())) return false;
    }
    if (hasActiveViewMeasurableCostMicros() != other.hasActiveViewMeasurableCostMicros()) return false;
    if (hasActiveViewMeasurableCostMicros()) {
      if (getActiveViewMeasurableCostMicros()
          != other.getActiveViewMeasurableCostMicros()) return false;
    }
    if (hasActiveViewMeasurableImpressions() != other.hasActiveViewMeasurableImpressions()) return false;
    if (hasActiveViewMeasurableImpressions()) {
      if (getActiveViewMeasurableImpressions()
          != other.getActiveViewMeasurableImpressions()) return false;
    }
    if (hasActiveViewViewability() != other.hasActiveViewViewability()) return false;
    if (hasActiveViewViewability()) {
      if (java.lang.Double.doubleToLongBits(getActiveViewViewability())
          != java.lang.Double.doubleToLongBits(
              other.getActiveViewViewability())) return false;
    }
    if (hasAllConversionsFromInteractionsRate() != other.hasAllConversionsFromInteractionsRate()) return false;
    if (hasAllConversionsFromInteractionsRate()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromInteractionsRate())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromInteractionsRate())) return false;
    }
    if (hasAllConversionsValue() != other.hasAllConversionsValue()) return false;
    if (hasAllConversionsValue()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsValue())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsValue())) return false;
    }
    if (java.lang.Double.doubleToLongBits(getAllConversionsValueByConversionDate())
        != java.lang.Double.doubleToLongBits(
            other.getAllConversionsValueByConversionDate())) return false;
    if (hasAllNewCustomerLifetimeValue() != other.hasAllNewCustomerLifetimeValue()) return false;
    if (hasAllNewCustomerLifetimeValue()) {
      if (java.lang.Double.doubleToLongBits(getAllNewCustomerLifetimeValue())
          != java.lang.Double.doubleToLongBits(
              other.getAllNewCustomerLifetimeValue())) return false;
    }
    if (hasAllConversions() != other.hasAllConversions()) return false;
    if (hasAllConversions()) {
      if (java.lang.Double.doubleToLongBits(getAllConversions())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversions())) return false;
    }
    if (java.lang.Double.doubleToLongBits(getAllConversionsByConversionDate())
        != java.lang.Double.doubleToLongBits(
            other.getAllConversionsByConversionDate())) return false;
    if (hasAllConversionsValuePerCost() != other.hasAllConversionsValuePerCost()) return false;
    if (hasAllConversionsValuePerCost()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsValuePerCost())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsValuePerCost())) return false;
    }
    if (hasAllConversionsFromClickToCall() != other.hasAllConversionsFromClickToCall()) return false;
    if (hasAllConversionsFromClickToCall()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromClickToCall())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromClickToCall())) return false;
    }
    if (hasAllConversionsFromDirections() != other.hasAllConversionsFromDirections()) return false;
    if (hasAllConversionsFromDirections()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromDirections())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromDirections())) return false;
    }
    if (hasAllConversionsFromInteractionsValuePerInteraction() != other.hasAllConversionsFromInteractionsValuePerInteraction()) return false;
    if (hasAllConversionsFromInteractionsValuePerInteraction()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromInteractionsValuePerInteraction())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromInteractionsValuePerInteraction())) return false;
    }
    if (hasAllConversionsFromMenu() != other.hasAllConversionsFromMenu()) return false;
    if (hasAllConversionsFromMenu()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromMenu())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromMenu())) return false;
    }
    if (hasAllConversionsFromOrder() != other.hasAllConversionsFromOrder()) return false;
    if (hasAllConversionsFromOrder()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromOrder())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromOrder())) return false;
    }
    if (hasAllConversionsFromOtherEngagement() != other.hasAllConversionsFromOtherEngagement()) return false;
    if (hasAllConversionsFromOtherEngagement()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromOtherEngagement())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromOtherEngagement())) return false;
    }
    if (hasAllConversionsFromStoreVisit() != other.hasAllConversionsFromStoreVisit()) return false;
    if (hasAllConversionsFromStoreVisit()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromStoreVisit())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromStoreVisit())) return false;
    }
    if (hasAllConversionsFromStoreWebsite() != other.hasAllConversionsFromStoreWebsite()) return false;
    if (hasAllConversionsFromStoreWebsite()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromStoreWebsite())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromStoreWebsite())) return false;
    }
    if (hasAuctionInsightSearchAbsoluteTopImpressionPercentage() != other.hasAuctionInsightSearchAbsoluteTopImpressionPercentage()) return false;
    if (hasAuctionInsightSearchAbsoluteTopImpressionPercentage()) {
      if (java.lang.Double.doubleToLongBits(getAuctionInsightSearchAbsoluteTopImpressionPercentage())
          != java.lang.Double.doubleToLongBits(
              other.getAuctionInsightSearchAbsoluteTopImpressionPercentage())) return false;
    }
    if (hasAuctionInsightSearchImpressionShare() != other.hasAuctionInsightSearchImpressionShare()) return false;
    if (hasAuctionInsightSearchImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getAuctionInsightSearchImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getAuctionInsightSearchImpressionShare())) return false;
    }
    if (hasAuctionInsightSearchOutrankingShare() != other.hasAuctionInsightSearchOutrankingShare()) return false;
    if (hasAuctionInsightSearchOutrankingShare()) {
      if (java.lang.Double.doubleToLongBits(getAuctionInsightSearchOutrankingShare())
          != java.lang.Double.doubleToLongBits(
              other.getAuctionInsightSearchOutrankingShare())) return false;
    }
    if (hasAuctionInsightSearchOverlapRate() != other.hasAuctionInsightSearchOverlapRate()) return false;
    if (hasAuctionInsightSearchOverlapRate()) {
      if (java.lang.Double.doubleToLongBits(getAuctionInsightSearchOverlapRate())
          != java.lang.Double.doubleToLongBits(
              other.getAuctionInsightSearchOverlapRate())) return false;
    }
    if (hasAuctionInsightSearchPositionAboveRate() != other.hasAuctionInsightSearchPositionAboveRate()) return false;
    if (hasAuctionInsightSearchPositionAboveRate()) {
      if (java.lang.Double.doubleToLongBits(getAuctionInsightSearchPositionAboveRate())
          != java.lang.Double.doubleToLongBits(
              other.getAuctionInsightSearchPositionAboveRate())) return false;
    }
    if (hasAuctionInsightSearchTopImpressionPercentage() != other.hasAuctionInsightSearchTopImpressionPercentage()) return false;
    if (hasAuctionInsightSearchTopImpressionPercentage()) {
      if (java.lang.Double.doubleToLongBits(getAuctionInsightSearchTopImpressionPercentage())
          != java.lang.Double.doubleToLongBits(
              other.getAuctionInsightSearchTopImpressionPercentage())) return false;
    }
    if (hasAverageCost() != other.hasAverageCost()) return false;
    if (hasAverageCost()) {
      if (java.lang.Double.doubleToLongBits(getAverageCost())
          != java.lang.Double.doubleToLongBits(
              other.getAverageCost())) return false;
    }
    if (hasAverageCpc() != other.hasAverageCpc()) return false;
    if (hasAverageCpc()) {
      if (java.lang.Double.doubleToLongBits(getAverageCpc())
          != java.lang.Double.doubleToLongBits(
              other.getAverageCpc())) return false;
    }
    if (hasAverageCpe() != other.hasAverageCpe()) return false;
    if (hasAverageCpe()) {
      if (java.lang.Double.doubleToLongBits(getAverageCpe())
          != java.lang.Double.doubleToLongBits(
              other.getAverageCpe())) return false;
    }
    if (hasAverageCpm() != other.hasAverageCpm()) return false;
    if (hasAverageCpm()) {
      if (java.lang.Double.doubleToLongBits(getAverageCpm())
          != java.lang.Double.doubleToLongBits(
              other.getAverageCpm())) return false;
    }
    if (hasAverageCpv() != other.hasAverageCpv()) return false;
    if (hasAverageCpv()) {
      if (java.lang.Double.doubleToLongBits(getAverageCpv())
          != java.lang.Double.doubleToLongBits(
              other.getAverageCpv())) return false;
    }
    if (hasAveragePageViews() != other.hasAveragePageViews()) return false;
    if (hasAveragePageViews()) {
      if (java.lang.Double.doubleToLongBits(getAveragePageViews())
          != java.lang.Double.doubleToLongBits(
              other.getAveragePageViews())) return false;
    }
    if (hasAverageTimeOnSite() != other.hasAverageTimeOnSite()) return false;
    if (hasAverageTimeOnSite()) {
      if (java.lang.Double.doubleToLongBits(getAverageTimeOnSite())
          != java.lang.Double.doubleToLongBits(
              other.getAverageTimeOnSite())) return false;
    }
    if (hasBenchmarkAverageMaxCpc() != other.hasBenchmarkAverageMaxCpc()) return false;
    if (hasBenchmarkAverageMaxCpc()) {
      if (java.lang.Double.doubleToLongBits(getBenchmarkAverageMaxCpc())
          != java.lang.Double.doubleToLongBits(
              other.getBenchmarkAverageMaxCpc())) return false;
    }
    if (hasBiddableAppInstallConversions() != other.hasBiddableAppInstallConversions()) return false;
    if (hasBiddableAppInstallConversions()) {
      if (java.lang.Double.doubleToLongBits(getBiddableAppInstallConversions())
          != java.lang.Double.doubleToLongBits(
              other.getBiddableAppInstallConversions())) return false;
    }
    if (hasBiddableAppPostInstallConversions() != other.hasBiddableAppPostInstallConversions()) return false;
    if (hasBiddableAppPostInstallConversions()) {
      if (java.lang.Double.doubleToLongBits(getBiddableAppPostInstallConversions())
          != java.lang.Double.doubleToLongBits(
              other.getBiddableAppPostInstallConversions())) return false;
    }
    if (hasBenchmarkCtr() != other.hasBenchmarkCtr()) return false;
    if (hasBenchmarkCtr()) {
      if (java.lang.Double.doubleToLongBits(getBenchmarkCtr())
          != java.lang.Double.doubleToLongBits(
              other.getBenchmarkCtr())) return false;
    }
    if (hasBounceRate() != other.hasBounceRate()) return false;
    if (hasBounceRate()) {
      if (java.lang.Double.doubleToLongBits(getBounceRate())
          != java.lang.Double.doubleToLongBits(
              other.getBounceRate())) return false;
    }
    if (hasClicks() != other.hasClicks()) return false;
    if (hasClicks()) {
      if (getClicks()
          != other.getClicks()) return false;
    }
    if (hasCombinedClicks() != other.hasCombinedClicks()) return false;
    if (hasCombinedClicks()) {
      if (getCombinedClicks()
          != other.getCombinedClicks()) return false;
    }
    if (hasCombinedClicksPerQuery() != other.hasCombinedClicksPerQuery()) return false;
    if (hasCombinedClicksPerQuery()) {
      if (java.lang.Double.doubleToLongBits(getCombinedClicksPerQuery())
          != java.lang.Double.doubleToLongBits(
              other.getCombinedClicksPerQuery())) return false;
    }
    if (hasCombinedQueries() != other.hasCombinedQueries()) return false;
    if (hasCombinedQueries()) {
      if (getCombinedQueries()
          != other.getCombinedQueries()) return false;
    }
    if (hasContentBudgetLostImpressionShare() != other.hasContentBudgetLostImpressionShare()) return false;
    if (hasContentBudgetLostImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getContentBudgetLostImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getContentBudgetLostImpressionShare())) return false;
    }
    if (hasContentImpressionShare() != other.hasContentImpressionShare()) return false;
    if (hasContentImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getContentImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getContentImpressionShare())) return false;
    }
    if (hasConversionLastReceivedRequestDateTime() != other.hasConversionLastReceivedRequestDateTime()) return false;
    if (hasConversionLastReceivedRequestDateTime()) {
      if (!getConversionLastReceivedRequestDateTime()
          .equals(other.getConversionLastReceivedRequestDateTime())) return false;
    }
    if (hasConversionLastConversionDate() != other.hasConversionLastConversionDate()) return false;
    if (hasConversionLastConversionDate()) {
      if (!getConversionLastConversionDate()
          .equals(other.getConversionLastConversionDate())) return false;
    }
    if (hasContentRankLostImpressionShare() != other.hasContentRankLostImpressionShare()) return false;
    if (hasContentRankLostImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getContentRankLostImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getContentRankLostImpressionShare())) return false;
    }
    if (hasConversionsFromInteractionsRate() != other.hasConversionsFromInteractionsRate()) return false;
    if (hasConversionsFromInteractionsRate()) {
      if (java.lang.Double.doubleToLongBits(getConversionsFromInteractionsRate())
          != java.lang.Double.doubleToLongBits(
              other.getConversionsFromInteractionsRate())) return false;
    }
    if (hasConversionsValue() != other.hasConversionsValue()) return false;
    if (hasConversionsValue()) {
      if (java.lang.Double.doubleToLongBits(getConversionsValue())
          != java.lang.Double.doubleToLongBits(
              other.getConversionsValue())) return false;
    }
    if (java.lang.Double.doubleToLongBits(getConversionsValueByConversionDate())
        != java.lang.Double.doubleToLongBits(
            other.getConversionsValueByConversionDate())) return false;
    if (hasNewCustomerLifetimeValue() != other.hasNewCustomerLifetimeValue()) return false;
    if (hasNewCustomerLifetimeValue()) {
      if (java.lang.Double.doubleToLongBits(getNewCustomerLifetimeValue())
          != java.lang.Double.doubleToLongBits(
              other.getNewCustomerLifetimeValue())) return false;
    }
    if (hasConversionsValuePerCost() != other.hasConversionsValuePerCost()) return false;
    if (hasConversionsValuePerCost()) {
      if (java.lang.Double.doubleToLongBits(getConversionsValuePerCost())
          != java.lang.Double.doubleToLongBits(
              other.getConversionsValuePerCost())) return false;
    }
    if (hasConversionsFromInteractionsValuePerInteraction() != other.hasConversionsFromInteractionsValuePerInteraction()) return false;
    if (hasConversionsFromInteractionsValuePerInteraction()) {
      if (java.lang.Double.doubleToLongBits(getConversionsFromInteractionsValuePerInteraction())
          != java.lang.Double.doubleToLongBits(
              other.getConversionsFromInteractionsValuePerInteraction())) return false;
    }
    if (hasConversions() != other.hasConversions()) return false;
    if (hasConversions()) {
      if (java.lang.Double.doubleToLongBits(getConversions())
          != java.lang.Double.doubleToLongBits(
              other.getConversions())) return false;
    }
    if (java.lang.Double.doubleToLongBits(getConversionsByConversionDate())
        != java.lang.Double.doubleToLongBits(
            other.getConversionsByConversionDate())) return false;
    if (hasCostMicros() != other.hasCostMicros()) return false;
    if (hasCostMicros()) {
      if (getCostMicros()
          != other.getCostMicros()) return false;
    }
    if (hasCostPerAllConversions() != other.hasCostPerAllConversions()) return false;
    if (hasCostPerAllConversions()) {
      if (java.lang.Double.doubleToLongBits(getCostPerAllConversions())
          != java.lang.Double.doubleToLongBits(
              other.getCostPerAllConversions())) return false;
    }
    if (hasCostPerConversion() != other.hasCostPerConversion()) return false;
    if (hasCostPerConversion()) {
      if (java.lang.Double.doubleToLongBits(getCostPerConversion())
          != java.lang.Double.doubleToLongBits(
              other.getCostPerConversion())) return false;
    }
    if (hasCostPerCurrentModelAttributedConversion() != other.hasCostPerCurrentModelAttributedConversion()) return false;
    if (hasCostPerCurrentModelAttributedConversion()) {
      if (java.lang.Double.doubleToLongBits(getCostPerCurrentModelAttributedConversion())
          != java.lang.Double.doubleToLongBits(
              other.getCostPerCurrentModelAttributedConversion())) return false;
    }
    if (hasCrossDeviceConversions() != other.hasCrossDeviceConversions()) return false;
    if (hasCrossDeviceConversions()) {
      if (java.lang.Double.doubleToLongBits(getCrossDeviceConversions())
          != java.lang.Double.doubleToLongBits(
              other.getCrossDeviceConversions())) return false;
    }
    if (hasCtr() != other.hasCtr()) return false;
    if (hasCtr()) {
      if (java.lang.Double.doubleToLongBits(getCtr())
          != java.lang.Double.doubleToLongBits(
              other.getCtr())) return false;
    }
    if (hasCurrentModelAttributedConversions() != other.hasCurrentModelAttributedConversions()) return false;
    if (hasCurrentModelAttributedConversions()) {
      if (java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversions())
          != java.lang.Double.doubleToLongBits(
              other.getCurrentModelAttributedConversions())) return false;
    }
    if (hasCurrentModelAttributedConversionsFromInteractionsRate() != other.hasCurrentModelAttributedConversionsFromInteractionsRate()) return false;
    if (hasCurrentModelAttributedConversionsFromInteractionsRate()) {
      if (java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsFromInteractionsRate())
          != java.lang.Double.doubleToLongBits(
              other.getCurrentModelAttributedConversionsFromInteractionsRate())) return false;
    }
    if (hasCurrentModelAttributedConversionsFromInteractionsValuePerInteraction() != other.hasCurrentModelAttributedConversionsFromInteractionsValuePerInteraction()) return false;
    if (hasCurrentModelAttributedConversionsFromInteractionsValuePerInteraction()) {
      if (java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsFromInteractionsValuePerInteraction())
          != java.lang.Double.doubleToLongBits(
              other.getCurrentModelAttributedConversionsFromInteractionsValuePerInteraction())) return false;
    }
    if (hasCurrentModelAttributedConversionsValue() != other.hasCurrentModelAttributedConversionsValue()) return false;
    if (hasCurrentModelAttributedConversionsValue()) {
      if (java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsValue())
          != java.lang.Double.doubleToLongBits(
              other.getCurrentModelAttributedConversionsValue())) return false;
    }
    if (hasCurrentModelAttributedConversionsValuePerCost() != other.hasCurrentModelAttributedConversionsValuePerCost()) return false;
    if (hasCurrentModelAttributedConversionsValuePerCost()) {
      if (java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsValuePerCost())
          != java.lang.Double.doubleToLongBits(
              other.getCurrentModelAttributedConversionsValuePerCost())) return false;
    }
    if (hasEngagementRate() != other.hasEngagementRate()) return false;
    if (hasEngagementRate()) {
      if (java.lang.Double.doubleToLongBits(getEngagementRate())
          != java.lang.Double.doubleToLongBits(
              other.getEngagementRate())) return false;
    }
    if (hasEngagements() != other.hasEngagements()) return false;
    if (hasEngagements()) {
      if (getEngagements()
          != other.getEngagements()) return false;
    }
    if (hasHotelAverageLeadValueMicros() != other.hasHotelAverageLeadValueMicros()) return false;
    if (hasHotelAverageLeadValueMicros()) {
      if (java.lang.Double.doubleToLongBits(getHotelAverageLeadValueMicros())
          != java.lang.Double.doubleToLongBits(
              other.getHotelAverageLeadValueMicros())) return false;
    }
    if (hasHotelCommissionRateMicros() != other.hasHotelCommissionRateMicros()) return false;
    if (hasHotelCommissionRateMicros()) {
      if (getHotelCommissionRateMicros()
          != other.getHotelCommissionRateMicros()) return false;
    }
    if (hasHotelExpectedCommissionCost() != other.hasHotelExpectedCommissionCost()) return false;
    if (hasHotelExpectedCommissionCost()) {
      if (java.lang.Double.doubleToLongBits(getHotelExpectedCommissionCost())
          != java.lang.Double.doubleToLongBits(
              other.getHotelExpectedCommissionCost())) return false;
    }
    if (hasHotelPriceDifferencePercentage() != other.hasHotelPriceDifferencePercentage()) return false;
    if (hasHotelPriceDifferencePercentage()) {
      if (java.lang.Double.doubleToLongBits(getHotelPriceDifferencePercentage())
          != java.lang.Double.doubleToLongBits(
              other.getHotelPriceDifferencePercentage())) return false;
    }
    if (hasHotelEligibleImpressions() != other.hasHotelEligibleImpressions()) return false;
    if (hasHotelEligibleImpressions()) {
      if (getHotelEligibleImpressions()
          != other.getHotelEligibleImpressions()) return false;
    }
    if (historicalCreativeQualityScore_ != other.historicalCreativeQualityScore_) return false;
    if (historicalLandingPageQualityScore_ != other.historicalLandingPageQualityScore_) return false;
    if (hasHistoricalQualityScore() != other.hasHistoricalQualityScore()) return false;
    if (hasHistoricalQualityScore()) {
      if (getHistoricalQualityScore()
          != other.getHistoricalQualityScore()) return false;
    }
    if (historicalSearchPredictedCtr_ != other.historicalSearchPredictedCtr_) return false;
    if (hasGmailForwards() != other.hasGmailForwards()) return false;
    if (hasGmailForwards()) {
      if (getGmailForwards()
          != other.getGmailForwards()) return false;
    }
    if (hasGmailSaves() != other.hasGmailSaves()) return false;
    if (hasGmailSaves()) {
      if (getGmailSaves()
          != other.getGmailSaves()) return false;
    }
    if (hasGmailSecondaryClicks() != other.hasGmailSecondaryClicks()) return false;
    if (hasGmailSecondaryClicks()) {
      if (getGmailSecondaryClicks()
          != other.getGmailSecondaryClicks()) return false;
    }
    if (hasImpressionsFromStoreReach() != other.hasImpressionsFromStoreReach()) return false;
    if (hasImpressionsFromStoreReach()) {
      if (getImpressionsFromStoreReach()
          != other.getImpressionsFromStoreReach()) return false;
    }
    if (hasImpressions() != other.hasImpressions()) return false;
    if (hasImpressions()) {
      if (getImpressions()
          != other.getImpressions()) return false;
    }
    if (hasInteractionRate() != other.hasInteractionRate()) return false;
    if (hasInteractionRate()) {
      if (java.lang.Double.doubleToLongBits(getInteractionRate())
          != java.lang.Double.doubleToLongBits(
              other.getInteractionRate())) return false;
    }
    if (hasInteractions() != other.hasInteractions()) return false;
    if (hasInteractions()) {
      if (getInteractions()
          != other.getInteractions()) return false;
    }
    if (!interactionEventTypes_.equals(other.interactionEventTypes_)) return false;
    if (hasInvalidClickRate() != other.hasInvalidClickRate()) return false;
    if (hasInvalidClickRate()) {
      if (java.lang.Double.doubleToLongBits(getInvalidClickRate())
          != java.lang.Double.doubleToLongBits(
              other.getInvalidClickRate())) return false;
    }
    if (hasInvalidClicks() != other.hasInvalidClicks()) return false;
    if (hasInvalidClicks()) {
      if (getInvalidClicks()
          != other.getInvalidClicks()) return false;
    }
    if (hasMessageChats() != other.hasMessageChats()) return false;
    if (hasMessageChats()) {
      if (getMessageChats()
          != other.getMessageChats()) return false;
    }
    if (hasMessageImpressions() != other.hasMessageImpressions()) return false;
    if (hasMessageImpressions()) {
      if (getMessageImpressions()
          != other.getMessageImpressions()) return false;
    }
    if (hasMessageChatRate() != other.hasMessageChatRate()) return false;
    if (hasMessageChatRate()) {
      if (java.lang.Double.doubleToLongBits(getMessageChatRate())
          != java.lang.Double.doubleToLongBits(
              other.getMessageChatRate())) return false;
    }
    if (hasMobileFriendlyClicksPercentage() != other.hasMobileFriendlyClicksPercentage()) return false;
    if (hasMobileFriendlyClicksPercentage()) {
      if (java.lang.Double.doubleToLongBits(getMobileFriendlyClicksPercentage())
          != java.lang.Double.doubleToLongBits(
              other.getMobileFriendlyClicksPercentage())) return false;
    }
    if (hasOptimizationScoreUplift() != other.hasOptimizationScoreUplift()) return false;
    if (hasOptimizationScoreUplift()) {
      if (java.lang.Double.doubleToLongBits(getOptimizationScoreUplift())
          != java.lang.Double.doubleToLongBits(
              other.getOptimizationScoreUplift())) return false;
    }
    if (hasOptimizationScoreUrl() != other.hasOptimizationScoreUrl()) return false;
    if (hasOptimizationScoreUrl()) {
      if (!getOptimizationScoreUrl()
          .equals(other.getOptimizationScoreUrl())) return false;
    }
    if (hasOrganicClicks() != other.hasOrganicClicks()) return false;
    if (hasOrganicClicks()) {
      if (getOrganicClicks()
          != other.getOrganicClicks()) return false;
    }
    if (hasOrganicClicksPerQuery() != other.hasOrganicClicksPerQuery()) return false;
    if (hasOrganicClicksPerQuery()) {
      if (java.lang.Double.doubleToLongBits(getOrganicClicksPerQuery())
          != java.lang.Double.doubleToLongBits(
              other.getOrganicClicksPerQuery())) return false;
    }
    if (hasOrganicImpressions() != other.hasOrganicImpressions()) return false;
    if (hasOrganicImpressions()) {
      if (getOrganicImpressions()
          != other.getOrganicImpressions()) return false;
    }
    if (hasOrganicImpressionsPerQuery() != other.hasOrganicImpressionsPerQuery()) return false;
    if (hasOrganicImpressionsPerQuery()) {
      if (java.lang.Double.doubleToLongBits(getOrganicImpressionsPerQuery())
          != java.lang.Double.doubleToLongBits(
              other.getOrganicImpressionsPerQuery())) return false;
    }
    if (hasOrganicQueries() != other.hasOrganicQueries()) return false;
    if (hasOrganicQueries()) {
      if (getOrganicQueries()
          != other.getOrganicQueries()) return false;
    }
    if (hasPercentNewVisitors() != other.hasPercentNewVisitors()) return false;
    if (hasPercentNewVisitors()) {
      if (java.lang.Double.doubleToLongBits(getPercentNewVisitors())
          != java.lang.Double.doubleToLongBits(
              other.getPercentNewVisitors())) return false;
    }
    if (hasPhoneCalls() != other.hasPhoneCalls()) return false;
    if (hasPhoneCalls()) {
      if (getPhoneCalls()
          != other.getPhoneCalls()) return false;
    }
    if (hasPhoneImpressions() != other.hasPhoneImpressions()) return false;
    if (hasPhoneImpressions()) {
      if (getPhoneImpressions()
          != other.getPhoneImpressions()) return false;
    }
    if (hasPhoneThroughRate() != other.hasPhoneThroughRate()) return false;
    if (hasPhoneThroughRate()) {
      if (java.lang.Double.doubleToLongBits(getPhoneThroughRate())
          != java.lang.Double.doubleToLongBits(
              other.getPhoneThroughRate())) return false;
    }
    if (hasRelativeCtr() != other.hasRelativeCtr()) return false;
    if (hasRelativeCtr()) {
      if (java.lang.Double.doubleToLongBits(getRelativeCtr())
          != java.lang.Double.doubleToLongBits(
              other.getRelativeCtr())) return false;
    }
    if (hasSearchAbsoluteTopImpressionShare() != other.hasSearchAbsoluteTopImpressionShare()) return false;
    if (hasSearchAbsoluteTopImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchAbsoluteTopImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchAbsoluteTopImpressionShare())) return false;
    }
    if (hasSearchBudgetLostAbsoluteTopImpressionShare() != other.hasSearchBudgetLostAbsoluteTopImpressionShare()) return false;
    if (hasSearchBudgetLostAbsoluteTopImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchBudgetLostAbsoluteTopImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchBudgetLostAbsoluteTopImpressionShare())) return false;
    }
    if (hasSearchBudgetLostImpressionShare() != other.hasSearchBudgetLostImpressionShare()) return false;
    if (hasSearchBudgetLostImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchBudgetLostImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchBudgetLostImpressionShare())) return false;
    }
    if (hasSearchBudgetLostTopImpressionShare() != other.hasSearchBudgetLostTopImpressionShare()) return false;
    if (hasSearchBudgetLostTopImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchBudgetLostTopImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchBudgetLostTopImpressionShare())) return false;
    }
    if (hasSearchClickShare() != other.hasSearchClickShare()) return false;
    if (hasSearchClickShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchClickShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchClickShare())) return false;
    }
    if (hasSearchExactMatchImpressionShare() != other.hasSearchExactMatchImpressionShare()) return false;
    if (hasSearchExactMatchImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchExactMatchImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchExactMatchImpressionShare())) return false;
    }
    if (hasSearchImpressionShare() != other.hasSearchImpressionShare()) return false;
    if (hasSearchImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchImpressionShare())) return false;
    }
    if (hasSearchRankLostAbsoluteTopImpressionShare() != other.hasSearchRankLostAbsoluteTopImpressionShare()) return false;
    if (hasSearchRankLostAbsoluteTopImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchRankLostAbsoluteTopImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchRankLostAbsoluteTopImpressionShare())) return false;
    }
    if (hasSearchRankLostImpressionShare() != other.hasSearchRankLostImpressionShare()) return false;
    if (hasSearchRankLostImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchRankLostImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchRankLostImpressionShare())) return false;
    }
    if (hasSearchRankLostTopImpressionShare() != other.hasSearchRankLostTopImpressionShare()) return false;
    if (hasSearchRankLostTopImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchRankLostTopImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchRankLostTopImpressionShare())) return false;
    }
    if (hasSearchTopImpressionShare() != other.hasSearchTopImpressionShare()) return false;
    if (hasSearchTopImpressionShare()) {
      if (java.lang.Double.doubleToLongBits(getSearchTopImpressionShare())
          != java.lang.Double.doubleToLongBits(
              other.getSearchTopImpressionShare())) return false;
    }
    if (hasSearchVolume() != other.hasSearchVolume()) return false;
    if (hasSearchVolume()) {
      if (!getSearchVolume()
          .equals(other.getSearchVolume())) return false;
    }
    if (hasSpeedScore() != other.hasSpeedScore()) return false;
    if (hasSpeedScore()) {
      if (getSpeedScore()
          != other.getSpeedScore()) return false;
    }
    if (hasAverageTargetCpaMicros() != other.hasAverageTargetCpaMicros()) return false;
    if (hasAverageTargetCpaMicros()) {
      if (getAverageTargetCpaMicros()
          != other.getAverageTargetCpaMicros()) return false;
    }
    if (hasAverageTargetRoas() != other.hasAverageTargetRoas()) return false;
    if (hasAverageTargetRoas()) {
      if (java.lang.Double.doubleToLongBits(getAverageTargetRoas())
          != java.lang.Double.doubleToLongBits(
              other.getAverageTargetRoas())) return false;
    }
    if (hasTopImpressionPercentage() != other.hasTopImpressionPercentage()) return false;
    if (hasTopImpressionPercentage()) {
      if (java.lang.Double.doubleToLongBits(getTopImpressionPercentage())
          != java.lang.Double.doubleToLongBits(
              other.getTopImpressionPercentage())) return false;
    }
    if (hasValidAcceleratedMobilePagesClicksPercentage() != other.hasValidAcceleratedMobilePagesClicksPercentage()) return false;
    if (hasValidAcceleratedMobilePagesClicksPercentage()) {
      if (java.lang.Double.doubleToLongBits(getValidAcceleratedMobilePagesClicksPercentage())
          != java.lang.Double.doubleToLongBits(
              other.getValidAcceleratedMobilePagesClicksPercentage())) return false;
    }
    if (hasValuePerAllConversions() != other.hasValuePerAllConversions()) return false;
    if (hasValuePerAllConversions()) {
      if (java.lang.Double.doubleToLongBits(getValuePerAllConversions())
          != java.lang.Double.doubleToLongBits(
              other.getValuePerAllConversions())) return false;
    }
    if (hasValuePerAllConversionsByConversionDate() != other.hasValuePerAllConversionsByConversionDate()) return false;
    if (hasValuePerAllConversionsByConversionDate()) {
      if (java.lang.Double.doubleToLongBits(getValuePerAllConversionsByConversionDate())
          != java.lang.Double.doubleToLongBits(
              other.getValuePerAllConversionsByConversionDate())) return false;
    }
    if (hasValuePerConversion() != other.hasValuePerConversion()) return false;
    if (hasValuePerConversion()) {
      if (java.lang.Double.doubleToLongBits(getValuePerConversion())
          != java.lang.Double.doubleToLongBits(
              other.getValuePerConversion())) return false;
    }
    if (hasValuePerConversionsByConversionDate() != other.hasValuePerConversionsByConversionDate()) return false;
    if (hasValuePerConversionsByConversionDate()) {
      if (java.lang.Double.doubleToLongBits(getValuePerConversionsByConversionDate())
          != java.lang.Double.doubleToLongBits(
              other.getValuePerConversionsByConversionDate())) return false;
    }
    if (hasValuePerCurrentModelAttributedConversion() != other.hasValuePerCurrentModelAttributedConversion()) return false;
    if (hasValuePerCurrentModelAttributedConversion()) {
      if (java.lang.Double.doubleToLongBits(getValuePerCurrentModelAttributedConversion())
          != java.lang.Double.doubleToLongBits(
              other.getValuePerCurrentModelAttributedConversion())) return false;
    }
    if (hasVideoQuartileP100Rate() != other.hasVideoQuartileP100Rate()) return false;
    if (hasVideoQuartileP100Rate()) {
      if (java.lang.Double.doubleToLongBits(getVideoQuartileP100Rate())
          != java.lang.Double.doubleToLongBits(
              other.getVideoQuartileP100Rate())) return false;
    }
    if (hasVideoQuartileP25Rate() != other.hasVideoQuartileP25Rate()) return false;
    if (hasVideoQuartileP25Rate()) {
      if (java.lang.Double.doubleToLongBits(getVideoQuartileP25Rate())
          != java.lang.Double.doubleToLongBits(
              other.getVideoQuartileP25Rate())) return false;
    }
    if (hasVideoQuartileP50Rate() != other.hasVideoQuartileP50Rate()) return false;
    if (hasVideoQuartileP50Rate()) {
      if (java.lang.Double.doubleToLongBits(getVideoQuartileP50Rate())
          != java.lang.Double.doubleToLongBits(
              other.getVideoQuartileP50Rate())) return false;
    }
    if (hasVideoQuartileP75Rate() != other.hasVideoQuartileP75Rate()) return false;
    if (hasVideoQuartileP75Rate()) {
      if (java.lang.Double.doubleToLongBits(getVideoQuartileP75Rate())
          != java.lang.Double.doubleToLongBits(
              other.getVideoQuartileP75Rate())) return false;
    }
    if (hasVideoViewRate() != other.hasVideoViewRate()) return false;
    if (hasVideoViewRate()) {
      if (java.lang.Double.doubleToLongBits(getVideoViewRate())
          != java.lang.Double.doubleToLongBits(
              other.getVideoViewRate())) return false;
    }
    if (hasVideoViews() != other.hasVideoViews()) return false;
    if (hasVideoViews()) {
      if (getVideoViews()
          != other.getVideoViews()) return false;
    }
    if (hasViewThroughConversions() != other.hasViewThroughConversions()) return false;
    if (hasViewThroughConversions()) {
      if (getViewThroughConversions()
          != other.getViewThroughConversions()) return false;
    }
    if (getSkAdNetworkConversions()
        != other.getSkAdNetworkConversions()) return false;
    if (getPublisherPurchasedClicks()
        != other.getPublisherPurchasedClicks()) return false;
    if (getPublisherOrganicClicks()
        != other.getPublisherOrganicClicks()) return false;
    if (getPublisherUnknownClicks()
        != other.getPublisherUnknownClicks()) return false;
    if (hasAllConversionsFromLocationAssetClickToCall() != other.hasAllConversionsFromLocationAssetClickToCall()) return false;
    if (hasAllConversionsFromLocationAssetClickToCall()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetClickToCall())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromLocationAssetClickToCall())) return false;
    }
    if (hasAllConversionsFromLocationAssetDirections() != other.hasAllConversionsFromLocationAssetDirections()) return false;
    if (hasAllConversionsFromLocationAssetDirections()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetDirections())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromLocationAssetDirections())) return false;
    }
    if (hasAllConversionsFromLocationAssetMenu() != other.hasAllConversionsFromLocationAssetMenu()) return false;
    if (hasAllConversionsFromLocationAssetMenu()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetMenu())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromLocationAssetMenu())) return false;
    }
    if (hasAllConversionsFromLocationAssetOrder() != other.hasAllConversionsFromLocationAssetOrder()) return false;
    if (hasAllConversionsFromLocationAssetOrder()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetOrder())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromLocationAssetOrder())) return false;
    }
    if (hasAllConversionsFromLocationAssetOtherEngagement() != other.hasAllConversionsFromLocationAssetOtherEngagement()) return false;
    if (hasAllConversionsFromLocationAssetOtherEngagement()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetOtherEngagement())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromLocationAssetOtherEngagement())) return false;
    }
    if (hasAllConversionsFromLocationAssetStoreVisits() != other.hasAllConversionsFromLocationAssetStoreVisits()) return false;
    if (hasAllConversionsFromLocationAssetStoreVisits()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetStoreVisits())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromLocationAssetStoreVisits())) return false;
    }
    if (hasAllConversionsFromLocationAssetWebsite() != other.hasAllConversionsFromLocationAssetWebsite()) return false;
    if (hasAllConversionsFromLocationAssetWebsite()) {
      if (java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetWebsite())
          != java.lang.Double.doubleToLongBits(
              other.getAllConversionsFromLocationAssetWebsite())) return false;
    }
    if (hasEligibleImpressionsFromLocationAssetStoreReach() != other.hasEligibleImpressionsFromLocationAssetStoreReach()) return false;
    if (hasEligibleImpressionsFromLocationAssetStoreReach()) {
      if (getEligibleImpressionsFromLocationAssetStoreReach()
          != other.getEligibleImpressionsFromLocationAssetStoreReach()) return false;
    }
    if (hasViewThroughConversionsFromLocationAssetClickToCall() != other.hasViewThroughConversionsFromLocationAssetClickToCall()) return false;
    if (hasViewThroughConversionsFromLocationAssetClickToCall()) {
      if (java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetClickToCall())
          != java.lang.Double.doubleToLongBits(
              other.getViewThroughConversionsFromLocationAssetClickToCall())) return false;
    }
    if (hasViewThroughConversionsFromLocationAssetDirections() != other.hasViewThroughConversionsFromLocationAssetDirections()) return false;
    if (hasViewThroughConversionsFromLocationAssetDirections()) {
      if (java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetDirections())
          != java.lang.Double.doubleToLongBits(
              other.getViewThroughConversionsFromLocationAssetDirections())) return false;
    }
    if (hasViewThroughConversionsFromLocationAssetMenu() != other.hasViewThroughConversionsFromLocationAssetMenu()) return false;
    if (hasViewThroughConversionsFromLocationAssetMenu()) {
      if (java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetMenu())
          != java.lang.Double.doubleToLongBits(
              other.getViewThroughConversionsFromLocationAssetMenu())) return false;
    }
    if (hasViewThroughConversionsFromLocationAssetOrder() != other.hasViewThroughConversionsFromLocationAssetOrder()) return false;
    if (hasViewThroughConversionsFromLocationAssetOrder()) {
      if (java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetOrder())
          != java.lang.Double.doubleToLongBits(
              other.getViewThroughConversionsFromLocationAssetOrder())) return false;
    }
    if (hasViewThroughConversionsFromLocationAssetOtherEngagement() != other.hasViewThroughConversionsFromLocationAssetOtherEngagement()) return false;
    if (hasViewThroughConversionsFromLocationAssetOtherEngagement()) {
      if (java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetOtherEngagement())
          != java.lang.Double.doubleToLongBits(
              other.getViewThroughConversionsFromLocationAssetOtherEngagement())) return false;
    }
    if (hasViewThroughConversionsFromLocationAssetStoreVisits() != other.hasViewThroughConversionsFromLocationAssetStoreVisits()) return false;
    if (hasViewThroughConversionsFromLocationAssetStoreVisits()) {
      if (java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetStoreVisits())
          != java.lang.Double.doubleToLongBits(
              other.getViewThroughConversionsFromLocationAssetStoreVisits())) return false;
    }
    if (hasViewThroughConversionsFromLocationAssetWebsite() != other.hasViewThroughConversionsFromLocationAssetWebsite()) return false;
    if (hasViewThroughConversionsFromLocationAssetWebsite()) {
      if (java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetWebsite())
          != java.lang.Double.doubleToLongBits(
              other.getViewThroughConversionsFromLocationAssetWebsite())) return false;
    }
    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
    return true;
  }

  @java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    if (hasAbsoluteTopImpressionPercentage()) {
      hash = (37 * hash) + ABSOLUTE_TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAbsoluteTopImpressionPercentage()));
    }
    if (hasActiveViewCpm()) {
      hash = (37 * hash) + ACTIVE_VIEW_CPM_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getActiveViewCpm()));
    }
    if (hasActiveViewCtr()) {
      hash = (37 * hash) + ACTIVE_VIEW_CTR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getActiveViewCtr()));
    }
    if (hasActiveViewImpressions()) {
      hash = (37 * hash) + ACTIVE_VIEW_IMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getActiveViewImpressions());
    }
    if (hasActiveViewMeasurability()) {
      hash = (37 * hash) + ACTIVE_VIEW_MEASURABILITY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getActiveViewMeasurability()));
    }
    if (hasActiveViewMeasurableCostMicros()) {
      hash = (37 * hash) + ACTIVE_VIEW_MEASURABLE_COST_MICROS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getActiveViewMeasurableCostMicros());
    }
    if (hasActiveViewMeasurableImpressions()) {
      hash = (37 * hash) + ACTIVE_VIEW_MEASURABLE_IMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getActiveViewMeasurableImpressions());
    }
    if (hasActiveViewViewability()) {
      hash = (37 * hash) + ACTIVE_VIEW_VIEWABILITY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getActiveViewViewability()));
    }
    if (hasAllConversionsFromInteractionsRate()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_INTERACTIONS_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromInteractionsRate()));
    }
    if (hasAllConversionsValue()) {
      hash = (37 * hash) + ALL_CONVERSIONS_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsValue()));
    }
    hash = (37 * hash) + ALL_CONVERSIONS_VALUE_BY_CONVERSION_DATE_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        java.lang.Double.doubleToLongBits(getAllConversionsValueByConversionDate()));
    if (hasAllNewCustomerLifetimeValue()) {
      hash = (37 * hash) + ALL_NEW_CUSTOMER_LIFETIME_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllNewCustomerLifetimeValue()));
    }
    if (hasAllConversions()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversions()));
    }
    hash = (37 * hash) + ALL_CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        java.lang.Double.doubleToLongBits(getAllConversionsByConversionDate()));
    if (hasAllConversionsValuePerCost()) {
      hash = (37 * hash) + ALL_CONVERSIONS_VALUE_PER_COST_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsValuePerCost()));
    }
    if (hasAllConversionsFromClickToCall()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_CLICK_TO_CALL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromClickToCall()));
    }
    if (hasAllConversionsFromDirections()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_DIRECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromDirections()));
    }
    if (hasAllConversionsFromInteractionsValuePerInteraction()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_INTERACTIONS_VALUE_PER_INTERACTION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromInteractionsValuePerInteraction()));
    }
    if (hasAllConversionsFromMenu()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_MENU_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromMenu()));
    }
    if (hasAllConversionsFromOrder()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_ORDER_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromOrder()));
    }
    if (hasAllConversionsFromOtherEngagement()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_OTHER_ENGAGEMENT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromOtherEngagement()));
    }
    if (hasAllConversionsFromStoreVisit()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_STORE_VISIT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromStoreVisit()));
    }
    if (hasAllConversionsFromStoreWebsite()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_STORE_WEBSITE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromStoreWebsite()));
    }
    if (hasAuctionInsightSearchAbsoluteTopImpressionPercentage()) {
      hash = (37 * hash) + AUCTION_INSIGHT_SEARCH_ABSOLUTE_TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAuctionInsightSearchAbsoluteTopImpressionPercentage()));
    }
    if (hasAuctionInsightSearchImpressionShare()) {
      hash = (37 * hash) + AUCTION_INSIGHT_SEARCH_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAuctionInsightSearchImpressionShare()));
    }
    if (hasAuctionInsightSearchOutrankingShare()) {
      hash = (37 * hash) + AUCTION_INSIGHT_SEARCH_OUTRANKING_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAuctionInsightSearchOutrankingShare()));
    }
    if (hasAuctionInsightSearchOverlapRate()) {
      hash = (37 * hash) + AUCTION_INSIGHT_SEARCH_OVERLAP_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAuctionInsightSearchOverlapRate()));
    }
    if (hasAuctionInsightSearchPositionAboveRate()) {
      hash = (37 * hash) + AUCTION_INSIGHT_SEARCH_POSITION_ABOVE_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAuctionInsightSearchPositionAboveRate()));
    }
    if (hasAuctionInsightSearchTopImpressionPercentage()) {
      hash = (37 * hash) + AUCTION_INSIGHT_SEARCH_TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAuctionInsightSearchTopImpressionPercentage()));
    }
    if (hasAverageCost()) {
      hash = (37 * hash) + AVERAGE_COST_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAverageCost()));
    }
    if (hasAverageCpc()) {
      hash = (37 * hash) + AVERAGE_CPC_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAverageCpc()));
    }
    if (hasAverageCpe()) {
      hash = (37 * hash) + AVERAGE_CPE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAverageCpe()));
    }
    if (hasAverageCpm()) {
      hash = (37 * hash) + AVERAGE_CPM_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAverageCpm()));
    }
    if (hasAverageCpv()) {
      hash = (37 * hash) + AVERAGE_CPV_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAverageCpv()));
    }
    if (hasAveragePageViews()) {
      hash = (37 * hash) + AVERAGE_PAGE_VIEWS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAveragePageViews()));
    }
    if (hasAverageTimeOnSite()) {
      hash = (37 * hash) + AVERAGE_TIME_ON_SITE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAverageTimeOnSite()));
    }
    if (hasBenchmarkAverageMaxCpc()) {
      hash = (37 * hash) + BENCHMARK_AVERAGE_MAX_CPC_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getBenchmarkAverageMaxCpc()));
    }
    if (hasBiddableAppInstallConversions()) {
      hash = (37 * hash) + BIDDABLE_APP_INSTALL_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getBiddableAppInstallConversions()));
    }
    if (hasBiddableAppPostInstallConversions()) {
      hash = (37 * hash) + BIDDABLE_APP_POST_INSTALL_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getBiddableAppPostInstallConversions()));
    }
    if (hasBenchmarkCtr()) {
      hash = (37 * hash) + BENCHMARK_CTR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getBenchmarkCtr()));
    }
    if (hasBounceRate()) {
      hash = (37 * hash) + BOUNCE_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getBounceRate()));
    }
    if (hasClicks()) {
      hash = (37 * hash) + CLICKS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getClicks());
    }
    if (hasCombinedClicks()) {
      hash = (37 * hash) + COMBINED_CLICKS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getCombinedClicks());
    }
    if (hasCombinedClicksPerQuery()) {
      hash = (37 * hash) + COMBINED_CLICKS_PER_QUERY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCombinedClicksPerQuery()));
    }
    if (hasCombinedQueries()) {
      hash = (37 * hash) + COMBINED_QUERIES_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getCombinedQueries());
    }
    if (hasContentBudgetLostImpressionShare()) {
      hash = (37 * hash) + CONTENT_BUDGET_LOST_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getContentBudgetLostImpressionShare()));
    }
    if (hasContentImpressionShare()) {
      hash = (37 * hash) + CONTENT_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getContentImpressionShare()));
    }
    if (hasConversionLastReceivedRequestDateTime()) {
      hash = (37 * hash) + CONVERSION_LAST_RECEIVED_REQUEST_DATE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getConversionLastReceivedRequestDateTime().hashCode();
    }
    if (hasConversionLastConversionDate()) {
      hash = (37 * hash) + CONVERSION_LAST_CONVERSION_DATE_FIELD_NUMBER;
      hash = (53 * hash) + getConversionLastConversionDate().hashCode();
    }
    if (hasContentRankLostImpressionShare()) {
      hash = (37 * hash) + CONTENT_RANK_LOST_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getContentRankLostImpressionShare()));
    }
    if (hasConversionsFromInteractionsRate()) {
      hash = (37 * hash) + CONVERSIONS_FROM_INTERACTIONS_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getConversionsFromInteractionsRate()));
    }
    if (hasConversionsValue()) {
      hash = (37 * hash) + CONVERSIONS_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getConversionsValue()));
    }
    hash = (37 * hash) + CONVERSIONS_VALUE_BY_CONVERSION_DATE_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        java.lang.Double.doubleToLongBits(getConversionsValueByConversionDate()));
    if (hasNewCustomerLifetimeValue()) {
      hash = (37 * hash) + NEW_CUSTOMER_LIFETIME_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getNewCustomerLifetimeValue()));
    }
    if (hasConversionsValuePerCost()) {
      hash = (37 * hash) + CONVERSIONS_VALUE_PER_COST_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getConversionsValuePerCost()));
    }
    if (hasConversionsFromInteractionsValuePerInteraction()) {
      hash = (37 * hash) + CONVERSIONS_FROM_INTERACTIONS_VALUE_PER_INTERACTION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getConversionsFromInteractionsValuePerInteraction()));
    }
    if (hasConversions()) {
      hash = (37 * hash) + CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getConversions()));
    }
    hash = (37 * hash) + CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        java.lang.Double.doubleToLongBits(getConversionsByConversionDate()));
    if (hasCostMicros()) {
      hash = (37 * hash) + COST_MICROS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getCostMicros());
    }
    if (hasCostPerAllConversions()) {
      hash = (37 * hash) + COST_PER_ALL_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCostPerAllConversions()));
    }
    if (hasCostPerConversion()) {
      hash = (37 * hash) + COST_PER_CONVERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCostPerConversion()));
    }
    if (hasCostPerCurrentModelAttributedConversion()) {
      hash = (37 * hash) + COST_PER_CURRENT_MODEL_ATTRIBUTED_CONVERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCostPerCurrentModelAttributedConversion()));
    }
    if (hasCrossDeviceConversions()) {
      hash = (37 * hash) + CROSS_DEVICE_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCrossDeviceConversions()));
    }
    if (hasCtr()) {
      hash = (37 * hash) + CTR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCtr()));
    }
    if (hasCurrentModelAttributedConversions()) {
      hash = (37 * hash) + CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversions()));
    }
    if (hasCurrentModelAttributedConversionsFromInteractionsRate()) {
      hash = (37 * hash) + CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_FROM_INTERACTIONS_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsFromInteractionsRate()));
    }
    if (hasCurrentModelAttributedConversionsFromInteractionsValuePerInteraction()) {
      hash = (37 * hash) + CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_FROM_INTERACTIONS_VALUE_PER_INTERACTION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsFromInteractionsValuePerInteraction()));
    }
    if (hasCurrentModelAttributedConversionsValue()) {
      hash = (37 * hash) + CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsValue()));
    }
    if (hasCurrentModelAttributedConversionsValuePerCost()) {
      hash = (37 * hash) + CURRENT_MODEL_ATTRIBUTED_CONVERSIONS_VALUE_PER_COST_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurrentModelAttributedConversionsValuePerCost()));
    }
    if (hasEngagementRate()) {
      hash = (37 * hash) + ENGAGEMENT_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getEngagementRate()));
    }
    if (hasEngagements()) {
      hash = (37 * hash) + ENGAGEMENTS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getEngagements());
    }
    if (hasHotelAverageLeadValueMicros()) {
      hash = (37 * hash) + HOTEL_AVERAGE_LEAD_VALUE_MICROS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getHotelAverageLeadValueMicros()));
    }
    if (hasHotelCommissionRateMicros()) {
      hash = (37 * hash) + HOTEL_COMMISSION_RATE_MICROS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getHotelCommissionRateMicros());
    }
    if (hasHotelExpectedCommissionCost()) {
      hash = (37 * hash) + HOTEL_EXPECTED_COMMISSION_COST_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getHotelExpectedCommissionCost()));
    }
    if (hasHotelPriceDifferencePercentage()) {
      hash = (37 * hash) + HOTEL_PRICE_DIFFERENCE_PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getHotelPriceDifferencePercentage()));
    }
    if (hasHotelEligibleImpressions()) {
      hash = (37 * hash) + HOTEL_ELIGIBLE_IMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getHotelEligibleImpressions());
    }
    hash = (37 * hash) + HISTORICAL_CREATIVE_QUALITY_SCORE_FIELD_NUMBER;
    hash = (53 * hash) + historicalCreativeQualityScore_;
    hash = (37 * hash) + HISTORICAL_LANDING_PAGE_QUALITY_SCORE_FIELD_NUMBER;
    hash = (53 * hash) + historicalLandingPageQualityScore_;
    if (hasHistoricalQualityScore()) {
      hash = (37 * hash) + HISTORICAL_QUALITY_SCORE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getHistoricalQualityScore());
    }
    hash = (37 * hash) + HISTORICAL_SEARCH_PREDICTED_CTR_FIELD_NUMBER;
    hash = (53 * hash) + historicalSearchPredictedCtr_;
    if (hasGmailForwards()) {
      hash = (37 * hash) + GMAIL_FORWARDS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getGmailForwards());
    }
    if (hasGmailSaves()) {
      hash = (37 * hash) + GMAIL_SAVES_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getGmailSaves());
    }
    if (hasGmailSecondaryClicks()) {
      hash = (37 * hash) + GMAIL_SECONDARY_CLICKS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getGmailSecondaryClicks());
    }
    if (hasImpressionsFromStoreReach()) {
      hash = (37 * hash) + IMPRESSIONS_FROM_STORE_REACH_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getImpressionsFromStoreReach());
    }
    if (hasImpressions()) {
      hash = (37 * hash) + IMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getImpressions());
    }
    if (hasInteractionRate()) {
      hash = (37 * hash) + INTERACTION_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getInteractionRate()));
    }
    if (hasInteractions()) {
      hash = (37 * hash) + INTERACTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getInteractions());
    }
    if (getInteractionEventTypesCount() > 0) {
      hash = (37 * hash) + INTERACTION_EVENT_TYPES_FIELD_NUMBER;
      hash = (53 * hash) + interactionEventTypes_.hashCode();
    }
    if (hasInvalidClickRate()) {
      hash = (37 * hash) + INVALID_CLICK_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getInvalidClickRate()));
    }
    if (hasInvalidClicks()) {
      hash = (37 * hash) + INVALID_CLICKS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getInvalidClicks());
    }
    if (hasMessageChats()) {
      hash = (37 * hash) + MESSAGE_CHATS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMessageChats());
    }
    if (hasMessageImpressions()) {
      hash = (37 * hash) + MESSAGE_IMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMessageImpressions());
    }
    if (hasMessageChatRate()) {
      hash = (37 * hash) + MESSAGE_CHAT_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getMessageChatRate()));
    }
    if (hasMobileFriendlyClicksPercentage()) {
      hash = (37 * hash) + MOBILE_FRIENDLY_CLICKS_PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getMobileFriendlyClicksPercentage()));
    }
    if (hasOptimizationScoreUplift()) {
      hash = (37 * hash) + OPTIMIZATION_SCORE_UPLIFT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getOptimizationScoreUplift()));
    }
    if (hasOptimizationScoreUrl()) {
      hash = (37 * hash) + OPTIMIZATION_SCORE_URL_FIELD_NUMBER;
      hash = (53 * hash) + getOptimizationScoreUrl().hashCode();
    }
    if (hasOrganicClicks()) {
      hash = (37 * hash) + ORGANIC_CLICKS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getOrganicClicks());
    }
    if (hasOrganicClicksPerQuery()) {
      hash = (37 * hash) + ORGANIC_CLICKS_PER_QUERY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getOrganicClicksPerQuery()));
    }
    if (hasOrganicImpressions()) {
      hash = (37 * hash) + ORGANIC_IMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getOrganicImpressions());
    }
    if (hasOrganicImpressionsPerQuery()) {
      hash = (37 * hash) + ORGANIC_IMPRESSIONS_PER_QUERY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getOrganicImpressionsPerQuery()));
    }
    if (hasOrganicQueries()) {
      hash = (37 * hash) + ORGANIC_QUERIES_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getOrganicQueries());
    }
    if (hasPercentNewVisitors()) {
      hash = (37 * hash) + PERCENT_NEW_VISITORS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getPercentNewVisitors()));
    }
    if (hasPhoneCalls()) {
      hash = (37 * hash) + PHONE_CALLS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getPhoneCalls());
    }
    if (hasPhoneImpressions()) {
      hash = (37 * hash) + PHONE_IMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getPhoneImpressions());
    }
    if (hasPhoneThroughRate()) {
      hash = (37 * hash) + PHONE_THROUGH_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getPhoneThroughRate()));
    }
    if (hasRelativeCtr()) {
      hash = (37 * hash) + RELATIVE_CTR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getRelativeCtr()));
    }
    if (hasSearchAbsoluteTopImpressionShare()) {
      hash = (37 * hash) + SEARCH_ABSOLUTE_TOP_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchAbsoluteTopImpressionShare()));
    }
    if (hasSearchBudgetLostAbsoluteTopImpressionShare()) {
      hash = (37 * hash) + SEARCH_BUDGET_LOST_ABSOLUTE_TOP_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchBudgetLostAbsoluteTopImpressionShare()));
    }
    if (hasSearchBudgetLostImpressionShare()) {
      hash = (37 * hash) + SEARCH_BUDGET_LOST_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchBudgetLostImpressionShare()));
    }
    if (hasSearchBudgetLostTopImpressionShare()) {
      hash = (37 * hash) + SEARCH_BUDGET_LOST_TOP_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchBudgetLostTopImpressionShare()));
    }
    if (hasSearchClickShare()) {
      hash = (37 * hash) + SEARCH_CLICK_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchClickShare()));
    }
    if (hasSearchExactMatchImpressionShare()) {
      hash = (37 * hash) + SEARCH_EXACT_MATCH_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchExactMatchImpressionShare()));
    }
    if (hasSearchImpressionShare()) {
      hash = (37 * hash) + SEARCH_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchImpressionShare()));
    }
    if (hasSearchRankLostAbsoluteTopImpressionShare()) {
      hash = (37 * hash) + SEARCH_RANK_LOST_ABSOLUTE_TOP_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchRankLostAbsoluteTopImpressionShare()));
    }
    if (hasSearchRankLostImpressionShare()) {
      hash = (37 * hash) + SEARCH_RANK_LOST_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchRankLostImpressionShare()));
    }
    if (hasSearchRankLostTopImpressionShare()) {
      hash = (37 * hash) + SEARCH_RANK_LOST_TOP_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchRankLostTopImpressionShare()));
    }
    if (hasSearchTopImpressionShare()) {
      hash = (37 * hash) + SEARCH_TOP_IMPRESSION_SHARE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSearchTopImpressionShare()));
    }
    if (hasSearchVolume()) {
      hash = (37 * hash) + SEARCH_VOLUME_FIELD_NUMBER;
      hash = (53 * hash) + getSearchVolume().hashCode();
    }
    if (hasSpeedScore()) {
      hash = (37 * hash) + SPEED_SCORE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getSpeedScore());
    }
    if (hasAverageTargetCpaMicros()) {
      hash = (37 * hash) + AVERAGE_TARGET_CPA_MICROS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getAverageTargetCpaMicros());
    }
    if (hasAverageTargetRoas()) {
      hash = (37 * hash) + AVERAGE_TARGET_ROAS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAverageTargetRoas()));
    }
    if (hasTopImpressionPercentage()) {
      hash = (37 * hash) + TOP_IMPRESSION_PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getTopImpressionPercentage()));
    }
    if (hasValidAcceleratedMobilePagesClicksPercentage()) {
      hash = (37 * hash) + VALID_ACCELERATED_MOBILE_PAGES_CLICKS_PERCENTAGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getValidAcceleratedMobilePagesClicksPercentage()));
    }
    if (hasValuePerAllConversions()) {
      hash = (37 * hash) + VALUE_PER_ALL_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getValuePerAllConversions()));
    }
    if (hasValuePerAllConversionsByConversionDate()) {
      hash = (37 * hash) + VALUE_PER_ALL_CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getValuePerAllConversionsByConversionDate()));
    }
    if (hasValuePerConversion()) {
      hash = (37 * hash) + VALUE_PER_CONVERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getValuePerConversion()));
    }
    if (hasValuePerConversionsByConversionDate()) {
      hash = (37 * hash) + VALUE_PER_CONVERSIONS_BY_CONVERSION_DATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getValuePerConversionsByConversionDate()));
    }
    if (hasValuePerCurrentModelAttributedConversion()) {
      hash = (37 * hash) + VALUE_PER_CURRENT_MODEL_ATTRIBUTED_CONVERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getValuePerCurrentModelAttributedConversion()));
    }
    if (hasVideoQuartileP100Rate()) {
      hash = (37 * hash) + VIDEO_QUARTILE_P100_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVideoQuartileP100Rate()));
    }
    if (hasVideoQuartileP25Rate()) {
      hash = (37 * hash) + VIDEO_QUARTILE_P25_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVideoQuartileP25Rate()));
    }
    if (hasVideoQuartileP50Rate()) {
      hash = (37 * hash) + VIDEO_QUARTILE_P50_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVideoQuartileP50Rate()));
    }
    if (hasVideoQuartileP75Rate()) {
      hash = (37 * hash) + VIDEO_QUARTILE_P75_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVideoQuartileP75Rate()));
    }
    if (hasVideoViewRate()) {
      hash = (37 * hash) + VIDEO_VIEW_RATE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getVideoViewRate()));
    }
    if (hasVideoViews()) {
      hash = (37 * hash) + VIDEO_VIEWS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getVideoViews());
    }
    if (hasViewThroughConversions()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getViewThroughConversions());
    }
    hash = (37 * hash) + SK_AD_NETWORK_CONVERSIONS_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        getSkAdNetworkConversions());
    hash = (37 * hash) + PUBLISHER_PURCHASED_CLICKS_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        getPublisherPurchasedClicks());
    hash = (37 * hash) + PUBLISHER_ORGANIC_CLICKS_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        getPublisherOrganicClicks());
    hash = (37 * hash) + PUBLISHER_UNKNOWN_CLICKS_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
        getPublisherUnknownClicks());
    if (hasAllConversionsFromLocationAssetClickToCall()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_LOCATION_ASSET_CLICK_TO_CALL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetClickToCall()));
    }
    if (hasAllConversionsFromLocationAssetDirections()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_LOCATION_ASSET_DIRECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetDirections()));
    }
    if (hasAllConversionsFromLocationAssetMenu()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_LOCATION_ASSET_MENU_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetMenu()));
    }
    if (hasAllConversionsFromLocationAssetOrder()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_LOCATION_ASSET_ORDER_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetOrder()));
    }
    if (hasAllConversionsFromLocationAssetOtherEngagement()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_LOCATION_ASSET_OTHER_ENGAGEMENT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetOtherEngagement()));
    }
    if (hasAllConversionsFromLocationAssetStoreVisits()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_LOCATION_ASSET_STORE_VISITS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetStoreVisits()));
    }
    if (hasAllConversionsFromLocationAssetWebsite()) {
      hash = (37 * hash) + ALL_CONVERSIONS_FROM_LOCATION_ASSET_WEBSITE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getAllConversionsFromLocationAssetWebsite()));
    }
    if (hasEligibleImpressionsFromLocationAssetStoreReach()) {
      hash = (37 * hash) + ELIGIBLE_IMPRESSIONS_FROM_LOCATION_ASSET_STORE_REACH_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getEligibleImpressionsFromLocationAssetStoreReach());
    }
    if (hasViewThroughConversionsFromLocationAssetClickToCall()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_CLICK_TO_CALL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetClickToCall()));
    }
    if (hasViewThroughConversionsFromLocationAssetDirections()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_DIRECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetDirections()));
    }
    if (hasViewThroughConversionsFromLocationAssetMenu()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_MENU_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetMenu()));
    }
    if (hasViewThroughConversionsFromLocationAssetOrder()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_ORDER_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetOrder()));
    }
    if (hasViewThroughConversionsFromLocationAssetOtherEngagement()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_OTHER_ENGAGEMENT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetOtherEngagement()));
    }
    if (hasViewThroughConversionsFromLocationAssetStoreVisits()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_STORE_VISITS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetStoreVisits()));
    }
    if (hasViewThroughConversionsFromLocationAssetWebsite()) {
      hash = (37 * hash) + VIEW_THROUGH_CONVERSIONS_FROM_LOCATION_ASSET_WEBSITE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getViewThroughConversionsFromLocationAssetWebsite()));
    }
    hash = (29 * hash) + getUnknownFields().hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static com.google.ads.googleads.v14.common.Metrics parseFrom(
      java.nio.ByteBuffer data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.ads.googleads.v14.common.Metrics parseFrom(
      java.nio.ByteBuffer data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.ads.googleads.v14.common.Metrics parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.ads.googleads.v14.common.Metrics 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.ads.googleads.v14.common.Metrics parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.ads.googleads.v14.common.Metrics parseFrom(
      byte[] data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.ads.googleads.v14.common.Metrics parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static com.google.ads.googleads.v14.common.Metrics 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.ads.googleads.v14.common.Metrics parseDelimitedFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseDelimitedWithIOException(PARSER, input);
  }

  public static com.google.ads.googleads.v14.common.Metrics 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.ads.googleads.v14.common.Metrics parseFrom(
      com.google.protobuf.CodedInputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static com.google.ads.googleads.v14.common.Metrics 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.ads.googleads.v14.common.Metrics 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>
   * Metrics data.
   * </pre>
   *
   * Protobuf type {@code google.ads.googleads.v14.common.Metrics}
   */
  public static final class Builder extends
      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
      // @@protoc_insertion_point(builder_implements:google.ads.googleads.v14.common.Metrics)
      com.google.ads.googleads.v14.common.MetricsOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.ads.googleads.v14.common.MetricsProto.internal_static_google_ads_googleads_v14_common_Metrics_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.ads.googleads.v14.common.MetricsProto.internal_static_google_ads_googleads_v14_common_Metrics_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.ads.googleads.v14.common.Metrics.class, com.google.ads.googleads.v14.common.Metrics.Builder.class);
    }

    // Construct using com.google.ads.googleads.v14.common.Metrics.newBuilder()
    private Builder() {
      maybeForceBuilderInitialization();
    }

    private Builder(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      super(parent);
      maybeForceBuilderInitialization();
    }
    private void maybeForceBuilderInitialization() {
      if (com.google.protobuf.GeneratedMessageV3
              .alwaysUseFieldBuilders) {
        getSearchVolumeFieldBuilder();
      }
    }
    @java.lang.Override
    public Builder clear() {
      super.clear();
      bitField0_ = 0;
      bitField1_ = 0;
      bitField2_ = 0;
      bitField3_ = 0;
      bitField4_ = 0;
      absoluteTopImpressionPercentage_ = 0D;
      activeViewCpm_ = 0D;
      activeViewCtr_ = 0D;
      activeViewImpressions_ = 0L;
      activeViewMeasurability_ = 0D;
      activeViewMeasurableCostMicros_ = 0L;
      activeViewMeasurableImpressions_ = 0L;
      activeViewViewability_ = 0D;
      allConversionsFromInteractionsRate_ = 0D;
      allConversionsValue_ = 0D;
      allConversionsValueByConversionDate_ = 0D;
      allNewCustomerLifetimeValue_ = 0D;
      allConversions_ = 0D;
      allConversionsByConversionDate_ = 0D;
      allConversionsValuePerCost_ = 0D;
      allConversionsFromClickToCall_ = 0D;
      allConversionsFromDirections_ = 0D;
      allConversionsFromInteractionsValuePerInteraction_ = 0D;
      allConversionsFromMenu_ = 0D;
      allConversionsFromOrder_ = 0D;
      allConversionsFromOtherEngagement_ = 0D;
      allConversionsFromStoreVisit_ = 0D;
      allConversionsFromStoreWebsite_ = 0D;
      auctionInsightSearchAbsoluteTopImpressionPercentage_ = 0D;
      auctionInsightSearchImpressionShare_ = 0D;
      auctionInsightSearchOutrankingShare_ = 0D;
      auctionInsightSearchOverlapRate_ = 0D;
      auctionInsightSearchPositionAboveRate_ = 0D;
      auctionInsightSearchTopImpressionPercentage_ = 0D;
      averageCost_ = 0D;
      averageCpc_ = 0D;
      averageCpe_ = 0D;
      averageCpm_ = 0D;
      averageCpv_ = 0D;
      averagePageViews_ = 0D;
      averageTimeOnSite_ = 0D;
      benchmarkAverageMaxCpc_ = 0D;
      biddableAppInstallConversions_ = 0D;
      biddableAppPostInstallConversions_ = 0D;
      benchmarkCtr_ = 0D;
      bounceRate_ = 0D;
      clicks_ = 0L;
      combinedClicks_ = 0L;
      combinedClicksPerQuery_ = 0D;
      combinedQueries_ = 0L;
      contentBudgetLostImpressionShare_ = 0D;
      contentImpressionShare_ = 0D;
      conversionLastReceivedRequestDateTime_ = "";
      conversionLastConversionDate_ = "";
      contentRankLostImpressionShare_ = 0D;
      conversionsFromInteractionsRate_ = 0D;
      conversionsValue_ = 0D;
      conversionsValueByConversionDate_ = 0D;
      newCustomerLifetimeValue_ = 0D;
      conversionsValuePerCost_ = 0D;
      conversionsFromInteractionsValuePerInteraction_ = 0D;
      conversions_ = 0D;
      conversionsByConversionDate_ = 0D;
      costMicros_ = 0L;
      costPerAllConversions_ = 0D;
      costPerConversion_ = 0D;
      costPerCurrentModelAttributedConversion_ = 0D;
      crossDeviceConversions_ = 0D;
      ctr_ = 0D;
      currentModelAttributedConversions_ = 0D;
      currentModelAttributedConversionsFromInteractionsRate_ = 0D;
      currentModelAttributedConversionsFromInteractionsValuePerInteraction_ = 0D;
      currentModelAttributedConversionsValue_ = 0D;
      currentModelAttributedConversionsValuePerCost_ = 0D;
      engagementRate_ = 0D;
      engagements_ = 0L;
      hotelAverageLeadValueMicros_ = 0D;
      hotelCommissionRateMicros_ = 0L;
      hotelExpectedCommissionCost_ = 0D;
      hotelPriceDifferencePercentage_ = 0D;
      hotelEligibleImpressions_ = 0L;
      historicalCreativeQualityScore_ = 0;
      historicalLandingPageQualityScore_ = 0;
      historicalQualityScore_ = 0L;
      historicalSearchPredictedCtr_ = 0;
      gmailForwards_ = 0L;
      gmailSaves_ = 0L;
      gmailSecondaryClicks_ = 0L;
      impressionsFromStoreReach_ = 0L;
      impressions_ = 0L;
      interactionRate_ = 0D;
      interactions_ = 0L;
      interactionEventTypes_ = java.util.Collections.emptyList();
      bitField2_ = (bitField2_ & ~0x00800000);
      invalidClickRate_ = 0D;
      invalidClicks_ = 0L;
      messageChats_ = 0L;
      messageImpressions_ = 0L;
      messageChatRate_ = 0D;
      mobileFriendlyClicksPercentage_ = 0D;
      optimizationScoreUplift_ = 0D;
      optimizationScoreUrl_ = "";
      organicClicks_ = 0L;
      organicClicksPerQuery_ = 0D;
      organicImpressions_ = 0L;
      organicImpressionsPerQuery_ = 0D;
      organicQueries_ = 0L;
      percentNewVisitors_ = 0D;
      phoneCalls_ = 0L;
      phoneImpressions_ = 0L;
      phoneThroughRate_ = 0D;
      relativeCtr_ = 0D;
      searchAbsoluteTopImpressionShare_ = 0D;
      searchBudgetLostAbsoluteTopImpressionShare_ = 0D;
      searchBudgetLostImpressionShare_ = 0D;
      searchBudgetLostTopImpressionShare_ = 0D;
      searchClickShare_ = 0D;
      searchExactMatchImpressionShare_ = 0D;
      searchImpressionShare_ = 0D;
      searchRankLostAbsoluteTopImpressionShare_ = 0D;
      searchRankLostImpressionShare_ = 0D;
      searchRankLostTopImpressionShare_ = 0D;
      searchTopImpressionShare_ = 0D;
      searchVolume_ = null;
      if (searchVolumeBuilder_ != null) {
        searchVolumeBuilder_.dispose();
        searchVolumeBuilder_ = null;
      }
      speedScore_ = 0L;
      averageTargetCpaMicros_ = 0L;
      averageTargetRoas_ = 0D;
      topImpressionPercentage_ = 0D;
      validAcceleratedMobilePagesClicksPercentage_ = 0D;
      valuePerAllConversions_ = 0D;
      valuePerAllConversionsByConversionDate_ = 0D;
      valuePerConversion_ = 0D;
      valuePerConversionsByConversionDate_ = 0D;
      valuePerCurrentModelAttributedConversion_ = 0D;
      videoQuartileP100Rate_ = 0D;
      videoQuartileP25Rate_ = 0D;
      videoQuartileP50Rate_ = 0D;
      videoQuartileP75Rate_ = 0D;
      videoViewRate_ = 0D;
      videoViews_ = 0L;
      viewThroughConversions_ = 0L;
      skAdNetworkConversions_ = 0L;
      publisherPurchasedClicks_ = 0L;
      publisherOrganicClicks_ = 0L;
      publisherUnknownClicks_ = 0L;
      allConversionsFromLocationAssetClickToCall_ = 0D;
      allConversionsFromLocationAssetDirections_ = 0D;
      allConversionsFromLocationAssetMenu_ = 0D;
      allConversionsFromLocationAssetOrder_ = 0D;
      allConversionsFromLocationAssetOtherEngagement_ = 0D;
      allConversionsFromLocationAssetStoreVisits_ = 0D;
      allConversionsFromLocationAssetWebsite_ = 0D;
      eligibleImpressionsFromLocationAssetStoreReach_ = 0L;
      viewThroughConversionsFromLocationAssetClickToCall_ = 0D;
      viewThroughConversionsFromLocationAssetDirections_ = 0D;
      viewThroughConversionsFromLocationAssetMenu_ = 0D;
      viewThroughConversionsFromLocationAssetOrder_ = 0D;
      viewThroughConversionsFromLocationAssetOtherEngagement_ = 0D;
      viewThroughConversionsFromLocationAssetStoreVisits_ = 0D;
      viewThroughConversionsFromLocationAssetWebsite_ = 0D;
      return this;
    }

    @java.lang.Override
    public com.google.protobuf.Descriptors.Descriptor
        getDescriptorForType() {
      return com.google.ads.googleads.v14.common.MetricsProto.internal_static_google_ads_googleads_v14_common_Metrics_descriptor;
    }

    @java.lang.Override
    public com.google.ads.googleads.v14.common.Metrics getDefaultInstanceForType() {
      return com.google.ads.googleads.v14.common.Metrics.getDefaultInstance();
    }

    @java.lang.Override
    public com.google.ads.googleads.v14.common.Metrics build() {
      com.google.ads.googleads.v14.common.Metrics result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    @java.lang.Override
    public com.google.ads.googleads.v14.common.Metrics buildPartial() {
      com.google.ads.googleads.v14.common.Metrics result = new com.google.ads.googleads.v14.common.Metrics(this);
      buildPartialRepeatedFields(result);
      if (bitField0_ != 0) { buildPartial0(result); }
      if (bitField1_ != 0) { buildPartial1(result); }
      if (bitField2_ != 0) { buildPartial2(result); }
      if (bitField3_ != 0) { buildPartial3(result); }
      if (bitField4_ != 0) { buildPartial4(result); }
      onBuilt();
      return result;
    }

    private void buildPartialRepeatedFields(com.google.ads.googleads.v14.common.Metrics result) {
      if (((bitField2_ & 0x00800000) != 0)) {
        interactionEventTypes_ = java.util.Collections.unmodifiableList(interactionEventTypes_);
        bitField2_ = (bitField2_ & ~0x00800000);
      }
      result.interactionEventTypes_ = interactionEventTypes_;
    }

    private void buildPartial0(com.google.ads.googleads.v14.common.Metrics result) {
      int from_bitField0_ = bitField0_;
      int to_bitField0_ = 0;
      if (((from_bitField0_ & 0x00000001) != 0)) {
        result.absoluteTopImpressionPercentage_ = absoluteTopImpressionPercentage_;
        to_bitField0_ |= 0x00000001;
      }
      if (((from_bitField0_ & 0x00000002) != 0)) {
        result.activeViewCpm_ = activeViewCpm_;
        to_bitField0_ |= 0x00000002;
      }
      if (((from_bitField0_ & 0x00000004) != 0)) {
        result.activeViewCtr_ = activeViewCtr_;
        to_bitField0_ |= 0x00000004;
      }
      if (((from_bitField0_ & 0x00000008) != 0)) {
        result.activeViewImpressions_ = activeViewImpressions_;
        to_bitField0_ |= 0x00000008;
      }
      if (((from_bitField0_ & 0x00000010) != 0)) {
        result.activeViewMeasurability_ = activeViewMeasurability_;
        to_bitField0_ |= 0x00000010;
      }
      if (((from_bitField0_ & 0x00000020) != 0)) {
        result.activeViewMeasurableCostMicros_ = activeViewMeasurableCostMicros_;
        to_bitField0_ |= 0x00000020;
      }
      if (((from_bitField0_ & 0x00000040) != 0)) {
        result.activeViewMeasurableImpressions_ = activeViewMeasurableImpressions_;
        to_bitField0_ |= 0x00000040;
      }
      if (((from_bitField0_ & 0x00000080) != 0)) {
        result.activeViewViewability_ = activeViewViewability_;
        to_bitField0_ |= 0x00000080;
      }
      if (((from_bitField0_ & 0x00000100) != 0)) {
        result.allConversionsFromInteractionsRate_ = allConversionsFromInteractionsRate_;
        to_bitField0_ |= 0x00000100;
      }
      if (((from_bitField0_ & 0x00000200) != 0)) {
        result.allConversionsValue_ = allConversionsValue_;
        to_bitField0_ |= 0x00000200;
      }
      if (((from_bitField0_ & 0x00000400) != 0)) {
        result.allConversionsValueByConversionDate_ = allConversionsValueByConversionDate_;
      }
      if (((from_bitField0_ & 0x00000800) != 0)) {
        result.allNewCustomerLifetimeValue_ = allNewCustomerLifetimeValue_;
        to_bitField0_ |= 0x00000400;
      }
      if (((from_bitField0_ & 0x00001000) != 0)) {
        result.allConversions_ = allConversions_;
        to_bitField0_ |= 0x00000800;
      }
      if (((from_bitField0_ & 0x00002000) != 0)) {
        result.allConversionsByConversionDate_ = allConversionsByConversionDate_;
      }
      if (((from_bitField0_ & 0x00004000) != 0)) {
        result.allConversionsValuePerCost_ = allConversionsValuePerCost_;
        to_bitField0_ |= 0x00001000;
      }
      if (((from_bitField0_ & 0x00008000) != 0)) {
        result.allConversionsFromClickToCall_ = allConversionsFromClickToCall_;
        to_bitField0_ |= 0x00002000;
      }
      if (((from_bitField0_ & 0x00010000) != 0)) {
        result.allConversionsFromDirections_ = allConversionsFromDirections_;
        to_bitField0_ |= 0x00004000;
      }
      if (((from_bitField0_ & 0x00020000) != 0)) {
        result.allConversionsFromInteractionsValuePerInteraction_ = allConversionsFromInteractionsValuePerInteraction_;
        to_bitField0_ |= 0x00008000;
      }
      if (((from_bitField0_ & 0x00040000) != 0)) {
        result.allConversionsFromMenu_ = allConversionsFromMenu_;
        to_bitField0_ |= 0x00010000;
      }
      if (((from_bitField0_ & 0x00080000) != 0)) {
        result.allConversionsFromOrder_ = allConversionsFromOrder_;
        to_bitField0_ |= 0x00020000;
      }
      if (((from_bitField0_ & 0x00100000) != 0)) {
        result.allConversionsFromOtherEngagement_ = allConversionsFromOtherEngagement_;
        to_bitField0_ |= 0x00040000;
      }
      if (((from_bitField0_ & 0x00200000) != 0)) {
        result.allConversionsFromStoreVisit_ = allConversionsFromStoreVisit_;
        to_bitField0_ |= 0x00080000;
      }
      if (((from_bitField0_ & 0x00400000) != 0)) {
        result.allConversionsFromStoreWebsite_ = allConversionsFromStoreWebsite_;
        to_bitField0_ |= 0x00100000;
      }
      if (((from_bitField0_ & 0x00800000) != 0)) {
        result.auctionInsightSearchAbsoluteTopImpressionPercentage_ = auctionInsightSearchAbsoluteTopImpressionPercentage_;
        to_bitField0_ |= 0x00200000;
      }
      if (((from_bitField0_ & 0x01000000) != 0)) {
        result.auctionInsightSearchImpressionShare_ = auctionInsightSearchImpressionShare_;
        to_bitField0_ |= 0x00400000;
      }
      if (((from_bitField0_ & 0x02000000) != 0)) {
        result.auctionInsightSearchOutrankingShare_ = auctionInsightSearchOutrankingShare_;
        to_bitField0_ |= 0x00800000;
      }
      if (((from_bitField0_ & 0x04000000) != 0)) {
        result.auctionInsightSearchOverlapRate_ = auctionInsightSearchOverlapRate_;
        to_bitField0_ |= 0x01000000;
      }
      if (((from_bitField0_ & 0x08000000) != 0)) {
        result.auctionInsightSearchPositionAboveRate_ = auctionInsightSearchPositionAboveRate_;
        to_bitField0_ |= 0x02000000;
      }
      if (((from_bitField0_ & 0x10000000) != 0)) {
        result.auctionInsightSearchTopImpressionPercentage_ = auctionInsightSearchTopImpressionPercentage_;
        to_bitField0_ |= 0x04000000;
      }
      if (((from_bitField0_ & 0x20000000) != 0)) {
        result.averageCost_ = averageCost_;
        to_bitField0_ |= 0x08000000;
      }
      if (((from_bitField0_ & 0x40000000) != 0)) {
        result.averageCpc_ = averageCpc_;
        to_bitField0_ |= 0x10000000;
      }
      if (((from_bitField0_ & 0x80000000) != 0)) {
        result.averageCpe_ = averageCpe_;
        to_bitField0_ |= 0x20000000;
      }
      result.bitField0_ |= to_bitField0_;
    }

    private void buildPartial1(com.google.ads.googleads.v14.common.Metrics result) {
      int from_bitField1_ = bitField1_;
      int to_bitField0_ = 0;
      if (((from_bitField1_ & 0x00000001) != 0)) {
        result.averageCpm_ = averageCpm_;
        to_bitField0_ |= 0x40000000;
      }
      if (((from_bitField1_ & 0x00000002) != 0)) {
        result.averageCpv_ = averageCpv_;
        to_bitField0_ |= 0x80000000;
      }
      int to_bitField1_ = 0;
      if (((from_bitField1_ & 0x00000004) != 0)) {
        result.averagePageViews_ = averagePageViews_;
        to_bitField1_ |= 0x00000001;
      }
      if (((from_bitField1_ & 0x00000008) != 0)) {
        result.averageTimeOnSite_ = averageTimeOnSite_;
        to_bitField1_ |= 0x00000002;
      }
      if (((from_bitField1_ & 0x00000010) != 0)) {
        result.benchmarkAverageMaxCpc_ = benchmarkAverageMaxCpc_;
        to_bitField1_ |= 0x00000004;
      }
      if (((from_bitField1_ & 0x00000020) != 0)) {
        result.biddableAppInstallConversions_ = biddableAppInstallConversions_;
        to_bitField1_ |= 0x00000008;
      }
      if (((from_bitField1_ & 0x00000040) != 0)) {
        result.biddableAppPostInstallConversions_ = biddableAppPostInstallConversions_;
        to_bitField1_ |= 0x00000010;
      }
      if (((from_bitField1_ & 0x00000080) != 0)) {
        result.benchmarkCtr_ = benchmarkCtr_;
        to_bitField1_ |= 0x00000020;
      }
      if (((from_bitField1_ & 0x00000100) != 0)) {
        result.bounceRate_ = bounceRate_;
        to_bitField1_ |= 0x00000040;
      }
      if (((from_bitField1_ & 0x00000200) != 0)) {
        result.clicks_ = clicks_;
        to_bitField1_ |= 0x00000080;
      }
      if (((from_bitField1_ & 0x00000400) != 0)) {
        result.combinedClicks_ = combinedClicks_;
        to_bitField1_ |= 0x00000100;
      }
      if (((from_bitField1_ & 0x00000800) != 0)) {
        result.combinedClicksPerQuery_ = combinedClicksPerQuery_;
        to_bitField1_ |= 0x00000200;
      }
      if (((from_bitField1_ & 0x00001000) != 0)) {
        result.combinedQueries_ = combinedQueries_;
        to_bitField1_ |= 0x00000400;
      }
      if (((from_bitField1_ & 0x00002000) != 0)) {
        result.contentBudgetLostImpressionShare_ = contentBudgetLostImpressionShare_;
        to_bitField1_ |= 0x00000800;
      }
      if (((from_bitField1_ & 0x00004000) != 0)) {
        result.contentImpressionShare_ = contentImpressionShare_;
        to_bitField1_ |= 0x00001000;
      }
      if (((from_bitField1_ & 0x00008000) != 0)) {
        result.conversionLastReceivedRequestDateTime_ = conversionLastReceivedRequestDateTime_;
        to_bitField1_ |= 0x00002000;
      }
      if (((from_bitField1_ & 0x00010000) != 0)) {
        result.conversionLastConversionDate_ = conversionLastConversionDate_;
        to_bitField1_ |= 0x00004000;
      }
      if (((from_bitField1_ & 0x00020000) != 0)) {
        result.contentRankLostImpressionShare_ = contentRankLostImpressionShare_;
        to_bitField1_ |= 0x00008000;
      }
      if (((from_bitField1_ & 0x00040000) != 0)) {
        result.conversionsFromInteractionsRate_ = conversionsFromInteractionsRate_;
        to_bitField1_ |= 0x00010000;
      }
      if (((from_bitField1_ & 0x00080000) != 0)) {
        result.conversionsValue_ = conversionsValue_;
        to_bitField1_ |= 0x00020000;
      }
      if (((from_bitField1_ & 0x00100000) != 0)) {
        result.conversionsValueByConversionDate_ = conversionsValueByConversionDate_;
      }
      if (((from_bitField1_ & 0x00200000) != 0)) {
        result.newCustomerLifetimeValue_ = newCustomerLifetimeValue_;
        to_bitField1_ |= 0x00040000;
      }
      if (((from_bitField1_ & 0x00400000) != 0)) {
        result.conversionsValuePerCost_ = conversionsValuePerCost_;
        to_bitField1_ |= 0x00080000;
      }
      if (((from_bitField1_ & 0x00800000) != 0)) {
        result.conversionsFromInteractionsValuePerInteraction_ = conversionsFromInteractionsValuePerInteraction_;
        to_bitField1_ |= 0x00100000;
      }
      if (((from_bitField1_ & 0x01000000) != 0)) {
        result.conversions_ = conversions_;
        to_bitField1_ |= 0x00200000;
      }
      if (((from_bitField1_ & 0x02000000) != 0)) {
        result.conversionsByConversionDate_ = conversionsByConversionDate_;
      }
      if (((from_bitField1_ & 0x04000000) != 0)) {
        result.costMicros_ = costMicros_;
        to_bitField1_ |= 0x00400000;
      }
      if (((from_bitField1_ & 0x08000000) != 0)) {
        result.costPerAllConversions_ = costPerAllConversions_;
        to_bitField1_ |= 0x00800000;
      }
      if (((from_bitField1_ & 0x10000000) != 0)) {
        result.costPerConversion_ = costPerConversion_;
        to_bitField1_ |= 0x01000000;
      }
      if (((from_bitField1_ & 0x20000000) != 0)) {
        result.costPerCurrentModelAttributedConversion_ = costPerCurrentModelAttributedConversion_;
        to_bitField1_ |= 0x02000000;
      }
      if (((from_bitField1_ & 0x40000000) != 0)) {
        result.crossDeviceConversions_ = crossDeviceConversions_;
        to_bitField1_ |= 0x04000000;
      }
      if (((from_bitField1_ & 0x80000000) != 0)) {
        result.ctr_ = ctr_;
        to_bitField1_ |= 0x08000000;
      }
      result.bitField0_ |= to_bitField0_;
      result.bitField1_ |= to_bitField1_;
    }

    private void buildPartial2(com.google.ads.googleads.v14.common.Metrics result) {
      int from_bitField2_ = bitField2_;
      int to_bitField1_ = 0;
      if (((from_bitField2_ & 0x00000001) != 0)) {
        result.currentModelAttributedConversions_ = currentModelAttributedConversions_;
        to_bitField1_ |= 0x10000000;
      }
      if (((from_bitField2_ & 0x00000002) != 0)) {
        result.currentModelAttributedConversionsFromInteractionsRate_ = currentModelAttributedConversionsFromInteractionsRate_;
        to_bitField1_ |= 0x20000000;
      }
      if (((from_bitField2_ & 0x00000004) != 0)) {
        result.currentModelAttributedConversionsFromInteractionsValuePerInteraction_ = currentModelAttributedConversionsFromInteractionsValuePerInteraction_;
        to_bitField1_ |= 0x40000000;
      }
      if (((from_bitField2_ & 0x00000008) != 0)) {
        result.currentModelAttributedConversionsValue_ = currentModelAttributedConversionsValue_;
        to_bitField1_ |= 0x80000000;
      }
      int to_bitField2_ = 0;
      if (((from_bitField2_ & 0x00000010) != 0)) {
        result.currentModelAttributedConversionsValuePerCost_ = currentModelAttributedConversionsValuePerCost_;
        to_bitField2_ |= 0x00000001;
      }
      if (((from_bitField2_ & 0x00000020) != 0)) {
        result.engagementRate_ = engagementRate_;
        to_bitField2_ |= 0x00000002;
      }
      if (((from_bitField2_ & 0x00000040) != 0)) {
        result.engagements_ = engagements_;
        to_bitField2_ |= 0x00000004;
      }
      if (((from_bitField2_ & 0x00000080) != 0)) {
        result.hotelAverageLeadValueMicros_ = hotelAverageLeadValueMicros_;
        to_bitField2_ |= 0x00000008;
      }
      if (((from_bitField2_ & 0x00000100) != 0)) {
        result.hotelCommissionRateMicros_ = hotelCommissionRateMicros_;
        to_bitField2_ |= 0x00000010;
      }
      if (((from_bitField2_ & 0x00000200) != 0)) {
        result.hotelExpectedCommissionCost_ = hotelExpectedCommissionCost_;
        to_bitField2_ |= 0x00000020;
      }
      if (((from_bitField2_ & 0x00000400) != 0)) {
        result.hotelPriceDifferencePercentage_ = hotelPriceDifferencePercentage_;
        to_bitField2_ |= 0x00000040;
      }
      if (((from_bitField2_ & 0x00000800) != 0)) {
        result.hotelEligibleImpressions_ = hotelEligibleImpressions_;
        to_bitField2_ |= 0x00000080;
      }
      if (((from_bitField2_ & 0x00001000) != 0)) {
        result.historicalCreativeQualityScore_ = historicalCreativeQualityScore_;
      }
      if (((from_bitField2_ & 0x00002000) != 0)) {
        result.historicalLandingPageQualityScore_ = historicalLandingPageQualityScore_;
      }
      if (((from_bitField2_ & 0x00004000) != 0)) {
        result.historicalQualityScore_ = historicalQualityScore_;
        to_bitField2_ |= 0x00000100;
      }
      if (((from_bitField2_ & 0x00008000) != 0)) {
        result.historicalSearchPredictedCtr_ = historicalSearchPredictedCtr_;
      }
      if (((from_bitField2_ & 0x00010000) != 0)) {
        result.gmailForwards_ = gmailForwards_;
        to_bitField2_ |= 0x00000200;
      }
      if (((from_bitField2_ & 0x00020000) != 0)) {
        result.gmailSaves_ = gmailSaves_;
        to_bitField2_ |= 0x00000400;
      }
      if (((from_bitField2_ & 0x00040000) != 0)) {
        result.gmailSecondaryClicks_ = gmailSecondaryClicks_;
        to_bitField2_ |= 0x00000800;
      }
      if (((from_bitField2_ & 0x00080000) != 0)) {
        result.impressionsFromStoreReach_ = impressionsFromStoreReach_;
        to_bitField2_ |= 0x00001000;
      }
      if (((from_bitField2_ & 0x00100000) != 0)) {
        result.impressions_ = impressions_;
        to_bitField2_ |= 0x00002000;
      }
      if (((from_bitField2_ & 0x00200000) != 0)) {
        result.interactionRate_ = interactionRate_;
        to_bitField2_ |= 0x00004000;
      }
      if (((from_bitField2_ & 0x00400000) != 0)) {
        result.interactions_ = interactions_;
        to_bitField2_ |= 0x00008000;
      }
      if (((from_bitField2_ & 0x01000000) != 0)) {
        result.invalidClickRate_ = invalidClickRate_;
        to_bitField2_ |= 0x00010000;
      }
      if (((from_bitField2_ & 0x02000000) != 0)) {
        result.invalidClicks_ = invalidClicks_;
        to_bitField2_ |= 0x00020000;
      }
      if (((from_bitField2_ & 0x04000000) != 0)) {
        result.messageChats_ = messageChats_;
        to_bitField2_ |= 0x00040000;
      }
      if (((from_bitField2_ & 0x08000000) != 0)) {
        result.messageImpressions_ = messageImpressions_;
        to_bitField2_ |= 0x00080000;
      }
      if (((from_bitField2_ & 0x10000000) != 0)) {
        result.messageChatRate_ = messageChatRate_;
        to_bitField2_ |= 0x00100000;
      }
      if (((from_bitField2_ & 0x20000000) != 0)) {
        result.mobileFriendlyClicksPercentage_ = mobileFriendlyClicksPercentage_;
        to_bitField2_ |= 0x00200000;
      }
      if (((from_bitField2_ & 0x40000000) != 0)) {
        result.optimizationScoreUplift_ = optimizationScoreUplift_;
        to_bitField2_ |= 0x00400000;
      }
      if (((from_bitField2_ & 0x80000000) != 0)) {
        result.optimizationScoreUrl_ = optimizationScoreUrl_;
        to_bitField2_ |= 0x00800000;
      }
      result.bitField1_ |= to_bitField1_;
      result.bitField2_ |= to_bitField2_;
    }

    private void buildPartial3(com.google.ads.googleads.v14.common.Metrics result) {
      int from_bitField3_ = bitField3_;
      int to_bitField2_ = 0;
      if (((from_bitField3_ & 0x00000001) != 0)) {
        result.organicClicks_ = organicClicks_;
        to_bitField2_ |= 0x01000000;
      }
      if (((from_bitField3_ & 0x00000002) != 0)) {
        result.organicClicksPerQuery_ = organicClicksPerQuery_;
        to_bitField2_ |= 0x02000000;
      }
      if (((from_bitField3_ & 0x00000004) != 0)) {
        result.organicImpressions_ = organicImpressions_;
        to_bitField2_ |= 0x04000000;
      }
      if (((from_bitField3_ & 0x00000008) != 0)) {
        result.organicImpressionsPerQuery_ = organicImpressionsPerQuery_;
        to_bitField2_ |= 0x08000000;
      }
      if (((from_bitField3_ & 0x00000010) != 0)) {
        result.organicQueries_ = organicQueries_;
        to_bitField2_ |= 0x10000000;
      }
      if (((from_bitField3_ & 0x00000020) != 0)) {
        result.percentNewVisitors_ = percentNewVisitors_;
        to_bitField2_ |= 0x20000000;
      }
      if (((from_bitField3_ & 0x00000040) != 0)) {
        result.phoneCalls_ = phoneCalls_;
        to_bitField2_ |= 0x40000000;
      }
      if (((from_bitField3_ & 0x00000080) != 0)) {
        result.phoneImpressions_ = phoneImpressions_;
        to_bitField2_ |= 0x80000000;
      }
      int to_bitField3_ = 0;
      if (((from_bitField3_ & 0x00000100) != 0)) {
        result.phoneThroughRate_ = phoneThroughRate_;
        to_bitField3_ |= 0x00000001;
      }
      if (((from_bitField3_ & 0x00000200) != 0)) {
        result.relativeCtr_ = relativeCtr_;
        to_bitField3_ |= 0x00000002;
      }
      if (((from_bitField3_ & 0x00000400) != 0)) {
        result.searchAbsoluteTopImpressionShare_ = searchAbsoluteTopImpressionShare_;
        to_bitField3_ |= 0x00000004;
      }
      if (((from_bitField3_ & 0x00000800) != 0)) {
        result.searchBudgetLostAbsoluteTopImpressionShare_ = searchBudgetLostAbsoluteTopImpressionShare_;
        to_bitField3_ |= 0x00000008;
      }
      if (((from_bitField3_ & 0x00001000) != 0)) {
        result.searchBudgetLostImpressionShare_ = searchBudgetLostImpressionShare_;
        to_bitField3_ |= 0x00000010;
      }
      if (((from_bitField3_ & 0x00002000) != 0)) {
        result.searchBudgetLostTopImpressionShare_ = searchBudgetLostTopImpressionShare_;
        to_bitField3_ |= 0x00000020;
      }
      if (((from_bitField3_ & 0x00004000) != 0)) {
        result.searchClickShare_ = searchClickShare_;
        to_bitField3_ |= 0x00000040;
      }
      if (((from_bitField3_ & 0x00008000) != 0)) {
        result.searchExactMatchImpressionShare_ = searchExactMatchImpressionShare_;
        to_bitField3_ |= 0x00000080;
      }
      if (((from_bitField3_ & 0x00010000) != 0)) {
        result.searchImpressionShare_ = searchImpressionShare_;
        to_bitField3_ |= 0x00000100;
      }
      if (((from_bitField3_ & 0x00020000) != 0)) {
        result.searchRankLostAbsoluteTopImpressionShare_ = searchRankLostAbsoluteTopImpressionShare_;
        to_bitField3_ |= 0x00000200;
      }
      if (((from_bitField3_ & 0x00040000) != 0)) {
        result.searchRankLostImpressionShare_ = searchRankLostImpressionShare_;
        to_bitField3_ |= 0x00000400;
      }
      if (((from_bitField3_ & 0x00080000) != 0)) {
        result.searchRankLostTopImpressionShare_ = searchRankLostTopImpressionShare_;
        to_bitField3_ |= 0x00000800;
      }
      if (((from_bitField3_ & 0x00100000) != 0)) {
        result.searchTopImpressionShare_ = searchTopImpressionShare_;
        to_bitField3_ |= 0x00001000;
      }
      if (((from_bitField3_ & 0x00200000) != 0)) {
        result.searchVolume_ = searchVolumeBuilder_ == null
            ? searchVolume_
            : searchVolumeBuilder_.build();
        to_bitField3_ |= 0x00002000;
      }
      if (((from_bitField3_ & 0x00400000) != 0)) {
        result.speedScore_ = speedScore_;
        to_bitField3_ |= 0x00004000;
      }
      if (((from_bitField3_ & 0x00800000) != 0)) {
        result.averageTargetCpaMicros_ = averageTargetCpaMicros_;
        to_bitField3_ |= 0x00008000;
      }
      if (((from_bitField3_ & 0x01000000) != 0)) {
        result.averageTargetRoas_ = averageTargetRoas_;
        to_bitField3_ |= 0x00010000;
      }
      if (((from_bitField3_ & 0x02000000) != 0)) {
        result.topImpressionPercentage_ = topImpressionPercentage_;
        to_bitField3_ |= 0x00020000;
      }
      if (((from_bitField3_ & 0x04000000) != 0)) {
        result.validAcceleratedMobilePagesClicksPercentage_ = validAcceleratedMobilePagesClicksPercentage_;
        to_bitField3_ |= 0x00040000;
      }
      if (((from_bitField3_ & 0x08000000) != 0)) {
        result.valuePerAllConversions_ = valuePerAllConversions_;
        to_bitField3_ |= 0x00080000;
      }
      if (((from_bitField3_ & 0x10000000) != 0)) {
        result.valuePerAllConversionsByConversionDate_ = valuePerAllConversionsByConversionDate_;
        to_bitField3_ |= 0x00100000;
      }
      if (((from_bitField3_ & 0x20000000) != 0)) {
        result.valuePerConversion_ = valuePerConversion_;
        to_bitField3_ |= 0x00200000;
      }
      if (((from_bitField3_ & 0x40000000) != 0)) {
        result.valuePerConversionsByConversionDate_ = valuePerConversionsByConversionDate_;
        to_bitField3_ |= 0x00400000;
      }
      if (((from_bitField3_ & 0x80000000) != 0)) {
        result.valuePerCurrentModelAttributedConversion_ = valuePerCurrentModelAttributedConversion_;
        to_bitField3_ |= 0x00800000;
      }
      result.bitField2_ |= to_bitField2_;
      result.bitField3_ |= to_bitField3_;
    }

    private void buildPartial4(com.google.ads.googleads.v14.common.Metrics result) {
      int from_bitField4_ = bitField4_;
      int to_bitField3_ = 0;
      if (((from_bitField4_ & 0x00000001) != 0)) {
        result.videoQuartileP100Rate_ = videoQuartileP100Rate_;
        to_bitField3_ |= 0x01000000;
      }
      if (((from_bitField4_ & 0x00000002) != 0)) {
        result.videoQuartileP25Rate_ = videoQuartileP25Rate_;
        to_bitField3_ |= 0x02000000;
      }
      if (((from_bitField4_ & 0x00000004) != 0)) {
        result.videoQuartileP50Rate_ = videoQuartileP50Rate_;
        to_bitField3_ |= 0x04000000;
      }
      if (((from_bitField4_ & 0x00000008) != 0)) {
        result.videoQuartileP75Rate_ = videoQuartileP75Rate_;
        to_bitField3_ |= 0x08000000;
      }
      if (((from_bitField4_ & 0x00000010) != 0)) {
        result.videoViewRate_ = videoViewRate_;
        to_bitField3_ |= 0x10000000;
      }
      if (((from_bitField4_ & 0x00000020) != 0)) {
        result.videoViews_ = videoViews_;
        to_bitField3_ |= 0x20000000;
      }
      if (((from_bitField4_ & 0x00000040) != 0)) {
        result.viewThroughConversions_ = viewThroughConversions_;
        to_bitField3_ |= 0x40000000;
      }
      if (((from_bitField4_ & 0x00000080) != 0)) {
        result.skAdNetworkConversions_ = skAdNetworkConversions_;
      }
      if (((from_bitField4_ & 0x00000100) != 0)) {
        result.publisherPurchasedClicks_ = publisherPurchasedClicks_;
      }
      if (((from_bitField4_ & 0x00000200) != 0)) {
        result.publisherOrganicClicks_ = publisherOrganicClicks_;
      }
      if (((from_bitField4_ & 0x00000400) != 0)) {
        result.publisherUnknownClicks_ = publisherUnknownClicks_;
      }
      if (((from_bitField4_ & 0x00000800) != 0)) {
        result.allConversionsFromLocationAssetClickToCall_ = allConversionsFromLocationAssetClickToCall_;
        to_bitField3_ |= 0x80000000;
      }
      int to_bitField4_ = 0;
      if (((from_bitField4_ & 0x00001000) != 0)) {
        result.allConversionsFromLocationAssetDirections_ = allConversionsFromLocationAssetDirections_;
        to_bitField4_ |= 0x00000001;
      }
      if (((from_bitField4_ & 0x00002000) != 0)) {
        result.allConversionsFromLocationAssetMenu_ = allConversionsFromLocationAssetMenu_;
        to_bitField4_ |= 0x00000002;
      }
      if (((from_bitField4_ & 0x00004000) != 0)) {
        result.allConversionsFromLocationAssetOrder_ = allConversionsFromLocationAssetOrder_;
        to_bitField4_ |= 0x00000004;
      }
      if (((from_bitField4_ & 0x00008000) != 0)) {
        result.allConversionsFromLocationAssetOtherEngagement_ = allConversionsFromLocationAssetOtherEngagement_;
        to_bitField4_ |= 0x00000008;
      }
      if (((from_bitField4_ & 0x00010000) != 0)) {
        result.allConversionsFromLocationAssetStoreVisits_ = allConversionsFromLocationAssetStoreVisits_;
        to_bitField4_ |= 0x00000010;
      }
      if (((from_bitField4_ & 0x00020000) != 0)) {
        result.allConversionsFromLocationAssetWebsite_ = allConversionsFromLocationAssetWebsite_;
        to_bitField4_ |= 0x00000020;
      }
      if (((from_bitField4_ & 0x00040000) != 0)) {
        result.eligibleImpressionsFromLocationAssetStoreReach_ = eligibleImpressionsFromLocationAssetStoreReach_;
        to_bitField4_ |= 0x00000040;
      }
      if (((from_bitField4_ & 0x00080000) != 0)) {
        result.viewThroughConversionsFromLocationAssetClickToCall_ = viewThroughConversionsFromLocationAssetClickToCall_;
        to_bitField4_ |= 0x00000080;
      }
      if (((from_bitField4_ & 0x00100000) != 0)) {
        result.viewThroughConversionsFromLocationAssetDirections_ = viewThroughConversionsFromLocationAssetDirections_;
        to_bitField4_ |= 0x00000100;
      }
      if (((from_bitField4_ & 0x00200000) != 0)) {
        result.viewThroughConversionsFromLocationAssetMenu_ = viewThroughConversionsFromLocationAssetMenu_;
        to_bitField4_ |= 0x00000200;
      }
      if (((from_bitField4_ & 0x00400000) != 0)) {
        result.viewThroughConversionsFromLocationAssetOrder_ = viewThroughConversionsFromLocationAssetOrder_;
        to_bitField4_ |= 0x00000400;
      }
      if (((from_bitField4_ & 0x00800000) != 0)) {
        result.viewThroughConversionsFromLocationAssetOtherEngagement_ = viewThroughConversionsFromLocationAssetOtherEngagement_;
        to_bitField4_ |= 0x00000800;
      }
      if (((from_bitField4_ & 0x01000000) != 0)) {
        result.viewThroughConversionsFromLocationAssetStoreVisits_ = viewThroughConversionsFromLocationAssetStoreVisits_;
        to_bitField4_ |= 0x00001000;
      }
      if (((from_bitField4_ & 0x02000000) != 0)) {
        result.viewThroughConversionsFromLocationAssetWebsite_ = viewThroughConversionsFromLocationAssetWebsite_;
        to_bitField4_ |= 0x00002000;
      }
      result.bitField3_ |= to_bitField3_;
      result.bitField4_ |= to_bitField4_;
    }

    @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.ads.googleads.v14.common.Metrics) {
        return mergeFrom((com.google.ads.googleads.v14.common.Metrics)other);
      } else {
        super.mergeFrom(other);
        return this;
      }
    }

    public Builder mergeFrom(com.google.ads.googleads.v14.common.Metrics other) {
      if (other == com.google.ads.googleads.v14.common.Metrics.getDefaultInstance()) return this;
      if (other.hasAbsoluteTopImpressionPercentage()) {
        setAbsoluteTopImpressionPercentage(other.getAbsoluteTopImpressionPercentage());
      }
      if (other.hasActiveViewCpm()) {
        setActiveViewCpm(other.getActiveViewCpm());
      }
      if (other.hasActiveViewCtr()) {
        setActiveViewCtr(other.getActiveViewCtr());
      }
      if (other.hasActiveViewImpressions()) {
        setActiveViewImpressions(other.getActiveViewImpressions());
      }
      if (other.hasActiveViewMeasurability()) {
        setActiveViewMeasurability(other.getActiveViewMeasurability());
      }
      if (other.hasActiveViewMeasurableCostMicros()) {
        setActiveViewMeasurableCostMicros(other.getActiveViewMeasurableCostMicros());
      }
      if (other.hasActiveViewMeasurableImpressions()) {
        setActiveViewMeasurableImpressions(other.getActiveViewMeasurableImpressions());
      }
      if (other.hasActiveViewViewability()) {
        setActiveViewViewability(other.getActiveViewViewability());
      }
      if (other.hasAllConversionsFromInteractionsRate()) {
        setAllConversionsFromInteractionsRate(other.getAllConversionsFromInteractionsRate());
      }
      if (other.hasAllConversionsValue()) {
        setAllConversionsValue(other.getAllConversionsValue());
      }
      if (other.getAllConversionsValueByConversionDate() != 0D) {
        setAllConversionsValueByConversionDate(other.getAllConversionsValueByConversionDate());
      }
      if (other.hasAllNewCustomerLifetimeValue()) {
        setAllNewCustomerLifetimeValue(other.getAllNewCustomerLifetimeValue());
      }
      if (other.hasAllConversions()) {
        setAllConversions(other.getAllConversions());
      }
      if (other.getAllConversionsByConversionDate() != 0D) {
        setAllConversionsByConversionDate(other.getAllConversionsByConversionDate());
      }
      if (other.hasAllConversionsValuePerCost()) {
        setAllConversionsValuePerCost(other.getAllConversionsValuePerCost());
      }
      if (other.hasAllConversionsFromClickToCall()) {
        setAllConversionsFromClickToCall(other.getAllConversionsFromClickToCall());
      }
      if (other.hasAllConversionsFromDirections()) {
        setAllConversionsFromDirections(other.getAllConversionsFromDirections());
      }
      if (other.hasAllConversionsFromInteractionsValuePerInteraction()) {
        setAllConversionsFromInteractionsValuePerInteraction(other.getAllConversionsFromInteractionsValuePerInteraction());
      }
      if (other.hasAllConversionsFromMenu()) {
        setAllConversionsFromMenu(other.getAllConversionsFromMenu());
      }
      if (other.hasAllConversionsFromOrder()) {
        setAllConversionsFromOrder(other.getAllConversionsFromOrder());
      }
      if (other.hasAllConversionsFromOtherEngagement()) {
        setAllConversionsFromOtherEngagement(other.getAllConversionsFromOtherEngagement());
      }
      if (other.hasAllConversionsFromStoreVisit()) {
        setAllConversionsFromStoreVisit(other.getAllConversionsFromStoreVisit());
      }
      if (other.hasAllConversionsFromStoreWebsite()) {
        setAllConversionsFromStoreWebsite(other.getAllConversionsFromStoreWebsite());
      }
      if (other.hasAuctionInsightSearchAbsoluteTopImpressionPercentage()) {
        setAuctionInsightSearchAbsoluteTopImpressionPercentage(other.getAuctionInsightSearchAbsoluteTopImpressionPercentage());
      }
      if (other.hasAuctionInsightSearchImpressionShare()) {
        setAuctionInsightSearchImpressionShare(other.getAuctionInsightSearchImpressionShare());
      }
      if (other.hasAuctionInsightSearchOutrankingShare()) {
        setAuctionInsightSearchOutrankingShare(other.getAuctionInsightSearchOutrankingShare());
      }
      if (other.hasAuctionInsightSearchOverlapRate()) {
        setAuctionInsightSearchOverlapRate(other.getAuctionInsightSearchOverlapRate());
      }
      if (other.hasAuctionInsightSearchPositionAboveRate()) {
        setAuctionInsightSearchPositionAboveRate(other.getAuctionInsightSearchPositionAboveRate());
      }
      if (other.hasAuctionInsightSearchTopImpressionPercentage()) {
        setAuctionInsightSearchTopImpressionPercentage(other.getAuctionInsightSearchTopImpressionPercentage());
      }
      if (other.hasAverageCost()) {
        setAverageCost(other.getAverageCost());
      }
      if (other.hasAverageCpc()) {
        setAverageCpc(other.getAverageCpc());
      }
      if (other.hasAverageCpe()) {
        setAverageCpe(other.getAverageCpe());
      }
      if (other.hasAverageCpm()) {
        setAverageCpm(other.getAverageCpm());
      }
      if (other.hasAverageCpv()) {
        setAverageCpv(other.getAverageCpv());
      }
      if (other.hasAveragePageViews()) {
        setAveragePageViews(other.getAveragePageViews());
      }
      if (other.hasAverageTimeOnSite()) {
        setAverageTimeOnSite(other.getAverageTimeOnSite());
      }
      if (other.hasBenchmarkAverageMaxCpc()) {
        setBenchmarkAverageMaxCpc(other.getBenchmarkAverageMaxCpc());
      }
      if (other.hasBiddableAppInstallConversions()) {
        setBiddableAppInstallConversions(other.getBiddableAppInstallConversions());
      }
      if (other.hasBiddableAppPostInstallConversions()) {
        setBiddableAppPostInstallConversions(other.getBiddableAppPostInstallConversions());
      }
      if (other.hasBenchmarkCtr()) {
        setBenchmarkCtr(other.getBenchmarkCtr());
      }
      if (other.hasBounceRate()) {
        setBounceRate(other.getBounceRate());
      }
      if (other.hasClicks()) {
        setClicks(other.getClicks());
      }
      if (other.hasCombinedClicks()) {
        setCombinedClicks(other.getCombinedClicks());
      }
      if (other.hasCombinedClicksPerQuery()) {
        setCombinedClicksPerQuery(other.getCombinedClicksPerQuery());
      }
      if (other.hasCombinedQueries()) {
        setCombinedQueries(other.getCombinedQueries());
      }
      if (other.hasContentBudgetLostImpressionShare()) {
        setContentBudgetLostImpressionShare(other.getContentBudgetLostImpressionShare());
      }
      if (other.hasContentImpressionShare()) {
        setContentImpressionShare(other.getContentImpressionShare());
      }
      if (other.hasConversionLastReceivedRequestDateTime()) {
        conversionLastReceivedRequestDateTime_ = other.conversionLastReceivedRequestDateTime_;
        bitField1_ |= 0x00008000;
        onChanged();
      }
      if (other.hasConversionLastConversionDate()) {
        conversionLastConversionDate_ = other.conversionLastConversionDate_;
        bitField1_ |= 0x00010000;
        onChanged();
      }
      if (other.hasContentRankLostImpressionShare()) {
        setContentRankLostImpressionShare(other.getContentRankLostImpressionShare());
      }
      if (other.hasConversionsFromInteractionsRate()) {
        setConversionsFromInteractionsRate(other.getConversionsFromInteractionsRate());
      }
      if (other.hasConversionsValue()) {
        setConversionsValue(other.getConversionsValue());
      }
      if (other.getConversionsValueByConversionDate() != 0D) {
        setConversionsValueByConversionDate(other.getConversionsValueByConversionDate());
      }
      if (other.hasNewCustomerLifetimeValue()) {
        setNewCustomerLifetimeValue(other.getNewCustomerLifetimeValue());
      }
      if (other.hasConversionsValuePerCost()) {
        setConversionsValuePerCost(other.getConversionsValuePerCost());
      }
      if (other.hasConversionsFromInteractionsValuePerInteraction()) {
        setConversionsFromInteractionsValuePerInteraction(other.getConversionsFromInteractionsValuePerInteraction());
      }
      if (other.hasConversions()) {
        setConversions(other.getConversions());
      }
      if (other.getConversionsByConversionDate() != 0D) {
        setConversionsByConversionDate(other.getConversionsByConversionDate());
      }
      if (other.hasCostMicros()) {
        setCostMicros(other.getCostMicros());
      }
      if (other.hasCostPerAllConversions()) {
        setCostPerAllConversions(other.getCostPerAllConversions());
      }
      if (other.hasCostPerConversion()) {
        setCostPerConversion(other.getCostPerConversion());
      }
      if (other.hasCostPerCurrentModelAttributedConversion()) {
        setCostPerCurrentModelAttributedConversion(other.getCostPerCurrentModelAttributedConversion());
      }
      if (other.hasCrossDeviceConversions()) {
        setCrossDeviceConversions(other.getCrossDeviceConversions());
      }
      if (other.hasCtr()) {
        setCtr(other.getCtr());
      }
      if (other.hasCurrentModelAttributedConversions()) {
        setCurrentModelAttributedConversions(other.getCurrentModelAttributedConversions());
      }
      if (other.hasCurrentModelAttributedConversionsFromInteractionsRate()) {
        setCurrentModelAttributedConversionsFromInteractionsRate(other.getCurrentModelAttributedConversionsFromInteractionsRate());
      }
      if (other.hasCurrentModelAttributedConversionsFromInteractionsValuePerInteraction()) {
        setCurrentModelAttributedConversionsFromInteractionsValuePerInteraction(other.getCurrentModelAttributedConversionsFromInteractionsValuePerInteraction());
      }
      if (other.hasCurrentModelAttributedConversionsValue()) {
        setCurrentModelAttributedConversionsValue(other.getCurrentModelAttributedConversionsValue());
      }
      if (other.hasCurrentModelAttributedConversionsValuePerCost()) {
        setCurrentModelAttributedConversionsValuePerCost(other.getCurrentModelAttributedConversionsValuePerCost());
      }
      if (other.hasEngagementRate()) {
        setEngagementRate(other.getEngagementRate());
      }
      if (other.hasEngagements()) {
        setEngagements(other.getEngagements());
      }
      if (other.hasHotelAverageLeadValueMicros()) {
        setHotelAverageLeadValueMicros(other.getHotelAverageLeadValueMicros());
      }
      if (other.hasHotelCommissionRateMicros()) {
        setHotelCommissionRateMicros(other.getHotelCommissionRateMicros());
      }
      if (other.hasHotelExpectedCommissionCost()) {
        setHotelExpectedCommissionCost(other.getHotelExpectedCommissionCost());
      }
      if (other.hasHotelPriceDifferencePercentage()) {
        setHotelPriceDifferencePercentage(other.getHotelPriceDifferencePercentage());
      }
      if (other.hasHotelEligibleImpressions()) {
        setHotelEligibleImpressions(other.getHotelEligibleImpressions());
      }
      if (other.historicalCreativeQualityScore_ != 0) {
        setHistoricalCreativeQualityScoreValue(other.getHistoricalCreativeQualityScoreValue());
      }
      if (other.historicalLandingPageQualityScore_ != 0) {
        setHistoricalLandingPageQualityScoreValue(other.getHistoricalLandingPageQualityScoreValue());
      }
      if (other.hasHistoricalQualityScore()) {
        setHistoricalQualityScore(other.getHistoricalQualityScore());
      }
      if (other.historicalSearchPredictedCtr_ != 0) {
        setHistoricalSearchPredictedCtrValue(other.getHistoricalSearchPredictedCtrValue());
      }
      if (other.hasGmailForwards()) {
        setGmailForwards(other.getGmailForwards());
      }
      if (other.hasGmailSaves()) {
        setGmailSaves(other.getGmailSaves());
      }
      if (other.hasGmailSecondaryClicks()) {
        setGmailSecondaryClicks(other.getGmailSecondaryClicks());
      }
      if (other.hasImpressionsFromStoreReach()) {
        setImpressionsFromStoreReach(other.getImpressionsFromStoreReach());
      }
      if (other.hasImpressions()) {
        setImpressions(other.getImpressions());
      }
      if (other.hasInteractionRate()) {
        setInteractionRate(other.getInteractionRate());
      }
      if (other.hasInteractions()) {
        setInteractions(other.getInteractions());
      }
      if (!other.interactionEventTypes_.isEmpty()) {
        if (interactionEventTypes_.isEmpty()) {
          interactionEventTypes_ = other.interactionEventTypes_;
          bitField2_ = (bitField2_ & ~0x00800000);
        } else {
          ensureInteractionEventTypesIsMutable();
          interactionEventTypes_.addAll(other.interactionEventTypes_);
        }
        onChanged();
      }
      if (other.hasInvalidClickRate()) {
        setInvalidClickRate(other.getInvalidClickRate());
      }
      if (other.hasInvalidClicks()) {
        setInvalidClicks(other.getInvalidClicks());
      }
      if (other.hasMessageChats()) {
        setMessageChats(other.getMessageChats());
      }
      if (other.hasMessageImpressions()) {
        setMessageImpressions(other.getMessageImpressions());
      }
      if (other.hasMessageChatRate()) {
        setMessageChatRate(other.getMessageChatRate());
      }
      if (other.hasMobileFriendlyClicksPercentage()) {
        setMobileFriendlyClicksPercentage(other.getMobileFriendlyClicksPercentage());
      }
      if (other.hasOptimizationScoreUplift()) {
        setOptimizationScoreUplift(other.getOptimizationScoreUplift());
      }
      if (other.hasOptimizationScoreUrl()) {
        optimizationScoreUrl_ = other.optimizationScoreUrl_;
        bitField2_ |= 0x80000000;
        onChanged();
      }
      if (other.hasOrganicClicks()) {
        setOrganicClicks(other.getOrganicClicks());
      }
      if (other.hasOrganicClicksPerQuery()) {
        setOrganicClicksPerQuery(other.getOrganicClicksPerQuery());
      }
      if (other.hasOrganicImpressions()) {
        setOrganicImpressions(other.getOrganicImpressions());
      }
      if (other.hasOrganicImpressionsPerQuery()) {
        setOrganicImpressionsPerQuery(other.getOrganicImpressionsPerQuery());
      }
      if (other.hasOrganicQueries()) {
        setOrganicQueries(other.getOrganicQueries());
      }
      if (other.hasPercentNewVisitors()) {
        setPercentNewVisitors(other.getPercentNewVisitors());
      }
      if (other.hasPhoneCalls()) {
        setPhoneCalls(other.getPhoneCalls());
      }
      if (other.hasPhoneImpressions()) {
        setPhoneImpressions(other.getPhoneImpressions());
      }
      if (other.hasPhoneThroughRate()) {
        setPhoneThroughRate(other.getPhoneThroughRate());
      }
      if (other.hasRelativeCtr()) {
        setRelativeCtr(other.getRelativeCtr());
      }
      if (other.hasSearchAbsoluteTopImpressionShare()) {
        setSearchAbsoluteTopImpressionShare(other.getSearchAbsoluteTopImpressionShare());
      }
      if (other.hasSearchBudgetLostAbsoluteTopImpressionShare()) {
        setSearchBudgetLostAbsoluteTopImpressionShare(other.getSearchBudgetLostAbsoluteTopImpressionShare());
      }
      if (other.hasSearchBudgetLostImpressionShare()) {
        setSearchBudgetLostImpressionShare(other.getSearchBudgetLostImpressionShare());
      }
      if (other.hasSearchBudgetLostTopImpressionShare()) {
        setSearchBudgetLostTopImpressionShare(other.getSearchBudgetLostTopImpressionShare());
      }
      if (other.hasSearchClickShare()) {
        setSearchClickShare(other.getSearchClickShare());
      }
      if (other.hasSearchExactMatchImpressionShare()) {
        setSearchExactMatchImpressionShare(other.getSearchExactMatchImpressionShare());
      }
      if (other.hasSearchImpressionShare()) {
        setSearchImpressionShare(other.getSearchImpressionShare());
      }
      if (other.hasSearchRankLostAbsoluteTopImpressionShare()) {
        setSearchRankLostAbsoluteTopImpressionShare(other.getSearchRankLostAbsoluteTopImpressionShare());
      }
      if (other.hasSearchRankLostImpressionShare()) {
        setSearchRankLostImpressionShare(other.getSearchRankLostImpressionShare());
      }
      if (other.hasSearchRankLostTopImpressionShare()) {
        setSearchRankLostTopImpressionShare(other.getSearchRankLostTopImpressionShare());
      }
      if (other.hasSearchTopImpressionShare()) {
        setSearchTopImpressionShare(other.getSearchTopImpressionShare());
      }
      if (other.hasSearchVolume()) {
        mergeSearchVolume(other.getSearchVolume());
      }
      if (other.hasSpeedScore()) {
        setSpeedScore(other.getSpeedScore());
      }
      if (other.hasAverageTargetCpaMicros()) {
        setAverageTargetCpaMicros(other.getAverageTargetCpaMicros());
      }
      if (other.hasAverageTargetRoas()) {
        setAverageTargetRoas(other.getAverageTargetRoas());
      }
      if (other.hasTopImpressionPercentage()) {
        setTopImpressionPercentage(other.getTopImpressionPercentage());
      }
      if (other.hasValidAcceleratedMobilePagesClicksPercentage()) {
        setValidAcceleratedMobilePagesClicksPercentage(other.getValidAcceleratedMobilePagesClicksPercentage());
      }
      if (other.hasValuePerAllConversions()) {
        setValuePerAllConversions(other.getValuePerAllConversions());
      }
      if (other.hasValuePerAllConversionsByConversionDate()) {
        setValuePerAllConversionsByConversionDate(other.getValuePerAllConversionsByConversionDate());
      }
      if (other.hasValuePerConversion()) {
        setValuePerConversion(other.getValuePerConversion());
      }
      if (other.hasValuePerConversionsByConversionDate()) {
        setValuePerConversionsByConversionDate(other.getValuePerConversionsByConversionDate());
      }
      if (other.hasValuePerCurrentModelAttributedConversion()) {
        setValuePerCurrentModelAttributedConversion(other.getValuePerCurrentModelAttributedConversion());
      }
      if (other.hasVideoQuartileP100Rate()) {
        setVideoQuartileP100Rate(other.getVideoQuartileP100Rate());
      }
      if (other.hasVideoQuartileP25Rate()) {
        setVideoQuartileP25Rate(other.getVideoQuartileP25Rate());
      }
      if (other.hasVideoQuartileP50Rate()) {
        setVideoQuartileP50Rate(other.getVideoQuartileP50Rate());
      }
      if (other.hasVideoQuartileP75Rate()) {
        setVideoQuartileP75Rate(other.getVideoQuartileP75Rate());
      }
      if (other.hasVideoViewRate()) {
        setVideoViewRate(other.getVideoViewRate());
      }
      if (other.hasVideoViews()) {
        setVideoViews(other.getVideoViews());
      }
      if (other.hasViewThroughConversions()) {
        setViewThroughConversions(other.getViewThroughConversions());
      }
      if (other.getSkAdNetworkConversions() != 0L) {
        setSkAdNetworkConversions(other.getSkAdNetworkConversions());
      }
      if (other.getPublisherPurchasedClicks() != 0L) {
        setPublisherPurchasedClicks(other.getPublisherPurchasedClicks());
      }
      if (other.getPublisherOrganicClicks() != 0L) {
        setPublisherOrganicClicks(other.getPublisherOrganicClicks());
      }
      if (other.getPublisherUnknownClicks() != 0L) {
        setPublisherUnknownClicks(other.getPublisherUnknownClicks());
      }
      if (other.hasAllConversionsFromLocationAssetClickToCall()) {
        setAllConversionsFromLocationAssetClickToCall(other.getAllConversionsFromLocationAssetClickToCall());
      }
      if (other.hasAllConversionsFromLocationAssetDirections()) {
        setAllConversionsFromLocationAssetDirections(other.getAllConversionsFromLocationAssetDirections());
      }
      if (other.hasAllConversionsFromLocationAssetMenu()) {
        setAllConversionsFromLocationAssetMenu(other.getAllConversionsFromLocationAssetMenu());
      }
      if (other.hasAllConversionsFromLocationAssetOrder()) {
        setAllConversionsFromLocationAssetOrder(other.getAllConversionsFromLocationAssetOrder());
      }
      if (other.hasAllConversionsFromLocationAssetOtherEngagement()) {
        setAllConversionsFromLocationAssetOtherEngagement(other.getAllConversionsFromLocationAssetOtherEngagement());
      }
      if (other.hasAllConversionsFromLocationAssetStoreVisits()) {
        setAllConversionsFromLocationAssetStoreVisits(other.getAllConversionsFromLocationAssetStoreVisits());
      }
      if (other.hasAllConversionsFromLocationAssetWebsite()) {
        setAllConversionsFromLocationAssetWebsite(other.getAllConversionsFromLocationAssetWebsite());
      }
      if (other.hasEligibleImpressionsFromLocationAssetStoreReach()) {
        setEligibleImpressionsFromLocationAssetStoreReach(other.getEligibleImpressionsFromLocationAssetStoreReach());
      }
      if (other.hasViewThroughConversionsFromLocationAssetClickToCall()) {
        setViewThroughConversionsFromLocationAssetClickToCall(other.getViewThroughConversionsFromLocationAssetClickToCall());
      }
      if (other.hasViewThroughConversionsFromLocationAssetDirections()) {
        setViewThroughConversionsFromLocationAssetDirections(other.getViewThroughConversionsFromLocationAssetDirections());
      }
      if (other.hasViewThroughConversionsFromLocationAssetMenu()) {
        setViewThroughConversionsFromLocationAssetMenu(other.getViewThroughConversionsFromLocationAssetMenu());
      }
      if (other.hasViewThroughConversionsFromLocationAssetOrder()) {
        setViewThroughConversionsFromLocationAssetOrder(other.getViewThroughConversionsFromLocationAssetOrder());
      }
      if (other.hasViewThroughConversionsFromLocationAssetOtherEngagement()) {
        setViewThroughConversionsFromLocationAssetOtherEngagement(other.getViewThroughConversionsFromLocationAssetOtherEngagement());
      }
      if (other.hasViewThroughConversionsFromLocationAssetStoreVisits()) {
        setViewThroughConversionsFromLocationAssetStoreVisits(other.getViewThroughConversionsFromLocationAssetStoreVisits());
      }
      if (other.hasViewThroughConversionsFromLocationAssetWebsite()) {
        setViewThroughConversionsFromLocationAssetWebsite(other.getViewThroughConversionsFromLocationAssetWebsite());
      }
      this.mergeUnknownFields(other.getUnknownFields());
      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 {
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 640: {
              historicalCreativeQualityScore_ = input.readEnum();
              bitField2_ |= 0x00001000;
              break;
            } // case 640
            case 648: {
              historicalLandingPageQualityScore_ = input.readEnum();
              bitField2_ |= 0x00002000;
              break;
            } // case 648
            case 664: {
              historicalSearchPredictedCtr_ = input.readEnum();
              bitField2_ |= 0x00008000;
              break;
            } // case 664
            case 800: {
              int tmpRaw = input.readEnum();
              ensureInteractionEventTypesIsMutable();
              interactionEventTypes_.add(tmpRaw);
              break;
            } // case 800
            case 802: {
              int length = input.readRawVarint32();
              int oldLimit = input.pushLimit(length);
              while(input.getBytesUntilLimit() > 0) {
                int tmpRaw = input.readEnum();
                ensureInteractionEventTypesIsMutable();
                interactionEventTypes_.add(tmpRaw);
              }
              input.popLimit(oldLimit);
              break;
            } // case 802
            case 1048: {
              clicks_ = input.readInt64();
              bitField1_ |= 0x00000200;
              break;
            } // case 1048
            case 1057: {
              videoQuartileP100Rate_ = input.readDouble();
              bitField4_ |= 0x00000001;
              break;
            } // case 1057
            case 1065: {
              videoQuartileP25Rate_ = input.readDouble();
              bitField4_ |= 0x00000002;
              break;
            } // case 1065
            case 1073: {
              videoQuartileP50Rate_ = input.readDouble();
              bitField4_ |= 0x00000004;
              break;
            } // case 1073
            case 1081: {
              videoQuartileP75Rate_ = input.readDouble();
              bitField4_ |= 0x00000008;
              break;
            } // case 1081
            case 1089: {
              searchAbsoluteTopImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00000400;
              break;
            } // case 1089
            case 1097: {
              searchBudgetLostAbsoluteTopImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00000800;
              break;
            } // case 1097
            case 1105: {
              searchBudgetLostImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00001000;
              break;
            } // case 1105
            case 1113: {
              searchBudgetLostTopImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00002000;
              break;
            } // case 1113
            case 1121: {
              searchClickShare_ = input.readDouble();
              bitField3_ |= 0x00004000;
              break;
            } // case 1121
            case 1129: {
              searchExactMatchImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00008000;
              break;
            } // case 1129
            case 1137: {
              searchImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00010000;
              break;
            } // case 1137
            case 1145: {
              searchRankLostAbsoluteTopImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00020000;
              break;
            } // case 1145
            case 1153: {
              searchRankLostImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00040000;
              break;
            } // case 1153
            case 1161: {
              searchRankLostTopImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00080000;
              break;
            } // case 1161
            case 1169: {
              searchTopImpressionShare_ = input.readDouble();
              bitField3_ |= 0x00100000;
              break;
            } // case 1169
            case 1176: {
              speedScore_ = input.readInt64();
              bitField3_ |= 0x00400000;
              break;
            } // case 1176
            case 1185: {
              topImpressionPercentage_ = input.readDouble();
              bitField3_ |= 0x02000000;
              break;
            } // case 1185
            case 1193: {
              validAcceleratedMobilePagesClicksPercentage_ = input.readDouble();
              bitField3_ |= 0x04000000;
              break;
            } // case 1193
            case 1201: {
              valuePerAllConversions_ = input.readDouble();
              bitField3_ |= 0x08000000;
              break;
            } // case 1201
            case 1209: {
              valuePerConversion_ = input.readDouble();
              bitField3_ |= 0x20000000;
              break;
            } // case 1209
            case 1217: {
              valuePerCurrentModelAttributedConversion_ = input.readDouble();
              bitField3_ |= 0x80000000;
              break;
            } // case 1217
            case 1225: {
              videoViewRate_ = input.readDouble();
              bitField4_ |= 0x00000010;
              break;
            } // case 1225
            case 1232: {
              videoViews_ = input.readInt64();
              bitField4_ |= 0x00000020;
              break;
            } // case 1232
            case 1240: {
              viewThroughConversions_ = input.readInt64();
              bitField4_ |= 0x00000040;
              break;
            } // case 1240
            case 1248: {
              combinedClicks_ = input.readInt64();
              bitField1_ |= 0x00000400;
              break;
            } // case 1248
            case 1257: {
              combinedClicksPerQuery_ = input.readDouble();
              bitField1_ |= 0x00000800;
              break;
            } // case 1257
            case 1264: {
              combinedQueries_ = input.readInt64();
              bitField1_ |= 0x00001000;
              break;
            } // case 1264
            case 1273: {
              contentBudgetLostImpressionShare_ = input.readDouble();
              bitField1_ |= 0x00002000;
              break;
            } // case 1273
            case 1281: {
              contentImpressionShare_ = input.readDouble();
              bitField1_ |= 0x00004000;
              break;
            } // case 1281
            case 1290: {
              conversionLastReceivedRequestDateTime_ = input.readStringRequireUtf8();
              bitField1_ |= 0x00008000;
              break;
            } // case 1290
            case 1298: {
              conversionLastConversionDate_ = input.readStringRequireUtf8();
              bitField1_ |= 0x00010000;
              break;
            } // case 1298
            case 1305: {
              contentRankLostImpressionShare_ = input.readDouble();
              bitField1_ |= 0x00020000;
              break;
            } // case 1305
            case 1313: {
              conversionsFromInteractionsRate_ = input.readDouble();
              bitField1_ |= 0x00040000;
              break;
            } // case 1313
            case 1321: {
              conversionsValue_ = input.readDouble();
              bitField1_ |= 0x00080000;
              break;
            } // case 1321
            case 1329: {
              conversionsValuePerCost_ = input.readDouble();
              bitField1_ |= 0x00400000;
              break;
            } // case 1329
            case 1337: {
              conversionsFromInteractionsValuePerInteraction_ = input.readDouble();
              bitField1_ |= 0x00800000;
              break;
            } // case 1337
            case 1345: {
              conversions_ = input.readDouble();
              bitField1_ |= 0x01000000;
              break;
            } // case 1345
            case 1352: {
              costMicros_ = input.readInt64();
              bitField1_ |= 0x04000000;
              break;
            } // case 1352
            case 1361: {
              costPerAllConversions_ = input.readDouble();
              bitField1_ |= 0x08000000;
              break;
            } // case 1361
            case 1369: {
              costPerConversion_ = input.readDouble();
              bitField1_ |= 0x10000000;
              break;
            } // case 1369
            case 1377: {
              costPerCurrentModelAttributedConversion_ = input.readDouble();
              bitField1_ |= 0x20000000;
              break;
            } // case 1377
            case 1385: {
              crossDeviceConversions_ = input.readDouble();
              bitField1_ |= 0x40000000;
              break;
            } // case 1385
            case 1393: {
              ctr_ = input.readDouble();
              bitField1_ |= 0x80000000;
              break;
            } // case 1393
            case 1401: {
              currentModelAttributedConversions_ = input.readDouble();
              bitField2_ |= 0x00000001;
              break;
            } // case 1401
            case 1409: {
              currentModelAttributedConversionsFromInteractionsRate_ = input.readDouble();
              bitField2_ |= 0x00000002;
              break;
            } // case 1409
            case 1417: {
              currentModelAttributedConversionsFromInteractionsValuePerInteraction_ = input.readDouble();
              bitField2_ |= 0x00000004;
              break;
            } // case 1417
            case 1425: {
              currentModelAttributedConversionsValue_ = input.readDouble();
              bitField2_ |= 0x00000008;
              break;
            } // case 1425
            case 1433: {
              currentModelAttributedConversionsValuePerCost_ = input.readDouble();
              bitField2_ |= 0x00000010;
              break;
            } // case 1433
            case 1441: {
              engagementRate_ = input.readDouble();
              bitField2_ |= 0x00000020;
              break;
            } // case 1441
            case 1448: {
              engagements_ = input.readInt64();
              bitField2_ |= 0x00000040;
              break;
            } // case 1448
            case 1465: {
              absoluteTopImpressionPercentage_ = input.readDouble();
              bitField0_ |= 0x00000001;
              break;
            } // case 1465
            case 1473: {
              activeViewCpm_ = input.readDouble();
              bitField0_ |= 0x00000002;
              break;
            } // case 1473
            case 1481: {
              activeViewCtr_ = input.readDouble();
              bitField0_ |= 0x00000004;
              break;
            } // case 1481
            case 1488: {
              activeViewImpressions_ = input.readInt64();
              bitField0_ |= 0x00000008;
              break;
            } // case 1488
            case 1497: {
              activeViewMeasurability_ = input.readDouble();
              bitField0_ |= 0x00000010;
              break;
            } // case 1497
            case 1504: {
              activeViewMeasurableCostMicros_ = input.readInt64();
              bitField0_ |= 0x00000020;
              break;
            } // case 1504
            case 1512: {
              activeViewMeasurableImpressions_ = input.readInt64();
              bitField0_ |= 0x00000040;
              break;
            } // case 1512
            case 1521: {
              activeViewViewability_ = input.readDouble();
              bitField0_ |= 0x00000080;
              break;
            } // case 1521
            case 1529: {
              allConversionsFromInteractionsRate_ = input.readDouble();
              bitField0_ |= 0x00000100;
              break;
            } // case 1529
            case 1537: {
              allConversionsValue_ = input.readDouble();
              bitField0_ |= 0x00000200;
              break;
            } // case 1537
            case 1545: {
              allConversions_ = input.readDouble();
              bitField0_ |= 0x00001000;
              break;
            } // case 1545
            case 1553: {
              allConversionsValuePerCost_ = input.readDouble();
              bitField0_ |= 0x00004000;
              break;
            } // case 1553
            case 1561: {
              allConversionsFromClickToCall_ = input.readDouble();
              bitField0_ |= 0x00008000;
              break;
            } // case 1561
            case 1569: {
              allConversionsFromDirections_ = input.readDouble();
              bitField0_ |= 0x00010000;
              break;
            } // case 1569
            case 1577: {
              allConversionsFromInteractionsValuePerInteraction_ = input.readDouble();
              bitField0_ |= 0x00020000;
              break;
            } // case 1577
            case 1585: {
              allConversionsFromMenu_ = input.readDouble();
              bitField0_ |= 0x00040000;
              break;
            } // case 1585
            case 1593: {
              allConversionsFromOrder_ = input.readDouble();
              bitField0_ |= 0x00080000;
              break;
            } // case 1593
            case 1601: {
              allConversionsFromOtherEngagement_ = input.readDouble();
              bitField0_ |= 0x00100000;
              break;
            } // case 1601
            case 1609: {
              allConversionsFromStoreVisit_ = input.readDouble();
              bitField0_ |= 0x00200000;
              break;
            } // case 1609
            case 1617: {
              allConversionsFromStoreWebsite_ = input.readDouble();
              bitField0_ |= 0x00400000;
              break;
            } // case 1617
            case 1625: {
              averageCost_ = input.readDouble();
              bitField0_ |= 0x20000000;
              break;
            } // case 1625
            case 1633: {
              averageCpc_ = input.readDouble();
              bitField0_ |= 0x40000000;
              break;
            } // case 1633
            case 1641: {
              averageCpe_ = input.readDouble();
              bitField0_ |= 0x80000000;
              break;
            } // case 1641
            case 1649: {
              averageCpm_ = input.readDouble();
              bitField1_ |= 0x00000001;
              break;
            } // case 1649
            case 1657: {
              averageCpv_ = input.readDouble();
              bitField1_ |= 0x00000002;
              break;
            } // case 1657
            case 1665: {
              averagePageViews_ = input.readDouble();
              bitField1_ |= 0x00000004;
              break;
            } // case 1665
            case 1673: {
              averageTimeOnSite_ = input.readDouble();
              bitField1_ |= 0x00000008;
              break;
            } // case 1673
            case 1681: {
              benchmarkAverageMaxCpc_ = input.readDouble();
              bitField1_ |= 0x00000010;
              break;
            } // case 1681
            case 1689: {
              benchmarkCtr_ = input.readDouble();
              bitField1_ |= 0x00000080;
              break;
            } // case 1689
            case 1697: {
              bounceRate_ = input.readDouble();
              bitField1_ |= 0x00000100;
              break;
            } // case 1697
            case 1705: {
              hotelAverageLeadValueMicros_ = input.readDouble();
              bitField2_ |= 0x00000080;
              break;
            } // case 1705
            case 1713: {
              hotelPriceDifferencePercentage_ = input.readDouble();
              bitField2_ |= 0x00000400;
              break;
            } // case 1713
            case 1720: {
              hotelEligibleImpressions_ = input.readInt64();
              bitField2_ |= 0x00000800;
              break;
            } // case 1720
            case 1728: {
              historicalQualityScore_ = input.readInt64();
              bitField2_ |= 0x00004000;
              break;
            } // case 1728
            case 1736: {
              gmailForwards_ = input.readInt64();
              bitField2_ |= 0x00010000;
              break;
            } // case 1736
            case 1744: {
              gmailSaves_ = input.readInt64();
              bitField2_ |= 0x00020000;
              break;
            } // case 1744
            case 1752: {
              gmailSecondaryClicks_ = input.readInt64();
              bitField2_ |= 0x00040000;
              break;
            } // case 1752
            case 1760: {
              impressionsFromStoreReach_ = input.readInt64();
              bitField2_ |= 0x00080000;
              break;
            } // case 1760
            case 1768: {
              impressions_ = input.readInt64();
              bitField2_ |= 0x00100000;
              break;
            } // case 1768
            case 1777: {
              interactionRate_ = input.readDouble();
              bitField2_ |= 0x00200000;
              break;
            } // case 1777
            case 1784: {
              interactions_ = input.readInt64();
              bitField2_ |= 0x00400000;
              break;
            } // case 1784
            case 1793: {
              invalidClickRate_ = input.readDouble();
              bitField2_ |= 0x01000000;
              break;
            } // case 1793
            case 1800: {
              invalidClicks_ = input.readInt64();
              bitField2_ |= 0x02000000;
              break;
            } // case 1800
            case 1808: {
              messageChats_ = input.readInt64();
              bitField2_ |= 0x04000000;
              break;
            } // case 1808
            case 1816: {
              messageImpressions_ = input.readInt64();
              bitField2_ |= 0x08000000;
              break;
            } // case 1816
            case 1825: {
              messageChatRate_ = input.readDouble();
              bitField2_ |= 0x10000000;
              break;
            } // case 1825
            case 1833: {
              mobileFriendlyClicksPercentage_ = input.readDouble();
              bitField2_ |= 0x20000000;
              break;
            } // case 1833
            case 1840: {
              organicClicks_ = input.readInt64();
              bitField3_ |= 0x00000001;
              break;
            } // case 1840
            case 1849: {
              organicClicksPerQuery_ = input.readDouble();
              bitField3_ |= 0x00000002;
              break;
            } // case 1849
            case 1856: {
              organicImpressions_ = input.readInt64();
              bitField3_ |= 0x00000004;
              break;
            } // case 1856
            case 1865: {
              organicImpressionsPerQuery_ = input.readDouble();
              bitField3_ |= 0x00000008;
              break;
            } // case 1865
            case 1872: {
              organicQueries_ = input.readInt64();
              bitField3_ |= 0x00000010;
              break;
            } // case 1872
            case 1881: {
              percentNewVisitors_ = input.readDouble();
              bitField3_ |= 0x00000020;
              break;
            } // case 1881
            case 1888: {
              phoneCalls_ = input.readInt64();
              bitField3_ |= 0x00000040;
              break;
            } // case 1888
            case 1896: {
              phoneImpressions_ = input.readInt64();
              bitField3_ |= 0x00000080;
              break;
            } // case 1896
            case 1905: {
              phoneThroughRate_ = input.readDouble();
              bitField3_ |= 0x00000100;
              break;
            } // case 1905
            case 1913: {
              relativeCtr_ = input.readDouble();
              bitField3_ |= 0x00000200;
              break;
            } // case 1913
            case 1921: {
              allConversionsValueByConversionDate_ = input.readDouble();
              bitField0_ |= 0x00000400;
              break;
            } // case 1921
            case 1929: {
              allConversionsByConversionDate_ = input.readDouble();
              bitField0_ |= 0x00002000;
              break;
            } // case 1929
            case 1937: {
              conversionsValueByConversionDate_ = input.readDouble();
              bitField1_ |= 0x00100000;
              break;
            } // case 1937
            case 1945: {
              conversionsByConversionDate_ = input.readDouble();
              bitField1_ |= 0x02000000;
              break;
            } // case 1945
            case 1953: {
              valuePerAllConversionsByConversionDate_ = input.readDouble();
              bitField3_ |= 0x10000000;
              break;
            } // case 1953
            case 1961: {
              valuePerConversionsByConversionDate_ = input.readDouble();
              bitField3_ |= 0x40000000;
              break;
            } // case 1961
            case 1968: {
              skAdNetworkConversions_ = input.readInt64();
              bitField4_ |= 0x00000080;
              break;
            } // case 1968
            case 1977: {
              optimizationScoreUplift_ = input.readDouble();
              bitField2_ |= 0x40000000;
              break;
            } // case 1977
            case 1986: {
              optimizationScoreUrl_ = input.readStringRequireUtf8();
              bitField2_ |= 0x80000000;
              break;
            } // case 1986
            case 2001: {
              averageTargetRoas_ = input.readDouble();
              bitField3_ |= 0x01000000;
              break;
            } // case 2001
            case 2033: {
              biddableAppInstallConversions_ = input.readDouble();
              bitField1_ |= 0x00000020;
              break;
            } // case 2033
            case 2041: {
              biddableAppPostInstallConversions_ = input.readDouble();
              bitField1_ |= 0x00000040;
              break;
            } // case 2041
            case 2048: {
              hotelCommissionRateMicros_ = input.readInt64();
              bitField2_ |= 0x00000100;
              break;
            } // case 2048
            case 2057: {
              hotelExpectedCommissionCost_ = input.readDouble();
              bitField2_ |= 0x00000200;
              break;
            } // case 2057
            case 2065: {
              auctionInsightSearchAbsoluteTopImpressionPercentage_ = input.readDouble();
              bitField0_ |= 0x00800000;
              break;
            } // case 2065
            case 2073: {
              auctionInsightSearchImpressionShare_ = input.readDouble();
              bitField0_ |= 0x01000000;
              break;
            } // case 2073
            case 2081: {
              auctionInsightSearchOutrankingShare_ = input.readDouble();
              bitField0_ |= 0x02000000;
              break;
            } // case 2081
            case 2089: {
              auctionInsightSearchOverlapRate_ = input.readDouble();
              bitField0_ |= 0x04000000;
              break;
            } // case 2089
            case 2097: {
              auctionInsightSearchPositionAboveRate_ = input.readDouble();
              bitField0_ |= 0x08000000;
              break;
            } // case 2097
            case 2105: {
              auctionInsightSearchTopImpressionPercentage_ = input.readDouble();
              bitField0_ |= 0x10000000;
              break;
            } // case 2105
            case 2112: {
              publisherPurchasedClicks_ = input.readInt64();
              bitField4_ |= 0x00000100;
              break;
            } // case 2112
            case 2120: {
              publisherOrganicClicks_ = input.readInt64();
              bitField4_ |= 0x00000200;
              break;
            } // case 2120
            case 2128: {
              publisherUnknownClicks_ = input.readInt64();
              bitField4_ |= 0x00000400;
              break;
            } // case 2128
            case 2137: {
              allConversionsFromLocationAssetClickToCall_ = input.readDouble();
              bitField4_ |= 0x00000800;
              break;
            } // case 2137
            case 2145: {
              allConversionsFromLocationAssetDirections_ = input.readDouble();
              bitField4_ |= 0x00001000;
              break;
            } // case 2145
            case 2153: {
              allConversionsFromLocationAssetMenu_ = input.readDouble();
              bitField4_ |= 0x00002000;
              break;
            } // case 2153
            case 2161: {
              allConversionsFromLocationAssetOrder_ = input.readDouble();
              bitField4_ |= 0x00004000;
              break;
            } // case 2161
            case 2169: {
              allConversionsFromLocationAssetOtherEngagement_ = input.readDouble();
              bitField4_ |= 0x00008000;
              break;
            } // case 2169
            case 2177: {
              allConversionsFromLocationAssetStoreVisits_ = input.readDouble();
              bitField4_ |= 0x00010000;
              break;
            } // case 2177
            case 2185: {
              allConversionsFromLocationAssetWebsite_ = input.readDouble();
              bitField4_ |= 0x00020000;
              break;
            } // case 2185
            case 2192: {
              eligibleImpressionsFromLocationAssetStoreReach_ = input.readInt64();
              bitField4_ |= 0x00040000;
              break;
            } // case 2192
            case 2201: {
              viewThroughConversionsFromLocationAssetClickToCall_ = input.readDouble();
              bitField4_ |= 0x00080000;
              break;
            } // case 2201
            case 2209: {
              viewThroughConversionsFromLocationAssetDirections_ = input.readDouble();
              bitField4_ |= 0x00100000;
              break;
            } // case 2209
            case 2217: {
              viewThroughConversionsFromLocationAssetMenu_ = input.readDouble();
              bitField4_ |= 0x00200000;
              break;
            } // case 2217
            case 2225: {
              viewThroughConversionsFromLocationAssetOrder_ = input.readDouble();
              bitField4_ |= 0x00400000;
              break;
            } // case 2225
            case 2233: {
              viewThroughConversionsFromLocationAssetOtherEngagement_ = input.readDouble();
              bitField4_ |= 0x00800000;
              break;
            } // case 2233
            case 2241: {
              viewThroughConversionsFromLocationAssetStoreVisits_ = input.readDouble();
              bitField4_ |= 0x01000000;
              break;
            } // case 2241
            case 2249: {
              viewThroughConversionsFromLocationAssetWebsite_ = input.readDouble();
              bitField4_ |= 0x02000000;
              break;
            } // case 2249
            case 2320: {
              averageTargetCpaMicros_ = input.readInt64();
              bitField3_ |= 0x00800000;
              break;
            } // case 2320
            case 2345: {
              newCustomerLifetimeValue_ = input.readDouble();
              bitField1_ |= 0x00200000;
              break;
            } // case 2345
            case 2353: {
              allNewCustomerLifetimeValue_ = input.readDouble();
              bitField0_ |= 0x00000800;
              break;
            } // case 2353
            case 2362: {
              input.readMessage(
                  getSearchVolumeFieldBuilder().getBuilder(),
                  extensionRegistry);
              bitField3_ |= 0x00200000;
              break;
            } // case 2362
            default: {
              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                done = true; // was an endgroup tag
              }
              break;
            } // default:
          } // switch (tag)
        } // while (!done)
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.unwrapIOException();
      } finally {
        onChanged();
      } // finally
      return this;
    }
    private int bitField0_;
    private int bitField1_;
    private int bitField2_;
    private int bitField3_;
    private int bitField4_;

    private double absoluteTopImpressionPercentage_ ;
    /**
     * <pre>
     * The percent of your ad impressions that are shown as the very first ad
     * above the organic search results.
     * </pre>
     *
     * <code>optional double absolute_top_impression_percentage = 183;</code>
     * @return Whether the absoluteTopImpressionPercentage field is set.
     */
    @java.lang.Override
    public boolean hasAbsoluteTopImpressionPercentage() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * The percent of your ad impressions that are shown as the very first ad
     * above the organic search results.
     * </pre>
     *
     * <code>optional double absolute_top_impression_percentage = 183;</code>
     * @return The absoluteTopImpressionPercentage.
     */
    @java.lang.Override
    public double getAbsoluteTopImpressionPercentage() {
      return absoluteTopImpressionPercentage_;
    }
    /**
     * <pre>
     * The percent of your ad impressions that are shown as the very first ad
     * above the organic search results.
     * </pre>
     *
     * <code>optional double absolute_top_impression_percentage = 183;</code>
     * @param value The absoluteTopImpressionPercentage to set.
     * @return This builder for chaining.
     */
    public Builder setAbsoluteTopImpressionPercentage(double value) {

      absoluteTopImpressionPercentage_ = value;
      bitField0_ |= 0x00000001;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The percent of your ad impressions that are shown as the very first ad
     * above the organic search results.
     * </pre>
     *
     * <code>optional double absolute_top_impression_percentage = 183;</code>
     * @return This builder for chaining.
     */
    public Builder clearAbsoluteTopImpressionPercentage() {
      bitField0_ = (bitField0_ & ~0x00000001);
      absoluteTopImpressionPercentage_ = 0D;
      onChanged();
      return this;
    }

    private double activeViewCpm_ ;
    /**
     * <pre>
     * Average cost of viewable impressions (`active_view_impressions`).
     * </pre>
     *
     * <code>optional double active_view_cpm = 184;</code>
     * @return Whether the activeViewCpm field is set.
     */
    @java.lang.Override
    public boolean hasActiveViewCpm() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Average cost of viewable impressions (`active_view_impressions`).
     * </pre>
     *
     * <code>optional double active_view_cpm = 184;</code>
     * @return The activeViewCpm.
     */
    @java.lang.Override
    public double getActiveViewCpm() {
      return activeViewCpm_;
    }
    /**
     * <pre>
     * Average cost of viewable impressions (`active_view_impressions`).
     * </pre>
     *
     * <code>optional double active_view_cpm = 184;</code>
     * @param value The activeViewCpm to set.
     * @return This builder for chaining.
     */
    public Builder setActiveViewCpm(double value) {

      activeViewCpm_ = value;
      bitField0_ |= 0x00000002;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Average cost of viewable impressions (`active_view_impressions`).
     * </pre>
     *
     * <code>optional double active_view_cpm = 184;</code>
     * @return This builder for chaining.
     */
    public Builder clearActiveViewCpm() {
      bitField0_ = (bitField0_ & ~0x00000002);
      activeViewCpm_ = 0D;
      onChanged();
      return this;
    }

    private double activeViewCtr_ ;
    /**
     * <pre>
     * Active view measurable clicks divided by active view viewable impressions.
     *
     * This metric is reported only for the Display Network.
     * </pre>
     *
     * <code>optional double active_view_ctr = 185;</code>
     * @return Whether the activeViewCtr field is set.
     */
    @java.lang.Override
    public boolean hasActiveViewCtr() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Active view measurable clicks divided by active view viewable impressions.
     *
     * This metric is reported only for the Display Network.
     * </pre>
     *
     * <code>optional double active_view_ctr = 185;</code>
     * @return The activeViewCtr.
     */
    @java.lang.Override
    public double getActiveViewCtr() {
      return activeViewCtr_;
    }
    /**
     * <pre>
     * Active view measurable clicks divided by active view viewable impressions.
     *
     * This metric is reported only for the Display Network.
     * </pre>
     *
     * <code>optional double active_view_ctr = 185;</code>
     * @param value The activeViewCtr to set.
     * @return This builder for chaining.
     */
    public Builder setActiveViewCtr(double value) {

      activeViewCtr_ = value;
      bitField0_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Active view measurable clicks divided by active view viewable impressions.
     *
     * This metric is reported only for the Display Network.
     * </pre>
     *
     * <code>optional double active_view_ctr = 185;</code>
     * @return This builder for chaining.
     */
    public Builder clearActiveViewCtr() {
      bitField0_ = (bitField0_ & ~0x00000004);
      activeViewCtr_ = 0D;
      onChanged();
      return this;
    }

    private long activeViewImpressions_ ;
    /**
     * <pre>
     * A measurement of how often your ad has become viewable on a Display
     * Network site.
     * </pre>
     *
     * <code>optional int64 active_view_impressions = 186;</code>
     * @return Whether the activeViewImpressions field is set.
     */
    @java.lang.Override
    public boolean hasActiveViewImpressions() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * A measurement of how often your ad has become viewable on a Display
     * Network site.
     * </pre>
     *
     * <code>optional int64 active_view_impressions = 186;</code>
     * @return The activeViewImpressions.
     */
    @java.lang.Override
    public long getActiveViewImpressions() {
      return activeViewImpressions_;
    }
    /**
     * <pre>
     * A measurement of how often your ad has become viewable on a Display
     * Network site.
     * </pre>
     *
     * <code>optional int64 active_view_impressions = 186;</code>
     * @param value The activeViewImpressions to set.
     * @return This builder for chaining.
     */
    public Builder setActiveViewImpressions(long value) {

      activeViewImpressions_ = value;
      bitField0_ |= 0x00000008;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * A measurement of how often your ad has become viewable on a Display
     * Network site.
     * </pre>
     *
     * <code>optional int64 active_view_impressions = 186;</code>
     * @return This builder for chaining.
     */
    public Builder clearActiveViewImpressions() {
      bitField0_ = (bitField0_ & ~0x00000008);
      activeViewImpressions_ = 0L;
      onChanged();
      return this;
    }

    private double activeViewMeasurability_ ;
    /**
     * <pre>
     * The ratio of impressions that could be measured by Active View over the
     * number of served impressions.
     * </pre>
     *
     * <code>optional double active_view_measurability = 187;</code>
     * @return Whether the activeViewMeasurability field is set.
     */
    @java.lang.Override
    public boolean hasActiveViewMeasurability() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * The ratio of impressions that could be measured by Active View over the
     * number of served impressions.
     * </pre>
     *
     * <code>optional double active_view_measurability = 187;</code>
     * @return The activeViewMeasurability.
     */
    @java.lang.Override
    public double getActiveViewMeasurability() {
      return activeViewMeasurability_;
    }
    /**
     * <pre>
     * The ratio of impressions that could be measured by Active View over the
     * number of served impressions.
     * </pre>
     *
     * <code>optional double active_view_measurability = 187;</code>
     * @param value The activeViewMeasurability to set.
     * @return This builder for chaining.
     */
    public Builder setActiveViewMeasurability(double value) {

      activeViewMeasurability_ = value;
      bitField0_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The ratio of impressions that could be measured by Active View over the
     * number of served impressions.
     * </pre>
     *
     * <code>optional double active_view_measurability = 187;</code>
     * @return This builder for chaining.
     */
    public Builder clearActiveViewMeasurability() {
      bitField0_ = (bitField0_ & ~0x00000010);
      activeViewMeasurability_ = 0D;
      onChanged();
      return this;
    }

    private long activeViewMeasurableCostMicros_ ;
    /**
     * <pre>
     * The cost of the impressions you received that were measurable by Active
     * View.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_cost_micros = 188;</code>
     * @return Whether the activeViewMeasurableCostMicros field is set.
     */
    @java.lang.Override
    public boolean hasActiveViewMeasurableCostMicros() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * The cost of the impressions you received that were measurable by Active
     * View.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_cost_micros = 188;</code>
     * @return The activeViewMeasurableCostMicros.
     */
    @java.lang.Override
    public long getActiveViewMeasurableCostMicros() {
      return activeViewMeasurableCostMicros_;
    }
    /**
     * <pre>
     * The cost of the impressions you received that were measurable by Active
     * View.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_cost_micros = 188;</code>
     * @param value The activeViewMeasurableCostMicros to set.
     * @return This builder for chaining.
     */
    public Builder setActiveViewMeasurableCostMicros(long value) {

      activeViewMeasurableCostMicros_ = value;
      bitField0_ |= 0x00000020;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The cost of the impressions you received that were measurable by Active
     * View.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_cost_micros = 188;</code>
     * @return This builder for chaining.
     */
    public Builder clearActiveViewMeasurableCostMicros() {
      bitField0_ = (bitField0_ & ~0x00000020);
      activeViewMeasurableCostMicros_ = 0L;
      onChanged();
      return this;
    }

    private long activeViewMeasurableImpressions_ ;
    /**
     * <pre>
     * The number of times your ads are appearing on placements in positions
     * where they can be seen.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_impressions = 189;</code>
     * @return Whether the activeViewMeasurableImpressions field is set.
     */
    @java.lang.Override
    public boolean hasActiveViewMeasurableImpressions() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * The number of times your ads are appearing on placements in positions
     * where they can be seen.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_impressions = 189;</code>
     * @return The activeViewMeasurableImpressions.
     */
    @java.lang.Override
    public long getActiveViewMeasurableImpressions() {
      return activeViewMeasurableImpressions_;
    }
    /**
     * <pre>
     * The number of times your ads are appearing on placements in positions
     * where they can be seen.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_impressions = 189;</code>
     * @param value The activeViewMeasurableImpressions to set.
     * @return This builder for chaining.
     */
    public Builder setActiveViewMeasurableImpressions(long value) {

      activeViewMeasurableImpressions_ = value;
      bitField0_ |= 0x00000040;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times your ads are appearing on placements in positions
     * where they can be seen.
     * </pre>
     *
     * <code>optional int64 active_view_measurable_impressions = 189;</code>
     * @return This builder for chaining.
     */
    public Builder clearActiveViewMeasurableImpressions() {
      bitField0_ = (bitField0_ & ~0x00000040);
      activeViewMeasurableImpressions_ = 0L;
      onChanged();
      return this;
    }

    private double activeViewViewability_ ;
    /**
     * <pre>
     * The percentage of time when your ad appeared on an Active View enabled site
     * (measurable impressions) and was viewable (viewable impressions).
     * </pre>
     *
     * <code>optional double active_view_viewability = 190;</code>
     * @return Whether the activeViewViewability field is set.
     */
    @java.lang.Override
    public boolean hasActiveViewViewability() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * The percentage of time when your ad appeared on an Active View enabled site
     * (measurable impressions) and was viewable (viewable impressions).
     * </pre>
     *
     * <code>optional double active_view_viewability = 190;</code>
     * @return The activeViewViewability.
     */
    @java.lang.Override
    public double getActiveViewViewability() {
      return activeViewViewability_;
    }
    /**
     * <pre>
     * The percentage of time when your ad appeared on an Active View enabled site
     * (measurable impressions) and was viewable (viewable impressions).
     * </pre>
     *
     * <code>optional double active_view_viewability = 190;</code>
     * @param value The activeViewViewability to set.
     * @return This builder for chaining.
     */
    public Builder setActiveViewViewability(double value) {

      activeViewViewability_ = value;
      bitField0_ |= 0x00000080;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The percentage of time when your ad appeared on an Active View enabled site
     * (measurable impressions) and was viewable (viewable impressions).
     * </pre>
     *
     * <code>optional double active_view_viewability = 190;</code>
     * @return This builder for chaining.
     */
    public Builder clearActiveViewViewability() {
      bitField0_ = (bitField0_ & ~0x00000080);
      activeViewViewability_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromInteractionsRate_ ;
    /**
     * <pre>
     * All conversions from interactions (as oppose to view through conversions)
     * divided by the number of ad interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_rate = 191;</code>
     * @return Whether the allConversionsFromInteractionsRate field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromInteractionsRate() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * All conversions from interactions (as oppose to view through conversions)
     * divided by the number of ad interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_rate = 191;</code>
     * @return The allConversionsFromInteractionsRate.
     */
    @java.lang.Override
    public double getAllConversionsFromInteractionsRate() {
      return allConversionsFromInteractionsRate_;
    }
    /**
     * <pre>
     * All conversions from interactions (as oppose to view through conversions)
     * divided by the number of ad interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_rate = 191;</code>
     * @param value The allConversionsFromInteractionsRate to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromInteractionsRate(double value) {

      allConversionsFromInteractionsRate_ = value;
      bitField0_ |= 0x00000100;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * All conversions from interactions (as oppose to view through conversions)
     * divided by the number of ad interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_rate = 191;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromInteractionsRate() {
      bitField0_ = (bitField0_ & ~0x00000100);
      allConversionsFromInteractionsRate_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsValue_ ;
    /**
     * <pre>
     * The value of all conversions.
     * </pre>
     *
     * <code>optional double all_conversions_value = 192;</code>
     * @return Whether the allConversionsValue field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsValue() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <pre>
     * The value of all conversions.
     * </pre>
     *
     * <code>optional double all_conversions_value = 192;</code>
     * @return The allConversionsValue.
     */
    @java.lang.Override
    public double getAllConversionsValue() {
      return allConversionsValue_;
    }
    /**
     * <pre>
     * The value of all conversions.
     * </pre>
     *
     * <code>optional double all_conversions_value = 192;</code>
     * @param value The allConversionsValue to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsValue(double value) {

      allConversionsValue_ = value;
      bitField0_ |= 0x00000200;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of all conversions.
     * </pre>
     *
     * <code>optional double all_conversions_value = 192;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsValue() {
      bitField0_ = (bitField0_ & ~0x00000200);
      allConversionsValue_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsValueByConversionDate_ ;
    /**
     * <pre>
     * The value of all conversions. When this column is selected with date, the
     * values in date column means the conversion date. Details for the
     * by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double all_conversions_value_by_conversion_date = 240;</code>
     * @return The allConversionsValueByConversionDate.
     */
    @java.lang.Override
    public double getAllConversionsValueByConversionDate() {
      return allConversionsValueByConversionDate_;
    }
    /**
     * <pre>
     * The value of all conversions. When this column is selected with date, the
     * values in date column means the conversion date. Details for the
     * by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double all_conversions_value_by_conversion_date = 240;</code>
     * @param value The allConversionsValueByConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsValueByConversionDate(double value) {

      allConversionsValueByConversionDate_ = value;
      bitField0_ |= 0x00000400;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of all conversions. When this column is selected with date, the
     * values in date column means the conversion date. Details for the
     * by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double all_conversions_value_by_conversion_date = 240;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsValueByConversionDate() {
      bitField0_ = (bitField0_ & ~0x00000400);
      allConversionsValueByConversionDate_ = 0D;
      onChanged();
      return this;
    }

    private double allNewCustomerLifetimeValue_ ;
    /**
     * <pre>
     * All of new customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for both
     * biddable and non-biddable conversions. If your campaign has adopted the
     * customer acquisition goal and selected "bid higher for new customers",
     * these values will be included in "all_conversions_value". See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double all_new_customer_lifetime_value = 294;</code>
     * @return Whether the allNewCustomerLifetimeValue field is set.
     */
    @java.lang.Override
    public boolean hasAllNewCustomerLifetimeValue() {
      return ((bitField0_ & 0x00000800) != 0);
    }
    /**
     * <pre>
     * All of new customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for both
     * biddable and non-biddable conversions. If your campaign has adopted the
     * customer acquisition goal and selected "bid higher for new customers",
     * these values will be included in "all_conversions_value". See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double all_new_customer_lifetime_value = 294;</code>
     * @return The allNewCustomerLifetimeValue.
     */
    @java.lang.Override
    public double getAllNewCustomerLifetimeValue() {
      return allNewCustomerLifetimeValue_;
    }
    /**
     * <pre>
     * All of new customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for both
     * biddable and non-biddable conversions. If your campaign has adopted the
     * customer acquisition goal and selected "bid higher for new customers",
     * these values will be included in "all_conversions_value". See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double all_new_customer_lifetime_value = 294;</code>
     * @param value The allNewCustomerLifetimeValue to set.
     * @return This builder for chaining.
     */
    public Builder setAllNewCustomerLifetimeValue(double value) {

      allNewCustomerLifetimeValue_ = value;
      bitField0_ |= 0x00000800;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * All of new customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for both
     * biddable and non-biddable conversions. If your campaign has adopted the
     * customer acquisition goal and selected "bid higher for new customers",
     * these values will be included in "all_conversions_value". See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double all_new_customer_lifetime_value = 294;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllNewCustomerLifetimeValue() {
      bitField0_ = (bitField0_ & ~0x00000800);
      allNewCustomerLifetimeValue_ = 0D;
      onChanged();
      return this;
    }

    private double allConversions_ ;
    /**
     * <pre>
     * The total number of conversions. This includes all conversions regardless
     * of the value of include_in_conversions_metric.
     * </pre>
     *
     * <code>optional double all_conversions = 193;</code>
     * @return Whether the allConversions field is set.
     */
    @java.lang.Override
    public boolean hasAllConversions() {
      return ((bitField0_ & 0x00001000) != 0);
    }
    /**
     * <pre>
     * The total number of conversions. This includes all conversions regardless
     * of the value of include_in_conversions_metric.
     * </pre>
     *
     * <code>optional double all_conversions = 193;</code>
     * @return The allConversions.
     */
    @java.lang.Override
    public double getAllConversions() {
      return allConversions_;
    }
    /**
     * <pre>
     * The total number of conversions. This includes all conversions regardless
     * of the value of include_in_conversions_metric.
     * </pre>
     *
     * <code>optional double all_conversions = 193;</code>
     * @param value The allConversions to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversions(double value) {

      allConversions_ = value;
      bitField0_ |= 0x00001000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The total number of conversions. This includes all conversions regardless
     * of the value of include_in_conversions_metric.
     * </pre>
     *
     * <code>optional double all_conversions = 193;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversions() {
      bitField0_ = (bitField0_ & ~0x00001000);
      allConversions_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsByConversionDate_ ;
    /**
     * <pre>
     * The total number of conversions. This includes all conversions regardless
     * of the value of include_in_conversions_metric. When this column is selected
     * with date, the values in date column means the conversion date. Details for
     * the by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double all_conversions_by_conversion_date = 241;</code>
     * @return The allConversionsByConversionDate.
     */
    @java.lang.Override
    public double getAllConversionsByConversionDate() {
      return allConversionsByConversionDate_;
    }
    /**
     * <pre>
     * The total number of conversions. This includes all conversions regardless
     * of the value of include_in_conversions_metric. When this column is selected
     * with date, the values in date column means the conversion date. Details for
     * the by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double all_conversions_by_conversion_date = 241;</code>
     * @param value The allConversionsByConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsByConversionDate(double value) {

      allConversionsByConversionDate_ = value;
      bitField0_ |= 0x00002000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The total number of conversions. This includes all conversions regardless
     * of the value of include_in_conversions_metric. When this column is selected
     * with date, the values in date column means the conversion date. Details for
     * the by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double all_conversions_by_conversion_date = 241;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsByConversionDate() {
      bitField0_ = (bitField0_ & ~0x00002000);
      allConversionsByConversionDate_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsValuePerCost_ ;
    /**
     * <pre>
     * The value of all conversions divided by the total cost of ad interactions
     * (such as clicks for text ads or views for video ads).
     * </pre>
     *
     * <code>optional double all_conversions_value_per_cost = 194;</code>
     * @return Whether the allConversionsValuePerCost field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsValuePerCost() {
      return ((bitField0_ & 0x00004000) != 0);
    }
    /**
     * <pre>
     * The value of all conversions divided by the total cost of ad interactions
     * (such as clicks for text ads or views for video ads).
     * </pre>
     *
     * <code>optional double all_conversions_value_per_cost = 194;</code>
     * @return The allConversionsValuePerCost.
     */
    @java.lang.Override
    public double getAllConversionsValuePerCost() {
      return allConversionsValuePerCost_;
    }
    /**
     * <pre>
     * The value of all conversions divided by the total cost of ad interactions
     * (such as clicks for text ads or views for video ads).
     * </pre>
     *
     * <code>optional double all_conversions_value_per_cost = 194;</code>
     * @param value The allConversionsValuePerCost to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsValuePerCost(double value) {

      allConversionsValuePerCost_ = value;
      bitField0_ |= 0x00004000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of all conversions divided by the total cost of ad interactions
     * (such as clicks for text ads or views for video ads).
     * </pre>
     *
     * <code>optional double all_conversions_value_per_cost = 194;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsValuePerCost() {
      bitField0_ = (bitField0_ & ~0x00004000);
      allConversionsValuePerCost_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromClickToCall_ ;
    /**
     * <pre>
     * The number of times people clicked the "Call" button to call a store during
     * or after clicking an ad. This number doesn't include whether or not calls
     * were connected, or the duration of any calls.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_click_to_call = 195;</code>
     * @return Whether the allConversionsFromClickToCall field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromClickToCall() {
      return ((bitField0_ & 0x00008000) != 0);
    }
    /**
     * <pre>
     * The number of times people clicked the "Call" button to call a store during
     * or after clicking an ad. This number doesn't include whether or not calls
     * were connected, or the duration of any calls.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_click_to_call = 195;</code>
     * @return The allConversionsFromClickToCall.
     */
    @java.lang.Override
    public double getAllConversionsFromClickToCall() {
      return allConversionsFromClickToCall_;
    }
    /**
     * <pre>
     * The number of times people clicked the "Call" button to call a store during
     * or after clicking an ad. This number doesn't include whether or not calls
     * were connected, or the duration of any calls.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_click_to_call = 195;</code>
     * @param value The allConversionsFromClickToCall to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromClickToCall(double value) {

      allConversionsFromClickToCall_ = value;
      bitField0_ |= 0x00008000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times people clicked the "Call" button to call a store during
     * or after clicking an ad. This number doesn't include whether or not calls
     * were connected, or the duration of any calls.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_click_to_call = 195;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromClickToCall() {
      bitField0_ = (bitField0_ & ~0x00008000);
      allConversionsFromClickToCall_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromDirections_ ;
    /**
     * <pre>
     * The number of times people clicked a "Get directions" button to navigate to
     * a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_directions = 196;</code>
     * @return Whether the allConversionsFromDirections field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromDirections() {
      return ((bitField0_ & 0x00010000) != 0);
    }
    /**
     * <pre>
     * The number of times people clicked a "Get directions" button to navigate to
     * a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_directions = 196;</code>
     * @return The allConversionsFromDirections.
     */
    @java.lang.Override
    public double getAllConversionsFromDirections() {
      return allConversionsFromDirections_;
    }
    /**
     * <pre>
     * The number of times people clicked a "Get directions" button to navigate to
     * a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_directions = 196;</code>
     * @param value The allConversionsFromDirections to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromDirections(double value) {

      allConversionsFromDirections_ = value;
      bitField0_ |= 0x00010000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times people clicked a "Get directions" button to navigate to
     * a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_directions = 196;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromDirections() {
      bitField0_ = (bitField0_ & ~0x00010000);
      allConversionsFromDirections_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromInteractionsValuePerInteraction_ ;
    /**
     * <pre>
     * The value of all conversions from interactions divided by the total number
     * of interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_value_per_interaction = 197;</code>
     * @return Whether the allConversionsFromInteractionsValuePerInteraction field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromInteractionsValuePerInteraction() {
      return ((bitField0_ & 0x00020000) != 0);
    }
    /**
     * <pre>
     * The value of all conversions from interactions divided by the total number
     * of interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_value_per_interaction = 197;</code>
     * @return The allConversionsFromInteractionsValuePerInteraction.
     */
    @java.lang.Override
    public double getAllConversionsFromInteractionsValuePerInteraction() {
      return allConversionsFromInteractionsValuePerInteraction_;
    }
    /**
     * <pre>
     * The value of all conversions from interactions divided by the total number
     * of interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_value_per_interaction = 197;</code>
     * @param value The allConversionsFromInteractionsValuePerInteraction to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromInteractionsValuePerInteraction(double value) {

      allConversionsFromInteractionsValuePerInteraction_ = value;
      bitField0_ |= 0x00020000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of all conversions from interactions divided by the total number
     * of interactions.
     * </pre>
     *
     * <code>optional double all_conversions_from_interactions_value_per_interaction = 197;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromInteractionsValuePerInteraction() {
      bitField0_ = (bitField0_ & ~0x00020000);
      allConversionsFromInteractionsValuePerInteraction_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromMenu_ ;
    /**
     * <pre>
     * The number of times people clicked a link to view a store's menu after
     * clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_menu = 198;</code>
     * @return Whether the allConversionsFromMenu field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromMenu() {
      return ((bitField0_ & 0x00040000) != 0);
    }
    /**
     * <pre>
     * The number of times people clicked a link to view a store's menu after
     * clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_menu = 198;</code>
     * @return The allConversionsFromMenu.
     */
    @java.lang.Override
    public double getAllConversionsFromMenu() {
      return allConversionsFromMenu_;
    }
    /**
     * <pre>
     * The number of times people clicked a link to view a store's menu after
     * clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_menu = 198;</code>
     * @param value The allConversionsFromMenu to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromMenu(double value) {

      allConversionsFromMenu_ = value;
      bitField0_ |= 0x00040000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times people clicked a link to view a store's menu after
     * clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_menu = 198;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromMenu() {
      bitField0_ = (bitField0_ & ~0x00040000);
      allConversionsFromMenu_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromOrder_ ;
    /**
     * <pre>
     * The number of times people placed an order at a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_order = 199;</code>
     * @return Whether the allConversionsFromOrder field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromOrder() {
      return ((bitField0_ & 0x00080000) != 0);
    }
    /**
     * <pre>
     * The number of times people placed an order at a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_order = 199;</code>
     * @return The allConversionsFromOrder.
     */
    @java.lang.Override
    public double getAllConversionsFromOrder() {
      return allConversionsFromOrder_;
    }
    /**
     * <pre>
     * The number of times people placed an order at a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_order = 199;</code>
     * @param value The allConversionsFromOrder to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromOrder(double value) {

      allConversionsFromOrder_ = value;
      bitField0_ |= 0x00080000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times people placed an order at a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_order = 199;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromOrder() {
      bitField0_ = (bitField0_ & ~0x00080000);
      allConversionsFromOrder_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromOtherEngagement_ ;
    /**
     * <pre>
     * The number of other conversions (for example, posting a review or saving a
     * location for a store) that occurred after people clicked an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_other_engagement = 200;</code>
     * @return Whether the allConversionsFromOtherEngagement field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromOtherEngagement() {
      return ((bitField0_ & 0x00100000) != 0);
    }
    /**
     * <pre>
     * The number of other conversions (for example, posting a review or saving a
     * location for a store) that occurred after people clicked an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_other_engagement = 200;</code>
     * @return The allConversionsFromOtherEngagement.
     */
    @java.lang.Override
    public double getAllConversionsFromOtherEngagement() {
      return allConversionsFromOtherEngagement_;
    }
    /**
     * <pre>
     * The number of other conversions (for example, posting a review or saving a
     * location for a store) that occurred after people clicked an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_other_engagement = 200;</code>
     * @param value The allConversionsFromOtherEngagement to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromOtherEngagement(double value) {

      allConversionsFromOtherEngagement_ = value;
      bitField0_ |= 0x00100000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of other conversions (for example, posting a review or saving a
     * location for a store) that occurred after people clicked an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_other_engagement = 200;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromOtherEngagement() {
      bitField0_ = (bitField0_ & ~0x00100000);
      allConversionsFromOtherEngagement_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromStoreVisit_ ;
    /**
     * <pre>
     * Estimated number of times people visited a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_visit = 201;</code>
     * @return Whether the allConversionsFromStoreVisit field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromStoreVisit() {
      return ((bitField0_ & 0x00200000) != 0);
    }
    /**
     * <pre>
     * Estimated number of times people visited a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_visit = 201;</code>
     * @return The allConversionsFromStoreVisit.
     */
    @java.lang.Override
    public double getAllConversionsFromStoreVisit() {
      return allConversionsFromStoreVisit_;
    }
    /**
     * <pre>
     * Estimated number of times people visited a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_visit = 201;</code>
     * @param value The allConversionsFromStoreVisit to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromStoreVisit(double value) {

      allConversionsFromStoreVisit_ = value;
      bitField0_ |= 0x00200000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Estimated number of times people visited a store after clicking an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_visit = 201;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromStoreVisit() {
      bitField0_ = (bitField0_ & ~0x00200000);
      allConversionsFromStoreVisit_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromStoreWebsite_ ;
    /**
     * <pre>
     * The number of times that people were taken to a store's URL after clicking
     * an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_website = 202;</code>
     * @return Whether the allConversionsFromStoreWebsite field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromStoreWebsite() {
      return ((bitField0_ & 0x00400000) != 0);
    }
    /**
     * <pre>
     * The number of times that people were taken to a store's URL after clicking
     * an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_website = 202;</code>
     * @return The allConversionsFromStoreWebsite.
     */
    @java.lang.Override
    public double getAllConversionsFromStoreWebsite() {
      return allConversionsFromStoreWebsite_;
    }
    /**
     * <pre>
     * The number of times that people were taken to a store's URL after clicking
     * an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_website = 202;</code>
     * @param value The allConversionsFromStoreWebsite to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromStoreWebsite(double value) {

      allConversionsFromStoreWebsite_ = value;
      bitField0_ |= 0x00400000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times that people were taken to a store's URL after clicking
     * an ad.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional double all_conversions_from_store_website = 202;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromStoreWebsite() {
      bitField0_ = (bitField0_ & ~0x00400000);
      allConversionsFromStoreWebsite_ = 0D;
      onChanged();
      return this;
    }

    private double auctionInsightSearchAbsoluteTopImpressionPercentage_ ;
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed as the very first ad above the
     * organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_absolute_top_impression_percentage = 258;</code>
     * @return Whether the auctionInsightSearchAbsoluteTopImpressionPercentage field is set.
     */
    @java.lang.Override
    public boolean hasAuctionInsightSearchAbsoluteTopImpressionPercentage() {
      return ((bitField0_ & 0x00800000) != 0);
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed as the very first ad above the
     * organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_absolute_top_impression_percentage = 258;</code>
     * @return The auctionInsightSearchAbsoluteTopImpressionPercentage.
     */
    @java.lang.Override
    public double getAuctionInsightSearchAbsoluteTopImpressionPercentage() {
      return auctionInsightSearchAbsoluteTopImpressionPercentage_;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed as the very first ad above the
     * organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_absolute_top_impression_percentage = 258;</code>
     * @param value The auctionInsightSearchAbsoluteTopImpressionPercentage to set.
     * @return This builder for chaining.
     */
    public Builder setAuctionInsightSearchAbsoluteTopImpressionPercentage(double value) {

      auctionInsightSearchAbsoluteTopImpressionPercentage_ = value;
      bitField0_ |= 0x00800000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed as the very first ad above the
     * organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_absolute_top_impression_percentage = 258;</code>
     * @return This builder for chaining.
     */
    public Builder clearAuctionInsightSearchAbsoluteTopImpressionPercentage() {
      bitField0_ = (bitField0_ & ~0x00800000);
      auctionInsightSearchAbsoluteTopImpressionPercentage_ = 0D;
      onChanged();
      return this;
    }

    private double auctionInsightSearchImpressionShare_ ;
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that another participant obtained, over the total
     * number of impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_impression_share = 259;</code>
     * @return Whether the auctionInsightSearchImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasAuctionInsightSearchImpressionShare() {
      return ((bitField0_ & 0x01000000) != 0);
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that another participant obtained, over the total
     * number of impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_impression_share = 259;</code>
     * @return The auctionInsightSearchImpressionShare.
     */
    @java.lang.Override
    public double getAuctionInsightSearchImpressionShare() {
      return auctionInsightSearchImpressionShare_;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that another participant obtained, over the total
     * number of impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_impression_share = 259;</code>
     * @param value The auctionInsightSearchImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setAuctionInsightSearchImpressionShare(double value) {

      auctionInsightSearchImpressionShare_ = value;
      bitField0_ |= 0x01000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that another participant obtained, over the total
     * number of impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_impression_share = 259;</code>
     * @return This builder for chaining.
     */
    public Builder clearAuctionInsightSearchImpressionShare() {
      bitField0_ = (bitField0_ & ~0x01000000);
      auctionInsightSearchImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double auctionInsightSearchOutrankingShare_ ;
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that your ads outranked (showed above)
     * another participant in the auction, compared to the total number of
     * impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_outranking_share = 260;</code>
     * @return Whether the auctionInsightSearchOutrankingShare field is set.
     */
    @java.lang.Override
    public boolean hasAuctionInsightSearchOutrankingShare() {
      return ((bitField0_ & 0x02000000) != 0);
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that your ads outranked (showed above)
     * another participant in the auction, compared to the total number of
     * impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_outranking_share = 260;</code>
     * @return The auctionInsightSearchOutrankingShare.
     */
    @java.lang.Override
    public double getAuctionInsightSearchOutrankingShare() {
      return auctionInsightSearchOutrankingShare_;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that your ads outranked (showed above)
     * another participant in the auction, compared to the total number of
     * impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_outranking_share = 260;</code>
     * @param value The auctionInsightSearchOutrankingShare to set.
     * @return This builder for chaining.
     */
    public Builder setAuctionInsightSearchOutrankingShare(double value) {

      auctionInsightSearchOutrankingShare_ = value;
      bitField0_ |= 0x02000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells the
     * percentage of impressions that your ads outranked (showed above)
     * another participant in the auction, compared to the total number of
     * impressions that your ads were eligible for.
     * Any value below 0.1 is reported as 0.0999.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_outranking_share = 260;</code>
     * @return This builder for chaining.
     */
    public Builder clearAuctionInsightSearchOutrankingShare() {
      bitField0_ = (bitField0_ & ~0x02000000);
      auctionInsightSearchOutrankingShare_ = 0D;
      onChanged();
      return this;
    }

    private double auctionInsightSearchOverlapRate_ ;
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad received an impression when your ad also received
     * an impression.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_overlap_rate = 261;</code>
     * @return Whether the auctionInsightSearchOverlapRate field is set.
     */
    @java.lang.Override
    public boolean hasAuctionInsightSearchOverlapRate() {
      return ((bitField0_ & 0x04000000) != 0);
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad received an impression when your ad also received
     * an impression.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_overlap_rate = 261;</code>
     * @return The auctionInsightSearchOverlapRate.
     */
    @java.lang.Override
    public double getAuctionInsightSearchOverlapRate() {
      return auctionInsightSearchOverlapRate_;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad received an impression when your ad also received
     * an impression.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_overlap_rate = 261;</code>
     * @param value The auctionInsightSearchOverlapRate to set.
     * @return This builder for chaining.
     */
    public Builder setAuctionInsightSearchOverlapRate(double value) {

      auctionInsightSearchOverlapRate_ = value;
      bitField0_ |= 0x04000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad received an impression when your ad also received
     * an impression.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_overlap_rate = 261;</code>
     * @return This builder for chaining.
     */
    public Builder clearAuctionInsightSearchOverlapRate() {
      bitField0_ = (bitField0_ & ~0x04000000);
      auctionInsightSearchOverlapRate_ = 0D;
      onChanged();
      return this;
    }

    private double auctionInsightSearchPositionAboveRate_ ;
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad was shown in a higher position than yours, when
     * both of your ads were shown at the same page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_position_above_rate = 262;</code>
     * @return Whether the auctionInsightSearchPositionAboveRate field is set.
     */
    @java.lang.Override
    public boolean hasAuctionInsightSearchPositionAboveRate() {
      return ((bitField0_ & 0x08000000) != 0);
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad was shown in a higher position than yours, when
     * both of your ads were shown at the same page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_position_above_rate = 262;</code>
     * @return The auctionInsightSearchPositionAboveRate.
     */
    @java.lang.Override
    public double getAuctionInsightSearchPositionAboveRate() {
      return auctionInsightSearchPositionAboveRate_;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad was shown in a higher position than yours, when
     * both of your ads were shown at the same page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_position_above_rate = 262;</code>
     * @param value The auctionInsightSearchPositionAboveRate to set.
     * @return This builder for chaining.
     */
    public Builder setAuctionInsightSearchPositionAboveRate(double value) {

      auctionInsightSearchPositionAboveRate_ = value;
      bitField0_ |= 0x08000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * another participant's ad was shown in a higher position than yours, when
     * both of your ads were shown at the same page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_position_above_rate = 262;</code>
     * @return This builder for chaining.
     */
    public Builder clearAuctionInsightSearchPositionAboveRate() {
      bitField0_ = (bitField0_ & ~0x08000000);
      auctionInsightSearchPositionAboveRate_ = 0D;
      onChanged();
      return this;
    }

    private double auctionInsightSearchTopImpressionPercentage_ ;
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed above the organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_top_impression_percentage = 263;</code>
     * @return Whether the auctionInsightSearchTopImpressionPercentage field is set.
     */
    @java.lang.Override
    public boolean hasAuctionInsightSearchTopImpressionPercentage() {
      return ((bitField0_ & 0x10000000) != 0);
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed above the organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_top_impression_percentage = 263;</code>
     * @return The auctionInsightSearchTopImpressionPercentage.
     */
    @java.lang.Override
    public double getAuctionInsightSearchTopImpressionPercentage() {
      return auctionInsightSearchTopImpressionPercentage_;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed above the organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_top_impression_percentage = 263;</code>
     * @param value The auctionInsightSearchTopImpressionPercentage to set.
     * @return This builder for chaining.
     */
    public Builder setAuctionInsightSearchTopImpressionPercentage(double value) {

      auctionInsightSearchTopImpressionPercentage_ = value;
      bitField0_ |= 0x10000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * This metric is part of the Auction Insights report, and tells how often
     * the ads of another participant showed above the organic search results.
     * This percentage is computed only over the auctions that you appeared in
     * the page.
     *
     * This metric is not publicly available.
     * </pre>
     *
     * <code>optional double auction_insight_search_top_impression_percentage = 263;</code>
     * @return This builder for chaining.
     */
    public Builder clearAuctionInsightSearchTopImpressionPercentage() {
      bitField0_ = (bitField0_ & ~0x10000000);
      auctionInsightSearchTopImpressionPercentage_ = 0D;
      onChanged();
      return this;
    }

    private double averageCost_ ;
    /**
     * <pre>
     * The average amount you pay per interaction. This amount is the total cost
     * of your ads divided by the total number of interactions.
     * </pre>
     *
     * <code>optional double average_cost = 203;</code>
     * @return Whether the averageCost field is set.
     */
    @java.lang.Override
    public boolean hasAverageCost() {
      return ((bitField0_ & 0x20000000) != 0);
    }
    /**
     * <pre>
     * The average amount you pay per interaction. This amount is the total cost
     * of your ads divided by the total number of interactions.
     * </pre>
     *
     * <code>optional double average_cost = 203;</code>
     * @return The averageCost.
     */
    @java.lang.Override
    public double getAverageCost() {
      return averageCost_;
    }
    /**
     * <pre>
     * The average amount you pay per interaction. This amount is the total cost
     * of your ads divided by the total number of interactions.
     * </pre>
     *
     * <code>optional double average_cost = 203;</code>
     * @param value The averageCost to set.
     * @return This builder for chaining.
     */
    public Builder setAverageCost(double value) {

      averageCost_ = value;
      bitField0_ |= 0x20000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The average amount you pay per interaction. This amount is the total cost
     * of your ads divided by the total number of interactions.
     * </pre>
     *
     * <code>optional double average_cost = 203;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageCost() {
      bitField0_ = (bitField0_ & ~0x20000000);
      averageCost_ = 0D;
      onChanged();
      return this;
    }

    private double averageCpc_ ;
    /**
     * <pre>
     * The total cost of all clicks divided by the total number of clicks
     * received.
     * </pre>
     *
     * <code>optional double average_cpc = 204;</code>
     * @return Whether the averageCpc field is set.
     */
    @java.lang.Override
    public boolean hasAverageCpc() {
      return ((bitField0_ & 0x40000000) != 0);
    }
    /**
     * <pre>
     * The total cost of all clicks divided by the total number of clicks
     * received.
     * </pre>
     *
     * <code>optional double average_cpc = 204;</code>
     * @return The averageCpc.
     */
    @java.lang.Override
    public double getAverageCpc() {
      return averageCpc_;
    }
    /**
     * <pre>
     * The total cost of all clicks divided by the total number of clicks
     * received.
     * </pre>
     *
     * <code>optional double average_cpc = 204;</code>
     * @param value The averageCpc to set.
     * @return This builder for chaining.
     */
    public Builder setAverageCpc(double value) {

      averageCpc_ = value;
      bitField0_ |= 0x40000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The total cost of all clicks divided by the total number of clicks
     * received.
     * </pre>
     *
     * <code>optional double average_cpc = 204;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageCpc() {
      bitField0_ = (bitField0_ & ~0x40000000);
      averageCpc_ = 0D;
      onChanged();
      return this;
    }

    private double averageCpe_ ;
    /**
     * <pre>
     * The average amount that you've been charged for an ad engagement. This
     * amount is the total cost of all ad engagements divided by the total number
     * of ad engagements.
     * </pre>
     *
     * <code>optional double average_cpe = 205;</code>
     * @return Whether the averageCpe field is set.
     */
    @java.lang.Override
    public boolean hasAverageCpe() {
      return ((bitField0_ & 0x80000000) != 0);
    }
    /**
     * <pre>
     * The average amount that you've been charged for an ad engagement. This
     * amount is the total cost of all ad engagements divided by the total number
     * of ad engagements.
     * </pre>
     *
     * <code>optional double average_cpe = 205;</code>
     * @return The averageCpe.
     */
    @java.lang.Override
    public double getAverageCpe() {
      return averageCpe_;
    }
    /**
     * <pre>
     * The average amount that you've been charged for an ad engagement. This
     * amount is the total cost of all ad engagements divided by the total number
     * of ad engagements.
     * </pre>
     *
     * <code>optional double average_cpe = 205;</code>
     * @param value The averageCpe to set.
     * @return This builder for chaining.
     */
    public Builder setAverageCpe(double value) {

      averageCpe_ = value;
      bitField0_ |= 0x80000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The average amount that you've been charged for an ad engagement. This
     * amount is the total cost of all ad engagements divided by the total number
     * of ad engagements.
     * </pre>
     *
     * <code>optional double average_cpe = 205;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageCpe() {
      bitField0_ = (bitField0_ & ~0x80000000);
      averageCpe_ = 0D;
      onChanged();
      return this;
    }

    private double averageCpm_ ;
    /**
     * <pre>
     * Average cost-per-thousand impressions (CPM).
     * </pre>
     *
     * <code>optional double average_cpm = 206;</code>
     * @return Whether the averageCpm field is set.
     */
    @java.lang.Override
    public boolean hasAverageCpm() {
      return ((bitField1_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Average cost-per-thousand impressions (CPM).
     * </pre>
     *
     * <code>optional double average_cpm = 206;</code>
     * @return The averageCpm.
     */
    @java.lang.Override
    public double getAverageCpm() {
      return averageCpm_;
    }
    /**
     * <pre>
     * Average cost-per-thousand impressions (CPM).
     * </pre>
     *
     * <code>optional double average_cpm = 206;</code>
     * @param value The averageCpm to set.
     * @return This builder for chaining.
     */
    public Builder setAverageCpm(double value) {

      averageCpm_ = value;
      bitField1_ |= 0x00000001;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Average cost-per-thousand impressions (CPM).
     * </pre>
     *
     * <code>optional double average_cpm = 206;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageCpm() {
      bitField1_ = (bitField1_ & ~0x00000001);
      averageCpm_ = 0D;
      onChanged();
      return this;
    }

    private double averageCpv_ ;
    /**
     * <pre>
     * The average amount you pay each time someone views your ad.
     * The average CPV is defined by the total cost of all ad views divided by
     * the number of views.
     * </pre>
     *
     * <code>optional double average_cpv = 207;</code>
     * @return Whether the averageCpv field is set.
     */
    @java.lang.Override
    public boolean hasAverageCpv() {
      return ((bitField1_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * The average amount you pay each time someone views your ad.
     * The average CPV is defined by the total cost of all ad views divided by
     * the number of views.
     * </pre>
     *
     * <code>optional double average_cpv = 207;</code>
     * @return The averageCpv.
     */
    @java.lang.Override
    public double getAverageCpv() {
      return averageCpv_;
    }
    /**
     * <pre>
     * The average amount you pay each time someone views your ad.
     * The average CPV is defined by the total cost of all ad views divided by
     * the number of views.
     * </pre>
     *
     * <code>optional double average_cpv = 207;</code>
     * @param value The averageCpv to set.
     * @return This builder for chaining.
     */
    public Builder setAverageCpv(double value) {

      averageCpv_ = value;
      bitField1_ |= 0x00000002;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The average amount you pay each time someone views your ad.
     * The average CPV is defined by the total cost of all ad views divided by
     * the number of views.
     * </pre>
     *
     * <code>optional double average_cpv = 207;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageCpv() {
      bitField1_ = (bitField1_ & ~0x00000002);
      averageCpv_ = 0D;
      onChanged();
      return this;
    }

    private double averagePageViews_ ;
    /**
     * <pre>
     * Average number of pages viewed per session.
     * </pre>
     *
     * <code>optional double average_page_views = 208;</code>
     * @return Whether the averagePageViews field is set.
     */
    @java.lang.Override
    public boolean hasAveragePageViews() {
      return ((bitField1_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Average number of pages viewed per session.
     * </pre>
     *
     * <code>optional double average_page_views = 208;</code>
     * @return The averagePageViews.
     */
    @java.lang.Override
    public double getAveragePageViews() {
      return averagePageViews_;
    }
    /**
     * <pre>
     * Average number of pages viewed per session.
     * </pre>
     *
     * <code>optional double average_page_views = 208;</code>
     * @param value The averagePageViews to set.
     * @return This builder for chaining.
     */
    public Builder setAveragePageViews(double value) {

      averagePageViews_ = value;
      bitField1_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Average number of pages viewed per session.
     * </pre>
     *
     * <code>optional double average_page_views = 208;</code>
     * @return This builder for chaining.
     */
    public Builder clearAveragePageViews() {
      bitField1_ = (bitField1_ & ~0x00000004);
      averagePageViews_ = 0D;
      onChanged();
      return this;
    }

    private double averageTimeOnSite_ ;
    /**
     * <pre>
     * Total duration of all sessions (in seconds) / number of sessions. Imported
     * from Google Analytics.
     * </pre>
     *
     * <code>optional double average_time_on_site = 209;</code>
     * @return Whether the averageTimeOnSite field is set.
     */
    @java.lang.Override
    public boolean hasAverageTimeOnSite() {
      return ((bitField1_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * Total duration of all sessions (in seconds) / number of sessions. Imported
     * from Google Analytics.
     * </pre>
     *
     * <code>optional double average_time_on_site = 209;</code>
     * @return The averageTimeOnSite.
     */
    @java.lang.Override
    public double getAverageTimeOnSite() {
      return averageTimeOnSite_;
    }
    /**
     * <pre>
     * Total duration of all sessions (in seconds) / number of sessions. Imported
     * from Google Analytics.
     * </pre>
     *
     * <code>optional double average_time_on_site = 209;</code>
     * @param value The averageTimeOnSite to set.
     * @return This builder for chaining.
     */
    public Builder setAverageTimeOnSite(double value) {

      averageTimeOnSite_ = value;
      bitField1_ |= 0x00000008;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Total duration of all sessions (in seconds) / number of sessions. Imported
     * from Google Analytics.
     * </pre>
     *
     * <code>optional double average_time_on_site = 209;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageTimeOnSite() {
      bitField1_ = (bitField1_ & ~0x00000008);
      averageTimeOnSite_ = 0D;
      onChanged();
      return this;
    }

    private double benchmarkAverageMaxCpc_ ;
    /**
     * <pre>
     * An indication of how other advertisers are bidding on similar products.
     * </pre>
     *
     * <code>optional double benchmark_average_max_cpc = 210;</code>
     * @return Whether the benchmarkAverageMaxCpc field is set.
     */
    @java.lang.Override
    public boolean hasBenchmarkAverageMaxCpc() {
      return ((bitField1_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * An indication of how other advertisers are bidding on similar products.
     * </pre>
     *
     * <code>optional double benchmark_average_max_cpc = 210;</code>
     * @return The benchmarkAverageMaxCpc.
     */
    @java.lang.Override
    public double getBenchmarkAverageMaxCpc() {
      return benchmarkAverageMaxCpc_;
    }
    /**
     * <pre>
     * An indication of how other advertisers are bidding on similar products.
     * </pre>
     *
     * <code>optional double benchmark_average_max_cpc = 210;</code>
     * @param value The benchmarkAverageMaxCpc to set.
     * @return This builder for chaining.
     */
    public Builder setBenchmarkAverageMaxCpc(double value) {

      benchmarkAverageMaxCpc_ = value;
      bitField1_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * An indication of how other advertisers are bidding on similar products.
     * </pre>
     *
     * <code>optional double benchmark_average_max_cpc = 210;</code>
     * @return This builder for chaining.
     */
    public Builder clearBenchmarkAverageMaxCpc() {
      bitField1_ = (bitField1_ & ~0x00000010);
      benchmarkAverageMaxCpc_ = 0D;
      onChanged();
      return this;
    }

    private double biddableAppInstallConversions_ ;
    /**
     * <pre>
     * Number of app installs.
     * </pre>
     *
     * <code>optional double biddable_app_install_conversions = 254;</code>
     * @return Whether the biddableAppInstallConversions field is set.
     */
    @java.lang.Override
    public boolean hasBiddableAppInstallConversions() {
      return ((bitField1_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * Number of app installs.
     * </pre>
     *
     * <code>optional double biddable_app_install_conversions = 254;</code>
     * @return The biddableAppInstallConversions.
     */
    @java.lang.Override
    public double getBiddableAppInstallConversions() {
      return biddableAppInstallConversions_;
    }
    /**
     * <pre>
     * Number of app installs.
     * </pre>
     *
     * <code>optional double biddable_app_install_conversions = 254;</code>
     * @param value The biddableAppInstallConversions to set.
     * @return This builder for chaining.
     */
    public Builder setBiddableAppInstallConversions(double value) {

      biddableAppInstallConversions_ = value;
      bitField1_ |= 0x00000020;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of app installs.
     * </pre>
     *
     * <code>optional double biddable_app_install_conversions = 254;</code>
     * @return This builder for chaining.
     */
    public Builder clearBiddableAppInstallConversions() {
      bitField1_ = (bitField1_ & ~0x00000020);
      biddableAppInstallConversions_ = 0D;
      onChanged();
      return this;
    }

    private double biddableAppPostInstallConversions_ ;
    /**
     * <pre>
     * Number of in-app actions.
     * </pre>
     *
     * <code>optional double biddable_app_post_install_conversions = 255;</code>
     * @return Whether the biddableAppPostInstallConversions field is set.
     */
    @java.lang.Override
    public boolean hasBiddableAppPostInstallConversions() {
      return ((bitField1_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * Number of in-app actions.
     * </pre>
     *
     * <code>optional double biddable_app_post_install_conversions = 255;</code>
     * @return The biddableAppPostInstallConversions.
     */
    @java.lang.Override
    public double getBiddableAppPostInstallConversions() {
      return biddableAppPostInstallConversions_;
    }
    /**
     * <pre>
     * Number of in-app actions.
     * </pre>
     *
     * <code>optional double biddable_app_post_install_conversions = 255;</code>
     * @param value The biddableAppPostInstallConversions to set.
     * @return This builder for chaining.
     */
    public Builder setBiddableAppPostInstallConversions(double value) {

      biddableAppPostInstallConversions_ = value;
      bitField1_ |= 0x00000040;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of in-app actions.
     * </pre>
     *
     * <code>optional double biddable_app_post_install_conversions = 255;</code>
     * @return This builder for chaining.
     */
    public Builder clearBiddableAppPostInstallConversions() {
      bitField1_ = (bitField1_ & ~0x00000040);
      biddableAppPostInstallConversions_ = 0D;
      onChanged();
      return this;
    }

    private double benchmarkCtr_ ;
    /**
     * <pre>
     * An indication on how other advertisers' Shopping ads for similar products
     * are performing based on how often people who see their ad click on it.
     * </pre>
     *
     * <code>optional double benchmark_ctr = 211;</code>
     * @return Whether the benchmarkCtr field is set.
     */
    @java.lang.Override
    public boolean hasBenchmarkCtr() {
      return ((bitField1_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * An indication on how other advertisers' Shopping ads for similar products
     * are performing based on how often people who see their ad click on it.
     * </pre>
     *
     * <code>optional double benchmark_ctr = 211;</code>
     * @return The benchmarkCtr.
     */
    @java.lang.Override
    public double getBenchmarkCtr() {
      return benchmarkCtr_;
    }
    /**
     * <pre>
     * An indication on how other advertisers' Shopping ads for similar products
     * are performing based on how often people who see their ad click on it.
     * </pre>
     *
     * <code>optional double benchmark_ctr = 211;</code>
     * @param value The benchmarkCtr to set.
     * @return This builder for chaining.
     */
    public Builder setBenchmarkCtr(double value) {

      benchmarkCtr_ = value;
      bitField1_ |= 0x00000080;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * An indication on how other advertisers' Shopping ads for similar products
     * are performing based on how often people who see their ad click on it.
     * </pre>
     *
     * <code>optional double benchmark_ctr = 211;</code>
     * @return This builder for chaining.
     */
    public Builder clearBenchmarkCtr() {
      bitField1_ = (bitField1_ & ~0x00000080);
      benchmarkCtr_ = 0D;
      onChanged();
      return this;
    }

    private double bounceRate_ ;
    /**
     * <pre>
     * Percentage of clicks where the user only visited a single page on your
     * site. Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double bounce_rate = 212;</code>
     * @return Whether the bounceRate field is set.
     */
    @java.lang.Override
    public boolean hasBounceRate() {
      return ((bitField1_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * Percentage of clicks where the user only visited a single page on your
     * site. Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double bounce_rate = 212;</code>
     * @return The bounceRate.
     */
    @java.lang.Override
    public double getBounceRate() {
      return bounceRate_;
    }
    /**
     * <pre>
     * Percentage of clicks where the user only visited a single page on your
     * site. Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double bounce_rate = 212;</code>
     * @param value The bounceRate to set.
     * @return This builder for chaining.
     */
    public Builder setBounceRate(double value) {

      bounceRate_ = value;
      bitField1_ |= 0x00000100;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Percentage of clicks where the user only visited a single page on your
     * site. Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double bounce_rate = 212;</code>
     * @return This builder for chaining.
     */
    public Builder clearBounceRate() {
      bitField1_ = (bitField1_ & ~0x00000100);
      bounceRate_ = 0D;
      onChanged();
      return this;
    }

    private long clicks_ ;
    /**
     * <pre>
     * The number of clicks.
     * </pre>
     *
     * <code>optional int64 clicks = 131;</code>
     * @return Whether the clicks field is set.
     */
    @java.lang.Override
    public boolean hasClicks() {
      return ((bitField1_ & 0x00000200) != 0);
    }
    /**
     * <pre>
     * The number of clicks.
     * </pre>
     *
     * <code>optional int64 clicks = 131;</code>
     * @return The clicks.
     */
    @java.lang.Override
    public long getClicks() {
      return clicks_;
    }
    /**
     * <pre>
     * The number of clicks.
     * </pre>
     *
     * <code>optional int64 clicks = 131;</code>
     * @param value The clicks to set.
     * @return This builder for chaining.
     */
    public Builder setClicks(long value) {

      clicks_ = value;
      bitField1_ |= 0x00000200;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of clicks.
     * </pre>
     *
     * <code>optional int64 clicks = 131;</code>
     * @return This builder for chaining.
     */
    public Builder clearClicks() {
      bitField1_ = (bitField1_ & ~0x00000200);
      clicks_ = 0L;
      onChanged();
      return this;
    }

    private long combinedClicks_ ;
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_clicks = 156;</code>
     * @return Whether the combinedClicks field is set.
     */
    @java.lang.Override
    public boolean hasCombinedClicks() {
      return ((bitField1_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_clicks = 156;</code>
     * @return The combinedClicks.
     */
    @java.lang.Override
    public long getCombinedClicks() {
      return combinedClicks_;
    }
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_clicks = 156;</code>
     * @param value The combinedClicks to set.
     * @return This builder for chaining.
     */
    public Builder setCombinedClicks(long value) {

      combinedClicks_ = value;
      bitField1_ |= 0x00000400;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_clicks = 156;</code>
     * @return This builder for chaining.
     */
    public Builder clearCombinedClicks() {
      bitField1_ = (bitField1_ & ~0x00000400);
      combinedClicks_ = 0L;
      onChanged();
      return this;
    }

    private double combinedClicksPerQuery_ ;
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked (combined_clicks) divided by combined_queries. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional double combined_clicks_per_query = 157;</code>
     * @return Whether the combinedClicksPerQuery field is set.
     */
    @java.lang.Override
    public boolean hasCombinedClicksPerQuery() {
      return ((bitField1_ & 0x00000800) != 0);
    }
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked (combined_clicks) divided by combined_queries. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional double combined_clicks_per_query = 157;</code>
     * @return The combinedClicksPerQuery.
     */
    @java.lang.Override
    public double getCombinedClicksPerQuery() {
      return combinedClicksPerQuery_;
    }
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked (combined_clicks) divided by combined_queries. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional double combined_clicks_per_query = 157;</code>
     * @param value The combinedClicksPerQuery to set.
     * @return This builder for chaining.
     */
    public Builder setCombinedClicksPerQuery(double value) {

      combinedClicksPerQuery_ = value;
      bitField1_ |= 0x00000800;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times your ad or your site's listing in the unpaid
     * results was clicked (combined_clicks) divided by combined_queries. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional double combined_clicks_per_query = 157;</code>
     * @return This builder for chaining.
     */
    public Builder clearCombinedClicksPerQuery() {
      bitField1_ = (bitField1_ & ~0x00000800);
      combinedClicksPerQuery_ = 0D;
      onChanged();
      return this;
    }

    private long combinedQueries_ ;
    /**
     * <pre>
     * The number of searches that returned pages from your site in the unpaid
     * results or showed one of your text ads. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_queries = 158;</code>
     * @return Whether the combinedQueries field is set.
     */
    @java.lang.Override
    public boolean hasCombinedQueries() {
      return ((bitField1_ & 0x00001000) != 0);
    }
    /**
     * <pre>
     * The number of searches that returned pages from your site in the unpaid
     * results or showed one of your text ads. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_queries = 158;</code>
     * @return The combinedQueries.
     */
    @java.lang.Override
    public long getCombinedQueries() {
      return combinedQueries_;
    }
    /**
     * <pre>
     * The number of searches that returned pages from your site in the unpaid
     * results or showed one of your text ads. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_queries = 158;</code>
     * @param value The combinedQueries to set.
     * @return This builder for chaining.
     */
    public Builder setCombinedQueries(long value) {

      combinedQueries_ = value;
      bitField1_ |= 0x00001000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of searches that returned pages from your site in the unpaid
     * results or showed one of your text ads. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 combined_queries = 158;</code>
     * @return This builder for chaining.
     */
    public Builder clearCombinedQueries() {
      bitField1_ = (bitField1_ & ~0x00001000);
      combinedQueries_ = 0L;
      onChanged();
      return this;
    }

    private double contentBudgetLostImpressionShare_ ;
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show
     * on the Display Network but didn't because your budget was too low.
     * Note: Content budget lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_budget_lost_impression_share = 159;</code>
     * @return Whether the contentBudgetLostImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasContentBudgetLostImpressionShare() {
      return ((bitField1_ & 0x00002000) != 0);
    }
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show
     * on the Display Network but didn't because your budget was too low.
     * Note: Content budget lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_budget_lost_impression_share = 159;</code>
     * @return The contentBudgetLostImpressionShare.
     */
    @java.lang.Override
    public double getContentBudgetLostImpressionShare() {
      return contentBudgetLostImpressionShare_;
    }
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show
     * on the Display Network but didn't because your budget was too low.
     * Note: Content budget lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_budget_lost_impression_share = 159;</code>
     * @param value The contentBudgetLostImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setContentBudgetLostImpressionShare(double value) {

      contentBudgetLostImpressionShare_ = value;
      bitField1_ |= 0x00002000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show
     * on the Display Network but didn't because your budget was too low.
     * Note: Content budget lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_budget_lost_impression_share = 159;</code>
     * @return This builder for chaining.
     */
    public Builder clearContentBudgetLostImpressionShare() {
      bitField1_ = (bitField1_ & ~0x00002000);
      contentBudgetLostImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double contentImpressionShare_ ;
    /**
     * <pre>
     * The impressions you've received on the Display Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Content impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double content_impression_share = 160;</code>
     * @return Whether the contentImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasContentImpressionShare() {
      return ((bitField1_ & 0x00004000) != 0);
    }
    /**
     * <pre>
     * The impressions you've received on the Display Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Content impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double content_impression_share = 160;</code>
     * @return The contentImpressionShare.
     */
    @java.lang.Override
    public double getContentImpressionShare() {
      return contentImpressionShare_;
    }
    /**
     * <pre>
     * The impressions you've received on the Display Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Content impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double content_impression_share = 160;</code>
     * @param value The contentImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setContentImpressionShare(double value) {

      contentImpressionShare_ = value;
      bitField1_ |= 0x00004000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The impressions you've received on the Display Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Content impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double content_impression_share = 160;</code>
     * @return This builder for chaining.
     */
    public Builder clearContentImpressionShare() {
      bitField1_ = (bitField1_ & ~0x00004000);
      contentImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private java.lang.Object conversionLastReceivedRequestDateTime_ = "";
    /**
     * <pre>
     * The last date/time a conversion tag for this conversion action successfully
     * fired and was seen by Google Ads. This firing event may not have been the
     * result of an attributable conversion (for example, because the tag was
     * fired from a browser that did not previously click an ad from an
     * appropriate advertiser). The date/time is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_received_request_date_time = 161;</code>
     * @return Whether the conversionLastReceivedRequestDateTime field is set.
     */
    public boolean hasConversionLastReceivedRequestDateTime() {
      return ((bitField1_ & 0x00008000) != 0);
    }
    /**
     * <pre>
     * The last date/time a conversion tag for this conversion action successfully
     * fired and was seen by Google Ads. This firing event may not have been the
     * result of an attributable conversion (for example, because the tag was
     * fired from a browser that did not previously click an ad from an
     * appropriate advertiser). The date/time is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_received_request_date_time = 161;</code>
     * @return The conversionLastReceivedRequestDateTime.
     */
    public java.lang.String getConversionLastReceivedRequestDateTime() {
      java.lang.Object ref = conversionLastReceivedRequestDateTime_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        conversionLastReceivedRequestDateTime_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The last date/time a conversion tag for this conversion action successfully
     * fired and was seen by Google Ads. This firing event may not have been the
     * result of an attributable conversion (for example, because the tag was
     * fired from a browser that did not previously click an ad from an
     * appropriate advertiser). The date/time is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_received_request_date_time = 161;</code>
     * @return The bytes for conversionLastReceivedRequestDateTime.
     */
    public com.google.protobuf.ByteString
        getConversionLastReceivedRequestDateTimeBytes() {
      java.lang.Object ref = conversionLastReceivedRequestDateTime_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        conversionLastReceivedRequestDateTime_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The last date/time a conversion tag for this conversion action successfully
     * fired and was seen by Google Ads. This firing event may not have been the
     * result of an attributable conversion (for example, because the tag was
     * fired from a browser that did not previously click an ad from an
     * appropriate advertiser). The date/time is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_received_request_date_time = 161;</code>
     * @param value The conversionLastReceivedRequestDateTime to set.
     * @return This builder for chaining.
     */
    public Builder setConversionLastReceivedRequestDateTime(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      conversionLastReceivedRequestDateTime_ = value;
      bitField1_ |= 0x00008000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The last date/time a conversion tag for this conversion action successfully
     * fired and was seen by Google Ads. This firing event may not have been the
     * result of an attributable conversion (for example, because the tag was
     * fired from a browser that did not previously click an ad from an
     * appropriate advertiser). The date/time is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_received_request_date_time = 161;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionLastReceivedRequestDateTime() {
      conversionLastReceivedRequestDateTime_ = getDefaultInstance().getConversionLastReceivedRequestDateTime();
      bitField1_ = (bitField1_ & ~0x00008000);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The last date/time a conversion tag for this conversion action successfully
     * fired and was seen by Google Ads. This firing event may not have been the
     * result of an attributable conversion (for example, because the tag was
     * fired from a browser that did not previously click an ad from an
     * appropriate advertiser). The date/time is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_received_request_date_time = 161;</code>
     * @param value The bytes for conversionLastReceivedRequestDateTime to set.
     * @return This builder for chaining.
     */
    public Builder setConversionLastReceivedRequestDateTimeBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      conversionLastReceivedRequestDateTime_ = value;
      bitField1_ |= 0x00008000;
      onChanged();
      return this;
    }

    private java.lang.Object conversionLastConversionDate_ = "";
    /**
     * <pre>
     * The date of the most recent conversion for this conversion action. The date
     * is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_conversion_date = 162;</code>
     * @return Whether the conversionLastConversionDate field is set.
     */
    public boolean hasConversionLastConversionDate() {
      return ((bitField1_ & 0x00010000) != 0);
    }
    /**
     * <pre>
     * The date of the most recent conversion for this conversion action. The date
     * is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_conversion_date = 162;</code>
     * @return The conversionLastConversionDate.
     */
    public java.lang.String getConversionLastConversionDate() {
      java.lang.Object ref = conversionLastConversionDate_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        conversionLastConversionDate_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The date of the most recent conversion for this conversion action. The date
     * is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_conversion_date = 162;</code>
     * @return The bytes for conversionLastConversionDate.
     */
    public com.google.protobuf.ByteString
        getConversionLastConversionDateBytes() {
      java.lang.Object ref = conversionLastConversionDate_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        conversionLastConversionDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The date of the most recent conversion for this conversion action. The date
     * is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_conversion_date = 162;</code>
     * @param value The conversionLastConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setConversionLastConversionDate(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      conversionLastConversionDate_ = value;
      bitField1_ |= 0x00010000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The date of the most recent conversion for this conversion action. The date
     * is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_conversion_date = 162;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionLastConversionDate() {
      conversionLastConversionDate_ = getDefaultInstance().getConversionLastConversionDate();
      bitField1_ = (bitField1_ & ~0x00010000);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The date of the most recent conversion for this conversion action. The date
     * is in the customer's time zone.
     * </pre>
     *
     * <code>optional string conversion_last_conversion_date = 162;</code>
     * @param value The bytes for conversionLastConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setConversionLastConversionDateBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      conversionLastConversionDate_ = value;
      bitField1_ |= 0x00010000;
      onChanged();
      return this;
    }

    private double contentRankLostImpressionShare_ ;
    /**
     * <pre>
     * The estimated percentage of impressions on the Display Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Content rank lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_rank_lost_impression_share = 163;</code>
     * @return Whether the contentRankLostImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasContentRankLostImpressionShare() {
      return ((bitField1_ & 0x00020000) != 0);
    }
    /**
     * <pre>
     * The estimated percentage of impressions on the Display Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Content rank lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_rank_lost_impression_share = 163;</code>
     * @return The contentRankLostImpressionShare.
     */
    @java.lang.Override
    public double getContentRankLostImpressionShare() {
      return contentRankLostImpressionShare_;
    }
    /**
     * <pre>
     * The estimated percentage of impressions on the Display Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Content rank lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_rank_lost_impression_share = 163;</code>
     * @param value The contentRankLostImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setContentRankLostImpressionShare(double value) {

      contentRankLostImpressionShare_ = value;
      bitField1_ |= 0x00020000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The estimated percentage of impressions on the Display Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Content rank lost impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double content_rank_lost_impression_share = 163;</code>
     * @return This builder for chaining.
     */
    public Builder clearContentRankLostImpressionShare() {
      bitField1_ = (bitField1_ & ~0x00020000);
      contentRankLostImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double conversionsFromInteractionsRate_ ;
    /**
     * <pre>
     * Conversions from interactions divided by the number of ad interactions
     * (such as clicks for text ads or views for video ads). This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_rate = 164;</code>
     * @return Whether the conversionsFromInteractionsRate field is set.
     */
    @java.lang.Override
    public boolean hasConversionsFromInteractionsRate() {
      return ((bitField1_ & 0x00040000) != 0);
    }
    /**
     * <pre>
     * Conversions from interactions divided by the number of ad interactions
     * (such as clicks for text ads or views for video ads). This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_rate = 164;</code>
     * @return The conversionsFromInteractionsRate.
     */
    @java.lang.Override
    public double getConversionsFromInteractionsRate() {
      return conversionsFromInteractionsRate_;
    }
    /**
     * <pre>
     * Conversions from interactions divided by the number of ad interactions
     * (such as clicks for text ads or views for video ads). This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_rate = 164;</code>
     * @param value The conversionsFromInteractionsRate to set.
     * @return This builder for chaining.
     */
    public Builder setConversionsFromInteractionsRate(double value) {

      conversionsFromInteractionsRate_ = value;
      bitField1_ |= 0x00040000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Conversions from interactions divided by the number of ad interactions
     * (such as clicks for text ads or views for video ads). This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_rate = 164;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionsFromInteractionsRate() {
      bitField1_ = (bitField1_ & ~0x00040000);
      conversionsFromInteractionsRate_ = 0D;
      onChanged();
      return this;
    }

    private double conversionsValue_ ;
    /**
     * <pre>
     * The value of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_value = 165;</code>
     * @return Whether the conversionsValue field is set.
     */
    @java.lang.Override
    public boolean hasConversionsValue() {
      return ((bitField1_ & 0x00080000) != 0);
    }
    /**
     * <pre>
     * The value of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_value = 165;</code>
     * @return The conversionsValue.
     */
    @java.lang.Override
    public double getConversionsValue() {
      return conversionsValue_;
    }
    /**
     * <pre>
     * The value of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_value = 165;</code>
     * @param value The conversionsValue to set.
     * @return This builder for chaining.
     */
    public Builder setConversionsValue(double value) {

      conversionsValue_ = value;
      bitField1_ |= 0x00080000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_value = 165;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionsValue() {
      bitField1_ = (bitField1_ & ~0x00080000);
      conversionsValue_ = 0D;
      onChanged();
      return this;
    }

    private double conversionsValueByConversionDate_ ;
    /**
     * <pre>
     * The value of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions. When this column is selected with date, the values in date
     * column means the conversion date. Details for the by_conversion_date
     * columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double conversions_value_by_conversion_date = 242;</code>
     * @return The conversionsValueByConversionDate.
     */
    @java.lang.Override
    public double getConversionsValueByConversionDate() {
      return conversionsValueByConversionDate_;
    }
    /**
     * <pre>
     * The value of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions. When this column is selected with date, the values in date
     * column means the conversion date. Details for the by_conversion_date
     * columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double conversions_value_by_conversion_date = 242;</code>
     * @param value The conversionsValueByConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setConversionsValueByConversionDate(double value) {

      conversionsValueByConversionDate_ = value;
      bitField1_ |= 0x00100000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions. When this column is selected with date, the values in date
     * column means the conversion date. Details for the by_conversion_date
     * columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double conversions_value_by_conversion_date = 242;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionsValueByConversionDate() {
      bitField1_ = (bitField1_ & ~0x00100000);
      conversionsValueByConversionDate_ = 0D;
      onChanged();
      return this;
    }

    private double newCustomerLifetimeValue_ ;
    /**
     * <pre>
     * New customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for
     * biddable conversions. If your campaign has adopted the customer
     * acquisition goal and selected "bid higher for new customers", these values
     * will be included in "conversions_value" for optimization. See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double new_customer_lifetime_value = 293;</code>
     * @return Whether the newCustomerLifetimeValue field is set.
     */
    @java.lang.Override
    public boolean hasNewCustomerLifetimeValue() {
      return ((bitField1_ & 0x00200000) != 0);
    }
    /**
     * <pre>
     * New customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for
     * biddable conversions. If your campaign has adopted the customer
     * acquisition goal and selected "bid higher for new customers", these values
     * will be included in "conversions_value" for optimization. See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double new_customer_lifetime_value = 293;</code>
     * @return The newCustomerLifetimeValue.
     */
    @java.lang.Override
    public double getNewCustomerLifetimeValue() {
      return newCustomerLifetimeValue_;
    }
    /**
     * <pre>
     * New customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for
     * biddable conversions. If your campaign has adopted the customer
     * acquisition goal and selected "bid higher for new customers", these values
     * will be included in "conversions_value" for optimization. See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double new_customer_lifetime_value = 293;</code>
     * @param value The newCustomerLifetimeValue to set.
     * @return This builder for chaining.
     */
    public Builder setNewCustomerLifetimeValue(double value) {

      newCustomerLifetimeValue_ = value;
      bitField1_ |= 0x00200000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * New customers' lifetime conversion value. If you have set up
     * customer acquisition goal at either account level or campaign level, this
     * will include the additional conversion value from new customers for
     * biddable conversions. If your campaign has adopted the customer
     * acquisition goal and selected "bid higher for new customers", these values
     * will be included in "conversions_value" for optimization. See
     * https://support.google.com/google-ads/answer/12080169 for more details.
     * </pre>
     *
     * <code>optional double new_customer_lifetime_value = 293;</code>
     * @return This builder for chaining.
     */
    public Builder clearNewCustomerLifetimeValue() {
      bitField1_ = (bitField1_ & ~0x00200000);
      newCustomerLifetimeValue_ = 0D;
      onChanged();
      return this;
    }

    private double conversionsValuePerCost_ ;
    /**
     * <pre>
     * The value of conversions divided by the cost of ad interactions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_value_per_cost = 166;</code>
     * @return Whether the conversionsValuePerCost field is set.
     */
    @java.lang.Override
    public boolean hasConversionsValuePerCost() {
      return ((bitField1_ & 0x00400000) != 0);
    }
    /**
     * <pre>
     * The value of conversions divided by the cost of ad interactions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_value_per_cost = 166;</code>
     * @return The conversionsValuePerCost.
     */
    @java.lang.Override
    public double getConversionsValuePerCost() {
      return conversionsValuePerCost_;
    }
    /**
     * <pre>
     * The value of conversions divided by the cost of ad interactions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_value_per_cost = 166;</code>
     * @param value The conversionsValuePerCost to set.
     * @return This builder for chaining.
     */
    public Builder setConversionsValuePerCost(double value) {

      conversionsValuePerCost_ = value;
      bitField1_ |= 0x00400000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of conversions divided by the cost of ad interactions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double conversions_value_per_cost = 166;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionsValuePerCost() {
      bitField1_ = (bitField1_ & ~0x00400000);
      conversionsValuePerCost_ = 0D;
      onChanged();
      return this;
    }

    private double conversionsFromInteractionsValuePerInteraction_ ;
    /**
     * <pre>
     * The value of conversions from interactions divided by the number of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_value_per_interaction = 167;</code>
     * @return Whether the conversionsFromInteractionsValuePerInteraction field is set.
     */
    @java.lang.Override
    public boolean hasConversionsFromInteractionsValuePerInteraction() {
      return ((bitField1_ & 0x00800000) != 0);
    }
    /**
     * <pre>
     * The value of conversions from interactions divided by the number of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_value_per_interaction = 167;</code>
     * @return The conversionsFromInteractionsValuePerInteraction.
     */
    @java.lang.Override
    public double getConversionsFromInteractionsValuePerInteraction() {
      return conversionsFromInteractionsValuePerInteraction_;
    }
    /**
     * <pre>
     * The value of conversions from interactions divided by the number of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_value_per_interaction = 167;</code>
     * @param value The conversionsFromInteractionsValuePerInteraction to set.
     * @return This builder for chaining.
     */
    public Builder setConversionsFromInteractionsValuePerInteraction(double value) {

      conversionsFromInteractionsValuePerInteraction_ = value;
      bitField1_ |= 0x00800000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of conversions from interactions divided by the number of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions_from_interactions_value_per_interaction = 167;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionsFromInteractionsValuePerInteraction() {
      bitField1_ = (bitField1_ & ~0x00800000);
      conversionsFromInteractionsValuePerInteraction_ = 0D;
      onChanged();
      return this;
    }

    private double conversions_ ;
    /**
     * <pre>
     * The number of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions = 168;</code>
     * @return Whether the conversions field is set.
     */
    @java.lang.Override
    public boolean hasConversions() {
      return ((bitField1_ & 0x01000000) != 0);
    }
    /**
     * <pre>
     * The number of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions = 168;</code>
     * @return The conversions.
     */
    @java.lang.Override
    public double getConversions() {
      return conversions_;
    }
    /**
     * <pre>
     * The number of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions = 168;</code>
     * @param value The conversions to set.
     * @return This builder for chaining.
     */
    public Builder setConversions(double value) {

      conversions_ = value;
      bitField1_ |= 0x01000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double conversions = 168;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversions() {
      bitField1_ = (bitField1_ & ~0x01000000);
      conversions_ = 0D;
      onChanged();
      return this;
    }

    private double conversionsByConversionDate_ ;
    /**
     * <pre>
     * The number of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions. When this column is selected with date, the values in date
     * column means the conversion date. Details for the by_conversion_date
     * columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double conversions_by_conversion_date = 243;</code>
     * @return The conversionsByConversionDate.
     */
    @java.lang.Override
    public double getConversionsByConversionDate() {
      return conversionsByConversionDate_;
    }
    /**
     * <pre>
     * The number of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions. When this column is selected with date, the values in date
     * column means the conversion date. Details for the by_conversion_date
     * columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double conversions_by_conversion_date = 243;</code>
     * @param value The conversionsByConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setConversionsByConversionDate(double value) {

      conversionsByConversionDate_ = value;
      bitField1_ |= 0x02000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions. When this column is selected with date, the values in date
     * column means the conversion date. Details for the by_conversion_date
     * columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>double conversions_by_conversion_date = 243;</code>
     * @return This builder for chaining.
     */
    public Builder clearConversionsByConversionDate() {
      bitField1_ = (bitField1_ & ~0x02000000);
      conversionsByConversionDate_ = 0D;
      onChanged();
      return this;
    }

    private long costMicros_ ;
    /**
     * <pre>
     * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
     * (CPM) costs during this period.
     * </pre>
     *
     * <code>optional int64 cost_micros = 169;</code>
     * @return Whether the costMicros field is set.
     */
    @java.lang.Override
    public boolean hasCostMicros() {
      return ((bitField1_ & 0x04000000) != 0);
    }
    /**
     * <pre>
     * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
     * (CPM) costs during this period.
     * </pre>
     *
     * <code>optional int64 cost_micros = 169;</code>
     * @return The costMicros.
     */
    @java.lang.Override
    public long getCostMicros() {
      return costMicros_;
    }
    /**
     * <pre>
     * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
     * (CPM) costs during this period.
     * </pre>
     *
     * <code>optional int64 cost_micros = 169;</code>
     * @param value The costMicros to set.
     * @return This builder for chaining.
     */
    public Builder setCostMicros(long value) {

      costMicros_ = value;
      bitField1_ |= 0x04000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
     * (CPM) costs during this period.
     * </pre>
     *
     * <code>optional int64 cost_micros = 169;</code>
     * @return This builder for chaining.
     */
    public Builder clearCostMicros() {
      bitField1_ = (bitField1_ & ~0x04000000);
      costMicros_ = 0L;
      onChanged();
      return this;
    }

    private double costPerAllConversions_ ;
    /**
     * <pre>
     * The cost of ad interactions divided by all conversions.
     * </pre>
     *
     * <code>optional double cost_per_all_conversions = 170;</code>
     * @return Whether the costPerAllConversions field is set.
     */
    @java.lang.Override
    public boolean hasCostPerAllConversions() {
      return ((bitField1_ & 0x08000000) != 0);
    }
    /**
     * <pre>
     * The cost of ad interactions divided by all conversions.
     * </pre>
     *
     * <code>optional double cost_per_all_conversions = 170;</code>
     * @return The costPerAllConversions.
     */
    @java.lang.Override
    public double getCostPerAllConversions() {
      return costPerAllConversions_;
    }
    /**
     * <pre>
     * The cost of ad interactions divided by all conversions.
     * </pre>
     *
     * <code>optional double cost_per_all_conversions = 170;</code>
     * @param value The costPerAllConversions to set.
     * @return This builder for chaining.
     */
    public Builder setCostPerAllConversions(double value) {

      costPerAllConversions_ = value;
      bitField1_ |= 0x08000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The cost of ad interactions divided by all conversions.
     * </pre>
     *
     * <code>optional double cost_per_all_conversions = 170;</code>
     * @return This builder for chaining.
     */
    public Builder clearCostPerAllConversions() {
      bitField1_ = (bitField1_ & ~0x08000000);
      costPerAllConversions_ = 0D;
      onChanged();
      return this;
    }

    private double costPerConversion_ ;
    /**
     * <pre>
     * The cost of ad interactions divided by conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double cost_per_conversion = 171;</code>
     * @return Whether the costPerConversion field is set.
     */
    @java.lang.Override
    public boolean hasCostPerConversion() {
      return ((bitField1_ & 0x10000000) != 0);
    }
    /**
     * <pre>
     * The cost of ad interactions divided by conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double cost_per_conversion = 171;</code>
     * @return The costPerConversion.
     */
    @java.lang.Override
    public double getCostPerConversion() {
      return costPerConversion_;
    }
    /**
     * <pre>
     * The cost of ad interactions divided by conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double cost_per_conversion = 171;</code>
     * @param value The costPerConversion to set.
     * @return This builder for chaining.
     */
    public Builder setCostPerConversion(double value) {

      costPerConversion_ = value;
      bitField1_ |= 0x10000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The cost of ad interactions divided by conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double cost_per_conversion = 171;</code>
     * @return This builder for chaining.
     */
    public Builder clearCostPerConversion() {
      bitField1_ = (bitField1_ & ~0x10000000);
      costPerConversion_ = 0D;
      onChanged();
      return this;
    }

    private double costPerCurrentModelAttributedConversion_ ;
    /**
     * <pre>
     * The cost of ad interactions divided by current model attributed
     * conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double cost_per_current_model_attributed_conversion = 172;</code>
     * @return Whether the costPerCurrentModelAttributedConversion field is set.
     */
    @java.lang.Override
    public boolean hasCostPerCurrentModelAttributedConversion() {
      return ((bitField1_ & 0x20000000) != 0);
    }
    /**
     * <pre>
     * The cost of ad interactions divided by current model attributed
     * conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double cost_per_current_model_attributed_conversion = 172;</code>
     * @return The costPerCurrentModelAttributedConversion.
     */
    @java.lang.Override
    public double getCostPerCurrentModelAttributedConversion() {
      return costPerCurrentModelAttributedConversion_;
    }
    /**
     * <pre>
     * The cost of ad interactions divided by current model attributed
     * conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double cost_per_current_model_attributed_conversion = 172;</code>
     * @param value The costPerCurrentModelAttributedConversion to set.
     * @return This builder for chaining.
     */
    public Builder setCostPerCurrentModelAttributedConversion(double value) {

      costPerCurrentModelAttributedConversion_ = value;
      bitField1_ |= 0x20000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The cost of ad interactions divided by current model attributed
     * conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double cost_per_current_model_attributed_conversion = 172;</code>
     * @return This builder for chaining.
     */
    public Builder clearCostPerCurrentModelAttributedConversion() {
      bitField1_ = (bitField1_ & ~0x20000000);
      costPerCurrentModelAttributedConversion_ = 0D;
      onChanged();
      return this;
    }

    private double crossDeviceConversions_ ;
    /**
     * <pre>
     * Conversions from when a customer clicks on a Google Ads ad on one device,
     * then converts on a different device or browser.
     * Cross-device conversions are already included in all_conversions.
     * </pre>
     *
     * <code>optional double cross_device_conversions = 173;</code>
     * @return Whether the crossDeviceConversions field is set.
     */
    @java.lang.Override
    public boolean hasCrossDeviceConversions() {
      return ((bitField1_ & 0x40000000) != 0);
    }
    /**
     * <pre>
     * Conversions from when a customer clicks on a Google Ads ad on one device,
     * then converts on a different device or browser.
     * Cross-device conversions are already included in all_conversions.
     * </pre>
     *
     * <code>optional double cross_device_conversions = 173;</code>
     * @return The crossDeviceConversions.
     */
    @java.lang.Override
    public double getCrossDeviceConversions() {
      return crossDeviceConversions_;
    }
    /**
     * <pre>
     * Conversions from when a customer clicks on a Google Ads ad on one device,
     * then converts on a different device or browser.
     * Cross-device conversions are already included in all_conversions.
     * </pre>
     *
     * <code>optional double cross_device_conversions = 173;</code>
     * @param value The crossDeviceConversions to set.
     * @return This builder for chaining.
     */
    public Builder setCrossDeviceConversions(double value) {

      crossDeviceConversions_ = value;
      bitField1_ |= 0x40000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Conversions from when a customer clicks on a Google Ads ad on one device,
     * then converts on a different device or browser.
     * Cross-device conversions are already included in all_conversions.
     * </pre>
     *
     * <code>optional double cross_device_conversions = 173;</code>
     * @return This builder for chaining.
     */
    public Builder clearCrossDeviceConversions() {
      bitField1_ = (bitField1_ & ~0x40000000);
      crossDeviceConversions_ = 0D;
      onChanged();
      return this;
    }

    private double ctr_ ;
    /**
     * <pre>
     * The number of clicks your ad receives (Clicks) divided by the number
     * of times your ad is shown (Impressions).
     * </pre>
     *
     * <code>optional double ctr = 174;</code>
     * @return Whether the ctr field is set.
     */
    @java.lang.Override
    public boolean hasCtr() {
      return ((bitField1_ & 0x80000000) != 0);
    }
    /**
     * <pre>
     * The number of clicks your ad receives (Clicks) divided by the number
     * of times your ad is shown (Impressions).
     * </pre>
     *
     * <code>optional double ctr = 174;</code>
     * @return The ctr.
     */
    @java.lang.Override
    public double getCtr() {
      return ctr_;
    }
    /**
     * <pre>
     * The number of clicks your ad receives (Clicks) divided by the number
     * of times your ad is shown (Impressions).
     * </pre>
     *
     * <code>optional double ctr = 174;</code>
     * @param value The ctr to set.
     * @return This builder for chaining.
     */
    public Builder setCtr(double value) {

      ctr_ = value;
      bitField1_ |= 0x80000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of clicks your ad receives (Clicks) divided by the number
     * of times your ad is shown (Impressions).
     * </pre>
     *
     * <code>optional double ctr = 174;</code>
     * @return This builder for chaining.
     */
    public Builder clearCtr() {
      bitField1_ = (bitField1_ & ~0x80000000);
      ctr_ = 0D;
      onChanged();
      return this;
    }

    private double currentModelAttributedConversions_ ;
    /**
     * <pre>
     * Shows how your historic conversions data would look under the attribution
     * model you've currently selected. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions = 175;</code>
     * @return Whether the currentModelAttributedConversions field is set.
     */
    @java.lang.Override
    public boolean hasCurrentModelAttributedConversions() {
      return ((bitField2_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Shows how your historic conversions data would look under the attribution
     * model you've currently selected. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions = 175;</code>
     * @return The currentModelAttributedConversions.
     */
    @java.lang.Override
    public double getCurrentModelAttributedConversions() {
      return currentModelAttributedConversions_;
    }
    /**
     * <pre>
     * Shows how your historic conversions data would look under the attribution
     * model you've currently selected. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions = 175;</code>
     * @param value The currentModelAttributedConversions to set.
     * @return This builder for chaining.
     */
    public Builder setCurrentModelAttributedConversions(double value) {

      currentModelAttributedConversions_ = value;
      bitField2_ |= 0x00000001;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Shows how your historic conversions data would look under the attribution
     * model you've currently selected. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions = 175;</code>
     * @return This builder for chaining.
     */
    public Builder clearCurrentModelAttributedConversions() {
      bitField2_ = (bitField2_ & ~0x00000001);
      currentModelAttributedConversions_ = 0D;
      onChanged();
      return this;
    }

    private double currentModelAttributedConversionsFromInteractionsRate_ ;
    /**
     * <pre>
     * Current model attributed conversions from interactions divided by the
     * number of ad interactions (such as clicks for text ads or views for video
     * ads). This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_rate = 176;</code>
     * @return Whether the currentModelAttributedConversionsFromInteractionsRate field is set.
     */
    @java.lang.Override
    public boolean hasCurrentModelAttributedConversionsFromInteractionsRate() {
      return ((bitField2_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Current model attributed conversions from interactions divided by the
     * number of ad interactions (such as clicks for text ads or views for video
     * ads). This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_rate = 176;</code>
     * @return The currentModelAttributedConversionsFromInteractionsRate.
     */
    @java.lang.Override
    public double getCurrentModelAttributedConversionsFromInteractionsRate() {
      return currentModelAttributedConversionsFromInteractionsRate_;
    }
    /**
     * <pre>
     * Current model attributed conversions from interactions divided by the
     * number of ad interactions (such as clicks for text ads or views for video
     * ads). This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_rate = 176;</code>
     * @param value The currentModelAttributedConversionsFromInteractionsRate to set.
     * @return This builder for chaining.
     */
    public Builder setCurrentModelAttributedConversionsFromInteractionsRate(double value) {

      currentModelAttributedConversionsFromInteractionsRate_ = value;
      bitField2_ |= 0x00000002;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Current model attributed conversions from interactions divided by the
     * number of ad interactions (such as clicks for text ads or views for video
     * ads). This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_rate = 176;</code>
     * @return This builder for chaining.
     */
    public Builder clearCurrentModelAttributedConversionsFromInteractionsRate() {
      bitField2_ = (bitField2_ & ~0x00000002);
      currentModelAttributedConversionsFromInteractionsRate_ = 0D;
      onChanged();
      return this;
    }

    private double currentModelAttributedConversionsFromInteractionsValuePerInteraction_ ;
    /**
     * <pre>
     * The value of current model attributed conversions from interactions divided
     * by the number of ad interactions. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_value_per_interaction = 177;</code>
     * @return Whether the currentModelAttributedConversionsFromInteractionsValuePerInteraction field is set.
     */
    @java.lang.Override
    public boolean hasCurrentModelAttributedConversionsFromInteractionsValuePerInteraction() {
      return ((bitField2_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * The value of current model attributed conversions from interactions divided
     * by the number of ad interactions. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_value_per_interaction = 177;</code>
     * @return The currentModelAttributedConversionsFromInteractionsValuePerInteraction.
     */
    @java.lang.Override
    public double getCurrentModelAttributedConversionsFromInteractionsValuePerInteraction() {
      return currentModelAttributedConversionsFromInteractionsValuePerInteraction_;
    }
    /**
     * <pre>
     * The value of current model attributed conversions from interactions divided
     * by the number of ad interactions. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_value_per_interaction = 177;</code>
     * @param value The currentModelAttributedConversionsFromInteractionsValuePerInteraction to set.
     * @return This builder for chaining.
     */
    public Builder setCurrentModelAttributedConversionsFromInteractionsValuePerInteraction(double value) {

      currentModelAttributedConversionsFromInteractionsValuePerInteraction_ = value;
      bitField2_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of current model attributed conversions from interactions divided
     * by the number of ad interactions. This only includes conversion actions
     * which include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_from_interactions_value_per_interaction = 177;</code>
     * @return This builder for chaining.
     */
    public Builder clearCurrentModelAttributedConversionsFromInteractionsValuePerInteraction() {
      bitField2_ = (bitField2_ & ~0x00000004);
      currentModelAttributedConversionsFromInteractionsValuePerInteraction_ = 0D;
      onChanged();
      return this;
    }

    private double currentModelAttributedConversionsValue_ ;
    /**
     * <pre>
     * The value of current model attributed conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value = 178;</code>
     * @return Whether the currentModelAttributedConversionsValue field is set.
     */
    @java.lang.Override
    public boolean hasCurrentModelAttributedConversionsValue() {
      return ((bitField2_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * The value of current model attributed conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value = 178;</code>
     * @return The currentModelAttributedConversionsValue.
     */
    @java.lang.Override
    public double getCurrentModelAttributedConversionsValue() {
      return currentModelAttributedConversionsValue_;
    }
    /**
     * <pre>
     * The value of current model attributed conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value = 178;</code>
     * @param value The currentModelAttributedConversionsValue to set.
     * @return This builder for chaining.
     */
    public Builder setCurrentModelAttributedConversionsValue(double value) {

      currentModelAttributedConversionsValue_ = value;
      bitField2_ |= 0x00000008;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of current model attributed conversions. This only includes
     * conversion actions which include_in_conversions_metric attribute is set to
     * true. If you use conversion-based bidding, your bid strategies will
     * optimize for these conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value = 178;</code>
     * @return This builder for chaining.
     */
    public Builder clearCurrentModelAttributedConversionsValue() {
      bitField2_ = (bitField2_ & ~0x00000008);
      currentModelAttributedConversionsValue_ = 0D;
      onChanged();
      return this;
    }

    private double currentModelAttributedConversionsValuePerCost_ ;
    /**
     * <pre>
     * The value of current model attributed conversions divided by the cost of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value_per_cost = 179;</code>
     * @return Whether the currentModelAttributedConversionsValuePerCost field is set.
     */
    @java.lang.Override
    public boolean hasCurrentModelAttributedConversionsValuePerCost() {
      return ((bitField2_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * The value of current model attributed conversions divided by the cost of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value_per_cost = 179;</code>
     * @return The currentModelAttributedConversionsValuePerCost.
     */
    @java.lang.Override
    public double getCurrentModelAttributedConversionsValuePerCost() {
      return currentModelAttributedConversionsValuePerCost_;
    }
    /**
     * <pre>
     * The value of current model attributed conversions divided by the cost of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value_per_cost = 179;</code>
     * @param value The currentModelAttributedConversionsValuePerCost to set.
     * @return This builder for chaining.
     */
    public Builder setCurrentModelAttributedConversionsValuePerCost(double value) {

      currentModelAttributedConversionsValuePerCost_ = value;
      bitField2_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of current model attributed conversions divided by the cost of ad
     * interactions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double current_model_attributed_conversions_value_per_cost = 179;</code>
     * @return This builder for chaining.
     */
    public Builder clearCurrentModelAttributedConversionsValuePerCost() {
      bitField2_ = (bitField2_ & ~0x00000010);
      currentModelAttributedConversionsValuePerCost_ = 0D;
      onChanged();
      return this;
    }

    private double engagementRate_ ;
    /**
     * <pre>
     * How often people engage with your ad after it's shown to them. This is the
     * number of ad expansions divided by the number of times your ad is shown.
     * </pre>
     *
     * <code>optional double engagement_rate = 180;</code>
     * @return Whether the engagementRate field is set.
     */
    @java.lang.Override
    public boolean hasEngagementRate() {
      return ((bitField2_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * How often people engage with your ad after it's shown to them. This is the
     * number of ad expansions divided by the number of times your ad is shown.
     * </pre>
     *
     * <code>optional double engagement_rate = 180;</code>
     * @return The engagementRate.
     */
    @java.lang.Override
    public double getEngagementRate() {
      return engagementRate_;
    }
    /**
     * <pre>
     * How often people engage with your ad after it's shown to them. This is the
     * number of ad expansions divided by the number of times your ad is shown.
     * </pre>
     *
     * <code>optional double engagement_rate = 180;</code>
     * @param value The engagementRate to set.
     * @return This builder for chaining.
     */
    public Builder setEngagementRate(double value) {

      engagementRate_ = value;
      bitField2_ |= 0x00000020;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * How often people engage with your ad after it's shown to them. This is the
     * number of ad expansions divided by the number of times your ad is shown.
     * </pre>
     *
     * <code>optional double engagement_rate = 180;</code>
     * @return This builder for chaining.
     */
    public Builder clearEngagementRate() {
      bitField2_ = (bitField2_ & ~0x00000020);
      engagementRate_ = 0D;
      onChanged();
      return this;
    }

    private long engagements_ ;
    /**
     * <pre>
     * The number of engagements.
     * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
     * future, other ad types may support engagement metrics.
     * </pre>
     *
     * <code>optional int64 engagements = 181;</code>
     * @return Whether the engagements field is set.
     */
    @java.lang.Override
    public boolean hasEngagements() {
      return ((bitField2_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * The number of engagements.
     * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
     * future, other ad types may support engagement metrics.
     * </pre>
     *
     * <code>optional int64 engagements = 181;</code>
     * @return The engagements.
     */
    @java.lang.Override
    public long getEngagements() {
      return engagements_;
    }
    /**
     * <pre>
     * The number of engagements.
     * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
     * future, other ad types may support engagement metrics.
     * </pre>
     *
     * <code>optional int64 engagements = 181;</code>
     * @param value The engagements to set.
     * @return This builder for chaining.
     */
    public Builder setEngagements(long value) {

      engagements_ = value;
      bitField2_ |= 0x00000040;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of engagements.
     * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
     * future, other ad types may support engagement metrics.
     * </pre>
     *
     * <code>optional int64 engagements = 181;</code>
     * @return This builder for chaining.
     */
    public Builder clearEngagements() {
      bitField2_ = (bitField2_ & ~0x00000040);
      engagements_ = 0L;
      onChanged();
      return this;
    }

    private double hotelAverageLeadValueMicros_ ;
    /**
     * <pre>
     * Average lead value based on clicks.
     * </pre>
     *
     * <code>optional double hotel_average_lead_value_micros = 213;</code>
     * @return Whether the hotelAverageLeadValueMicros field is set.
     */
    @java.lang.Override
    public boolean hasHotelAverageLeadValueMicros() {
      return ((bitField2_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * Average lead value based on clicks.
     * </pre>
     *
     * <code>optional double hotel_average_lead_value_micros = 213;</code>
     * @return The hotelAverageLeadValueMicros.
     */
    @java.lang.Override
    public double getHotelAverageLeadValueMicros() {
      return hotelAverageLeadValueMicros_;
    }
    /**
     * <pre>
     * Average lead value based on clicks.
     * </pre>
     *
     * <code>optional double hotel_average_lead_value_micros = 213;</code>
     * @param value The hotelAverageLeadValueMicros to set.
     * @return This builder for chaining.
     */
    public Builder setHotelAverageLeadValueMicros(double value) {

      hotelAverageLeadValueMicros_ = value;
      bitField2_ |= 0x00000080;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Average lead value based on clicks.
     * </pre>
     *
     * <code>optional double hotel_average_lead_value_micros = 213;</code>
     * @return This builder for chaining.
     */
    public Builder clearHotelAverageLeadValueMicros() {
      bitField2_ = (bitField2_ & ~0x00000080);
      hotelAverageLeadValueMicros_ = 0D;
      onChanged();
      return this;
    }

    private long hotelCommissionRateMicros_ ;
    /**
     * <pre>
     * Commission bid rate in micros. A 20% commission is represented as
     * 200,000.
     * </pre>
     *
     * <code>optional int64 hotel_commission_rate_micros = 256;</code>
     * @return Whether the hotelCommissionRateMicros field is set.
     */
    @java.lang.Override
    public boolean hasHotelCommissionRateMicros() {
      return ((bitField2_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * Commission bid rate in micros. A 20% commission is represented as
     * 200,000.
     * </pre>
     *
     * <code>optional int64 hotel_commission_rate_micros = 256;</code>
     * @return The hotelCommissionRateMicros.
     */
    @java.lang.Override
    public long getHotelCommissionRateMicros() {
      return hotelCommissionRateMicros_;
    }
    /**
     * <pre>
     * Commission bid rate in micros. A 20% commission is represented as
     * 200,000.
     * </pre>
     *
     * <code>optional int64 hotel_commission_rate_micros = 256;</code>
     * @param value The hotelCommissionRateMicros to set.
     * @return This builder for chaining.
     */
    public Builder setHotelCommissionRateMicros(long value) {

      hotelCommissionRateMicros_ = value;
      bitField2_ |= 0x00000100;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Commission bid rate in micros. A 20% commission is represented as
     * 200,000.
     * </pre>
     *
     * <code>optional int64 hotel_commission_rate_micros = 256;</code>
     * @return This builder for chaining.
     */
    public Builder clearHotelCommissionRateMicros() {
      bitField2_ = (bitField2_ & ~0x00000100);
      hotelCommissionRateMicros_ = 0L;
      onChanged();
      return this;
    }

    private double hotelExpectedCommissionCost_ ;
    /**
     * <pre>
     * Expected commission cost. The result of multiplying the commission value
     * times the hotel_commission_rate in advertiser currency.
     * </pre>
     *
     * <code>optional double hotel_expected_commission_cost = 257;</code>
     * @return Whether the hotelExpectedCommissionCost field is set.
     */
    @java.lang.Override
    public boolean hasHotelExpectedCommissionCost() {
      return ((bitField2_ & 0x00000200) != 0);
    }
    /**
     * <pre>
     * Expected commission cost. The result of multiplying the commission value
     * times the hotel_commission_rate in advertiser currency.
     * </pre>
     *
     * <code>optional double hotel_expected_commission_cost = 257;</code>
     * @return The hotelExpectedCommissionCost.
     */
    @java.lang.Override
    public double getHotelExpectedCommissionCost() {
      return hotelExpectedCommissionCost_;
    }
    /**
     * <pre>
     * Expected commission cost. The result of multiplying the commission value
     * times the hotel_commission_rate in advertiser currency.
     * </pre>
     *
     * <code>optional double hotel_expected_commission_cost = 257;</code>
     * @param value The hotelExpectedCommissionCost to set.
     * @return This builder for chaining.
     */
    public Builder setHotelExpectedCommissionCost(double value) {

      hotelExpectedCommissionCost_ = value;
      bitField2_ |= 0x00000200;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Expected commission cost. The result of multiplying the commission value
     * times the hotel_commission_rate in advertiser currency.
     * </pre>
     *
     * <code>optional double hotel_expected_commission_cost = 257;</code>
     * @return This builder for chaining.
     */
    public Builder clearHotelExpectedCommissionCost() {
      bitField2_ = (bitField2_ & ~0x00000200);
      hotelExpectedCommissionCost_ = 0D;
      onChanged();
      return this;
    }

    private double hotelPriceDifferencePercentage_ ;
    /**
     * <pre>
     * The average price difference between the price offered by reporting hotel
     * advertiser and the cheapest price offered by the competing advertiser.
     * </pre>
     *
     * <code>optional double hotel_price_difference_percentage = 214;</code>
     * @return Whether the hotelPriceDifferencePercentage field is set.
     */
    @java.lang.Override
    public boolean hasHotelPriceDifferencePercentage() {
      return ((bitField2_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * The average price difference between the price offered by reporting hotel
     * advertiser and the cheapest price offered by the competing advertiser.
     * </pre>
     *
     * <code>optional double hotel_price_difference_percentage = 214;</code>
     * @return The hotelPriceDifferencePercentage.
     */
    @java.lang.Override
    public double getHotelPriceDifferencePercentage() {
      return hotelPriceDifferencePercentage_;
    }
    /**
     * <pre>
     * The average price difference between the price offered by reporting hotel
     * advertiser and the cheapest price offered by the competing advertiser.
     * </pre>
     *
     * <code>optional double hotel_price_difference_percentage = 214;</code>
     * @param value The hotelPriceDifferencePercentage to set.
     * @return This builder for chaining.
     */
    public Builder setHotelPriceDifferencePercentage(double value) {

      hotelPriceDifferencePercentage_ = value;
      bitField2_ |= 0x00000400;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The average price difference between the price offered by reporting hotel
     * advertiser and the cheapest price offered by the competing advertiser.
     * </pre>
     *
     * <code>optional double hotel_price_difference_percentage = 214;</code>
     * @return This builder for chaining.
     */
    public Builder clearHotelPriceDifferencePercentage() {
      bitField2_ = (bitField2_ & ~0x00000400);
      hotelPriceDifferencePercentage_ = 0D;
      onChanged();
      return this;
    }

    private long hotelEligibleImpressions_ ;
    /**
     * <pre>
     * The number of impressions that hotel partners could have had given their
     * feed performance.
     * </pre>
     *
     * <code>optional int64 hotel_eligible_impressions = 215;</code>
     * @return Whether the hotelEligibleImpressions field is set.
     */
    @java.lang.Override
    public boolean hasHotelEligibleImpressions() {
      return ((bitField2_ & 0x00000800) != 0);
    }
    /**
     * <pre>
     * The number of impressions that hotel partners could have had given their
     * feed performance.
     * </pre>
     *
     * <code>optional int64 hotel_eligible_impressions = 215;</code>
     * @return The hotelEligibleImpressions.
     */
    @java.lang.Override
    public long getHotelEligibleImpressions() {
      return hotelEligibleImpressions_;
    }
    /**
     * <pre>
     * The number of impressions that hotel partners could have had given their
     * feed performance.
     * </pre>
     *
     * <code>optional int64 hotel_eligible_impressions = 215;</code>
     * @param value The hotelEligibleImpressions to set.
     * @return This builder for chaining.
     */
    public Builder setHotelEligibleImpressions(long value) {

      hotelEligibleImpressions_ = value;
      bitField2_ |= 0x00000800;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of impressions that hotel partners could have had given their
     * feed performance.
     * </pre>
     *
     * <code>optional int64 hotel_eligible_impressions = 215;</code>
     * @return This builder for chaining.
     */
    public Builder clearHotelEligibleImpressions() {
      bitField2_ = (bitField2_ & ~0x00000800);
      hotelEligibleImpressions_ = 0L;
      onChanged();
      return this;
    }

    private int historicalCreativeQualityScore_ = 0;
    /**
     * <pre>
     * The creative historical quality score.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_creative_quality_score = 80;</code>
     * @return The enum numeric value on the wire for historicalCreativeQualityScore.
     */
    @java.lang.Override public int getHistoricalCreativeQualityScoreValue() {
      return historicalCreativeQualityScore_;
    }
    /**
     * <pre>
     * The creative historical quality score.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_creative_quality_score = 80;</code>
     * @param value The enum numeric value on the wire for historicalCreativeQualityScore to set.
     * @return This builder for chaining.
     */
    public Builder setHistoricalCreativeQualityScoreValue(int value) {
      historicalCreativeQualityScore_ = value;
      bitField2_ |= 0x00001000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The creative historical quality score.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_creative_quality_score = 80;</code>
     * @return The historicalCreativeQualityScore.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket getHistoricalCreativeQualityScore() {
      com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket result = com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.forNumber(historicalCreativeQualityScore_);
      return result == null ? com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNRECOGNIZED : result;
    }
    /**
     * <pre>
     * The creative historical quality score.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_creative_quality_score = 80;</code>
     * @param value The historicalCreativeQualityScore to set.
     * @return This builder for chaining.
     */
    public Builder setHistoricalCreativeQualityScore(com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket value) {
      if (value == null) {
        throw new NullPointerException();
      }
      bitField2_ |= 0x00001000;
      historicalCreativeQualityScore_ = value.getNumber();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The creative historical quality score.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_creative_quality_score = 80;</code>
     * @return This builder for chaining.
     */
    public Builder clearHistoricalCreativeQualityScore() {
      bitField2_ = (bitField2_ & ~0x00001000);
      historicalCreativeQualityScore_ = 0;
      onChanged();
      return this;
    }

    private int historicalLandingPageQualityScore_ = 0;
    /**
     * <pre>
     * The quality of historical landing page experience.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_landing_page_quality_score = 81;</code>
     * @return The enum numeric value on the wire for historicalLandingPageQualityScore.
     */
    @java.lang.Override public int getHistoricalLandingPageQualityScoreValue() {
      return historicalLandingPageQualityScore_;
    }
    /**
     * <pre>
     * The quality of historical landing page experience.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_landing_page_quality_score = 81;</code>
     * @param value The enum numeric value on the wire for historicalLandingPageQualityScore to set.
     * @return This builder for chaining.
     */
    public Builder setHistoricalLandingPageQualityScoreValue(int value) {
      historicalLandingPageQualityScore_ = value;
      bitField2_ |= 0x00002000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The quality of historical landing page experience.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_landing_page_quality_score = 81;</code>
     * @return The historicalLandingPageQualityScore.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket getHistoricalLandingPageQualityScore() {
      com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket result = com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.forNumber(historicalLandingPageQualityScore_);
      return result == null ? com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNRECOGNIZED : result;
    }
    /**
     * <pre>
     * The quality of historical landing page experience.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_landing_page_quality_score = 81;</code>
     * @param value The historicalLandingPageQualityScore to set.
     * @return This builder for chaining.
     */
    public Builder setHistoricalLandingPageQualityScore(com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket value) {
      if (value == null) {
        throw new NullPointerException();
      }
      bitField2_ |= 0x00002000;
      historicalLandingPageQualityScore_ = value.getNumber();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The quality of historical landing page experience.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_landing_page_quality_score = 81;</code>
     * @return This builder for chaining.
     */
    public Builder clearHistoricalLandingPageQualityScore() {
      bitField2_ = (bitField2_ & ~0x00002000);
      historicalLandingPageQualityScore_ = 0;
      onChanged();
      return this;
    }

    private long historicalQualityScore_ ;
    /**
     * <pre>
     * The historical quality score.
     * </pre>
     *
     * <code>optional int64 historical_quality_score = 216;</code>
     * @return Whether the historicalQualityScore field is set.
     */
    @java.lang.Override
    public boolean hasHistoricalQualityScore() {
      return ((bitField2_ & 0x00004000) != 0);
    }
    /**
     * <pre>
     * The historical quality score.
     * </pre>
     *
     * <code>optional int64 historical_quality_score = 216;</code>
     * @return The historicalQualityScore.
     */
    @java.lang.Override
    public long getHistoricalQualityScore() {
      return historicalQualityScore_;
    }
    /**
     * <pre>
     * The historical quality score.
     * </pre>
     *
     * <code>optional int64 historical_quality_score = 216;</code>
     * @param value The historicalQualityScore to set.
     * @return This builder for chaining.
     */
    public Builder setHistoricalQualityScore(long value) {

      historicalQualityScore_ = value;
      bitField2_ |= 0x00004000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The historical quality score.
     * </pre>
     *
     * <code>optional int64 historical_quality_score = 216;</code>
     * @return This builder for chaining.
     */
    public Builder clearHistoricalQualityScore() {
      bitField2_ = (bitField2_ & ~0x00004000);
      historicalQualityScore_ = 0L;
      onChanged();
      return this;
    }

    private int historicalSearchPredictedCtr_ = 0;
    /**
     * <pre>
     * The historical search predicted click through rate (CTR).
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_search_predicted_ctr = 83;</code>
     * @return The enum numeric value on the wire for historicalSearchPredictedCtr.
     */
    @java.lang.Override public int getHistoricalSearchPredictedCtrValue() {
      return historicalSearchPredictedCtr_;
    }
    /**
     * <pre>
     * The historical search predicted click through rate (CTR).
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_search_predicted_ctr = 83;</code>
     * @param value The enum numeric value on the wire for historicalSearchPredictedCtr to set.
     * @return This builder for chaining.
     */
    public Builder setHistoricalSearchPredictedCtrValue(int value) {
      historicalSearchPredictedCtr_ = value;
      bitField2_ |= 0x00008000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The historical search predicted click through rate (CTR).
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_search_predicted_ctr = 83;</code>
     * @return The historicalSearchPredictedCtr.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket getHistoricalSearchPredictedCtr() {
      com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket result = com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.forNumber(historicalSearchPredictedCtr_);
      return result == null ? com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket.UNRECOGNIZED : result;
    }
    /**
     * <pre>
     * The historical search predicted click through rate (CTR).
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_search_predicted_ctr = 83;</code>
     * @param value The historicalSearchPredictedCtr to set.
     * @return This builder for chaining.
     */
    public Builder setHistoricalSearchPredictedCtr(com.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket value) {
      if (value == null) {
        throw new NullPointerException();
      }
      bitField2_ |= 0x00008000;
      historicalSearchPredictedCtr_ = value.getNumber();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The historical search predicted click through rate (CTR).
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.QualityScoreBucketEnum.QualityScoreBucket historical_search_predicted_ctr = 83;</code>
     * @return This builder for chaining.
     */
    public Builder clearHistoricalSearchPredictedCtr() {
      bitField2_ = (bitField2_ & ~0x00008000);
      historicalSearchPredictedCtr_ = 0;
      onChanged();
      return this;
    }

    private long gmailForwards_ ;
    /**
     * <pre>
     * The number of times the ad was forwarded to someone else as a message.
     * </pre>
     *
     * <code>optional int64 gmail_forwards = 217;</code>
     * @return Whether the gmailForwards field is set.
     */
    @java.lang.Override
    public boolean hasGmailForwards() {
      return ((bitField2_ & 0x00010000) != 0);
    }
    /**
     * <pre>
     * The number of times the ad was forwarded to someone else as a message.
     * </pre>
     *
     * <code>optional int64 gmail_forwards = 217;</code>
     * @return The gmailForwards.
     */
    @java.lang.Override
    public long getGmailForwards() {
      return gmailForwards_;
    }
    /**
     * <pre>
     * The number of times the ad was forwarded to someone else as a message.
     * </pre>
     *
     * <code>optional int64 gmail_forwards = 217;</code>
     * @param value The gmailForwards to set.
     * @return This builder for chaining.
     */
    public Builder setGmailForwards(long value) {

      gmailForwards_ = value;
      bitField2_ |= 0x00010000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times the ad was forwarded to someone else as a message.
     * </pre>
     *
     * <code>optional int64 gmail_forwards = 217;</code>
     * @return This builder for chaining.
     */
    public Builder clearGmailForwards() {
      bitField2_ = (bitField2_ & ~0x00010000);
      gmailForwards_ = 0L;
      onChanged();
      return this;
    }

    private long gmailSaves_ ;
    /**
     * <pre>
     * The number of times someone has saved your Gmail ad to their inbox as a
     * message.
     * </pre>
     *
     * <code>optional int64 gmail_saves = 218;</code>
     * @return Whether the gmailSaves field is set.
     */
    @java.lang.Override
    public boolean hasGmailSaves() {
      return ((bitField2_ & 0x00020000) != 0);
    }
    /**
     * <pre>
     * The number of times someone has saved your Gmail ad to their inbox as a
     * message.
     * </pre>
     *
     * <code>optional int64 gmail_saves = 218;</code>
     * @return The gmailSaves.
     */
    @java.lang.Override
    public long getGmailSaves() {
      return gmailSaves_;
    }
    /**
     * <pre>
     * The number of times someone has saved your Gmail ad to their inbox as a
     * message.
     * </pre>
     *
     * <code>optional int64 gmail_saves = 218;</code>
     * @param value The gmailSaves to set.
     * @return This builder for chaining.
     */
    public Builder setGmailSaves(long value) {

      gmailSaves_ = value;
      bitField2_ |= 0x00020000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times someone has saved your Gmail ad to their inbox as a
     * message.
     * </pre>
     *
     * <code>optional int64 gmail_saves = 218;</code>
     * @return This builder for chaining.
     */
    public Builder clearGmailSaves() {
      bitField2_ = (bitField2_ & ~0x00020000);
      gmailSaves_ = 0L;
      onChanged();
      return this;
    }

    private long gmailSecondaryClicks_ ;
    /**
     * <pre>
     * The number of clicks to the landing page on the expanded state of Gmail
     * ads.
     * </pre>
     *
     * <code>optional int64 gmail_secondary_clicks = 219;</code>
     * @return Whether the gmailSecondaryClicks field is set.
     */
    @java.lang.Override
    public boolean hasGmailSecondaryClicks() {
      return ((bitField2_ & 0x00040000) != 0);
    }
    /**
     * <pre>
     * The number of clicks to the landing page on the expanded state of Gmail
     * ads.
     * </pre>
     *
     * <code>optional int64 gmail_secondary_clicks = 219;</code>
     * @return The gmailSecondaryClicks.
     */
    @java.lang.Override
    public long getGmailSecondaryClicks() {
      return gmailSecondaryClicks_;
    }
    /**
     * <pre>
     * The number of clicks to the landing page on the expanded state of Gmail
     * ads.
     * </pre>
     *
     * <code>optional int64 gmail_secondary_clicks = 219;</code>
     * @param value The gmailSecondaryClicks to set.
     * @return This builder for chaining.
     */
    public Builder setGmailSecondaryClicks(long value) {

      gmailSecondaryClicks_ = value;
      bitField2_ |= 0x00040000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of clicks to the landing page on the expanded state of Gmail
     * ads.
     * </pre>
     *
     * <code>optional int64 gmail_secondary_clicks = 219;</code>
     * @return This builder for chaining.
     */
    public Builder clearGmailSecondaryClicks() {
      bitField2_ = (bitField2_ & ~0x00040000);
      gmailSecondaryClicks_ = 0L;
      onChanged();
      return this;
    }

    private long impressionsFromStoreReach_ ;
    /**
     * <pre>
     * The number of times a store's location-based ad was shown.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional int64 impressions_from_store_reach = 220;</code>
     * @return Whether the impressionsFromStoreReach field is set.
     */
    @java.lang.Override
    public boolean hasImpressionsFromStoreReach() {
      return ((bitField2_ & 0x00080000) != 0);
    }
    /**
     * <pre>
     * The number of times a store's location-based ad was shown.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional int64 impressions_from_store_reach = 220;</code>
     * @return The impressionsFromStoreReach.
     */
    @java.lang.Override
    public long getImpressionsFromStoreReach() {
      return impressionsFromStoreReach_;
    }
    /**
     * <pre>
     * The number of times a store's location-based ad was shown.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional int64 impressions_from_store_reach = 220;</code>
     * @param value The impressionsFromStoreReach to set.
     * @return This builder for chaining.
     */
    public Builder setImpressionsFromStoreReach(long value) {

      impressionsFromStoreReach_ = value;
      bitField2_ |= 0x00080000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times a store's location-based ad was shown.
     *
     * This metric applies to feed items only.
     * </pre>
     *
     * <code>optional int64 impressions_from_store_reach = 220;</code>
     * @return This builder for chaining.
     */
    public Builder clearImpressionsFromStoreReach() {
      bitField2_ = (bitField2_ & ~0x00080000);
      impressionsFromStoreReach_ = 0L;
      onChanged();
      return this;
    }

    private long impressions_ ;
    /**
     * <pre>
     * Count of how often your ad has appeared on a search results page or
     * website on the Google Network.
     * </pre>
     *
     * <code>optional int64 impressions = 221;</code>
     * @return Whether the impressions field is set.
     */
    @java.lang.Override
    public boolean hasImpressions() {
      return ((bitField2_ & 0x00100000) != 0);
    }
    /**
     * <pre>
     * Count of how often your ad has appeared on a search results page or
     * website on the Google Network.
     * </pre>
     *
     * <code>optional int64 impressions = 221;</code>
     * @return The impressions.
     */
    @java.lang.Override
    public long getImpressions() {
      return impressions_;
    }
    /**
     * <pre>
     * Count of how often your ad has appeared on a search results page or
     * website on the Google Network.
     * </pre>
     *
     * <code>optional int64 impressions = 221;</code>
     * @param value The impressions to set.
     * @return This builder for chaining.
     */
    public Builder setImpressions(long value) {

      impressions_ = value;
      bitField2_ |= 0x00100000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Count of how often your ad has appeared on a search results page or
     * website on the Google Network.
     * </pre>
     *
     * <code>optional int64 impressions = 221;</code>
     * @return This builder for chaining.
     */
    public Builder clearImpressions() {
      bitField2_ = (bitField2_ & ~0x00100000);
      impressions_ = 0L;
      onChanged();
      return this;
    }

    private double interactionRate_ ;
    /**
     * <pre>
     * How often people interact with your ad after it is shown to them.
     * This is the number of interactions divided by the number of times your ad
     * is shown.
     * </pre>
     *
     * <code>optional double interaction_rate = 222;</code>
     * @return Whether the interactionRate field is set.
     */
    @java.lang.Override
    public boolean hasInteractionRate() {
      return ((bitField2_ & 0x00200000) != 0);
    }
    /**
     * <pre>
     * How often people interact with your ad after it is shown to them.
     * This is the number of interactions divided by the number of times your ad
     * is shown.
     * </pre>
     *
     * <code>optional double interaction_rate = 222;</code>
     * @return The interactionRate.
     */
    @java.lang.Override
    public double getInteractionRate() {
      return interactionRate_;
    }
    /**
     * <pre>
     * How often people interact with your ad after it is shown to them.
     * This is the number of interactions divided by the number of times your ad
     * is shown.
     * </pre>
     *
     * <code>optional double interaction_rate = 222;</code>
     * @param value The interactionRate to set.
     * @return This builder for chaining.
     */
    public Builder setInteractionRate(double value) {

      interactionRate_ = value;
      bitField2_ |= 0x00200000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * How often people interact with your ad after it is shown to them.
     * This is the number of interactions divided by the number of times your ad
     * is shown.
     * </pre>
     *
     * <code>optional double interaction_rate = 222;</code>
     * @return This builder for chaining.
     */
    public Builder clearInteractionRate() {
      bitField2_ = (bitField2_ & ~0x00200000);
      interactionRate_ = 0D;
      onChanged();
      return this;
    }

    private long interactions_ ;
    /**
     * <pre>
     * The number of interactions.
     * An interaction is the main user action associated with an ad format-clicks
     * for text and shopping ads, views for video ads, and so on.
     * </pre>
     *
     * <code>optional int64 interactions = 223;</code>
     * @return Whether the interactions field is set.
     */
    @java.lang.Override
    public boolean hasInteractions() {
      return ((bitField2_ & 0x00400000) != 0);
    }
    /**
     * <pre>
     * The number of interactions.
     * An interaction is the main user action associated with an ad format-clicks
     * for text and shopping ads, views for video ads, and so on.
     * </pre>
     *
     * <code>optional int64 interactions = 223;</code>
     * @return The interactions.
     */
    @java.lang.Override
    public long getInteractions() {
      return interactions_;
    }
    /**
     * <pre>
     * The number of interactions.
     * An interaction is the main user action associated with an ad format-clicks
     * for text and shopping ads, views for video ads, and so on.
     * </pre>
     *
     * <code>optional int64 interactions = 223;</code>
     * @param value The interactions to set.
     * @return This builder for chaining.
     */
    public Builder setInteractions(long value) {

      interactions_ = value;
      bitField2_ |= 0x00400000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of interactions.
     * An interaction is the main user action associated with an ad format-clicks
     * for text and shopping ads, views for video ads, and so on.
     * </pre>
     *
     * <code>optional int64 interactions = 223;</code>
     * @return This builder for chaining.
     */
    public Builder clearInteractions() {
      bitField2_ = (bitField2_ & ~0x00400000);
      interactions_ = 0L;
      onChanged();
      return this;
    }

    private java.util.List<java.lang.Integer> interactionEventTypes_ =
      java.util.Collections.emptyList();
    private void ensureInteractionEventTypesIsMutable() {
      if (!((bitField2_ & 0x00800000) != 0)) {
        interactionEventTypes_ = new java.util.ArrayList<java.lang.Integer>(interactionEventTypes_);
        bitField2_ |= 0x00800000;
      }
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @return A list containing the interactionEventTypes.
     */
    public java.util.List<com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType> getInteractionEventTypesList() {
      return new com.google.protobuf.Internal.ListAdapter<
          java.lang.Integer, com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType>(interactionEventTypes_, interactionEventTypes_converter_);
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @return The count of interactionEventTypes.
     */
    public int getInteractionEventTypesCount() {
      return interactionEventTypes_.size();
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param index The index of the element to return.
     * @return The interactionEventTypes at the given index.
     */
    public com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType getInteractionEventTypes(int index) {
      return interactionEventTypes_converter_.convert(interactionEventTypes_.get(index));
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param index The index to set the value at.
     * @param value The interactionEventTypes to set.
     * @return This builder for chaining.
     */
    public Builder setInteractionEventTypes(
        int index, com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType value) {
      if (value == null) {
        throw new NullPointerException();
      }
      ensureInteractionEventTypesIsMutable();
      interactionEventTypes_.set(index, value.getNumber());
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param value The interactionEventTypes to add.
     * @return This builder for chaining.
     */
    public Builder addInteractionEventTypes(com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType value) {
      if (value == null) {
        throw new NullPointerException();
      }
      ensureInteractionEventTypesIsMutable();
      interactionEventTypes_.add(value.getNumber());
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param values The interactionEventTypes to add.
     * @return This builder for chaining.
     */
    public Builder addAllInteractionEventTypes(
        java.lang.Iterable<? extends com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType> values) {
      ensureInteractionEventTypesIsMutable();
      for (com.google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType value : values) {
        interactionEventTypes_.add(value.getNumber());
      }
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @return This builder for chaining.
     */
    public Builder clearInteractionEventTypes() {
      interactionEventTypes_ = java.util.Collections.emptyList();
      bitField2_ = (bitField2_ & ~0x00800000);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @return A list containing the enum numeric values on the wire for interactionEventTypes.
     */
    public java.util.List<java.lang.Integer>
    getInteractionEventTypesValueList() {
      return java.util.Collections.unmodifiableList(interactionEventTypes_);
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param index The index of the value to return.
     * @return The enum numeric value on the wire of interactionEventTypes at the given index.
     */
    public int getInteractionEventTypesValue(int index) {
      return interactionEventTypes_.get(index);
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param index The index to set the value at.
     * @param value The enum numeric value on the wire for interactionEventTypes to set.
     * @return This builder for chaining.
     */
    public Builder setInteractionEventTypesValue(
        int index, int value) {
      ensureInteractionEventTypesIsMutable();
      interactionEventTypes_.set(index, value);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param value The enum numeric value on the wire for interactionEventTypes to add.
     * @return This builder for chaining.
     */
    public Builder addInteractionEventTypesValue(int value) {
      ensureInteractionEventTypesIsMutable();
      interactionEventTypes_.add(value);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The types of payable and free interactions.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.enums.InteractionEventTypeEnum.InteractionEventType interaction_event_types = 100;</code>
     * @param values The enum numeric values on the wire for interactionEventTypes to add.
     * @return This builder for chaining.
     */
    public Builder addAllInteractionEventTypesValue(
        java.lang.Iterable<java.lang.Integer> values) {
      ensureInteractionEventTypesIsMutable();
      for (int value : values) {
        interactionEventTypes_.add(value);
      }
      onChanged();
      return this;
    }

    private double invalidClickRate_ ;
    /**
     * <pre>
     * The percentage of clicks filtered out of your total number of clicks
     * (filtered + non-filtered clicks) during the reporting period.
     * </pre>
     *
     * <code>optional double invalid_click_rate = 224;</code>
     * @return Whether the invalidClickRate field is set.
     */
    @java.lang.Override
    public boolean hasInvalidClickRate() {
      return ((bitField2_ & 0x01000000) != 0);
    }
    /**
     * <pre>
     * The percentage of clicks filtered out of your total number of clicks
     * (filtered + non-filtered clicks) during the reporting period.
     * </pre>
     *
     * <code>optional double invalid_click_rate = 224;</code>
     * @return The invalidClickRate.
     */
    @java.lang.Override
    public double getInvalidClickRate() {
      return invalidClickRate_;
    }
    /**
     * <pre>
     * The percentage of clicks filtered out of your total number of clicks
     * (filtered + non-filtered clicks) during the reporting period.
     * </pre>
     *
     * <code>optional double invalid_click_rate = 224;</code>
     * @param value The invalidClickRate to set.
     * @return This builder for chaining.
     */
    public Builder setInvalidClickRate(double value) {

      invalidClickRate_ = value;
      bitField2_ |= 0x01000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The percentage of clicks filtered out of your total number of clicks
     * (filtered + non-filtered clicks) during the reporting period.
     * </pre>
     *
     * <code>optional double invalid_click_rate = 224;</code>
     * @return This builder for chaining.
     */
    public Builder clearInvalidClickRate() {
      bitField2_ = (bitField2_ & ~0x01000000);
      invalidClickRate_ = 0D;
      onChanged();
      return this;
    }

    private long invalidClicks_ ;
    /**
     * <pre>
     * Number of clicks Google considers illegitimate and doesn't charge you for.
     * </pre>
     *
     * <code>optional int64 invalid_clicks = 225;</code>
     * @return Whether the invalidClicks field is set.
     */
    @java.lang.Override
    public boolean hasInvalidClicks() {
      return ((bitField2_ & 0x02000000) != 0);
    }
    /**
     * <pre>
     * Number of clicks Google considers illegitimate and doesn't charge you for.
     * </pre>
     *
     * <code>optional int64 invalid_clicks = 225;</code>
     * @return The invalidClicks.
     */
    @java.lang.Override
    public long getInvalidClicks() {
      return invalidClicks_;
    }
    /**
     * <pre>
     * Number of clicks Google considers illegitimate and doesn't charge you for.
     * </pre>
     *
     * <code>optional int64 invalid_clicks = 225;</code>
     * @param value The invalidClicks to set.
     * @return This builder for chaining.
     */
    public Builder setInvalidClicks(long value) {

      invalidClicks_ = value;
      bitField2_ |= 0x02000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of clicks Google considers illegitimate and doesn't charge you for.
     * </pre>
     *
     * <code>optional int64 invalid_clicks = 225;</code>
     * @return This builder for chaining.
     */
    public Builder clearInvalidClicks() {
      bitField2_ = (bitField2_ & ~0x02000000);
      invalidClicks_ = 0L;
      onChanged();
      return this;
    }

    private long messageChats_ ;
    /**
     * <pre>
     * Number of message chats initiated for Click To Message impressions that
     * were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_chats = 226;</code>
     * @return Whether the messageChats field is set.
     */
    @java.lang.Override
    public boolean hasMessageChats() {
      return ((bitField2_ & 0x04000000) != 0);
    }
    /**
     * <pre>
     * Number of message chats initiated for Click To Message impressions that
     * were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_chats = 226;</code>
     * @return The messageChats.
     */
    @java.lang.Override
    public long getMessageChats() {
      return messageChats_;
    }
    /**
     * <pre>
     * Number of message chats initiated for Click To Message impressions that
     * were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_chats = 226;</code>
     * @param value The messageChats to set.
     * @return This builder for chaining.
     */
    public Builder setMessageChats(long value) {

      messageChats_ = value;
      bitField2_ |= 0x04000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of message chats initiated for Click To Message impressions that
     * were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_chats = 226;</code>
     * @return This builder for chaining.
     */
    public Builder clearMessageChats() {
      bitField2_ = (bitField2_ & ~0x04000000);
      messageChats_ = 0L;
      onChanged();
      return this;
    }

    private long messageImpressions_ ;
    /**
     * <pre>
     * Number of Click To Message impressions that were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_impressions = 227;</code>
     * @return Whether the messageImpressions field is set.
     */
    @java.lang.Override
    public boolean hasMessageImpressions() {
      return ((bitField2_ & 0x08000000) != 0);
    }
    /**
     * <pre>
     * Number of Click To Message impressions that were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_impressions = 227;</code>
     * @return The messageImpressions.
     */
    @java.lang.Override
    public long getMessageImpressions() {
      return messageImpressions_;
    }
    /**
     * <pre>
     * Number of Click To Message impressions that were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_impressions = 227;</code>
     * @param value The messageImpressions to set.
     * @return This builder for chaining.
     */
    public Builder setMessageImpressions(long value) {

      messageImpressions_ = value;
      bitField2_ |= 0x08000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of Click To Message impressions that were message tracking eligible.
     * </pre>
     *
     * <code>optional int64 message_impressions = 227;</code>
     * @return This builder for chaining.
     */
    public Builder clearMessageImpressions() {
      bitField2_ = (bitField2_ & ~0x08000000);
      messageImpressions_ = 0L;
      onChanged();
      return this;
    }

    private double messageChatRate_ ;
    /**
     * <pre>
     * Number of message chats initiated (message_chats) divided by the number
     * of message impressions (message_impressions).
     * Rate at which a user initiates a message chat from an ad impression with
     * a messaging option and message tracking enabled.
     * Note that this rate can be more than 1.0 for a given message impression.
     * </pre>
     *
     * <code>optional double message_chat_rate = 228;</code>
     * @return Whether the messageChatRate field is set.
     */
    @java.lang.Override
    public boolean hasMessageChatRate() {
      return ((bitField2_ & 0x10000000) != 0);
    }
    /**
     * <pre>
     * Number of message chats initiated (message_chats) divided by the number
     * of message impressions (message_impressions).
     * Rate at which a user initiates a message chat from an ad impression with
     * a messaging option and message tracking enabled.
     * Note that this rate can be more than 1.0 for a given message impression.
     * </pre>
     *
     * <code>optional double message_chat_rate = 228;</code>
     * @return The messageChatRate.
     */
    @java.lang.Override
    public double getMessageChatRate() {
      return messageChatRate_;
    }
    /**
     * <pre>
     * Number of message chats initiated (message_chats) divided by the number
     * of message impressions (message_impressions).
     * Rate at which a user initiates a message chat from an ad impression with
     * a messaging option and message tracking enabled.
     * Note that this rate can be more than 1.0 for a given message impression.
     * </pre>
     *
     * <code>optional double message_chat_rate = 228;</code>
     * @param value The messageChatRate to set.
     * @return This builder for chaining.
     */
    public Builder setMessageChatRate(double value) {

      messageChatRate_ = value;
      bitField2_ |= 0x10000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of message chats initiated (message_chats) divided by the number
     * of message impressions (message_impressions).
     * Rate at which a user initiates a message chat from an ad impression with
     * a messaging option and message tracking enabled.
     * Note that this rate can be more than 1.0 for a given message impression.
     * </pre>
     *
     * <code>optional double message_chat_rate = 228;</code>
     * @return This builder for chaining.
     */
    public Builder clearMessageChatRate() {
      bitField2_ = (bitField2_ & ~0x10000000);
      messageChatRate_ = 0D;
      onChanged();
      return this;
    }

    private double mobileFriendlyClicksPercentage_ ;
    /**
     * <pre>
     * The percentage of mobile clicks that go to a mobile-friendly page.
     * </pre>
     *
     * <code>optional double mobile_friendly_clicks_percentage = 229;</code>
     * @return Whether the mobileFriendlyClicksPercentage field is set.
     */
    @java.lang.Override
    public boolean hasMobileFriendlyClicksPercentage() {
      return ((bitField2_ & 0x20000000) != 0);
    }
    /**
     * <pre>
     * The percentage of mobile clicks that go to a mobile-friendly page.
     * </pre>
     *
     * <code>optional double mobile_friendly_clicks_percentage = 229;</code>
     * @return The mobileFriendlyClicksPercentage.
     */
    @java.lang.Override
    public double getMobileFriendlyClicksPercentage() {
      return mobileFriendlyClicksPercentage_;
    }
    /**
     * <pre>
     * The percentage of mobile clicks that go to a mobile-friendly page.
     * </pre>
     *
     * <code>optional double mobile_friendly_clicks_percentage = 229;</code>
     * @param value The mobileFriendlyClicksPercentage to set.
     * @return This builder for chaining.
     */
    public Builder setMobileFriendlyClicksPercentage(double value) {

      mobileFriendlyClicksPercentage_ = value;
      bitField2_ |= 0x20000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The percentage of mobile clicks that go to a mobile-friendly page.
     * </pre>
     *
     * <code>optional double mobile_friendly_clicks_percentage = 229;</code>
     * @return This builder for chaining.
     */
    public Builder clearMobileFriendlyClicksPercentage() {
      bitField2_ = (bitField2_ & ~0x20000000);
      mobileFriendlyClicksPercentage_ = 0D;
      onChanged();
      return this;
    }

    private double optimizationScoreUplift_ ;
    /**
     * <pre>
     * Total optimization score uplift of all recommendations.
     * </pre>
     *
     * <code>optional double optimization_score_uplift = 247;</code>
     * @return Whether the optimizationScoreUplift field is set.
     */
    @java.lang.Override
    public boolean hasOptimizationScoreUplift() {
      return ((bitField2_ & 0x40000000) != 0);
    }
    /**
     * <pre>
     * Total optimization score uplift of all recommendations.
     * </pre>
     *
     * <code>optional double optimization_score_uplift = 247;</code>
     * @return The optimizationScoreUplift.
     */
    @java.lang.Override
    public double getOptimizationScoreUplift() {
      return optimizationScoreUplift_;
    }
    /**
     * <pre>
     * Total optimization score uplift of all recommendations.
     * </pre>
     *
     * <code>optional double optimization_score_uplift = 247;</code>
     * @param value The optimizationScoreUplift to set.
     * @return This builder for chaining.
     */
    public Builder setOptimizationScoreUplift(double value) {

      optimizationScoreUplift_ = value;
      bitField2_ |= 0x40000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Total optimization score uplift of all recommendations.
     * </pre>
     *
     * <code>optional double optimization_score_uplift = 247;</code>
     * @return This builder for chaining.
     */
    public Builder clearOptimizationScoreUplift() {
      bitField2_ = (bitField2_ & ~0x40000000);
      optimizationScoreUplift_ = 0D;
      onChanged();
      return this;
    }

    private java.lang.Object optimizationScoreUrl_ = "";
    /**
     * <pre>
     * URL for the optimization score page in the Google Ads web interface.
     * This metric can be selected from `customer` or `campaign`, and can be
     * segmented by `segments.recommendation_type`. For example, `SELECT
     * metrics.optimization_score_url, segments.recommendation_type FROM
     * customer` will return a URL for each unique (customer, recommendation_type)
     * combination.
     * </pre>
     *
     * <code>optional string optimization_score_url = 248;</code>
     * @return Whether the optimizationScoreUrl field is set.
     */
    public boolean hasOptimizationScoreUrl() {
      return ((bitField2_ & 0x80000000) != 0);
    }
    /**
     * <pre>
     * URL for the optimization score page in the Google Ads web interface.
     * This metric can be selected from `customer` or `campaign`, and can be
     * segmented by `segments.recommendation_type`. For example, `SELECT
     * metrics.optimization_score_url, segments.recommendation_type FROM
     * customer` will return a URL for each unique (customer, recommendation_type)
     * combination.
     * </pre>
     *
     * <code>optional string optimization_score_url = 248;</code>
     * @return The optimizationScoreUrl.
     */
    public java.lang.String getOptimizationScoreUrl() {
      java.lang.Object ref = optimizationScoreUrl_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        optimizationScoreUrl_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * URL for the optimization score page in the Google Ads web interface.
     * This metric can be selected from `customer` or `campaign`, and can be
     * segmented by `segments.recommendation_type`. For example, `SELECT
     * metrics.optimization_score_url, segments.recommendation_type FROM
     * customer` will return a URL for each unique (customer, recommendation_type)
     * combination.
     * </pre>
     *
     * <code>optional string optimization_score_url = 248;</code>
     * @return The bytes for optimizationScoreUrl.
     */
    public com.google.protobuf.ByteString
        getOptimizationScoreUrlBytes() {
      java.lang.Object ref = optimizationScoreUrl_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        optimizationScoreUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * URL for the optimization score page in the Google Ads web interface.
     * This metric can be selected from `customer` or `campaign`, and can be
     * segmented by `segments.recommendation_type`. For example, `SELECT
     * metrics.optimization_score_url, segments.recommendation_type FROM
     * customer` will return a URL for each unique (customer, recommendation_type)
     * combination.
     * </pre>
     *
     * <code>optional string optimization_score_url = 248;</code>
     * @param value The optimizationScoreUrl to set.
     * @return This builder for chaining.
     */
    public Builder setOptimizationScoreUrl(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      optimizationScoreUrl_ = value;
      bitField2_ |= 0x80000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * URL for the optimization score page in the Google Ads web interface.
     * This metric can be selected from `customer` or `campaign`, and can be
     * segmented by `segments.recommendation_type`. For example, `SELECT
     * metrics.optimization_score_url, segments.recommendation_type FROM
     * customer` will return a URL for each unique (customer, recommendation_type)
     * combination.
     * </pre>
     *
     * <code>optional string optimization_score_url = 248;</code>
     * @return This builder for chaining.
     */
    public Builder clearOptimizationScoreUrl() {
      optimizationScoreUrl_ = getDefaultInstance().getOptimizationScoreUrl();
      bitField2_ = (bitField2_ & ~0x80000000);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * URL for the optimization score page in the Google Ads web interface.
     * This metric can be selected from `customer` or `campaign`, and can be
     * segmented by `segments.recommendation_type`. For example, `SELECT
     * metrics.optimization_score_url, segments.recommendation_type FROM
     * customer` will return a URL for each unique (customer, recommendation_type)
     * combination.
     * </pre>
     *
     * <code>optional string optimization_score_url = 248;</code>
     * @param value The bytes for optimizationScoreUrl to set.
     * @return This builder for chaining.
     */
    public Builder setOptimizationScoreUrlBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      optimizationScoreUrl_ = value;
      bitField2_ |= 0x80000000;
      onChanged();
      return this;
    }

    private long organicClicks_ ;
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results for a particular query. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_clicks = 230;</code>
     * @return Whether the organicClicks field is set.
     */
    @java.lang.Override
    public boolean hasOrganicClicks() {
      return ((bitField3_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results for a particular query. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_clicks = 230;</code>
     * @return The organicClicks.
     */
    @java.lang.Override
    public long getOrganicClicks() {
      return organicClicks_;
    }
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results for a particular query. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_clicks = 230;</code>
     * @param value The organicClicks to set.
     * @return This builder for chaining.
     */
    public Builder setOrganicClicks(long value) {

      organicClicks_ = value;
      bitField3_ |= 0x00000001;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results for a particular query. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_clicks = 230;</code>
     * @return This builder for chaining.
     */
    public Builder clearOrganicClicks() {
      bitField3_ = (bitField3_ & ~0x00000001);
      organicClicks_ = 0L;
      onChanged();
      return this;
    }

    private double organicClicksPerQuery_ ;
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results (organic_clicks) divided by the total number of searches that
     * returned pages from your site (organic_queries). See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_clicks_per_query = 231;</code>
     * @return Whether the organicClicksPerQuery field is set.
     */
    @java.lang.Override
    public boolean hasOrganicClicksPerQuery() {
      return ((bitField3_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results (organic_clicks) divided by the total number of searches that
     * returned pages from your site (organic_queries). See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_clicks_per_query = 231;</code>
     * @return The organicClicksPerQuery.
     */
    @java.lang.Override
    public double getOrganicClicksPerQuery() {
      return organicClicksPerQuery_;
    }
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results (organic_clicks) divided by the total number of searches that
     * returned pages from your site (organic_queries). See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_clicks_per_query = 231;</code>
     * @param value The organicClicksPerQuery to set.
     * @return This builder for chaining.
     */
    public Builder setOrganicClicksPerQuery(double value) {

      organicClicksPerQuery_ = value;
      bitField3_ |= 0x00000002;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times someone clicked your site's listing in the unpaid
     * results (organic_clicks) divided by the total number of searches that
     * returned pages from your site (organic_queries). See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_clicks_per_query = 231;</code>
     * @return This builder for chaining.
     */
    public Builder clearOrganicClicksPerQuery() {
      bitField3_ = (bitField3_ & ~0x00000002);
      organicClicksPerQuery_ = 0D;
      onChanged();
      return this;
    }

    private long organicImpressions_ ;
    /**
     * <pre>
     * The number of listings for your site in the unpaid search results. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional int64 organic_impressions = 232;</code>
     * @return Whether the organicImpressions field is set.
     */
    @java.lang.Override
    public boolean hasOrganicImpressions() {
      return ((bitField3_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * The number of listings for your site in the unpaid search results. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional int64 organic_impressions = 232;</code>
     * @return The organicImpressions.
     */
    @java.lang.Override
    public long getOrganicImpressions() {
      return organicImpressions_;
    }
    /**
     * <pre>
     * The number of listings for your site in the unpaid search results. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional int64 organic_impressions = 232;</code>
     * @param value The organicImpressions to set.
     * @return This builder for chaining.
     */
    public Builder setOrganicImpressions(long value) {

      organicImpressions_ = value;
      bitField3_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of listings for your site in the unpaid search results. See the
     * help page at https://support.google.com/google-ads/answer/3097241 for
     * details.
     * </pre>
     *
     * <code>optional int64 organic_impressions = 232;</code>
     * @return This builder for chaining.
     */
    public Builder clearOrganicImpressions() {
      bitField3_ = (bitField3_ & ~0x00000004);
      organicImpressions_ = 0L;
      onChanged();
      return this;
    }

    private double organicImpressionsPerQuery_ ;
    /**
     * <pre>
     * The number of times a page from your site was listed in the unpaid search
     * results (organic_impressions) divided by the number of searches returning
     * your site's listing in the unpaid results (organic_queries). See the help
     * page at https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_impressions_per_query = 233;</code>
     * @return Whether the organicImpressionsPerQuery field is set.
     */
    @java.lang.Override
    public boolean hasOrganicImpressionsPerQuery() {
      return ((bitField3_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * The number of times a page from your site was listed in the unpaid search
     * results (organic_impressions) divided by the number of searches returning
     * your site's listing in the unpaid results (organic_queries). See the help
     * page at https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_impressions_per_query = 233;</code>
     * @return The organicImpressionsPerQuery.
     */
    @java.lang.Override
    public double getOrganicImpressionsPerQuery() {
      return organicImpressionsPerQuery_;
    }
    /**
     * <pre>
     * The number of times a page from your site was listed in the unpaid search
     * results (organic_impressions) divided by the number of searches returning
     * your site's listing in the unpaid results (organic_queries). See the help
     * page at https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_impressions_per_query = 233;</code>
     * @param value The organicImpressionsPerQuery to set.
     * @return This builder for chaining.
     */
    public Builder setOrganicImpressionsPerQuery(double value) {

      organicImpressionsPerQuery_ = value;
      bitField3_ |= 0x00000008;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times a page from your site was listed in the unpaid search
     * results (organic_impressions) divided by the number of searches returning
     * your site's listing in the unpaid results (organic_queries). See the help
     * page at https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional double organic_impressions_per_query = 233;</code>
     * @return This builder for chaining.
     */
    public Builder clearOrganicImpressionsPerQuery() {
      bitField3_ = (bitField3_ & ~0x00000008);
      organicImpressionsPerQuery_ = 0D;
      onChanged();
      return this;
    }

    private long organicQueries_ ;
    /**
     * <pre>
     * The total number of searches that returned your site's listing in the
     * unpaid results. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_queries = 234;</code>
     * @return Whether the organicQueries field is set.
     */
    @java.lang.Override
    public boolean hasOrganicQueries() {
      return ((bitField3_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * The total number of searches that returned your site's listing in the
     * unpaid results. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_queries = 234;</code>
     * @return The organicQueries.
     */
    @java.lang.Override
    public long getOrganicQueries() {
      return organicQueries_;
    }
    /**
     * <pre>
     * The total number of searches that returned your site's listing in the
     * unpaid results. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_queries = 234;</code>
     * @param value The organicQueries to set.
     * @return This builder for chaining.
     */
    public Builder setOrganicQueries(long value) {

      organicQueries_ = value;
      bitField3_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The total number of searches that returned your site's listing in the
     * unpaid results. See the help page at
     * https://support.google.com/google-ads/answer/3097241 for details.
     * </pre>
     *
     * <code>optional int64 organic_queries = 234;</code>
     * @return This builder for chaining.
     */
    public Builder clearOrganicQueries() {
      bitField3_ = (bitField3_ & ~0x00000010);
      organicQueries_ = 0L;
      onChanged();
      return this;
    }

    private double percentNewVisitors_ ;
    /**
     * <pre>
     * Percentage of first-time sessions (from people who had never visited your
     * site before). Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double percent_new_visitors = 235;</code>
     * @return Whether the percentNewVisitors field is set.
     */
    @java.lang.Override
    public boolean hasPercentNewVisitors() {
      return ((bitField3_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * Percentage of first-time sessions (from people who had never visited your
     * site before). Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double percent_new_visitors = 235;</code>
     * @return The percentNewVisitors.
     */
    @java.lang.Override
    public double getPercentNewVisitors() {
      return percentNewVisitors_;
    }
    /**
     * <pre>
     * Percentage of first-time sessions (from people who had never visited your
     * site before). Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double percent_new_visitors = 235;</code>
     * @param value The percentNewVisitors to set.
     * @return This builder for chaining.
     */
    public Builder setPercentNewVisitors(double value) {

      percentNewVisitors_ = value;
      bitField3_ |= 0x00000020;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Percentage of first-time sessions (from people who had never visited your
     * site before). Imported from Google Analytics.
     * </pre>
     *
     * <code>optional double percent_new_visitors = 235;</code>
     * @return This builder for chaining.
     */
    public Builder clearPercentNewVisitors() {
      bitField3_ = (bitField3_ & ~0x00000020);
      percentNewVisitors_ = 0D;
      onChanged();
      return this;
    }

    private long phoneCalls_ ;
    /**
     * <pre>
     * Number of offline phone calls.
     * </pre>
     *
     * <code>optional int64 phone_calls = 236;</code>
     * @return Whether the phoneCalls field is set.
     */
    @java.lang.Override
    public boolean hasPhoneCalls() {
      return ((bitField3_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * Number of offline phone calls.
     * </pre>
     *
     * <code>optional int64 phone_calls = 236;</code>
     * @return The phoneCalls.
     */
    @java.lang.Override
    public long getPhoneCalls() {
      return phoneCalls_;
    }
    /**
     * <pre>
     * Number of offline phone calls.
     * </pre>
     *
     * <code>optional int64 phone_calls = 236;</code>
     * @param value The phoneCalls to set.
     * @return This builder for chaining.
     */
    public Builder setPhoneCalls(long value) {

      phoneCalls_ = value;
      bitField3_ |= 0x00000040;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of offline phone calls.
     * </pre>
     *
     * <code>optional int64 phone_calls = 236;</code>
     * @return This builder for chaining.
     */
    public Builder clearPhoneCalls() {
      bitField3_ = (bitField3_ & ~0x00000040);
      phoneCalls_ = 0L;
      onChanged();
      return this;
    }

    private long phoneImpressions_ ;
    /**
     * <pre>
     * Number of offline phone impressions.
     * </pre>
     *
     * <code>optional int64 phone_impressions = 237;</code>
     * @return Whether the phoneImpressions field is set.
     */
    @java.lang.Override
    public boolean hasPhoneImpressions() {
      return ((bitField3_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * Number of offline phone impressions.
     * </pre>
     *
     * <code>optional int64 phone_impressions = 237;</code>
     * @return The phoneImpressions.
     */
    @java.lang.Override
    public long getPhoneImpressions() {
      return phoneImpressions_;
    }
    /**
     * <pre>
     * Number of offline phone impressions.
     * </pre>
     *
     * <code>optional int64 phone_impressions = 237;</code>
     * @param value The phoneImpressions to set.
     * @return This builder for chaining.
     */
    public Builder setPhoneImpressions(long value) {

      phoneImpressions_ = value;
      bitField3_ |= 0x00000080;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of offline phone impressions.
     * </pre>
     *
     * <code>optional int64 phone_impressions = 237;</code>
     * @return This builder for chaining.
     */
    public Builder clearPhoneImpressions() {
      bitField3_ = (bitField3_ & ~0x00000080);
      phoneImpressions_ = 0L;
      onChanged();
      return this;
    }

    private double phoneThroughRate_ ;
    /**
     * <pre>
     * Number of phone calls received (phone_calls) divided by the number of
     * times your phone number is shown (phone_impressions).
     * </pre>
     *
     * <code>optional double phone_through_rate = 238;</code>
     * @return Whether the phoneThroughRate field is set.
     */
    @java.lang.Override
    public boolean hasPhoneThroughRate() {
      return ((bitField3_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * Number of phone calls received (phone_calls) divided by the number of
     * times your phone number is shown (phone_impressions).
     * </pre>
     *
     * <code>optional double phone_through_rate = 238;</code>
     * @return The phoneThroughRate.
     */
    @java.lang.Override
    public double getPhoneThroughRate() {
      return phoneThroughRate_;
    }
    /**
     * <pre>
     * Number of phone calls received (phone_calls) divided by the number of
     * times your phone number is shown (phone_impressions).
     * </pre>
     *
     * <code>optional double phone_through_rate = 238;</code>
     * @param value The phoneThroughRate to set.
     * @return This builder for chaining.
     */
    public Builder setPhoneThroughRate(double value) {

      phoneThroughRate_ = value;
      bitField3_ |= 0x00000100;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of phone calls received (phone_calls) divided by the number of
     * times your phone number is shown (phone_impressions).
     * </pre>
     *
     * <code>optional double phone_through_rate = 238;</code>
     * @return This builder for chaining.
     */
    public Builder clearPhoneThroughRate() {
      bitField3_ = (bitField3_ & ~0x00000100);
      phoneThroughRate_ = 0D;
      onChanged();
      return this;
    }

    private double relativeCtr_ ;
    /**
     * <pre>
     * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
     * all advertisers on the websites that show your ads. Measures how your ads
     * perform on Display Network sites compared to other ads on the same sites.
     * </pre>
     *
     * <code>optional double relative_ctr = 239;</code>
     * @return Whether the relativeCtr field is set.
     */
    @java.lang.Override
    public boolean hasRelativeCtr() {
      return ((bitField3_ & 0x00000200) != 0);
    }
    /**
     * <pre>
     * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
     * all advertisers on the websites that show your ads. Measures how your ads
     * perform on Display Network sites compared to other ads on the same sites.
     * </pre>
     *
     * <code>optional double relative_ctr = 239;</code>
     * @return The relativeCtr.
     */
    @java.lang.Override
    public double getRelativeCtr() {
      return relativeCtr_;
    }
    /**
     * <pre>
     * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
     * all advertisers on the websites that show your ads. Measures how your ads
     * perform on Display Network sites compared to other ads on the same sites.
     * </pre>
     *
     * <code>optional double relative_ctr = 239;</code>
     * @param value The relativeCtr to set.
     * @return This builder for chaining.
     */
    public Builder setRelativeCtr(double value) {

      relativeCtr_ = value;
      bitField3_ |= 0x00000200;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
     * all advertisers on the websites that show your ads. Measures how your ads
     * perform on Display Network sites compared to other ads on the same sites.
     * </pre>
     *
     * <code>optional double relative_ctr = 239;</code>
     * @return This builder for chaining.
     */
    public Builder clearRelativeCtr() {
      bitField3_ = (bitField3_ & ~0x00000200);
      relativeCtr_ = 0D;
      onChanged();
      return this;
    }

    private double searchAbsoluteTopImpressionShare_ ;
    /**
     * <pre>
     * The percentage of the customer's Shopping or Search ad impressions that are
     * shown in the most prominent Shopping position. See
     * https://support.google.com/google-ads/answer/7501826
     * for details. Any value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_absolute_top_impression_share = 136;</code>
     * @return Whether the searchAbsoluteTopImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchAbsoluteTopImpressionShare() {
      return ((bitField3_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * The percentage of the customer's Shopping or Search ad impressions that are
     * shown in the most prominent Shopping position. See
     * https://support.google.com/google-ads/answer/7501826
     * for details. Any value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_absolute_top_impression_share = 136;</code>
     * @return The searchAbsoluteTopImpressionShare.
     */
    @java.lang.Override
    public double getSearchAbsoluteTopImpressionShare() {
      return searchAbsoluteTopImpressionShare_;
    }
    /**
     * <pre>
     * The percentage of the customer's Shopping or Search ad impressions that are
     * shown in the most prominent Shopping position. See
     * https://support.google.com/google-ads/answer/7501826
     * for details. Any value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_absolute_top_impression_share = 136;</code>
     * @param value The searchAbsoluteTopImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchAbsoluteTopImpressionShare(double value) {

      searchAbsoluteTopImpressionShare_ = value;
      bitField3_ |= 0x00000400;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The percentage of the customer's Shopping or Search ad impressions that are
     * shown in the most prominent Shopping position. See
     * https://support.google.com/google-ads/answer/7501826
     * for details. Any value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_absolute_top_impression_share = 136;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchAbsoluteTopImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00000400);
      searchAbsoluteTopImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchBudgetLostAbsoluteTopImpressionShare_ ;
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to a low budget. Note: Search
     * budget lost absolute top impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_absolute_top_impression_share = 137;</code>
     * @return Whether the searchBudgetLostAbsoluteTopImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchBudgetLostAbsoluteTopImpressionShare() {
      return ((bitField3_ & 0x00000800) != 0);
    }
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to a low budget. Note: Search
     * budget lost absolute top impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_absolute_top_impression_share = 137;</code>
     * @return The searchBudgetLostAbsoluteTopImpressionShare.
     */
    @java.lang.Override
    public double getSearchBudgetLostAbsoluteTopImpressionShare() {
      return searchBudgetLostAbsoluteTopImpressionShare_;
    }
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to a low budget. Note: Search
     * budget lost absolute top impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_absolute_top_impression_share = 137;</code>
     * @param value The searchBudgetLostAbsoluteTopImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchBudgetLostAbsoluteTopImpressionShare(double value) {

      searchBudgetLostAbsoluteTopImpressionShare_ = value;
      bitField3_ |= 0x00000800;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to a low budget. Note: Search
     * budget lost absolute top impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_absolute_top_impression_share = 137;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchBudgetLostAbsoluteTopImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00000800);
      searchBudgetLostAbsoluteTopImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchBudgetLostImpressionShare_ ;
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show on the
     * Search Network but didn't because your budget was too low. Note: Search
     * budget lost impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_impression_share = 138;</code>
     * @return Whether the searchBudgetLostImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchBudgetLostImpressionShare() {
      return ((bitField3_ & 0x00001000) != 0);
    }
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show on the
     * Search Network but didn't because your budget was too low. Note: Search
     * budget lost impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_impression_share = 138;</code>
     * @return The searchBudgetLostImpressionShare.
     */
    @java.lang.Override
    public double getSearchBudgetLostImpressionShare() {
      return searchBudgetLostImpressionShare_;
    }
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show on the
     * Search Network but didn't because your budget was too low. Note: Search
     * budget lost impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_impression_share = 138;</code>
     * @param value The searchBudgetLostImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchBudgetLostImpressionShare(double value) {

      searchBudgetLostImpressionShare_ = value;
      bitField3_ |= 0x00001000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The estimated percent of times that your ad was eligible to show on the
     * Search Network but didn't because your budget was too low. Note: Search
     * budget lost impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_impression_share = 138;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchBudgetLostImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00001000);
      searchBudgetLostImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchBudgetLostTopImpressionShare_ ;
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to a low budget. Note: Search
     * budget lost top impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_top_impression_share = 139;</code>
     * @return Whether the searchBudgetLostTopImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchBudgetLostTopImpressionShare() {
      return ((bitField3_ & 0x00002000) != 0);
    }
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to a low budget. Note: Search
     * budget lost top impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_top_impression_share = 139;</code>
     * @return The searchBudgetLostTopImpressionShare.
     */
    @java.lang.Override
    public double getSearchBudgetLostTopImpressionShare() {
      return searchBudgetLostTopImpressionShare_;
    }
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to a low budget. Note: Search
     * budget lost top impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_top_impression_share = 139;</code>
     * @param value The searchBudgetLostTopImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchBudgetLostTopImpressionShare(double value) {

      searchBudgetLostTopImpressionShare_ = value;
      bitField3_ |= 0x00002000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to a low budget. Note: Search
     * budget lost top impression share is reported in the range of 0 to 0.9. Any
     * value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_budget_lost_top_impression_share = 139;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchBudgetLostTopImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00002000);
      searchBudgetLostTopImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchClickShare_ ;
    /**
     * <pre>
     * The number of clicks you've received on the Search Network
     * divided by the estimated number of clicks you were eligible to receive.
     * Note: Search click share is reported in the range of 0.1 to 1. Any value
     * below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_click_share = 140;</code>
     * @return Whether the searchClickShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchClickShare() {
      return ((bitField3_ & 0x00004000) != 0);
    }
    /**
     * <pre>
     * The number of clicks you've received on the Search Network
     * divided by the estimated number of clicks you were eligible to receive.
     * Note: Search click share is reported in the range of 0.1 to 1. Any value
     * below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_click_share = 140;</code>
     * @return The searchClickShare.
     */
    @java.lang.Override
    public double getSearchClickShare() {
      return searchClickShare_;
    }
    /**
     * <pre>
     * The number of clicks you've received on the Search Network
     * divided by the estimated number of clicks you were eligible to receive.
     * Note: Search click share is reported in the range of 0.1 to 1. Any value
     * below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_click_share = 140;</code>
     * @param value The searchClickShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchClickShare(double value) {

      searchClickShare_ = value;
      bitField3_ |= 0x00004000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of clicks you've received on the Search Network
     * divided by the estimated number of clicks you were eligible to receive.
     * Note: Search click share is reported in the range of 0.1 to 1. Any value
     * below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_click_share = 140;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchClickShare() {
      bitField3_ = (bitField3_ & ~0x00004000);
      searchClickShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchExactMatchImpressionShare_ ;
    /**
     * <pre>
     * The impressions you've received divided by the estimated number of
     * impressions you were eligible to receive on the Search Network for search
     * terms that matched your keywords exactly (or were close variants of your
     * keyword), regardless of your keyword match types. Note: Search exact match
     * impression share is reported in the range of 0.1 to 1. Any value below 0.1
     * is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_exact_match_impression_share = 141;</code>
     * @return Whether the searchExactMatchImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchExactMatchImpressionShare() {
      return ((bitField3_ & 0x00008000) != 0);
    }
    /**
     * <pre>
     * The impressions you've received divided by the estimated number of
     * impressions you were eligible to receive on the Search Network for search
     * terms that matched your keywords exactly (or were close variants of your
     * keyword), regardless of your keyword match types. Note: Search exact match
     * impression share is reported in the range of 0.1 to 1. Any value below 0.1
     * is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_exact_match_impression_share = 141;</code>
     * @return The searchExactMatchImpressionShare.
     */
    @java.lang.Override
    public double getSearchExactMatchImpressionShare() {
      return searchExactMatchImpressionShare_;
    }
    /**
     * <pre>
     * The impressions you've received divided by the estimated number of
     * impressions you were eligible to receive on the Search Network for search
     * terms that matched your keywords exactly (or were close variants of your
     * keyword), regardless of your keyword match types. Note: Search exact match
     * impression share is reported in the range of 0.1 to 1. Any value below 0.1
     * is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_exact_match_impression_share = 141;</code>
     * @param value The searchExactMatchImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchExactMatchImpressionShare(double value) {

      searchExactMatchImpressionShare_ = value;
      bitField3_ |= 0x00008000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The impressions you've received divided by the estimated number of
     * impressions you were eligible to receive on the Search Network for search
     * terms that matched your keywords exactly (or were close variants of your
     * keyword), regardless of your keyword match types. Note: Search exact match
     * impression share is reported in the range of 0.1 to 1. Any value below 0.1
     * is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_exact_match_impression_share = 141;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchExactMatchImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00008000);
      searchExactMatchImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchImpressionShare_ ;
    /**
     * <pre>
     * The impressions you've received on the Search Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Search impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_impression_share = 142;</code>
     * @return Whether the searchImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchImpressionShare() {
      return ((bitField3_ & 0x00010000) != 0);
    }
    /**
     * <pre>
     * The impressions you've received on the Search Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Search impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_impression_share = 142;</code>
     * @return The searchImpressionShare.
     */
    @java.lang.Override
    public double getSearchImpressionShare() {
      return searchImpressionShare_;
    }
    /**
     * <pre>
     * The impressions you've received on the Search Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Search impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_impression_share = 142;</code>
     * @param value The searchImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchImpressionShare(double value) {

      searchImpressionShare_ = value;
      bitField3_ |= 0x00010000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The impressions you've received on the Search Network divided
     * by the estimated number of impressions you were eligible to receive.
     * Note: Search impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_impression_share = 142;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00010000);
      searchImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchRankLostAbsoluteTopImpressionShare_ ;
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost absolute top impression share is reported in the
     * range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_absolute_top_impression_share = 143;</code>
     * @return Whether the searchRankLostAbsoluteTopImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchRankLostAbsoluteTopImpressionShare() {
      return ((bitField3_ & 0x00020000) != 0);
    }
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost absolute top impression share is reported in the
     * range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_absolute_top_impression_share = 143;</code>
     * @return The searchRankLostAbsoluteTopImpressionShare.
     */
    @java.lang.Override
    public double getSearchRankLostAbsoluteTopImpressionShare() {
      return searchRankLostAbsoluteTopImpressionShare_;
    }
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost absolute top impression share is reported in the
     * range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_absolute_top_impression_share = 143;</code>
     * @param value The searchRankLostAbsoluteTopImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchRankLostAbsoluteTopImpressionShare(double value) {

      searchRankLostAbsoluteTopImpressionShare_ = value;
      bitField3_ |= 0x00020000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number estimating how often your ad wasn't the very first ad above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost absolute top impression share is reported in the
     * range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_absolute_top_impression_share = 143;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchRankLostAbsoluteTopImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00020000);
      searchRankLostAbsoluteTopImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchRankLostImpressionShare_ ;
    /**
     * <pre>
     * The estimated percentage of impressions on the Search Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Search rank lost impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_impression_share = 144;</code>
     * @return Whether the searchRankLostImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchRankLostImpressionShare() {
      return ((bitField3_ & 0x00040000) != 0);
    }
    /**
     * <pre>
     * The estimated percentage of impressions on the Search Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Search rank lost impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_impression_share = 144;</code>
     * @return The searchRankLostImpressionShare.
     */
    @java.lang.Override
    public double getSearchRankLostImpressionShare() {
      return searchRankLostImpressionShare_;
    }
    /**
     * <pre>
     * The estimated percentage of impressions on the Search Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Search rank lost impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_impression_share = 144;</code>
     * @param value The searchRankLostImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchRankLostImpressionShare(double value) {

      searchRankLostImpressionShare_ = value;
      bitField3_ |= 0x00040000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The estimated percentage of impressions on the Search Network
     * that your ads didn't receive due to poor Ad Rank.
     * Note: Search rank lost impression share is reported in the range of 0 to
     * 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_impression_share = 144;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchRankLostImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00040000);
      searchRankLostImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchRankLostTopImpressionShare_ ;
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost top impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_top_impression_share = 145;</code>
     * @return Whether the searchRankLostTopImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchRankLostTopImpressionShare() {
      return ((bitField3_ & 0x00080000) != 0);
    }
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost top impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_top_impression_share = 145;</code>
     * @return The searchRankLostTopImpressionShare.
     */
    @java.lang.Override
    public double getSearchRankLostTopImpressionShare() {
      return searchRankLostTopImpressionShare_;
    }
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost top impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_top_impression_share = 145;</code>
     * @param value The searchRankLostTopImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchRankLostTopImpressionShare(double value) {

      searchRankLostTopImpressionShare_ = value;
      bitField3_ |= 0x00080000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number estimating how often your ad didn't show anywhere above the
     * organic search results due to poor Ad Rank.
     * Note: Search rank lost top impression share is reported in the range of 0
     * to 0.9. Any value above 0.9 is reported as 0.9001.
     * </pre>
     *
     * <code>optional double search_rank_lost_top_impression_share = 145;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchRankLostTopImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00080000);
      searchRankLostTopImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private double searchTopImpressionShare_ ;
    /**
     * <pre>
     * The impressions you've received in the top location (anywhere above the
     * organic search results) compared to the estimated number of impressions you
     * were eligible to receive in the top location.
     * Note: Search top impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_top_impression_share = 146;</code>
     * @return Whether the searchTopImpressionShare field is set.
     */
    @java.lang.Override
    public boolean hasSearchTopImpressionShare() {
      return ((bitField3_ & 0x00100000) != 0);
    }
    /**
     * <pre>
     * The impressions you've received in the top location (anywhere above the
     * organic search results) compared to the estimated number of impressions you
     * were eligible to receive in the top location.
     * Note: Search top impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_top_impression_share = 146;</code>
     * @return The searchTopImpressionShare.
     */
    @java.lang.Override
    public double getSearchTopImpressionShare() {
      return searchTopImpressionShare_;
    }
    /**
     * <pre>
     * The impressions you've received in the top location (anywhere above the
     * organic search results) compared to the estimated number of impressions you
     * were eligible to receive in the top location.
     * Note: Search top impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_top_impression_share = 146;</code>
     * @param value The searchTopImpressionShare to set.
     * @return This builder for chaining.
     */
    public Builder setSearchTopImpressionShare(double value) {

      searchTopImpressionShare_ = value;
      bitField3_ |= 0x00100000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The impressions you've received in the top location (anywhere above the
     * organic search results) compared to the estimated number of impressions you
     * were eligible to receive in the top location.
     * Note: Search top impression share is reported in the range of 0.1 to 1. Any
     * value below 0.1 is reported as 0.0999.
     * </pre>
     *
     * <code>optional double search_top_impression_share = 146;</code>
     * @return This builder for chaining.
     */
    public Builder clearSearchTopImpressionShare() {
      bitField3_ = (bitField3_ & ~0x00100000);
      searchTopImpressionShare_ = 0D;
      onChanged();
      return this;
    }

    private com.google.ads.googleads.v14.common.SearchVolumeRange searchVolume_;
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.SearchVolumeRange, com.google.ads.googleads.v14.common.SearchVolumeRange.Builder, com.google.ads.googleads.v14.common.SearchVolumeRangeOrBuilder> searchVolumeBuilder_;
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     * @return Whether the searchVolume field is set.
     */
    public boolean hasSearchVolume() {
      return ((bitField3_ & 0x00200000) != 0);
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     * @return The searchVolume.
     */
    public com.google.ads.googleads.v14.common.SearchVolumeRange getSearchVolume() {
      if (searchVolumeBuilder_ == null) {
        return searchVolume_ == null ? com.google.ads.googleads.v14.common.SearchVolumeRange.getDefaultInstance() : searchVolume_;
      } else {
        return searchVolumeBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     */
    public Builder setSearchVolume(com.google.ads.googleads.v14.common.SearchVolumeRange value) {
      if (searchVolumeBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        searchVolume_ = value;
      } else {
        searchVolumeBuilder_.setMessage(value);
      }
      bitField3_ |= 0x00200000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     */
    public Builder setSearchVolume(
        com.google.ads.googleads.v14.common.SearchVolumeRange.Builder builderForValue) {
      if (searchVolumeBuilder_ == null) {
        searchVolume_ = builderForValue.build();
      } else {
        searchVolumeBuilder_.setMessage(builderForValue.build());
      }
      bitField3_ |= 0x00200000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     */
    public Builder mergeSearchVolume(com.google.ads.googleads.v14.common.SearchVolumeRange value) {
      if (searchVolumeBuilder_ == null) {
        if (((bitField3_ & 0x00200000) != 0) &&
          searchVolume_ != null &&
          searchVolume_ != com.google.ads.googleads.v14.common.SearchVolumeRange.getDefaultInstance()) {
          getSearchVolumeBuilder().mergeFrom(value);
        } else {
          searchVolume_ = value;
        }
      } else {
        searchVolumeBuilder_.mergeFrom(value);
      }
      bitField3_ |= 0x00200000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     */
    public Builder clearSearchVolume() {
      bitField3_ = (bitField3_ & ~0x00200000);
      searchVolume_ = null;
      if (searchVolumeBuilder_ != null) {
        searchVolumeBuilder_.dispose();
        searchVolumeBuilder_ = null;
      }
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     */
    public com.google.ads.googleads.v14.common.SearchVolumeRange.Builder getSearchVolumeBuilder() {
      bitField3_ |= 0x00200000;
      onChanged();
      return getSearchVolumeFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     */
    public com.google.ads.googleads.v14.common.SearchVolumeRangeOrBuilder getSearchVolumeOrBuilder() {
      if (searchVolumeBuilder_ != null) {
        return searchVolumeBuilder_.getMessageOrBuilder();
      } else {
        return searchVolume_ == null ?
            com.google.ads.googleads.v14.common.SearchVolumeRange.getDefaultInstance() : searchVolume_;
      }
    }
    /**
     * <pre>
     * Search volume range for a search term insight category.
     * </pre>
     *
     * <code>optional .google.ads.googleads.v14.common.SearchVolumeRange search_volume = 295;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.SearchVolumeRange, com.google.ads.googleads.v14.common.SearchVolumeRange.Builder, com.google.ads.googleads.v14.common.SearchVolumeRangeOrBuilder> 
        getSearchVolumeFieldBuilder() {
      if (searchVolumeBuilder_ == null) {
        searchVolumeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.SearchVolumeRange, com.google.ads.googleads.v14.common.SearchVolumeRange.Builder, com.google.ads.googleads.v14.common.SearchVolumeRangeOrBuilder>(
                getSearchVolume(),
                getParentForChildren(),
                isClean());
        searchVolume_ = null;
      }
      return searchVolumeBuilder_;
    }

    private long speedScore_ ;
    /**
     * <pre>
     * A measure of how quickly your page loads after clicks on your mobile ads.
     * The score is a range from 1 to 10, 10 being the fastest.
     * </pre>
     *
     * <code>optional int64 speed_score = 147;</code>
     * @return Whether the speedScore field is set.
     */
    @java.lang.Override
    public boolean hasSpeedScore() {
      return ((bitField3_ & 0x00400000) != 0);
    }
    /**
     * <pre>
     * A measure of how quickly your page loads after clicks on your mobile ads.
     * The score is a range from 1 to 10, 10 being the fastest.
     * </pre>
     *
     * <code>optional int64 speed_score = 147;</code>
     * @return The speedScore.
     */
    @java.lang.Override
    public long getSpeedScore() {
      return speedScore_;
    }
    /**
     * <pre>
     * A measure of how quickly your page loads after clicks on your mobile ads.
     * The score is a range from 1 to 10, 10 being the fastest.
     * </pre>
     *
     * <code>optional int64 speed_score = 147;</code>
     * @param value The speedScore to set.
     * @return This builder for chaining.
     */
    public Builder setSpeedScore(long value) {

      speedScore_ = value;
      bitField3_ |= 0x00400000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * A measure of how quickly your page loads after clicks on your mobile ads.
     * The score is a range from 1 to 10, 10 being the fastest.
     * </pre>
     *
     * <code>optional int64 speed_score = 147;</code>
     * @return This builder for chaining.
     */
    public Builder clearSpeedScore() {
      bitField3_ = (bitField3_ & ~0x00400000);
      speedScore_ = 0L;
      onChanged();
      return this;
    }

    private long averageTargetCpaMicros_ ;
    /**
     * <pre>
     * The average Target CPA, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tCPA).
     * </pre>
     *
     * <code>optional int64 average_target_cpa_micros = 290;</code>
     * @return Whether the averageTargetCpaMicros field is set.
     */
    @java.lang.Override
    public boolean hasAverageTargetCpaMicros() {
      return ((bitField3_ & 0x00800000) != 0);
    }
    /**
     * <pre>
     * The average Target CPA, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tCPA).
     * </pre>
     *
     * <code>optional int64 average_target_cpa_micros = 290;</code>
     * @return The averageTargetCpaMicros.
     */
    @java.lang.Override
    public long getAverageTargetCpaMicros() {
      return averageTargetCpaMicros_;
    }
    /**
     * <pre>
     * The average Target CPA, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tCPA).
     * </pre>
     *
     * <code>optional int64 average_target_cpa_micros = 290;</code>
     * @param value The averageTargetCpaMicros to set.
     * @return This builder for chaining.
     */
    public Builder setAverageTargetCpaMicros(long value) {

      averageTargetCpaMicros_ = value;
      bitField3_ |= 0x00800000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The average Target CPA, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tCPA).
     * </pre>
     *
     * <code>optional int64 average_target_cpa_micros = 290;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageTargetCpaMicros() {
      bitField3_ = (bitField3_ & ~0x00800000);
      averageTargetCpaMicros_ = 0L;
      onChanged();
      return this;
    }

    private double averageTargetRoas_ ;
    /**
     * <pre>
     * The average Target ROAS, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tROAS).
     * </pre>
     *
     * <code>optional double average_target_roas = 250;</code>
     * @return Whether the averageTargetRoas field is set.
     */
    @java.lang.Override
    public boolean hasAverageTargetRoas() {
      return ((bitField3_ & 0x01000000) != 0);
    }
    /**
     * <pre>
     * The average Target ROAS, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tROAS).
     * </pre>
     *
     * <code>optional double average_target_roas = 250;</code>
     * @return The averageTargetRoas.
     */
    @java.lang.Override
    public double getAverageTargetRoas() {
      return averageTargetRoas_;
    }
    /**
     * <pre>
     * The average Target ROAS, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tROAS).
     * </pre>
     *
     * <code>optional double average_target_roas = 250;</code>
     * @param value The averageTargetRoas to set.
     * @return This builder for chaining.
     */
    public Builder setAverageTargetRoas(double value) {

      averageTargetRoas_ = value;
      bitField3_ |= 0x01000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The average Target ROAS, or unset if not available (for example, for
     * campaigns that had traffic from portfolio bidding strategies or non-tROAS).
     * </pre>
     *
     * <code>optional double average_target_roas = 250;</code>
     * @return This builder for chaining.
     */
    public Builder clearAverageTargetRoas() {
      bitField3_ = (bitField3_ & ~0x01000000);
      averageTargetRoas_ = 0D;
      onChanged();
      return this;
    }

    private double topImpressionPercentage_ ;
    /**
     * <pre>
     * The percent of your ad impressions that are shown anywhere above the
     * organic search results.
     * </pre>
     *
     * <code>optional double top_impression_percentage = 148;</code>
     * @return Whether the topImpressionPercentage field is set.
     */
    @java.lang.Override
    public boolean hasTopImpressionPercentage() {
      return ((bitField3_ & 0x02000000) != 0);
    }
    /**
     * <pre>
     * The percent of your ad impressions that are shown anywhere above the
     * organic search results.
     * </pre>
     *
     * <code>optional double top_impression_percentage = 148;</code>
     * @return The topImpressionPercentage.
     */
    @java.lang.Override
    public double getTopImpressionPercentage() {
      return topImpressionPercentage_;
    }
    /**
     * <pre>
     * The percent of your ad impressions that are shown anywhere above the
     * organic search results.
     * </pre>
     *
     * <code>optional double top_impression_percentage = 148;</code>
     * @param value The topImpressionPercentage to set.
     * @return This builder for chaining.
     */
    public Builder setTopImpressionPercentage(double value) {

      topImpressionPercentage_ = value;
      bitField3_ |= 0x02000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The percent of your ad impressions that are shown anywhere above the
     * organic search results.
     * </pre>
     *
     * <code>optional double top_impression_percentage = 148;</code>
     * @return This builder for chaining.
     */
    public Builder clearTopImpressionPercentage() {
      bitField3_ = (bitField3_ & ~0x02000000);
      topImpressionPercentage_ = 0D;
      onChanged();
      return this;
    }

    private double validAcceleratedMobilePagesClicksPercentage_ ;
    /**
     * <pre>
     * The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages
     * that reach a valid AMP page.
     * </pre>
     *
     * <code>optional double valid_accelerated_mobile_pages_clicks_percentage = 149;</code>
     * @return Whether the validAcceleratedMobilePagesClicksPercentage field is set.
     */
    @java.lang.Override
    public boolean hasValidAcceleratedMobilePagesClicksPercentage() {
      return ((bitField3_ & 0x04000000) != 0);
    }
    /**
     * <pre>
     * The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages
     * that reach a valid AMP page.
     * </pre>
     *
     * <code>optional double valid_accelerated_mobile_pages_clicks_percentage = 149;</code>
     * @return The validAcceleratedMobilePagesClicksPercentage.
     */
    @java.lang.Override
    public double getValidAcceleratedMobilePagesClicksPercentage() {
      return validAcceleratedMobilePagesClicksPercentage_;
    }
    /**
     * <pre>
     * The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages
     * that reach a valid AMP page.
     * </pre>
     *
     * <code>optional double valid_accelerated_mobile_pages_clicks_percentage = 149;</code>
     * @param value The validAcceleratedMobilePagesClicksPercentage to set.
     * @return This builder for chaining.
     */
    public Builder setValidAcceleratedMobilePagesClicksPercentage(double value) {

      validAcceleratedMobilePagesClicksPercentage_ = value;
      bitField3_ |= 0x04000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages
     * that reach a valid AMP page.
     * </pre>
     *
     * <code>optional double valid_accelerated_mobile_pages_clicks_percentage = 149;</code>
     * @return This builder for chaining.
     */
    public Builder clearValidAcceleratedMobilePagesClicksPercentage() {
      bitField3_ = (bitField3_ & ~0x04000000);
      validAcceleratedMobilePagesClicksPercentage_ = 0D;
      onChanged();
      return this;
    }

    private double valuePerAllConversions_ ;
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions.
     * </pre>
     *
     * <code>optional double value_per_all_conversions = 150;</code>
     * @return Whether the valuePerAllConversions field is set.
     */
    @java.lang.Override
    public boolean hasValuePerAllConversions() {
      return ((bitField3_ & 0x08000000) != 0);
    }
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions.
     * </pre>
     *
     * <code>optional double value_per_all_conversions = 150;</code>
     * @return The valuePerAllConversions.
     */
    @java.lang.Override
    public double getValuePerAllConversions() {
      return valuePerAllConversions_;
    }
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions.
     * </pre>
     *
     * <code>optional double value_per_all_conversions = 150;</code>
     * @param value The valuePerAllConversions to set.
     * @return This builder for chaining.
     */
    public Builder setValuePerAllConversions(double value) {

      valuePerAllConversions_ = value;
      bitField3_ |= 0x08000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions.
     * </pre>
     *
     * <code>optional double value_per_all_conversions = 150;</code>
     * @return This builder for chaining.
     */
    public Builder clearValuePerAllConversions() {
      bitField3_ = (bitField3_ & ~0x08000000);
      valuePerAllConversions_ = 0D;
      onChanged();
      return this;
    }

    private double valuePerAllConversionsByConversionDate_ ;
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions. When
     * this column is selected with date, the values in date column means the
     * conversion date. Details for the by_conversion_date columns are available
     * at https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_all_conversions_by_conversion_date = 244;</code>
     * @return Whether the valuePerAllConversionsByConversionDate field is set.
     */
    @java.lang.Override
    public boolean hasValuePerAllConversionsByConversionDate() {
      return ((bitField3_ & 0x10000000) != 0);
    }
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions. When
     * this column is selected with date, the values in date column means the
     * conversion date. Details for the by_conversion_date columns are available
     * at https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_all_conversions_by_conversion_date = 244;</code>
     * @return The valuePerAllConversionsByConversionDate.
     */
    @java.lang.Override
    public double getValuePerAllConversionsByConversionDate() {
      return valuePerAllConversionsByConversionDate_;
    }
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions. When
     * this column is selected with date, the values in date column means the
     * conversion date. Details for the by_conversion_date columns are available
     * at https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_all_conversions_by_conversion_date = 244;</code>
     * @param value The valuePerAllConversionsByConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setValuePerAllConversionsByConversionDate(double value) {

      valuePerAllConversionsByConversionDate_ = value;
      bitField3_ |= 0x10000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of all conversions divided by the number of all conversions. When
     * this column is selected with date, the values in date column means the
     * conversion date. Details for the by_conversion_date columns are available
     * at https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_all_conversions_by_conversion_date = 244;</code>
     * @return This builder for chaining.
     */
    public Builder clearValuePerAllConversionsByConversionDate() {
      bitField3_ = (bitField3_ & ~0x10000000);
      valuePerAllConversionsByConversionDate_ = 0D;
      onChanged();
      return this;
    }

    private double valuePerConversion_ ;
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double value_per_conversion = 151;</code>
     * @return Whether the valuePerConversion field is set.
     */
    @java.lang.Override
    public boolean hasValuePerConversion() {
      return ((bitField3_ & 0x20000000) != 0);
    }
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double value_per_conversion = 151;</code>
     * @return The valuePerConversion.
     */
    @java.lang.Override
    public double getValuePerConversion() {
      return valuePerConversion_;
    }
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double value_per_conversion = 151;</code>
     * @param value The valuePerConversion to set.
     * @return This builder for chaining.
     */
    public Builder setValuePerConversion(double value) {

      valuePerConversion_ = value;
      bitField3_ |= 0x20000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions.
     * </pre>
     *
     * <code>optional double value_per_conversion = 151;</code>
     * @return This builder for chaining.
     */
    public Builder clearValuePerConversion() {
      bitField3_ = (bitField3_ & ~0x20000000);
      valuePerConversion_ = 0D;
      onChanged();
      return this;
    }

    private double valuePerConversionsByConversionDate_ ;
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions. When this column is selected with
     * date, the values in date column means the conversion date. Details for the
     * by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_conversions_by_conversion_date = 245;</code>
     * @return Whether the valuePerConversionsByConversionDate field is set.
     */
    @java.lang.Override
    public boolean hasValuePerConversionsByConversionDate() {
      return ((bitField3_ & 0x40000000) != 0);
    }
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions. When this column is selected with
     * date, the values in date column means the conversion date. Details for the
     * by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_conversions_by_conversion_date = 245;</code>
     * @return The valuePerConversionsByConversionDate.
     */
    @java.lang.Override
    public double getValuePerConversionsByConversionDate() {
      return valuePerConversionsByConversionDate_;
    }
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions. When this column is selected with
     * date, the values in date column means the conversion date. Details for the
     * by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_conversions_by_conversion_date = 245;</code>
     * @param value The valuePerConversionsByConversionDate to set.
     * @return This builder for chaining.
     */
    public Builder setValuePerConversionsByConversionDate(double value) {

      valuePerConversionsByConversionDate_ = value;
      bitField3_ |= 0x40000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of conversions divided by the number of conversions. This only
     * includes conversion actions which include_in_conversions_metric attribute
     * is set to true. If you use conversion-based bidding, your bid strategies
     * will optimize for these conversions. When this column is selected with
     * date, the values in date column means the conversion date. Details for the
     * by_conversion_date columns are available at
     * https://support.google.com/google-ads/answer/9549009.
     * </pre>
     *
     * <code>optional double value_per_conversions_by_conversion_date = 245;</code>
     * @return This builder for chaining.
     */
    public Builder clearValuePerConversionsByConversionDate() {
      bitField3_ = (bitField3_ & ~0x40000000);
      valuePerConversionsByConversionDate_ = 0D;
      onChanged();
      return this;
    }

    private double valuePerCurrentModelAttributedConversion_ ;
    /**
     * <pre>
     * The value of current model attributed conversions divided by the number of
     * the conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double value_per_current_model_attributed_conversion = 152;</code>
     * @return Whether the valuePerCurrentModelAttributedConversion field is set.
     */
    @java.lang.Override
    public boolean hasValuePerCurrentModelAttributedConversion() {
      return ((bitField3_ & 0x80000000) != 0);
    }
    /**
     * <pre>
     * The value of current model attributed conversions divided by the number of
     * the conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double value_per_current_model_attributed_conversion = 152;</code>
     * @return The valuePerCurrentModelAttributedConversion.
     */
    @java.lang.Override
    public double getValuePerCurrentModelAttributedConversion() {
      return valuePerCurrentModelAttributedConversion_;
    }
    /**
     * <pre>
     * The value of current model attributed conversions divided by the number of
     * the conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double value_per_current_model_attributed_conversion = 152;</code>
     * @param value The valuePerCurrentModelAttributedConversion to set.
     * @return This builder for chaining.
     */
    public Builder setValuePerCurrentModelAttributedConversion(double value) {

      valuePerCurrentModelAttributedConversion_ = value;
      bitField3_ |= 0x80000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The value of current model attributed conversions divided by the number of
     * the conversions. This only includes conversion actions which
     * include_in_conversions_metric attribute is set to true. If you use
     * conversion-based bidding, your bid strategies will optimize for these
     * conversions.
     * </pre>
     *
     * <code>optional double value_per_current_model_attributed_conversion = 152;</code>
     * @return This builder for chaining.
     */
    public Builder clearValuePerCurrentModelAttributedConversion() {
      bitField3_ = (bitField3_ & ~0x80000000);
      valuePerCurrentModelAttributedConversion_ = 0D;
      onChanged();
      return this;
    }

    private double videoQuartileP100Rate_ ;
    /**
     * <pre>
     * Percentage of impressions where the viewer watched all of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p100_rate = 132;</code>
     * @return Whether the videoQuartileP100Rate field is set.
     */
    @java.lang.Override
    public boolean hasVideoQuartileP100Rate() {
      return ((bitField4_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched all of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p100_rate = 132;</code>
     * @return The videoQuartileP100Rate.
     */
    @java.lang.Override
    public double getVideoQuartileP100Rate() {
      return videoQuartileP100Rate_;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched all of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p100_rate = 132;</code>
     * @param value The videoQuartileP100Rate to set.
     * @return This builder for chaining.
     */
    public Builder setVideoQuartileP100Rate(double value) {

      videoQuartileP100Rate_ = value;
      bitField4_ |= 0x00000001;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched all of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p100_rate = 132;</code>
     * @return This builder for chaining.
     */
    public Builder clearVideoQuartileP100Rate() {
      bitField4_ = (bitField4_ & ~0x00000001);
      videoQuartileP100Rate_ = 0D;
      onChanged();
      return this;
    }

    private double videoQuartileP25Rate_ ;
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 25% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p25_rate = 133;</code>
     * @return Whether the videoQuartileP25Rate field is set.
     */
    @java.lang.Override
    public boolean hasVideoQuartileP25Rate() {
      return ((bitField4_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 25% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p25_rate = 133;</code>
     * @return The videoQuartileP25Rate.
     */
    @java.lang.Override
    public double getVideoQuartileP25Rate() {
      return videoQuartileP25Rate_;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 25% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p25_rate = 133;</code>
     * @param value The videoQuartileP25Rate to set.
     * @return This builder for chaining.
     */
    public Builder setVideoQuartileP25Rate(double value) {

      videoQuartileP25Rate_ = value;
      bitField4_ |= 0x00000002;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 25% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p25_rate = 133;</code>
     * @return This builder for chaining.
     */
    public Builder clearVideoQuartileP25Rate() {
      bitField4_ = (bitField4_ & ~0x00000002);
      videoQuartileP25Rate_ = 0D;
      onChanged();
      return this;
    }

    private double videoQuartileP50Rate_ ;
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 50% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p50_rate = 134;</code>
     * @return Whether the videoQuartileP50Rate field is set.
     */
    @java.lang.Override
    public boolean hasVideoQuartileP50Rate() {
      return ((bitField4_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 50% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p50_rate = 134;</code>
     * @return The videoQuartileP50Rate.
     */
    @java.lang.Override
    public double getVideoQuartileP50Rate() {
      return videoQuartileP50Rate_;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 50% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p50_rate = 134;</code>
     * @param value The videoQuartileP50Rate to set.
     * @return This builder for chaining.
     */
    public Builder setVideoQuartileP50Rate(double value) {

      videoQuartileP50Rate_ = value;
      bitField4_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 50% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p50_rate = 134;</code>
     * @return This builder for chaining.
     */
    public Builder clearVideoQuartileP50Rate() {
      bitField4_ = (bitField4_ & ~0x00000004);
      videoQuartileP50Rate_ = 0D;
      onChanged();
      return this;
    }

    private double videoQuartileP75Rate_ ;
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 75% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p75_rate = 135;</code>
     * @return Whether the videoQuartileP75Rate field is set.
     */
    @java.lang.Override
    public boolean hasVideoQuartileP75Rate() {
      return ((bitField4_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 75% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p75_rate = 135;</code>
     * @return The videoQuartileP75Rate.
     */
    @java.lang.Override
    public double getVideoQuartileP75Rate() {
      return videoQuartileP75Rate_;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 75% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p75_rate = 135;</code>
     * @param value The videoQuartileP75Rate to set.
     * @return This builder for chaining.
     */
    public Builder setVideoQuartileP75Rate(double value) {

      videoQuartileP75Rate_ = value;
      bitField4_ |= 0x00000008;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Percentage of impressions where the viewer watched 75% of your video.
     * </pre>
     *
     * <code>optional double video_quartile_p75_rate = 135;</code>
     * @return This builder for chaining.
     */
    public Builder clearVideoQuartileP75Rate() {
      bitField4_ = (bitField4_ & ~0x00000008);
      videoQuartileP75Rate_ = 0D;
      onChanged();
      return this;
    }

    private double videoViewRate_ ;
    /**
     * <pre>
     * The number of views your TrueView video ad receives divided by its number
     * of impressions, including thumbnail impressions for TrueView in-display
     * ads.
     * </pre>
     *
     * <code>optional double video_view_rate = 153;</code>
     * @return Whether the videoViewRate field is set.
     */
    @java.lang.Override
    public boolean hasVideoViewRate() {
      return ((bitField4_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * The number of views your TrueView video ad receives divided by its number
     * of impressions, including thumbnail impressions for TrueView in-display
     * ads.
     * </pre>
     *
     * <code>optional double video_view_rate = 153;</code>
     * @return The videoViewRate.
     */
    @java.lang.Override
    public double getVideoViewRate() {
      return videoViewRate_;
    }
    /**
     * <pre>
     * The number of views your TrueView video ad receives divided by its number
     * of impressions, including thumbnail impressions for TrueView in-display
     * ads.
     * </pre>
     *
     * <code>optional double video_view_rate = 153;</code>
     * @param value The videoViewRate to set.
     * @return This builder for chaining.
     */
    public Builder setVideoViewRate(double value) {

      videoViewRate_ = value;
      bitField4_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of views your TrueView video ad receives divided by its number
     * of impressions, including thumbnail impressions for TrueView in-display
     * ads.
     * </pre>
     *
     * <code>optional double video_view_rate = 153;</code>
     * @return This builder for chaining.
     */
    public Builder clearVideoViewRate() {
      bitField4_ = (bitField4_ & ~0x00000010);
      videoViewRate_ = 0D;
      onChanged();
      return this;
    }

    private long videoViews_ ;
    /**
     * <pre>
     * The number of times your video ads were viewed.
     * </pre>
     *
     * <code>optional int64 video_views = 154;</code>
     * @return Whether the videoViews field is set.
     */
    @java.lang.Override
    public boolean hasVideoViews() {
      return ((bitField4_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * The number of times your video ads were viewed.
     * </pre>
     *
     * <code>optional int64 video_views = 154;</code>
     * @return The videoViews.
     */
    @java.lang.Override
    public long getVideoViews() {
      return videoViews_;
    }
    /**
     * <pre>
     * The number of times your video ads were viewed.
     * </pre>
     *
     * <code>optional int64 video_views = 154;</code>
     * @param value The videoViews to set.
     * @return This builder for chaining.
     */
    public Builder setVideoViews(long value) {

      videoViews_ = value;
      bitField4_ |= 0x00000020;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of times your video ads were viewed.
     * </pre>
     *
     * <code>optional int64 video_views = 154;</code>
     * @return This builder for chaining.
     */
    public Builder clearVideoViews() {
      bitField4_ = (bitField4_ & ~0x00000020);
      videoViews_ = 0L;
      onChanged();
      return this;
    }

    private long viewThroughConversions_ ;
    /**
     * <pre>
     * The total number of view-through conversions.
     * These happen when a customer sees an image or rich media ad, then later
     * completes a conversion on your site without interacting with (for example,
     * clicking on) another ad.
     * </pre>
     *
     * <code>optional int64 view_through_conversions = 155;</code>
     * @return Whether the viewThroughConversions field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversions() {
      return ((bitField4_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * The total number of view-through conversions.
     * These happen when a customer sees an image or rich media ad, then later
     * completes a conversion on your site without interacting with (for example,
     * clicking on) another ad.
     * </pre>
     *
     * <code>optional int64 view_through_conversions = 155;</code>
     * @return The viewThroughConversions.
     */
    @java.lang.Override
    public long getViewThroughConversions() {
      return viewThroughConversions_;
    }
    /**
     * <pre>
     * The total number of view-through conversions.
     * These happen when a customer sees an image or rich media ad, then later
     * completes a conversion on your site without interacting with (for example,
     * clicking on) another ad.
     * </pre>
     *
     * <code>optional int64 view_through_conversions = 155;</code>
     * @param value The viewThroughConversions to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversions(long value) {

      viewThroughConversions_ = value;
      bitField4_ |= 0x00000040;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The total number of view-through conversions.
     * These happen when a customer sees an image or rich media ad, then later
     * completes a conversion on your site without interacting with (for example,
     * clicking on) another ad.
     * </pre>
     *
     * <code>optional int64 view_through_conversions = 155;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversions() {
      bitField4_ = (bitField4_ & ~0x00000040);
      viewThroughConversions_ = 0L;
      onChanged();
      return this;
    }

    private long skAdNetworkConversions_ ;
    /**
     * <pre>
     * The number of iOS Store Kit Ad Network conversions.
     * </pre>
     *
     * <code>int64 sk_ad_network_conversions = 246;</code>
     * @return The skAdNetworkConversions.
     */
    @java.lang.Override
    public long getSkAdNetworkConversions() {
      return skAdNetworkConversions_;
    }
    /**
     * <pre>
     * The number of iOS Store Kit Ad Network conversions.
     * </pre>
     *
     * <code>int64 sk_ad_network_conversions = 246;</code>
     * @param value The skAdNetworkConversions to set.
     * @return This builder for chaining.
     */
    public Builder setSkAdNetworkConversions(long value) {

      skAdNetworkConversions_ = value;
      bitField4_ |= 0x00000080;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The number of iOS Store Kit Ad Network conversions.
     * </pre>
     *
     * <code>int64 sk_ad_network_conversions = 246;</code>
     * @return This builder for chaining.
     */
    public Builder clearSkAdNetworkConversions() {
      bitField4_ = (bitField4_ & ~0x00000080);
      skAdNetworkConversions_ = 0L;
      onChanged();
      return this;
    }

    private long publisherPurchasedClicks_ ;
    /**
     * <pre>
     * Clicks from properties not owned by the publisher for which the traffic
     * the publisher has paid for or acquired through incentivized activity
     * </pre>
     *
     * <code>int64 publisher_purchased_clicks = 264;</code>
     * @return The publisherPurchasedClicks.
     */
    @java.lang.Override
    public long getPublisherPurchasedClicks() {
      return publisherPurchasedClicks_;
    }
    /**
     * <pre>
     * Clicks from properties not owned by the publisher for which the traffic
     * the publisher has paid for or acquired through incentivized activity
     * </pre>
     *
     * <code>int64 publisher_purchased_clicks = 264;</code>
     * @param value The publisherPurchasedClicks to set.
     * @return This builder for chaining.
     */
    public Builder setPublisherPurchasedClicks(long value) {

      publisherPurchasedClicks_ = value;
      bitField4_ |= 0x00000100;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Clicks from properties not owned by the publisher for which the traffic
     * the publisher has paid for or acquired through incentivized activity
     * </pre>
     *
     * <code>int64 publisher_purchased_clicks = 264;</code>
     * @return This builder for chaining.
     */
    public Builder clearPublisherPurchasedClicks() {
      bitField4_ = (bitField4_ & ~0x00000100);
      publisherPurchasedClicks_ = 0L;
      onChanged();
      return this;
    }

    private long publisherOrganicClicks_ ;
    /**
     * <pre>
     * Clicks from properties for which the traffic the publisher has not paid
     * for or acquired through incentivized activity
     * </pre>
     *
     * <code>int64 publisher_organic_clicks = 265;</code>
     * @return The publisherOrganicClicks.
     */
    @java.lang.Override
    public long getPublisherOrganicClicks() {
      return publisherOrganicClicks_;
    }
    /**
     * <pre>
     * Clicks from properties for which the traffic the publisher has not paid
     * for or acquired through incentivized activity
     * </pre>
     *
     * <code>int64 publisher_organic_clicks = 265;</code>
     * @param value The publisherOrganicClicks to set.
     * @return This builder for chaining.
     */
    public Builder setPublisherOrganicClicks(long value) {

      publisherOrganicClicks_ = value;
      bitField4_ |= 0x00000200;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Clicks from properties for which the traffic the publisher has not paid
     * for or acquired through incentivized activity
     * </pre>
     *
     * <code>int64 publisher_organic_clicks = 265;</code>
     * @return This builder for chaining.
     */
    public Builder clearPublisherOrganicClicks() {
      bitField4_ = (bitField4_ & ~0x00000200);
      publisherOrganicClicks_ = 0L;
      onChanged();
      return this;
    }

    private long publisherUnknownClicks_ ;
    /**
     * <pre>
     * Clicks from traffic which is not identified as "Publisher Purchased" or
     * "Publisher Organic"
     * </pre>
     *
     * <code>int64 publisher_unknown_clicks = 266;</code>
     * @return The publisherUnknownClicks.
     */
    @java.lang.Override
    public long getPublisherUnknownClicks() {
      return publisherUnknownClicks_;
    }
    /**
     * <pre>
     * Clicks from traffic which is not identified as "Publisher Purchased" or
     * "Publisher Organic"
     * </pre>
     *
     * <code>int64 publisher_unknown_clicks = 266;</code>
     * @param value The publisherUnknownClicks to set.
     * @return This builder for chaining.
     */
    public Builder setPublisherUnknownClicks(long value) {

      publisherUnknownClicks_ = value;
      bitField4_ |= 0x00000400;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Clicks from traffic which is not identified as "Publisher Purchased" or
     * "Publisher Organic"
     * </pre>
     *
     * <code>int64 publisher_unknown_clicks = 266;</code>
     * @return This builder for chaining.
     */
    public Builder clearPublisherUnknownClicks() {
      bitField4_ = (bitField4_ & ~0x00000400);
      publisherUnknownClicks_ = 0L;
      onChanged();
      return this;
    }

    private double allConversionsFromLocationAssetClickToCall_ ;
    /**
     * <pre>
     * Number of call button clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_click_to_call = 267;</code>
     * @return Whether the allConversionsFromLocationAssetClickToCall field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromLocationAssetClickToCall() {
      return ((bitField4_ & 0x00000800) != 0);
    }
    /**
     * <pre>
     * Number of call button clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_click_to_call = 267;</code>
     * @return The allConversionsFromLocationAssetClickToCall.
     */
    @java.lang.Override
    public double getAllConversionsFromLocationAssetClickToCall() {
      return allConversionsFromLocationAssetClickToCall_;
    }
    /**
     * <pre>
     * Number of call button clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_click_to_call = 267;</code>
     * @param value The allConversionsFromLocationAssetClickToCall to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromLocationAssetClickToCall(double value) {

      allConversionsFromLocationAssetClickToCall_ = value;
      bitField4_ |= 0x00000800;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of call button clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_click_to_call = 267;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromLocationAssetClickToCall() {
      bitField4_ = (bitField4_ & ~0x00000800);
      allConversionsFromLocationAssetClickToCall_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromLocationAssetDirections_ ;
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after a
     * chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_directions = 268;</code>
     * @return Whether the allConversionsFromLocationAssetDirections field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromLocationAssetDirections() {
      return ((bitField4_ & 0x00001000) != 0);
    }
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after a
     * chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_directions = 268;</code>
     * @return The allConversionsFromLocationAssetDirections.
     */
    @java.lang.Override
    public double getAllConversionsFromLocationAssetDirections() {
      return allConversionsFromLocationAssetDirections_;
    }
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after a
     * chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_directions = 268;</code>
     * @param value The allConversionsFromLocationAssetDirections to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromLocationAssetDirections(double value) {

      allConversionsFromLocationAssetDirections_ = value;
      bitField4_ |= 0x00001000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after a
     * chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_directions = 268;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromLocationAssetDirections() {
      bitField4_ = (bitField4_ & ~0x00001000);
      allConversionsFromLocationAssetDirections_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromLocationAssetMenu_ ;
    /**
     * <pre>
     * Number of menu link clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_menu = 269;</code>
     * @return Whether the allConversionsFromLocationAssetMenu field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromLocationAssetMenu() {
      return ((bitField4_ & 0x00002000) != 0);
    }
    /**
     * <pre>
     * Number of menu link clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_menu = 269;</code>
     * @return The allConversionsFromLocationAssetMenu.
     */
    @java.lang.Override
    public double getAllConversionsFromLocationAssetMenu() {
      return allConversionsFromLocationAssetMenu_;
    }
    /**
     * <pre>
     * Number of menu link clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_menu = 269;</code>
     * @param value The allConversionsFromLocationAssetMenu to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromLocationAssetMenu(double value) {

      allConversionsFromLocationAssetMenu_ = value;
      bitField4_ |= 0x00002000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of menu link clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_menu = 269;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromLocationAssetMenu() {
      bitField4_ = (bitField4_ & ~0x00002000);
      allConversionsFromLocationAssetMenu_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromLocationAssetOrder_ ;
    /**
     * <pre>
     * Number of order clicks on any location surface after a chargeable ad event
     * (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_order = 270;</code>
     * @return Whether the allConversionsFromLocationAssetOrder field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromLocationAssetOrder() {
      return ((bitField4_ & 0x00004000) != 0);
    }
    /**
     * <pre>
     * Number of order clicks on any location surface after a chargeable ad event
     * (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_order = 270;</code>
     * @return The allConversionsFromLocationAssetOrder.
     */
    @java.lang.Override
    public double getAllConversionsFromLocationAssetOrder() {
      return allConversionsFromLocationAssetOrder_;
    }
    /**
     * <pre>
     * Number of order clicks on any location surface after a chargeable ad event
     * (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_order = 270;</code>
     * @param value The allConversionsFromLocationAssetOrder to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromLocationAssetOrder(double value) {

      allConversionsFromLocationAssetOrder_ = value;
      bitField4_ |= 0x00004000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of order clicks on any location surface after a chargeable ad event
     * (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_order = 270;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromLocationAssetOrder() {
      bitField4_ = (bitField4_ & ~0x00004000);
      allConversionsFromLocationAssetOrder_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromLocationAssetOtherEngagement_ ;
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * a chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_other_engagement = 271;</code>
     * @return Whether the allConversionsFromLocationAssetOtherEngagement field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromLocationAssetOtherEngagement() {
      return ((bitField4_ & 0x00008000) != 0);
    }
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * a chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_other_engagement = 271;</code>
     * @return The allConversionsFromLocationAssetOtherEngagement.
     */
    @java.lang.Override
    public double getAllConversionsFromLocationAssetOtherEngagement() {
      return allConversionsFromLocationAssetOtherEngagement_;
    }
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * a chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_other_engagement = 271;</code>
     * @param value The allConversionsFromLocationAssetOtherEngagement to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromLocationAssetOtherEngagement(double value) {

      allConversionsFromLocationAssetOtherEngagement_ = value;
      bitField4_ |= 0x00008000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * a chargeable ad event (click or impression). This measure is coming
     * from Asset based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_other_engagement = 271;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromLocationAssetOtherEngagement() {
      bitField4_ = (bitField4_ & ~0x00008000);
      allConversionsFromLocationAssetOtherEngagement_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromLocationAssetStoreVisits_ ;
    /**
     * <pre>
     * Estimated number of visits to the store after a chargeable
     * ad event (click or impression). This measure is coming from Asset
     * based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_store_visits = 272;</code>
     * @return Whether the allConversionsFromLocationAssetStoreVisits field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromLocationAssetStoreVisits() {
      return ((bitField4_ & 0x00010000) != 0);
    }
    /**
     * <pre>
     * Estimated number of visits to the store after a chargeable
     * ad event (click or impression). This measure is coming from Asset
     * based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_store_visits = 272;</code>
     * @return The allConversionsFromLocationAssetStoreVisits.
     */
    @java.lang.Override
    public double getAllConversionsFromLocationAssetStoreVisits() {
      return allConversionsFromLocationAssetStoreVisits_;
    }
    /**
     * <pre>
     * Estimated number of visits to the store after a chargeable
     * ad event (click or impression). This measure is coming from Asset
     * based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_store_visits = 272;</code>
     * @param value The allConversionsFromLocationAssetStoreVisits to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromLocationAssetStoreVisits(double value) {

      allConversionsFromLocationAssetStoreVisits_ = value;
      bitField4_ |= 0x00010000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Estimated number of visits to the store after a chargeable
     * ad event (click or impression). This measure is coming from Asset
     * based location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_store_visits = 272;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromLocationAssetStoreVisits() {
      bitField4_ = (bitField4_ & ~0x00010000);
      allConversionsFromLocationAssetStoreVisits_ = 0D;
      onChanged();
      return this;
    }

    private double allConversionsFromLocationAssetWebsite_ ;
    /**
     * <pre>
     * Number of website URL clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_website = 273;</code>
     * @return Whether the allConversionsFromLocationAssetWebsite field is set.
     */
    @java.lang.Override
    public boolean hasAllConversionsFromLocationAssetWebsite() {
      return ((bitField4_ & 0x00020000) != 0);
    }
    /**
     * <pre>
     * Number of website URL clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_website = 273;</code>
     * @return The allConversionsFromLocationAssetWebsite.
     */
    @java.lang.Override
    public double getAllConversionsFromLocationAssetWebsite() {
      return allConversionsFromLocationAssetWebsite_;
    }
    /**
     * <pre>
     * Number of website URL clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_website = 273;</code>
     * @param value The allConversionsFromLocationAssetWebsite to set.
     * @return This builder for chaining.
     */
    public Builder setAllConversionsFromLocationAssetWebsite(double value) {

      allConversionsFromLocationAssetWebsite_ = value;
      bitField4_ |= 0x00020000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of website URL clicks on any location surface after a chargeable ad
     * event (click or impression). This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional double all_conversions_from_location_asset_website = 273;</code>
     * @return This builder for chaining.
     */
    public Builder clearAllConversionsFromLocationAssetWebsite() {
      bitField4_ = (bitField4_ & ~0x00020000);
      allConversionsFromLocationAssetWebsite_ = 0D;
      onChanged();
      return this;
    }

    private long eligibleImpressionsFromLocationAssetStoreReach_ ;
    /**
     * <pre>
     * Number of impressions in which the store location was shown or the location
     * was used for targeting. This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional int64 eligible_impressions_from_location_asset_store_reach = 274;</code>
     * @return Whether the eligibleImpressionsFromLocationAssetStoreReach field is set.
     */
    @java.lang.Override
    public boolean hasEligibleImpressionsFromLocationAssetStoreReach() {
      return ((bitField4_ & 0x00040000) != 0);
    }
    /**
     * <pre>
     * Number of impressions in which the store location was shown or the location
     * was used for targeting. This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional int64 eligible_impressions_from_location_asset_store_reach = 274;</code>
     * @return The eligibleImpressionsFromLocationAssetStoreReach.
     */
    @java.lang.Override
    public long getEligibleImpressionsFromLocationAssetStoreReach() {
      return eligibleImpressionsFromLocationAssetStoreReach_;
    }
    /**
     * <pre>
     * Number of impressions in which the store location was shown or the location
     * was used for targeting. This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional int64 eligible_impressions_from_location_asset_store_reach = 274;</code>
     * @param value The eligibleImpressionsFromLocationAssetStoreReach to set.
     * @return This builder for chaining.
     */
    public Builder setEligibleImpressionsFromLocationAssetStoreReach(long value) {

      eligibleImpressionsFromLocationAssetStoreReach_ = value;
      bitField4_ |= 0x00040000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of impressions in which the store location was shown or the location
     * was used for targeting. This measure is coming from Asset based
     * location.
     * </pre>
     *
     * <code>optional int64 eligible_impressions_from_location_asset_store_reach = 274;</code>
     * @return This builder for chaining.
     */
    public Builder clearEligibleImpressionsFromLocationAssetStoreReach() {
      bitField4_ = (bitField4_ & ~0x00040000);
      eligibleImpressionsFromLocationAssetStoreReach_ = 0L;
      onChanged();
      return this;
    }

    private double viewThroughConversionsFromLocationAssetClickToCall_ ;
    /**
     * <pre>
     * Number of call button clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_click_to_call = 275;</code>
     * @return Whether the viewThroughConversionsFromLocationAssetClickToCall field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversionsFromLocationAssetClickToCall() {
      return ((bitField4_ & 0x00080000) != 0);
    }
    /**
     * <pre>
     * Number of call button clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_click_to_call = 275;</code>
     * @return The viewThroughConversionsFromLocationAssetClickToCall.
     */
    @java.lang.Override
    public double getViewThroughConversionsFromLocationAssetClickToCall() {
      return viewThroughConversionsFromLocationAssetClickToCall_;
    }
    /**
     * <pre>
     * Number of call button clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_click_to_call = 275;</code>
     * @param value The viewThroughConversionsFromLocationAssetClickToCall to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversionsFromLocationAssetClickToCall(double value) {

      viewThroughConversionsFromLocationAssetClickToCall_ = value;
      bitField4_ |= 0x00080000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of call button clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_click_to_call = 275;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversionsFromLocationAssetClickToCall() {
      bitField4_ = (bitField4_ & ~0x00080000);
      viewThroughConversionsFromLocationAssetClickToCall_ = 0D;
      onChanged();
      return this;
    }

    private double viewThroughConversionsFromLocationAssetDirections_ ;
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after an
     * impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_directions = 276;</code>
     * @return Whether the viewThroughConversionsFromLocationAssetDirections field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversionsFromLocationAssetDirections() {
      return ((bitField4_ & 0x00100000) != 0);
    }
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after an
     * impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_directions = 276;</code>
     * @return The viewThroughConversionsFromLocationAssetDirections.
     */
    @java.lang.Override
    public double getViewThroughConversionsFromLocationAssetDirections() {
      return viewThroughConversionsFromLocationAssetDirections_;
    }
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after an
     * impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_directions = 276;</code>
     * @param value The viewThroughConversionsFromLocationAssetDirections to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversionsFromLocationAssetDirections(double value) {

      viewThroughConversionsFromLocationAssetDirections_ = value;
      bitField4_ |= 0x00100000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of driving directions clicks on any location surface after an
     * impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_directions = 276;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversionsFromLocationAssetDirections() {
      bitField4_ = (bitField4_ & ~0x00100000);
      viewThroughConversionsFromLocationAssetDirections_ = 0D;
      onChanged();
      return this;
    }

    private double viewThroughConversionsFromLocationAssetMenu_ ;
    /**
     * <pre>
     * Number of menu link clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_menu = 277;</code>
     * @return Whether the viewThroughConversionsFromLocationAssetMenu field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversionsFromLocationAssetMenu() {
      return ((bitField4_ & 0x00200000) != 0);
    }
    /**
     * <pre>
     * Number of menu link clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_menu = 277;</code>
     * @return The viewThroughConversionsFromLocationAssetMenu.
     */
    @java.lang.Override
    public double getViewThroughConversionsFromLocationAssetMenu() {
      return viewThroughConversionsFromLocationAssetMenu_;
    }
    /**
     * <pre>
     * Number of menu link clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_menu = 277;</code>
     * @param value The viewThroughConversionsFromLocationAssetMenu to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversionsFromLocationAssetMenu(double value) {

      viewThroughConversionsFromLocationAssetMenu_ = value;
      bitField4_ |= 0x00200000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of menu link clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_menu = 277;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversionsFromLocationAssetMenu() {
      bitField4_ = (bitField4_ & ~0x00200000);
      viewThroughConversionsFromLocationAssetMenu_ = 0D;
      onChanged();
      return this;
    }

    private double viewThroughConversionsFromLocationAssetOrder_ ;
    /**
     * <pre>
     * Number of order clicks on any location surface after an impression. This
     * measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_order = 278;</code>
     * @return Whether the viewThroughConversionsFromLocationAssetOrder field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversionsFromLocationAssetOrder() {
      return ((bitField4_ & 0x00400000) != 0);
    }
    /**
     * <pre>
     * Number of order clicks on any location surface after an impression. This
     * measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_order = 278;</code>
     * @return The viewThroughConversionsFromLocationAssetOrder.
     */
    @java.lang.Override
    public double getViewThroughConversionsFromLocationAssetOrder() {
      return viewThroughConversionsFromLocationAssetOrder_;
    }
    /**
     * <pre>
     * Number of order clicks on any location surface after an impression. This
     * measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_order = 278;</code>
     * @param value The viewThroughConversionsFromLocationAssetOrder to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversionsFromLocationAssetOrder(double value) {

      viewThroughConversionsFromLocationAssetOrder_ = value;
      bitField4_ |= 0x00400000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of order clicks on any location surface after an impression. This
     * measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_order = 278;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversionsFromLocationAssetOrder() {
      bitField4_ = (bitField4_ & ~0x00400000);
      viewThroughConversionsFromLocationAssetOrder_ = 0D;
      onChanged();
      return this;
    }

    private double viewThroughConversionsFromLocationAssetOtherEngagement_ ;
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * an impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_other_engagement = 279;</code>
     * @return Whether the viewThroughConversionsFromLocationAssetOtherEngagement field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversionsFromLocationAssetOtherEngagement() {
      return ((bitField4_ & 0x00800000) != 0);
    }
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * an impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_other_engagement = 279;</code>
     * @return The viewThroughConversionsFromLocationAssetOtherEngagement.
     */
    @java.lang.Override
    public double getViewThroughConversionsFromLocationAssetOtherEngagement() {
      return viewThroughConversionsFromLocationAssetOtherEngagement_;
    }
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * an impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_other_engagement = 279;</code>
     * @param value The viewThroughConversionsFromLocationAssetOtherEngagement to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversionsFromLocationAssetOtherEngagement(double value) {

      viewThroughConversionsFromLocationAssetOtherEngagement_ = value;
      bitField4_ |= 0x00800000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of other types of local action clicks on any location surface after
     * an impression. This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_other_engagement = 279;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversionsFromLocationAssetOtherEngagement() {
      bitField4_ = (bitField4_ & ~0x00800000);
      viewThroughConversionsFromLocationAssetOtherEngagement_ = 0D;
      onChanged();
      return this;
    }

    private double viewThroughConversionsFromLocationAssetStoreVisits_ ;
    /**
     * <pre>
     * Estimated number of visits to the store after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_store_visits = 280;</code>
     * @return Whether the viewThroughConversionsFromLocationAssetStoreVisits field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversionsFromLocationAssetStoreVisits() {
      return ((bitField4_ & 0x01000000) != 0);
    }
    /**
     * <pre>
     * Estimated number of visits to the store after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_store_visits = 280;</code>
     * @return The viewThroughConversionsFromLocationAssetStoreVisits.
     */
    @java.lang.Override
    public double getViewThroughConversionsFromLocationAssetStoreVisits() {
      return viewThroughConversionsFromLocationAssetStoreVisits_;
    }
    /**
     * <pre>
     * Estimated number of visits to the store after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_store_visits = 280;</code>
     * @param value The viewThroughConversionsFromLocationAssetStoreVisits to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversionsFromLocationAssetStoreVisits(double value) {

      viewThroughConversionsFromLocationAssetStoreVisits_ = value;
      bitField4_ |= 0x01000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Estimated number of visits to the store after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_store_visits = 280;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversionsFromLocationAssetStoreVisits() {
      bitField4_ = (bitField4_ & ~0x01000000);
      viewThroughConversionsFromLocationAssetStoreVisits_ = 0D;
      onChanged();
      return this;
    }

    private double viewThroughConversionsFromLocationAssetWebsite_ ;
    /**
     * <pre>
     * Number of website URL clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_website = 281;</code>
     * @return Whether the viewThroughConversionsFromLocationAssetWebsite field is set.
     */
    @java.lang.Override
    public boolean hasViewThroughConversionsFromLocationAssetWebsite() {
      return ((bitField4_ & 0x02000000) != 0);
    }
    /**
     * <pre>
     * Number of website URL clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_website = 281;</code>
     * @return The viewThroughConversionsFromLocationAssetWebsite.
     */
    @java.lang.Override
    public double getViewThroughConversionsFromLocationAssetWebsite() {
      return viewThroughConversionsFromLocationAssetWebsite_;
    }
    /**
     * <pre>
     * Number of website URL clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_website = 281;</code>
     * @param value The viewThroughConversionsFromLocationAssetWebsite to set.
     * @return This builder for chaining.
     */
    public Builder setViewThroughConversionsFromLocationAssetWebsite(double value) {

      viewThroughConversionsFromLocationAssetWebsite_ = value;
      bitField4_ |= 0x02000000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Number of website URL clicks on any location surface after an impression.
     * This measure is coming from Asset based location.
     * </pre>
     *
     * <code>optional double view_through_conversions_from_location_asset_website = 281;</code>
     * @return This builder for chaining.
     */
    public Builder clearViewThroughConversionsFromLocationAssetWebsite() {
      bitField4_ = (bitField4_ & ~0x02000000);
      viewThroughConversionsFromLocationAssetWebsite_ = 0D;
      onChanged();
      return this;
    }
    @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.ads.googleads.v14.common.Metrics)
  }

  // @@protoc_insertion_point(class_scope:google.ads.googleads.v14.common.Metrics)
  private static final com.google.ads.googleads.v14.common.Metrics DEFAULT_INSTANCE;
  static {
    DEFAULT_INSTANCE = new com.google.ads.googleads.v14.common.Metrics();
  }

  public static com.google.ads.googleads.v14.common.Metrics getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

  private static final com.google.protobuf.Parser<Metrics>
      PARSER = new com.google.protobuf.AbstractParser<Metrics>() {
    @java.lang.Override
    public Metrics parsePartialFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      Builder builder = newBuilder();
      try {
        builder.mergeFrom(input, extensionRegistry);
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(builder.buildPartial());
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e)
            .setUnfinishedMessage(builder.buildPartial());
      }
      return builder.buildPartial();
    }
  };

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

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

  @java.lang.Override
  public com.google.ads.googleads.v14.common.Metrics getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }

}

