// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/common/segments.proto

package common

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
	_ "google.golang.org/genproto/googleapis/api/annotations"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Segment only fields.
type Segments struct {
	// Ad network type.
	AdNetworkType enums.AdNetworkTypeEnum_AdNetworkType `protobuf:"varint,3,opt,name=ad_network_type,json=adNetworkType,proto3,enum=google.ads.googleads.v3.enums.AdNetworkTypeEnum_AdNetworkType" json:"ad_network_type,omitempty"`
	// Click type.
	ClickType enums.ClickTypeEnum_ClickType `protobuf:"varint,26,opt,name=click_type,json=clickType,proto3,enum=google.ads.googleads.v3.enums.ClickTypeEnum_ClickType" json:"click_type,omitempty"`
	// Resource name of the conversion action.
	ConversionAction *wrappers.StringValue `protobuf:"bytes,52,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
	// Conversion action category.
	ConversionActionCategory enums.ConversionActionCategoryEnum_ConversionActionCategory `protobuf:"varint,53,opt,name=conversion_action_category,json=conversionActionCategory,proto3,enum=google.ads.googleads.v3.enums.ConversionActionCategoryEnum_ConversionActionCategory" json:"conversion_action_category,omitempty"`
	// Conversion action name.
	ConversionActionName *wrappers.StringValue `protobuf:"bytes,54,opt,name=conversion_action_name,json=conversionActionName,proto3" json:"conversion_action_name,omitempty"`
	// This segments your conversion columns by the original conversion and
	// conversion value vs. the delta if conversions were adjusted. False row has
	// the data as originally stated; While true row has the delta between data
	// now and the data as originally stated. Summing the two together results
	// post-adjustment data.
	ConversionAdjustment *wrappers.BoolValue `protobuf:"bytes,27,opt,name=conversion_adjustment,json=conversionAdjustment,proto3" json:"conversion_adjustment,omitempty"`
	// Conversion attribution event type.
	ConversionAttributionEventType enums.ConversionAttributionEventTypeEnum_ConversionAttributionEventType `protobuf:"varint,2,opt,name=conversion_attribution_event_type,json=conversionAttributionEventType,proto3,enum=google.ads.googleads.v3.enums.ConversionAttributionEventTypeEnum_ConversionAttributionEventType" json:"conversion_attribution_event_type,omitempty"`
	// An enum value representing the number of days between the impression and
	// the conversion.
	ConversionLagBucket enums.ConversionLagBucketEnum_ConversionLagBucket `protobuf:"varint,50,opt,name=conversion_lag_bucket,json=conversionLagBucket,proto3,enum=google.ads.googleads.v3.enums.ConversionLagBucketEnum_ConversionLagBucket" json:"conversion_lag_bucket,omitempty"`
	// An enum value representing the number of days between the impression and
	// the conversion or between the impression and adjustments to the conversion.
	ConversionOrAdjustmentLagBucket enums.ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket `protobuf:"varint,51,opt,name=conversion_or_adjustment_lag_bucket,json=conversionOrAdjustmentLagBucket,proto3,enum=google.ads.googleads.v3.enums.ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket" json:"conversion_or_adjustment_lag_bucket,omitempty"`
	// Date to which metrics apply.
	// yyyy-MM-dd format, e.g., 2018-04-17.
	Date *wrappers.StringValue `protobuf:"bytes,4,opt,name=date,proto3" json:"date,omitempty"`
	// Day of the week, e.g., MONDAY.
	DayOfWeek enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,5,opt,name=day_of_week,json=dayOfWeek,proto3,enum=google.ads.googleads.v3.enums.DayOfWeekEnum_DayOfWeek" json:"day_of_week,omitempty"`
	// Device to which metrics apply.
	Device enums.DeviceEnum_Device `protobuf:"varint,1,opt,name=device,proto3,enum=google.ads.googleads.v3.enums.DeviceEnum_Device" json:"device,omitempty"`
	// External conversion source.
	ExternalConversionSource enums.ExternalConversionSourceEnum_ExternalConversionSource `protobuf:"varint,55,opt,name=external_conversion_source,json=externalConversionSource,proto3,enum=google.ads.googleads.v3.enums.ExternalConversionSourceEnum_ExternalConversionSource" json:"external_conversion_source,omitempty"`
	// Resource name of the geo target constant that represents an airport.
	GeoTargetAirport *wrappers.StringValue `protobuf:"bytes,65,opt,name=geo_target_airport,json=geoTargetAirport,proto3" json:"geo_target_airport,omitempty"`
	// Resource name of the geo target constant that represents a canton.
	GeoTargetCanton *wrappers.StringValue `protobuf:"bytes,76,opt,name=geo_target_canton,json=geoTargetCanton,proto3" json:"geo_target_canton,omitempty"`
	// Resource name of the geo target constant that represents a city.
	GeoTargetCity *wrappers.StringValue `protobuf:"bytes,62,opt,name=geo_target_city,json=geoTargetCity,proto3" json:"geo_target_city,omitempty"`
	// Resource name of the geo target constant that represents a country.
	GeoTargetCountry *wrappers.StringValue `protobuf:"bytes,77,opt,name=geo_target_country,json=geoTargetCountry,proto3" json:"geo_target_country,omitempty"`
	// Resource name of the geo target constant that represents a county.
	GeoTargetCounty *wrappers.StringValue `protobuf:"bytes,68,opt,name=geo_target_county,json=geoTargetCounty,proto3" json:"geo_target_county,omitempty"`
	// Resource name of the geo target constant that represents a district.
	GeoTargetDistrict *wrappers.StringValue `protobuf:"bytes,69,opt,name=geo_target_district,json=geoTargetDistrict,proto3" json:"geo_target_district,omitempty"`
	// Resource name of the geo target constant that represents a metro.
	GeoTargetMetro *wrappers.StringValue `protobuf:"bytes,63,opt,name=geo_target_metro,json=geoTargetMetro,proto3" json:"geo_target_metro,omitempty"`
	// Resource name of the geo target constant that represents the most
	// specific location.
	GeoTargetMostSpecificLocation *wrappers.StringValue `protobuf:"bytes,72,opt,name=geo_target_most_specific_location,json=geoTargetMostSpecificLocation,proto3" json:"geo_target_most_specific_location,omitempty"`
	// Resource name of the geo target constant that represents a postal code.
	GeoTargetPostalCode *wrappers.StringValue `protobuf:"bytes,71,opt,name=geo_target_postal_code,json=geoTargetPostalCode,proto3" json:"geo_target_postal_code,omitempty"`
	// Resource name of the geo target constant that represents a province.
	GeoTargetProvince *wrappers.StringValue `protobuf:"bytes,75,opt,name=geo_target_province,json=geoTargetProvince,proto3" json:"geo_target_province,omitempty"`
	// Resource name of the geo target constant that represents a region.
	GeoTargetRegion *wrappers.StringValue `protobuf:"bytes,64,opt,name=geo_target_region,json=geoTargetRegion,proto3" json:"geo_target_region,omitempty"`
	// Resource name of the geo target constant that represents a state.
	GeoTargetState *wrappers.StringValue `protobuf:"bytes,67,opt,name=geo_target_state,json=geoTargetState,proto3" json:"geo_target_state,omitempty"`
	// Hotel booking window in days.
	HotelBookingWindowDays *wrappers.Int64Value `protobuf:"bytes,6,opt,name=hotel_booking_window_days,json=hotelBookingWindowDays,proto3" json:"hotel_booking_window_days,omitempty"`
	// Hotel center ID.
	HotelCenterId *wrappers.Int64Value `protobuf:"bytes,7,opt,name=hotel_center_id,json=hotelCenterId,proto3" json:"hotel_center_id,omitempty"`
	// Hotel check-in date. Formatted as yyyy-MM-dd.
	HotelCheckInDate *wrappers.StringValue `protobuf:"bytes,8,opt,name=hotel_check_in_date,json=hotelCheckInDate,proto3" json:"hotel_check_in_date,omitempty"`
	// Hotel check-in day of week.
	HotelCheckInDayOfWeek enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,9,opt,name=hotel_check_in_day_of_week,json=hotelCheckInDayOfWeek,proto3,enum=google.ads.googleads.v3.enums.DayOfWeekEnum_DayOfWeek" json:"hotel_check_in_day_of_week,omitempty"`
	// Hotel city.
	HotelCity *wrappers.StringValue `protobuf:"bytes,10,opt,name=hotel_city,json=hotelCity,proto3" json:"hotel_city,omitempty"`
	// Hotel class.
	HotelClass *wrappers.Int32Value `protobuf:"bytes,11,opt,name=hotel_class,json=hotelClass,proto3" json:"hotel_class,omitempty"`
	// Hotel country.
	HotelCountry *wrappers.StringValue `protobuf:"bytes,12,opt,name=hotel_country,json=hotelCountry,proto3" json:"hotel_country,omitempty"`
	// Hotel date selection type.
	HotelDateSelectionType enums.HotelDateSelectionTypeEnum_HotelDateSelectionType `protobuf:"varint,13,opt,name=hotel_date_selection_type,json=hotelDateSelectionType,proto3,enum=google.ads.googleads.v3.enums.HotelDateSelectionTypeEnum_HotelDateSelectionType" json:"hotel_date_selection_type,omitempty"`
	// Hotel length of stay.
	HotelLengthOfStay *wrappers.Int32Value `protobuf:"bytes,14,opt,name=hotel_length_of_stay,json=hotelLengthOfStay,proto3" json:"hotel_length_of_stay,omitempty"`
	// Hotel rate rule ID.
	HotelRateRuleId *wrappers.StringValue `protobuf:"bytes,73,opt,name=hotel_rate_rule_id,json=hotelRateRuleId,proto3" json:"hotel_rate_rule_id,omitempty"`
	// Hotel rate type.
	HotelRateType enums.HotelRateTypeEnum_HotelRateType `protobuf:"varint,74,opt,name=hotel_rate_type,json=hotelRateType,proto3,enum=google.ads.googleads.v3.enums.HotelRateTypeEnum_HotelRateType" json:"hotel_rate_type,omitempty"`
	// Hotel price bucket.
	HotelPriceBucket enums.HotelPriceBucketEnum_HotelPriceBucket `protobuf:"varint,78,opt,name=hotel_price_bucket,json=hotelPriceBucket,proto3,enum=google.ads.googleads.v3.enums.HotelPriceBucketEnum_HotelPriceBucket" json:"hotel_price_bucket,omitempty"`
	// Hotel state.
	HotelState *wrappers.StringValue `protobuf:"bytes,15,opt,name=hotel_state,json=hotelState,proto3" json:"hotel_state,omitempty"`
	// Hour of day as a number between 0 and 23, inclusive.
	Hour *wrappers.Int32Value `protobuf:"bytes,16,opt,name=hour,proto3" json:"hour,omitempty"`
	// Only used with feed item metrics.
	// Indicates whether the interaction metrics occurred on the feed item itself
	// or a different extension or ad unit.
	InteractionOnThisExtension *wrappers.BoolValue `protobuf:"bytes,49,opt,name=interaction_on_this_extension,json=interactionOnThisExtension,proto3" json:"interaction_on_this_extension,omitempty"`
	// Keyword criterion.
	Keyword *Keyword `protobuf:"bytes,61,opt,name=keyword,proto3" json:"keyword,omitempty"`
	// Month as represented by the date of the first day of a month. Formatted as
	// yyyy-MM-dd.
	Month *wrappers.StringValue `protobuf:"bytes,17,opt,name=month,proto3" json:"month,omitempty"`
	// Month of the year, e.g., January.
	MonthOfYear enums.MonthOfYearEnum_MonthOfYear `protobuf:"varint,18,opt,name=month_of_year,json=monthOfYear,proto3,enum=google.ads.googleads.v3.enums.MonthOfYearEnum_MonthOfYear" json:"month_of_year,omitempty"`
	// Partner hotel ID.
	PartnerHotelId *wrappers.StringValue `protobuf:"bytes,19,opt,name=partner_hotel_id,json=partnerHotelId,proto3" json:"partner_hotel_id,omitempty"`
	// Placeholder type. This is only used with feed item metrics.
	PlaceholderType enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,20,opt,name=placeholder_type,json=placeholderType,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_type,omitempty"`
	// Aggregator ID of the product.
	ProductAggregatorId *wrappers.UInt64Value `protobuf:"bytes,28,opt,name=product_aggregator_id,json=productAggregatorId,proto3" json:"product_aggregator_id,omitempty"`
	// Bidding category (level 1) of the product.
	ProductBiddingCategoryLevel1 *wrappers.StringValue `protobuf:"bytes,56,opt,name=product_bidding_category_level1,json=productBiddingCategoryLevel1,proto3" json:"product_bidding_category_level1,omitempty"`
	// Bidding category (level 2) of the product.
	ProductBiddingCategoryLevel2 *wrappers.StringValue `protobuf:"bytes,57,opt,name=product_bidding_category_level2,json=productBiddingCategoryLevel2,proto3" json:"product_bidding_category_level2,omitempty"`
	// Bidding category (level 3) of the product.
	ProductBiddingCategoryLevel3 *wrappers.StringValue `protobuf:"bytes,58,opt,name=product_bidding_category_level3,json=productBiddingCategoryLevel3,proto3" json:"product_bidding_category_level3,omitempty"`
	// Bidding category (level 4) of the product.
	ProductBiddingCategoryLevel4 *wrappers.StringValue `protobuf:"bytes,59,opt,name=product_bidding_category_level4,json=productBiddingCategoryLevel4,proto3" json:"product_bidding_category_level4,omitempty"`
	// Bidding category (level 5) of the product.
	ProductBiddingCategoryLevel5 *wrappers.StringValue `protobuf:"bytes,60,opt,name=product_bidding_category_level5,json=productBiddingCategoryLevel5,proto3" json:"product_bidding_category_level5,omitempty"`
	// Brand of the product.
	ProductBrand *wrappers.StringValue `protobuf:"bytes,29,opt,name=product_brand,json=productBrand,proto3" json:"product_brand,omitempty"`
	// Channel of the product.
	ProductChannel enums.ProductChannelEnum_ProductChannel `protobuf:"varint,30,opt,name=product_channel,json=productChannel,proto3,enum=google.ads.googleads.v3.enums.ProductChannelEnum_ProductChannel" json:"product_channel,omitempty"`
	// Channel exclusivity of the product.
	ProductChannelExclusivity enums.ProductChannelExclusivityEnum_ProductChannelExclusivity `protobuf:"varint,31,opt,name=product_channel_exclusivity,json=productChannelExclusivity,proto3,enum=google.ads.googleads.v3.enums.ProductChannelExclusivityEnum_ProductChannelExclusivity" json:"product_channel_exclusivity,omitempty"`
	// Condition of the product.
	ProductCondition enums.ProductConditionEnum_ProductCondition `protobuf:"varint,32,opt,name=product_condition,json=productCondition,proto3,enum=google.ads.googleads.v3.enums.ProductConditionEnum_ProductCondition" json:"product_condition,omitempty"`
	// Resource name of the geo target constant for the country of sale of the
	// product.
	ProductCountry *wrappers.StringValue `protobuf:"bytes,33,opt,name=product_country,json=productCountry,proto3" json:"product_country,omitempty"`
	// Custom attribute 0 of the product.
	ProductCustomAttribute0 *wrappers.StringValue `protobuf:"bytes,34,opt,name=product_custom_attribute0,json=productCustomAttribute0,proto3" json:"product_custom_attribute0,omitempty"`
	// Custom attribute 1 of the product.
	ProductCustomAttribute1 *wrappers.StringValue `protobuf:"bytes,35,opt,name=product_custom_attribute1,json=productCustomAttribute1,proto3" json:"product_custom_attribute1,omitempty"`
	// Custom attribute 2 of the product.
	ProductCustomAttribute2 *wrappers.StringValue `protobuf:"bytes,36,opt,name=product_custom_attribute2,json=productCustomAttribute2,proto3" json:"product_custom_attribute2,omitempty"`
	// Custom attribute 3 of the product.
	ProductCustomAttribute3 *wrappers.StringValue `protobuf:"bytes,37,opt,name=product_custom_attribute3,json=productCustomAttribute3,proto3" json:"product_custom_attribute3,omitempty"`
	// Custom attribute 4 of the product.
	ProductCustomAttribute4 *wrappers.StringValue `protobuf:"bytes,38,opt,name=product_custom_attribute4,json=productCustomAttribute4,proto3" json:"product_custom_attribute4,omitempty"`
	// Item ID of the product.
	ProductItemId *wrappers.StringValue `protobuf:"bytes,39,opt,name=product_item_id,json=productItemId,proto3" json:"product_item_id,omitempty"`
	// Resource name of the language constant for the language of the product.
	ProductLanguage *wrappers.StringValue `protobuf:"bytes,40,opt,name=product_language,json=productLanguage,proto3" json:"product_language,omitempty"`
	// Merchant ID of the product.
	ProductMerchantId *wrappers.UInt64Value `protobuf:"bytes,41,opt,name=product_merchant_id,json=productMerchantId,proto3" json:"product_merchant_id,omitempty"`
	// Store ID of the product.
	ProductStoreId *wrappers.StringValue `protobuf:"bytes,42,opt,name=product_store_id,json=productStoreId,proto3" json:"product_store_id,omitempty"`
	// Title of the product.
	ProductTitle *wrappers.StringValue `protobuf:"bytes,43,opt,name=product_title,json=productTitle,proto3" json:"product_title,omitempty"`
	// Type (level 1) of the product.
	ProductTypeL1 *wrappers.StringValue `protobuf:"bytes,44,opt,name=product_type_l1,json=productTypeL1,proto3" json:"product_type_l1,omitempty"`
	// Type (level 2) of the product.
	ProductTypeL2 *wrappers.StringValue `protobuf:"bytes,45,opt,name=product_type_l2,json=productTypeL2,proto3" json:"product_type_l2,omitempty"`
	// Type (level 3) of the product.
	ProductTypeL3 *wrappers.StringValue `protobuf:"bytes,46,opt,name=product_type_l3,json=productTypeL3,proto3" json:"product_type_l3,omitempty"`
	// Type (level 4) of the product.
	ProductTypeL4 *wrappers.StringValue `protobuf:"bytes,47,opt,name=product_type_l4,json=productTypeL4,proto3" json:"product_type_l4,omitempty"`
	// Type (level 5) of the product.
	ProductTypeL5 *wrappers.StringValue `protobuf:"bytes,48,opt,name=product_type_l5,json=productTypeL5,proto3" json:"product_type_l5,omitempty"`
	// Quarter as represented by the date of the first day of a quarter.
	// Uses the calendar year for quarters, e.g., the second quarter of 2018
	// starts on 2018-04-01. Formatted as yyyy-MM-dd.
	Quarter *wrappers.StringValue `protobuf:"bytes,21,opt,name=quarter,proto3" json:"quarter,omitempty"`
	// Type of the search engine results page.
	SearchEngineResultsPageType enums.SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType `protobuf:"varint,70,opt,name=search_engine_results_page_type,json=searchEngineResultsPageType,proto3,enum=google.ads.googleads.v3.enums.SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType" json:"search_engine_results_page_type,omitempty"`
	// Match type of the keyword that triggered the ad, including variants.
	SearchTermMatchType enums.SearchTermMatchTypeEnum_SearchTermMatchType `protobuf:"varint,22,opt,name=search_term_match_type,json=searchTermMatchType,proto3,enum=google.ads.googleads.v3.enums.SearchTermMatchTypeEnum_SearchTermMatchType" json:"search_term_match_type,omitempty"`
	// Position of the ad.
	Slot enums.SlotEnum_Slot `protobuf:"varint,23,opt,name=slot,proto3,enum=google.ads.googleads.v3.enums.SlotEnum_Slot" json:"slot,omitempty"`
	// Resource name of the ad group criterion that represents webpage criterion.
	Webpage *wrappers.StringValue `protobuf:"bytes,66,opt,name=webpage,proto3" json:"webpage,omitempty"`
	// Week as defined as Monday through Sunday, and represented by the date of
	// Monday. Formatted as yyyy-MM-dd.
	Week *wrappers.StringValue `protobuf:"bytes,24,opt,name=week,proto3" json:"week,omitempty"`
	// Year, formatted as yyyy.
	Year                 *wrappers.Int32Value `protobuf:"bytes,25,opt,name=year,proto3" json:"year,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *Segments) Reset()         { *m = Segments{} }
func (m *Segments) String() string { return proto.CompactTextString(m) }
func (*Segments) ProtoMessage()    {}
func (*Segments) Descriptor() ([]byte, []int) {
	return fileDescriptor_aeb1e0d15c8aadb4, []int{0}
}

func (m *Segments) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Segments.Unmarshal(m, b)
}
func (m *Segments) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Segments.Marshal(b, m, deterministic)
}
func (m *Segments) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Segments.Merge(m, src)
}
func (m *Segments) XXX_Size() int {
	return xxx_messageInfo_Segments.Size(m)
}
func (m *Segments) XXX_DiscardUnknown() {
	xxx_messageInfo_Segments.DiscardUnknown(m)
}

var xxx_messageInfo_Segments proto.InternalMessageInfo

func (m *Segments) GetAdNetworkType() enums.AdNetworkTypeEnum_AdNetworkType {
	if m != nil {
		return m.AdNetworkType
	}
	return enums.AdNetworkTypeEnum_UNSPECIFIED
}

func (m *Segments) GetClickType() enums.ClickTypeEnum_ClickType {
	if m != nil {
		return m.ClickType
	}
	return enums.ClickTypeEnum_UNSPECIFIED
}

func (m *Segments) GetConversionAction() *wrappers.StringValue {
	if m != nil {
		return m.ConversionAction
	}
	return nil
}

func (m *Segments) GetConversionActionCategory() enums.ConversionActionCategoryEnum_ConversionActionCategory {
	if m != nil {
		return m.ConversionActionCategory
	}
	return enums.ConversionActionCategoryEnum_UNSPECIFIED
}

func (m *Segments) GetConversionActionName() *wrappers.StringValue {
	if m != nil {
		return m.ConversionActionName
	}
	return nil
}

func (m *Segments) GetConversionAdjustment() *wrappers.BoolValue {
	if m != nil {
		return m.ConversionAdjustment
	}
	return nil
}

func (m *Segments) GetConversionAttributionEventType() enums.ConversionAttributionEventTypeEnum_ConversionAttributionEventType {
	if m != nil {
		return m.ConversionAttributionEventType
	}
	return enums.ConversionAttributionEventTypeEnum_UNSPECIFIED
}

func (m *Segments) GetConversionLagBucket() enums.ConversionLagBucketEnum_ConversionLagBucket {
	if m != nil {
		return m.ConversionLagBucket
	}
	return enums.ConversionLagBucketEnum_UNSPECIFIED
}

func (m *Segments) GetConversionOrAdjustmentLagBucket() enums.ConversionOrAdjustmentLagBucketEnum_ConversionOrAdjustmentLagBucket {
	if m != nil {
		return m.ConversionOrAdjustmentLagBucket
	}
	return enums.ConversionOrAdjustmentLagBucketEnum_UNSPECIFIED
}

func (m *Segments) GetDate() *wrappers.StringValue {
	if m != nil {
		return m.Date
	}
	return nil
}

func (m *Segments) GetDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
	if m != nil {
		return m.DayOfWeek
	}
	return enums.DayOfWeekEnum_UNSPECIFIED
}

func (m *Segments) GetDevice() enums.DeviceEnum_Device {
	if m != nil {
		return m.Device
	}
	return enums.DeviceEnum_UNSPECIFIED
}

func (m *Segments) GetExternalConversionSource() enums.ExternalConversionSourceEnum_ExternalConversionSource {
	if m != nil {
		return m.ExternalConversionSource
	}
	return enums.ExternalConversionSourceEnum_UNSPECIFIED
}

func (m *Segments) GetGeoTargetAirport() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetAirport
	}
	return nil
}

func (m *Segments) GetGeoTargetCanton() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetCanton
	}
	return nil
}

func (m *Segments) GetGeoTargetCity() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetCity
	}
	return nil
}

func (m *Segments) GetGeoTargetCountry() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetCountry
	}
	return nil
}

func (m *Segments) GetGeoTargetCounty() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetCounty
	}
	return nil
}

func (m *Segments) GetGeoTargetDistrict() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetDistrict
	}
	return nil
}

func (m *Segments) GetGeoTargetMetro() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetMetro
	}
	return nil
}

func (m *Segments) GetGeoTargetMostSpecificLocation() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetMostSpecificLocation
	}
	return nil
}

func (m *Segments) GetGeoTargetPostalCode() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetPostalCode
	}
	return nil
}

func (m *Segments) GetGeoTargetProvince() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetProvince
	}
	return nil
}

func (m *Segments) GetGeoTargetRegion() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetRegion
	}
	return nil
}

func (m *Segments) GetGeoTargetState() *wrappers.StringValue {
	if m != nil {
		return m.GeoTargetState
	}
	return nil
}

func (m *Segments) GetHotelBookingWindowDays() *wrappers.Int64Value {
	if m != nil {
		return m.HotelBookingWindowDays
	}
	return nil
}

func (m *Segments) GetHotelCenterId() *wrappers.Int64Value {
	if m != nil {
		return m.HotelCenterId
	}
	return nil
}

func (m *Segments) GetHotelCheckInDate() *wrappers.StringValue {
	if m != nil {
		return m.HotelCheckInDate
	}
	return nil
}

func (m *Segments) GetHotelCheckInDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
	if m != nil {
		return m.HotelCheckInDayOfWeek
	}
	return enums.DayOfWeekEnum_UNSPECIFIED
}

func (m *Segments) GetHotelCity() *wrappers.StringValue {
	if m != nil {
		return m.HotelCity
	}
	return nil
}

func (m *Segments) GetHotelClass() *wrappers.Int32Value {
	if m != nil {
		return m.HotelClass
	}
	return nil
}

func (m *Segments) GetHotelCountry() *wrappers.StringValue {
	if m != nil {
		return m.HotelCountry
	}
	return nil
}

func (m *Segments) GetHotelDateSelectionType() enums.HotelDateSelectionTypeEnum_HotelDateSelectionType {
	if m != nil {
		return m.HotelDateSelectionType
	}
	return enums.HotelDateSelectionTypeEnum_UNSPECIFIED
}

func (m *Segments) GetHotelLengthOfStay() *wrappers.Int32Value {
	if m != nil {
		return m.HotelLengthOfStay
	}
	return nil
}

func (m *Segments) GetHotelRateRuleId() *wrappers.StringValue {
	if m != nil {
		return m.HotelRateRuleId
	}
	return nil
}

func (m *Segments) GetHotelRateType() enums.HotelRateTypeEnum_HotelRateType {
	if m != nil {
		return m.HotelRateType
	}
	return enums.HotelRateTypeEnum_UNSPECIFIED
}

func (m *Segments) GetHotelPriceBucket() enums.HotelPriceBucketEnum_HotelPriceBucket {
	if m != nil {
		return m.HotelPriceBucket
	}
	return enums.HotelPriceBucketEnum_UNSPECIFIED
}

func (m *Segments) GetHotelState() *wrappers.StringValue {
	if m != nil {
		return m.HotelState
	}
	return nil
}

func (m *Segments) GetHour() *wrappers.Int32Value {
	if m != nil {
		return m.Hour
	}
	return nil
}

func (m *Segments) GetInteractionOnThisExtension() *wrappers.BoolValue {
	if m != nil {
		return m.InteractionOnThisExtension
	}
	return nil
}

func (m *Segments) GetKeyword() *Keyword {
	if m != nil {
		return m.Keyword
	}
	return nil
}

func (m *Segments) GetMonth() *wrappers.StringValue {
	if m != nil {
		return m.Month
	}
	return nil
}

func (m *Segments) GetMonthOfYear() enums.MonthOfYearEnum_MonthOfYear {
	if m != nil {
		return m.MonthOfYear
	}
	return enums.MonthOfYearEnum_UNSPECIFIED
}

func (m *Segments) GetPartnerHotelId() *wrappers.StringValue {
	if m != nil {
		return m.PartnerHotelId
	}
	return nil
}

func (m *Segments) GetPlaceholderType() enums.PlaceholderTypeEnum_PlaceholderType {
	if m != nil {
		return m.PlaceholderType
	}
	return enums.PlaceholderTypeEnum_UNSPECIFIED
}

func (m *Segments) GetProductAggregatorId() *wrappers.UInt64Value {
	if m != nil {
		return m.ProductAggregatorId
	}
	return nil
}

func (m *Segments) GetProductBiddingCategoryLevel1() *wrappers.StringValue {
	if m != nil {
		return m.ProductBiddingCategoryLevel1
	}
	return nil
}

func (m *Segments) GetProductBiddingCategoryLevel2() *wrappers.StringValue {
	if m != nil {
		return m.ProductBiddingCategoryLevel2
	}
	return nil
}

func (m *Segments) GetProductBiddingCategoryLevel3() *wrappers.StringValue {
	if m != nil {
		return m.ProductBiddingCategoryLevel3
	}
	return nil
}

func (m *Segments) GetProductBiddingCategoryLevel4() *wrappers.StringValue {
	if m != nil {
		return m.ProductBiddingCategoryLevel4
	}
	return nil
}

func (m *Segments) GetProductBiddingCategoryLevel5() *wrappers.StringValue {
	if m != nil {
		return m.ProductBiddingCategoryLevel5
	}
	return nil
}

func (m *Segments) GetProductBrand() *wrappers.StringValue {
	if m != nil {
		return m.ProductBrand
	}
	return nil
}

func (m *Segments) GetProductChannel() enums.ProductChannelEnum_ProductChannel {
	if m != nil {
		return m.ProductChannel
	}
	return enums.ProductChannelEnum_UNSPECIFIED
}

func (m *Segments) GetProductChannelExclusivity() enums.ProductChannelExclusivityEnum_ProductChannelExclusivity {
	if m != nil {
		return m.ProductChannelExclusivity
	}
	return enums.ProductChannelExclusivityEnum_UNSPECIFIED
}

func (m *Segments) GetProductCondition() enums.ProductConditionEnum_ProductCondition {
	if m != nil {
		return m.ProductCondition
	}
	return enums.ProductConditionEnum_UNSPECIFIED
}

func (m *Segments) GetProductCountry() *wrappers.StringValue {
	if m != nil {
		return m.ProductCountry
	}
	return nil
}

func (m *Segments) GetProductCustomAttribute0() *wrappers.StringValue {
	if m != nil {
		return m.ProductCustomAttribute0
	}
	return nil
}

func (m *Segments) GetProductCustomAttribute1() *wrappers.StringValue {
	if m != nil {
		return m.ProductCustomAttribute1
	}
	return nil
}

func (m *Segments) GetProductCustomAttribute2() *wrappers.StringValue {
	if m != nil {
		return m.ProductCustomAttribute2
	}
	return nil
}

func (m *Segments) GetProductCustomAttribute3() *wrappers.StringValue {
	if m != nil {
		return m.ProductCustomAttribute3
	}
	return nil
}

func (m *Segments) GetProductCustomAttribute4() *wrappers.StringValue {
	if m != nil {
		return m.ProductCustomAttribute4
	}
	return nil
}

func (m *Segments) GetProductItemId() *wrappers.StringValue {
	if m != nil {
		return m.ProductItemId
	}
	return nil
}

func (m *Segments) GetProductLanguage() *wrappers.StringValue {
	if m != nil {
		return m.ProductLanguage
	}
	return nil
}

func (m *Segments) GetProductMerchantId() *wrappers.UInt64Value {
	if m != nil {
		return m.ProductMerchantId
	}
	return nil
}

func (m *Segments) GetProductStoreId() *wrappers.StringValue {
	if m != nil {
		return m.ProductStoreId
	}
	return nil
}

func (m *Segments) GetProductTitle() *wrappers.StringValue {
	if m != nil {
		return m.ProductTitle
	}
	return nil
}

func (m *Segments) GetProductTypeL1() *wrappers.StringValue {
	if m != nil {
		return m.ProductTypeL1
	}
	return nil
}

func (m *Segments) GetProductTypeL2() *wrappers.StringValue {
	if m != nil {
		return m.ProductTypeL2
	}
	return nil
}

func (m *Segments) GetProductTypeL3() *wrappers.StringValue {
	if m != nil {
		return m.ProductTypeL3
	}
	return nil
}

func (m *Segments) GetProductTypeL4() *wrappers.StringValue {
	if m != nil {
		return m.ProductTypeL4
	}
	return nil
}

func (m *Segments) GetProductTypeL5() *wrappers.StringValue {
	if m != nil {
		return m.ProductTypeL5
	}
	return nil
}

func (m *Segments) GetQuarter() *wrappers.StringValue {
	if m != nil {
		return m.Quarter
	}
	return nil
}

func (m *Segments) GetSearchEngineResultsPageType() enums.SearchEngineResultsPageTypeEnum_SearchEngineResultsPageType {
	if m != nil {
		return m.SearchEngineResultsPageType
	}
	return enums.SearchEngineResultsPageTypeEnum_UNSPECIFIED
}

func (m *Segments) GetSearchTermMatchType() enums.SearchTermMatchTypeEnum_SearchTermMatchType {
	if m != nil {
		return m.SearchTermMatchType
	}
	return enums.SearchTermMatchTypeEnum_UNSPECIFIED
}

func (m *Segments) GetSlot() enums.SlotEnum_Slot {
	if m != nil {
		return m.Slot
	}
	return enums.SlotEnum_UNSPECIFIED
}

func (m *Segments) GetWebpage() *wrappers.StringValue {
	if m != nil {
		return m.Webpage
	}
	return nil
}

func (m *Segments) GetWeek() *wrappers.StringValue {
	if m != nil {
		return m.Week
	}
	return nil
}

func (m *Segments) GetYear() *wrappers.Int32Value {
	if m != nil {
		return m.Year
	}
	return nil
}

// A Keyword criterion segment.
type Keyword struct {
	// The AdGroupCriterion resource name.
	AdGroupCriterion *wrappers.StringValue `protobuf:"bytes,1,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
	// Keyword info.
	Info                 *KeywordInfo `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *Keyword) Reset()         { *m = Keyword{} }
func (m *Keyword) String() string { return proto.CompactTextString(m) }
func (*Keyword) ProtoMessage()    {}
func (*Keyword) Descriptor() ([]byte, []int) {
	return fileDescriptor_aeb1e0d15c8aadb4, []int{1}
}

func (m *Keyword) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Keyword.Unmarshal(m, b)
}
func (m *Keyword) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Keyword.Marshal(b, m, deterministic)
}
func (m *Keyword) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Keyword.Merge(m, src)
}
func (m *Keyword) XXX_Size() int {
	return xxx_messageInfo_Keyword.Size(m)
}
func (m *Keyword) XXX_DiscardUnknown() {
	xxx_messageInfo_Keyword.DiscardUnknown(m)
}

var xxx_messageInfo_Keyword proto.InternalMessageInfo

func (m *Keyword) GetAdGroupCriterion() *wrappers.StringValue {
	if m != nil {
		return m.AdGroupCriterion
	}
	return nil
}

func (m *Keyword) GetInfo() *KeywordInfo {
	if m != nil {
		return m.Info
	}
	return nil
}

func init() {
	proto.RegisterType((*Segments)(nil), "google.ads.googleads.v3.common.Segments")
	proto.RegisterType((*Keyword)(nil), "google.ads.googleads.v3.common.Keyword")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v3/common/segments.proto", fileDescriptor_aeb1e0d15c8aadb4)
}

var fileDescriptor_aeb1e0d15c8aadb4 = []byte{
	// 2157 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9a, 0x5b, 0x5b, 0xdb, 0xc8,
	0x19, 0xc7, 0x1f, 0x67, 0xd9, 0x64, 0x33, 0x2c, 0x01, 0x86, 0x84, 0x9d, 0x90, 0x33, 0xdb, 0x76,
	0xd3, 0x3d, 0xd8, 0x60, 0x03, 0xed, 0x3a, 0x9b, 0x83, 0x31, 0x2c, 0x38, 0x81, 0x40, 0x05, 0xcb,
	0xb6, 0xfb, 0xa4, 0x55, 0x07, 0x69, 0x2c, 0x54, 0x64, 0x8d, 0x32, 0x1a, 0xc3, 0xfa, 0xa6, 0xfd,
	0x00, 0xbd, 0xeb, 0x45, 0xae, 0xfb, 0xf4, 0xb2, 0xbd, 0xe9, 0x77, 0xe8, 0x5d, 0x3f, 0x49, 0x9f,
	0x7e, 0x8a, 0x7d, 0xe6, 0x20, 0x59, 0xb6, 0xb1, 0x35, 0x0e, 0x57, 0x48, 0xa3, 0xf7, 0xff, 0x7b,
	0x5f, 0xbd, 0x33, 0x7a, 0xe7, 0x60, 0xc0, 0x57, 0x1e, 0xa5, 0x5e, 0x40, 0x4a, 0xd8, 0x8d, 0x4b,
	0xea, 0x52, 0x5c, 0x9d, 0x55, 0x4a, 0x0e, 0x6d, 0xb5, 0x68, 0x58, 0x8a, 0x89, 0xd7, 0x22, 0x21,
	0x8f, 0x8b, 0x11, 0xa3, 0x9c, 0xc2, 0xfb, 0xca, 0xa6, 0x88, 0xdd, 0xb8, 0x98, 0x9a, 0x17, 0xcf,
	0x2a, 0x45, 0x65, 0xbe, 0x90, 0x87, 0x73, 0x98, 0xcf, 0x09, 0xf3, 0xb1, 0xc2, 0x2d, 0x54, 0x86,
	0x99, 0x93, 0xb0, 0xdd, 0x8a, 0x4b, 0xd8, 0xb5, 0x43, 0xc2, 0xcf, 0x29, 0x3b, 0xb5, 0x79, 0x27,
	0x22, 0x5a, 0x54, 0x1c, 0x2d, 0x72, 0x02, 0xdf, 0xe9, 0xb1, 0x7f, 0x96, 0x63, 0x4f, 0xc3, 0x33,
	0xc2, 0x62, 0x9f, 0x86, 0x36, 0x76, 0xb8, 0xf8, 0xe3, 0x60, 0x4e, 0x3c, 0xca, 0x3a, 0x5a, 0xbf,
	0x69, 0xae, 0xe7, 0x9c, 0xf9, 0xc7, 0x6d, 0x09, 0x21, 0x67, 0x24, 0xe4, 0xd9, 0x30, 0xbe, 0x36,
	0xc6, 0x04, 0xd8, 0xb3, 0x8f, 0xdb, 0xce, 0x29, 0xe1, 0x5a, 0xba, 0x65, 0x2c, 0xa5, 0xcc, 0xc6,
	0xee, 0x9f, 0xda, 0x31, 0x17, 0x9d, 0x36, 0x08, 0x2a, 0x8d, 0x06, 0xb9, 0xb8, 0x63, 0xd3, 0xa6,
	0x7d, 0x4e, 0xc8, 0xa9, 0x16, 0x7c, 0x9e, 0x23, 0x20, 0x67, 0xbe, 0x63, 0x98, 0x67, 0xf2, 0x23,
	0x27, 0x2c, 0xc4, 0x81, 0x9d, 0x09, 0x37, 0xa6, 0x6d, 0x96, 0xea, 0x9f, 0x8e, 0xd6, 0x9f, 0x50,
	0x4e, 0x02, 0xdb, 0xc5, 0x9c, 0xd8, 0x31, 0x09, 0x88, 0xea, 0xaa, 0x4c, 0x7e, 0xd7, 0x4c, 0xe4,
	0x11, 0xf3, 0x1d, 0xd2, 0x9b, 0x93, 0x8a, 0x89, 0x8e, 0x09, 0xb7, 0x19, 0x67, 0xcb, 0xa3, 0x45,
	0x2d, 0x1a, 0xf2, 0x13, 0x91, 0xca, 0x0e, 0xc1, 0x4c, 0x4b, 0x56, 0x46, 0x4b, 0xa2, 0x00, 0x3b,
	0xe4, 0x84, 0x06, 0x2e, 0x61, 0x59, 0x47, 0x39, 0xd1, 0x45, 0x8c, 0xba, 0x6d, 0x87, 0xdb, 0xce,
	0x09, 0x0e, 0x43, 0x12, 0x68, 0xd1, 0xf3, 0xb1, 0x44, 0x36, 0xf9, 0xd1, 0x09, 0xda, 0xb1, 0x7f,
	0xe6, 0xf3, 0x64, 0xc8, 0xaf, 0x1a, 0x02, 0x68, 0xe8, 0xfa, 0xa2, 0x1f, 0xb4, 0xac, 0x3e, 0x5a,
	0x16, 0x13, 0xcc, 0x9c, 0x13, 0x9b, 0x84, 0x9e, 0x1f, 0x12, 0x9b, 0x91, 0xb8, 0x1d, 0xf0, 0xd8,
	0x8e, 0xb0, 0xd7, 0x93, 0xda, 0xaa, 0x11, 0x84, 0x13, 0xd6, 0xb2, 0x5b, 0x98, 0x8b, 0xcb, 0xae,
	0xf6, 0x71, 0x8e, 0x36, 0xa0, 0x49, 0xaf, 0xeb, 0x42, 0x56, 0x92, 0x77, 0xc7, 0xed, 0x66, 0xe9,
	0x9c, 0xe1, 0x28, 0x22, 0x4c, 0x17, 0xba, 0x85, 0xbb, 0x09, 0x29, 0xf2, 0x4b, 0x38, 0x0c, 0x29,
	0xc7, 0xe2, 0x3d, 0xf5, 0xd3, 0xc5, 0xff, 0xac, 0x82, 0x8f, 0x0e, 0x74, 0x65, 0x84, 0x4d, 0x30,
	0xdd, 0x57, 0xa8, 0xd0, 0x07, 0x0f, 0x0b, 0x8f, 0x6f, 0x94, 0x9f, 0x15, 0x87, 0x55, 0x4b, 0x19,
	0x4e, 0xb1, 0xe6, 0xbe, 0x56, 0xa2, 0xc3, 0x4e, 0x44, 0x36, 0xc3, 0x76, 0xab, 0xb7, 0xc5, 0x9a,
	0xc2, 0xd9, 0x5b, 0xf8, 0x1d, 0x00, 0xdd, 0xda, 0x86, 0x16, 0xa4, 0x8b, 0xb5, 0x1c, 0x17, 0x75,
	0x21, 0x48, 0xf1, 0xe9, 0x9d, 0x75, 0xdd, 0x49, 0x2e, 0x61, 0x03, 0xcc, 0x0e, 0x94, 0x40, 0xb4,
	0xf2, 0xb0, 0xf0, 0x78, 0xb2, 0x7c, 0x37, 0xa1, 0x27, 0x59, 0x2a, 0x1e, 0x70, 0xe6, 0x87, 0xde,
	0x11, 0x0e, 0xda, 0xc4, 0x9a, 0xe9, 0xca, 0x6a, 0x52, 0x05, 0xff, 0x56, 0x00, 0x0b, 0xc3, 0xcb,
	0x29, 0x5a, 0x95, 0x21, 0x1f, 0xe6, 0x85, 0xdc, 0x47, 0xad, 0x6b, 0xb9, 0x7a, 0x83, 0x21, 0x0f,
	0x2d, 0xe4, 0x0c, 0x79, 0x02, 0x2d, 0x30, 0x3f, 0x18, 0x53, 0x88, 0x5b, 0x04, 0xad, 0x19, 0xbc,
	0xe4, 0xcd, 0x7e, 0xee, 0x6b, 0xdc, 0x22, 0x70, 0x0f, 0xdc, 0xca, 0x32, 0xd3, 0x8a, 0x8b, 0xee,
	0x48, 0xe4, 0xc2, 0x00, 0x72, 0x9d, 0xd2, 0x60, 0x10, 0x98, 0xea, 0xe0, 0xbf, 0x0a, 0xe0, 0x51,
	0xee, 0x44, 0x82, 0xae, 0xc8, 0x04, 0xfe, 0xd1, 0x3c, 0x81, 0x5d, 0xcc, 0xa6, 0xa0, 0x74, 0x07,
	0xc2, 0x48, 0x13, 0xeb, 0xbe, 0x33, 0xf2, 0x39, 0xfc, 0x73, 0xcf, 0xeb, 0x77, 0x67, 0x19, 0x54,
	0x96, 0x01, 0xbe, 0x34, 0x0e, 0x70, 0x07, 0x7b, 0xeb, 0x52, 0xd9, 0x17, 0x55, 0xda, 0x6e, 0xcd,
	0x39, 0x83, 0x8d, 0xf0, 0xdf, 0x05, 0xf0, 0xa9, 0xc1, 0xa4, 0x87, 0x2a, 0x32, 0x9c, 0x63, 0xe3,
	0x70, 0xf6, 0x58, 0xb7, 0x4b, 0x86, 0x85, 0x76, 0xa1, 0x8d, 0xf5, 0xc0, 0x19, 0x6d, 0x00, 0x97,
	0xc0, 0x84, 0x98, 0xba, 0xd0, 0x84, 0xc1, 0x98, 0x93, 0x96, 0xf0, 0x08, 0x4c, 0x66, 0xe6, 0x63,
	0xf4, 0xa1, 0xd1, 0xf7, 0xbe, 0x81, 0x3b, 0x7b, 0xcd, 0xef, 0x09, 0x39, 0x95, 0x51, 0xa7, 0x77,
	0xd6, 0x75, 0x37, 0xb9, 0x84, 0xdb, 0xe0, 0xaa, 0x9a, 0xb6, 0x51, 0x41, 0x22, 0x97, 0xf2, 0x90,
	0xd2, 0x58, 0xf1, 0xe4, 0xa5, 0xa5, 0xf5, 0xf2, 0x73, 0x1f, 0x3e, 0xab, 0xa3, 0x5f, 0x19, 0x7d,
	0xee, 0x9b, 0x1a, 0xd0, 0xcd, 0xf0, 0x81, 0x94, 0x4b, 0x87, 0xc3, 0x1e, 0x5a, 0x88, 0x0c, 0x79,
	0x02, 0x5f, 0x02, 0xe8, 0x11, 0x6a, 0x73, 0xcc, 0x3c, 0xc2, 0x6d, 0xec, 0xb3, 0x88, 0x32, 0x8e,
	0x6a, 0x26, 0xf5, 0xcc, 0x23, 0xf4, 0x50, 0xca, 0x6a, 0x4a, 0x05, 0xb7, 0xc1, 0x6c, 0x86, 0xe5,
	0xe0, 0x90, 0xd3, 0x10, 0xed, 0x18, 0xa0, 0xa6, 0x53, 0x54, 0x5d, 0x8a, 0xe0, 0x06, 0x98, 0xce,
	0x92, 0x7c, 0xde, 0x41, 0xcf, 0x0c, 0x38, 0x53, 0x5d, 0x8e, 0xcf, 0x3b, 0x7d, 0xef, 0xe6, 0xd0,
	0x76, 0xc8, 0x59, 0x07, 0xed, 0x8e, 0xf5, 0x6e, 0x75, 0xa5, 0xea, 0x7f, 0x37, 0xd1, 0xda, 0x41,
	0x1b, 0xe3, 0xbd, 0x9b, 0x14, 0xc1, 0x1d, 0x30, 0x97, 0x21, 0xb9, 0x7e, 0xcc, 0x99, 0xef, 0x70,
	0xb4, 0x69, 0xc0, 0x9a, 0x4d, 0x59, 0x1b, 0x5a, 0x06, 0xbf, 0x05, 0x33, 0x19, 0x5a, 0x8b, 0x70,
	0x46, 0xd1, 0x73, 0x03, 0xd4, 0x8d, 0x14, 0xb5, 0x2b, 0x34, 0xb0, 0x09, 0x1e, 0x65, 0x39, 0x34,
	0xe6, 0x76, 0x1c, 0x11, 0xc7, 0x6f, 0xfa, 0x8e, 0x1d, 0x50, 0x47, 0x4e, 0xe7, 0x68, 0xdb, 0x00,
	0x7c, 0xaf, 0x0b, 0xa6, 0x31, 0x3f, 0xd0, 0x8c, 0x1d, 0x8d, 0x80, 0xbf, 0x01, 0xf3, 0x19, 0x3f,
	0x11, 0x8d, 0xb9, 0xfc, 0x18, 0x5c, 0x82, 0xb6, 0x0c, 0xe0, 0x73, 0x29, 0x7c, 0x5f, 0x2a, 0xeb,
	0xd4, 0x25, 0x7d, 0x09, 0x8d, 0x18, 0x3d, 0xf3, 0x43, 0x87, 0xa0, 0x57, 0x63, 0x25, 0x74, 0x5f,
	0xcb, 0xfa, 0x3a, 0x9a, 0x11, 0x4f, 0xbc, 0xf8, 0x8b, 0xb1, 0x3a, 0xda, 0x92, 0xa2, 0xbe, 0xae,
	0x89, 0xb9, 0xa8, 0x67, 0xf5, 0xb1, 0xba, 0xe6, 0x80, 0xab, 0xca, 0x76, 0x5b, 0xad, 0xaa, 0x8f,
	0x29, 0x3d, 0xf5, 0x43, 0xcf, 0x3e, 0xf7, 0x43, 0x97, 0x9e, 0xdb, 0x2e, 0xee, 0xc4, 0xe8, 0xaa,
	0x04, 0xde, 0x19, 0x00, 0x36, 0x42, 0xbe, 0xb6, 0xa2, 0x78, 0xf3, 0x52, 0xbd, 0xae, 0xc4, 0xdf,
	0x4b, 0xed, 0x06, 0xee, 0xc4, 0xb0, 0x0e, 0xa6, 0x15, 0xd7, 0x21, 0x21, 0x27, 0xcc, 0xf6, 0x5d,
	0x74, 0x2d, 0x9f, 0x36, 0x25, 0x35, 0x75, 0x29, 0x69, 0xb8, 0xf0, 0x15, 0x98, 0xd3, 0x90, 0x13,
	0xe2, 0x9c, 0xda, 0x7e, 0x28, 0xb7, 0x1c, 0xe8, 0x23, 0x93, 0x8f, 0x4c, 0x91, 0x84, 0xae, 0x11,
	0x6e, 0x88, 0x37, 0x7d, 0x0b, 0x16, 0x06, 0x60, 0xdd, 0x92, 0x7e, 0xfd, 0x52, 0x25, 0xfd, 0x56,
	0xaf, 0xb7, 0xa4, 0xbc, 0x3f, 0x01, 0x40, 0xbb, 0x14, 0x45, 0x06, 0x18, 0x84, 0x7d, 0x5d, 0x81,
	0x44, 0x81, 0xf9, 0x06, 0x4c, 0x6a, 0x71, 0x80, 0xe3, 0x18, 0x4d, 0x0e, 0xcf, 0x5e, 0xa5, 0xac,
	0xc4, 0xca, 0x59, 0x5d, 0x98, 0xc3, 0x1a, 0x98, 0xd2, 0x6a, 0x5d, 0x99, 0x3e, 0x36, 0xf0, 0xfe,
	0xb1, 0x02, 0xe8, 0xaa, 0xf4, 0xd7, 0x42, 0x32, 0x36, 0x2e, 0xd8, 0xe8, 0xa1, 0x29, 0x99, 0xb0,
	0xfd, 0x9c, 0x84, 0x6d, 0x0b, 0xbd, 0x48, 0xff, 0x41, 0xa2, 0x4e, 0xd7, 0x3d, 0x17, 0x3f, 0xd2,
	0x03, 0x6a, 0xa0, 0x1d, 0xee, 0x80, 0x9b, 0x2a, 0x98, 0x80, 0x84, 0x9e, 0xda, 0xd0, 0xc5, 0x1c,
	0x77, 0xd0, 0x8d, 0xfc, 0xbc, 0xcc, 0x4a, 0xe1, 0x8e, 0xd4, 0xed, 0x35, 0x0f, 0x38, 0xee, 0xc0,
	0x06, 0x80, 0x99, 0xcd, 0x24, 0x6b, 0x07, 0x44, 0x8c, 0xd0, 0x86, 0xc9, 0x97, 0x28, 0x75, 0x16,
	0xe6, 0xc4, 0x6a, 0x07, 0xa4, 0xe1, 0x8a, 0x2d, 0x47, 0xdf, 0xbe, 0x14, 0xbd, 0x34, 0xda, 0x72,
	0x6c, 0x27, 0xa0, 0xde, 0x94, 0x24, 0x2d, 0xfa, 0x63, 0x48, 0x6e, 0x21, 0x4b, 0x42, 0xce, 0xee,
	0x9b, 0xd1, 0x6b, 0xe9, 0x6a, 0xc3, 0xc4, 0xd5, 0xbe, 0xd0, 0x65, 0xd6, 0x51, 0xfd, 0x8d, 0xfa,
	0x9b, 0xc9, 0xb4, 0xc0, 0xa7, 0xc9, 0x18, 0x54, 0x05, 0x66, 0xda, 0x20, 0x3f, 0x6a, 0x10, 0xaa,
	0xe2, 0x52, 0x02, 0x13, 0x27, 0xb4, 0xcd, 0xd0, 0x4c, 0x7e, 0x1f, 0x49, 0x43, 0xf8, 0x7b, 0x70,
	0xcf, 0x17, 0xdf, 0xbe, 0xde, 0x19, 0x88, 0xb1, 0x76, 0xe2, 0xc7, 0xb6, 0x58, 0x60, 0x84, 0x62,
	0x5d, 0x81, 0x96, 0x73, 0xd7, 0xf4, 0x0b, 0x19, 0xc0, 0x5e, 0x78, 0x78, 0xe2, 0xc7, 0x9b, 0x89,
	0x1a, 0xd6, 0xc0, 0xb5, 0x53, 0xd2, 0x39, 0xa7, 0xcc, 0x45, 0x4f, 0x25, 0xe8, 0xb3, 0xe2, 0xe8,
	0x33, 0xb4, 0xe2, 0x2b, 0x65, 0x6e, 0x25, 0x3a, 0x58, 0x06, 0x1f, 0xca, 0x03, 0x05, 0x34, 0x6b,
	0x90, 0x0b, 0x65, 0x0a, 0xff, 0x00, 0xa6, 0x7a, 0x0e, 0x21, 0x10, 0x94, 0x9d, 0x56, 0xcd, 0xe9,
	0xb4, 0x5d, 0xa1, 0xd9, 0x6b, 0xfe, 0x8e, 0x60, 0x26, 0xfb, 0x2b, 0x73, 0x6f, 0x4d, 0xb6, 0xba,
	0x37, 0x62, 0x2e, 0x88, 0x30, 0xe3, 0x21, 0x61, 0xb6, 0xea, 0x2d, 0xdf, 0x45, 0x73, 0x26, 0x73,
	0x81, 0x56, 0xc9, 0x81, 0xd0, 0x70, 0x61, 0x0b, 0xcc, 0xf4, 0x9f, 0x7c, 0xa0, 0x9b, 0x32, 0xd4,
	0xf5, 0x9c, 0x50, 0xf7, 0xbb, 0xb2, 0x74, 0x30, 0xf7, 0xb5, 0x59, 0xd3, 0x51, 0x6f, 0x03, 0xdc,
	0x07, 0xb7, 0x92, 0xc3, 0x0b, 0xec, 0x79, 0x8c, 0x78, 0x98, 0x53, 0x39, 0x51, 0xdc, 0x1d, 0x12,
	0xfb, 0x77, 0x99, 0x99, 0x62, 0x4e, 0x4b, 0x6b, 0xa9, 0xb2, 0xe1, 0x42, 0x07, 0x3c, 0x48, 0x88,
	0xc7, 0xbe, 0xeb, 0x8a, 0xe9, 0x2c, 0xd9, 0xf0, 0xda, 0x01, 0x39, 0x23, 0xc1, 0x32, 0xfa, 0xb5,
	0x41, 0x5e, 0xee, 0x6a, 0xc8, 0xba, 0x62, 0x24, 0xbb, 0xd7, 0x1d, 0x49, 0xc8, 0x77, 0x52, 0x46,
	0x5f, 0x5f, 0xd2, 0x49, 0x39, 0xdf, 0x49, 0x05, 0x55, 0x2f, 0xe9, 0xa4, 0x92, 0xef, 0x64, 0x05,
	0x3d, 0xb9, 0xa4, 0x93, 0x95, 0x7c, 0x27, 0xab, 0xe8, 0x9b, 0x4b, 0x3a, 0x59, 0x15, 0xb3, 0x5d,
	0xea, 0x84, 0xe1, 0xd0, 0x45, 0xf7, 0x4c, 0x66, 0xbb, 0x04, 0x29, 0x14, 0xd0, 0x07, 0xd3, 0x7d,
	0x67, 0x71, 0xe8, 0xbe, 0x1c, 0xfb, 0x2f, 0xf2, 0xc6, 0xbe, 0x52, 0xd5, 0x95, 0x48, 0x0d, 0xfd,
	0x9e, 0x26, 0xeb, 0x46, 0xd4, 0x73, 0x0f, 0xdf, 0x15, 0xc0, 0x9d, 0x11, 0xe7, 0x7e, 0xe8, 0x81,
	0xf4, 0x7b, 0x34, 0x9e, 0xdf, 0xae, 0xfe, 0x82, 0x10, 0x32, 0x4f, 0xad, 0xdb, 0xd1, 0xb0, 0x47,
	0xf0, 0x2d, 0x98, 0x1d, 0x38, 0x4e, 0x44, 0x0f, 0x8d, 0x66, 0x98, 0xc4, 0x5f, 0x22, 0xeb, 0x09,
	0x22, 0x69, 0xb4, 0x66, 0xa2, 0xbe, 0x16, 0xb8, 0x99, 0x49, 0xbb, 0x5e, 0xa9, 0x3c, 0x32, 0x2a,
	0x5d, 0x09, 0x48, 0xad, 0x55, 0x7e, 0x0b, 0x6e, 0xa7, 0x98, 0x76, 0xcc, 0x69, 0x2b, 0x3d, 0xb6,
	0x21, 0x4b, 0x68, 0xd1, 0x00, 0xf8, 0x49, 0x02, 0x94, 0xea, 0x5a, 0x2a, 0x1e, 0x45, 0x5e, 0x46,
	0x9f, 0xbe, 0x3f, 0x79, 0x79, 0x14, 0xb9, 0x8c, 0x7e, 0xf6, 0xfe, 0xe4, 0xf2, 0x28, 0x72, 0x05,
	0xfd, 0xfc, 0xfd, 0xc9, 0x95, 0x51, 0xe4, 0x15, 0xf4, 0x8b, 0xf7, 0x27, 0xaf, 0x88, 0x5d, 0x79,
	0x42, 0xf6, 0x39, 0x69, 0x89, 0x79, 0xe0, 0x33, 0x93, 0x5d, 0xb9, 0x16, 0x35, 0x38, 0x69, 0x35,
	0x5c, 0xb8, 0x05, 0x92, 0x21, 0x66, 0x07, 0x38, 0xf4, 0xda, 0xd8, 0x23, 0xe8, 0xb1, 0xc9, 0xaa,
	0x4e, 0xab, 0x76, 0xb4, 0x48, 0xec, 0xfb, 0x12, 0x50, 0x8b, 0x30, 0xf1, 0x95, 0x72, 0x11, 0xd2,
	0x2f, 0x0d, 0xa6, 0xa6, 0xe4, 0x1b, 0xda, 0xd5, 0xba, 0x86, 0x2b, 0x67, 0x68, 0x4d, 0x8b, 0x39,
	0x65, 0x72, 0xb1, 0xf9, 0xf9, 0x18, 0xc3, 0xfc, 0x40, 0x88, 0x1a, 0x6e, 0xb6, 0xce, 0x71, 0x9f,
	0x07, 0x04, 0x7d, 0x31, 0x46, 0x9d, 0x3b, 0x14, 0x8a, 0x6c, 0x9e, 0xc5, 0x04, 0x6f, 0x07, 0xcb,
	0xe8, 0xcb, 0x31, 0xf2, 0x2c, 0x66, 0xee, 0x9d, 0xe5, 0x41, 0x4a, 0x19, 0x7d, 0x35, 0x2e, 0xa5,
	0x3c, 0x48, 0xa9, 0xa0, 0xe2, 0xb8, 0x94, 0xca, 0x20, 0x65, 0x05, 0x95, 0xc6, 0xa5, 0xac, 0x0c,
	0x52, 0x56, 0xd1, 0xd2, 0xb8, 0x94, 0x55, 0xb8, 0x06, 0xae, 0xbd, 0x6d, 0x63, 0xc6, 0x09, 0x43,
	0xb7, 0x0c, 0xd4, 0x89, 0x31, 0xfc, 0x7b, 0x01, 0x3c, 0xc8, 0xf9, 0x49, 0x06, 0x7d, 0x2b, 0x0b,
	0xf1, 0x0f, 0x39, 0x85, 0xf8, 0x40, 0x52, 0x36, 0x25, 0xc4, 0x52, 0x8c, 0x7d, 0xec, 0x75, 0xf7,
	0x18, 0x23, 0x9e, 0x5b, 0x77, 0xe2, 0xe1, 0x0f, 0xe1, 0x5f, 0xc0, 0xfc, 0xc5, 0xbf, 0xf7, 0xa0,
	0x79, 0xa3, 0x93, 0x66, 0xe5, 0xf8, 0x90, 0xb0, 0xd6, 0xae, 0x90, 0xf6, 0x05, 0xd4, 0xd3, 0x6e,
	0xcd, 0xc5, 0x83, 0x8d, 0xf0, 0x05, 0x98, 0x88, 0x03, 0xca, 0xd1, 0x27, 0xd2, 0xdd, 0x97, 0x79,
	0xee, 0x02, 0xaa, 0xb6, 0x39, 0xe2, 0xc2, 0x92, 0x4a, 0xd1, 0x3b, 0xe7, 0xe4, 0x58, 0x64, 0x14,
	0xad, 0x9b, 0xf4, 0x8e, 0x36, 0x86, 0x4b, 0x60, 0x42, 0x1e, 0x12, 0x20, 0x93, 0x03, 0x63, 0x61,
	0x29, 0x76, 0x3e, 0x72, 0xa5, 0x7f, 0xdb, 0x60, 0xe7, 0x23, 0x0c, 0x17, 0xdf, 0x15, 0xc0, 0x35,
	0xbd, 0xd9, 0x80, 0x2f, 0x01, 0xc4, 0xae, 0xed, 0x31, 0xda, 0x8e, 0x6c, 0xfd, 0x23, 0x3d, 0x0d,
	0xe5, 0x09, 0x71, 0xee, 0xa9, 0x07, 0x76, 0xb7, 0x84, 0xac, 0x9e, 0xa8, 0xe0, 0x73, 0x30, 0xe1,
	0x87, 0x4d, 0x2a, 0x7f, 0xae, 0x98, 0x2c, 0x7f, 0x61, 0xb8, 0xdf, 0x69, 0x84, 0x4d, 0x6a, 0x49,
	0xe1, 0xfa, 0xff, 0x0a, 0x60, 0xd1, 0xa1, 0xad, 0x1c, 0xe1, 0xfa, 0x54, 0xf2, 0x13, 0xdc, 0xbe,
	0x88, 0x6b, 0xbf, 0xf0, 0xc3, 0x86, 0x16, 0x78, 0x54, 0x14, 0xe2, 0x22, 0x65, 0x5e, 0xc9, 0x23,
	0xa1, 0x8c, 0x3a, 0xf9, 0x39, 0x30, 0xf2, 0xe3, 0x61, 0xff, 0x9c, 0xf0, 0x44, 0xfd, 0xf9, 0xc7,
	0x95, 0x0f, 0xb6, 0x6a, 0xb5, 0x7f, 0x5e, 0xb9, 0xbf, 0xa5, 0x60, 0x35, 0x37, 0x2e, 0xaa, 0x4b,
	0x71, 0x75, 0x54, 0x29, 0xd6, 0xa5, 0xd9, 0x7f, 0x13, 0x83, 0x37, 0x35, 0x37, 0x7e, 0x93, 0x1a,
	0xbc, 0x39, 0xaa, 0xbc, 0x51, 0x06, 0xff, 0xbf, 0xb2, 0xa8, 0x5a, 0xab, 0xd5, 0x9a, 0x1b, 0x57,
	0xab, 0xa9, 0x49, 0xb5, 0x7a, 0x54, 0xa9, 0x56, 0x95, 0xd1, 0xf1, 0x55, 0x19, 0x5d, 0xe5, 0xa7,
	0x00, 0x00, 0x00, 0xff, 0xff, 0xec, 0x3e, 0x44, 0x5d, 0x88, 0x21, 0x00, 0x00,
}
