# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module DisplayvideoV1
      
      # Request message for ManualTriggerService.ActivateManualTrigger.
      class ActivateManualTriggerRequest
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Configuration for custom Active View video viewability metrics.
      class ActiveViewVideoViewabilityMetricConfig
        include Google::Apis::Core::Hashable
      
        # Required. The display name of the custom metric.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # The minimum visible video duration required (in seconds) in order for an
        # impression to be recorded. You must specify minimum_duration, minimum_quartile
        # or both. If both are specified, an impression meets the metric criteria if
        # either requirement is met (whichever happens first).
        # Corresponds to the JSON property `minimumDuration`
        # @return [String]
        attr_accessor :minimum_duration
      
        # The minimum visible video duration required, based on the video quartiles, in
        # order for an impression to be recorded. You must specify minimum_duration,
        # minimum_quartile or both. If both are specified, an impression meets the
        # metric criteria if either requirement is met (whichever happens first).
        # Corresponds to the JSON property `minimumQuartile`
        # @return [String]
        attr_accessor :minimum_quartile
      
        # Required. The minimum percentage of the video ad's pixels visible on the
        # screen in order for an impression to be recorded.
        # Corresponds to the JSON property `minimumViewability`
        # @return [String]
        attr_accessor :minimum_viewability
      
        # Required. The minimum percentage of the video ad's volume required in order
        # for an impression to be recorded.
        # Corresponds to the JSON property `minimumVolume`
        # @return [String]
        attr_accessor :minimum_volume
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @minimum_duration = args[:minimum_duration] if args.key?(:minimum_duration)
          @minimum_quartile = args[:minimum_quartile] if args.key?(:minimum_quartile)
          @minimum_viewability = args[:minimum_viewability] if args.key?(:minimum_viewability)
          @minimum_volume = args[:minimum_volume] if args.key?(:minimum_volume)
        end
      end
      
      # Details of Adloox settings.
      class Adloox
        include Google::Apis::Core::Hashable
      
        # Adloox's brand safety settings.
        # Corresponds to the JSON property `excludedAdlooxCategories`
        # @return [Array<String>]
        attr_accessor :excluded_adloox_categories
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @excluded_adloox_categories = args[:excluded_adloox_categories] if args.key?(:excluded_adloox_categories)
        end
      end
      
      # A single advertiser in Display & Video 360 (DV360).
      class Advertiser
        include Google::Apis::Core::Hashable
      
        # Ad server related settings of an advertiser.
        # Corresponds to the JSON property `adServerConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserAdServerConfig]
        attr_accessor :ad_server_config
      
        # Output only. The unique ID of the advertiser. Assigned by the system.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Creatives related settings of an advertiser.
        # Corresponds to the JSON property `creativeConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserCreativeConfig]
        attr_accessor :creative_config
      
        # Settings that control how advertiser related data may be accessed.
        # Corresponds to the JSON property `dataAccessConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserDataAccessConfig]
        attr_accessor :data_access_config
      
        # Required. The display name of the advertiser. Must be UTF-8 encoded with a
        # maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not insertion orders and line items of the
        # advertiser can spend their budgets and bid on inventory. * Accepted values are
        # `ENTITY_STATUS_ACTIVE` and `ENTITY_STATUS_SCHEDULED_FOR_DELETION`. * If set to
        # `ENTITY_STATUS_SCHEDULED_FOR_DELETION`, the advertiser will be deleted 30 days
        # from when it was first scheduled for deletion.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # General settings of an advertiser.
        # Corresponds to the JSON property `generalConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserGeneralConfig]
        attr_accessor :general_config
      
        # Integration details of an entry.
        # Corresponds to the JSON property `integrationDetails`
        # @return [Google::Apis::DisplayvideoV1::IntegrationDetails]
        attr_accessor :integration_details
      
        # Output only. The resource name of the advertiser.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. Immutable. The unique ID of the partner that the advertiser belongs
        # to.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        # Targeting settings related to ad serving of an advertiser.
        # Corresponds to the JSON property `servingConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserTargetingConfig]
        attr_accessor :serving_config
      
        # Output only. The timestamp when the advertiser was last updated. Assigned by
        # the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ad_server_config = args[:ad_server_config] if args.key?(:ad_server_config)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @creative_config = args[:creative_config] if args.key?(:creative_config)
          @data_access_config = args[:data_access_config] if args.key?(:data_access_config)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @general_config = args[:general_config] if args.key?(:general_config)
          @integration_details = args[:integration_details] if args.key?(:integration_details)
          @name = args[:name] if args.key?(:name)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
          @serving_config = args[:serving_config] if args.key?(:serving_config)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Ad server related settings of an advertiser.
      class AdvertiserAdServerConfig
        include Google::Apis::Core::Hashable
      
        # Settings for advertisers that use both Campaign Manager 360 (CM360) and third-
        # party ad servers.
        # Corresponds to the JSON property `cmHybridConfig`
        # @return [Google::Apis::DisplayvideoV1::CmHybridConfig]
        attr_accessor :cm_hybrid_config
      
        # Settings for advertisers that use third-party ad servers only.
        # Corresponds to the JSON property `thirdPartyOnlyConfig`
        # @return [Google::Apis::DisplayvideoV1::ThirdPartyOnlyConfig]
        attr_accessor :third_party_only_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cm_hybrid_config = args[:cm_hybrid_config] if args.key?(:cm_hybrid_config)
          @third_party_only_config = args[:third_party_only_config] if args.key?(:third_party_only_config)
        end
      end
      
      # Creatives related settings of an advertiser.
      class AdvertiserCreativeConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not the advertiser is enabled for dynamic creatives.
        # Corresponds to the JSON property `dynamicCreativeEnabled`
        # @return [Boolean]
        attr_accessor :dynamic_creative_enabled
        alias_method :dynamic_creative_enabled?, :dynamic_creative_enabled
      
        # An ID for configuring campaign monitoring provided by Integral Ad Service (IAS)
        # . The DV360 system will append an IAS "Campaign Monitor" tag containing this
        # ID to the creative tag.
        # Corresponds to the JSON property `iasClientId`
        # @return [Fixnum]
        attr_accessor :ias_client_id
      
        # Whether or not to use DV360's Online Behavioral Advertising (OBA) compliance.
        # Warning: Changing OBA settings may cause the audit status of your creatives to
        # be reset by some ad exchanges, making them ineligible to serve until they are
        # re-approved.
        # Corresponds to the JSON property `obaComplianceDisabled`
        # @return [Boolean]
        attr_accessor :oba_compliance_disabled
        alias_method :oba_compliance_disabled?, :oba_compliance_disabled
      
        # By setting this field to `true`, you, on behalf of your company, authorize
        # Google to use video creatives associated with this Display & Video 360
        # advertiser to provide reporting and features related to the advertiser's
        # television campaigns. Applicable only when the advertiser has a CM360 hybrid
        # ad server configuration.
        # Corresponds to the JSON property `videoCreativeDataSharingAuthorized`
        # @return [Boolean]
        attr_accessor :video_creative_data_sharing_authorized
        alias_method :video_creative_data_sharing_authorized?, :video_creative_data_sharing_authorized
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dynamic_creative_enabled = args[:dynamic_creative_enabled] if args.key?(:dynamic_creative_enabled)
          @ias_client_id = args[:ias_client_id] if args.key?(:ias_client_id)
          @oba_compliance_disabled = args[:oba_compliance_disabled] if args.key?(:oba_compliance_disabled)
          @video_creative_data_sharing_authorized = args[:video_creative_data_sharing_authorized] if args.key?(:video_creative_data_sharing_authorized)
        end
      end
      
      # Settings that control how advertiser related data may be accessed.
      class AdvertiserDataAccessConfig
        include Google::Apis::Core::Hashable
      
        # Structured Data Files (SDF) settings of an advertiser.
        # Corresponds to the JSON property `sdfConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserSdfConfig]
        attr_accessor :sdf_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @sdf_config = args[:sdf_config] if args.key?(:sdf_config)
        end
      end
      
      # General settings of an advertiser.
      class AdvertiserGeneralConfig
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. Advertiser's currency in ISO 4217 format. Accepted codes
        # and the currencies they represent are: Currency Code : Currency Name * `ARS` :
        # Argentine Peso * `AUD` : Australian Dollar * `BRL` : Brazilian Real * `CAD` :
        # Canadian Dollar * `CHF` : Swiss Franc * `CLP` : Chilean Peso * `CNY` : Chinese
        # Yuan * `COP` : Colombian Peso * `CZK` : Czech Koruna * `DKK` : Danish Krone * `
        # EGP` : Egyption Pound * `EUR` : Euro * `GBP` : British Pound * `HKD` : Hong
        # Kong Dollar * `HUF` : Hungarian Forint * `IDR` : Indonesian Rupiah * `ILS` :
        # Israeli Shekel * `INR` : Indian Rupee * `JPY` : Japanese Yen * `KRW` : South
        # Korean Won * `MXN` : Mexican Pesos * `MYR` : Malaysian Ringgit * `NGN` :
        # Nigerian Naira * `NOK` : Norwegian Krone * `NZD` : New Zealand Dollar * `PEN` :
        # Peruvian Nuevo Sol * `PLN` : Polish Zloty * `RON` : New Romanian Leu * `RUB` :
        # Russian Ruble * `SEK` : Swedish Krona * `TRY` : Turkish Lira * `TWD` : New
        # Taiwan Dollar * `USD` : US Dollar * `ZAR` : South African Rand
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # Required. The domain URL of the advertiser's primary website. The system will
        # send this information to publishers that require website URL to associate a
        # campaign with an advertiser. Provide a URL with no path or query string,
        # beginning with `http:` or `https:`. For example, http://www.example.com
        # Corresponds to the JSON property `domainUrl`
        # @return [String]
        attr_accessor :domain_url
      
        # Output only. The standard TZ database name of the advertiser's time zone. For
        # example, `America/New_York`. See more at: https://en.wikipedia.org/wiki/
        # List_of_tz_database_time_zones For CM360 hybrid advertisers, the time zone is
        # the same as that of the associated CM360 account; for third-party only
        # advertisers, the time zone is the same as that of the parent partner.
        # Corresponds to the JSON property `timeZone`
        # @return [String]
        attr_accessor :time_zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @domain_url = args[:domain_url] if args.key?(:domain_url)
          @time_zone = args[:time_zone] if args.key?(:time_zone)
        end
      end
      
      # Structured Data Files (SDF) settings of an advertiser.
      class AdvertiserSdfConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not this advertiser overrides the SDF configuration of its parent
        # partner. By default, an advertiser inherits the SDF configuration from the
        # parent partner. To override the partner configuration, set this field to `true`
        # and provide the new configuration in sdfConfig.
        # Corresponds to the JSON property `overridePartnerSdfConfig`
        # @return [Boolean]
        attr_accessor :override_partner_sdf_config
        alias_method :override_partner_sdf_config?, :override_partner_sdf_config
      
        # Structured Data File (SDF) related settings.
        # Corresponds to the JSON property `sdfConfig`
        # @return [Google::Apis::DisplayvideoV1::SdfConfig]
        attr_accessor :sdf_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @override_partner_sdf_config = args[:override_partner_sdf_config] if args.key?(:override_partner_sdf_config)
          @sdf_config = args[:sdf_config] if args.key?(:sdf_config)
        end
      end
      
      # Targeting settings related to ad serving of an advertiser.
      class AdvertiserTargetingConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not connected TV devices are exempt from viewability targeting for
        # all video line items under the advertiser.
        # Corresponds to the JSON property `exemptTvFromViewabilityTargeting`
        # @return [Boolean]
        attr_accessor :exempt_tv_from_viewability_targeting
        alias_method :exempt_tv_from_viewability_targeting?, :exempt_tv_from_viewability_targeting
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exempt_tv_from_viewability_targeting = args[:exempt_tv_from_viewability_targeting] if args.key?(:exempt_tv_from_viewability_targeting)
        end
      end
      
      # Represents a targetable age range. This will be populated in the details field
      # of an AssignedTargetingOption when targeting_type is `TARGETING_TYPE_AGE_RANGE`
      # .
      class AgeRangeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The age range of an audience. We only support targeting a
        # continuous age range of an audience. Thus, the age range represented in this
        # field can be 1) targeted solely, or, 2) part of a larger continuous age range.
        # The reach of a continuous age range targeting can be expanded by also
        # targeting an audience of an unknown age.
        # Corresponds to the JSON property `ageRange`
        # @return [String]
        attr_accessor :age_range
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_AGE_RANGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range = args[:age_range] if args.key?(:age_range)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable age range. This will be populated in the
      # age_range_details field when targeting_type is `TARGETING_TYPE_AGE_RANGE`.
      class AgeRangeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The age range of an audience.
        # Corresponds to the JSON property `ageRange`
        # @return [String]
        attr_accessor :age_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range = args[:age_range] if args.key?(:age_range)
        end
      end
      
      # Details for assigned app targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_APP`.
      class AppAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The ID of the app. Android's Play store app uses bundle ID, for
        # example `com.google.android.gm`. Apple's App store app ID uses 9 digit string,
        # for example `422689480`.
        # Corresponds to the JSON property `appId`
        # @return [String]
        attr_accessor :app_id
      
        # Output only. The display name of the app.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_id = args[:app_id] if args.key?(:app_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
        end
      end
      
      # Details for assigned app category targeting option. This will be populated in
      # the app_category_details field of an AssignedTargetingOption when
      # targeting_type is `TARGETING_TYPE_APP_CATEGORY`.
      class AppCategoryAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the app category.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_APP_CATEGORY`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable collection of apps. A collection lets you target
      # dynamic groups of related apps that are maintained by the platform, for
      # example `All Apps/Google Play/Games`. This will be populated in the
      # app_category_details field when targeting_type is `TARGETING_TYPE_APP_CATEGORY`
      # .
      class AppCategoryTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The name of the app collection.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # A single asset.
      class Asset
        include Google::Apis::Core::Hashable
      
        # The asset content. For uploaded assets, the content is the serving path.
        # Corresponds to the JSON property `content`
        # @return [String]
        attr_accessor :content
      
        # Media ID of the uploaded asset. This is a unique identifier for the asset.
        # This ID can be passed to other API calls, e.g. CreateCreative to associate the
        # asset with a creative.
        # Corresponds to the JSON property `mediaId`
        # @return [Fixnum]
        attr_accessor :media_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content = args[:content] if args.key?(:content)
          @media_id = args[:media_id] if args.key?(:media_id)
        end
      end
      
      # Asset association for the creative.
      class AssetAssociation
        include Google::Apis::Core::Hashable
      
        # A single asset.
        # Corresponds to the JSON property `asset`
        # @return [Google::Apis::DisplayvideoV1::Asset]
        attr_accessor :asset
      
        # The role of this asset for the creative.
        # Corresponds to the JSON property `role`
        # @return [String]
        attr_accessor :role
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @asset = args[:asset] if args.key?(:asset)
          @role = args[:role] if args.key?(:role)
        end
      end
      
      # An assignment between a targetable inventory source and an inventory source
      # group.
      class AssignedInventorySource
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the assigned inventory source. The ID is only
        # unique within a given inventory source group. It may be reused in other
        # contexts.
        # Corresponds to the JSON property `assignedInventorySourceId`
        # @return [Fixnum]
        attr_accessor :assigned_inventory_source_id
      
        # Required. The ID of the inventory source entity being targeted.
        # Corresponds to the JSON property `inventorySourceId`
        # @return [String]
        attr_accessor :inventory_source_id
      
        # Output only. The resource name of the assigned inventory source.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_inventory_source_id = args[:assigned_inventory_source_id] if args.key?(:assigned_inventory_source_id)
          @inventory_source_id = args[:inventory_source_id] if args.key?(:inventory_source_id)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # An assignment between a location list and a relevant targeting option.
      # Currently, geo region targeting options are the only supported option for
      # assignment.
      class AssignedLocation
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the assigned location. The ID is only unique
        # within a location list. It may be reused in other contexts.
        # Corresponds to the JSON property `assignedLocationId`
        # @return [Fixnum]
        attr_accessor :assigned_location_id
      
        # Output only. The resource name of the assigned location.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The ID of the targeting option assigned to the location list. Must
        # be of type TARGETING_TYPE_GEO_REGION.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_location_id = args[:assigned_location_id] if args.key?(:assigned_location_id)
          @name = args[:name] if args.key?(:name)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # A single assigned targeting option, which defines the state of a targeting
      # option for an entity with targeting settings.
      class AssignedTargetingOption
        include Google::Apis::Core::Hashable
      
        # Represents a targetable age range. This will be populated in the details field
        # of an AssignedTargetingOption when targeting_type is `TARGETING_TYPE_AGE_RANGE`
        # .
        # Corresponds to the JSON property `ageRangeDetails`
        # @return [Google::Apis::DisplayvideoV1::AgeRangeAssignedTargetingOptionDetails]
        attr_accessor :age_range_details
      
        # Details for assigned app category targeting option. This will be populated in
        # the app_category_details field of an AssignedTargetingOption when
        # targeting_type is `TARGETING_TYPE_APP_CATEGORY`.
        # Corresponds to the JSON property `appCategoryDetails`
        # @return [Google::Apis::DisplayvideoV1::AppCategoryAssignedTargetingOptionDetails]
        attr_accessor :app_category_details
      
        # Details for assigned app targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_APP`.
        # Corresponds to the JSON property `appDetails`
        # @return [Google::Apis::DisplayvideoV1::AppAssignedTargetingOptionDetails]
        attr_accessor :app_details
      
        # Output only. The unique ID of the assigned targeting option. The ID is only
        # unique within a given line item and targeting type. It may be reused in other
        # contexts.
        # Corresponds to the JSON property `assignedTargetingOptionId`
        # @return [String]
        attr_accessor :assigned_targeting_option_id
      
        # Assigned audience group targeting option details. This will be populated in
        # the details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_AUDIENCE_GROUP`. The relation between each group is UNION,
        # except for excluded_first_and_third_party_audience_group and
        # excluded_google_audience_group, of which COMPLEMENT is UNION'ed with other
        # groups.
        # Corresponds to the JSON property `audienceGroupDetails`
        # @return [Google::Apis::DisplayvideoV1::AudienceGroupAssignedTargetingOptionDetails]
        attr_accessor :audience_group_details
      
        # Represents an assigned authorized seller status. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
        # Corresponds to the JSON property `authorizedSellerStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::AuthorizedSellerStatusAssignedTargetingOptionDetails]
        attr_accessor :authorized_seller_status_details
      
        # Details for assigned browser targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_BROWSER`.
        # Corresponds to the JSON property `browserDetails`
        # @return [Google::Apis::DisplayvideoV1::BrowserAssignedTargetingOptionDetails]
        attr_accessor :browser_details
      
        # Details for assigned carrier and ISP targeting option. This will be populated
        # in the details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_CARRIER_AND_ISP`.
        # Corresponds to the JSON property `carrierAndIspDetails`
        # @return [Google::Apis::DisplayvideoV1::CarrierAndIspAssignedTargetingOptionDetails]
        attr_accessor :carrier_and_isp_details
      
        # Assigned category targeting option details. This will be populated in the
        # category_details field when targeting_type is `TARGETING_TYPE_CATEGORY`.
        # Corresponds to the JSON property `categoryDetails`
        # @return [Google::Apis::DisplayvideoV1::CategoryAssignedTargetingOptionDetails]
        attr_accessor :category_details
      
        # Details for assigned channel targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_CHANNEL`.
        # Corresponds to the JSON property `channelDetails`
        # @return [Google::Apis::DisplayvideoV1::ChannelAssignedTargetingOptionDetails]
        attr_accessor :channel_details
      
        # Assigned content instream position targeting option details. This will be
        # populated in the content_instream_position_details field when targeting_type
        # is `TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
        # Corresponds to the JSON property `contentInstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentInstreamPositionAssignedTargetingOptionDetails]
        attr_accessor :content_instream_position_details
      
        # Assigned content outstream position targeting option details. This will be
        # populated in the content_outstream_position_details field when targeting_type
        # is `TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
        # Corresponds to the JSON property `contentOutstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentOutstreamPositionAssignedTargetingOptionDetails]
        attr_accessor :content_outstream_position_details
      
        # Representation of a segment of time defined on a specific day of the week and
        # with a start and end time. The time represented by `start_hour` must be before
        # the time represented by `end_hour`.
        # Corresponds to the JSON property `dayAndTimeDetails`
        # @return [Google::Apis::DisplayvideoV1::DayAndTimeAssignedTargetingOptionDetails]
        attr_accessor :day_and_time_details
      
        # Assigned device make and model targeting option details. This will be
        # populated in the device_make_model_details field when targeting_type is `
        # TARGETING_TYPE_DEVICE_MAKE_MODEL`.
        # Corresponds to the JSON property `deviceMakeModelDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceMakeModelAssignedTargetingOptionDetails]
        attr_accessor :device_make_model_details
      
        # Targeting details for device type. This will be populated in the details field
        # of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_DEVICE_TYPE`.
        # Corresponds to the JSON property `deviceTypeDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceTypeAssignedTargetingOptionDetails]
        attr_accessor :device_type_details
      
        # Targeting details for digital content label. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
        # Corresponds to the JSON property `digitalContentLabelExclusionDetails`
        # @return [Google::Apis::DisplayvideoV1::DigitalContentLabelAssignedTargetingOptionDetails]
        attr_accessor :digital_content_label_exclusion_details
      
        # Assigned environment targeting option details. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_ENVIRONMENT`.
        # Corresponds to the JSON property `environmentDetails`
        # @return [Google::Apis::DisplayvideoV1::EnvironmentAssignedTargetingOptionDetails]
        attr_accessor :environment_details
      
        # Details for assigned exchange targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_EXCHANGE`.
        # Corresponds to the JSON property `exchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::ExchangeAssignedTargetingOptionDetails]
        attr_accessor :exchange_details
      
        # Details for assigned gender targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARTGETING_TYPE_GENDER`.
        # Corresponds to the JSON property `genderDetails`
        # @return [Google::Apis::DisplayvideoV1::GenderAssignedTargetingOptionDetails]
        attr_accessor :gender_details
      
        # Details for assigned geographic region targeting option. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is `TARGETING_TYPE_GEO_REGION`.
        # Corresponds to the JSON property `geoRegionDetails`
        # @return [Google::Apis::DisplayvideoV1::GeoRegionAssignedTargetingOptionDetails]
        attr_accessor :geo_region_details
      
        # Details for assigned household income targeting option. This will be populated
        # in the details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_HOUSEHOLD_INCOME`.
        # Corresponds to the JSON property `householdIncomeDetails`
        # @return [Google::Apis::DisplayvideoV1::HouseholdIncomeAssignedTargetingOptionDetails]
        attr_accessor :household_income_details
      
        # Output only. The inheritance status of the assigned targeting option.
        # Corresponds to the JSON property `inheritance`
        # @return [String]
        attr_accessor :inheritance
      
        # Targeting details for inventory source. This will be populated in the details
        # field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_INVENTORY_SOURCE`.
        # Corresponds to the JSON property `inventorySourceDetails`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceAssignedTargetingOptionDetails]
        attr_accessor :inventory_source_details
      
        # Targeting details for inventory source group. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_INVENTORY_SOURCE_GROUP`.
        # Corresponds to the JSON property `inventorySourceGroupDetails`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceGroupAssignedTargetingOptionDetails]
        attr_accessor :inventory_source_group_details
      
        # Details for assigned keyword targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_KEYWORD`.
        # Corresponds to the JSON property `keywordDetails`
        # @return [Google::Apis::DisplayvideoV1::KeywordAssignedTargetingOptionDetails]
        attr_accessor :keyword_details
      
        # Details for assigned language targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_LANGUAGE`.
        # Corresponds to the JSON property `languageDetails`
        # @return [Google::Apis::DisplayvideoV1::LanguageAssignedTargetingOptionDetails]
        attr_accessor :language_details
      
        # Output only. The resource name for this assigned targeting option.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Targeting details for negative keyword list. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_NEGATIVE_KEYWORD_LIST`.
        # Corresponds to the JSON property `negativeKeywordListDetails`
        # @return [Google::Apis::DisplayvideoV1::NegativeKeywordListAssignedTargetingOptionDetails]
        attr_accessor :negative_keyword_list_details
      
        # On screen position targeting option details. This will be populated in the
        # on_screen_position_details field when targeting_type is `
        # TARGETING_TYPE_ON_SCREEN_POSITION`.
        # Corresponds to the JSON property `onScreenPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::OnScreenPositionAssignedTargetingOptionDetails]
        attr_accessor :on_screen_position_details
      
        # Assigned operating system targeting option details. This will be populated in
        # the operating_system_details field when targeting_type is `
        # TARGETING_TYPE_OPERATING_SYSTEM`.
        # Corresponds to the JSON property `operatingSystemDetails`
        # @return [Google::Apis::DisplayvideoV1::OperatingSystemAssignedTargetingOptionDetails]
        attr_accessor :operating_system_details
      
        # Details for assigned parental status targeting option. This will be populated
        # in the details field of an AssignedTargetingOption when targeting_type is `
        # TARTGETING_TYPE_PARENTAL_STATUS`.
        # Corresponds to the JSON property `parentalStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::ParentalStatusAssignedTargetingOptionDetails]
        attr_accessor :parental_status_details
      
        # Targeting details for proximity location list. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_PROXIMITY_LOCATION_LIST`.
        # Corresponds to the JSON property `proximityLocationListDetails`
        # @return [Google::Apis::DisplayvideoV1::ProximityLocationListAssignedTargetingOptionDetails]
        attr_accessor :proximity_location_list_details
      
        # Targeting details for regional location list. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_REGIONAL_LOCATION_LIST`.
        # Corresponds to the JSON property `regionalLocationListDetails`
        # @return [Google::Apis::DisplayvideoV1::RegionalLocationListAssignedTargetingOptionDetails]
        attr_accessor :regional_location_list_details
      
        # Targeting details for sensitive category. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
        # Corresponds to the JSON property `sensitiveCategoryExclusionDetails`
        # @return [Google::Apis::DisplayvideoV1::SensitiveCategoryAssignedTargetingOptionDetails]
        attr_accessor :sensitive_category_exclusion_details
      
        # Details for assigned sub-exchange targeting option. This will be populated in
        # the details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_SUB_EXCHANGE`.
        # Corresponds to the JSON property `subExchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::SubExchangeAssignedTargetingOptionDetails]
        attr_accessor :sub_exchange_details
      
        # Output only. Identifies the type of this assigned targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        # Assigned third party verifier targeting option details. This will be populated
        # in the details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_THIRD_PARTY_VERIFIER`.
        # Corresponds to the JSON property `thirdPartyVerifierDetails`
        # @return [Google::Apis::DisplayvideoV1::ThirdPartyVerifierAssignedTargetingOptionDetails]
        attr_accessor :third_party_verifier_details
      
        # Details for assigned URL targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when targeting_type is `
        # TARGETING_TYPE_URL`.
        # Corresponds to the JSON property `urlDetails`
        # @return [Google::Apis::DisplayvideoV1::UrlAssignedTargetingOptionDetails]
        attr_accessor :url_details
      
        # User rewarded content targeting option details. This will be populated in the
        # user_rewarded_content_details field when targeting_type is `
        # TARGETING_TYPE_USER_REWARDED_CONTENT`.
        # Corresponds to the JSON property `userRewardedContentDetails`
        # @return [Google::Apis::DisplayvideoV1::UserRewardedContentAssignedTargetingOptionDetails]
        attr_accessor :user_rewarded_content_details
      
        # Video player size targeting option details. This will be populated in the
        # video_player_size_details field when targeting_type is `
        # TARGETING_TYPE_VIDEO_PLAYER_SIZE`. Explicitly targeting all options is not
        # supported. Remove all video player size targeting options to achieve this
        # effect.
        # Corresponds to the JSON property `videoPlayerSizeDetails`
        # @return [Google::Apis::DisplayvideoV1::VideoPlayerSizeAssignedTargetingOptionDetails]
        attr_accessor :video_player_size_details
      
        # Assigned viewability targeting option details. This will be populated in the
        # viewability_details field of an AssignedTargetingOption when targeting_type is
        # `TARGETING_TYPE_VIEWABILITY`.
        # Corresponds to the JSON property `viewabilityDetails`
        # @return [Google::Apis::DisplayvideoV1::ViewabilityAssignedTargetingOptionDetails]
        attr_accessor :viewability_details
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range_details = args[:age_range_details] if args.key?(:age_range_details)
          @app_category_details = args[:app_category_details] if args.key?(:app_category_details)
          @app_details = args[:app_details] if args.key?(:app_details)
          @assigned_targeting_option_id = args[:assigned_targeting_option_id] if args.key?(:assigned_targeting_option_id)
          @audience_group_details = args[:audience_group_details] if args.key?(:audience_group_details)
          @authorized_seller_status_details = args[:authorized_seller_status_details] if args.key?(:authorized_seller_status_details)
          @browser_details = args[:browser_details] if args.key?(:browser_details)
          @carrier_and_isp_details = args[:carrier_and_isp_details] if args.key?(:carrier_and_isp_details)
          @category_details = args[:category_details] if args.key?(:category_details)
          @channel_details = args[:channel_details] if args.key?(:channel_details)
          @content_instream_position_details = args[:content_instream_position_details] if args.key?(:content_instream_position_details)
          @content_outstream_position_details = args[:content_outstream_position_details] if args.key?(:content_outstream_position_details)
          @day_and_time_details = args[:day_and_time_details] if args.key?(:day_and_time_details)
          @device_make_model_details = args[:device_make_model_details] if args.key?(:device_make_model_details)
          @device_type_details = args[:device_type_details] if args.key?(:device_type_details)
          @digital_content_label_exclusion_details = args[:digital_content_label_exclusion_details] if args.key?(:digital_content_label_exclusion_details)
          @environment_details = args[:environment_details] if args.key?(:environment_details)
          @exchange_details = args[:exchange_details] if args.key?(:exchange_details)
          @gender_details = args[:gender_details] if args.key?(:gender_details)
          @geo_region_details = args[:geo_region_details] if args.key?(:geo_region_details)
          @household_income_details = args[:household_income_details] if args.key?(:household_income_details)
          @inheritance = args[:inheritance] if args.key?(:inheritance)
          @inventory_source_details = args[:inventory_source_details] if args.key?(:inventory_source_details)
          @inventory_source_group_details = args[:inventory_source_group_details] if args.key?(:inventory_source_group_details)
          @keyword_details = args[:keyword_details] if args.key?(:keyword_details)
          @language_details = args[:language_details] if args.key?(:language_details)
          @name = args[:name] if args.key?(:name)
          @negative_keyword_list_details = args[:negative_keyword_list_details] if args.key?(:negative_keyword_list_details)
          @on_screen_position_details = args[:on_screen_position_details] if args.key?(:on_screen_position_details)
          @operating_system_details = args[:operating_system_details] if args.key?(:operating_system_details)
          @parental_status_details = args[:parental_status_details] if args.key?(:parental_status_details)
          @proximity_location_list_details = args[:proximity_location_list_details] if args.key?(:proximity_location_list_details)
          @regional_location_list_details = args[:regional_location_list_details] if args.key?(:regional_location_list_details)
          @sensitive_category_exclusion_details = args[:sensitive_category_exclusion_details] if args.key?(:sensitive_category_exclusion_details)
          @sub_exchange_details = args[:sub_exchange_details] if args.key?(:sub_exchange_details)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
          @third_party_verifier_details = args[:third_party_verifier_details] if args.key?(:third_party_verifier_details)
          @url_details = args[:url_details] if args.key?(:url_details)
          @user_rewarded_content_details = args[:user_rewarded_content_details] if args.key?(:user_rewarded_content_details)
          @video_player_size_details = args[:video_player_size_details] if args.key?(:video_player_size_details)
          @viewability_details = args[:viewability_details] if args.key?(:viewability_details)
        end
      end
      
      # A single assigned user role, which defines a user's authorized interaction
      # with a specified partner or advertiser.
      class AssignedUserRole
        include Google::Apis::Core::Hashable
      
        # The ID of the advertiser that the assigend user role applies to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Output only. The ID of the assigned user role.
        # Corresponds to the JSON property `assignedUserRoleId`
        # @return [String]
        attr_accessor :assigned_user_role_id
      
        # The ID of the partner that the assigned user role applies to.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        # Required. The user role to assign to a user for the entity.
        # Corresponds to the JSON property `userRole`
        # @return [String]
        attr_accessor :user_role
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @assigned_user_role_id = args[:assigned_user_role_id] if args.key?(:assigned_user_role_id)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
          @user_role = args[:user_role] if args.key?(:user_role)
        end
      end
      
      # Assigned audience group targeting option details. This will be populated in
      # the details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_AUDIENCE_GROUP`. The relation between each group is UNION,
      # except for excluded_first_and_third_party_audience_group and
      # excluded_google_audience_group, of which COMPLEMENT is UNION'ed with other
      # groups.
      class AudienceGroupAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Details of first and third party audience group. All first and third party
        # audience targeting settings are logically ‘OR’ of each other.
        # Corresponds to the JSON property `excludedFirstAndThirdPartyAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudienceGroup]
        attr_accessor :excluded_first_and_third_party_audience_group
      
        # Details of Google audience group. All Google audience targeting settings are
        # logically ‘OR’ of each other.
        # Corresponds to the JSON property `excludedGoogleAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::GoogleAudienceGroup]
        attr_accessor :excluded_google_audience_group
      
        # Details of combined audience group. All combined audience targeting settings
        # are logically ‘OR’ of each other.
        # Corresponds to the JSON property `includedCombinedAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::CombinedAudienceGroup]
        attr_accessor :included_combined_audience_group
      
        # Details of custom list group. All custom list targeting settings are logically
        # ‘OR’ of each other.
        # Corresponds to the JSON property `includedCustomListGroup`
        # @return [Google::Apis::DisplayvideoV1::CustomListGroup]
        attr_accessor :included_custom_list_group
      
        # The first and third party audience ids and recencies of included first and
        # third party audience groups. Each first and third party audience group
        # contains first and third party audience ids only. The relation between each
        # first and third party audience group is INTERSECTION, and the result is UNION'
        # ed with other audience groups. Repeated groups with same settings will be
        # ignored.
        # Corresponds to the JSON property `includedFirstAndThirdPartyAudienceGroups`
        # @return [Array<Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudienceGroup>]
        attr_accessor :included_first_and_third_party_audience_groups
      
        # Details of Google audience group. All Google audience targeting settings are
        # logically ‘OR’ of each other.
        # Corresponds to the JSON property `includedGoogleAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::GoogleAudienceGroup]
        attr_accessor :included_google_audience_group
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @excluded_first_and_third_party_audience_group = args[:excluded_first_and_third_party_audience_group] if args.key?(:excluded_first_and_third_party_audience_group)
          @excluded_google_audience_group = args[:excluded_google_audience_group] if args.key?(:excluded_google_audience_group)
          @included_combined_audience_group = args[:included_combined_audience_group] if args.key?(:included_combined_audience_group)
          @included_custom_list_group = args[:included_custom_list_group] if args.key?(:included_custom_list_group)
          @included_first_and_third_party_audience_groups = args[:included_first_and_third_party_audience_groups] if args.key?(:included_first_and_third_party_audience_groups)
          @included_google_audience_group = args[:included_google_audience_group] if args.key?(:included_google_audience_group)
        end
      end
      
      # The length an audio or a video has been played.
      class AudioVideoOffset
        include Google::Apis::Core::Hashable
      
        # The offset in percentage of the audio or video duration.
        # Corresponds to the JSON property `percentage`
        # @return [Fixnum]
        attr_accessor :percentage
      
        # The offset in seconds from the start of the audio or video.
        # Corresponds to the JSON property `seconds`
        # @return [Fixnum]
        attr_accessor :seconds
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @percentage = args[:percentage] if args.key?(:percentage)
          @seconds = args[:seconds] if args.key?(:seconds)
        end
      end
      
      # Response message for AdvertiserService.AuditAdvertiser.
      class AuditAdvertiserResponse
        include Google::Apis::Core::Hashable
      
        # The number of individual targeting options from the following targeting types
        # that are assigned to a line item under this advertiser. These individual
        # targeting options count towards the limit of 4500000 ad group targeting
        # options per advertiser. Qualifying Targeting types: * Channels, URLs, apps,
        # and collections * Demographic * Google Audiences, including Affinity, Custom
        # Affinity, and In-market audiences * Inventory source * Keyword * Mobile app
        # category * User lists * Video targeting * Viewability
        # Corresponds to the JSON property `adGroupCriteriaCount`
        # @return [Fixnum]
        attr_accessor :ad_group_criteria_count
      
        # The number of individual targeting options from the following targeting types
        # that are assigned to a line item under this advertiser. These individual
        # targeting options count towards the limit of 900000 campaign targeting options
        # per advertiser. Qualifying Targeting types: * Position * Browser * Connection
        # speed * Day and time * Device and operating system * Digital content label *
        # Sensitive categories * Environment * Geography, including business chains and
        # proximity * ISP * Language * Third-party verification
        # Corresponds to the JSON property `campaignCriteriaCount`
        # @return [Fixnum]
        attr_accessor :campaign_criteria_count
      
        # The number of channels created under this advertiser. These channels count
        # towards the limit of 1000 channels per advertiser.
        # Corresponds to the JSON property `channelsCount`
        # @return [Fixnum]
        attr_accessor :channels_count
      
        # The number of negative keyword lists created under this advertiser. These
        # negative keyword lists count towards the limit of 20 negative keyword lists
        # per advertiser.
        # Corresponds to the JSON property `negativeKeywordListsCount`
        # @return [Fixnum]
        attr_accessor :negative_keyword_lists_count
      
        # The number of negatively targeted channels created under this advertiser.
        # These negatively targeted channels count towards the limit of 5 negatively
        # targeted channels per advertiser.
        # Corresponds to the JSON property `negativelyTargetedChannelsCount`
        # @return [Fixnum]
        attr_accessor :negatively_targeted_channels_count
      
        # The number of ACTIVE and PAUSED campaigns under this advertiser. These
        # campaigns count towards the limit of 9999 campaigns per advertiser.
        # Corresponds to the JSON property `usedCampaignsCount`
        # @return [Fixnum]
        attr_accessor :used_campaigns_count
      
        # The number of ACTIVE, PAUSED and DRAFT insertion orders under this advertiser.
        # These insertion orders count towards the limit of 9999 insertion orders per
        # advertiser.
        # Corresponds to the JSON property `usedInsertionOrdersCount`
        # @return [Fixnum]
        attr_accessor :used_insertion_orders_count
      
        # The number of ACTIVE, PAUSED, and DRAFT line items under this advertiser.
        # These line items count towards the limit of 9999 line items per advertiser.
        # Corresponds to the JSON property `usedLineItemsCount`
        # @return [Fixnum]
        attr_accessor :used_line_items_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ad_group_criteria_count = args[:ad_group_criteria_count] if args.key?(:ad_group_criteria_count)
          @campaign_criteria_count = args[:campaign_criteria_count] if args.key?(:campaign_criteria_count)
          @channels_count = args[:channels_count] if args.key?(:channels_count)
          @negative_keyword_lists_count = args[:negative_keyword_lists_count] if args.key?(:negative_keyword_lists_count)
          @negatively_targeted_channels_count = args[:negatively_targeted_channels_count] if args.key?(:negatively_targeted_channels_count)
          @used_campaigns_count = args[:used_campaigns_count] if args.key?(:used_campaigns_count)
          @used_insertion_orders_count = args[:used_insertion_orders_count] if args.key?(:used_insertion_orders_count)
          @used_line_items_count = args[:used_line_items_count] if args.key?(:used_line_items_count)
        end
      end
      
      # Represents an assigned authorized seller status. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
      class AuthorizedSellerStatusAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The authorized seller status to target.
        # Corresponds to the JSON property `authorizedSellerStatus`
        # @return [String]
        attr_accessor :authorized_seller_status
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authorized_seller_status = args[:authorized_seller_status] if args.key?(:authorized_seller_status)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable authorized seller status. This will be populated in
      # the authorized_seller_status_details field when targeting_type is `
      # TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
      class AuthorizedSellerStatusTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The authorized seller status.
        # Corresponds to the JSON property `authorizedSellerStatus`
        # @return [String]
        attr_accessor :authorized_seller_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authorized_seller_status = args[:authorized_seller_status] if args.key?(:authorized_seller_status)
        end
      end
      
      # Settings that control the bid strategy. Bid strategy determines the bid price.
      class BiddingStrategy
        include Google::Apis::Core::Hashable
      
        # A strategy that uses a fixed bidding price.
        # Corresponds to the JSON property `fixedBid`
        # @return [Google::Apis::DisplayvideoV1::FixedBidStrategy]
        attr_accessor :fixed_bid
      
        # A strategy that automatically adjusts the bid to optimize a specified
        # performance goal while spending the full budget.
        # Corresponds to the JSON property `maximizeSpendAutoBid`
        # @return [Google::Apis::DisplayvideoV1::MaximizeSpendBidStrategy]
        attr_accessor :maximize_spend_auto_bid
      
        # A strategy that automatically adjusts the bid to meet or beat a specified
        # performance goal.
        # Corresponds to the JSON property `performanceGoalAutoBid`
        # @return [Google::Apis::DisplayvideoV1::PerformanceGoalBidStrategy]
        attr_accessor :performance_goal_auto_bid
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fixed_bid = args[:fixed_bid] if args.key?(:fixed_bid)
          @maximize_spend_auto_bid = args[:maximize_spend_auto_bid] if args.key?(:maximize_spend_auto_bid)
          @performance_goal_auto_bid = args[:performance_goal_auto_bid] if args.key?(:performance_goal_auto_bid)
        end
      end
      
      # Details for assigned browser targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_BROWSER`.
      class BrowserAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the browser.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted. All assigned browser
        # targeting options on the same line item must have the same value for this
        # field.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_BROWSER`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable browser. This will be populated in the browser_details
      # field when targeting_type is `TARGETING_TYPE_BROWSER`.
      class BrowserTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the browser.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # Request message for BulkEditAdvertiserAssignedTargetingOptions.
      class BulkEditAdvertiserAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # The assigned targeting options to create in batch, specified as a list of `
        # CreateAssignedTargetingOptionsRequest`. Supported targeting types: * `
        # TARGETING_TYPE_CHANNEL` * `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION` * `
        # TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`
        # Corresponds to the JSON property `createRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::CreateAssignedTargetingOptionsRequest>]
        attr_accessor :create_requests
      
        # The assigned targeting options to delete in batch, specified as a list of `
        # DeleteAssignedTargetingOptionsRequest`. Supported targeting types: * `
        # TARGETING_TYPE_CHANNEL` * `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION` * `
        # TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`
        # Corresponds to the JSON property `deleteRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::DeleteAssignedTargetingOptionsRequest>]
        attr_accessor :delete_requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_requests = args[:create_requests] if args.key?(:create_requests)
          @delete_requests = args[:delete_requests] if args.key?(:delete_requests)
        end
      end
      
      # 
      class BulkEditAdvertiserAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options that have been successfully created.
        # This list will be absent if empty.
        # Corresponds to the JSON property `createdAssignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :created_assigned_targeting_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_assigned_targeting_options = args[:created_assigned_targeting_options] if args.key?(:created_assigned_targeting_options)
        end
      end
      
      # Request message for AssignedInventorySourceService.BulkEdit.
      class BulkEditAssignedInventorySourcesRequest
        include Google::Apis::Core::Hashable
      
        # The ID of the advertiser that owns the parent inventory source group. The
        # parent partner does not have access to these assigned inventory sources.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # The assigned inventory sources to create in bulk, specified as a list of
        # AssignedInventorySources.
        # Corresponds to the JSON property `createdAssignedInventorySources`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedInventorySource>]
        attr_accessor :created_assigned_inventory_sources
      
        # The IDs of the assigned inventory sources to delete in bulk, specified as a
        # list of assigned_inventory_source_ids.
        # Corresponds to the JSON property `deletedAssignedInventorySources`
        # @return [Array<Fixnum>]
        attr_accessor :deleted_assigned_inventory_sources
      
        # The ID of the partner that owns the inventory source group. Only this partner
        # has write access to these assigned inventory sources.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @created_assigned_inventory_sources = args[:created_assigned_inventory_sources] if args.key?(:created_assigned_inventory_sources)
          @deleted_assigned_inventory_sources = args[:deleted_assigned_inventory_sources] if args.key?(:deleted_assigned_inventory_sources)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
        end
      end
      
      # Response message for AssignedInventorySourceService.BulkEdit.
      class BulkEditAssignedInventorySourcesResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned inventory sources that have been successfully created.
        # This list will be absent if empty.
        # Corresponds to the JSON property `assignedInventorySources`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedInventorySource>]
        attr_accessor :assigned_inventory_sources
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_inventory_sources = args[:assigned_inventory_sources] if args.key?(:assigned_inventory_sources)
        end
      end
      
      # Request message for AssignedLocationService.BulkEditAssignedLocations.
      class BulkEditAssignedLocationsRequest
        include Google::Apis::Core::Hashable
      
        # The assigned locations to create in bulk, specified as a list of
        # AssignedLocations.
        # Corresponds to the JSON property `createdAssignedLocations`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedLocation>]
        attr_accessor :created_assigned_locations
      
        # The IDs of the assigned locations to delete in bulk, specified as a list of
        # assigned_location_ids.
        # Corresponds to the JSON property `deletedAssignedLocations`
        # @return [Array<Fixnum>]
        attr_accessor :deleted_assigned_locations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_assigned_locations = args[:created_assigned_locations] if args.key?(:created_assigned_locations)
          @deleted_assigned_locations = args[:deleted_assigned_locations] if args.key?(:deleted_assigned_locations)
        end
      end
      
      # Response message for AssignedLocationService.BulkEditAssignedLocations.
      class BulkEditAssignedLocationsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned locations that have been successfully created. This list
        # will be absent if empty.
        # Corresponds to the JSON property `assignedLocations`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedLocation>]
        attr_accessor :assigned_locations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_locations = args[:assigned_locations] if args.key?(:assigned_locations)
        end
      end
      
      # Request message for BulkEditAssignedUserRoles.
      class BulkEditAssignedUserRolesRequest
        include Google::Apis::Core::Hashable
      
        # The assigned user roles to create in batch, specified as a list of
        # AssignedUserRoles.
        # Corresponds to the JSON property `createdAssignedUserRoles`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedUserRole>]
        attr_accessor :created_assigned_user_roles
      
        # The assigned user roles to delete in batch, specified as a list of
        # assigned_user_role_ids. The format of assigned_user_role_id is `entityType-
        # entityid`, for example `partner-123`.
        # Corresponds to the JSON property `deletedAssignedUserRoles`
        # @return [Array<String>]
        attr_accessor :deleted_assigned_user_roles
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_assigned_user_roles = args[:created_assigned_user_roles] if args.key?(:created_assigned_user_roles)
          @deleted_assigned_user_roles = args[:deleted_assigned_user_roles] if args.key?(:deleted_assigned_user_roles)
        end
      end
      
      # 
      class BulkEditAssignedUserRolesResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned user roles that have been successfully created. This list
        # will be absent if empty.
        # Corresponds to the JSON property `createdAssignedUserRoles`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedUserRole>]
        attr_accessor :created_assigned_user_roles
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_assigned_user_roles = args[:created_assigned_user_roles] if args.key?(:created_assigned_user_roles)
        end
      end
      
      # Request message for BulkEditLineItemAssignedTargetingOptions.
      class BulkEditLineItemAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # The assigned targeting options to create in batch, specified as a list of `
        # CreateAssignedTargetingOptionsRequest`.
        # Corresponds to the JSON property `createRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::CreateAssignedTargetingOptionsRequest>]
        attr_accessor :create_requests
      
        # The assigned targeting options to delete in batch, specified as a list of `
        # DeleteAssignedTargetingOptionsRequest`.
        # Corresponds to the JSON property `deleteRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::DeleteAssignedTargetingOptionsRequest>]
        attr_accessor :delete_requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_requests = args[:create_requests] if args.key?(:create_requests)
          @delete_requests = args[:delete_requests] if args.key?(:delete_requests)
        end
      end
      
      # 
      class BulkEditLineItemAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options that have been successfully created.
        # This list will be absent if empty.
        # Corresponds to the JSON property `createdAssignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :created_assigned_targeting_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_assigned_targeting_options = args[:created_assigned_targeting_options] if args.key?(:created_assigned_targeting_options)
        end
      end
      
      # Request message for NegativeKeywordService.BulkEditNegativeKeywords.
      class BulkEditNegativeKeywordsRequest
        include Google::Apis::Core::Hashable
      
        # The negative keywords to create in batch, specified as a list of
        # NegativeKeywords.
        # Corresponds to the JSON property `createdNegativeKeywords`
        # @return [Array<Google::Apis::DisplayvideoV1::NegativeKeyword>]
        attr_accessor :created_negative_keywords
      
        # The negative keywords to delete in batch, specified as a list of
        # keyword_values.
        # Corresponds to the JSON property `deletedNegativeKeywords`
        # @return [Array<String>]
        attr_accessor :deleted_negative_keywords
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_negative_keywords = args[:created_negative_keywords] if args.key?(:created_negative_keywords)
          @deleted_negative_keywords = args[:deleted_negative_keywords] if args.key?(:deleted_negative_keywords)
        end
      end
      
      # Response message for NegativeKeywordService.BulkEditNegativeKeywords.
      class BulkEditNegativeKeywordsResponse
        include Google::Apis::Core::Hashable
      
        # The list of negative keywords that have been successfully created. This list
        # will be absent if empty.
        # Corresponds to the JSON property `negativeKeywords`
        # @return [Array<Google::Apis::DisplayvideoV1::NegativeKeyword>]
        attr_accessor :negative_keywords
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative_keywords = args[:negative_keywords] if args.key?(:negative_keywords)
        end
      end
      
      # Request message for BulkEditPartnerAssignedTargetingOptions.
      class BulkEditPartnerAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # The assigned targeting options to create in batch, specified as a list of `
        # CreateAssignedTargetingOptionsRequest`. Supported targeting types: * `
        # TARGETING_TYPE_CHANNEL`
        # Corresponds to the JSON property `createRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::CreateAssignedTargetingOptionsRequest>]
        attr_accessor :create_requests
      
        # The assigned targeting options to delete in batch, specified as a list of `
        # DeleteAssignedTargetingOptionsRequest`. Supported targeting types: * `
        # TARGETING_TYPE_CHANNEL`
        # Corresponds to the JSON property `deleteRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::DeleteAssignedTargetingOptionsRequest>]
        attr_accessor :delete_requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_requests = args[:create_requests] if args.key?(:create_requests)
          @delete_requests = args[:delete_requests] if args.key?(:delete_requests)
        end
      end
      
      # 
      class BulkEditPartnerAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options that have been successfully created.
        # This list will be absent if empty.
        # Corresponds to the JSON property `createdAssignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :created_assigned_targeting_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_assigned_targeting_options = args[:created_assigned_targeting_options] if args.key?(:created_assigned_targeting_options)
        end
      end
      
      # Request message for SiteService.BulkEditSites.
      class BulkEditSitesRequest
        include Google::Apis::Core::Hashable
      
        # The ID of the advertiser that owns the parent channel.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # The sites to create in batch, specified as a list of Sites.
        # Corresponds to the JSON property `createdSites`
        # @return [Array<Google::Apis::DisplayvideoV1::Site>]
        attr_accessor :created_sites
      
        # The sites to delete in batch, specified as a list of site url_or_app_ids.
        # Corresponds to the JSON property `deletedSites`
        # @return [Array<String>]
        attr_accessor :deleted_sites
      
        # The ID of the partner that owns the parent channel.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @created_sites = args[:created_sites] if args.key?(:created_sites)
          @deleted_sites = args[:deleted_sites] if args.key?(:deleted_sites)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
        end
      end
      
      # Response message for SiteService.BulkEditSites.
      class BulkEditSitesResponse
        include Google::Apis::Core::Hashable
      
        # The list of sites that have been successfully created. This list will be
        # absent if empty.
        # Corresponds to the JSON property `sites`
        # @return [Array<Google::Apis::DisplayvideoV1::Site>]
        attr_accessor :sites
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @sites = args[:sites] if args.key?(:sites)
        end
      end
      
      # 
      class BulkListAdvertiserAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options. This list will be absent if empty.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # A token identifying the next page of results. This value should be specified
        # as the pageToken in a subsequent
        # BulkListAdvertiserAssignedTargetingOptionsRequest to fetch the next page of
        # results. This token will be absent if there are no more
        # assigned_targeting_options to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class BulkListLineItemAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options. This list will be absent if empty.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # A token identifying the next page of results. This value should be specified
        # as the pageToken in a subsequent
        # BulkListLineItemAssignedTargetingOptionsRequest to fetch the next page of
        # results. This token will be absent if there are no more
        # assigned_targeting_options to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # A single campaign.
      class Campaign
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the campaign belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Settings that track the planned spend and duration of a campaign.
        # Corresponds to the JSON property `campaignFlight`
        # @return [Google::Apis::DisplayvideoV1::CampaignFlight]
        attr_accessor :campaign_flight
      
        # Settings that control the goal of a campaign.
        # Corresponds to the JSON property `campaignGoal`
        # @return [Google::Apis::DisplayvideoV1::CampaignGoal]
        attr_accessor :campaign_goal
      
        # Output only. The unique ID of the campaign. Assigned by the system.
        # Corresponds to the JSON property `campaignId`
        # @return [Fixnum]
        attr_accessor :campaign_id
      
        # Required. The display name of the campaign. Must be UTF-8 encoded with a
        # maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not the insertion orders under this campaign can
        # spend their budgets and bid on inventory. * Accepted values are `
        # ENTITY_STATUS_ACTIVE`, `ENTITY_STATUS_ARCHIVED`, and `ENTITY_STATUS_PAUSED`. *
        # For CreateCampaign method, `ENTITY_STATUS_ARCHIVED` is not allowed.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Settings that control the number of times a user may be shown with the same ad
        # during a given time period.
        # Corresponds to the JSON property `frequencyCap`
        # @return [Google::Apis::DisplayvideoV1::FrequencyCap]
        attr_accessor :frequency_cap
      
        # Output only. The resource name of the campaign.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The timestamp when the campaign was last updated. Assigned by the
        # system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @campaign_flight = args[:campaign_flight] if args.key?(:campaign_flight)
          @campaign_goal = args[:campaign_goal] if args.key?(:campaign_goal)
          @campaign_id = args[:campaign_id] if args.key?(:campaign_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @frequency_cap = args[:frequency_cap] if args.key?(:frequency_cap)
          @name = args[:name] if args.key?(:name)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Settings that track the planned spend and duration of a campaign.
      class CampaignFlight
        include Google::Apis::Core::Hashable
      
        # A date range.
        # Corresponds to the JSON property `plannedDates`
        # @return [Google::Apis::DisplayvideoV1::DateRange]
        attr_accessor :planned_dates
      
        # The amount the campaign is expected to spend for its given planned_dates. This
        # will not limit serving, but will be used for tracking spend in the DV360 UI.
        # The amount is in micros. Must be greater than or equal to 0. For example,
        # 500000000 represents 500 standard units of the currency.
        # Corresponds to the JSON property `plannedSpendAmountMicros`
        # @return [Fixnum]
        attr_accessor :planned_spend_amount_micros
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @planned_dates = args[:planned_dates] if args.key?(:planned_dates)
          @planned_spend_amount_micros = args[:planned_spend_amount_micros] if args.key?(:planned_spend_amount_micros)
        end
      end
      
      # Settings that control the goal of a campaign.
      class CampaignGoal
        include Google::Apis::Core::Hashable
      
        # Required. The type of the campaign goal.
        # Corresponds to the JSON property `campaignGoalType`
        # @return [String]
        attr_accessor :campaign_goal_type
      
        # Settings that control the performance goal of a campaign or insertion order.
        # Corresponds to the JSON property `performanceGoal`
        # @return [Google::Apis::DisplayvideoV1::PerformanceGoal]
        attr_accessor :performance_goal
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @campaign_goal_type = args[:campaign_goal_type] if args.key?(:campaign_goal_type)
          @performance_goal = args[:performance_goal] if args.key?(:performance_goal)
        end
      end
      
      # Details for assigned carrier and ISP targeting option. This will be populated
      # in the details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_CARRIER_AND_ISP`.
      class CarrierAndIspAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the carrier or ISP.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted. All assigned carrier
        # and ISP targeting options on the same line item must have the same value for
        # this field.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_CARRIER_AND_ISP`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable carrier or ISP. This will be populated in the
      # carrier_and_isp_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_CARRIER_AND_ISP`.
      class CarrierAndIspTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the carrier or ISP.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The type indicating if it's carrier or ISP.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Assigned category targeting option details. This will be populated in the
      # category_details field when targeting_type is `TARGETING_TYPE_CATEGORY`.
      class CategoryAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the category.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_CATEGORY`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable category. This will be populated in the
      # category_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_CATEGORY`.
      class CategoryTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the category.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # A single channel. Channels are custom groups of related websites and apps.
      class Channel
        include Google::Apis::Core::Hashable
      
        # The ID of the advertiser that owns the channel.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Output only. The unique ID of the channel. Assigned by the system.
        # Corresponds to the JSON property `channelId`
        # @return [Fixnum]
        attr_accessor :channel_id
      
        # Required. The display name of the channel. Must be UTF-8 encoded with a
        # maximum length of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the channel.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The ID of the partner that owns the channel.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @channel_id = args[:channel_id] if args.key?(:channel_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
        end
      end
      
      # Details for assigned channel targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_CHANNEL`.
      class ChannelAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the channel. Should refer to the channel ID field on a [
        # Partner-owned channel](partners.channels#Channel.FIELDS.channel_id) or [
        # advertiser-owned channel](advertisers.channels#Channel.FIELDS.channel_id)
        # resource.
        # Corresponds to the JSON property `channelId`
        # @return [Fixnum]
        attr_accessor :channel_id
      
        # Indicates if this option is being negatively targeted. For advertiser level
        # assigned targeting option, this field must be true.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @channel_id = args[:channel_id] if args.key?(:channel_id)
          @negative = args[:negative] if args.key?(:negative)
        end
      end
      
      # Settings for advertisers that use both Campaign Manager 360 (CM360) and third-
      # party ad servers.
      class CmHybridConfig
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. Account ID of the CM360 Floodlight configuration linked
        # with the DV360 advertiser.
        # Corresponds to the JSON property `cmAccountId`
        # @return [Fixnum]
        attr_accessor :cm_account_id
      
        # Required. Immutable. ID of the CM360 Floodlight configuration linked with the
        # DV360 advertiser.
        # Corresponds to the JSON property `cmFloodlightConfigId`
        # @return [Fixnum]
        attr_accessor :cm_floodlight_config_id
      
        # Required. Immutable. By setting this field to `true`, you, on behalf of your
        # company, authorize the sharing of information from the given Floodlight
        # configuration to this Display & Video 360 advertiser.
        # Corresponds to the JSON property `cmFloodlightLinkingAuthorized`
        # @return [Boolean]
        attr_accessor :cm_floodlight_linking_authorized
        alias_method :cm_floodlight_linking_authorized?, :cm_floodlight_linking_authorized
      
        # A list of CM360 sites whose placements will be synced to DV360 as creatives.
        # If absent or empty in CreateAdvertiser method, the system will automatically
        # create a CM360 site. Removing sites from this list may cause DV360 creatives
        # synced from CM360 to be deleted. At least one site must be specified.
        # Corresponds to the JSON property `cmSyncableSiteIds`
        # @return [Array<Fixnum>]
        attr_accessor :cm_syncable_site_ids
      
        # Whether or not to report DV360 cost to CM360.
        # Corresponds to the JSON property `dv360ToCmCostReportingEnabled`
        # @return [Boolean]
        attr_accessor :dv360_to_cm_cost_reporting_enabled
        alias_method :dv360_to_cm_cost_reporting_enabled?, :dv360_to_cm_cost_reporting_enabled
      
        # Whether or not to include DV360 data in CM360 data transfer reports.
        # Corresponds to the JSON property `dv360ToCmDataSharingEnabled`
        # @return [Boolean]
        attr_accessor :dv360_to_cm_data_sharing_enabled
        alias_method :dv360_to_cm_data_sharing_enabled?, :dv360_to_cm_data_sharing_enabled
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cm_account_id = args[:cm_account_id] if args.key?(:cm_account_id)
          @cm_floodlight_config_id = args[:cm_floodlight_config_id] if args.key?(:cm_floodlight_config_id)
          @cm_floodlight_linking_authorized = args[:cm_floodlight_linking_authorized] if args.key?(:cm_floodlight_linking_authorized)
          @cm_syncable_site_ids = args[:cm_syncable_site_ids] if args.key?(:cm_syncable_site_ids)
          @dv360_to_cm_cost_reporting_enabled = args[:dv360_to_cm_cost_reporting_enabled] if args.key?(:dv360_to_cm_cost_reporting_enabled)
          @dv360_to_cm_data_sharing_enabled = args[:dv360_to_cm_data_sharing_enabled] if args.key?(:dv360_to_cm_data_sharing_enabled)
        end
      end
      
      # A Campaign Manager 360 tracking ad.
      class CmTrackingAd
        include Google::Apis::Core::Hashable
      
        # The ad ID of the campaign manager 360 tracking Ad.
        # Corresponds to the JSON property `cmAdId`
        # @return [Fixnum]
        attr_accessor :cm_ad_id
      
        # The creative ID of the campaign manager 360 tracking Ad.
        # Corresponds to the JSON property `cmCreativeId`
        # @return [Fixnum]
        attr_accessor :cm_creative_id
      
        # The placement ID of the campaign manager 360 tracking Ad.
        # Corresponds to the JSON property `cmPlacementId`
        # @return [Fixnum]
        attr_accessor :cm_placement_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cm_ad_id = args[:cm_ad_id] if args.key?(:cm_ad_id)
          @cm_creative_id = args[:cm_creative_id] if args.key?(:cm_creative_id)
          @cm_placement_id = args[:cm_placement_id] if args.key?(:cm_placement_id)
        end
      end
      
      # Describes a combined audience resource.
      class CombinedAudience
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the combined audience. Assigned by the system.
        # Corresponds to the JSON property `combinedAudienceId`
        # @return [Fixnum]
        attr_accessor :combined_audience_id
      
        # Output only. The display name of the combined audience. .
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the combined audience.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @combined_audience_id = args[:combined_audience_id] if args.key?(:combined_audience_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Details of combined audience group. All combined audience targeting settings
      # are logically ‘OR’ of each other.
      class CombinedAudienceGroup
        include Google::Apis::Core::Hashable
      
        # Required. All combined audience targeting settings in combined audience group.
        # Repeated settings with same id will be ignored. The number of combined
        # audience settings should be no more than five, error will be thrown otherwise.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::CombinedAudienceTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of combined audience targeting setting.
      class CombinedAudienceTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. Combined audience id of combined audience targeting setting. This id
        # is combined_audience_id.
        # Corresponds to the JSON property `combinedAudienceId`
        # @return [Fixnum]
        attr_accessor :combined_audience_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @combined_audience_id = args[:combined_audience_id] if args.key?(:combined_audience_id)
        end
      end
      
      # Assigned content instream position targeting option details. This will be
      # populated in the content_instream_position_details field when targeting_type
      # is `TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
      class ContentInstreamPositionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content instream position for video or audio ads.
        # Corresponds to the JSON property `contentInstreamPosition`
        # @return [String]
        attr_accessor :content_instream_position
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_instream_position = args[:content_instream_position] if args.key?(:content_instream_position)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable content instream position, which could be used by
      # video and audio ads. This will be populated in the
      # content_instream_position_details field when targeting_type is `
      # TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
      class ContentInstreamPositionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content instream position.
        # Corresponds to the JSON property `contentInstreamPosition`
        # @return [String]
        attr_accessor :content_instream_position
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_instream_position = args[:content_instream_position] if args.key?(:content_instream_position)
        end
      end
      
      # Assigned content outstream position targeting option details. This will be
      # populated in the content_outstream_position_details field when targeting_type
      # is `TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
      class ContentOutstreamPositionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content outstream position.
        # Corresponds to the JSON property `contentOutstreamPosition`
        # @return [String]
        attr_accessor :content_outstream_position
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_outstream_position = args[:content_outstream_position] if args.key?(:content_outstream_position)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable content outstream position, which could be used by
      # display and video ads. This will be populated in the
      # content_outstream_position_details field when targeting_type is `
      # TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
      class ContentOutstreamPositionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content outstream position.
        # Corresponds to the JSON property `contentOutstreamPosition`
        # @return [String]
        attr_accessor :content_outstream_position
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_outstream_position = args[:content_outstream_position] if args.key?(:content_outstream_position)
        end
      end
      
      # Settings that control how conversions are counted. All post-click conversions
      # will be counted. A percentage value can be set for post-view conversions
      # counting.
      class ConversionCountingConfig
        include Google::Apis::Core::Hashable
      
        # The Floodlight activity configs used to track conversions. The number of
        # conversions counted is the sum of all of the conversions counted by all of the
        # Floodlight activity IDs specified in this field.
        # Corresponds to the JSON property `floodlightActivityConfigs`
        # @return [Array<Google::Apis::DisplayvideoV1::TrackingFloodlightActivityConfig>]
        attr_accessor :floodlight_activity_configs
      
        # The percentage of post-view conversions to count, in millis (1/1000 of a
        # percent). Must be between 0 and 100000 inclusive. For example, to track 50% of
        # the post-click conversions, set a value of 50000.
        # Corresponds to the JSON property `postViewCountPercentageMillis`
        # @return [Fixnum]
        attr_accessor :post_view_count_percentage_millis
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @floodlight_activity_configs = args[:floodlight_activity_configs] if args.key?(:floodlight_activity_configs)
          @post_view_count_percentage_millis = args[:post_view_count_percentage_millis] if args.key?(:post_view_count_percentage_millis)
        end
      end
      
      # Counter event of the creative.
      class CounterEvent
        include Google::Apis::Core::Hashable
      
        # Required. The name of the counter event.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The name used to identify this counter event in reports.
        # Corresponds to the JSON property `reportingName`
        # @return [String]
        attr_accessor :reporting_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @reporting_name = args[:reporting_name] if args.key?(:reporting_name)
        end
      end
      
      # A request message for CreateAsset.
      class CreateAssetRequest
        include Google::Apis::Core::Hashable
      
        # Required. The filename of the asset, including the file extension. The
        # filename must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `filename`
        # @return [String]
        attr_accessor :filename
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @filename = args[:filename] if args.key?(:filename)
        end
      end
      
      # A response message for CreateAsset.
      class CreateAssetResponse
        include Google::Apis::Core::Hashable
      
        # A single asset.
        # Corresponds to the JSON property `asset`
        # @return [Google::Apis::DisplayvideoV1::Asset]
        attr_accessor :asset
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @asset = args[:asset] if args.key?(:asset)
        end
      end
      
      # A request listing which assigned targeting options of a given targeting type
      # should be created and added.
      class CreateAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # Required. The assigned targeting options to create and add.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # Required. Identifies the type of this assigned targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
        end
      end
      
      # Request message for [SdfDownloadTaskService.CreateSdfDownloadTask].
      class CreateSdfDownloadTaskRequest
        include Google::Apis::Core::Hashable
      
        # The ID of the advertiser to download SDF for.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # A filtering option that filters entities by their entity IDs.
        # Corresponds to the JSON property `idFilter`
        # @return [Google::Apis::DisplayvideoV1::IdFilter]
        attr_accessor :id_filter
      
        # A filtering option for filtering on Inventory Source entities.
        # Corresponds to the JSON property `inventorySourceFilter`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceFilter]
        attr_accessor :inventory_source_filter
      
        # A filtering option that filters on selected file types belonging to a chosen
        # set of filter entities.
        # Corresponds to the JSON property `parentEntityFilter`
        # @return [Google::Apis::DisplayvideoV1::ParentEntityFilter]
        attr_accessor :parent_entity_filter
      
        # The ID of the partner to download SDF for.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        # Required. The SDF version of the downloaded file. If set to `
        # SDF_VERSION_UNSPECIFIED`, this will default to the version specified by the
        # advertiser or partner identified by `root_id`. An advertiser inherits its SDF
        # version from its partner unless configured otherwise.
        # Corresponds to the JSON property `version`
        # @return [String]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @id_filter = args[:id_filter] if args.key?(:id_filter)
          @inventory_source_filter = args[:inventory_source_filter] if args.key?(:inventory_source_filter)
          @parent_entity_filter = args[:parent_entity_filter] if args.key?(:parent_entity_filter)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # A single Creative.
      class Creative
        include Google::Apis::Core::Hashable
      
        # Additional dimensions. Applicable when creative_type is one of: * `
        # CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` * `CREATIVE_TYPE_NATIVE` *
        # `CREATIVE_TYPE_TEMPLATED_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `
        # CREATIVE_TYPE_LIGHTBOX` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `
        # CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_PUBLISHER_HOSTED` If
        # this field is specified, width_pixels and height_pixels are both required and
        # must be greater than or equal to 0.
        # Corresponds to the JSON property `additionalDimensions`
        # @return [Array<Google::Apis::DisplayvideoV1::Dimensions>]
        attr_accessor :additional_dimensions
      
        # Output only. The unique ID of the advertiser the creative belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Third-party HTML tracking tag to be appended to the creative tag.
        # Corresponds to the JSON property `appendedTag`
        # @return [String]
        attr_accessor :appended_tag
      
        # Required. Assets associated to this creative. Assets can be associated to the
        # creative in one of following roles: * `ASSET_ROLE_UNSPECIFIED` * `
        # ASSET_ROLE_MAIN` * `ASSET_ROLE_BACKUP` * `ASSET_ROLE_POLITE_LOAD`
        # Corresponds to the JSON property `assets`
        # @return [Array<Google::Apis::DisplayvideoV1::AssetAssociation>]
        attr_accessor :assets
      
        # Output only. The unique ID of the Campaign Manager 360 placement associated
        # with the creative. This field is only applicable for creatives that are synced
        # from Campaign Manager.
        # Corresponds to the JSON property `cmPlacementId`
        # @return [Fixnum]
        attr_accessor :cm_placement_id
      
        # A Campaign Manager 360 tracking ad.
        # Corresponds to the JSON property `cmTrackingAd`
        # @return [Google::Apis::DisplayvideoV1::CmTrackingAd]
        attr_accessor :cm_tracking_ad
      
        # The IDs of companion creatives for a video creative. You can assign existing
        # display creatives (with image or HTML5 assets) to serve surrounding the
        # publisher's video player. Companions display around the video player while the
        # video is playing and remain after the video has completed. Creatives contain
        # additional dimensions can not be companion creatives. This field is only
        # supported for following creative_type: * `CREATIVE_TYPE_AUDIO` * `
        # CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `companionCreativeIds`
        # @return [Array<Fixnum>]
        attr_accessor :companion_creative_ids
      
        # Counter events for a rich media creative. Counters track the number of times
        # that a user interacts with any part of a rich media creative in a specified
        # way (mouse-overs, mouse-outs, clicks, taps, data loading, keyboard entries,
        # etc.). Any event that can be captured in the creative can be recorded as a
        # counter. Leave it empty or unset for creatives containing image assets only.
        # Corresponds to the JSON property `counterEvents`
        # @return [Array<Google::Apis::DisplayvideoV1::CounterEvent>]
        attr_accessor :counter_events
      
        # Output only. The timestamp when the creative was created. Assigned by the
        # system.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Output only. A list of attributes of the creative that is generated by the
        # system.
        # Corresponds to the JSON property `creativeAttributes`
        # @return [Array<String>]
        attr_accessor :creative_attributes
      
        # Output only. The unique ID of the creative. Assigned by the system.
        # Corresponds to the JSON property `creativeId`
        # @return [Fixnum]
        attr_accessor :creative_id
      
        # Required. Immutable. The type of the creative.
        # Corresponds to the JSON property `creativeType`
        # @return [String]
        attr_accessor :creative_type
      
        # Dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :dimensions
      
        # Required. The display name of the creative. Must be UTF-8 encoded with a
        # maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. Indicates whether the creative is dynamic.
        # Corresponds to the JSON property `dynamic`
        # @return [Boolean]
        attr_accessor :dynamic
        alias_method :dynamic?, :dynamic
      
        # Required. Controls whether or not the creative can serve. Accepted values are:
        # * `ENTITY_STATUS_ACTIVE` * `ENTITY_STATUS_ARCHIVED` * `ENTITY_STATUS_PAUSED`
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Required. Exit events for this creative. An exit (also known as a click tag)
        # is any area in your creative that someone can click or tap to open an
        # advertiser's landing page. Every creative must include at least one exit. You
        # can add an exit to your creative in any of the following ways: * Use Google
        # Web Designer's tap area. * Define a JavaScript variable called "clickTag". *
        # Use the Enabler (Enabler.exit()) to track exits in rich media formats.
        # Corresponds to the JSON property `exitEvents`
        # @return [Array<Google::Apis::DisplayvideoV1::ExitEvent>]
        attr_accessor :exit_events
      
        # Optional. Indicates the creative will automatically expand on hover. Optional
        # and only valid for third-party expandable creatives. Third-party expandable
        # creatives are creatives with following hosting source: * `
        # HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `
        # CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `expandOnHover`
        # @return [Boolean]
        attr_accessor :expand_on_hover
        alias_method :expand_on_hover?, :expand_on_hover
      
        # Optional. Specifies the expanding direction of the creative. Required and only
        # valid for third-party expandable creatives. Third-party expandable creatives
        # are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `expandingDirection`
        # @return [String]
        attr_accessor :expanding_direction
      
        # Required. Indicates where the creative is hosted.
        # Corresponds to the JSON property `hostingSource`
        # @return [String]
        attr_accessor :hosting_source
      
        # Output only. Indicates the third-party VAST tag creative requires HTML5 Video
        # support. Output only and only valid for third-party VAST tag creatives. Third-
        # party VAST tag creatives are creatives with following hosting_source: * `
        # HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `
        # CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `html5Video`
        # @return [Boolean]
        attr_accessor :html5_video
        alias_method :html5_video?, :html5_video
      
        # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled. To
        # enable this for the creative, make sure the Advertiser.creative_config.
        # ias_client_id has been set to your IAS client ID.
        # Corresponds to the JSON property `iasCampaignMonitoring`
        # @return [Boolean]
        attr_accessor :ias_campaign_monitoring
        alias_method :ias_campaign_monitoring?, :ias_campaign_monitoring
      
        # ID information used to link this creative to an external system. Must be UTF-8
        # encoded with a length of no more than 10,000 characters.
        # Corresponds to the JSON property `integrationCode`
        # @return [String]
        attr_accessor :integration_code
      
        # JavaScript measurement URL from supported third-party verification providers (
        # ComScore, DoubleVerify, IAS, Moat). HTML script tags are not supported. This
        # field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` *
        # `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `
        # CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
        # Corresponds to the JSON property `jsTrackerUrl`
        # @return [String]
        attr_accessor :js_tracker_url
      
        # Output only. The IDs of the line items this creative is associated with. To
        # associate a creative to a line item, use LineItem.creative_ids instead.
        # Corresponds to the JSON property `lineItemIds`
        # @return [Array<Fixnum>]
        attr_accessor :line_item_ids
      
        # Output only. Media duration of the creative. Applicable when creative_type is
        # one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_AUDIO` * `
        # CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_PUBLISHER_HOSTED`
        # Corresponds to the JSON property `mediaDuration`
        # @return [String]
        attr_accessor :media_duration
      
        # Output only. The resource name of the creative.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # User notes for this creative. Must be UTF-8 encoded with a length of no more
        # than 20,000 characters.
        # Corresponds to the JSON property `notes`
        # @return [String]
        attr_accessor :notes
      
        # OBA Icon for a Creative
        # Corresponds to the JSON property `obaIcon`
        # @return [Google::Apis::DisplayvideoV1::ObaIcon]
        attr_accessor :oba_icon
      
        # The length an audio or a video has been played.
        # Corresponds to the JSON property `progressOffset`
        # @return [Google::Apis::DisplayvideoV1::AudioVideoOffset]
        attr_accessor :progress_offset
      
        # Optional. Indicates that the creative relies on HTML5 to render properly.
        # Optional and only valid for third-party tag creatives. Third-party tag
        # creatives are creatives with following hosting_source: * `
        # HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `
        # CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `requireHtml5`
        # @return [Boolean]
        attr_accessor :require_html5
        alias_method :require_html5?, :require_html5
      
        # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad
        # Interface Definitions system). Set this if the creative relies on mobile
        # gestures for interactivity, such as swiping or tapping. Optional and only
        # valid for third-party tag creatives. Third-party tag creatives are creatives
        # with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with
        # following creative_type: * `CREATIVE_TYPE_STANDARD` * `
        # CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `requireMraid`
        # @return [Boolean]
        attr_accessor :require_mraid
        alias_method :require_mraid?, :require_mraid
      
        # Optional. Indicates that the creative will wait for a return ping for
        # attribution. Only valid when using a Campaign Manager 360 tracking ad with a
        # third-party ad server parameter and the $`DC_DBM_TOKEN` macro. Optional and
        # only valid for third-party tag creatives or third-party VAST tag creatives.
        # Third-party tag creatives are creatives with following hosting_source: * `
        # HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `
        # CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` Third-party VAST tag
        # creatives are creatives with following hosting_source: * `
        # HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `
        # CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `requirePingForAttribution`
        # @return [Boolean]
        attr_accessor :require_ping_for_attribution
        alias_method :require_ping_for_attribution?, :require_ping_for_attribution
      
        # Review statuses for the creative.
        # Corresponds to the JSON property `reviewStatus`
        # @return [Google::Apis::DisplayvideoV1::ReviewStatusInfo]
        attr_accessor :review_status
      
        # The length an audio or a video has been played.
        # Corresponds to the JSON property `skipOffset`
        # @return [Google::Apis::DisplayvideoV1::AudioVideoOffset]
        attr_accessor :skip_offset
      
        # Whether the user can choose to skip a video creative. This field is only
        # supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `skippable`
        # @return [Boolean]
        attr_accessor :skippable
        alias_method :skippable?, :skippable
      
        # Optional. The original third-party tag used for the creative. Required and
        # only valid for third-party tag creatives. Third-party tag creatives are
        # creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `
        # CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `thirdPartyTag`
        # @return [String]
        attr_accessor :third_party_tag
      
        # Tracking URLs from third parties to track interactions with a video creative.
        # This field is only supported for the following creative_type: * `
        # CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO`
        # Corresponds to the JSON property `thirdPartyUrls`
        # @return [Array<Google::Apis::DisplayvideoV1::ThirdPartyUrl>]
        attr_accessor :third_party_urls
      
        # Timer custom events for a rich media creative. Timers track the time during
        # which a user views and interacts with a specified part of a rich media
        # creative. A creative can have multiple timer events, each timed independently.
        # Leave it empty or unset for creatives containing image assets only.
        # Corresponds to the JSON property `timerEvents`
        # @return [Array<Google::Apis::DisplayvideoV1::TimerEvent>]
        attr_accessor :timer_events
      
        # Tracking URLs for analytics providers or third-party ad technology vendors.
        # The URLs must start with https (except on inventory that doesn't require SSL
        # compliance). If using macros in your URL, use only macros supported by Display
        # & Video 360. Standard URLs only, no IMG or SCRIPT tags. This field is only
        # supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `
        # CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `
        # CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
        # Corresponds to the JSON property `trackerUrls`
        # @return [Array<String>]
        attr_accessor :tracker_urls
      
        # Output only. Audio/Video transcodes. Display & Video 360 transcodes the main
        # asset into a number of alternative versions that use different file formats or
        # have different properties (resolution, audio bit rate, and video bit rate),
        # each designed for specific video players or bandwidths. These transcodes give
        # a publisher's system more options to choose from for each impression on your
        # video and ensures that the appropriate file serves based on the viewer’s
        # connection and screen size. This field is only supported in following
        # creative_type: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `
        # CREATIVE_TYPE_AUDIO`
        # Corresponds to the JSON property `transcodes`
        # @return [Array<Google::Apis::DisplayvideoV1::Transcode>]
        attr_accessor :transcodes
      
        # A creative identifier provided by a registry that is unique across all
        # platforms. This is part of the VAST 4.0 standard.
        # Corresponds to the JSON property `universalAdId`
        # @return [Google::Apis::DisplayvideoV1::UniversalAdId]
        attr_accessor :universal_ad_id
      
        # Output only. The timestamp when the creative was last updated. Assigned by the
        # system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        # Optional. The URL of the VAST tag for a third-party VAST tag creative.
        # Required and only valid for third-party VAST tag creatives. Third-party VAST
        # tag creatives are creatives with following hosting_source: * `
        # HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `
        # CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `vastTagUrl`
        # @return [String]
        attr_accessor :vast_tag_url
      
        # Output only. Indicates the third-party VAST tag creative requires VPAID (
        # Digital Video Player-Ad Interface). Output only and only valid for third-party
        # VAST tag creatives. Third-party VAST tag creatives are creatives with
        # following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with
        # following creative_type: * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `vpaid`
        # @return [Boolean]
        attr_accessor :vpaid
        alias_method :vpaid?, :vpaid
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @additional_dimensions = args[:additional_dimensions] if args.key?(:additional_dimensions)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @appended_tag = args[:appended_tag] if args.key?(:appended_tag)
          @assets = args[:assets] if args.key?(:assets)
          @cm_placement_id = args[:cm_placement_id] if args.key?(:cm_placement_id)
          @cm_tracking_ad = args[:cm_tracking_ad] if args.key?(:cm_tracking_ad)
          @companion_creative_ids = args[:companion_creative_ids] if args.key?(:companion_creative_ids)
          @counter_events = args[:counter_events] if args.key?(:counter_events)
          @create_time = args[:create_time] if args.key?(:create_time)
          @creative_attributes = args[:creative_attributes] if args.key?(:creative_attributes)
          @creative_id = args[:creative_id] if args.key?(:creative_id)
          @creative_type = args[:creative_type] if args.key?(:creative_type)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @display_name = args[:display_name] if args.key?(:display_name)
          @dynamic = args[:dynamic] if args.key?(:dynamic)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @exit_events = args[:exit_events] if args.key?(:exit_events)
          @expand_on_hover = args[:expand_on_hover] if args.key?(:expand_on_hover)
          @expanding_direction = args[:expanding_direction] if args.key?(:expanding_direction)
          @hosting_source = args[:hosting_source] if args.key?(:hosting_source)
          @html5_video = args[:html5_video] if args.key?(:html5_video)
          @ias_campaign_monitoring = args[:ias_campaign_monitoring] if args.key?(:ias_campaign_monitoring)
          @integration_code = args[:integration_code] if args.key?(:integration_code)
          @js_tracker_url = args[:js_tracker_url] if args.key?(:js_tracker_url)
          @line_item_ids = args[:line_item_ids] if args.key?(:line_item_ids)
          @media_duration = args[:media_duration] if args.key?(:media_duration)
          @name = args[:name] if args.key?(:name)
          @notes = args[:notes] if args.key?(:notes)
          @oba_icon = args[:oba_icon] if args.key?(:oba_icon)
          @progress_offset = args[:progress_offset] if args.key?(:progress_offset)
          @require_html5 = args[:require_html5] if args.key?(:require_html5)
          @require_mraid = args[:require_mraid] if args.key?(:require_mraid)
          @require_ping_for_attribution = args[:require_ping_for_attribution] if args.key?(:require_ping_for_attribution)
          @review_status = args[:review_status] if args.key?(:review_status)
          @skip_offset = args[:skip_offset] if args.key?(:skip_offset)
          @skippable = args[:skippable] if args.key?(:skippable)
          @third_party_tag = args[:third_party_tag] if args.key?(:third_party_tag)
          @third_party_urls = args[:third_party_urls] if args.key?(:third_party_urls)
          @timer_events = args[:timer_events] if args.key?(:timer_events)
          @tracker_urls = args[:tracker_urls] if args.key?(:tracker_urls)
          @transcodes = args[:transcodes] if args.key?(:transcodes)
          @universal_ad_id = args[:universal_ad_id] if args.key?(:universal_ad_id)
          @update_time = args[:update_time] if args.key?(:update_time)
          @vast_tag_url = args[:vast_tag_url] if args.key?(:vast_tag_url)
          @vpaid = args[:vpaid] if args.key?(:vpaid)
        end
      end
      
      # Creative requirements configuration for the inventory source.
      class CreativeConfig
        include Google::Apis::Core::Hashable
      
        # The type of creative that can be assigned to the inventory source.
        # Corresponds to the JSON property `creativeType`
        # @return [String]
        attr_accessor :creative_type
      
        # The configuration for display creatives.
        # Corresponds to the JSON property `displayCreativeConfig`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceDisplayCreativeConfig]
        attr_accessor :display_creative_config
      
        # The configuration for video creatives.
        # Corresponds to the JSON property `videoCreativeConfig`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceVideoCreativeConfig]
        attr_accessor :video_creative_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creative_type = args[:creative_type] if args.key?(:creative_type)
          @display_creative_config = args[:display_creative_config] if args.key?(:display_creative_config)
          @video_creative_config = args[:video_creative_config] if args.key?(:video_creative_config)
        end
      end
      
      # A single custom bidding algorithm.
      class CustomBiddingAlgorithm
        include Google::Apis::Core::Hashable
      
        # Immutable. The unique ID of the advertiser that owns the custom bidding
        # algorithm.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Output only. The unique ID of the custom bidding algorithm. Assigned by the
        # system.
        # Corresponds to the JSON property `customBiddingAlgorithmId`
        # @return [Fixnum]
        attr_accessor :custom_bidding_algorithm_id
      
        # Required. Immutable. The type of custom bidding algorithm.
        # Corresponds to the JSON property `customBiddingAlgorithmType`
        # @return [String]
        attr_accessor :custom_bidding_algorithm_type
      
        # Required. The display name of the custom bidding algorithm. Must be UTF-8
        # encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Controls whether or not the custom bidding algorithm can be used as a bidding
        # strategy. Accepted values are: * `ENTITY_STATUS_ACTIVE` * `
        # ENTITY_STATUS_ARCHIVED`
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Output only. The resource name of the custom bidding algorithm.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Immutable. The unique ID of the partner that owns the custom bidding algorithm.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @custom_bidding_algorithm_id = args[:custom_bidding_algorithm_id] if args.key?(:custom_bidding_algorithm_id)
          @custom_bidding_algorithm_type = args[:custom_bidding_algorithm_type] if args.key?(:custom_bidding_algorithm_type)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @name = args[:name] if args.key?(:name)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
        end
      end
      
      # Describes a custom list entity, such as a custom affinity or custom intent
      # audience list.
      class CustomList
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the custom list. Assigned by the system.
        # Corresponds to the JSON property `customListId`
        # @return [Fixnum]
        attr_accessor :custom_list_id
      
        # Output only. The display name of the custom list. .
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the custom list.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_list_id = args[:custom_list_id] if args.key?(:custom_list_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Details of custom list group. All custom list targeting settings are logically
      # ‘OR’ of each other.
      class CustomListGroup
        include Google::Apis::Core::Hashable
      
        # Required. All custom list targeting settings in custom list group. Repeated
        # settings with same id will be ignored.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::CustomListTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of custom list targeting setting.
      class CustomListTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. Custom id of custom list targeting setting. This id is
        # custom_list_id.
        # Corresponds to the JSON property `customListId`
        # @return [Fixnum]
        attr_accessor :custom_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_list_id = args[:custom_list_id] if args.key?(:custom_list_id)
        end
      end
      
      # Represents a whole or partial calendar date, such as a birthday. The time of
      # day and time zone are either specified elsewhere or are insignificant. The
      # date is relative to the Gregorian Calendar. This can represent one of the
      # following: * A full date, with non-zero year, month, and day values * A month
      # and day value, with a zero year, such as an anniversary * A year on its own,
      # with zero month and day values * A year and month value, with a zero day, such
      # as a credit card expiration date Related types are google.type.TimeOfDay and `
      # google.protobuf.Timestamp`.
      class Date
        include Google::Apis::Core::Hashable
      
        # Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to
        # specify a year by itself or a year and month where the day isn't significant.
        # Corresponds to the JSON property `day`
        # @return [Fixnum]
        attr_accessor :day
      
        # Month of a year. Must be from 1 to 12, or 0 to specify a year without a month
        # and day.
        # Corresponds to the JSON property `month`
        # @return [Fixnum]
        attr_accessor :month
      
        # Year of the date. Must be from 1 to 9999, or 0 to specify a date without a
        # year.
        # Corresponds to the JSON property `year`
        # @return [Fixnum]
        attr_accessor :year
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day = args[:day] if args.key?(:day)
          @month = args[:month] if args.key?(:month)
          @year = args[:year] if args.key?(:year)
        end
      end
      
      # A date range.
      class DateRange
        include Google::Apis::Core::Hashable
      
        # Represents a whole or partial calendar date, such as a birthday. The time of
        # day and time zone are either specified elsewhere or are insignificant. The
        # date is relative to the Gregorian Calendar. This can represent one of the
        # following: * A full date, with non-zero year, month, and day values * A month
        # and day value, with a zero year, such as an anniversary * A year on its own,
        # with zero month and day values * A year and month value, with a zero day, such
        # as a credit card expiration date Related types are google.type.TimeOfDay and `
        # google.protobuf.Timestamp`.
        # Corresponds to the JSON property `endDate`
        # @return [Google::Apis::DisplayvideoV1::Date]
        attr_accessor :end_date
      
        # Represents a whole or partial calendar date, such as a birthday. The time of
        # day and time zone are either specified elsewhere or are insignificant. The
        # date is relative to the Gregorian Calendar. This can represent one of the
        # following: * A full date, with non-zero year, month, and day values * A month
        # and day value, with a zero year, such as an anniversary * A year on its own,
        # with zero month and day values * A year and month value, with a zero day, such
        # as a credit card expiration date Related types are google.type.TimeOfDay and `
        # google.protobuf.Timestamp`.
        # Corresponds to the JSON property `startDate`
        # @return [Google::Apis::DisplayvideoV1::Date]
        attr_accessor :start_date
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @end_date = args[:end_date] if args.key?(:end_date)
          @start_date = args[:start_date] if args.key?(:start_date)
        end
      end
      
      # Representation of a segment of time defined on a specific day of the week and
      # with a start and end time. The time represented by `start_hour` must be before
      # the time represented by `end_hour`.
      class DayAndTimeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The day of the week for this day and time targeting setting.
        # Corresponds to the JSON property `dayOfWeek`
        # @return [String]
        attr_accessor :day_of_week
      
        # Required. The end hour for day and time targeting. Must be between 1 (1 hour
        # after start of day) and 24 (end of day).
        # Corresponds to the JSON property `endHour`
        # @return [Fixnum]
        attr_accessor :end_hour
      
        # Required. The start hour for day and time targeting. Must be between 0 (start
        # of day) and 23 (1 hour before end of day).
        # Corresponds to the JSON property `startHour`
        # @return [Fixnum]
        attr_accessor :start_hour
      
        # Required. The mechanism used to determine which timezone to use for this day
        # and time targeting setting.
        # Corresponds to the JSON property `timeZoneResolution`
        # @return [String]
        attr_accessor :time_zone_resolution
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day_of_week = args[:day_of_week] if args.key?(:day_of_week)
          @end_hour = args[:end_hour] if args.key?(:end_hour)
          @start_hour = args[:start_hour] if args.key?(:start_hour)
          @time_zone_resolution = args[:time_zone_resolution] if args.key?(:time_zone_resolution)
        end
      end
      
      # Request message for ManualTriggerService.DeactivateManualTrigger.
      class DeactivateManualTriggerRequest
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # A request listing which assigned targeting options of a given targeting type
      # should be deleted.
      class DeleteAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # Required. The assigned targeting option IDs to delete.
        # Corresponds to the JSON property `assignedTargetingOptionIds`
        # @return [Array<String>]
        attr_accessor :assigned_targeting_option_ids
      
        # Required. Identifies the type of this assigned targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_option_ids = args[:assigned_targeting_option_ids] if args.key?(:assigned_targeting_option_ids)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
        end
      end
      
      # Assigned device make and model targeting option details. This will be
      # populated in the device_make_model_details field when targeting_type is `
      # TARGETING_TYPE_DEVICE_MAKE_MODEL`.
      class DeviceMakeModelAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the device make and model.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_DEVICE_MAKE_MODEL`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable device make and model. This will be populated in the
      # device_make_model_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_DEVICE_MAKE_MODEL`.
      class DeviceMakeModelTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the device make and model.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # Targeting details for device type. This will be populated in the details field
      # of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_DEVICE_TYPE`.
      class DeviceTypeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the device type.
        # Corresponds to the JSON property `deviceType`
        # @return [String]
        attr_accessor :device_type
      
        # Required. ID of the device type.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @device_type = args[:device_type] if args.key?(:device_type)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable device type. This will be populated in the
      # device_type_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_DEVICE_TYPE`.
      class DeviceTypeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The device type that is used to be targeted.
        # Corresponds to the JSON property `deviceType`
        # @return [String]
        attr_accessor :device_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @device_type = args[:device_type] if args.key?(:device_type)
        end
      end
      
      # Targeting details for digital content label. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
      class DigitalContentLabelAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the digital content label rating tier.
        # Corresponds to the JSON property `contentRatingTier`
        # @return [String]
        attr_accessor :content_rating_tier
      
        # Required. ID of the digital content label to be EXCLUDED.
        # Corresponds to the JSON property `excludedTargetingOptionId`
        # @return [String]
        attr_accessor :excluded_targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_rating_tier = args[:content_rating_tier] if args.key?(:content_rating_tier)
          @excluded_targeting_option_id = args[:excluded_targeting_option_id] if args.key?(:excluded_targeting_option_id)
        end
      end
      
      # Represents a targetable digital content label rating tier. This will be
      # populated in the digital_content_label_details field of the TargetingOption
      # when targeting_type is `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
      class DigitalContentLabelTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. An enum for the content label brand safety tiers.
        # Corresponds to the JSON property `contentRatingTier`
        # @return [String]
        attr_accessor :content_rating_tier
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_rating_tier = args[:content_rating_tier] if args.key?(:content_rating_tier)
        end
      end
      
      # Dimensions.
      class Dimensions
        include Google::Apis::Core::Hashable
      
        # The height in pixels.
        # Corresponds to the JSON property `heightPixels`
        # @return [Fixnum]
        attr_accessor :height_pixels
      
        # The width in pixels.
        # Corresponds to the JSON property `widthPixels`
        # @return [Fixnum]
        attr_accessor :width_pixels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @height_pixels = args[:height_pixels] if args.key?(:height_pixels)
          @width_pixels = args[:width_pixels] if args.key?(:width_pixels)
        end
      end
      
      # Details of DoubleVerify settings.
      class DoubleVerify
        include Google::Apis::Core::Hashable
      
        # Details of DoubleVerify star ratings settings.
        # Corresponds to the JSON property `appStarRating`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyAppStarRating]
        attr_accessor :app_star_rating
      
        # Avoid bidding on apps with the age rating.
        # Corresponds to the JSON property `avoidedAgeRatings`
        # @return [Array<String>]
        attr_accessor :avoided_age_ratings
      
        # Settings for brand safety controls.
        # Corresponds to the JSON property `brandSafetyCategories`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyBrandSafetyCategories]
        attr_accessor :brand_safety_categories
      
        # The custom segment ID provided by DoubleVerify. The ID must start with "51"
        # and consist of eight digits. Custom segment ID cannot be specified along with
        # any of the following fields: * brand_safety_categories * avoided_age_ratings *
        # app_star_rating * fraud_invalid_traffic
        # Corresponds to the JSON property `customSegmentId`
        # @return [Fixnum]
        attr_accessor :custom_segment_id
      
        # Details of DoubleVerify display viewability settings.
        # Corresponds to the JSON property `displayViewability`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyDisplayViewability]
        attr_accessor :display_viewability
      
        # DoubleVerify Fraud & Invalid Traffic settings.
        # Corresponds to the JSON property `fraudInvalidTraffic`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyFraudInvalidTraffic]
        attr_accessor :fraud_invalid_traffic
      
        # Details of DoubleVerify video viewability settings.
        # Corresponds to the JSON property `videoViewability`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyVideoViewability]
        attr_accessor :video_viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_star_rating = args[:app_star_rating] if args.key?(:app_star_rating)
          @avoided_age_ratings = args[:avoided_age_ratings] if args.key?(:avoided_age_ratings)
          @brand_safety_categories = args[:brand_safety_categories] if args.key?(:brand_safety_categories)
          @custom_segment_id = args[:custom_segment_id] if args.key?(:custom_segment_id)
          @display_viewability = args[:display_viewability] if args.key?(:display_viewability)
          @fraud_invalid_traffic = args[:fraud_invalid_traffic] if args.key?(:fraud_invalid_traffic)
          @video_viewability = args[:video_viewability] if args.key?(:video_viewability)
        end
      end
      
      # Details of DoubleVerify star ratings settings.
      class DoubleVerifyAppStarRating
        include Google::Apis::Core::Hashable
      
        # Avoid bidding on apps with insufficient star ratings.
        # Corresponds to the JSON property `avoidInsufficientStarRating`
        # @return [Boolean]
        attr_accessor :avoid_insufficient_star_rating
        alias_method :avoid_insufficient_star_rating?, :avoid_insufficient_star_rating
      
        # Avoid bidding on apps with the star ratings.
        # Corresponds to the JSON property `avoidedStarRating`
        # @return [String]
        attr_accessor :avoided_star_rating
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @avoid_insufficient_star_rating = args[:avoid_insufficient_star_rating] if args.key?(:avoid_insufficient_star_rating)
          @avoided_star_rating = args[:avoided_star_rating] if args.key?(:avoided_star_rating)
        end
      end
      
      # Settings for brand safety controls.
      class DoubleVerifyBrandSafetyCategories
        include Google::Apis::Core::Hashable
      
        # Unknown or unrateable.
        # Corresponds to the JSON property `avoidUnknownBrandSafetyCategory`
        # @return [Boolean]
        attr_accessor :avoid_unknown_brand_safety_category
        alias_method :avoid_unknown_brand_safety_category?, :avoid_unknown_brand_safety_category
      
        # Brand safety high severity avoidance categories.
        # Corresponds to the JSON property `avoidedHighSeverityCategories`
        # @return [Array<String>]
        attr_accessor :avoided_high_severity_categories
      
        # Brand safety medium severity avoidance categories.
        # Corresponds to the JSON property `avoidedMediumSeverityCategories`
        # @return [Array<String>]
        attr_accessor :avoided_medium_severity_categories
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @avoid_unknown_brand_safety_category = args[:avoid_unknown_brand_safety_category] if args.key?(:avoid_unknown_brand_safety_category)
          @avoided_high_severity_categories = args[:avoided_high_severity_categories] if args.key?(:avoided_high_severity_categories)
          @avoided_medium_severity_categories = args[:avoided_medium_severity_categories] if args.key?(:avoided_medium_severity_categories)
        end
      end
      
      # Details of DoubleVerify display viewability settings.
      class DoubleVerifyDisplayViewability
        include Google::Apis::Core::Hashable
      
        # Target web and app inventory to maximize IAB viewable rate.
        # Corresponds to the JSON property `iab`
        # @return [String]
        attr_accessor :iab
      
        # Target web and app inventory to maximize 100% viewable duration.
        # Corresponds to the JSON property `viewableDuring`
        # @return [String]
        attr_accessor :viewable_during
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @iab = args[:iab] if args.key?(:iab)
          @viewable_during = args[:viewable_during] if args.key?(:viewable_during)
        end
      end
      
      # DoubleVerify Fraud & Invalid Traffic settings.
      class DoubleVerifyFraudInvalidTraffic
        include Google::Apis::Core::Hashable
      
        # Insufficient Historical Fraud & IVT Stats.
        # Corresponds to the JSON property `avoidInsufficientOption`
        # @return [Boolean]
        attr_accessor :avoid_insufficient_option
        alias_method :avoid_insufficient_option?, :avoid_insufficient_option
      
        # Avoid Sites and Apps with historical Fraud & IVT.
        # Corresponds to the JSON property `avoidedFraudOption`
        # @return [String]
        attr_accessor :avoided_fraud_option
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @avoid_insufficient_option = args[:avoid_insufficient_option] if args.key?(:avoid_insufficient_option)
          @avoided_fraud_option = args[:avoided_fraud_option] if args.key?(:avoided_fraud_option)
        end
      end
      
      # Details of DoubleVerify video viewability settings.
      class DoubleVerifyVideoViewability
        include Google::Apis::Core::Hashable
      
        # Target inventory to maximize impressions with 400x300 or greater player size.
        # Corresponds to the JSON property `playerImpressionRate`
        # @return [String]
        attr_accessor :player_impression_rate
      
        # Target web inventory to maximize IAB viewable rate.
        # Corresponds to the JSON property `videoIab`
        # @return [String]
        attr_accessor :video_iab
      
        # Target web inventory to maximize fully viewable rate.
        # Corresponds to the JSON property `videoViewableRate`
        # @return [String]
        attr_accessor :video_viewable_rate
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @player_impression_rate = args[:player_impression_rate] if args.key?(:player_impression_rate)
          @video_iab = args[:video_iab] if args.key?(:video_iab)
          @video_viewable_rate = args[:video_viewable_rate] if args.key?(:video_viewable_rate)
        end
      end
      
      # A generic empty message that you can re-use to avoid defining duplicated empty
      # messages in your APIs. A typical example is to use it as the request or the
      # response type of an API method. For instance: service Foo ` rpc Bar(google.
      # protobuf.Empty) returns (google.protobuf.Empty); ` The JSON representation for
      # `Empty` is empty JSON object ````.
      class Empty
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Assigned environment targeting option details. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_ENVIRONMENT`.
      class EnvironmentAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The serving environment.
        # Corresponds to the JSON property `environment`
        # @return [String]
        attr_accessor :environment
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_ENVIRONMENT` (e.g., "508010" for targeting the `
        # ENVIRONMENT_WEB_OPTIMIZED` option).
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @environment = args[:environment] if args.key?(:environment)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable environment. This will be populated in the
      # environment_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_ENVIRONMENT`.
      class EnvironmentTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The serving environment.
        # Corresponds to the JSON property `environment`
        # @return [String]
        attr_accessor :environment
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @environment = args[:environment] if args.key?(:environment)
        end
      end
      
      # Details for assigned exchange targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_EXCHANGE`.
      class ExchangeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_EXCHANGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Settings that control which exchanges are enabled for a partner.
      class ExchangeConfig
        include Google::Apis::Core::Hashable
      
        # All enabled exchanges in the partner. Duplicate enabled exchanges will be
        # ignored.
        # Corresponds to the JSON property `enabledExchanges`
        # @return [Array<Google::Apis::DisplayvideoV1::ExchangeConfigEnabledExchange>]
        attr_accessor :enabled_exchanges
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enabled_exchanges = args[:enabled_exchanges] if args.key?(:enabled_exchanges)
        end
      end
      
      # An enabled exchange in the partner.
      class ExchangeConfigEnabledExchange
        include Google::Apis::Core::Hashable
      
        # The enabled exchange.
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        # Output only. Agency ID of Google Ad Manager. The field is only relevant when
        # Google Ad Manager is the enabled exchange.
        # Corresponds to the JSON property `googleAdManagerAgencyId`
        # @return [String]
        attr_accessor :google_ad_manager_agency_id
      
        # Output only. Network ID of Google Ad Manager. The field is only relevant when
        # Google Ad Manager is the enabled exchange.
        # Corresponds to the JSON property `googleAdManagerBuyerNetworkId`
        # @return [String]
        attr_accessor :google_ad_manager_buyer_network_id
      
        # Output only. Seat ID of the enabled exchange.
        # Corresponds to the JSON property `seatId`
        # @return [String]
        attr_accessor :seat_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exchange = args[:exchange] if args.key?(:exchange)
          @google_ad_manager_agency_id = args[:google_ad_manager_agency_id] if args.key?(:google_ad_manager_agency_id)
          @google_ad_manager_buyer_network_id = args[:google_ad_manager_buyer_network_id] if args.key?(:google_ad_manager_buyer_network_id)
          @seat_id = args[:seat_id] if args.key?(:seat_id)
        end
      end
      
      # Exchange review status for the creative.
      class ExchangeReviewStatus
        include Google::Apis::Core::Hashable
      
        # The exchange reviewing the creative.
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        # Status of the exchange review.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exchange = args[:exchange] if args.key?(:exchange)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # Represents a targetable exchange. This will be populated in the
      # exchange_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_EXCHANGE`.
      class ExchangeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The type of exchange.
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exchange = args[:exchange] if args.key?(:exchange)
        end
      end
      
      # Exit event of the creative.
      class ExitEvent
        include Google::Apis::Core::Hashable
      
        # The name of the click tag of the exit event. The name must be unique within
        # one creative. Leave it empty or unset for creatives containing image assets
        # only.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The name used to identify this event in reports. Leave it empty or unset for
        # creatives containing image assets only.
        # Corresponds to the JSON property `reportingName`
        # @return [String]
        attr_accessor :reporting_name
      
        # Required. The type of the exit event.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Required. The click through URL of the exit event. This is required when type
        # is: * `EXIT_EVENT_TYPE_DEFAULT` * `EXIT_EVENT_TYPE_BACKUP`
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @reporting_name = args[:reporting_name] if args.key?(:reporting_name)
          @type = args[:type] if args.key?(:type)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # Describes a first or third party audience list used for targeting. First party
      # audiences are created via usage of client data. Third party audiences are
      # provided by Third Party data providers and can only be licensed to customers.
      class FirstAndThirdPartyAudience
        include Google::Apis::Core::Hashable
      
        # Output only. The estimated audience size for the Display network in the past
        # month. If the size is less than 1000, the number will be hidden and 0 will be
        # returned due to privacy reasons. Otherwise, the number will be rounded off to
        # two significant digits. Only returned in GET request.
        # Corresponds to the JSON property `activeDisplayAudienceSize`
        # @return [Fixnum]
        attr_accessor :active_display_audience_size
      
        # Output only. The source of the audience.
        # Corresponds to the JSON property `audienceSource`
        # @return [String]
        attr_accessor :audience_source
      
        # Output only. The type of the audience.
        # Corresponds to the JSON property `audienceType`
        # @return [String]
        attr_accessor :audience_type
      
        # The user-provided description of the audience. Only applicable to first party
        # audiences.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. The estimated audience size for the Display network. If the size
        # is less than 1000, the number will be hidden and 0 will be returned due to
        # privacy reasons. Otherwise, the number will be rounded off to two significant
        # digits. Only returned in GET request.
        # Corresponds to the JSON property `displayAudienceSize`
        # @return [Fixnum]
        attr_accessor :display_audience_size
      
        # Output only. The estimated desktop audience size in Display network. If the
        # size is less than 1000, the number will be hidden and 0 will be returned due
        # to privacy reasons. Otherwise, the number will be rounded off to two
        # significant digits. Only applicable to first party audiences. Only returned in
        # GET request.
        # Corresponds to the JSON property `displayDesktopAudienceSize`
        # @return [Fixnum]
        attr_accessor :display_desktop_audience_size
      
        # Output only. The estimated mobile app audience size in Display network. If the
        # size is less than 1000, the number will be hidden and 0 will be returned due
        # to privacy reasons. Otherwise, the number will be rounded off to two
        # significant digits. Only applicable to first party audiences. Only returned in
        # GET request.
        # Corresponds to the JSON property `displayMobileAppAudienceSize`
        # @return [Fixnum]
        attr_accessor :display_mobile_app_audience_size
      
        # Output only. The estimated mobile web audience size in Display network. If the
        # size is less than 1000, the number will be hidden and 0 will be returned due
        # to privacy reasons. Otherwise, the number will be rounded off to two
        # significant digits. Only applicable to first party audiences. Only returned in
        # GET request.
        # Corresponds to the JSON property `displayMobileWebAudienceSize`
        # @return [Fixnum]
        attr_accessor :display_mobile_web_audience_size
      
        # The display name of the first and third party audience.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the first and third party audience. Assigned by
        # the system.
        # Corresponds to the JSON property `firstAndThirdPartyAudienceId`
        # @return [Fixnum]
        attr_accessor :first_and_third_party_audience_id
      
        # Output only. Whether the audience is a first or third party audience.
        # Corresponds to the JSON property `firstAndThirdPartyAudienceType`
        # @return [String]
        attr_accessor :first_and_third_party_audience_type
      
        # Output only. The estimated audience size for Gmail network. If the size is
        # less than 1000, the number will be hidden and 0 will be returned due to
        # privacy reasons. Otherwise, the number will be rounded off to two significant
        # digits. Only applicable to first party audiences. Only returned in GET request.
        # Corresponds to the JSON property `gmailAudienceSize`
        # @return [Fixnum]
        attr_accessor :gmail_audience_size
      
        # The duration in days that an entry remains in the audience after the
        # qualifying event. Only applicable to first party audiences.
        # Corresponds to the JSON property `membershipDurationDays`
        # @return [Fixnum]
        attr_accessor :membership_duration_days
      
        # Output only. The resource name of the first and third party audience.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The estimated audience size for YouTube network. If the size is
        # less than 1000, the number will be hidden and 0 will be returned due to
        # privacy reasons. Otherwise, the number will be rounded off to two significant
        # digits. Only applicable to first party audiences. Only returned in GET request.
        # Corresponds to the JSON property `youtubeAudienceSize`
        # @return [Fixnum]
        attr_accessor :youtube_audience_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @active_display_audience_size = args[:active_display_audience_size] if args.key?(:active_display_audience_size)
          @audience_source = args[:audience_source] if args.key?(:audience_source)
          @audience_type = args[:audience_type] if args.key?(:audience_type)
          @description = args[:description] if args.key?(:description)
          @display_audience_size = args[:display_audience_size] if args.key?(:display_audience_size)
          @display_desktop_audience_size = args[:display_desktop_audience_size] if args.key?(:display_desktop_audience_size)
          @display_mobile_app_audience_size = args[:display_mobile_app_audience_size] if args.key?(:display_mobile_app_audience_size)
          @display_mobile_web_audience_size = args[:display_mobile_web_audience_size] if args.key?(:display_mobile_web_audience_size)
          @display_name = args[:display_name] if args.key?(:display_name)
          @first_and_third_party_audience_id = args[:first_and_third_party_audience_id] if args.key?(:first_and_third_party_audience_id)
          @first_and_third_party_audience_type = args[:first_and_third_party_audience_type] if args.key?(:first_and_third_party_audience_type)
          @gmail_audience_size = args[:gmail_audience_size] if args.key?(:gmail_audience_size)
          @membership_duration_days = args[:membership_duration_days] if args.key?(:membership_duration_days)
          @name = args[:name] if args.key?(:name)
          @youtube_audience_size = args[:youtube_audience_size] if args.key?(:youtube_audience_size)
        end
      end
      
      # Details of first and third party audience group. All first and third party
      # audience targeting settings are logically ‘OR’ of each other.
      class FirstAndThirdPartyAudienceGroup
        include Google::Apis::Core::Hashable
      
        # Required. All first and third party audience targeting settings in first and
        # third party audience group. Repeated settings with same id are not allowed.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudienceTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of first and third party audience targeting setting.
      class FirstAndThirdPartyAudienceTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. First and third party audience id of the first and third party
        # audience targeting setting. This id is first_and_third_party_audience_id.
        # Corresponds to the JSON property `firstAndThirdPartyAudienceId`
        # @return [Fixnum]
        attr_accessor :first_and_third_party_audience_id
      
        # The recency of the first and third party audience targeting setting. Only
        # applicable to first party audiences, otherwise will be ignored. For more info,
        # refer to https://support.google.com/displayvideo/answer/2949947#recency When
        # unspecified, no recency limit will be used.
        # Corresponds to the JSON property `recency`
        # @return [String]
        attr_accessor :recency
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @first_and_third_party_audience_id = args[:first_and_third_party_audience_id] if args.key?(:first_and_third_party_audience_id)
          @recency = args[:recency] if args.key?(:recency)
        end
      end
      
      # A strategy that uses a fixed bidding price.
      class FixedBidStrategy
        include Google::Apis::Core::Hashable
      
        # The fixed bid amount, in micros of the advertiser's currency. For insertion
        # order entity, bid_amount_micros should be set as 0. For line item entity,
        # bid_amount_micros must be greater than or equal to billable unit of the given
        # currency and smaller than or equal to the upper limit 1000000000. For example,
        # 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `bidAmountMicros`
        # @return [Fixnum]
        attr_accessor :bid_amount_micros
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bid_amount_micros = args[:bid_amount_micros] if args.key?(:bid_amount_micros)
        end
      end
      
      # A single Floodlight group.
      class FloodlightGroup
        include Google::Apis::Core::Hashable
      
        # Configuration for custom Active View video viewability metrics.
        # Corresponds to the JSON property `activeViewConfig`
        # @return [Google::Apis::DisplayvideoV1::ActiveViewVideoViewabilityMetricConfig]
        attr_accessor :active_view_config
      
        # User-defined custom variables owned by the Floodlight group. Use custom
        # Floodlight variables to create reporting data that is tailored to your unique
        # business needs. Custom Floodlight variables use the keys `U1=`, `U2=`, and so
        # on, and can take any values that you choose to pass to them. You can use them
        # to track virtually any type of data that you collect about your customers,
        # such as the genre of movie that a customer purchases, the country to which the
        # item is shipped, and so on. Custom Floodlight variables may not be used to
        # pass any data that could be used or recognized as personally identifiable
        # information (PII). Example: `custom_variables ` fields ` "U1": value `
        # number_value: 123.4 `, "U2": value ` string_value: "MyVariable2" `, "U3":
        # value ` string_value: "MyVariable3" ` ` `` Acceptable values for keys are "U1"
        # through "U100", inclusive. String values must be less than 64 characters long,
        # and cannot contain the following characters: `"<>`.
        # Corresponds to the JSON property `customVariables`
        # @return [Hash<String,Object>]
        attr_accessor :custom_variables
      
        # Required. The display name of the Floodlight group.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the Floodlight group. Assigned by the system.
        # Corresponds to the JSON property `floodlightGroupId`
        # @return [Fixnum]
        attr_accessor :floodlight_group_id
      
        # Specifies how many days into the past to look when determining whether to
        # record a conversion.
        # Corresponds to the JSON property `lookbackWindow`
        # @return [Google::Apis::DisplayvideoV1::LookbackWindow]
        attr_accessor :lookback_window
      
        # Output only. The resource name of the Floodlight group.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The web tag type enabled for the Floodlight group.
        # Corresponds to the JSON property `webTagType`
        # @return [String]
        attr_accessor :web_tag_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @active_view_config = args[:active_view_config] if args.key?(:active_view_config)
          @custom_variables = args[:custom_variables] if args.key?(:custom_variables)
          @display_name = args[:display_name] if args.key?(:display_name)
          @floodlight_group_id = args[:floodlight_group_id] if args.key?(:floodlight_group_id)
          @lookback_window = args[:lookback_window] if args.key?(:lookback_window)
          @name = args[:name] if args.key?(:name)
          @web_tag_type = args[:web_tag_type] if args.key?(:web_tag_type)
        end
      end
      
      # Settings that control the number of times a user may be shown with the same ad
      # during a given time period.
      class FrequencyCap
        include Google::Apis::Core::Hashable
      
        # The maximum number of times a user may be shown with the same ad during this
        # period. Must be greater than 0. Applicable when unlimited is `false`.
        # Corresponds to the JSON property `maxImpressions`
        # @return [Fixnum]
        attr_accessor :max_impressions
      
        # The time unit in which the frequency cap will be applied. Applicable when
        # unlimited is `false`.
        # Corresponds to the JSON property `timeUnit`
        # @return [String]
        attr_accessor :time_unit
      
        # The number of time_unit the frequency cap will last. Applicable when unlimited
        # is `false`. The following restrictions apply based on the value of time_unit: *
        # `TIME_UNIT_LIFETIME` - this field is output only and will default to 1 * `
        # TIME_UNIT_MONTHS` - must be between 1 and 2 * `TIME_UNIT_WEEKS` - must be
        # between 1 and 4 * `TIME_UNIT_DAYS` - must be between 1 and 6 * `
        # TIME_UNIT_HOURS` - must be between 1 and 23 * `TIME_UNIT_MINUTES` - must be
        # between 1 and 59
        # Corresponds to the JSON property `timeUnitCount`
        # @return [Fixnum]
        attr_accessor :time_unit_count
      
        # Whether unlimited frequency capping is applied. When this field is set to `
        # true`, the remaining frequency cap fields are not applicable.
        # Corresponds to the JSON property `unlimited`
        # @return [Boolean]
        attr_accessor :unlimited
        alias_method :unlimited?, :unlimited
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_impressions = args[:max_impressions] if args.key?(:max_impressions)
          @time_unit = args[:time_unit] if args.key?(:time_unit)
          @time_unit_count = args[:time_unit_count] if args.key?(:time_unit_count)
          @unlimited = args[:unlimited] if args.key?(:unlimited)
        end
      end
      
      # Details for assigned gender targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARTGETING_TYPE_GENDER`.
      class GenderAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The gender of the audience.
        # Corresponds to the JSON property `gender`
        # @return [String]
        attr_accessor :gender
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_GENDER`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @gender = args[:gender] if args.key?(:gender)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable gender. This will be populated in the gender_details
      # field of a TargetingOption when targeting_type is `TARGETING_TYPE_GENDER`.
      class GenderTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The gender of an audience.
        # Corresponds to the JSON property `gender`
        # @return [String]
        attr_accessor :gender
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @gender = args[:gender] if args.key?(:gender)
        end
      end
      
      # Details for assigned geographic region targeting option. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is `TARGETING_TYPE_GEO_REGION`.
      class GeoRegionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the geographic region (e.g., "Ontario, Canada"
        # ).
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The type of geographic region targeting.
        # Corresponds to the JSON property `geoRegionType`
        # @return [String]
        attr_accessor :geo_region_type
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_GEO_REGION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @geo_region_type = args[:geo_region_type] if args.key?(:geo_region_type)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Search terms for geo region targeting options.
      class GeoRegionSearchTerms
        include Google::Apis::Core::Hashable
      
        # The search query for the desired geo region. The query can be a prefix, e.g. "
        # New Yor", "Seattle", "USA", etc.
        # Corresponds to the JSON property `geoRegionQuery`
        # @return [String]
        attr_accessor :geo_region_query
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @geo_region_query = args[:geo_region_query] if args.key?(:geo_region_query)
        end
      end
      
      # Represents a targetable geographic region. This will be populated in the
      # geo_region_details field when targeting_type is `TARGETING_TYPE_GEO_REGION`.
      class GeoRegionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the geographic region (e.g., "Ontario, Canada"
        # ).
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The type of geographic region targeting.
        # Corresponds to the JSON property `geoRegionType`
        # @return [String]
        attr_accessor :geo_region_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @geo_region_type = args[:geo_region_type] if args.key?(:geo_region_type)
        end
      end
      
      # Describes a Google audience resource. Includes Google audience lists.
      class GoogleAudience
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the Google audience. .
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the Google audience. Assigned by the system.
        # Corresponds to the JSON property `googleAudienceId`
        # @return [Fixnum]
        attr_accessor :google_audience_id
      
        # Output only. The type of Google audience. .
        # Corresponds to the JSON property `googleAudienceType`
        # @return [String]
        attr_accessor :google_audience_type
      
        # Output only. The resource name of the google audience.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @google_audience_id = args[:google_audience_id] if args.key?(:google_audience_id)
          @google_audience_type = args[:google_audience_type] if args.key?(:google_audience_type)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Details of Google audience group. All Google audience targeting settings are
      # logically ‘OR’ of each other.
      class GoogleAudienceGroup
        include Google::Apis::Core::Hashable
      
        # Required. All Google audience targeting settings in Google audience group.
        # Repeated settings with same id will be ignored.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::GoogleAudienceTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of Google audience targeting setting.
      class GoogleAudienceTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. Google audience id of the Google audience targeting setting. This id
        # is google_audience_id.
        # Corresponds to the JSON property `googleAudienceId`
        # @return [Fixnum]
        attr_accessor :google_audience_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @google_audience_id = args[:google_audience_id] if args.key?(:google_audience_id)
        end
      end
      
      # Media resource.
      class GoogleBytestreamMedia
        include Google::Apis::Core::Hashable
      
        # Name of the media resource.
        # Corresponds to the JSON property `resourceName`
        # @return [String]
        attr_accessor :resource_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_name = args[:resource_name] if args.key?(:resource_name)
        end
      end
      
      # Details for assigned household income targeting option. This will be populated
      # in the details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_HOUSEHOLD_INCOME`.
      class HouseholdIncomeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The household income of the audience.
        # Corresponds to the JSON property `householdIncome`
        # @return [String]
        attr_accessor :household_income
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_HOUSEHOLD_INCOME`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @household_income = args[:household_income] if args.key?(:household_income)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable household income. This will be populated in the
      # household_income_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_HOUSEHOLD_INCOME`.
      class HouseholdIncomeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The household income of an audience.
        # Corresponds to the JSON property `householdIncome`
        # @return [String]
        attr_accessor :household_income
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @household_income = args[:household_income] if args.key?(:household_income)
        end
      end
      
      # A filtering option that filters entities by their entity IDs.
      class IdFilter
        include Google::Apis::Core::Hashable
      
        # YouTube Ads to download by ID. All IDs must belong to the same Advertiser or
        # Partner specified in CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `adGroupAdIds`
        # @return [Array<Fixnum>]
        attr_accessor :ad_group_ad_ids
      
        # YouTube Ad Groups to download by ID. All IDs must belong to the same
        # Advertiser or Partner specified in CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `adGroupIds`
        # @return [Array<Fixnum>]
        attr_accessor :ad_group_ids
      
        # Campaigns to download by ID. All IDs must belong to the same Advertiser or
        # Partner specified in CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `campaignIds`
        # @return [Array<Fixnum>]
        attr_accessor :campaign_ids
      
        # Insertion Orders to download by ID. All IDs must belong to the same Advertiser
        # or Partner specified in CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `insertionOrderIds`
        # @return [Array<Fixnum>]
        attr_accessor :insertion_order_ids
      
        # Line Items to download by ID. All IDs must belong to the same Advertiser or
        # Partner specified in CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `lineItemIds`
        # @return [Array<Fixnum>]
        attr_accessor :line_item_ids
      
        # Media Products to download by ID. All IDs must belong to the same Advertiser
        # or Partner specified in CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `mediaProductIds`
        # @return [Array<Fixnum>]
        attr_accessor :media_product_ids
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ad_group_ad_ids = args[:ad_group_ad_ids] if args.key?(:ad_group_ad_ids)
          @ad_group_ids = args[:ad_group_ids] if args.key?(:ad_group_ids)
          @campaign_ids = args[:campaign_ids] if args.key?(:campaign_ids)
          @insertion_order_ids = args[:insertion_order_ids] if args.key?(:insertion_order_ids)
          @line_item_ids = args[:line_item_ids] if args.key?(:line_item_ids)
          @media_product_ids = args[:media_product_ids] if args.key?(:media_product_ids)
        end
      end
      
      # A single insertion order.
      class InsertionOrder
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the insertion order belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Settings that control the bid strategy. Bid strategy determines the bid price.
        # Corresponds to the JSON property `bidStrategy`
        # @return [Google::Apis::DisplayvideoV1::BiddingStrategy]
        attr_accessor :bid_strategy
      
        # Settings that control how insertion order budget is allocated.
        # Corresponds to the JSON property `budget`
        # @return [Google::Apis::DisplayvideoV1::InsertionOrderBudget]
        attr_accessor :budget
      
        # Required. Immutable. The unique ID of the campaign that the insertion order
        # belongs to.
        # Corresponds to the JSON property `campaignId`
        # @return [Fixnum]
        attr_accessor :campaign_id
      
        # Required. The display name of the insertion order. Must be UTF-8 encoded with
        # a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not the insertion order can spend its budget and
        # bid on inventory. * For CreateInsertionOrder method, only `ENTITY_STATUS_DRAFT`
        # is allowed. To activate an insertion order, use UpdateInsertionOrder method
        # and update the status to `ENTITY_STATUS_ACTIVE` after creation. * An insertion
        # order cannot be changed back to `ENTITY_STATUS_DRAFT` status from any other
        # status. * An insertion order cannot be set to `ENTITY_STATUS_ACTIVE` if its
        # parent campaign is not active.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Settings that control the number of times a user may be shown with the same ad
        # during a given time period.
        # Corresponds to the JSON property `frequencyCap`
        # @return [Google::Apis::DisplayvideoV1::FrequencyCap]
        attr_accessor :frequency_cap
      
        # Output only. The unique ID of the insertion order. Assigned by the system.
        # Corresponds to the JSON property `insertionOrderId`
        # @return [Fixnum]
        attr_accessor :insertion_order_id
      
        # The type of insertion order. If this field is unspecified in creation, the
        # value defaults to `RTB`.
        # Corresponds to the JSON property `insertionOrderType`
        # @return [String]
        attr_accessor :insertion_order_type
      
        # Integration details of an entry.
        # Corresponds to the JSON property `integrationDetails`
        # @return [Google::Apis::DisplayvideoV1::IntegrationDetails]
        attr_accessor :integration_details
      
        # Output only. The resource name of the insertion order.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Settings that control the rate at which a budget is spent.
        # Corresponds to the JSON property `pacing`
        # @return [Google::Apis::DisplayvideoV1::Pacing]
        attr_accessor :pacing
      
        # The partner costs associated with the insertion order. If absent or empty in
        # CreateInsertionOrder method, the newly created insertion order will inherit
        # partner costs from the partner settings.
        # Corresponds to the JSON property `partnerCosts`
        # @return [Array<Google::Apis::DisplayvideoV1::PartnerCost>]
        attr_accessor :partner_costs
      
        # Settings that control the performance goal of a campaign or insertion order.
        # Corresponds to the JSON property `performanceGoal`
        # @return [Google::Apis::DisplayvideoV1::PerformanceGoal]
        attr_accessor :performance_goal
      
        # Output only. The timestamp when the insertion order was last updated. Assigned
        # by the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @bid_strategy = args[:bid_strategy] if args.key?(:bid_strategy)
          @budget = args[:budget] if args.key?(:budget)
          @campaign_id = args[:campaign_id] if args.key?(:campaign_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @frequency_cap = args[:frequency_cap] if args.key?(:frequency_cap)
          @insertion_order_id = args[:insertion_order_id] if args.key?(:insertion_order_id)
          @insertion_order_type = args[:insertion_order_type] if args.key?(:insertion_order_type)
          @integration_details = args[:integration_details] if args.key?(:integration_details)
          @name = args[:name] if args.key?(:name)
          @pacing = args[:pacing] if args.key?(:pacing)
          @partner_costs = args[:partner_costs] if args.key?(:partner_costs)
          @performance_goal = args[:performance_goal] if args.key?(:performance_goal)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Settings that control how insertion order budget is allocated.
      class InsertionOrderBudget
        include Google::Apis::Core::Hashable
      
        # The type of automation used to manage bid and budget for the insertion order.
        # If this field is unspecified in creation, the value defaults to `
        # INSERTION_ORDER_AUTOMATION_TYPE_NONE`.
        # Corresponds to the JSON property `automationType`
        # @return [String]
        attr_accessor :automation_type
      
        # Required. The list of budget segments. Use a budget segment to specify a
        # specific budget for a given period of time an insertion order is running.
        # Corresponds to the JSON property `budgetSegments`
        # @return [Array<Google::Apis::DisplayvideoV1::InsertionOrderBudgetSegment>]
        attr_accessor :budget_segments
      
        # Required. Immutable. The budget unit specifies whether the budget is currency
        # based or impression based.
        # Corresponds to the JSON property `budgetUnit`
        # @return [String]
        attr_accessor :budget_unit
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @automation_type = args[:automation_type] if args.key?(:automation_type)
          @budget_segments = args[:budget_segments] if args.key?(:budget_segments)
          @budget_unit = args[:budget_unit] if args.key?(:budget_unit)
        end
      end
      
      # Settings that control the budget of a single budget segment.
      class InsertionOrderBudgetSegment
        include Google::Apis::Core::Hashable
      
        # Required. The budget amount the insertion order will spend for the given
        # date_range. The amount is in micros. Must be greater than 0. For example,
        # 500000000 represents 500 standard units of the currency.
        # Corresponds to the JSON property `budgetAmountMicros`
        # @return [Fixnum]
        attr_accessor :budget_amount_micros
      
        # The ID of the campaign budget linked to this insertion order budget segment.
        # Corresponds to the JSON property `campaignBudgetId`
        # @return [Fixnum]
        attr_accessor :campaign_budget_id
      
        # A date range.
        # Corresponds to the JSON property `dateRange`
        # @return [Google::Apis::DisplayvideoV1::DateRange]
        attr_accessor :date_range
      
        # The budget segment description. It can be used to enter Purchase Order
        # information for each budget segment and have that information printed on the
        # invoices. Must be UTF-8 encoded with a length of no more than 80 characters.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @budget_amount_micros = args[:budget_amount_micros] if args.key?(:budget_amount_micros)
          @campaign_budget_id = args[:campaign_budget_id] if args.key?(:campaign_budget_id)
          @date_range = args[:date_range] if args.key?(:date_range)
          @description = args[:description] if args.key?(:description)
        end
      end
      
      # Details of Integral Ad Science settings.
      class IntegralAdScience
        include Google::Apis::Core::Hashable
      
        # The custom segment ID provided by Integral Ad Science. The ID must be between `
        # 1000001` and `1999999`, inclusive.
        # Corresponds to the JSON property `customSegmentId`
        # @return [Array<Fixnum>]
        attr_accessor :custom_segment_id
      
        # Display Viewability section (applicable to display line items only).
        # Corresponds to the JSON property `displayViewability`
        # @return [String]
        attr_accessor :display_viewability
      
        # Brand Safety - **Unrateable**.
        # Corresponds to the JSON property `excludeUnrateable`
        # @return [Boolean]
        attr_accessor :exclude_unrateable
        alias_method :exclude_unrateable?, :exclude_unrateable
      
        # Ad Fraud settings.
        # Corresponds to the JSON property `excludedAdFraudRisk`
        # @return [String]
        attr_accessor :excluded_ad_fraud_risk
      
        # Brand Safety - **Adult content**.
        # Corresponds to the JSON property `excludedAdultRisk`
        # @return [String]
        attr_accessor :excluded_adult_risk
      
        # Brand Safety - **Alcohol**.
        # Corresponds to the JSON property `excludedAlcoholRisk`
        # @return [String]
        attr_accessor :excluded_alcohol_risk
      
        # Brand Safety - **Drugs**.
        # Corresponds to the JSON property `excludedDrugsRisk`
        # @return [String]
        attr_accessor :excluded_drugs_risk
      
        # Brand Safety - **Gambling**.
        # Corresponds to the JSON property `excludedGamblingRisk`
        # @return [String]
        attr_accessor :excluded_gambling_risk
      
        # Brand Safety - **Hate speech**.
        # Corresponds to the JSON property `excludedHateSpeechRisk`
        # @return [String]
        attr_accessor :excluded_hate_speech_risk
      
        # Brand Safety - **Illegal downloads**.
        # Corresponds to the JSON property `excludedIllegalDownloadsRisk`
        # @return [String]
        attr_accessor :excluded_illegal_downloads_risk
      
        # Brand Safety - **Offensive language**.
        # Corresponds to the JSON property `excludedOffensiveLanguageRisk`
        # @return [String]
        attr_accessor :excluded_offensive_language_risk
      
        # Brand Safety - **Violence**.
        # Corresponds to the JSON property `excludedViolenceRisk`
        # @return [String]
        attr_accessor :excluded_violence_risk
      
        # True advertising quality (applicable to Display line items only).
        # Corresponds to the JSON property `traqScoreOption`
        # @return [String]
        attr_accessor :traq_score_option
      
        # Video Viewability Section (applicable to video line items only).
        # Corresponds to the JSON property `videoViewability`
        # @return [String]
        attr_accessor :video_viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_segment_id = args[:custom_segment_id] if args.key?(:custom_segment_id)
          @display_viewability = args[:display_viewability] if args.key?(:display_viewability)
          @exclude_unrateable = args[:exclude_unrateable] if args.key?(:exclude_unrateable)
          @excluded_ad_fraud_risk = args[:excluded_ad_fraud_risk] if args.key?(:excluded_ad_fraud_risk)
          @excluded_adult_risk = args[:excluded_adult_risk] if args.key?(:excluded_adult_risk)
          @excluded_alcohol_risk = args[:excluded_alcohol_risk] if args.key?(:excluded_alcohol_risk)
          @excluded_drugs_risk = args[:excluded_drugs_risk] if args.key?(:excluded_drugs_risk)
          @excluded_gambling_risk = args[:excluded_gambling_risk] if args.key?(:excluded_gambling_risk)
          @excluded_hate_speech_risk = args[:excluded_hate_speech_risk] if args.key?(:excluded_hate_speech_risk)
          @excluded_illegal_downloads_risk = args[:excluded_illegal_downloads_risk] if args.key?(:excluded_illegal_downloads_risk)
          @excluded_offensive_language_risk = args[:excluded_offensive_language_risk] if args.key?(:excluded_offensive_language_risk)
          @excluded_violence_risk = args[:excluded_violence_risk] if args.key?(:excluded_violence_risk)
          @traq_score_option = args[:traq_score_option] if args.key?(:traq_score_option)
          @video_viewability = args[:video_viewability] if args.key?(:video_viewability)
        end
      end
      
      # Integration details of an entry.
      class IntegrationDetails
        include Google::Apis::Core::Hashable
      
        # Additional details of the entry in string format. Must be UTF-8 encoded with a
        # length of no more than 1000 characters.
        # Corresponds to the JSON property `details`
        # @return [String]
        attr_accessor :details
      
        # An external identifier to be associated with the entry. The integration code
        # will show up together with the entry in many places in the system, for example,
        # reporting. Must be UTF-8 encoded with a length of no more than 500 characters.
        # Corresponds to the JSON property `integrationCode`
        # @return [String]
        attr_accessor :integration_code
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @details = args[:details] if args.key?(:details)
          @integration_code = args[:integration_code] if args.key?(:integration_code)
        end
      end
      
      # An inventory source.
      class InventorySource
        include Google::Apis::Core::Hashable
      
        # Whether the inventory source has a guaranteed or non-guaranteed delivery.
        # Corresponds to the JSON property `commitment`
        # @return [String]
        attr_accessor :commitment
      
        # The creative requirements of the inventory source. Not applicable for auction
        # packages.
        # Corresponds to the JSON property `creativeConfigs`
        # @return [Array<Google::Apis::DisplayvideoV1::CreativeConfig>]
        attr_accessor :creative_configs
      
        # The ID in the exchange space that uniquely identifies the inventory source.
        # Must be unique across buyers within each exchange but not necessarily unique
        # across exchanges.
        # Corresponds to the JSON property `dealId`
        # @return [String]
        attr_accessor :deal_id
      
        # The delivery method of the inventory source. * For non-guaranteed inventory
        # sources, the only acceptable value is `
        # INVENTORY_SOURCE_DELIVERY_METHOD_PROGRAMMATIC`. * For guaranteed inventory
        # sources, acceptable values are `INVENTORY_SOURCE_DELIVERY_METHOD_TAG` and `
        # INVENTORY_SOURCE_DELIVERY_METHOD_PROGRAMMATIC`.
        # Corresponds to the JSON property `deliveryMethod`
        # @return [String]
        attr_accessor :delivery_method
      
        # The display name of the inventory source. Must be UTF-8 encoded with a maximum
        # size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # The exchange to which the inventory source belongs.
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        # Output only. The unique ID of the inventory source. Assigned by the system.
        # Corresponds to the JSON property `inventorySourceId`
        # @return [Fixnum]
        attr_accessor :inventory_source_id
      
        # Denotes the type of the inventory source.
        # Corresponds to the JSON property `inventorySourceType`
        # @return [String]
        attr_accessor :inventory_source_type
      
        # Output only. The resource name of the inventory source.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The publisher/seller name of the inventory source.
        # Corresponds to the JSON property `publisherName`
        # @return [String]
        attr_accessor :publisher_name
      
        # The rate related settings of the inventory source.
        # Corresponds to the JSON property `rateDetails`
        # @return [Google::Apis::DisplayvideoV1::RateDetails]
        attr_accessor :rate_details
      
        # The status related settings of the inventory source.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceStatus]
        attr_accessor :status
      
        # A time range.
        # Corresponds to the JSON property `timeRange`
        # @return [Google::Apis::DisplayvideoV1::TimeRange]
        attr_accessor :time_range
      
        # Output only. The timestamp when the inventory source was last updated.
        # Assigned by the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @commitment = args[:commitment] if args.key?(:commitment)
          @creative_configs = args[:creative_configs] if args.key?(:creative_configs)
          @deal_id = args[:deal_id] if args.key?(:deal_id)
          @delivery_method = args[:delivery_method] if args.key?(:delivery_method)
          @display_name = args[:display_name] if args.key?(:display_name)
          @exchange = args[:exchange] if args.key?(:exchange)
          @inventory_source_id = args[:inventory_source_id] if args.key?(:inventory_source_id)
          @inventory_source_type = args[:inventory_source_type] if args.key?(:inventory_source_type)
          @name = args[:name] if args.key?(:name)
          @publisher_name = args[:publisher_name] if args.key?(:publisher_name)
          @rate_details = args[:rate_details] if args.key?(:rate_details)
          @status = args[:status] if args.key?(:status)
          @time_range = args[:time_range] if args.key?(:time_range)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Targeting details for inventory source. This will be populated in the details
      # field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_INVENTORY_SOURCE`.
      class InventorySourceAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the inventory source. Should refer to the inventory_source_id
        # field of an InventorySource resource.
        # Corresponds to the JSON property `inventorySourceId`
        # @return [Fixnum]
        attr_accessor :inventory_source_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_id = args[:inventory_source_id] if args.key?(:inventory_source_id)
        end
      end
      
      # The configuration for display creatives.
      class InventorySourceDisplayCreativeConfig
        include Google::Apis::Core::Hashable
      
        # Dimensions.
        # Corresponds to the JSON property `creativeSize`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :creative_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creative_size = args[:creative_size] if args.key?(:creative_size)
        end
      end
      
      # A filtering option for filtering on Inventory Source entities.
      class InventorySourceFilter
        include Google::Apis::Core::Hashable
      
        # Inventory Sources to download by ID. All IDs must belong to the same
        # Advertiser or Partner specified in CreateSdfDownloadTaskRequest. Leave empty
        # to download all Inventory Sources for the selected Advertiser or Partner.
        # Corresponds to the JSON property `inventorySourceIds`
        # @return [Array<Fixnum>]
        attr_accessor :inventory_source_ids
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_ids = args[:inventory_source_ids] if args.key?(:inventory_source_ids)
        end
      end
      
      # A collection of targetable inventory sources.
      class InventorySourceGroup
        include Google::Apis::Core::Hashable
      
        # Required. The display name of the inventory source group. Must be UTF-8
        # encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the inventory source group. Assigned by the
        # system.
        # Corresponds to the JSON property `inventorySourceGroupId`
        # @return [Fixnum]
        attr_accessor :inventory_source_group_id
      
        # Output only. The resource name of the inventory source group.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @inventory_source_group_id = args[:inventory_source_group_id] if args.key?(:inventory_source_group_id)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Targeting details for inventory source group. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_INVENTORY_SOURCE_GROUP`.
      class InventorySourceGroupAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the inventory source group. Should refer to the
        # inventory_source_group_id field of an InventorySourceGroup resource.
        # Corresponds to the JSON property `inventorySourceGroupId`
        # @return [Fixnum]
        attr_accessor :inventory_source_group_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_group_id = args[:inventory_source_group_id] if args.key?(:inventory_source_group_id)
        end
      end
      
      # The status related settings of the inventory source.
      class InventorySourceStatus
        include Google::Apis::Core::Hashable
      
        # Output only. The configuration status of the inventory source. Only applicable
        # for guaranteed inventory sources. Acceptable values are `
        # INVENTORY_SOURCE_CONFIG_STATUS_PENDING` and `
        # INVENTORY_SOURCE_CONFIG_STATUS_COMPLETED`. An inventory source must be
        # configured (fill in the required fields, choose creatives, and select a
        # default campaign) before it can serve.
        # Corresponds to the JSON property `configStatus`
        # @return [String]
        attr_accessor :config_status
      
        # The user-provided reason for pausing this inventory source. Must not exceed
        # 100 characters. Only applicable when entity_status is set to `
        # ENTITY_STATUS_PAUSED`.
        # Corresponds to the JSON property `entityPauseReason`
        # @return [String]
        attr_accessor :entity_pause_reason
      
        # Whether or not the inventory source is servable. Acceptable values are `
        # ENTITY_STATUS_ACTIVE`, `ENTITY_STATUS_ARCHIVED`, and `ENTITY_STATUS_PAUSED`.
        # Default value is `ENTITY_STATUS_ACTIVE`.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Output only. The seller-provided reason for pausing this inventory source.
        # Only applicable for inventory sources synced directly from the publishers and
        # when seller_status is set to `ENTITY_STATUS_PAUSED`.
        # Corresponds to the JSON property `sellerPauseReason`
        # @return [String]
        attr_accessor :seller_pause_reason
      
        # Output only. The status set by the seller for the inventory source. Only
        # applicable for inventory sources synced directly from the publishers.
        # Acceptable values are `ENTITY_STATUS_ACTIVE` and `ENTITY_STATUS_PAUSED`.
        # Corresponds to the JSON property `sellerStatus`
        # @return [String]
        attr_accessor :seller_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @config_status = args[:config_status] if args.key?(:config_status)
          @entity_pause_reason = args[:entity_pause_reason] if args.key?(:entity_pause_reason)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @seller_pause_reason = args[:seller_pause_reason] if args.key?(:seller_pause_reason)
          @seller_status = args[:seller_status] if args.key?(:seller_status)
        end
      end
      
      # The configuration for video creatives.
      class InventorySourceVideoCreativeConfig
        include Google::Apis::Core::Hashable
      
        # The duration requirements for the video creatives that can be assigned to the
        # inventory source.
        # Corresponds to the JSON property `duration`
        # @return [String]
        attr_accessor :duration
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @duration = args[:duration] if args.key?(:duration)
        end
      end
      
      # Details for assigned keyword targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_KEYWORD`.
      class KeywordAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The keyword, for example `car insurance`. Positive keyword cannot be
        # offensive word. Must be UTF-8 encoded with a maximum size of 255 bytes.
        # Maximum number of characters is 80. Maximum number of words is 10.
        # Corresponds to the JSON property `keyword`
        # @return [String]
        attr_accessor :keyword
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @keyword = args[:keyword] if args.key?(:keyword)
          @negative = args[:negative] if args.key?(:negative)
        end
      end
      
      # Details for assigned language targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_LANGUAGE`.
      class LanguageAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the language (e.g., "French").
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted. All assigned language
        # targeting options on the same line item must have the same value for this
        # field.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_LANGUAGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable language. This will be populated in the
      # language_details field when targeting_type is `TARGETING_TYPE_LANGUAGE`.
      class LanguageTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the language (e.g., "French").
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # A single line item.
      class LineItem
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the line item belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Settings that control the bid strategy. Bid strategy determines the bid price.
        # Corresponds to the JSON property `bidStrategy`
        # @return [Google::Apis::DisplayvideoV1::BiddingStrategy]
        attr_accessor :bid_strategy
      
        # Settings that control how budget is allocated.
        # Corresponds to the JSON property `budget`
        # @return [Google::Apis::DisplayvideoV1::LineItemBudget]
        attr_accessor :budget
      
        # Output only. The unique ID of the campaign that the line item belongs to.
        # Corresponds to the JSON property `campaignId`
        # @return [Fixnum]
        attr_accessor :campaign_id
      
        # Settings that control how conversions are counted. All post-click conversions
        # will be counted. A percentage value can be set for post-view conversions
        # counting.
        # Corresponds to the JSON property `conversionCounting`
        # @return [Google::Apis::DisplayvideoV1::ConversionCountingConfig]
        attr_accessor :conversion_counting
      
        # The IDs of the creatives associated with the line item.
        # Corresponds to the JSON property `creativeIds`
        # @return [Array<Fixnum>]
        attr_accessor :creative_ids
      
        # Required. The display name of the line item. Must be UTF-8 encoded with a
        # maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not the line item can spend its budget and bid
        # on inventory. * For CreateLineItem method, only `ENTITY_STATUS_DRAFT` is
        # allowed. To activate a line item, use UpdateLineItem method and update the
        # status to `ENTITY_STATUS_ACTIVE` after creation. * A line item cannot be
        # changed back to `ENTITY_STATUS_DRAFT` status from any other status. * If the
        # line item's parent insertion order is not active, the line item can't spend
        # its budget even if its own status is `ENTITY_STATUS_ACTIVE`.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Settings that control the active duration of a line item.
        # Corresponds to the JSON property `flight`
        # @return [Google::Apis::DisplayvideoV1::LineItemFlight]
        attr_accessor :flight
      
        # Settings that control the number of times a user may be shown with the same ad
        # during a given time period.
        # Corresponds to the JSON property `frequencyCap`
        # @return [Google::Apis::DisplayvideoV1::FrequencyCap]
        attr_accessor :frequency_cap
      
        # Required. Immutable. The unique ID of the insertion order that the line item
        # belongs to.
        # Corresponds to the JSON property `insertionOrderId`
        # @return [Fixnum]
        attr_accessor :insertion_order_id
      
        # Integration details of an entry.
        # Corresponds to the JSON property `integrationDetails`
        # @return [Google::Apis::DisplayvideoV1::IntegrationDetails]
        attr_accessor :integration_details
      
        # The IDs of the private inventory sources assigned to the line item.
        # Corresponds to the JSON property `inventorySourceIds`
        # @return [Array<Fixnum>]
        attr_accessor :inventory_source_ids
      
        # Output only. The unique ID of the line item. Assigned by the system.
        # Corresponds to the JSON property `lineItemId`
        # @return [Fixnum]
        attr_accessor :line_item_id
      
        # Required. Immutable. The type of the line item.
        # Corresponds to the JSON property `lineItemType`
        # @return [String]
        attr_accessor :line_item_type
      
        # A mobile app promoted by a mobile app install line item.
        # Corresponds to the JSON property `mobileApp`
        # @return [Google::Apis::DisplayvideoV1::MobileApp]
        attr_accessor :mobile_app
      
        # Output only. The resource name of the line item.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Settings that control the rate at which a budget is spent.
        # Corresponds to the JSON property `pacing`
        # @return [Google::Apis::DisplayvideoV1::Pacing]
        attr_accessor :pacing
      
        # The partner costs associated with the line item. If absent or empty in
        # CreateLineItem method, the newly created line item will inherit partner costs
        # from its parent insertion order.
        # Corresponds to the JSON property `partnerCosts`
        # @return [Array<Google::Apis::DisplayvideoV1::PartnerCost>]
        attr_accessor :partner_costs
      
        # Settings that control how partner revenue is calculated.
        # Corresponds to the JSON property `partnerRevenueModel`
        # @return [Google::Apis::DisplayvideoV1::PartnerRevenueModel]
        attr_accessor :partner_revenue_model
      
        # Settings that control the targeting expansion of the line item. Targeting
        # expansion allows the line item to reach a larger audience based on the
        # original audience list and the targeting expansion level.
        # Corresponds to the JSON property `targetingExpansion`
        # @return [Google::Apis::DisplayvideoV1::TargetingExpansionConfig]
        attr_accessor :targeting_expansion
      
        # Output only. The timestamp when the line item was last updated. Assigned by
        # the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        # Output only. The warning messages generated by the line item. These warnings
        # do not block saving the line item, but some may block the line item from
        # running.
        # Corresponds to the JSON property `warningMessages`
        # @return [Array<String>]
        attr_accessor :warning_messages
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @bid_strategy = args[:bid_strategy] if args.key?(:bid_strategy)
          @budget = args[:budget] if args.key?(:budget)
          @campaign_id = args[:campaign_id] if args.key?(:campaign_id)
          @conversion_counting = args[:conversion_counting] if args.key?(:conversion_counting)
          @creative_ids = args[:creative_ids] if args.key?(:creative_ids)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @flight = args[:flight] if args.key?(:flight)
          @frequency_cap = args[:frequency_cap] if args.key?(:frequency_cap)
          @insertion_order_id = args[:insertion_order_id] if args.key?(:insertion_order_id)
          @integration_details = args[:integration_details] if args.key?(:integration_details)
          @inventory_source_ids = args[:inventory_source_ids] if args.key?(:inventory_source_ids)
          @line_item_id = args[:line_item_id] if args.key?(:line_item_id)
          @line_item_type = args[:line_item_type] if args.key?(:line_item_type)
          @mobile_app = args[:mobile_app] if args.key?(:mobile_app)
          @name = args[:name] if args.key?(:name)
          @pacing = args[:pacing] if args.key?(:pacing)
          @partner_costs = args[:partner_costs] if args.key?(:partner_costs)
          @partner_revenue_model = args[:partner_revenue_model] if args.key?(:partner_revenue_model)
          @targeting_expansion = args[:targeting_expansion] if args.key?(:targeting_expansion)
          @update_time = args[:update_time] if args.key?(:update_time)
          @warning_messages = args[:warning_messages] if args.key?(:warning_messages)
        end
      end
      
      # Settings that control how budget is allocated.
      class LineItemBudget
        include Google::Apis::Core::Hashable
      
        # Required. The type of the budget allocation. `
        # LINE_ITEM_BUDGET_ALLOCATION_TYPE_AUTOMATIC` is only applicable when automatic
        # budget allocation is enabled for the parent insertion order.
        # Corresponds to the JSON property `budgetAllocationType`
        # @return [String]
        attr_accessor :budget_allocation_type
      
        # Output only. The budget unit specifies whether the budget is currency based or
        # impression based. This value is inherited from the parent insertion order.
        # Corresponds to the JSON property `budgetUnit`
        # @return [String]
        attr_accessor :budget_unit
      
        # The maximum budget amount the line item will spend. Must be greater than 0.
        # When budget_allocation_type is: * `LINE_ITEM_BUDGET_ALLOCATION_TYPE_AUTOMATIC`,
        # this field is immutable and is set by the system. * `
        # LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED`, if budget_unit is: - `
        # BUDGET_UNIT_CURRENCY`, this field represents maximum budget amount to spend,
        # in micros of the advertiser's currency. For example, 1500000 represents 1.5
        # standard units of the currency. - `BUDGET_UNIT_IMPRESSIONS`, this field
        # represents the maximum number of impressions to serve. * `
        # LINE_ITEM_BUDGET_ALLOCATION_TYPE_UNLIMITED`, this field is not applicable and
        # will be ignored by the system.
        # Corresponds to the JSON property `maxAmount`
        # @return [Fixnum]
        attr_accessor :max_amount
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @budget_allocation_type = args[:budget_allocation_type] if args.key?(:budget_allocation_type)
          @budget_unit = args[:budget_unit] if args.key?(:budget_unit)
          @max_amount = args[:max_amount] if args.key?(:max_amount)
        end
      end
      
      # Settings that control the active duration of a line item.
      class LineItemFlight
        include Google::Apis::Core::Hashable
      
        # A date range.
        # Corresponds to the JSON property `dateRange`
        # @return [Google::Apis::DisplayvideoV1::DateRange]
        attr_accessor :date_range
      
        # Required. The type of the line item's flight dates.
        # Corresponds to the JSON property `flightDateType`
        # @return [String]
        attr_accessor :flight_date_type
      
        # The ID of the manual trigger associated with the line item. * Required when
        # flight_date_type is `LINE_ITEM_FLIGHT_DATE_TYPE_TRIGGER`. Must not be set
        # otherwise. * When set, the line item's flight dates are inherited from its
        # parent insertion order. * Active line items will spend when the selected
        # trigger is activated within the parent insertion order's flight dates.
        # Corresponds to the JSON property `triggerId`
        # @return [Fixnum]
        attr_accessor :trigger_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @date_range = args[:date_range] if args.key?(:date_range)
          @flight_date_type = args[:flight_date_type] if args.key?(:flight_date_type)
          @trigger_id = args[:trigger_id] if args.key?(:trigger_id)
        end
      end
      
      # Response message for ListAdvertiserAssignedTargetingOptions.
      class ListAdvertiserAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options. This list will be absent if empty.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # A token identifying the next page of results. This value should be specified
        # as the pageToken in a subsequent ListAdvertiserAssignedTargetingOptionsRequest
        # to fetch the next page of results. This token will be absent if there are no
        # more assigned_targeting_options to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListAdvertisersResponse
        include Google::Apis::Core::Hashable
      
        # The list of advertisers. This list will be absent if empty.
        # Corresponds to the JSON property `advertisers`
        # @return [Array<Google::Apis::DisplayvideoV1::Advertiser>]
        attr_accessor :advertisers
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListAdvertisers` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertisers = args[:advertisers] if args.key?(:advertisers)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for AssignedInventorySourceService.
      # ListAssignedInventorySources.
      class ListAssignedInventorySourcesResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned inventory sources. This list will be absent if empty.
        # Corresponds to the JSON property `assignedInventorySources`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedInventorySource>]
        attr_accessor :assigned_inventory_sources
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListAssignedInventorySources`
        # method to retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_inventory_sources = args[:assigned_inventory_sources] if args.key?(:assigned_inventory_sources)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for AssignedLocationService.ListAssignedLocations.
      class ListAssignedLocationsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned locations. This list will be absent if empty.
        # Corresponds to the JSON property `assignedLocations`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedLocation>]
        attr_accessor :assigned_locations
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListAssignedLocations` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_locations = args[:assigned_locations] if args.key?(:assigned_locations)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCampaignsResponse
        include Google::Apis::Core::Hashable
      
        # The list of campaigns. This list will be absent if empty.
        # Corresponds to the JSON property `campaigns`
        # @return [Array<Google::Apis::DisplayvideoV1::Campaign>]
        attr_accessor :campaigns
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListCampaigns` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @campaigns = args[:campaigns] if args.key?(:campaigns)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListChannelsResponse
        include Google::Apis::Core::Hashable
      
        # The list of channels. This list will be absent if empty.
        # Corresponds to the JSON property `channels`
        # @return [Array<Google::Apis::DisplayvideoV1::Channel>]
        attr_accessor :channels
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListChannels` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @channels = args[:channels] if args.key?(:channels)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCombinedAudiencesResponse
        include Google::Apis::Core::Hashable
      
        # The list of combined audiences. This list will be absent if empty.
        # Corresponds to the JSON property `combinedAudiences`
        # @return [Array<Google::Apis::DisplayvideoV1::CombinedAudience>]
        attr_accessor :combined_audiences
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListCombinedAudiences` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @combined_audiences = args[:combined_audiences] if args.key?(:combined_audiences)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCreativesResponse
        include Google::Apis::Core::Hashable
      
        # The list of creatives. This list will be absent if empty.
        # Corresponds to the JSON property `creatives`
        # @return [Array<Google::Apis::DisplayvideoV1::Creative>]
        attr_accessor :creatives
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListCreativesRequest` method to
        # retrieve the next page of results. If this field is null, it means this is the
        # last page.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creatives = args[:creatives] if args.key?(:creatives)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCustomBiddingAlgorithmsResponse
        include Google::Apis::Core::Hashable
      
        # The list of custom bidding algorithms. This list will be absent if empty.
        # Corresponds to the JSON property `customBiddingAlgorithms`
        # @return [Array<Google::Apis::DisplayvideoV1::CustomBiddingAlgorithm>]
        attr_accessor :custom_bidding_algorithms
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListCustomBiddingAlgorithmsRequest`
        # method to retrieve the next page of results. If this field is null, it means
        # this is the last page.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_bidding_algorithms = args[:custom_bidding_algorithms] if args.key?(:custom_bidding_algorithms)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCustomListsResponse
        include Google::Apis::Core::Hashable
      
        # The list of custom lists. This list will be absent if empty.
        # Corresponds to the JSON property `customLists`
        # @return [Array<Google::Apis::DisplayvideoV1::CustomList>]
        attr_accessor :custom_lists
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListCustomLists` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_lists = args[:custom_lists] if args.key?(:custom_lists)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListFirstAndThirdPartyAudiencesResponse
        include Google::Apis::Core::Hashable
      
        # The list of first and third party audiences. Audience size properties will not
        # be included. This list will be absent if empty.
        # Corresponds to the JSON property `firstAndThirdPartyAudiences`
        # @return [Array<Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudience>]
        attr_accessor :first_and_third_party_audiences
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListFirstAndThirdPartyAudiences`
        # method to retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @first_and_third_party_audiences = args[:first_and_third_party_audiences] if args.key?(:first_and_third_party_audiences)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListGoogleAudiencesResponse
        include Google::Apis::Core::Hashable
      
        # The list of Google audiences. This list will be absent if empty.
        # Corresponds to the JSON property `googleAudiences`
        # @return [Array<Google::Apis::DisplayvideoV1::GoogleAudience>]
        attr_accessor :google_audiences
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListGoogleAudiences` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @google_audiences = args[:google_audiences] if args.key?(:google_audiences)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListInsertionOrdersResponse
        include Google::Apis::Core::Hashable
      
        # The list of insertion orders. This list will be absent if empty.
        # Corresponds to the JSON property `insertionOrders`
        # @return [Array<Google::Apis::DisplayvideoV1::InsertionOrder>]
        attr_accessor :insertion_orders
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListInsertionOrders` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @insertion_orders = args[:insertion_orders] if args.key?(:insertion_orders)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for InventorySourceGroupService.ListInventorySourceGroups.
      class ListInventorySourceGroupsResponse
        include Google::Apis::Core::Hashable
      
        # The list of inventory source groups. This list will be absent if empty.
        # Corresponds to the JSON property `inventorySourceGroups`
        # @return [Array<Google::Apis::DisplayvideoV1::InventorySourceGroup>]
        attr_accessor :inventory_source_groups
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListInventorySourceGroups` method
        # to retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_groups = args[:inventory_source_groups] if args.key?(:inventory_source_groups)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListInventorySourcesResponse
        include Google::Apis::Core::Hashable
      
        # The list of inventory sources. This list will be absent if empty.
        # Corresponds to the JSON property `inventorySources`
        # @return [Array<Google::Apis::DisplayvideoV1::InventorySource>]
        attr_accessor :inventory_sources
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListInventorySources` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_sources = args[:inventory_sources] if args.key?(:inventory_sources)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for ListLineItemAssignedTargetingOptions.
      class ListLineItemAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options. This list will be absent if empty.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # A token identifying the next page of results. This value should be specified
        # as the pageToken in a subsequent ListLineItemAssignedTargetingOptionsRequest
        # to fetch the next page of results. This token will be absent if there are no
        # more assigned_targeting_options to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListLineItemsResponse
        include Google::Apis::Core::Hashable
      
        # The list of line items. This list will be absent if empty.
        # Corresponds to the JSON property `lineItems`
        # @return [Array<Google::Apis::DisplayvideoV1::LineItem>]
        attr_accessor :line_items
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListLineItems` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @line_items = args[:line_items] if args.key?(:line_items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListLocationListsResponse
        include Google::Apis::Core::Hashable
      
        # The list of location lists. This list will be absent if empty.
        # Corresponds to the JSON property `locationLists`
        # @return [Array<Google::Apis::DisplayvideoV1::LocationList>]
        attr_accessor :location_lists
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListLocationLists` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @location_lists = args[:location_lists] if args.key?(:location_lists)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListManualTriggersResponse
        include Google::Apis::Core::Hashable
      
        # The list of manual triggers. This list will be absent if empty.
        # Corresponds to the JSON property `manualTriggers`
        # @return [Array<Google::Apis::DisplayvideoV1::ManualTrigger>]
        attr_accessor :manual_triggers
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListManualTriggers` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @manual_triggers = args[:manual_triggers] if args.key?(:manual_triggers)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for NegativeKeywordListService.ListNegativeKeywordLists.
      class ListNegativeKeywordListsResponse
        include Google::Apis::Core::Hashable
      
        # The list of negative keyword lists. This list will be absent if empty.
        # Corresponds to the JSON property `negativeKeywordLists`
        # @return [Array<Google::Apis::DisplayvideoV1::NegativeKeywordList>]
        attr_accessor :negative_keyword_lists
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListNegativeKeywordLists` method
        # to retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative_keyword_lists = args[:negative_keyword_lists] if args.key?(:negative_keyword_lists)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for NegativeKeywordService.ListNegativeKeywords.
      class ListNegativeKeywordsResponse
        include Google::Apis::Core::Hashable
      
        # The list of negative keywords. This list will be absent if empty.
        # Corresponds to the JSON property `negativeKeywords`
        # @return [Array<Google::Apis::DisplayvideoV1::NegativeKeyword>]
        attr_accessor :negative_keywords
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListNegativeKeywords` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative_keywords = args[:negative_keywords] if args.key?(:negative_keywords)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListPartnerAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options. This list will be absent if empty.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # A token identifying the next page of results. This value should be specified
        # as the pageToken in a subsequent ListPartnerAssignedTargetingOptionsRequest to
        # fetch the next page of results. This token will be absent if there are no more
        # assigned_targeting_options to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListPartnersResponse
        include Google::Apis::Core::Hashable
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListPartners` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The list of partners. This list will be absent if empty.
        # Corresponds to the JSON property `partners`
        # @return [Array<Google::Apis::DisplayvideoV1::Partner>]
        attr_accessor :partners
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @partners = args[:partners] if args.key?(:partners)
        end
      end
      
      # Response message for SiteService.ListSites.
      class ListSitesResponse
        include Google::Apis::Core::Hashable
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListSites` method to retrieve the
        # next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The list of sites. This list will be absent if empty.
        # Corresponds to the JSON property `sites`
        # @return [Array<Google::Apis::DisplayvideoV1::Site>]
        attr_accessor :sites
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @sites = args[:sites] if args.key?(:sites)
        end
      end
      
      # Response message for ListTargetingOptions.
      class ListTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListTargetingOptions` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The list of targeting options. This list will be absent if empty.
        # Corresponds to the JSON property `targetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::TargetingOption>]
        attr_accessor :targeting_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @targeting_options = args[:targeting_options] if args.key?(:targeting_options)
        end
      end
      
      # 
      class ListUsersResponse
        include Google::Apis::Core::Hashable
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `ListUsers` method to retrieve the
        # next page of results. This token will be absent if there are no more results
        # to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The list of users. This list will be absent if empty.
        # Corresponds to the JSON property `users`
        # @return [Array<Google::Apis::DisplayvideoV1::User>]
        attr_accessor :users
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @users = args[:users] if args.key?(:users)
        end
      end
      
      # A list of locations used for targeting.
      class LocationList
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. The unique ID of the advertiser the location list belongs
        # to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Required. The display name of the location list. Must be UTF-8 encoded with a
        # maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the location list. Assigned by the system.
        # Corresponds to the JSON property `locationListId`
        # @return [Fixnum]
        attr_accessor :location_list_id
      
        # Required. Immutable. The type of location. All locations in the list will
        # share this type.
        # Corresponds to the JSON property `locationType`
        # @return [String]
        attr_accessor :location_type
      
        # Output only. The resource name of the location list.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @location_list_id = args[:location_list_id] if args.key?(:location_list_id)
          @location_type = args[:location_type] if args.key?(:location_type)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Specifies how many days into the past to look when determining whether to
      # record a conversion.
      class LookbackWindow
        include Google::Apis::Core::Hashable
      
        # Lookback window, in days, from the last time a given user clicked on one of
        # your ads.
        # Corresponds to the JSON property `clickDays`
        # @return [Fixnum]
        attr_accessor :click_days
      
        # Lookback window, in days, from the last time a given user viewed one of your
        # ads.
        # Corresponds to the JSON property `impressionDays`
        # @return [Fixnum]
        attr_accessor :impression_days
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @click_days = args[:click_days] if args.key?(:click_days)
          @impression_days = args[:impression_days] if args.key?(:impression_days)
        end
      end
      
      # A single manual trigger in Display & Video 360.
      class ManualTrigger
        include Google::Apis::Core::Hashable
      
        # Required. The maximum duration of each activation in minutes. Must be between
        # 1 and 360 inclusive. After this duration, the trigger will be automatically
        # deactivated.
        # Corresponds to the JSON property `activationDurationMinutes`
        # @return [Fixnum]
        attr_accessor :activation_duration_minutes
      
        # Required. Immutable. The unique ID of the advertiser that the manual trigger
        # belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Required. The display name of the manual trigger. Must be UTF-8 encoded with a
        # maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The timestamp of the trigger's latest activation.
        # Corresponds to the JSON property `latestActivationTime`
        # @return [String]
        attr_accessor :latest_activation_time
      
        # Output only. The resource name of the manual trigger.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The state of the manual trigger. Will be set to the `INACTIVE`
        # state upon creation.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Output only. The unique ID of the manual trigger.
        # Corresponds to the JSON property `triggerId`
        # @return [Fixnum]
        attr_accessor :trigger_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @activation_duration_minutes = args[:activation_duration_minutes] if args.key?(:activation_duration_minutes)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @latest_activation_time = args[:latest_activation_time] if args.key?(:latest_activation_time)
          @name = args[:name] if args.key?(:name)
          @state = args[:state] if args.key?(:state)
          @trigger_id = args[:trigger_id] if args.key?(:trigger_id)
        end
      end
      
      # A strategy that automatically adjusts the bid to optimize a specified
      # performance goal while spending the full budget.
      class MaximizeSpendBidStrategy
        include Google::Apis::Core::Hashable
      
        # The ID of the Custom Bidding Algorithm used by this strategy. Only applicable
        # when performance_goal_type is set to `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO`.
        # Corresponds to the JSON property `customBiddingAlgorithmId`
        # @return [Fixnum]
        attr_accessor :custom_bidding_algorithm_id
      
        # The maximum average CPM that may be bid, in micros of the advertiser's
        # currency. Must be greater than or equal to a billable unit of the given
        # currency. For example, 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `maxAverageCpmBidAmountMicros`
        # @return [Fixnum]
        attr_accessor :max_average_cpm_bid_amount_micros
      
        # Required. The type of the performance goal that the bidding strategy tries to
        # minimize while spending the full budget. `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM` is not supported for this
        # strategy.
        # Corresponds to the JSON property `performanceGoalType`
        # @return [String]
        attr_accessor :performance_goal_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_bidding_algorithm_id = args[:custom_bidding_algorithm_id] if args.key?(:custom_bidding_algorithm_id)
          @max_average_cpm_bid_amount_micros = args[:max_average_cpm_bid_amount_micros] if args.key?(:max_average_cpm_bid_amount_micros)
          @performance_goal_type = args[:performance_goal_type] if args.key?(:performance_goal_type)
        end
      end
      
      # Measurement settings of a partner.
      class MeasurementConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not to report DV360 cost to CM360.
        # Corresponds to the JSON property `dv360ToCmCostReportingEnabled`
        # @return [Boolean]
        attr_accessor :dv360_to_cm_cost_reporting_enabled
        alias_method :dv360_to_cm_cost_reporting_enabled?, :dv360_to_cm_cost_reporting_enabled
      
        # Whether or not to include DV360 data in CM360 data transfer reports.
        # Corresponds to the JSON property `dv360ToCmDataSharingEnabled`
        # @return [Boolean]
        attr_accessor :dv360_to_cm_data_sharing_enabled
        alias_method :dv360_to_cm_data_sharing_enabled?, :dv360_to_cm_data_sharing_enabled
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dv360_to_cm_cost_reporting_enabled = args[:dv360_to_cm_cost_reporting_enabled] if args.key?(:dv360_to_cm_cost_reporting_enabled)
          @dv360_to_cm_data_sharing_enabled = args[:dv360_to_cm_data_sharing_enabled] if args.key?(:dv360_to_cm_data_sharing_enabled)
        end
      end
      
      # A mobile app promoted by a mobile app install line item.
      class MobileApp
        include Google::Apis::Core::Hashable
      
        # Required. The ID of the app provided by the platform store. Android apps are
        # identified by the bundle ID used by Android's Play store, such as `com.google.
        # android.gm`. iOS apps are identified by a nine-digit app ID used by Apple's
        # App store, such as `422689480`.
        # Corresponds to the JSON property `appId`
        # @return [String]
        attr_accessor :app_id
      
        # Output only. The app name.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The app platform.
        # Corresponds to the JSON property `platform`
        # @return [String]
        attr_accessor :platform
      
        # Output only. The app publisher.
        # Corresponds to the JSON property `publisher`
        # @return [String]
        attr_accessor :publisher
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_id = args[:app_id] if args.key?(:app_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @platform = args[:platform] if args.key?(:platform)
          @publisher = args[:publisher] if args.key?(:publisher)
        end
      end
      
      # Represents an amount of money with its currency type.
      class Money
        include Google::Apis::Core::Hashable
      
        # The three-letter currency code defined in ISO 4217.
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # Number of nano (10^-9) units of the amount. The value must be between -999,999,
        # 999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be
        # positive or zero. If `units` is zero, `nanos` can be positive, zero, or
        # negative. If `units` is negative, `nanos` must be negative or zero. For
        # example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        # Corresponds to the JSON property `nanos`
        # @return [Fixnum]
        attr_accessor :nanos
      
        # The whole units of the amount. For example if `currencyCode` is `"USD"`, then
        # 1 unit is one US dollar.
        # Corresponds to the JSON property `units`
        # @return [Fixnum]
        attr_accessor :units
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @nanos = args[:nanos] if args.key?(:nanos)
          @units = args[:units] if args.key?(:units)
        end
      end
      
      # A negatively targeted keyword that belongs to a negative keyword list.
      class NegativeKeyword
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. The negatively targeted keyword, for example `car
        # insurance`. Must be UTF-8 encoded with a maximum size of 255 bytes. Maximum
        # number of characters is 80. Maximum number of words is 10. Valid characters
        # are restricted to ASCII characters only. The only URL-escaping permitted is
        # for representing whitespace between words. Leading or trailing whitespace is
        # ignored.
        # Corresponds to the JSON property `keywordValue`
        # @return [String]
        attr_accessor :keyword_value
      
        # Output only. The resource name of the negative keyword.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @keyword_value = args[:keyword_value] if args.key?(:keyword_value)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # A list of negative keywords used for targeting.
      class NegativeKeywordList
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the negative keyword list belongs
        # to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Required. The display name of the negative keyword list. Must be UTF-8 encoded
        # with a maximum size of 255 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the negative keyword list.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The unique ID of the negative keyword list. Assigned by the
        # system.
        # Corresponds to the JSON property `negativeKeywordListId`
        # @return [Fixnum]
        attr_accessor :negative_keyword_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @negative_keyword_list_id = args[:negative_keyword_list_id] if args.key?(:negative_keyword_list_id)
        end
      end
      
      # Targeting details for negative keyword list. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_NEGATIVE_KEYWORD_LIST`.
      class NegativeKeywordListAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the negative keyword list. Should refer to the
        # negative_keyword_list_id field of a NegativeKeywordList resource.
        # Corresponds to the JSON property `negativeKeywordListId`
        # @return [Fixnum]
        attr_accessor :negative_keyword_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative_keyword_list_id = args[:negative_keyword_list_id] if args.key?(:negative_keyword_list_id)
        end
      end
      
      # OBA Icon for a Creative
      class ObaIcon
        include Google::Apis::Core::Hashable
      
        # Required. The click tracking URL of the OBA icon. Only URLs of the following
        # domains are allowed: * https://info.evidon.com * https://l.betrad.com
        # Corresponds to the JSON property `clickTrackingUrl`
        # @return [String]
        attr_accessor :click_tracking_url
      
        # Dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :dimensions
      
        # Required. The landing page URL of the OBA icon. Only URLs of the following
        # domains are allowed: * https://info.evidon.com * https://l.betrad.com
        # Corresponds to the JSON property `landingPageUrl`
        # @return [String]
        attr_accessor :landing_page_url
      
        # The position of the OBA icon on the creative.
        # Corresponds to the JSON property `position`
        # @return [String]
        attr_accessor :position
      
        # The program of the OBA icon. For example: “AdChoices”.
        # Corresponds to the JSON property `program`
        # @return [String]
        attr_accessor :program
      
        # The MIME type of the OBA icon resource.
        # Corresponds to the JSON property `resourceMimeType`
        # @return [String]
        attr_accessor :resource_mime_type
      
        # The URL of the OBA icon resource.
        # Corresponds to the JSON property `resourceUrl`
        # @return [String]
        attr_accessor :resource_url
      
        # Required. The view tracking URL of the OBA icon. Only URLs of the following
        # domains are allowed: * https://info.evidon.com * https://l.betrad.com
        # Corresponds to the JSON property `viewTrackingUrl`
        # @return [String]
        attr_accessor :view_tracking_url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @click_tracking_url = args[:click_tracking_url] if args.key?(:click_tracking_url)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @landing_page_url = args[:landing_page_url] if args.key?(:landing_page_url)
          @position = args[:position] if args.key?(:position)
          @program = args[:program] if args.key?(:program)
          @resource_mime_type = args[:resource_mime_type] if args.key?(:resource_mime_type)
          @resource_url = args[:resource_url] if args.key?(:resource_url)
          @view_tracking_url = args[:view_tracking_url] if args.key?(:view_tracking_url)
        end
      end
      
      # On screen position targeting option details. This will be populated in the
      # on_screen_position_details field when targeting_type is `
      # TARGETING_TYPE_ON_SCREEN_POSITION`.
      class OnScreenPositionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The on screen position.
        # Corresponds to the JSON property `onScreenPosition`
        # @return [String]
        attr_accessor :on_screen_position
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_ON_SCREEN_POSITION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @on_screen_position = args[:on_screen_position] if args.key?(:on_screen_position)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable on screen position, which could be used by display and
      # video ads. This will be populated in the on_screen_position_details field when
      # targeting_type is `TARGETING_TYPE_ON_SCREEN_POSITION`.
      class OnScreenPositionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The on screen position.
        # Corresponds to the JSON property `onScreenPosition`
        # @return [String]
        attr_accessor :on_screen_position
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @on_screen_position = args[:on_screen_position] if args.key?(:on_screen_position)
        end
      end
      
      # Assigned operating system targeting option details. This will be populated in
      # the operating_system_details field when targeting_type is `
      # TARGETING_TYPE_OPERATING_SYSTEM`.
      class OperatingSystemAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the operating system.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting option ID populated in targeting_option_id field when
        # targeting_type is `TARGETING_TYPE_OPERATING_SYSTEM`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable operating system. This will be populated in the
      # operating_system_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_OPERATING_SYSTEM`.
      class OperatingSystemTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the operating system.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # This resource represents a long-running operation that is the result of a
      # network API call.
      class Operation
        include Google::Apis::Core::Hashable
      
        # If the value is `false`, it means the operation is still in progress. If `true`
        # , the operation is completed, and either `error` or `response` is available.
        # Corresponds to the JSON property `done`
        # @return [Boolean]
        attr_accessor :done
        alias_method :done?, :done
      
        # The `Status` type defines a logical error model that is suitable for different
        # programming environments, including REST APIs and RPC APIs. It is used by [
        # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
        # data: error code, error message, and error details. You can find out more
        # about this error model and how to work with it in the [API Design Guide](https:
        # //cloud.google.com/apis/design/errors).
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::DisplayvideoV1::Status]
        attr_accessor :error
      
        # Service-specific metadata associated with the operation. It typically contains
        # progress information and common metadata such as create time. Some services
        # might not provide such metadata. Any method that returns a long-running
        # operation should document the metadata type, if any.
        # Corresponds to the JSON property `metadata`
        # @return [Hash<String,Object>]
        attr_accessor :metadata
      
        # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the `name` should
        # be a resource name ending with `operations/`unique_id``.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The normal response of the operation in case of success. If the original
        # method returns no data on success, such as `Delete`, the response is `google.
        # protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`,
        # the response should be the resource. For other methods, the response should
        # have the type `XxxResponse`, where `Xxx` is the original method name. For
        # example, if the original method name is `TakeSnapshot()`, the inferred
        # response type is `TakeSnapshotResponse`.
        # Corresponds to the JSON property `response`
        # @return [Hash<String,Object>]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @done = args[:done] if args.key?(:done)
          @error = args[:error] if args.key?(:error)
          @metadata = args[:metadata] if args.key?(:metadata)
          @name = args[:name] if args.key?(:name)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # Settings that control the rate at which a budget is spent.
      class Pacing
        include Google::Apis::Core::Hashable
      
        # Maximum number of impressions to serve every day. Applicable when the budget
        # is impression based. Must be greater than 0.
        # Corresponds to the JSON property `dailyMaxImpressions`
        # @return [Fixnum]
        attr_accessor :daily_max_impressions
      
        # Maximum currency amount to spend every day in micros of advertiser's currency.
        # Applicable when the budget is currency based. Must be greater than 0. For
        # example, for 1.5 standard unit of the currency, set this field to 1500000. The
        # value assigned will be rounded to whole billable units for the relevant
        # currency by the following rules: any positive value less than a single
        # billable unit will be rounded up to one billable unit and any value larger
        # than a single billable unit will be rounded down to the nearest billable value.
        # For example, if the currency's billable unit is 0.01, and this field is set
        # to 10257770, it will round down to 10250000, a value of 10.25. If set to 505,
        # it will round up to 10000, a value of 0.01.
        # Corresponds to the JSON property `dailyMaxMicros`
        # @return [Fixnum]
        attr_accessor :daily_max_micros
      
        # Required. The time period in which the pacing budget will be spent. When
        # automatic budget allocation is enabled at the insertion order via
        # auto_budget_allocation, this field is output only and defaults to `
        # PACING_PERIOD_FLIGHT`.
        # Corresponds to the JSON property `pacingPeriod`
        # @return [String]
        attr_accessor :pacing_period
      
        # Required. The type of pacing that defines how the budget amount will be spent
        # across the pacing_period.
        # Corresponds to the JSON property `pacingType`
        # @return [String]
        attr_accessor :pacing_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @daily_max_impressions = args[:daily_max_impressions] if args.key?(:daily_max_impressions)
          @daily_max_micros = args[:daily_max_micros] if args.key?(:daily_max_micros)
          @pacing_period = args[:pacing_period] if args.key?(:pacing_period)
          @pacing_type = args[:pacing_type] if args.key?(:pacing_type)
        end
      end
      
      # A filtering option that filters on selected file types belonging to a chosen
      # set of filter entities.
      class ParentEntityFilter
        include Google::Apis::Core::Hashable
      
        # Required. File types that will be returned.
        # Corresponds to the JSON property `fileType`
        # @return [Array<String>]
        attr_accessor :file_type
      
        # The IDs of the specified filter type. This is used to filter entities to fetch.
        # If filter type is not `FILTER_TYPE_NONE`, at least one ID must be specified.
        # Corresponds to the JSON property `filterIds`
        # @return [Array<Fixnum>]
        attr_accessor :filter_ids
      
        # Required. Filter type used to filter fetched entities.
        # Corresponds to the JSON property `filterType`
        # @return [String]
        attr_accessor :filter_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @file_type = args[:file_type] if args.key?(:file_type)
          @filter_ids = args[:filter_ids] if args.key?(:filter_ids)
          @filter_type = args[:filter_type] if args.key?(:filter_type)
        end
      end
      
      # Details for assigned parental status targeting option. This will be populated
      # in the details field of an AssignedTargetingOption when targeting_type is `
      # TARTGETING_TYPE_PARENTAL_STATUS`.
      class ParentalStatusAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The parental status of the audience.
        # Corresponds to the JSON property `parentalStatus`
        # @return [String]
        attr_accessor :parental_status
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_PARENTAL_STATUS`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @parental_status = args[:parental_status] if args.key?(:parental_status)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable parental status. This will be populated in the
      # parental_status_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_PARENTAL_STATUS`.
      class ParentalStatusTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The parental status of an audience.
        # Corresponds to the JSON property `parentalStatus`
        # @return [String]
        attr_accessor :parental_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @parental_status = args[:parental_status] if args.key?(:parental_status)
        end
      end
      
      # A single partner in Display & Video 360 (DV360).
      class Partner
        include Google::Apis::Core::Hashable
      
        # Ad server related settings of a partner.
        # Corresponds to the JSON property `adServerConfig`
        # @return [Google::Apis::DisplayvideoV1::PartnerAdServerConfig]
        attr_accessor :ad_server_config
      
        # Settings that control how partner related data may be accessed.
        # Corresponds to the JSON property `dataAccessConfig`
        # @return [Google::Apis::DisplayvideoV1::PartnerDataAccessConfig]
        attr_accessor :data_access_config
      
        # The display name of the partner. Must be UTF-8 encoded with a maximum size of
        # 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The status of the partner.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Settings that control which exchanges are enabled for a partner.
        # Corresponds to the JSON property `exchangeConfig`
        # @return [Google::Apis::DisplayvideoV1::ExchangeConfig]
        attr_accessor :exchange_config
      
        # General settings of a partner.
        # Corresponds to the JSON property `generalConfig`
        # @return [Google::Apis::DisplayvideoV1::PartnerGeneralConfig]
        attr_accessor :general_config
      
        # Output only. The resource name of the partner.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The unique ID of the partner. Assigned by the system.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        # Output only. The timestamp when the partner was last updated. Assigned by the
        # system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ad_server_config = args[:ad_server_config] if args.key?(:ad_server_config)
          @data_access_config = args[:data_access_config] if args.key?(:data_access_config)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @exchange_config = args[:exchange_config] if args.key?(:exchange_config)
          @general_config = args[:general_config] if args.key?(:general_config)
          @name = args[:name] if args.key?(:name)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Ad server related settings of a partner.
      class PartnerAdServerConfig
        include Google::Apis::Core::Hashable
      
        # Measurement settings of a partner.
        # Corresponds to the JSON property `measurementConfig`
        # @return [Google::Apis::DisplayvideoV1::MeasurementConfig]
        attr_accessor :measurement_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @measurement_config = args[:measurement_config] if args.key?(:measurement_config)
        end
      end
      
      # Settings that control a partner cost. A partner cost is any type of expense
      # involved in running a campaign, other than the costs of purchasing impressions
      # (which is called the media cost) and using third-party audience segment data (
      # data fee). Some examples of partner costs include the fees for using DV360, a
      # third-party ad server, or a third-party ad serving verification service.
      class PartnerCost
        include Google::Apis::Core::Hashable
      
        # Required. The type of the partner cost.
        # Corresponds to the JSON property `costType`
        # @return [String]
        attr_accessor :cost_type
      
        # The CPM fee amount in micros of advertiser's currency. Applicable when the
        # fee_type is `PARTNER_FEE_TYPE_CPM_FEE`. Must be greater than or equal to 0.
        # For example, for 1.5 standard unit of the advertiser's currency, set this
        # field to 1500000.
        # Corresponds to the JSON property `feeAmount`
        # @return [Fixnum]
        attr_accessor :fee_amount
      
        # The media fee percentage in millis (1/1000 of a percent). Applicable when the
        # fee_type is `PARTNER_FEE_TYPE_MEDIA_FEE`. Must be greater than or equal to 0.
        # For example: 100 represents 0.1%.
        # Corresponds to the JSON property `feePercentageMillis`
        # @return [Fixnum]
        attr_accessor :fee_percentage_millis
      
        # Required. The fee type for this partner cost.
        # Corresponds to the JSON property `feeType`
        # @return [String]
        attr_accessor :fee_type
      
        # The invoice type for this partner cost. * Required when cost_type is one of: -
        # `PARTNER_COST_TYPE_ADLOOX` - `PARTNER_COST_TYPE_DOUBLE_VERIFY` - `
        # PARTNER_COST_TYPE_INTEGRAL_AD_SCIENCE`. * Output only for other types.
        # Corresponds to the JSON property `invoiceType`
        # @return [String]
        attr_accessor :invoice_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cost_type = args[:cost_type] if args.key?(:cost_type)
          @fee_amount = args[:fee_amount] if args.key?(:fee_amount)
          @fee_percentage_millis = args[:fee_percentage_millis] if args.key?(:fee_percentage_millis)
          @fee_type = args[:fee_type] if args.key?(:fee_type)
          @invoice_type = args[:invoice_type] if args.key?(:invoice_type)
        end
      end
      
      # Settings that control how partner related data may be accessed.
      class PartnerDataAccessConfig
        include Google::Apis::Core::Hashable
      
        # Structured Data File (SDF) related settings.
        # Corresponds to the JSON property `sdfConfig`
        # @return [Google::Apis::DisplayvideoV1::SdfConfig]
        attr_accessor :sdf_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @sdf_config = args[:sdf_config] if args.key?(:sdf_config)
        end
      end
      
      # General settings of a partner.
      class PartnerGeneralConfig
        include Google::Apis::Core::Hashable
      
        # Immutable. Partner's currency in ISO 4217 format.
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # Immutable. The standard TZ database name of the partner's time zone. For
        # example, `America/New_York`. See more at: https://en.wikipedia.org/wiki/
        # List_of_tz_database_time_zones
        # Corresponds to the JSON property `timeZone`
        # @return [String]
        attr_accessor :time_zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @time_zone = args[:time_zone] if args.key?(:time_zone)
        end
      end
      
      # Settings that control how partner revenue is calculated.
      class PartnerRevenueModel
        include Google::Apis::Core::Hashable
      
        # Required. The markup amount of the partner revenue model. Must be greater than
        # or equal to 0. * When the markup_type is set to be `
        # PARTNER_REVENUE_MODEL_MARKUP_TYPE_CPM`, this field represents the CPM markup
        # in micros of advertiser's currency. For example, 1500000 represents 1.5
        # standard units of the currency. * When the markup_type is set to be `
        # PARTNER_REVENUE_MODEL_MARKUP_TYPE_MEDIA_COST_MARKUP`, this field represents
        # the media cost percent markup in millis. For example, 100 represents 0.1% (
        # decimal 0.001). * When the markup_type is set to be `
        # PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP`, this field
        # represents the total media cost percent markup in millis. For example, 100
        # represents 0.1% (decimal 0.001).
        # Corresponds to the JSON property `markupAmount`
        # @return [Fixnum]
        attr_accessor :markup_amount
      
        # Required. The markup type of the partner revenue model.
        # Corresponds to the JSON property `markupType`
        # @return [String]
        attr_accessor :markup_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @markup_amount = args[:markup_amount] if args.key?(:markup_amount)
          @markup_type = args[:markup_type] if args.key?(:markup_type)
        end
      end
      
      # Settings that control the performance goal of a campaign or insertion order.
      class PerformanceGoal
        include Google::Apis::Core::Hashable
      
        # The goal amount, in micros of the advertiser's currency. Applicable when
        # performance_goal_type is one of: * `PERFORMANCE_GOAL_TYPE_CPM` * `
        # PERFORMANCE_GOAL_TYPE_CPC` * `PERFORMANCE_GOAL_TYPE_CPA` * `
        # PERFORMANCE_GOAL_TYPE_CPIAVC` * `PERFORMANCE_GOAL_TYPE_VCPM` For example
        # 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `performanceGoalAmountMicros`
        # @return [Fixnum]
        attr_accessor :performance_goal_amount_micros
      
        # The decimal representation of the goal percentage in micros. Applicable when
        # performance_goal_type is one of: * `PERFORMANCE_GOAL_TYPE_CTR` * `
        # PERFORMANCE_GOAL_TYPE_VIEWABILITY` * `PERFORMANCE_GOAL_TYPE_CVR_CLICKS` * `
        # PERFORMANCE_GOAL_TYPE_CVR_IMPRESSIONS` * `PERFORMANCE_GOAL_TYPE_VTR` * `
        # PERFORMANCE_GOAL_TYPE_AUDIO_COMPLETION_RATE` * `
        # PERFORMANCE_GOAL_TYPE_VIDEO_COMPLETION_RATE` For example, 70000 represents 7% (
        # decimal 0.07).
        # Corresponds to the JSON property `performanceGoalPercentageMicros`
        # @return [Fixnum]
        attr_accessor :performance_goal_percentage_micros
      
        # A key performance indicator (KPI) string, which can be empty. Must be UTF-8
        # encoded with a length of no more than 100 characters. Applicable when
        # performance_goal_type is set to `PERFORMANCE_GOAL_TYPE_OTHER`.
        # Corresponds to the JSON property `performanceGoalString`
        # @return [String]
        attr_accessor :performance_goal_string
      
        # Required. The type of the performance goal.
        # Corresponds to the JSON property `performanceGoalType`
        # @return [String]
        attr_accessor :performance_goal_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @performance_goal_amount_micros = args[:performance_goal_amount_micros] if args.key?(:performance_goal_amount_micros)
          @performance_goal_percentage_micros = args[:performance_goal_percentage_micros] if args.key?(:performance_goal_percentage_micros)
          @performance_goal_string = args[:performance_goal_string] if args.key?(:performance_goal_string)
          @performance_goal_type = args[:performance_goal_type] if args.key?(:performance_goal_type)
        end
      end
      
      # A strategy that automatically adjusts the bid to meet or beat a specified
      # performance goal.
      class PerformanceGoalBidStrategy
        include Google::Apis::Core::Hashable
      
        # The ID of the Custom Bidding Algorithm used by this strategy. Only applicable
        # when performance_goal_type is set to `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO`.
        # Corresponds to the JSON property `customBiddingAlgorithmId`
        # @return [Fixnum]
        attr_accessor :custom_bidding_algorithm_id
      
        # The maximum average CPM that may be bid, in micros of the advertiser's
        # currency. Must be greater than or equal to a billable unit of the given
        # currency. Not applicable when performance_goal_type is set to `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM`. For example, 1500000
        # represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `maxAverageCpmBidAmountMicros`
        # @return [Fixnum]
        attr_accessor :max_average_cpm_bid_amount_micros
      
        # Required. The performance goal the bidding strategy will attempt to meet or
        # beat, in micros of the advertiser's currency or in micro of the ROAS (Return
        # On Advertising Spend) value which is also based on advertiser's currency. Must
        # be greater than or equal to a billable unit of the given currency and smaller
        # or equal to upper bounds. Each performance_goal_type has its upper bound: *
        # when performance_goal_type is `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPA`,
        # upper bound is 10000.00 USD. * when performance_goal_type is `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPC`, upper bound is 1000.00 USD. *
        # when performance_goal_type is `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM`, upper bound is 1000.00
        # USD. * when performance_goal_type is `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO`, upper bound is 1000.00
        # and lower bound is 0.01. Example: If set to `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM`, the bid price will be
        # based on the probability that each available impression will be viewable. For
        # example, if viewable CPM target is $2 and an impression is 40% likely to be
        # viewable, the bid price will be $0.80 CPM (40% of $2). For example, 1500000
        # represents 1.5 standard units of the currency or ROAS value.
        # Corresponds to the JSON property `performanceGoalAmountMicros`
        # @return [Fixnum]
        attr_accessor :performance_goal_amount_micros
      
        # Required. The type of the performance goal that the bidding strategy will try
        # to meet or beat. For line item level usage, the value must be one of: * `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPA` * `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPC` * `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM` * `
        # BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO`.
        # Corresponds to the JSON property `performanceGoalType`
        # @return [String]
        attr_accessor :performance_goal_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_bidding_algorithm_id = args[:custom_bidding_algorithm_id] if args.key?(:custom_bidding_algorithm_id)
          @max_average_cpm_bid_amount_micros = args[:max_average_cpm_bid_amount_micros] if args.key?(:max_average_cpm_bid_amount_micros)
          @performance_goal_amount_micros = args[:performance_goal_amount_micros] if args.key?(:performance_goal_amount_micros)
          @performance_goal_type = args[:performance_goal_type] if args.key?(:performance_goal_type)
        end
      end
      
      # Targeting details for proximity location list. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_PROXIMITY_LOCATION_LIST`.
      class ProximityLocationListAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the proximity location list. Should refer to the
        # location_list_id field of a LocationList resource whose type is `
        # TARGETING_LOCATION_TYPE_PROXIMITY`.
        # Corresponds to the JSON property `proximityLocationListId`
        # @return [Fixnum]
        attr_accessor :proximity_location_list_id
      
        # Required. Radius range for proximity location list. This represents the size
        # of the area around a chosen location that will be targeted. `All` proximity
        # location targeting under a single line item must have the same radius range
        # value. Set this value to match any existing targeting. If updated, this field
        # will change the radius range for all proximity targeting under the line item.
        # Corresponds to the JSON property `proximityRadiusRange`
        # @return [String]
        attr_accessor :proximity_radius_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @proximity_location_list_id = args[:proximity_location_list_id] if args.key?(:proximity_location_list_id)
          @proximity_radius_range = args[:proximity_radius_range] if args.key?(:proximity_radius_range)
        end
      end
      
      # Publisher review status for the creative.
      class PublisherReviewStatus
        include Google::Apis::Core::Hashable
      
        # The publisher reviewing the creative.
        # Corresponds to the JSON property `publisherName`
        # @return [String]
        attr_accessor :publisher_name
      
        # Status of the publisher review.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @publisher_name = args[:publisher_name] if args.key?(:publisher_name)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # The rate related settings of the inventory source.
      class RateDetails
        include Google::Apis::Core::Hashable
      
        # The rate type. Acceptable values are `INVENTORY_SOURCE_RATE_TYPE_CPM_FIXED`, `
        # INVENTORY_SOURCE_RATE_TYPE_CPM_FLOOR`, and `INVENTORY_SOURCE_RATE_TYPE_CPD`.
        # Corresponds to the JSON property `inventorySourceRateType`
        # @return [String]
        attr_accessor :inventory_source_rate_type
      
        # Represents an amount of money with its currency type.
        # Corresponds to the JSON property `minimumSpend`
        # @return [Google::Apis::DisplayvideoV1::Money]
        attr_accessor :minimum_spend
      
        # Represents an amount of money with its currency type.
        # Corresponds to the JSON property `rate`
        # @return [Google::Apis::DisplayvideoV1::Money]
        attr_accessor :rate
      
        # Required for guaranteed inventory sources. The number of impressions
        # guaranteed by the seller.
        # Corresponds to the JSON property `unitsPurchased`
        # @return [Fixnum]
        attr_accessor :units_purchased
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_rate_type = args[:inventory_source_rate_type] if args.key?(:inventory_source_rate_type)
          @minimum_spend = args[:minimum_spend] if args.key?(:minimum_spend)
          @rate = args[:rate] if args.key?(:rate)
          @units_purchased = args[:units_purchased] if args.key?(:units_purchased)
        end
      end
      
      # Targeting details for regional location list. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_REGIONAL_LOCATION_LIST`.
      class RegionalLocationListAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. ID of the regional location list. Should refer to the
        # location_list_id field of a LocationList resource whose type is `
        # TARGETING_LOCATION_TYPE_REGIONAL`.
        # Corresponds to the JSON property `regionalLocationListId`
        # @return [Fixnum]
        attr_accessor :regional_location_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative = args[:negative] if args.key?(:negative)
          @regional_location_list_id = args[:regional_location_list_id] if args.key?(:regional_location_list_id)
        end
      end
      
      # Review statuses for the creative.
      class ReviewStatusInfo
        include Google::Apis::Core::Hashable
      
        # Represents the basic approval needed for a creative to begin serving. Summary
        # of creative_and_landing_page_review_status and
        # content_and_policy_review_status.
        # Corresponds to the JSON property `approvalStatus`
        # @return [String]
        attr_accessor :approval_status
      
        # Content and policy review status for the creative.
        # Corresponds to the JSON property `contentAndPolicyReviewStatus`
        # @return [String]
        attr_accessor :content_and_policy_review_status
      
        # Creative and landing page review status for the creative.
        # Corresponds to the JSON property `creativeAndLandingPageReviewStatus`
        # @return [String]
        attr_accessor :creative_and_landing_page_review_status
      
        # Exchange review statuses for the creative.
        # Corresponds to the JSON property `exchangeReviewStatuses`
        # @return [Array<Google::Apis::DisplayvideoV1::ExchangeReviewStatus>]
        attr_accessor :exchange_review_statuses
      
        # Publisher review statuses for the creative.
        # Corresponds to the JSON property `publisherReviewStatuses`
        # @return [Array<Google::Apis::DisplayvideoV1::PublisherReviewStatus>]
        attr_accessor :publisher_review_statuses
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @approval_status = args[:approval_status] if args.key?(:approval_status)
          @content_and_policy_review_status = args[:content_and_policy_review_status] if args.key?(:content_and_policy_review_status)
          @creative_and_landing_page_review_status = args[:creative_and_landing_page_review_status] if args.key?(:creative_and_landing_page_review_status)
          @exchange_review_statuses = args[:exchange_review_statuses] if args.key?(:exchange_review_statuses)
          @publisher_review_statuses = args[:publisher_review_statuses] if args.key?(:publisher_review_statuses)
        end
      end
      
      # Structured Data File (SDF) related settings.
      class SdfConfig
        include Google::Apis::Core::Hashable
      
        # An administrator email address to which the SDF processing status reports will
        # be sent.
        # Corresponds to the JSON property `adminEmail`
        # @return [String]
        attr_accessor :admin_email
      
        # Required. The version of SDF being used.
        # Corresponds to the JSON property `version`
        # @return [String]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @admin_email = args[:admin_email] if args.key?(:admin_email)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # Type for the response returned by [SdfDownloadTaskService.
      # CreateSdfDownloadTask].
      class SdfDownloadTask
        include Google::Apis::Core::Hashable
      
        # A resource name to be used in media.download to Download the prepared files.
        # Resource names have the format `download/sdfdownloadtasks/media/`media_id``. `
        # media_id` will be made available by the long running operation service once
        # the task status is done.
        # Corresponds to the JSON property `resourceName`
        # @return [String]
        attr_accessor :resource_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_name = args[:resource_name] if args.key?(:resource_name)
        end
      end
      
      # Type for the metadata returned by [SdfDownloadTaskService.
      # CreateSdfDownloadTask].
      class SdfDownloadTaskMetadata
        include Google::Apis::Core::Hashable
      
        # The time when the operation was created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # The time when execution was completed.
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # The SDF version used to execute this download task.
        # Corresponds to the JSON property `version`
        # @return [String]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_time = args[:create_time] if args.key?(:create_time)
          @end_time = args[:end_time] if args.key?(:end_time)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # Request message for SearchTargetingOptions.
      class SearchTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # Required. The Advertiser this request is being made in the context of.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Search terms for geo region targeting options.
        # Corresponds to the JSON property `geoRegionSearchTerms`
        # @return [Google::Apis::DisplayvideoV1::GeoRegionSearchTerms]
        attr_accessor :geo_region_search_terms
      
        # Requested page size. Must be between `1` and `100`. If unspecified will
        # default to `100`. Returns error code `INVALID_ARGUMENT` if an invalid value is
        # specified.
        # Corresponds to the JSON property `pageSize`
        # @return [Fixnum]
        attr_accessor :page_size
      
        # A token identifying a page of results the server should return. Typically,
        # this is the value of next_page_token returned from the previous call to `
        # SearchTargetingOptions` method. If not specified, the first page of results
        # will be returned.
        # Corresponds to the JSON property `pageToken`
        # @return [String]
        attr_accessor :page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @geo_region_search_terms = args[:geo_region_search_terms] if args.key?(:geo_region_search_terms)
          @page_size = args[:page_size] if args.key?(:page_size)
          @page_token = args[:page_token] if args.key?(:page_token)
        end
      end
      
      # Response message for SearchTargetingOptionsResponse.
      class SearchTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # A token to retrieve the next page of results. Pass this value in the
        # page_token field in the subsequent call to `SearchTargetingOptions` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The list of targeting options that match the search criteria. This list will
        # be absent if empty.
        # Corresponds to the JSON property `targetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::TargetingOption>]
        attr_accessor :targeting_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @targeting_options = args[:targeting_options] if args.key?(:targeting_options)
        end
      end
      
      # Targeting details for sensitive category. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
      class SensitiveCategoryAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the sensitive category to be EXCLUDED.
        # Corresponds to the JSON property `excludedTargetingOptionId`
        # @return [String]
        attr_accessor :excluded_targeting_option_id
      
        # Output only. An enum for the DV360 Sensitive category content classifier.
        # Corresponds to the JSON property `sensitiveCategory`
        # @return [String]
        attr_accessor :sensitive_category
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @excluded_targeting_option_id = args[:excluded_targeting_option_id] if args.key?(:excluded_targeting_option_id)
          @sensitive_category = args[:sensitive_category] if args.key?(:sensitive_category)
        end
      end
      
      # Represents a targetable sensitive category. This will be populated in the
      # sensitive_category_details field of the TargetingOption when targeting_type is
      # `TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
      class SensitiveCategoryTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. An enum for the DV360 Sensitive category content classifier.
        # Corresponds to the JSON property `sensitiveCategory`
        # @return [String]
        attr_accessor :sensitive_category
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @sensitive_category = args[:sensitive_category] if args.key?(:sensitive_category)
        end
      end
      
      # A single site. Sites are apps or websites belonging to a channel.
      class Site
        include Google::Apis::Core::Hashable
      
        # Output only. The resource name of the site.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The URL or app ID of the site. Must be UTF-8 encoded with a maximum
        # length of 240 bytes.
        # Corresponds to the JSON property `urlOrAppId`
        # @return [String]
        attr_accessor :url_or_app_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @url_or_app_id = args[:url_or_app_id] if args.key?(:url_or_app_id)
        end
      end
      
      # The `Status` type defines a logical error model that is suitable for different
      # programming environments, including REST APIs and RPC APIs. It is used by [
      # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
      # data: error code, error message, and error details. You can find out more
      # about this error model and how to work with it in the [API Design Guide](https:
      # //cloud.google.com/apis/design/errors).
      class Status
        include Google::Apis::Core::Hashable
      
        # The status code, which should be an enum value of google.rpc.Code.
        # Corresponds to the JSON property `code`
        # @return [Fixnum]
        attr_accessor :code
      
        # A list of messages that carry the error details. There is a common set of
        # message types for APIs to use.
        # Corresponds to the JSON property `details`
        # @return [Array<Hash<String,Object>>]
        attr_accessor :details
      
        # A developer-facing error message, which should be in English. Any user-facing
        # error message should be localized and sent in the google.rpc.Status.details
        # field, or localized by the client.
        # Corresponds to the JSON property `message`
        # @return [String]
        attr_accessor :message
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @code = args[:code] if args.key?(:code)
          @details = args[:details] if args.key?(:details)
          @message = args[:message] if args.key?(:message)
        end
      end
      
      # Details for assigned sub-exchange targeting option. This will be populated in
      # the details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_SUB_EXCHANGE`.
      class SubExchangeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_SUB_EXCHANGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable sub-exchange. This will be populated in the
      # sub_exchange_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_SUB_EXCHANGE`.
      class SubExchangeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the sub-exchange.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # Settings that control the targeting expansion of the line item. Targeting
      # expansion allows the line item to reach a larger audience based on the
      # original audience list and the targeting expansion level.
      class TargetingExpansionConfig
        include Google::Apis::Core::Hashable
      
        # Required. Whether to exclude first party audiences from targeting. Similar
        # audiences of the excluded first party lists will not be excluded. Only
        # applicable when a first-party audience is positively targeted (directly or
        # included in a combined audience), otherwise this selection will be ignored.
        # Corresponds to the JSON property `excludeFirstPartyAudience`
        # @return [Boolean]
        attr_accessor :exclude_first_party_audience
        alias_method :exclude_first_party_audience?, :exclude_first_party_audience
      
        # Required. Magnitude of expansion for applicable targeting under this line item.
        # Corresponds to the JSON property `targetingExpansionLevel`
        # @return [String]
        attr_accessor :targeting_expansion_level
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exclude_first_party_audience = args[:exclude_first_party_audience] if args.key?(:exclude_first_party_audience)
          @targeting_expansion_level = args[:targeting_expansion_level] if args.key?(:targeting_expansion_level)
        end
      end
      
      # Represents a single targeting option, which is a targetable concept in DV360.
      class TargetingOption
        include Google::Apis::Core::Hashable
      
        # Represents a targetable age range. This will be populated in the
        # age_range_details field when targeting_type is `TARGETING_TYPE_AGE_RANGE`.
        # Corresponds to the JSON property `ageRangeDetails`
        # @return [Google::Apis::DisplayvideoV1::AgeRangeTargetingOptionDetails]
        attr_accessor :age_range_details
      
        # Represents a targetable collection of apps. A collection lets you target
        # dynamic groups of related apps that are maintained by the platform, for
        # example `All Apps/Google Play/Games`. This will be populated in the
        # app_category_details field when targeting_type is `TARGETING_TYPE_APP_CATEGORY`
        # .
        # Corresponds to the JSON property `appCategoryDetails`
        # @return [Google::Apis::DisplayvideoV1::AppCategoryTargetingOptionDetails]
        attr_accessor :app_category_details
      
        # Represents a targetable authorized seller status. This will be populated in
        # the authorized_seller_status_details field when targeting_type is `
        # TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
        # Corresponds to the JSON property `authorizedSellerStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::AuthorizedSellerStatusTargetingOptionDetails]
        attr_accessor :authorized_seller_status_details
      
        # Represents a targetable browser. This will be populated in the browser_details
        # field when targeting_type is `TARGETING_TYPE_BROWSER`.
        # Corresponds to the JSON property `browserDetails`
        # @return [Google::Apis::DisplayvideoV1::BrowserTargetingOptionDetails]
        attr_accessor :browser_details
      
        # Represents a targetable carrier or ISP. This will be populated in the
        # carrier_and_isp_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_CARRIER_AND_ISP`.
        # Corresponds to the JSON property `carrierAndIspDetails`
        # @return [Google::Apis::DisplayvideoV1::CarrierAndIspTargetingOptionDetails]
        attr_accessor :carrier_and_isp_details
      
        # Represents a targetable category. This will be populated in the
        # category_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_CATEGORY`.
        # Corresponds to the JSON property `categoryDetails`
        # @return [Google::Apis::DisplayvideoV1::CategoryTargetingOptionDetails]
        attr_accessor :category_details
      
        # Represents a targetable content instream position, which could be used by
        # video and audio ads. This will be populated in the
        # content_instream_position_details field when targeting_type is `
        # TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
        # Corresponds to the JSON property `contentInstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentInstreamPositionTargetingOptionDetails]
        attr_accessor :content_instream_position_details
      
        # Represents a targetable content outstream position, which could be used by
        # display and video ads. This will be populated in the
        # content_outstream_position_details field when targeting_type is `
        # TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
        # Corresponds to the JSON property `contentOutstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentOutstreamPositionTargetingOptionDetails]
        attr_accessor :content_outstream_position_details
      
        # Represents a targetable device make and model. This will be populated in the
        # device_make_model_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_DEVICE_MAKE_MODEL`.
        # Corresponds to the JSON property `deviceMakeModelDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceMakeModelTargetingOptionDetails]
        attr_accessor :device_make_model_details
      
        # Represents a targetable device type. This will be populated in the
        # device_type_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_DEVICE_TYPE`.
        # Corresponds to the JSON property `deviceTypeDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceTypeTargetingOptionDetails]
        attr_accessor :device_type_details
      
        # Represents a targetable digital content label rating tier. This will be
        # populated in the digital_content_label_details field of the TargetingOption
        # when targeting_type is `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
        # Corresponds to the JSON property `digitalContentLabelDetails`
        # @return [Google::Apis::DisplayvideoV1::DigitalContentLabelTargetingOptionDetails]
        attr_accessor :digital_content_label_details
      
        # Represents a targetable environment. This will be populated in the
        # environment_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_ENVIRONMENT`.
        # Corresponds to the JSON property `environmentDetails`
        # @return [Google::Apis::DisplayvideoV1::EnvironmentTargetingOptionDetails]
        attr_accessor :environment_details
      
        # Represents a targetable exchange. This will be populated in the
        # exchange_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_EXCHANGE`.
        # Corresponds to the JSON property `exchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::ExchangeTargetingOptionDetails]
        attr_accessor :exchange_details
      
        # Represents a targetable gender. This will be populated in the gender_details
        # field of a TargetingOption when targeting_type is `TARGETING_TYPE_GENDER`.
        # Corresponds to the JSON property `genderDetails`
        # @return [Google::Apis::DisplayvideoV1::GenderTargetingOptionDetails]
        attr_accessor :gender_details
      
        # Represents a targetable geographic region. This will be populated in the
        # geo_region_details field when targeting_type is `TARGETING_TYPE_GEO_REGION`.
        # Corresponds to the JSON property `geoRegionDetails`
        # @return [Google::Apis::DisplayvideoV1::GeoRegionTargetingOptionDetails]
        attr_accessor :geo_region_details
      
        # Represents a targetable household income. This will be populated in the
        # household_income_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_HOUSEHOLD_INCOME`.
        # Corresponds to the JSON property `householdIncomeDetails`
        # @return [Google::Apis::DisplayvideoV1::HouseholdIncomeTargetingOptionDetails]
        attr_accessor :household_income_details
      
        # Represents a targetable language. This will be populated in the
        # language_details field when targeting_type is `TARGETING_TYPE_LANGUAGE`.
        # Corresponds to the JSON property `languageDetails`
        # @return [Google::Apis::DisplayvideoV1::LanguageTargetingOptionDetails]
        attr_accessor :language_details
      
        # Output only. The resource name for this targeting option.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Represents a targetable on screen position, which could be used by display and
        # video ads. This will be populated in the on_screen_position_details field when
        # targeting_type is `TARGETING_TYPE_ON_SCREEN_POSITION`.
        # Corresponds to the JSON property `onScreenPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::OnScreenPositionTargetingOptionDetails]
        attr_accessor :on_screen_position_details
      
        # Represents a targetable operating system. This will be populated in the
        # operating_system_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_OPERATING_SYSTEM`.
        # Corresponds to the JSON property `operatingSystemDetails`
        # @return [Google::Apis::DisplayvideoV1::OperatingSystemTargetingOptionDetails]
        attr_accessor :operating_system_details
      
        # Represents a targetable parental status. This will be populated in the
        # parental_status_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_PARENTAL_STATUS`.
        # Corresponds to the JSON property `parentalStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::ParentalStatusTargetingOptionDetails]
        attr_accessor :parental_status_details
      
        # Represents a targetable sensitive category. This will be populated in the
        # sensitive_category_details field of the TargetingOption when targeting_type is
        # `TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
        # Corresponds to the JSON property `sensitiveCategoryDetails`
        # @return [Google::Apis::DisplayvideoV1::SensitiveCategoryTargetingOptionDetails]
        attr_accessor :sensitive_category_details
      
        # Represents a targetable sub-exchange. This will be populated in the
        # sub_exchange_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_SUB_EXCHANGE`.
        # Corresponds to the JSON property `subExchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::SubExchangeTargetingOptionDetails]
        attr_accessor :sub_exchange_details
      
        # Output only. A unique identifier for this targeting option. The tuple ``
        # targeting_type`, `targeting_option_id`` will be unique.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. The type of this targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        # Represents a targetable user rewarded content status for video ads only. This
        # will be populated in the user_rewarded_content_details field when
        # targeting_type is `TARGETING_TYPE_USER_REWARDED_CONTENT`.
        # Corresponds to the JSON property `userRewardedContentDetails`
        # @return [Google::Apis::DisplayvideoV1::UserRewardedContentTargetingOptionDetails]
        attr_accessor :user_rewarded_content_details
      
        # Represents a targetable video player size. This will be populated in the
        # video_player_size_details field when targeting_type is `
        # TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
        # Corresponds to the JSON property `videoPlayerSizeDetails`
        # @return [Google::Apis::DisplayvideoV1::VideoPlayerSizeTargetingOptionDetails]
        attr_accessor :video_player_size_details
      
        # Represents a targetable viewability. This will be populated in the
        # viewability_details field of a TargetingOption when targeting_type is `
        # TARGETING_TYPE_VIEWABILITY`.
        # Corresponds to the JSON property `viewabilityDetails`
        # @return [Google::Apis::DisplayvideoV1::ViewabilityTargetingOptionDetails]
        attr_accessor :viewability_details
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range_details = args[:age_range_details] if args.key?(:age_range_details)
          @app_category_details = args[:app_category_details] if args.key?(:app_category_details)
          @authorized_seller_status_details = args[:authorized_seller_status_details] if args.key?(:authorized_seller_status_details)
          @browser_details = args[:browser_details] if args.key?(:browser_details)
          @carrier_and_isp_details = args[:carrier_and_isp_details] if args.key?(:carrier_and_isp_details)
          @category_details = args[:category_details] if args.key?(:category_details)
          @content_instream_position_details = args[:content_instream_position_details] if args.key?(:content_instream_position_details)
          @content_outstream_position_details = args[:content_outstream_position_details] if args.key?(:content_outstream_position_details)
          @device_make_model_details = args[:device_make_model_details] if args.key?(:device_make_model_details)
          @device_type_details = args[:device_type_details] if args.key?(:device_type_details)
          @digital_content_label_details = args[:digital_content_label_details] if args.key?(:digital_content_label_details)
          @environment_details = args[:environment_details] if args.key?(:environment_details)
          @exchange_details = args[:exchange_details] if args.key?(:exchange_details)
          @gender_details = args[:gender_details] if args.key?(:gender_details)
          @geo_region_details = args[:geo_region_details] if args.key?(:geo_region_details)
          @household_income_details = args[:household_income_details] if args.key?(:household_income_details)
          @language_details = args[:language_details] if args.key?(:language_details)
          @name = args[:name] if args.key?(:name)
          @on_screen_position_details = args[:on_screen_position_details] if args.key?(:on_screen_position_details)
          @operating_system_details = args[:operating_system_details] if args.key?(:operating_system_details)
          @parental_status_details = args[:parental_status_details] if args.key?(:parental_status_details)
          @sensitive_category_details = args[:sensitive_category_details] if args.key?(:sensitive_category_details)
          @sub_exchange_details = args[:sub_exchange_details] if args.key?(:sub_exchange_details)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
          @user_rewarded_content_details = args[:user_rewarded_content_details] if args.key?(:user_rewarded_content_details)
          @video_player_size_details = args[:video_player_size_details] if args.key?(:video_player_size_details)
          @viewability_details = args[:viewability_details] if args.key?(:viewability_details)
        end
      end
      
      # Settings for advertisers that use third-party ad servers only.
      class ThirdPartyOnlyConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not order ID reporting for pixels is enabled. This value cannot be
        # changed once set to `true`.
        # Corresponds to the JSON property `pixelOrderIdReportingEnabled`
        # @return [Boolean]
        attr_accessor :pixel_order_id_reporting_enabled
        alias_method :pixel_order_id_reporting_enabled?, :pixel_order_id_reporting_enabled
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @pixel_order_id_reporting_enabled = args[:pixel_order_id_reporting_enabled] if args.key?(:pixel_order_id_reporting_enabled)
        end
      end
      
      # Tracking URLs from third parties to track interactions with an audio or a
      # video creative.
      class ThirdPartyUrl
        include Google::Apis::Core::Hashable
      
        # The type of interaction needs to be tracked by the tracking URL
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Tracking URL used to track the interaction. Provide a URL with optional path
        # or query string, beginning with `https:`. For example, https://www.example.com/
        # path
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # Assigned third party verifier targeting option details. This will be populated
      # in the details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_THIRD_PARTY_VERIFIER`.
      class ThirdPartyVerifierAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Details of Adloox settings.
        # Corresponds to the JSON property `adloox`
        # @return [Google::Apis::DisplayvideoV1::Adloox]
        attr_accessor :adloox
      
        # Details of DoubleVerify settings.
        # Corresponds to the JSON property `doubleVerify`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerify]
        attr_accessor :double_verify
      
        # Details of Integral Ad Science settings.
        # Corresponds to the JSON property `integralAdScience`
        # @return [Google::Apis::DisplayvideoV1::IntegralAdScience]
        attr_accessor :integral_ad_science
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @adloox = args[:adloox] if args.key?(:adloox)
          @double_verify = args[:double_verify] if args.key?(:double_verify)
          @integral_ad_science = args[:integral_ad_science] if args.key?(:integral_ad_science)
        end
      end
      
      # A time range.
      class TimeRange
        include Google::Apis::Core::Hashable
      
        # Required. The upper bound of a time range, inclusive.
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # Required. The lower bound of a time range, inclusive.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @end_time = args[:end_time] if args.key?(:end_time)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Timer event of the creative.
      class TimerEvent
        include Google::Apis::Core::Hashable
      
        # Required. The name of the timer event.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The name used to identify this timer event in reports.
        # Corresponds to the JSON property `reportingName`
        # @return [String]
        attr_accessor :reporting_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @reporting_name = args[:reporting_name] if args.key?(:reporting_name)
        end
      end
      
      # Settings that control the behavior of a single Floodlight activity config.
      class TrackingFloodlightActivityConfig
        include Google::Apis::Core::Hashable
      
        # Required. The ID of the Floodlight activity.
        # Corresponds to the JSON property `floodlightActivityId`
        # @return [Fixnum]
        attr_accessor :floodlight_activity_id
      
        # Required. The number of days after an ad has been clicked in which a
        # conversion may be counted. Must be between 0 and 90 inclusive.
        # Corresponds to the JSON property `postClickLookbackWindowDays`
        # @return [Fixnum]
        attr_accessor :post_click_lookback_window_days
      
        # Required. The number of days after an ad has been viewed in which a conversion
        # may be counted. Must be between 0 and 90 inclusive.
        # Corresponds to the JSON property `postViewLookbackWindowDays`
        # @return [Fixnum]
        attr_accessor :post_view_lookback_window_days
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @floodlight_activity_id = args[:floodlight_activity_id] if args.key?(:floodlight_activity_id)
          @post_click_lookback_window_days = args[:post_click_lookback_window_days] if args.key?(:post_click_lookback_window_days)
          @post_view_lookback_window_days = args[:post_view_lookback_window_days] if args.key?(:post_view_lookback_window_days)
        end
      end
      
      # Represents information about the transcoded audio or video file.
      class Transcode
        include Google::Apis::Core::Hashable
      
        # The bit rate for the audio stream of the transcoded video, or the bit rate for
        # the transcoded audio, in kilobits per second.
        # Corresponds to the JSON property `audioBitRateKbps`
        # @return [Fixnum]
        attr_accessor :audio_bit_rate_kbps
      
        # The sample rate for the audio stream of the transcoded video, or the sample
        # rate for the transcoded audio, in hertz.
        # Corresponds to the JSON property `audioSampleRateHz`
        # @return [Fixnum]
        attr_accessor :audio_sample_rate_hz
      
        # The transcoding bit rate of the transcoded video, in kilobits per second.
        # Corresponds to the JSON property `bitRateKbps`
        # @return [Fixnum]
        attr_accessor :bit_rate_kbps
      
        # Dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :dimensions
      
        # The size of the transcoded file, in bytes.
        # Corresponds to the JSON property `fileSizeBytes`
        # @return [Fixnum]
        attr_accessor :file_size_bytes
      
        # The frame rate of the transcoded video, in frames per second.
        # Corresponds to the JSON property `frameRate`
        # @return [Float]
        attr_accessor :frame_rate
      
        # The MIME type of the transcoded file.
        # Corresponds to the JSON property `mimeType`
        # @return [String]
        attr_accessor :mime_type
      
        # The name of the transcoded file.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Indicates if the transcoding was successful.
        # Corresponds to the JSON property `transcoded`
        # @return [Boolean]
        attr_accessor :transcoded
        alias_method :transcoded?, :transcoded
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @audio_bit_rate_kbps = args[:audio_bit_rate_kbps] if args.key?(:audio_bit_rate_kbps)
          @audio_sample_rate_hz = args[:audio_sample_rate_hz] if args.key?(:audio_sample_rate_hz)
          @bit_rate_kbps = args[:bit_rate_kbps] if args.key?(:bit_rate_kbps)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @file_size_bytes = args[:file_size_bytes] if args.key?(:file_size_bytes)
          @frame_rate = args[:frame_rate] if args.key?(:frame_rate)
          @mime_type = args[:mime_type] if args.key?(:mime_type)
          @name = args[:name] if args.key?(:name)
          @transcoded = args[:transcoded] if args.key?(:transcoded)
        end
      end
      
      # A creative identifier provided by a registry that is unique across all
      # platforms. This is part of the VAST 4.0 standard.
      class UniversalAdId
        include Google::Apis::Core::Hashable
      
        # The unique creative identifier.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # The registry provides unique creative identifiers.
        # Corresponds to the JSON property `registry`
        # @return [String]
        attr_accessor :registry
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @registry = args[:registry] if args.key?(:registry)
        end
      end
      
      # Details for assigned URL targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when targeting_type is `
      # TARGETING_TYPE_URL`.
      class UrlAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The URL, for example `example.com`. DV360 supports two levels of
        # subdirectory targeting, for example `www.example.com/one-subdirectory-level/
        # second-level`, and five levels of subdomain targeting, for example `five.four.
        # three.two.one.example.com`.
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative = args[:negative] if args.key?(:negative)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # A single user in Display & Video 360.
      class User
        include Google::Apis::Core::Hashable
      
        # The assigned user roles. Required in CreateUser. Output only in UpdateUser.
        # Can only be updated through BulkEditAssignedUserRoles.
        # Corresponds to the JSON property `assignedUserRoles`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedUserRole>]
        attr_accessor :assigned_user_roles
      
        # Required. The display name of the user. Must be UTF-8 encoded with a maximum
        # size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Immutable. The email address used to identify the user.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email
      
        # Output only. The resource name of the user.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The unique ID of the user. Assigned by the system.
        # Corresponds to the JSON property `userId`
        # @return [Fixnum]
        attr_accessor :user_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_user_roles = args[:assigned_user_roles] if args.key?(:assigned_user_roles)
          @display_name = args[:display_name] if args.key?(:display_name)
          @email = args[:email] if args.key?(:email)
          @name = args[:name] if args.key?(:name)
          @user_id = args[:user_id] if args.key?(:user_id)
        end
      end
      
      # User rewarded content targeting option details. This will be populated in the
      # user_rewarded_content_details field when targeting_type is `
      # TARGETING_TYPE_USER_REWARDED_CONTENT`.
      class UserRewardedContentAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_USER_REWARDED_CONTENT`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. User rewarded content status for video ads.
        # Corresponds to the JSON property `userRewardedContent`
        # @return [String]
        attr_accessor :user_rewarded_content
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @user_rewarded_content = args[:user_rewarded_content] if args.key?(:user_rewarded_content)
        end
      end
      
      # Represents a targetable user rewarded content status for video ads only. This
      # will be populated in the user_rewarded_content_details field when
      # targeting_type is `TARGETING_TYPE_USER_REWARDED_CONTENT`.
      class UserRewardedContentTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. User rewarded content status for video ads.
        # Corresponds to the JSON property `userRewardedContent`
        # @return [String]
        attr_accessor :user_rewarded_content
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @user_rewarded_content = args[:user_rewarded_content] if args.key?(:user_rewarded_content)
        end
      end
      
      # Video player size targeting option details. This will be populated in the
      # video_player_size_details field when targeting_type is `
      # TARGETING_TYPE_VIDEO_PLAYER_SIZE`. Explicitly targeting all options is not
      # supported. Remove all video player size targeting options to achieve this
      # effect.
      class VideoPlayerSizeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id field when targeting_type is `
        # TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. The video player size.
        # Corresponds to the JSON property `videoPlayerSize`
        # @return [String]
        attr_accessor :video_player_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @video_player_size = args[:video_player_size] if args.key?(:video_player_size)
        end
      end
      
      # Represents a targetable video player size. This will be populated in the
      # video_player_size_details field when targeting_type is `
      # TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
      class VideoPlayerSizeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The video player size.
        # Corresponds to the JSON property `videoPlayerSize`
        # @return [String]
        attr_accessor :video_player_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @video_player_size = args[:video_player_size] if args.key?(:video_player_size)
        end
      end
      
      # Assigned viewability targeting option details. This will be populated in the
      # viewability_details field of an AssignedTargetingOption when targeting_type is
      # `TARGETING_TYPE_VIEWABILITY`.
      class ViewabilityAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id of a TargetingOption of type `
        # TARGETING_TYPE_VIEWABILITY` (e.g., "509010" for targeting the `
        # VIEWABILITY_10_PERCENT_OR_MORE` option).
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. The predicted viewability percentage.
        # Corresponds to the JSON property `viewability`
        # @return [String]
        attr_accessor :viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @viewability = args[:viewability] if args.key?(:viewability)
        end
      end
      
      # Represents a targetable viewability. This will be populated in the
      # viewability_details field of a TargetingOption when targeting_type is `
      # TARGETING_TYPE_VIEWABILITY`.
      class ViewabilityTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The predicted viewability percentage.
        # Corresponds to the JSON property `viewability`
        # @return [String]
        attr_accessor :viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @viewability = args[:viewability] if args.key?(:viewability)
        end
      end
    end
  end
end
