diff --git a/googleapis/ads/googleads/v0/common/ad_type_infos.pb.go b/googleapis/ads/googleads/v0/common/ad_type_infos.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f07af7872dbe597b2d49ffc98f071794432875cc
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/ad_type_infos.pb.go
@@ -0,0 +1,1205 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/ad_type_infos.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A text ad.
+type TextAdInfo struct {
+	// The headline of the ad.
+	Headline *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline,proto3" json:"headline,omitempty"`
+	// The first line of the ad's description.
+	Description1 *wrappers.StringValue `protobuf:"bytes,2,opt,name=description1,proto3" json:"description1,omitempty"`
+	// The second line of the ad's description.
+	Description2         *wrappers.StringValue `protobuf:"bytes,3,opt,name=description2,proto3" json:"description2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *TextAdInfo) Reset()         { *m = TextAdInfo{} }
+func (m *TextAdInfo) String() string { return proto.CompactTextString(m) }
+func (*TextAdInfo) ProtoMessage()    {}
+func (*TextAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{0}
+}
+func (m *TextAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TextAdInfo.Unmarshal(m, b)
+}
+func (m *TextAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TextAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *TextAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TextAdInfo.Merge(dst, src)
+}
+func (m *TextAdInfo) XXX_Size() int {
+	return xxx_messageInfo_TextAdInfo.Size(m)
+}
+func (m *TextAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_TextAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TextAdInfo proto.InternalMessageInfo
+
+func (m *TextAdInfo) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *TextAdInfo) GetDescription1() *wrappers.StringValue {
+	if m != nil {
+		return m.Description1
+	}
+	return nil
+}
+
+func (m *TextAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+// An expanded text ad.
+type ExpandedTextAdInfo struct {
+	// The first part of the ad's headline.
+	HeadlinePart1 *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline_part1,json=headlinePart1,proto3" json:"headline_part1,omitempty"`
+	// The second part of the ad's headline.
+	HeadlinePart2 *wrappers.StringValue `protobuf:"bytes,2,opt,name=headline_part2,json=headlinePart2,proto3" json:"headline_part2,omitempty"`
+	// The third part of the ad's headline.
+	HeadlinePart3 *wrappers.StringValue `protobuf:"bytes,6,opt,name=headline_part3,json=headlinePart3,proto3" json:"headline_part3,omitempty"`
+	// The description of the ad.
+	Description *wrappers.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	// The second description of the ad.
+	Description2 *wrappers.StringValue `protobuf:"bytes,7,opt,name=description2,proto3" json:"description2,omitempty"`
+	// The text that can appear alongside the ad's displayed URL.
+	Path1 *wrappers.StringValue `protobuf:"bytes,4,opt,name=path1,proto3" json:"path1,omitempty"`
+	// Additional text that can appear alongside the ad's displayed URL.
+	Path2                *wrappers.StringValue `protobuf:"bytes,5,opt,name=path2,proto3" json:"path2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ExpandedTextAdInfo) Reset()         { *m = ExpandedTextAdInfo{} }
+func (m *ExpandedTextAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ExpandedTextAdInfo) ProtoMessage()    {}
+func (*ExpandedTextAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{1}
+}
+func (m *ExpandedTextAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExpandedTextAdInfo.Unmarshal(m, b)
+}
+func (m *ExpandedTextAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExpandedTextAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *ExpandedTextAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExpandedTextAdInfo.Merge(dst, src)
+}
+func (m *ExpandedTextAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ExpandedTextAdInfo.Size(m)
+}
+func (m *ExpandedTextAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExpandedTextAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExpandedTextAdInfo proto.InternalMessageInfo
+
+func (m *ExpandedTextAdInfo) GetHeadlinePart1() *wrappers.StringValue {
+	if m != nil {
+		return m.HeadlinePart1
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetHeadlinePart2() *wrappers.StringValue {
+	if m != nil {
+		return m.HeadlinePart2
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetHeadlinePart3() *wrappers.StringValue {
+	if m != nil {
+		return m.HeadlinePart3
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetPath1() *wrappers.StringValue {
+	if m != nil {
+		return m.Path1
+	}
+	return nil
+}
+
+func (m *ExpandedTextAdInfo) GetPath2() *wrappers.StringValue {
+	if m != nil {
+		return m.Path2
+	}
+	return nil
+}
+
+// A dynamic search ad.
+type DynamicSearchAdInfo struct {
+	// The first line of the ad's description.
+	Description1 *wrappers.StringValue `protobuf:"bytes,1,opt,name=description1,proto3" json:"description1,omitempty"`
+	// The second line of the ad's description.
+	Description2         *wrappers.StringValue `protobuf:"bytes,2,opt,name=description2,proto3" json:"description2,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *DynamicSearchAdInfo) Reset()         { *m = DynamicSearchAdInfo{} }
+func (m *DynamicSearchAdInfo) String() string { return proto.CompactTextString(m) }
+func (*DynamicSearchAdInfo) ProtoMessage()    {}
+func (*DynamicSearchAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{2}
+}
+func (m *DynamicSearchAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DynamicSearchAdInfo.Unmarshal(m, b)
+}
+func (m *DynamicSearchAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DynamicSearchAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *DynamicSearchAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DynamicSearchAdInfo.Merge(dst, src)
+}
+func (m *DynamicSearchAdInfo) XXX_Size() int {
+	return xxx_messageInfo_DynamicSearchAdInfo.Size(m)
+}
+func (m *DynamicSearchAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_DynamicSearchAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DynamicSearchAdInfo proto.InternalMessageInfo
+
+func (m *DynamicSearchAdInfo) GetDescription1() *wrappers.StringValue {
+	if m != nil {
+		return m.Description1
+	}
+	return nil
+}
+
+func (m *DynamicSearchAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+// A responsive display ad.
+type ResponsiveDisplayAdInfo struct {
+	// The short version of the ad's headline.
+	ShortHeadline *wrappers.StringValue `protobuf:"bytes,1,opt,name=short_headline,json=shortHeadline,proto3" json:"short_headline,omitempty"`
+	// The long version of the ad's headline.
+	LongHeadline *wrappers.StringValue `protobuf:"bytes,2,opt,name=long_headline,json=longHeadline,proto3" json:"long_headline,omitempty"`
+	// The description of the ad.
+	Description *wrappers.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	// The business name in the ad.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,4,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// Advertiser's consent to allow flexible color. When true, the ad may be
+	// served with different color if necessary. When false, the ad will be served
+	// with the specified colors or a neutral color.
+	// The default value is true.
+	// Must be true if main_color and accent_color are not set.
+	AllowFlexibleColor *wrappers.BoolValue `protobuf:"bytes,5,opt,name=allow_flexible_color,json=allowFlexibleColor,proto3" json:"allow_flexible_color,omitempty"`
+	// The accent color of the ad in hexadecimal, e.g. #ffffff for white.
+	// If one of main_color and accent_color is set, the other is required as
+	// well.
+	AccentColor *wrappers.StringValue `protobuf:"bytes,6,opt,name=accent_color,json=accentColor,proto3" json:"accent_color,omitempty"`
+	// The main color of the ad in hexadecimal, e.g. #ffffff for white.
+	// If one of main_color and accent_color is set, the other is required as
+	// well.
+	MainColor *wrappers.StringValue `protobuf:"bytes,7,opt,name=main_color,json=mainColor,proto3" json:"main_color,omitempty"`
+	// The call-to-action text for the ad.
+	CallToActionText *wrappers.StringValue `protobuf:"bytes,8,opt,name=call_to_action_text,json=callToActionText,proto3" json:"call_to_action_text,omitempty"`
+	// The MediaFile resource name of the logo image used in the ad.
+	LogoImage *wrappers.StringValue `protobuf:"bytes,9,opt,name=logo_image,json=logoImage,proto3" json:"logo_image,omitempty"`
+	// The MediaFile resource name of the square logo image used in the ad.
+	SquareLogoImage *wrappers.StringValue `protobuf:"bytes,10,opt,name=square_logo_image,json=squareLogoImage,proto3" json:"square_logo_image,omitempty"`
+	// The MediaFile resource name of the marketing image used in the ad.
+	MarketingImage *wrappers.StringValue `protobuf:"bytes,11,opt,name=marketing_image,json=marketingImage,proto3" json:"marketing_image,omitempty"`
+	// The MediaFile resource name of the square marketing image used in the ad.
+	SquareMarketingImage *wrappers.StringValue `protobuf:"bytes,12,opt,name=square_marketing_image,json=squareMarketingImage,proto3" json:"square_marketing_image,omitempty"`
+	// Specifies which format the ad will be served in. Default is ALL_FORMATS.
+	FormatSetting enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting `protobuf:"varint,13,opt,name=format_setting,json=formatSetting,proto3,enum=google.ads.googleads.v0.enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting" json:"format_setting,omitempty"`
+	// Prefix before price. E.g. 'as low as'.
+	PricePrefix *wrappers.StringValue `protobuf:"bytes,14,opt,name=price_prefix,json=pricePrefix,proto3" json:"price_prefix,omitempty"`
+	// Promotion text used for dyanmic formats of responsive ads. For example
+	// 'Free two-day shipping'.
+	PromoText            *wrappers.StringValue `protobuf:"bytes,15,opt,name=promo_text,json=promoText,proto3" json:"promo_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ResponsiveDisplayAdInfo) Reset()         { *m = ResponsiveDisplayAdInfo{} }
+func (m *ResponsiveDisplayAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ResponsiveDisplayAdInfo) ProtoMessage()    {}
+func (*ResponsiveDisplayAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{3}
+}
+func (m *ResponsiveDisplayAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResponsiveDisplayAdInfo.Unmarshal(m, b)
+}
+func (m *ResponsiveDisplayAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResponsiveDisplayAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *ResponsiveDisplayAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResponsiveDisplayAdInfo.Merge(dst, src)
+}
+func (m *ResponsiveDisplayAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ResponsiveDisplayAdInfo.Size(m)
+}
+func (m *ResponsiveDisplayAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResponsiveDisplayAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResponsiveDisplayAdInfo proto.InternalMessageInfo
+
+func (m *ResponsiveDisplayAdInfo) GetShortHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.ShortHeadline
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetLongHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.LongHeadline
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetAllowFlexibleColor() *wrappers.BoolValue {
+	if m != nil {
+		return m.AllowFlexibleColor
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetAccentColor() *wrappers.StringValue {
+	if m != nil {
+		return m.AccentColor
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetMainColor() *wrappers.StringValue {
+	if m != nil {
+		return m.MainColor
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetCallToActionText() *wrappers.StringValue {
+	if m != nil {
+		return m.CallToActionText
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetLogoImage() *wrappers.StringValue {
+	if m != nil {
+		return m.LogoImage
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetSquareLogoImage() *wrappers.StringValue {
+	if m != nil {
+		return m.SquareLogoImage
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetMarketingImage() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImage
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetSquareMarketingImage() *wrappers.StringValue {
+	if m != nil {
+		return m.SquareMarketingImage
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetFormatSetting() enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting {
+	if m != nil {
+		return m.FormatSetting
+	}
+	return enums.DisplayAdFormatSettingEnum_UNSPECIFIED
+}
+
+func (m *ResponsiveDisplayAdInfo) GetPricePrefix() *wrappers.StringValue {
+	if m != nil {
+		return m.PricePrefix
+	}
+	return nil
+}
+
+func (m *ResponsiveDisplayAdInfo) GetPromoText() *wrappers.StringValue {
+	if m != nil {
+		return m.PromoText
+	}
+	return nil
+}
+
+// A call-only ad.
+type CallOnlyAdInfo struct {
+	// The country code in the ad.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// The phone number in the ad.
+	PhoneNumber *wrappers.StringValue `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"`
+	// The business name in the ad.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,3,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// The first line of the ad's description.
+	Description1 *wrappers.StringValue `protobuf:"bytes,4,opt,name=description1,proto3" json:"description1,omitempty"`
+	// The second line of the ad's description.
+	Description2 *wrappers.StringValue `protobuf:"bytes,5,opt,name=description2,proto3" json:"description2,omitempty"`
+	// Whether to enable call tracking for the creative. Enabling call
+	// tracking also enables call conversions.
+	CallTracked *wrappers.BoolValue `protobuf:"bytes,6,opt,name=call_tracked,json=callTracked,proto3" json:"call_tracked,omitempty"`
+	// Whether to disable call conversion for the creative.
+	// If set to `true`, disables call conversions even when `call_tracked` is
+	// `true`.
+	// If `call_tracked` is `false`, this field is ignored.
+	DisableCallConversion *wrappers.BoolValue `protobuf:"bytes,7,opt,name=disable_call_conversion,json=disableCallConversion,proto3" json:"disable_call_conversion,omitempty"`
+	// The URL to be used for phone number verification.
+	PhoneNumberVerificationUrl *wrappers.StringValue `protobuf:"bytes,8,opt,name=phone_number_verification_url,json=phoneNumberVerificationUrl,proto3" json:"phone_number_verification_url,omitempty"`
+	// The conversion action to attribute a call conversion to. If not set a
+	// default conversion action is used. This field only has effect if
+	// call_tracked is set to true. Otherwise this field is ignored.
+	ConversionAction *wrappers.StringValue `protobuf:"bytes,9,opt,name=conversion_action,json=conversionAction,proto3" json:"conversion_action,omitempty"`
+	// The call conversion behavior of this call only ad. It can use its own call
+	// conversion setting, inherit the account level setting, or be disabled.
+	ConversionReportingState enums.CallConversionReportingStateEnum_CallConversionReportingState `protobuf:"varint,10,opt,name=conversion_reporting_state,json=conversionReportingState,proto3,enum=google.ads.googleads.v0.enums.CallConversionReportingStateEnum_CallConversionReportingState" json:"conversion_reporting_state,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}                                                            `json:"-"`
+	XXX_unrecognized         []byte                                                              `json:"-"`
+	XXX_sizecache            int32                                                               `json:"-"`
+}
+
+func (m *CallOnlyAdInfo) Reset()         { *m = CallOnlyAdInfo{} }
+func (m *CallOnlyAdInfo) String() string { return proto.CompactTextString(m) }
+func (*CallOnlyAdInfo) ProtoMessage()    {}
+func (*CallOnlyAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{4}
+}
+func (m *CallOnlyAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallOnlyAdInfo.Unmarshal(m, b)
+}
+func (m *CallOnlyAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallOnlyAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *CallOnlyAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallOnlyAdInfo.Merge(dst, src)
+}
+func (m *CallOnlyAdInfo) XXX_Size() int {
+	return xxx_messageInfo_CallOnlyAdInfo.Size(m)
+}
+func (m *CallOnlyAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallOnlyAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallOnlyAdInfo proto.InternalMessageInfo
+
+func (m *CallOnlyAdInfo) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetPhoneNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumber
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetDescription1() *wrappers.StringValue {
+	if m != nil {
+		return m.Description1
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetDescription2() *wrappers.StringValue {
+	if m != nil {
+		return m.Description2
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetCallTracked() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallTracked
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetDisableCallConversion() *wrappers.BoolValue {
+	if m != nil {
+		return m.DisableCallConversion
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetPhoneNumberVerificationUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.PhoneNumberVerificationUrl
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionAction
+	}
+	return nil
+}
+
+func (m *CallOnlyAdInfo) GetConversionReportingState() enums.CallConversionReportingStateEnum_CallConversionReportingState {
+	if m != nil {
+		return m.ConversionReportingState
+	}
+	return enums.CallConversionReportingStateEnum_UNSPECIFIED
+}
+
+// An expanded dynamic search ad.
+type ExpandedDynamicSearchAdInfo struct {
+	// The description of the ad.
+	Description          *wrappers.StringValue `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ExpandedDynamicSearchAdInfo) Reset()         { *m = ExpandedDynamicSearchAdInfo{} }
+func (m *ExpandedDynamicSearchAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ExpandedDynamicSearchAdInfo) ProtoMessage()    {}
+func (*ExpandedDynamicSearchAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{5}
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExpandedDynamicSearchAdInfo.Unmarshal(m, b)
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExpandedDynamicSearchAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *ExpandedDynamicSearchAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExpandedDynamicSearchAdInfo.Merge(dst, src)
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ExpandedDynamicSearchAdInfo.Size(m)
+}
+func (m *ExpandedDynamicSearchAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExpandedDynamicSearchAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExpandedDynamicSearchAdInfo proto.InternalMessageInfo
+
+func (m *ExpandedDynamicSearchAdInfo) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+// A hotel ad.
+type HotelAdInfo struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelAdInfo) Reset()         { *m = HotelAdInfo{} }
+func (m *HotelAdInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelAdInfo) ProtoMessage()    {}
+func (*HotelAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{6}
+}
+func (m *HotelAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelAdInfo.Unmarshal(m, b)
+}
+func (m *HotelAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelAdInfo.Merge(dst, src)
+}
+func (m *HotelAdInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelAdInfo.Size(m)
+}
+func (m *HotelAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelAdInfo proto.InternalMessageInfo
+
+// A Smart Shopping ad.
+type ShoppingSmartAdInfo struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ShoppingSmartAdInfo) Reset()         { *m = ShoppingSmartAdInfo{} }
+func (m *ShoppingSmartAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ShoppingSmartAdInfo) ProtoMessage()    {}
+func (*ShoppingSmartAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{7}
+}
+func (m *ShoppingSmartAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ShoppingSmartAdInfo.Unmarshal(m, b)
+}
+func (m *ShoppingSmartAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ShoppingSmartAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *ShoppingSmartAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ShoppingSmartAdInfo.Merge(dst, src)
+}
+func (m *ShoppingSmartAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ShoppingSmartAdInfo.Size(m)
+}
+func (m *ShoppingSmartAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ShoppingSmartAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ShoppingSmartAdInfo proto.InternalMessageInfo
+
+// A standard Shopping ad.
+type ShoppingProductAdInfo struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ShoppingProductAdInfo) Reset()         { *m = ShoppingProductAdInfo{} }
+func (m *ShoppingProductAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ShoppingProductAdInfo) ProtoMessage()    {}
+func (*ShoppingProductAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{8}
+}
+func (m *ShoppingProductAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ShoppingProductAdInfo.Unmarshal(m, b)
+}
+func (m *ShoppingProductAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ShoppingProductAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *ShoppingProductAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ShoppingProductAdInfo.Merge(dst, src)
+}
+func (m *ShoppingProductAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ShoppingProductAdInfo.Size(m)
+}
+func (m *ShoppingProductAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ShoppingProductAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ShoppingProductAdInfo proto.InternalMessageInfo
+
+// A Gmail ad.
+type GmailAdInfo struct {
+	// The Gmail teaser.
+	Teaser *GmailTeaser `protobuf:"bytes,1,opt,name=teaser,proto3" json:"teaser,omitempty"`
+	// The MediaFile resource name of the header image. Valid image types are GIF,
+	// JPEG and PNG. The minimum size is 300x100 pixels and the aspect ratio must
+	// be between 3:1 and 5:1 (+-1%).
+	HeaderImage *wrappers.StringValue `protobuf:"bytes,2,opt,name=header_image,json=headerImage,proto3" json:"header_image,omitempty"`
+	// The MediaFile resource name of the marketing image. Valid image types are
+	// GIF, JPEG and PNG. The image must either be landscape with a minimum size
+	// of 600x314 pixels and aspect ratio of 600:314 (+-1%) or square with a
+	// minimum size of 300x300 pixels and aspect ratio of 1:1 (+-1%)
+	MarketingImage *wrappers.StringValue `protobuf:"bytes,3,opt,name=marketing_image,json=marketingImage,proto3" json:"marketing_image,omitempty"`
+	// Headline of the marketing image.
+	MarketingImageHeadline *wrappers.StringValue `protobuf:"bytes,4,opt,name=marketing_image_headline,json=marketingImageHeadline,proto3" json:"marketing_image_headline,omitempty"`
+	// Description of the marketing image.
+	MarketingImageDescription *wrappers.StringValue `protobuf:"bytes,5,opt,name=marketing_image_description,json=marketingImageDescription,proto3" json:"marketing_image_description,omitempty"`
+	// Display-call-to-action of the marketing image.
+	MarketingImageDisplayCallToAction *DisplayCallToAction `protobuf:"bytes,6,opt,name=marketing_image_display_call_to_action,json=marketingImageDisplayCallToAction,proto3" json:"marketing_image_display_call_to_action,omitempty"`
+	XXX_NoUnkeyedLiteral              struct{}             `json:"-"`
+	XXX_unrecognized                  []byte               `json:"-"`
+	XXX_sizecache                     int32                `json:"-"`
+}
+
+func (m *GmailAdInfo) Reset()         { *m = GmailAdInfo{} }
+func (m *GmailAdInfo) String() string { return proto.CompactTextString(m) }
+func (*GmailAdInfo) ProtoMessage()    {}
+func (*GmailAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{9}
+}
+func (m *GmailAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GmailAdInfo.Unmarshal(m, b)
+}
+func (m *GmailAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GmailAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *GmailAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GmailAdInfo.Merge(dst, src)
+}
+func (m *GmailAdInfo) XXX_Size() int {
+	return xxx_messageInfo_GmailAdInfo.Size(m)
+}
+func (m *GmailAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_GmailAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GmailAdInfo proto.InternalMessageInfo
+
+func (m *GmailAdInfo) GetTeaser() *GmailTeaser {
+	if m != nil {
+		return m.Teaser
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetHeaderImage() *wrappers.StringValue {
+	if m != nil {
+		return m.HeaderImage
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImage() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImage
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImageHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImageHeadline
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImageDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.MarketingImageDescription
+	}
+	return nil
+}
+
+func (m *GmailAdInfo) GetMarketingImageDisplayCallToAction() *DisplayCallToAction {
+	if m != nil {
+		return m.MarketingImageDisplayCallToAction
+	}
+	return nil
+}
+
+// Gmail teaser data. The teaser is a small header that acts as an invitation
+// to view the rest of the ad (the body).
+type GmailTeaser struct {
+	// Headline of the teaser.
+	Headline *wrappers.StringValue `protobuf:"bytes,1,opt,name=headline,proto3" json:"headline,omitempty"`
+	// Description of the teaser.
+	Description *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	// Business name of the advertiser.
+	BusinessName *wrappers.StringValue `protobuf:"bytes,3,opt,name=business_name,json=businessName,proto3" json:"business_name,omitempty"`
+	// The MediaFile resource name of the logo image. Valid image types are GIF,
+	// JPEG and PNG. The minimum size is 144x144 pixels and the aspect ratio must
+	// be 1:1 (+-1%).
+	LogoImage            *wrappers.StringValue `protobuf:"bytes,4,opt,name=logo_image,json=logoImage,proto3" json:"logo_image,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *GmailTeaser) Reset()         { *m = GmailTeaser{} }
+func (m *GmailTeaser) String() string { return proto.CompactTextString(m) }
+func (*GmailTeaser) ProtoMessage()    {}
+func (*GmailTeaser) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{10}
+}
+func (m *GmailTeaser) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GmailTeaser.Unmarshal(m, b)
+}
+func (m *GmailTeaser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GmailTeaser.Marshal(b, m, deterministic)
+}
+func (dst *GmailTeaser) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GmailTeaser.Merge(dst, src)
+}
+func (m *GmailTeaser) XXX_Size() int {
+	return xxx_messageInfo_GmailTeaser.Size(m)
+}
+func (m *GmailTeaser) XXX_DiscardUnknown() {
+	xxx_messageInfo_GmailTeaser.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GmailTeaser proto.InternalMessageInfo
+
+func (m *GmailTeaser) GetHeadline() *wrappers.StringValue {
+	if m != nil {
+		return m.Headline
+	}
+	return nil
+}
+
+func (m *GmailTeaser) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *GmailTeaser) GetBusinessName() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessName
+	}
+	return nil
+}
+
+func (m *GmailTeaser) GetLogoImage() *wrappers.StringValue {
+	if m != nil {
+		return m.LogoImage
+	}
+	return nil
+}
+
+// Data for display call to action. The call to action is a piece of the ad
+// that prompts the user to do something. Like clicking a link or making a phone
+// call.
+type DisplayCallToAction struct {
+	// Text for the display-call-to-action.
+	Text *wrappers.StringValue `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// Text color for the display-call-to-action in hexadecimal, e.g. #ffffff for
+	// white.
+	TextColor            *wrappers.StringValue `protobuf:"bytes,2,opt,name=text_color,json=textColor,proto3" json:"text_color,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *DisplayCallToAction) Reset()         { *m = DisplayCallToAction{} }
+func (m *DisplayCallToAction) String() string { return proto.CompactTextString(m) }
+func (*DisplayCallToAction) ProtoMessage()    {}
+func (*DisplayCallToAction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{11}
+}
+func (m *DisplayCallToAction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayCallToAction.Unmarshal(m, b)
+}
+func (m *DisplayCallToAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayCallToAction.Marshal(b, m, deterministic)
+}
+func (dst *DisplayCallToAction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayCallToAction.Merge(dst, src)
+}
+func (m *DisplayCallToAction) XXX_Size() int {
+	return xxx_messageInfo_DisplayCallToAction.Size(m)
+}
+func (m *DisplayCallToAction) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayCallToAction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayCallToAction proto.InternalMessageInfo
+
+func (m *DisplayCallToAction) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *DisplayCallToAction) GetTextColor() *wrappers.StringValue {
+	if m != nil {
+		return m.TextColor
+	}
+	return nil
+}
+
+// An image ad.
+type ImageAdInfo struct {
+	// Width in pixels of the full size image.
+	PixelWidth *wrappers.Int64Value `protobuf:"bytes,4,opt,name=pixel_width,json=pixelWidth,proto3" json:"pixel_width,omitempty"`
+	// Height in pixels of the full size image.
+	PixelHeight *wrappers.Int64Value `protobuf:"bytes,5,opt,name=pixel_height,json=pixelHeight,proto3" json:"pixel_height,omitempty"`
+	// URL of the full size image.
+	ImageUrl *wrappers.StringValue `protobuf:"bytes,6,opt,name=image_url,json=imageUrl,proto3" json:"image_url,omitempty"`
+	// Width in pixels of the preview size image.
+	PreviewPixelWidth *wrappers.Int64Value `protobuf:"bytes,7,opt,name=preview_pixel_width,json=previewPixelWidth,proto3" json:"preview_pixel_width,omitempty"`
+	// Height in pixels of the preview size image.
+	PreviewPixelHeight *wrappers.Int64Value `protobuf:"bytes,8,opt,name=preview_pixel_height,json=previewPixelHeight,proto3" json:"preview_pixel_height,omitempty"`
+	// URL of the preview size image.
+	PreviewImageUrl *wrappers.StringValue `protobuf:"bytes,9,opt,name=preview_image_url,json=previewImageUrl,proto3" json:"preview_image_url,omitempty"`
+	// The mime type of the image.
+	MimeType enums.MimeTypeEnum_MimeType `protobuf:"varint,10,opt,name=mime_type,json=mimeType,proto3,enum=google.ads.googleads.v0.enums.MimeTypeEnum_MimeType" json:"mime_type,omitempty"`
+	// The name of the image. If the image was created from a MediaFile, this is
+	// the MediaFile's name. If the image was created from bytes, this is empty.
+	Name *wrappers.StringValue `protobuf:"bytes,11,opt,name=name,proto3" json:"name,omitempty"`
+	// The image to create the ImageAd from. This can be specified in one of
+	// two ways.
+	// 1. An existing MediaFile resource.
+	// 2. The raw image data as bytes.
+	//
+	// Types that are valid to be assigned to Image:
+	//	*ImageAdInfo_MediaFile
+	//	*ImageAdInfo_Data
+	Image                isImageAdInfo_Image `protobuf_oneof:"image"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ImageAdInfo) Reset()         { *m = ImageAdInfo{} }
+func (m *ImageAdInfo) String() string { return proto.CompactTextString(m) }
+func (*ImageAdInfo) ProtoMessage()    {}
+func (*ImageAdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_infos_88d22de745f5a930, []int{12}
+}
+func (m *ImageAdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageAdInfo.Unmarshal(m, b)
+}
+func (m *ImageAdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageAdInfo.Marshal(b, m, deterministic)
+}
+func (dst *ImageAdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageAdInfo.Merge(dst, src)
+}
+func (m *ImageAdInfo) XXX_Size() int {
+	return xxx_messageInfo_ImageAdInfo.Size(m)
+}
+func (m *ImageAdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageAdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageAdInfo proto.InternalMessageInfo
+
+func (m *ImageAdInfo) GetPixelWidth() *wrappers.Int64Value {
+	if m != nil {
+		return m.PixelWidth
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPixelHeight() *wrappers.Int64Value {
+	if m != nil {
+		return m.PixelHeight
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetImageUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.ImageUrl
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPreviewPixelWidth() *wrappers.Int64Value {
+	if m != nil {
+		return m.PreviewPixelWidth
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPreviewPixelHeight() *wrappers.Int64Value {
+	if m != nil {
+		return m.PreviewPixelHeight
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetPreviewImageUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.PreviewImageUrl
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetMimeType() enums.MimeTypeEnum_MimeType {
+	if m != nil {
+		return m.MimeType
+	}
+	return enums.MimeTypeEnum_UNSPECIFIED
+}
+
+func (m *ImageAdInfo) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+type isImageAdInfo_Image interface {
+	isImageAdInfo_Image()
+}
+
+type ImageAdInfo_MediaFile struct {
+	MediaFile *wrappers.StringValue `protobuf:"bytes,1,opt,name=media_file,json=mediaFile,proto3,oneof"`
+}
+
+type ImageAdInfo_Data struct {
+	Data *wrappers.BytesValue `protobuf:"bytes,2,opt,name=data,proto3,oneof"`
+}
+
+func (*ImageAdInfo_MediaFile) isImageAdInfo_Image() {}
+
+func (*ImageAdInfo_Data) isImageAdInfo_Image() {}
+
+func (m *ImageAdInfo) GetImage() isImageAdInfo_Image {
+	if m != nil {
+		return m.Image
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetMediaFile() *wrappers.StringValue {
+	if x, ok := m.GetImage().(*ImageAdInfo_MediaFile); ok {
+		return x.MediaFile
+	}
+	return nil
+}
+
+func (m *ImageAdInfo) GetData() *wrappers.BytesValue {
+	if x, ok := m.GetImage().(*ImageAdInfo_Data); ok {
+		return x.Data
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ImageAdInfo) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ImageAdInfo_OneofMarshaler, _ImageAdInfo_OneofUnmarshaler, _ImageAdInfo_OneofSizer, []interface{}{
+		(*ImageAdInfo_MediaFile)(nil),
+		(*ImageAdInfo_Data)(nil),
+	}
+}
+
+func _ImageAdInfo_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ImageAdInfo)
+	// image
+	switch x := m.Image.(type) {
+	case *ImageAdInfo_MediaFile:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MediaFile); err != nil {
+			return err
+		}
+	case *ImageAdInfo_Data:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Data); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ImageAdInfo.Image has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ImageAdInfo_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ImageAdInfo)
+	switch tag {
+	case 1: // image.media_file
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.Image = &ImageAdInfo_MediaFile{msg}
+		return true, err
+	case 2: // image.data
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.BytesValue)
+		err := b.DecodeMessage(msg)
+		m.Image = &ImageAdInfo_Data{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ImageAdInfo_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ImageAdInfo)
+	// image
+	switch x := m.Image.(type) {
+	case *ImageAdInfo_MediaFile:
+		s := proto.Size(x.MediaFile)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ImageAdInfo_Data:
+		s := proto.Size(x.Data)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*TextAdInfo)(nil), "google.ads.googleads.v0.common.TextAdInfo")
+	proto.RegisterType((*ExpandedTextAdInfo)(nil), "google.ads.googleads.v0.common.ExpandedTextAdInfo")
+	proto.RegisterType((*DynamicSearchAdInfo)(nil), "google.ads.googleads.v0.common.DynamicSearchAdInfo")
+	proto.RegisterType((*ResponsiveDisplayAdInfo)(nil), "google.ads.googleads.v0.common.ResponsiveDisplayAdInfo")
+	proto.RegisterType((*CallOnlyAdInfo)(nil), "google.ads.googleads.v0.common.CallOnlyAdInfo")
+	proto.RegisterType((*ExpandedDynamicSearchAdInfo)(nil), "google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo")
+	proto.RegisterType((*HotelAdInfo)(nil), "google.ads.googleads.v0.common.HotelAdInfo")
+	proto.RegisterType((*ShoppingSmartAdInfo)(nil), "google.ads.googleads.v0.common.ShoppingSmartAdInfo")
+	proto.RegisterType((*ShoppingProductAdInfo)(nil), "google.ads.googleads.v0.common.ShoppingProductAdInfo")
+	proto.RegisterType((*GmailAdInfo)(nil), "google.ads.googleads.v0.common.GmailAdInfo")
+	proto.RegisterType((*GmailTeaser)(nil), "google.ads.googleads.v0.common.GmailTeaser")
+	proto.RegisterType((*DisplayCallToAction)(nil), "google.ads.googleads.v0.common.DisplayCallToAction")
+	proto.RegisterType((*ImageAdInfo)(nil), "google.ads.googleads.v0.common.ImageAdInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/ad_type_infos.proto", fileDescriptor_ad_type_infos_88d22de745f5a930)
+}
+
+var fileDescriptor_ad_type_infos_88d22de745f5a930 = []byte{
+	// 1392 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x5b, 0x6f, 0x1b, 0x45,
+	0x14, 0xc6, 0xb9, 0x35, 0x39, 0xbe, 0xa4, 0xdd, 0xf4, 0x62, 0x52, 0xa8, 0x8a, 0x1f, 0x50, 0x25,
+	0xc4, 0x3a, 0x71, 0x2a, 0x04, 0x2a, 0x6d, 0x71, 0x9c, 0xb6, 0x89, 0xda, 0x14, 0xe3, 0x84, 0x20,
+	0xa1, 0xa0, 0xd1, 0x64, 0x77, 0x6c, 0x8f, 0xba, 0x3b, 0xb3, 0xcc, 0xae, 0x73, 0x79, 0x47, 0xf0,
+	0x1b, 0xca, 0x23, 0x8f, 0x88, 0x57, 0xfe, 0x02, 0x0f, 0x95, 0x78, 0xe5, 0xf7, 0xa0, 0xb9, 0xac,
+	0xb3, 0xb6, 0xb1, 0x3d, 0x26, 0x4f, 0x59, 0xc7, 0xdf, 0xf7, 0xcd, 0x9c, 0x99, 0x73, 0xbe, 0x73,
+	0xbc, 0x50, 0xeb, 0x70, 0xde, 0x09, 0x48, 0x15, 0xfb, 0x71, 0x55, 0x3f, 0xca, 0xa7, 0xd3, 0x8d,
+	0xaa, 0xc7, 0xc3, 0x90, 0xb3, 0x2a, 0xf6, 0x51, 0x72, 0x11, 0x11, 0x44, 0x59, 0x9b, 0xc7, 0x6e,
+	0x24, 0x78, 0xc2, 0x9d, 0x7b, 0x1a, 0xe8, 0x62, 0x3f, 0x76, 0xfb, 0x1c, 0xf7, 0x74, 0xc3, 0xd5,
+	0x9c, 0xf5, 0xc6, 0x38, 0x4d, 0xc2, 0x7a, 0x61, 0x5c, 0xf5, 0x70, 0x10, 0x20, 0x8f, 0xb3, 0x53,
+	0x22, 0x62, 0xca, 0x19, 0x12, 0x24, 0xe2, 0x22, 0xa1, 0xac, 0x83, 0xe2, 0x04, 0x27, 0x44, 0x2f,
+	0xb2, 0xfe, 0x78, 0xb2, 0x88, 0x4f, 0xe3, 0x28, 0xc0, 0x17, 0x08, 0xfb, 0xa8, 0xcd, 0x45, 0x88,
+	0x13, 0x14, 0x93, 0x44, 0x8a, 0x18, 0xfa, 0xa7, 0x93, 0xe9, 0x21, 0x0d, 0x89, 0x0a, 0xcc, 0xc0,
+	0x4d, 0x48, 0x55, 0xf5, 0xe9, 0xa4, 0xd7, 0xae, 0x9e, 0x09, 0x1c, 0x45, 0x44, 0x98, 0x90, 0x2b,
+	0xef, 0x72, 0x00, 0x87, 0xe4, 0x3c, 0xa9, 0xfb, 0x7b, 0xac, 0xcd, 0x9d, 0xcf, 0x61, 0xb9, 0x4b,
+	0xb0, 0x1f, 0x50, 0x46, 0xca, 0xb9, 0xfb, 0xb9, 0x07, 0xf9, 0xda, 0x07, 0xe6, 0x24, 0xdc, 0x54,
+	0xc1, 0x3d, 0x48, 0x04, 0x65, 0x9d, 0x23, 0x1c, 0xf4, 0x48, 0xab, 0x8f, 0x76, 0xbe, 0x82, 0x82,
+	0x4f, 0x62, 0x4f, 0xd0, 0x28, 0xa1, 0x9c, 0x6d, 0x96, 0xe7, 0x2c, 0xd8, 0x03, 0x8c, 0x21, 0x85,
+	0x5a, 0x79, 0x7e, 0x46, 0x85, 0x5a, 0xe5, 0xef, 0x79, 0x70, 0x9e, 0x9d, 0x47, 0x98, 0xf9, 0xc4,
+	0xcf, 0x04, 0xd5, 0x80, 0x52, 0xba, 0x4d, 0x14, 0x61, 0x91, 0x6c, 0x5a, 0x85, 0x56, 0x4c, 0x39,
+	0x4d, 0x49, 0x19, 0x11, 0xa9, 0x59, 0x45, 0x38, 0x20, 0x52, 0x1b, 0x11, 0xd9, 0x2a, 0x2f, 0xcd,
+	0x2a, 0xb2, 0xe5, 0x3c, 0x81, 0x7c, 0x26, 0x6a, 0xab, 0x63, 0xca, 0x12, 0x46, 0xce, 0xf9, 0xda,
+	0xac, 0xe7, 0xec, 0xd4, 0x60, 0x31, 0xc2, 0x49, 0x77, 0xb3, 0xbc, 0x60, 0x41, 0xd5, 0xd0, 0x94,
+	0x53, 0x2b, 0x2f, 0xda, 0x72, 0x6a, 0x95, 0xb7, 0x39, 0x58, 0xdb, 0xb9, 0x60, 0x38, 0xa4, 0xde,
+	0x01, 0xc1, 0xc2, 0xeb, 0x9a, 0x0b, 0x1d, 0xce, 0xb5, 0xdc, 0x95, 0x73, 0x6d, 0x6e, 0xe6, 0x5c,
+	0xfb, 0x67, 0x19, 0xee, 0xb4, 0x48, 0x1c, 0x71, 0x16, 0xd3, 0x53, 0xb2, 0xa3, 0xab, 0xf6, 0x32,
+	0xe1, 0xe2, 0x2e, 0x17, 0x09, 0x9a, 0xa9, 0x96, 0x8a, 0x8a, 0xb3, 0x9b, 0x16, 0x54, 0x1d, 0x8a,
+	0x01, 0x67, 0x9d, 0x4b, 0x0d, 0xab, 0x3d, 0x4a, 0x4a, 0x5f, 0xe2, 0xaa, 0x99, 0x52, 0x87, 0xe2,
+	0x49, 0x2f, 0xa6, 0x8c, 0xc4, 0x31, 0x62, 0x38, 0x24, 0x56, 0xf7, 0x5d, 0x48, 0x29, 0xaf, 0x71,
+	0x48, 0x9c, 0x57, 0x70, 0x13, 0x07, 0x01, 0x3f, 0x43, 0xed, 0x80, 0x9c, 0xd3, 0x93, 0x80, 0x20,
+	0x8f, 0x07, 0x5c, 0x98, 0x2c, 0x58, 0x1f, 0x51, 0xda, 0xe6, 0x3c, 0xd0, 0x3a, 0x8e, 0xe2, 0x3d,
+	0x37, 0xb4, 0x86, 0x64, 0x39, 0x4f, 0xa1, 0x80, 0x3d, 0x8f, 0xb0, 0xc4, 0xa8, 0xd8, 0x54, 0x4f,
+	0x5e, 0x33, 0xb4, 0xc0, 0x23, 0x80, 0x10, 0x53, 0x66, 0xe8, 0x36, 0x99, 0xbf, 0x22, 0xf1, 0x9a,
+	0xfc, 0x12, 0xd6, 0x94, 0xc5, 0x27, 0x1c, 0x61, 0x4f, 0x1e, 0x10, 0x4a, 0xc8, 0x79, 0x52, 0x5e,
+	0xb6, 0x50, 0xb9, 0x2e, 0x89, 0x87, 0xbc, 0xae, 0x68, 0xd2, 0x9a, 0xe4, 0x4e, 0x02, 0xde, 0xe1,
+	0x88, 0x86, 0xb8, 0x43, 0xca, 0x2b, 0x36, 0x3b, 0x91, 0xf8, 0x3d, 0x09, 0x77, 0x76, 0xe1, 0x46,
+	0xfc, 0x63, 0x0f, 0x0b, 0x82, 0x32, 0x1a, 0x60, 0xa1, 0xb1, 0xaa, 0x69, 0xaf, 0xfa, 0x4a, 0xcf,
+	0x60, 0x35, 0xc4, 0xe2, 0x0d, 0x51, 0x6d, 0x4a, 0xeb, 0xe4, 0x2d, 0x74, 0x4a, 0x7d, 0x92, 0x96,
+	0x69, 0xc1, 0x6d, 0xb3, 0xa1, 0x61, 0xb5, 0x82, 0x85, 0xda, 0x4d, 0xcd, 0xdd, 0x1f, 0xd4, 0x3c,
+	0x83, 0xd2, 0x60, 0x07, 0x2c, 0x17, 0xef, 0xe7, 0x1e, 0x94, 0x6a, 0x4d, 0x77, 0x5c, 0x9b, 0x56,
+	0x2d, 0xd0, 0xed, 0xd7, 0xe2, 0x73, 0xc5, 0x3e, 0xd0, 0xe4, 0x67, 0xac, 0x17, 0x8e, 0xf9, 0xaa,
+	0x55, 0x6c, 0x67, 0x3f, 0xca, 0x2c, 0x8b, 0x04, 0xf5, 0x08, 0x8a, 0x04, 0x69, 0xd3, 0xf3, 0x72,
+	0xc9, 0x26, 0xcb, 0x14, 0xa3, 0xa9, 0x08, 0xf2, 0x6e, 0x23, 0xc1, 0x43, 0xae, 0xf3, 0x63, 0xd5,
+	0xe6, 0x6e, 0x15, 0x5e, 0x26, 0x46, 0xe5, 0xcf, 0x25, 0x28, 0x35, 0x70, 0x10, 0x7c, 0xcd, 0x82,
+	0xd4, 0x4f, 0x9e, 0x42, 0xc1, 0xe3, 0x3d, 0x96, 0x88, 0x0b, 0xe4, 0x71, 0xdf, 0xce, 0x4d, 0xf2,
+	0x86, 0xd1, 0xe0, 0x3e, 0x51, 0x11, 0x75, 0x39, 0x23, 0x88, 0xf5, 0xc2, 0x13, 0x22, 0xac, 0xac,
+	0x24, 0xaf, 0x18, 0xaf, 0x15, 0x61, 0xd4, 0x09, 0xe6, 0x67, 0x76, 0x82, 0x61, 0xd3, 0x5e, 0xb8,
+	0xb2, 0x69, 0x2f, 0xce, 0xdc, 0xb8, 0x1e, 0x43, 0x41, 0x57, 0xb0, 0xc0, 0xde, 0x1b, 0xe2, 0x1b,
+	0xff, 0x98, 0xe4, 0x42, 0x79, 0x55, 0xb8, 0x1a, 0xee, 0xb4, 0xe0, 0x8e, 0x4f, 0x63, 0xac, 0x5c,
+	0x6c, 0x70, 0xd6, 0x33, 0x56, 0x32, 0x49, 0xe9, 0x96, 0xa1, 0xca, 0xbb, 0x6d, 0xf4, 0x89, 0x0e,
+	0x82, 0x0f, 0xb3, 0x57, 0x83, 0x4e, 0x89, 0xa0, 0x6d, 0xea, 0x61, 0xe5, 0x2f, 0x3d, 0x11, 0x58,
+	0xd9, 0xcb, 0x7a, 0xe6, 0xae, 0x8e, 0x32, 0x02, 0xdf, 0x8a, 0xc0, 0xd9, 0x83, 0x1b, 0x99, 0x99,
+	0x54, 0x1b, 0x97, 0x95, 0xdf, 0x5c, 0xbf, 0xa4, 0x69, 0xdf, 0x72, 0x7e, 0xcd, 0xc1, 0xfa, 0xf8,
+	0xf9, 0x56, 0x19, 0x50, 0xa9, 0x76, 0x3c, 0xa5, 0x3c, 0x07, 0xe3, 0x6f, 0xa5, 0x1a, 0x07, 0x52,
+	0x42, 0x15, 0xe9, 0x24, 0x40, 0xab, 0xec, 0x8d, 0xf9, 0xa6, 0xf2, 0x03, 0xdc, 0x4d, 0x67, 0xbf,
+	0xff, 0x9a, 0x19, 0x86, 0x7a, 0x61, 0x6e, 0xc6, 0x5e, 0x58, 0x29, 0x42, 0x7e, 0x97, 0x27, 0x24,
+	0xd0, 0x72, 0x95, 0x5b, 0xb0, 0x76, 0xd0, 0xe5, 0x51, 0x24, 0x97, 0x0f, 0xb1, 0x30, 0xa3, 0x66,
+	0xe5, 0x0e, 0xdc, 0x4a, 0xff, 0xdd, 0x14, 0xdc, 0xef, 0x79, 0xe9, 0x17, 0x6f, 0x17, 0x20, 0xff,
+	0x22, 0xc4, 0x34, 0xe8, 0x8f, 0x08, 0x4b, 0x09, 0xc1, 0x31, 0x11, 0x66, 0x27, 0x9f, 0xb8, 0x93,
+	0x7f, 0x7b, 0xb8, 0x8a, 0x7c, 0xa8, 0x28, 0x2d, 0x43, 0x95, 0x65, 0x2d, 0xa7, 0x03, 0x22, 0x8c,
+	0xd7, 0x5a, 0x95, 0xb5, 0x66, 0x8c, 0x75, 0xff, 0xf9, 0xff, 0xe1, 0xfe, 0x47, 0x50, 0x1e, 0x92,
+	0xb9, 0x9c, 0x5a, 0x6c, 0xca, 0xfc, 0xf6, 0xa0, 0x5e, 0x7f, 0x7e, 0x39, 0x86, 0xbb, 0xc3, 0xba,
+	0xd9, 0x3b, 0xb4, 0xa9, 0xff, 0xf7, 0x07, 0xa5, 0x77, 0x32, 0xd3, 0xcd, 0xcf, 0x39, 0xf8, 0x78,
+	0x44, 0xde, 0xfc, 0xfa, 0x1a, 0xec, 0xf3, 0xc6, 0x27, 0xb6, 0xa6, 0xdd, 0x91, 0x69, 0x2f, 0x8d,
+	0x4c, 0xaf, 0x6f, 0x7d, 0x34, 0xb4, 0x81, 0x51, 0x48, 0xe5, 0x97, 0x39, 0x93, 0x1b, 0xfa, 0x7a,
+	0xaf, 0xf0, 0x23, 0x6c, 0x28, 0xc9, 0xe7, 0xae, 0x3c, 0xf0, 0xcd, 0x6e, 0xf3, 0x83, 0x73, 0xcd,
+	0xc2, 0x4c, 0x73, 0x4d, 0xe5, 0x27, 0x39, 0xf0, 0x8f, 0x9e, 0x90, 0xb3, 0x01, 0x0b, 0xaa, 0x95,
+	0xda, 0x9c, 0x86, 0x42, 0xca, 0x6d, 0xc8, 0xbf, 0x66, 0xd0, 0xb3, 0x39, 0x88, 0x15, 0x89, 0x57,
+	0x83, 0x5e, 0xe5, 0x8f, 0x45, 0xc8, 0xab, 0x0d, 0x99, 0x62, 0xfd, 0x12, 0xf2, 0x11, 0x3d, 0x27,
+	0x01, 0x3a, 0xa3, 0x7e, 0xd2, 0x35, 0x41, 0xdd, 0x1d, 0x51, 0xdb, 0x63, 0xc9, 0x67, 0x0f, 0xb5,
+	0x18, 0x28, 0xfc, 0x77, 0x12, 0xee, 0x3c, 0x81, 0x82, 0x66, 0x77, 0x09, 0xed, 0x74, 0x13, 0x93,
+	0xb6, 0x13, 0xe9, 0x7a, 0xb9, 0x5d, 0x85, 0x77, 0xbe, 0x80, 0x15, 0x9d, 0x9c, 0xb2, 0x1b, 0xd8,
+	0x4c, 0xbc, 0xcb, 0x0a, 0x2e, 0xbd, 0xff, 0x25, 0xac, 0x45, 0x82, 0x9c, 0x52, 0x72, 0x86, 0xb2,
+	0x01, 0x5c, 0x9b, 0xbe, 0x83, 0x1b, 0x86, 0xd7, 0xbc, 0x8c, 0x63, 0x1f, 0x6e, 0x0e, 0x8a, 0x99,
+	0x78, 0x96, 0xa7, 0xab, 0x39, 0x59, 0x35, 0x13, 0xd6, 0x2e, 0xa4, 0x6b, 0xa0, 0xcb, 0xf0, 0x6c,
+	0xfa, 0xd2, 0xaa, 0xa1, 0xed, 0xa5, 0x51, 0x7e, 0x03, 0x2b, 0xfd, 0xd7, 0x1e, 0xa6, 0x09, 0x3d,
+	0x9c, 0xd2, 0x84, 0xf6, 0x69, 0x48, 0x0e, 0x2f, 0x22, 0xdd, 0x70, 0xd2, 0x0f, 0xad, 0xe5, 0xd0,
+	0x3c, 0xc9, 0x84, 0x53, 0xf9, 0x6f, 0x33, 0x0b, 0x2b, 0xa4, 0xf3, 0x18, 0x20, 0x24, 0x3e, 0xc5,
+	0xa8, 0x4d, 0x03, 0xab, 0xb2, 0xdd, 0x7d, 0xaf, 0xb5, 0xa2, 0x18, 0xcf, 0x69, 0x40, 0x9c, 0x4d,
+	0x58, 0xf0, 0x71, 0x82, 0x4d, 0xa6, 0x8e, 0x1e, 0xe6, 0xf6, 0x45, 0x42, 0xe2, 0x94, 0xa7, 0xa0,
+	0xdb, 0xd7, 0x60, 0x51, 0x1d, 0xdc, 0xf6, 0x5f, 0x39, 0xa8, 0x78, 0x3c, 0x9c, 0xe2, 0x4e, 0xdb,
+	0xd7, 0xeb, 0xbe, 0x8c, 0x4d, 0x66, 0x74, 0xdc, 0x94, 0xba, 0xcd, 0xdc, 0xf7, 0x3b, 0x86, 0xd3,
+	0xe1, 0x01, 0x66, 0x1d, 0x97, 0x8b, 0x4e, 0xb5, 0x43, 0x98, 0x5a, 0x35, 0x7d, 0xbb, 0x14, 0xd1,
+	0x78, 0xdc, 0x4b, 0xb4, 0x47, 0xfa, 0xcf, 0x6f, 0x73, 0xf3, 0x2f, 0xea, 0xf5, 0xdf, 0xe7, 0xee,
+	0xbd, 0xd0, 0x62, 0x75, 0x3f, 0x76, 0xf5, 0xa3, 0x7c, 0x3a, 0xda, 0x70, 0x1b, 0x0a, 0xf6, 0x2e,
+	0x05, 0x1c, 0xd7, 0xfd, 0xf8, 0xb8, 0x0f, 0x38, 0x3e, 0xda, 0x38, 0xd6, 0x80, 0x93, 0x25, 0xb5,
+	0xf0, 0xd6, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8a, 0xfe, 0x1c, 0xea, 0xbc, 0x13, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/bidding.pb.go b/googleapis/ads/googleads/v0/common/bidding.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..68331d714ba63168e3a6b723d18985b20932bb6f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/bidding.pb.go
@@ -0,0 +1,725 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/bidding.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An automated bidding strategy that raises bids for clicks
+// that seem more likely to lead to a conversion and lowers
+// them for clicks where they seem less likely.
+type EnhancedCpc struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnhancedCpc) Reset()         { *m = EnhancedCpc{} }
+func (m *EnhancedCpc) String() string { return proto.CompactTextString(m) }
+func (*EnhancedCpc) ProtoMessage()    {}
+func (*EnhancedCpc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{0}
+}
+func (m *EnhancedCpc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnhancedCpc.Unmarshal(m, b)
+}
+func (m *EnhancedCpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnhancedCpc.Marshal(b, m, deterministic)
+}
+func (dst *EnhancedCpc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnhancedCpc.Merge(dst, src)
+}
+func (m *EnhancedCpc) XXX_Size() int {
+	return xxx_messageInfo_EnhancedCpc.Size(m)
+}
+func (m *EnhancedCpc) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnhancedCpc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnhancedCpc proto.InternalMessageInfo
+
+// Manual click-based bidding where user pays per click.
+type ManualCpc struct {
+	// Whether bids are to be enhanced based on conversion optimizer data.
+	EnhancedCpcEnabled   *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enhanced_cpc_enabled,json=enhancedCpcEnabled,proto3" json:"enhanced_cpc_enabled,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ManualCpc) Reset()         { *m = ManualCpc{} }
+func (m *ManualCpc) String() string { return proto.CompactTextString(m) }
+func (*ManualCpc) ProtoMessage()    {}
+func (*ManualCpc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{1}
+}
+func (m *ManualCpc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManualCpc.Unmarshal(m, b)
+}
+func (m *ManualCpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManualCpc.Marshal(b, m, deterministic)
+}
+func (dst *ManualCpc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManualCpc.Merge(dst, src)
+}
+func (m *ManualCpc) XXX_Size() int {
+	return xxx_messageInfo_ManualCpc.Size(m)
+}
+func (m *ManualCpc) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManualCpc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManualCpc proto.InternalMessageInfo
+
+func (m *ManualCpc) GetEnhancedCpcEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.EnhancedCpcEnabled
+	}
+	return nil
+}
+
+// Manual impression-based bidding where user pays per thousand impressions.
+type ManualCpm struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManualCpm) Reset()         { *m = ManualCpm{} }
+func (m *ManualCpm) String() string { return proto.CompactTextString(m) }
+func (*ManualCpm) ProtoMessage()    {}
+func (*ManualCpm) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{2}
+}
+func (m *ManualCpm) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManualCpm.Unmarshal(m, b)
+}
+func (m *ManualCpm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManualCpm.Marshal(b, m, deterministic)
+}
+func (dst *ManualCpm) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManualCpm.Merge(dst, src)
+}
+func (m *ManualCpm) XXX_Size() int {
+	return xxx_messageInfo_ManualCpm.Size(m)
+}
+func (m *ManualCpm) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManualCpm.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManualCpm proto.InternalMessageInfo
+
+// View based bidding where user pays per video view.
+type ManualCpv struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManualCpv) Reset()         { *m = ManualCpv{} }
+func (m *ManualCpv) String() string { return proto.CompactTextString(m) }
+func (*ManualCpv) ProtoMessage()    {}
+func (*ManualCpv) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{3}
+}
+func (m *ManualCpv) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManualCpv.Unmarshal(m, b)
+}
+func (m *ManualCpv) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManualCpv.Marshal(b, m, deterministic)
+}
+func (dst *ManualCpv) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManualCpv.Merge(dst, src)
+}
+func (m *ManualCpv) XXX_Size() int {
+	return xxx_messageInfo_ManualCpv.Size(m)
+}
+func (m *ManualCpv) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManualCpv.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManualCpv proto.InternalMessageInfo
+
+// An automated bidding strategy that sets bids to help get the most conversions
+// for your campaign while spending your budget.
+type MaximizeConversions struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MaximizeConversions) Reset()         { *m = MaximizeConversions{} }
+func (m *MaximizeConversions) String() string { return proto.CompactTextString(m) }
+func (*MaximizeConversions) ProtoMessage()    {}
+func (*MaximizeConversions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{4}
+}
+func (m *MaximizeConversions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MaximizeConversions.Unmarshal(m, b)
+}
+func (m *MaximizeConversions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MaximizeConversions.Marshal(b, m, deterministic)
+}
+func (dst *MaximizeConversions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MaximizeConversions.Merge(dst, src)
+}
+func (m *MaximizeConversions) XXX_Size() int {
+	return xxx_messageInfo_MaximizeConversions.Size(m)
+}
+func (m *MaximizeConversions) XXX_DiscardUnknown() {
+	xxx_messageInfo_MaximizeConversions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MaximizeConversions proto.InternalMessageInfo
+
+// An automated bidding strategy which tries to maximize conversion value
+// given a daily budget.
+type MaximizeConversionValue struct {
+	// The target return on ad spend (ROAS) option. If set, the bid strategy will
+	// maximize revenue while averaging the target return on ad spend. If the
+	// target ROAS is high, the bid strategy may not be able to spend the full
+	// budget. If the target ROAS is not set, the bid strategy will aim to
+	// achieve the highest possible ROAS for the budget.
+	TargetRoas           *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=target_roas,json=targetRoas,proto3" json:"target_roas,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MaximizeConversionValue) Reset()         { *m = MaximizeConversionValue{} }
+func (m *MaximizeConversionValue) String() string { return proto.CompactTextString(m) }
+func (*MaximizeConversionValue) ProtoMessage()    {}
+func (*MaximizeConversionValue) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{5}
+}
+func (m *MaximizeConversionValue) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MaximizeConversionValue.Unmarshal(m, b)
+}
+func (m *MaximizeConversionValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MaximizeConversionValue.Marshal(b, m, deterministic)
+}
+func (dst *MaximizeConversionValue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MaximizeConversionValue.Merge(dst, src)
+}
+func (m *MaximizeConversionValue) XXX_Size() int {
+	return xxx_messageInfo_MaximizeConversionValue.Size(m)
+}
+func (m *MaximizeConversionValue) XXX_DiscardUnknown() {
+	xxx_messageInfo_MaximizeConversionValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MaximizeConversionValue proto.InternalMessageInfo
+
+func (m *MaximizeConversionValue) GetTargetRoas() *wrappers.DoubleValue {
+	if m != nil {
+		return m.TargetRoas
+	}
+	return nil
+}
+
+// An automated bidding strategy which sets CPC bids to target impressions on
+// page one, or page one promoted slots on google.com.
+type PageOnePromoted struct {
+	// The strategy goal of where impressions are desired to be shown on
+	// search result pages.
+	StrategyGoal enums.PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal `protobuf:"varint,1,opt,name=strategy_goal,json=strategyGoal,proto3,enum=google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal" json:"strategy_goal,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Bid multiplier to be applied to the relevant bid estimate (depending on
+	// the `strategy_goal`) in determining a keyword's new CPC bid.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// Whether the strategy should always follow bid estimate changes, or only
+	// increase.
+	// If false, always sets a keyword's new bid to the current bid estimate.
+	// If true, only updates a keyword's bid if the current bid estimate is
+	// greater than the current bid.
+	OnlyRaiseCpcBids *wrappers.BoolValue `protobuf:"bytes,4,opt,name=only_raise_cpc_bids,json=onlyRaiseCpcBids,proto3" json:"only_raise_cpc_bids,omitempty"`
+	// Whether the strategy is allowed to raise bids when the throttling
+	// rate of the budget it is serving out of rises above a threshold.
+	RaiseCpcBidWhenBudgetConstrained *wrappers.BoolValue `protobuf:"bytes,5,opt,name=raise_cpc_bid_when_budget_constrained,json=raiseCpcBidWhenBudgetConstrained,proto3" json:"raise_cpc_bid_when_budget_constrained,omitempty"`
+	// Whether the strategy is allowed to raise bids on keywords with
+	// lower-range quality scores.
+	RaiseCpcBidWhenQualityScoreIsLow *wrappers.BoolValue `protobuf:"bytes,6,opt,name=raise_cpc_bid_when_quality_score_is_low,json=raiseCpcBidWhenQualityScoreIsLow,proto3" json:"raise_cpc_bid_when_quality_score_is_low,omitempty"`
+	XXX_NoUnkeyedLiteral             struct{}            `json:"-"`
+	XXX_unrecognized                 []byte              `json:"-"`
+	XXX_sizecache                    int32               `json:"-"`
+}
+
+func (m *PageOnePromoted) Reset()         { *m = PageOnePromoted{} }
+func (m *PageOnePromoted) String() string { return proto.CompactTextString(m) }
+func (*PageOnePromoted) ProtoMessage()    {}
+func (*PageOnePromoted) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{6}
+}
+func (m *PageOnePromoted) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PageOnePromoted.Unmarshal(m, b)
+}
+func (m *PageOnePromoted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PageOnePromoted.Marshal(b, m, deterministic)
+}
+func (dst *PageOnePromoted) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PageOnePromoted.Merge(dst, src)
+}
+func (m *PageOnePromoted) XXX_Size() int {
+	return xxx_messageInfo_PageOnePromoted.Size(m)
+}
+func (m *PageOnePromoted) XXX_DiscardUnknown() {
+	xxx_messageInfo_PageOnePromoted.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PageOnePromoted proto.InternalMessageInfo
+
+func (m *PageOnePromoted) GetStrategyGoal() enums.PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal {
+	if m != nil {
+		return m.StrategyGoal
+	}
+	return enums.PageOnePromotedStrategyGoalEnum_UNSPECIFIED
+}
+
+func (m *PageOnePromoted) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *PageOnePromoted) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *PageOnePromoted) GetOnlyRaiseCpcBids() *wrappers.BoolValue {
+	if m != nil {
+		return m.OnlyRaiseCpcBids
+	}
+	return nil
+}
+
+func (m *PageOnePromoted) GetRaiseCpcBidWhenBudgetConstrained() *wrappers.BoolValue {
+	if m != nil {
+		return m.RaiseCpcBidWhenBudgetConstrained
+	}
+	return nil
+}
+
+func (m *PageOnePromoted) GetRaiseCpcBidWhenQualityScoreIsLow() *wrappers.BoolValue {
+	if m != nil {
+		return m.RaiseCpcBidWhenQualityScoreIsLow
+	}
+	return nil
+}
+
+// An automated bid strategy that sets bids to help get as many conversions as
+// possible at the target cost-per-acquisition (CPA) you set.
+type TargetCpa struct {
+	// Average CPA target.
+	// This target should be greater than or equal to minimum billable unit based
+	// on the currency for the account.
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Minimum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidFloorMicros    *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_floor_micros,json=cpcBidFloorMicros,proto3" json:"cpc_bid_floor_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetCpa) Reset()         { *m = TargetCpa{} }
+func (m *TargetCpa) String() string { return proto.CompactTextString(m) }
+func (*TargetCpa) ProtoMessage()    {}
+func (*TargetCpa) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{7}
+}
+func (m *TargetCpa) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetCpa.Unmarshal(m, b)
+}
+func (m *TargetCpa) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetCpa.Marshal(b, m, deterministic)
+}
+func (dst *TargetCpa) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetCpa.Merge(dst, src)
+}
+func (m *TargetCpa) XXX_Size() int {
+	return xxx_messageInfo_TargetCpa.Size(m)
+}
+func (m *TargetCpa) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetCpa.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetCpa proto.InternalMessageInfo
+
+func (m *TargetCpa) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *TargetCpa) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *TargetCpa) GetCpcBidFloorMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidFloorMicros
+	}
+	return nil
+}
+
+// An automated bidding strategy that sets bids based on the target fraction of
+// auctions where the advertiser should outrank a specific competitor.
+type TargetOutrankShare struct {
+	// The target fraction of auctions where the advertiser should outrank the
+	// competitor.
+	// The advertiser outranks the competitor in an auction if either the
+	// advertiser appears above the competitor in the search results, or appears
+	// in the search results when the competitor does not.
+	// Value must be between 1 and 1000000, inclusive.
+	TargetOutrankShareMicros *wrappers.Int32Value `protobuf:"bytes,1,opt,name=target_outrank_share_micros,json=targetOutrankShareMicros,proto3" json:"target_outrank_share_micros,omitempty"`
+	// Competitor's visible domain URL.
+	CompetitorDomain *wrappers.StringValue `protobuf:"bytes,2,opt,name=competitor_domain,json=competitorDomain,proto3" json:"competitor_domain,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Whether the strategy should always follow bid estimate changes,
+	// or only increase.
+	// If false, always set a keyword's new bid to the current bid estimate.
+	// If true, only updates a keyword's bid if the current bid estimate is
+	// greater than the current bid.
+	OnlyRaiseCpcBids *wrappers.BoolValue `protobuf:"bytes,4,opt,name=only_raise_cpc_bids,json=onlyRaiseCpcBids,proto3" json:"only_raise_cpc_bids,omitempty"`
+	// Whether the strategy is allowed to raise bids on keywords with
+	// lower-range quality scores.
+	RaiseCpcBidWhenQualityScoreIsLow *wrappers.BoolValue `protobuf:"bytes,5,opt,name=raise_cpc_bid_when_quality_score_is_low,json=raiseCpcBidWhenQualityScoreIsLow,proto3" json:"raise_cpc_bid_when_quality_score_is_low,omitempty"`
+	XXX_NoUnkeyedLiteral             struct{}            `json:"-"`
+	XXX_unrecognized                 []byte              `json:"-"`
+	XXX_sizecache                    int32               `json:"-"`
+}
+
+func (m *TargetOutrankShare) Reset()         { *m = TargetOutrankShare{} }
+func (m *TargetOutrankShare) String() string { return proto.CompactTextString(m) }
+func (*TargetOutrankShare) ProtoMessage()    {}
+func (*TargetOutrankShare) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{8}
+}
+func (m *TargetOutrankShare) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetOutrankShare.Unmarshal(m, b)
+}
+func (m *TargetOutrankShare) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetOutrankShare.Marshal(b, m, deterministic)
+}
+func (dst *TargetOutrankShare) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetOutrankShare.Merge(dst, src)
+}
+func (m *TargetOutrankShare) XXX_Size() int {
+	return xxx_messageInfo_TargetOutrankShare.Size(m)
+}
+func (m *TargetOutrankShare) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetOutrankShare.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetOutrankShare proto.InternalMessageInfo
+
+func (m *TargetOutrankShare) GetTargetOutrankShareMicros() *wrappers.Int32Value {
+	if m != nil {
+		return m.TargetOutrankShareMicros
+	}
+	return nil
+}
+
+func (m *TargetOutrankShare) GetCompetitorDomain() *wrappers.StringValue {
+	if m != nil {
+		return m.CompetitorDomain
+	}
+	return nil
+}
+
+func (m *TargetOutrankShare) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *TargetOutrankShare) GetOnlyRaiseCpcBids() *wrappers.BoolValue {
+	if m != nil {
+		return m.OnlyRaiseCpcBids
+	}
+	return nil
+}
+
+func (m *TargetOutrankShare) GetRaiseCpcBidWhenQualityScoreIsLow() *wrappers.BoolValue {
+	if m != nil {
+		return m.RaiseCpcBidWhenQualityScoreIsLow
+	}
+	return nil
+}
+
+// An automated bidding strategy that helps you maximize revenue while
+// averaging a specific target return on ad spend (ROAS).
+type TargetRoas struct {
+	// Required. The desired revenue (based on conversion data) per unit of spend.
+	// Value must be between 0.01 and 1000.0, inclusive.
+	TargetRoas *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=target_roas,json=targetRoas,proto3" json:"target_roas,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Minimum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidFloorMicros    *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_floor_micros,json=cpcBidFloorMicros,proto3" json:"cpc_bid_floor_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetRoas) Reset()         { *m = TargetRoas{} }
+func (m *TargetRoas) String() string { return proto.CompactTextString(m) }
+func (*TargetRoas) ProtoMessage()    {}
+func (*TargetRoas) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{9}
+}
+func (m *TargetRoas) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetRoas.Unmarshal(m, b)
+}
+func (m *TargetRoas) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetRoas.Marshal(b, m, deterministic)
+}
+func (dst *TargetRoas) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetRoas.Merge(dst, src)
+}
+func (m *TargetRoas) XXX_Size() int {
+	return xxx_messageInfo_TargetRoas.Size(m)
+}
+func (m *TargetRoas) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetRoas.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetRoas proto.InternalMessageInfo
+
+func (m *TargetRoas) GetTargetRoas() *wrappers.DoubleValue {
+	if m != nil {
+		return m.TargetRoas
+	}
+	return nil
+}
+
+func (m *TargetRoas) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *TargetRoas) GetCpcBidFloorMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidFloorMicros
+	}
+	return nil
+}
+
+// An automated bid strategy that sets your bids to help get as many clicks
+// as possible within your budget.
+type TargetSpend struct {
+	// The spend target under which to maximize clicks.
+	// A TargetSpend bidder will attempt to spend the smaller of this value
+	// or the natural throttling spend amount.
+	// If not specified, the budget is used as the spend target.
+	TargetSpendMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=target_spend_micros,json=targetSpendMicros,proto3" json:"target_spend_micros,omitempty"`
+	// Maximum bid limit that can be set by the bid strategy.
+	// The limit applies to all keywords managed by the strategy.
+	CpcBidCeilingMicros  *wrappers.Int64Value `protobuf:"bytes,2,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TargetSpend) Reset()         { *m = TargetSpend{} }
+func (m *TargetSpend) String() string { return proto.CompactTextString(m) }
+func (*TargetSpend) ProtoMessage()    {}
+func (*TargetSpend) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{10}
+}
+func (m *TargetSpend) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetSpend.Unmarshal(m, b)
+}
+func (m *TargetSpend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetSpend.Marshal(b, m, deterministic)
+}
+func (dst *TargetSpend) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetSpend.Merge(dst, src)
+}
+func (m *TargetSpend) XXX_Size() int {
+	return xxx_messageInfo_TargetSpend.Size(m)
+}
+func (m *TargetSpend) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetSpend.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetSpend proto.InternalMessageInfo
+
+func (m *TargetSpend) GetTargetSpendMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetSpendMicros
+	}
+	return nil
+}
+
+func (m *TargetSpend) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+// A bidding strategy where bids are a fraction of the advertised price for
+// some good or service.
+type PercentCpc struct {
+	// Maximum bid limit that can be set by the bid strategy. This is
+	// an optional field entered by the advertiser and specified in local micros.
+	// Note: A zero value is interpreted in the same way as having bid_ceiling
+	// undefined.
+	CpcBidCeilingMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=cpc_bid_ceiling_micros,json=cpcBidCeilingMicros,proto3" json:"cpc_bid_ceiling_micros,omitempty"`
+	// Adjusts the bid for each auction upward or downward, depending on the
+	// likelihood of a conversion. Individual bids may exceed
+	// cpc_bid_ceiling_micros, but the average bid amount for a campaign should
+	// not.
+	EnhancedCpcEnabled   *wrappers.BoolValue `protobuf:"bytes,2,opt,name=enhanced_cpc_enabled,json=enhancedCpcEnabled,proto3" json:"enhanced_cpc_enabled,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *PercentCpc) Reset()         { *m = PercentCpc{} }
+func (m *PercentCpc) String() string { return proto.CompactTextString(m) }
+func (*PercentCpc) ProtoMessage()    {}
+func (*PercentCpc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_3ebd125ac4f88b12, []int{11}
+}
+func (m *PercentCpc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PercentCpc.Unmarshal(m, b)
+}
+func (m *PercentCpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PercentCpc.Marshal(b, m, deterministic)
+}
+func (dst *PercentCpc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PercentCpc.Merge(dst, src)
+}
+func (m *PercentCpc) XXX_Size() int {
+	return xxx_messageInfo_PercentCpc.Size(m)
+}
+func (m *PercentCpc) XXX_DiscardUnknown() {
+	xxx_messageInfo_PercentCpc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PercentCpc proto.InternalMessageInfo
+
+func (m *PercentCpc) GetCpcBidCeilingMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidCeilingMicros
+	}
+	return nil
+}
+
+func (m *PercentCpc) GetEnhancedCpcEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.EnhancedCpcEnabled
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*EnhancedCpc)(nil), "google.ads.googleads.v0.common.EnhancedCpc")
+	proto.RegisterType((*ManualCpc)(nil), "google.ads.googleads.v0.common.ManualCpc")
+	proto.RegisterType((*ManualCpm)(nil), "google.ads.googleads.v0.common.ManualCpm")
+	proto.RegisterType((*ManualCpv)(nil), "google.ads.googleads.v0.common.ManualCpv")
+	proto.RegisterType((*MaximizeConversions)(nil), "google.ads.googleads.v0.common.MaximizeConversions")
+	proto.RegisterType((*MaximizeConversionValue)(nil), "google.ads.googleads.v0.common.MaximizeConversionValue")
+	proto.RegisterType((*PageOnePromoted)(nil), "google.ads.googleads.v0.common.PageOnePromoted")
+	proto.RegisterType((*TargetCpa)(nil), "google.ads.googleads.v0.common.TargetCpa")
+	proto.RegisterType((*TargetOutrankShare)(nil), "google.ads.googleads.v0.common.TargetOutrankShare")
+	proto.RegisterType((*TargetRoas)(nil), "google.ads.googleads.v0.common.TargetRoas")
+	proto.RegisterType((*TargetSpend)(nil), "google.ads.googleads.v0.common.TargetSpend")
+	proto.RegisterType((*PercentCpc)(nil), "google.ads.googleads.v0.common.PercentCpc")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/bidding.proto", fileDescriptor_bidding_3ebd125ac4f88b12)
+}
+
+var fileDescriptor_bidding_3ebd125ac4f88b12 = []byte{
+	// 805 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x96, 0x4f, 0x6f, 0x1b, 0x45,
+	0x14, 0xc0, 0xb5, 0x71, 0x5b, 0xa9, 0xe3, 0x94, 0x92, 0x4d, 0x01, 0x2b, 0x45, 0x55, 0xb5, 0x12,
+	0x82, 0x03, 0xda, 0x8d, 0x52, 0xc4, 0x05, 0x21, 0x14, 0x6f, 0x42, 0x64, 0x11, 0xab, 0xc6, 0xae,
+	0x02, 0x44, 0x96, 0x46, 0xb3, 0x33, 0x2f, 0xeb, 0x51, 0x77, 0xe7, 0x2d, 0x33, 0xbb, 0x36, 0xe1,
+	0xc2, 0x77, 0xe1, 0x88, 0xf8, 0x14, 0x5c, 0x90, 0x10, 0xdf, 0x84, 0x2b, 0x1f, 0x00, 0xed, 0xce,
+	0x38, 0x6e, 0x71, 0x1d, 0x37, 0x21, 0x48, 0x3d, 0xed, 0xfc, 0x79, 0xef, 0xf7, 0xfe, 0xce, 0xce,
+	0x90, 0x8f, 0x53, 0xc4, 0x34, 0x83, 0x88, 0x09, 0x13, 0xd9, 0x61, 0x3d, 0x9a, 0xee, 0x46, 0x1c,
+	0xf3, 0x1c, 0x55, 0x94, 0x48, 0x21, 0xa4, 0x4a, 0xc3, 0x42, 0x63, 0x89, 0xfe, 0x23, 0x2b, 0x12,
+	0x32, 0x61, 0xc2, 0x0b, 0xe9, 0x70, 0xba, 0x1b, 0x5a, 0xe9, 0x9d, 0x78, 0x15, 0x0d, 0x54, 0x95,
+	0x9b, 0xa8, 0x60, 0x29, 0x50, 0x54, 0x40, 0x0b, 0x8d, 0x39, 0x96, 0x20, 0xa8, 0x29, 0x35, 0x2b,
+	0x21, 0x3d, 0xa7, 0x29, 0xb2, 0xcc, 0x1a, 0xd9, 0x71, 0x46, 0xa2, 0x66, 0x96, 0x54, 0x67, 0xd1,
+	0x4c, 0xb3, 0xa2, 0x00, 0x6d, 0xec, 0x7e, 0x70, 0x8f, 0xb4, 0x0f, 0xd5, 0x84, 0x29, 0x0e, 0x22,
+	0x2e, 0x78, 0xf0, 0x1d, 0xb9, 0xdb, 0x67, 0xaa, 0x62, 0x59, 0x5c, 0x70, 0xff, 0x98, 0x3c, 0x00,
+	0xb7, 0x47, 0x79, 0xc1, 0x29, 0x28, 0x96, 0x64, 0x20, 0x3a, 0xde, 0x63, 0xef, 0xa3, 0xf6, 0xde,
+	0x8e, 0x73, 0x3a, 0x9c, 0xa3, 0xc3, 0x2e, 0x62, 0x76, 0xc2, 0xb2, 0x0a, 0x86, 0x3e, 0x2c, 0x98,
+	0x87, 0x56, 0x2b, 0x68, 0x2f, 0xd0, 0xf9, 0x8b, 0x93, 0x69, 0xf0, 0x0e, 0xd9, 0xee, 0xb3, 0x1f,
+	0x64, 0x2e, 0x7f, 0x84, 0x18, 0xd5, 0x14, 0xb4, 0x91, 0xa8, 0x4c, 0xf0, 0x2d, 0x79, 0x6f, 0x79,
+	0xb9, 0xe1, 0xfb, 0x9f, 0x93, 0x76, 0xc9, 0x74, 0x0a, 0x25, 0xd5, 0xc8, 0x8c, 0x73, 0xe8, 0xfd,
+	0x25, 0x87, 0x0e, 0xb0, 0x4a, 0x32, 0xb0, 0x2e, 0x11, 0xab, 0x30, 0x44, 0x66, 0x82, 0x3f, 0x6f,
+	0x91, 0xfb, 0x03, 0x96, 0xc2, 0x53, 0x05, 0x03, 0x97, 0x3c, 0xff, 0x27, 0x72, 0xef, 0xa5, 0xfc,
+	0x35, 0xd0, 0xb7, 0xf6, 0x4e, 0xc3, 0x55, 0x55, 0x6a, 0xaa, 0x10, 0xfe, 0x0b, 0x33, 0x72, 0x88,
+	0x23, 0x64, 0xd9, 0xa1, 0xaa, 0xf2, 0xcb, 0xf6, 0x87, 0x9b, 0xe6, 0x85, 0x99, 0x3f, 0x20, 0xef,
+	0xd6, 0x49, 0x4e, 0xa4, 0xa0, 0x1c, 0x64, 0x26, 0x55, 0x4a, 0x73, 0xc9, 0x35, 0x9a, 0xce, 0x46,
+	0x13, 0xde, 0xc3, 0xa5, 0xf0, 0x7a, 0xaa, 0xfc, 0xf4, 0x13, 0x1b, 0xdd, 0x36, 0x2f, 0x78, 0x57,
+	0x8a, 0xd8, 0x2a, 0xf6, 0x1b, 0x3d, 0xff, 0x0b, 0xb2, 0x59, 0xd3, 0x72, 0x14, 0xf2, 0x4c, 0x82,
+	0xee, 0xb4, 0x5e, 0x23, 0x4d, 0xed, 0x44, 0x8a, 0xbe, 0x53, 0xf0, 0x7b, 0x64, 0x1b, 0x55, 0x76,
+	0x4e, 0x35, 0x93, 0x06, 0xa8, 0xf3, 0xce, 0x74, 0x6e, 0xad, 0xad, 0xff, 0xdb, 0xb5, 0xda, 0xb0,
+	0xd6, 0x8a, 0x1b, 0xbf, 0x8c, 0xff, 0x9c, 0x7c, 0xf0, 0x12, 0x85, 0xce, 0x26, 0xa0, 0x68, 0x52,
+	0x89, 0xba, 0x88, 0x1c, 0x55, 0x9d, 0x0a, 0xa9, 0x40, 0x74, 0x6e, 0xaf, 0x85, 0x3f, 0xd6, 0x0b,
+	0xf0, 0x37, 0x13, 0x50, 0xdd, 0x06, 0x12, 0x2f, 0x18, 0x7e, 0x4e, 0x3e, 0x7c, 0x85, 0xb1, 0xef,
+	0x2b, 0x96, 0xc9, 0xf2, 0x9c, 0x1a, 0x8e, 0x1a, 0xa8, 0x34, 0x34, 0xc3, 0x59, 0xe7, 0xce, 0x95,
+	0xcd, 0x7d, 0x6d, 0x31, 0xa3, 0x9a, 0xd2, 0x33, 0xc7, 0x38, 0x0b, 0xfe, 0xf6, 0xc8, 0xdd, 0x67,
+	0x4d, 0x77, 0xc5, 0x05, 0xf3, 0x8f, 0xc8, 0x96, 0xeb, 0x4d, 0x5e, 0xb0, 0x79, 0x09, 0xbd, 0xf5,
+	0x25, 0xbc, 0x5f, 0xce, 0x11, 0xae, 0x7c, 0x37, 0xdf, 0x10, 0xc7, 0xe4, 0xc1, 0x9c, 0x78, 0x96,
+	0x21, 0xea, 0x39, 0xaf, 0xb5, 0x9e, 0xb7, 0x65, 0x79, 0x5f, 0xd6, 0x6a, 0x96, 0x16, 0xfc, 0xde,
+	0x22, 0xbe, 0x0d, 0xfb, 0x69, 0x55, 0x6a, 0xa6, 0x9e, 0x8f, 0x26, 0x4c, 0x83, 0x7f, 0x4a, 0x1e,
+	0xba, 0xf8, 0xd1, 0x2e, 0x53, 0x53, 0xaf, 0xbf, 0x46, 0x26, 0x9e, 0xec, 0x59, 0x5b, 0x9d, 0x72,
+	0x89, 0xea, 0x02, 0xe8, 0x91, 0x2d, 0x8e, 0x79, 0x01, 0xa5, 0x2c, 0x51, 0x53, 0x81, 0x39, 0x93,
+	0xca, 0x65, 0x63, 0xb9, 0xad, 0x47, 0xa5, 0x96, 0x2a, 0x75, 0x0d, 0xb9, 0x50, 0x3b, 0x68, 0xb4,
+	0x2e, 0xc9, 0x6e, 0xeb, 0x9a, 0xd9, 0xbd, 0xc1, 0xd3, 0x72, 0x85, 0x06, 0xbe, 0x7d, 0x03, 0x0d,
+	0xfc, 0x97, 0x47, 0xc8, 0xb3, 0x8b, 0xdf, 0xe3, 0x7f, 0xfc, 0xbb, 0xbe, 0xf1, 0x7d, 0xfb, 0xab,
+	0x47, 0xda, 0x36, 0xda, 0x51, 0x01, 0x4a, 0xf8, 0x5f, 0x91, 0x6d, 0x17, 0xae, 0xa9, 0xe7, 0x57,
+	0x38, 0xb2, 0xee, 0xa0, 0x37, 0x98, 0xff, 0xeb, 0xd0, 0xd6, 0xee, 0x92, 0x01, 0x68, 0x0e, 0xaa,
+	0xac, 0x2f, 0xe5, 0xd5, 0x06, 0xbc, 0xeb, 0x67, 0xf7, 0x95, 0xd7, 0xfc, 0xc6, 0x75, 0xae, 0xf9,
+	0xee, 0x6f, 0x1e, 0x09, 0x38, 0xe6, 0xe1, 0xe5, 0x8f, 0x9b, 0xee, 0x66, 0xd7, 0xbe, 0x85, 0x06,
+	0x35, 0x75, 0xe0, 0x9d, 0x1e, 0x38, 0xf9, 0x14, 0x33, 0xa6, 0xd2, 0x10, 0x75, 0x1a, 0xa5, 0xa0,
+	0x1a, 0x9b, 0xf3, 0xc7, 0x4f, 0x21, 0xcd, 0xaa, 0x97, 0xd5, 0x67, 0xf6, 0xf3, 0xf3, 0x46, 0xeb,
+	0x68, 0x7f, 0xff, 0x97, 0x8d, 0x47, 0x47, 0x16, 0xb6, 0x2f, 0x4c, 0x68, 0x87, 0xf5, 0xe8, 0x64,
+	0x37, 0x8c, 0x1b, 0xb1, 0x3f, 0xe6, 0x02, 0xe3, 0x7d, 0x61, 0xc6, 0x17, 0x02, 0xe3, 0x93, 0xdd,
+	0xb1, 0x15, 0x48, 0xee, 0x34, 0x86, 0x9f, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0xc9, 0xde, 0x2e,
+	0x2b, 0xd1, 0x09, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/criteria.pb.go b/googleapis/ads/googleads/v0/common/criteria.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f25af79dbbcba65e2c548792adfc17bd2cbc3c98
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/criteria.pb.go
@@ -0,0 +1,2575 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/criteria.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A keyword criterion.
+type KeywordInfo struct {
+	// The text of the keyword (at most 80 characters and 10 words).
+	Text *wrappers.StringValue `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+	// The match type of the keyword.
+	MatchType            enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,2,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v0.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *KeywordInfo) Reset()         { *m = KeywordInfo{} }
+func (m *KeywordInfo) String() string { return proto.CompactTextString(m) }
+func (*KeywordInfo) ProtoMessage()    {}
+func (*KeywordInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{0}
+}
+func (m *KeywordInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordInfo.Unmarshal(m, b)
+}
+func (m *KeywordInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordInfo.Marshal(b, m, deterministic)
+}
+func (dst *KeywordInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordInfo.Merge(dst, src)
+}
+func (m *KeywordInfo) XXX_Size() int {
+	return xxx_messageInfo_KeywordInfo.Size(m)
+}
+func (m *KeywordInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordInfo proto.InternalMessageInfo
+
+func (m *KeywordInfo) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *KeywordInfo) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+// A placement criterion. This can be used to modify bids for sites when
+// targeting the content network.
+type PlacementInfo struct {
+	// URL of the placement.
+	//
+	// For example, "http://www.domain.com".
+	Url                  *wrappers.StringValue `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PlacementInfo) Reset()         { *m = PlacementInfo{} }
+func (m *PlacementInfo) String() string { return proto.CompactTextString(m) }
+func (*PlacementInfo) ProtoMessage()    {}
+func (*PlacementInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{1}
+}
+func (m *PlacementInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlacementInfo.Unmarshal(m, b)
+}
+func (m *PlacementInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlacementInfo.Marshal(b, m, deterministic)
+}
+func (dst *PlacementInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlacementInfo.Merge(dst, src)
+}
+func (m *PlacementInfo) XXX_Size() int {
+	return xxx_messageInfo_PlacementInfo.Size(m)
+}
+func (m *PlacementInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlacementInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlacementInfo proto.InternalMessageInfo
+
+func (m *PlacementInfo) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+// A location criterion.
+type LocationInfo struct {
+	// The geo target constant resource name.
+	GeoTargetConstant    *wrappers.StringValue `protobuf:"bytes,1,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LocationInfo) Reset()         { *m = LocationInfo{} }
+func (m *LocationInfo) String() string { return proto.CompactTextString(m) }
+func (*LocationInfo) ProtoMessage()    {}
+func (*LocationInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{2}
+}
+func (m *LocationInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationInfo.Unmarshal(m, b)
+}
+func (m *LocationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationInfo.Marshal(b, m, deterministic)
+}
+func (dst *LocationInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationInfo.Merge(dst, src)
+}
+func (m *LocationInfo) XXX_Size() int {
+	return xxx_messageInfo_LocationInfo.Size(m)
+}
+func (m *LocationInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationInfo proto.InternalMessageInfo
+
+func (m *LocationInfo) GetGeoTargetConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+// A device criterion.
+type DeviceInfo struct {
+	// Type of the device.
+	Type                 enums.DeviceEnum_Device `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.DeviceEnum_Device" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *DeviceInfo) Reset()         { *m = DeviceInfo{} }
+func (m *DeviceInfo) String() string { return proto.CompactTextString(m) }
+func (*DeviceInfo) ProtoMessage()    {}
+func (*DeviceInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{3}
+}
+func (m *DeviceInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceInfo.Unmarshal(m, b)
+}
+func (m *DeviceInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceInfo.Marshal(b, m, deterministic)
+}
+func (dst *DeviceInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceInfo.Merge(dst, src)
+}
+func (m *DeviceInfo) XXX_Size() int {
+	return xxx_messageInfo_DeviceInfo.Size(m)
+}
+func (m *DeviceInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceInfo proto.InternalMessageInfo
+
+func (m *DeviceInfo) GetType() enums.DeviceEnum_Device {
+	if m != nil {
+		return m.Type
+	}
+	return enums.DeviceEnum_UNSPECIFIED
+}
+
+// A preferred content criterion.
+type PreferredContentInfo struct {
+	// Type of the preferred content.
+	Type                 enums.PreferredContentTypeEnum_PreferredContentType `protobuf:"varint,2,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.PreferredContentTypeEnum_PreferredContentType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
+	XXX_unrecognized     []byte                                              `json:"-"`
+	XXX_sizecache        int32                                               `json:"-"`
+}
+
+func (m *PreferredContentInfo) Reset()         { *m = PreferredContentInfo{} }
+func (m *PreferredContentInfo) String() string { return proto.CompactTextString(m) }
+func (*PreferredContentInfo) ProtoMessage()    {}
+func (*PreferredContentInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{4}
+}
+func (m *PreferredContentInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PreferredContentInfo.Unmarshal(m, b)
+}
+func (m *PreferredContentInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PreferredContentInfo.Marshal(b, m, deterministic)
+}
+func (dst *PreferredContentInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PreferredContentInfo.Merge(dst, src)
+}
+func (m *PreferredContentInfo) XXX_Size() int {
+	return xxx_messageInfo_PreferredContentInfo.Size(m)
+}
+func (m *PreferredContentInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_PreferredContentInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PreferredContentInfo proto.InternalMessageInfo
+
+func (m *PreferredContentInfo) GetType() enums.PreferredContentTypeEnum_PreferredContentType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.PreferredContentTypeEnum_UNSPECIFIED
+}
+
+// A listing group criterion.
+type ListingGroupInfo struct {
+	// Type of the listing group.
+	Type enums.ListingGroupTypeEnum_ListingGroupType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.ListingGroupTypeEnum_ListingGroupType" json:"type,omitempty"`
+	// Dimension value with which this listing group is refining its parent.
+	// Undefined for the root group.
+	CaseValue *ListingDimensionInfo `protobuf:"bytes,2,opt,name=case_value,json=caseValue,proto3" json:"case_value,omitempty"`
+	// Resource name of ad group criterion which is the parent listing group
+	// subdivision. Null for the root group.
+	ParentAdGroupCriterion *wrappers.StringValue `protobuf:"bytes,3,opt,name=parent_ad_group_criterion,json=parentAdGroupCriterion,proto3" json:"parent_ad_group_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}              `json:"-"`
+	XXX_unrecognized       []byte                `json:"-"`
+	XXX_sizecache          int32                 `json:"-"`
+}
+
+func (m *ListingGroupInfo) Reset()         { *m = ListingGroupInfo{} }
+func (m *ListingGroupInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingGroupInfo) ProtoMessage()    {}
+func (*ListingGroupInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{5}
+}
+func (m *ListingGroupInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingGroupInfo.Unmarshal(m, b)
+}
+func (m *ListingGroupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingGroupInfo.Marshal(b, m, deterministic)
+}
+func (dst *ListingGroupInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingGroupInfo.Merge(dst, src)
+}
+func (m *ListingGroupInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingGroupInfo.Size(m)
+}
+func (m *ListingGroupInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingGroupInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingGroupInfo proto.InternalMessageInfo
+
+func (m *ListingGroupInfo) GetType() enums.ListingGroupTypeEnum_ListingGroupType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ListingGroupTypeEnum_UNSPECIFIED
+}
+
+func (m *ListingGroupInfo) GetCaseValue() *ListingDimensionInfo {
+	if m != nil {
+		return m.CaseValue
+	}
+	return nil
+}
+
+func (m *ListingGroupInfo) GetParentAdGroupCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.ParentAdGroupCriterion
+	}
+	return nil
+}
+
+// A listing scope criterion.
+type ListingScopeInfo struct {
+	// Scope of the campaign criterion.
+	Dimensions           []*ListingDimensionInfo `protobuf:"bytes,2,rep,name=dimensions,proto3" json:"dimensions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *ListingScopeInfo) Reset()         { *m = ListingScopeInfo{} }
+func (m *ListingScopeInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingScopeInfo) ProtoMessage()    {}
+func (*ListingScopeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{6}
+}
+func (m *ListingScopeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingScopeInfo.Unmarshal(m, b)
+}
+func (m *ListingScopeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingScopeInfo.Marshal(b, m, deterministic)
+}
+func (dst *ListingScopeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingScopeInfo.Merge(dst, src)
+}
+func (m *ListingScopeInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingScopeInfo.Size(m)
+}
+func (m *ListingScopeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingScopeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingScopeInfo proto.InternalMessageInfo
+
+func (m *ListingScopeInfo) GetDimensions() []*ListingDimensionInfo {
+	if m != nil {
+		return m.Dimensions
+	}
+	return nil
+}
+
+// Listing dimensions for listing group criterion.
+type ListingDimensionInfo struct {
+	// Dimension of one of the types below is always present.
+	//
+	// Types that are valid to be assigned to Dimension:
+	//	*ListingDimensionInfo_ListingBrand
+	//	*ListingDimensionInfo_HotelId
+	//	*ListingDimensionInfo_HotelClass
+	//	*ListingDimensionInfo_HotelCountryRegion
+	//	*ListingDimensionInfo_HotelState
+	//	*ListingDimensionInfo_HotelCity
+	//	*ListingDimensionInfo_ListingCustomAttribute
+	//	*ListingDimensionInfo_ProductChannel
+	//	*ListingDimensionInfo_ProductChannelExclusivity
+	//	*ListingDimensionInfo_ProductCondition
+	//	*ListingDimensionInfo_ProductOfferId
+	//	*ListingDimensionInfo_ProductType
+	Dimension            isListingDimensionInfo_Dimension `protobuf_oneof:"dimension"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *ListingDimensionInfo) Reset()         { *m = ListingDimensionInfo{} }
+func (m *ListingDimensionInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingDimensionInfo) ProtoMessage()    {}
+func (*ListingDimensionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{7}
+}
+func (m *ListingDimensionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingDimensionInfo.Unmarshal(m, b)
+}
+func (m *ListingDimensionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingDimensionInfo.Marshal(b, m, deterministic)
+}
+func (dst *ListingDimensionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingDimensionInfo.Merge(dst, src)
+}
+func (m *ListingDimensionInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingDimensionInfo.Size(m)
+}
+func (m *ListingDimensionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingDimensionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingDimensionInfo proto.InternalMessageInfo
+
+type isListingDimensionInfo_Dimension interface {
+	isListingDimensionInfo_Dimension()
+}
+
+type ListingDimensionInfo_ListingBrand struct {
+	ListingBrand *ListingBrandInfo `protobuf:"bytes,1,opt,name=listing_brand,json=listingBrand,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelId struct {
+	HotelId *HotelIdInfo `protobuf:"bytes,2,opt,name=hotel_id,json=hotelId,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelClass struct {
+	HotelClass *HotelClassInfo `protobuf:"bytes,3,opt,name=hotel_class,json=hotelClass,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelCountryRegion struct {
+	HotelCountryRegion *HotelCountryRegionInfo `protobuf:"bytes,4,opt,name=hotel_country_region,json=hotelCountryRegion,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelState struct {
+	HotelState *HotelStateInfo `protobuf:"bytes,5,opt,name=hotel_state,json=hotelState,proto3,oneof"`
+}
+
+type ListingDimensionInfo_HotelCity struct {
+	HotelCity *HotelCityInfo `protobuf:"bytes,6,opt,name=hotel_city,json=hotelCity,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ListingCustomAttribute struct {
+	ListingCustomAttribute *ListingCustomAttributeInfo `protobuf:"bytes,7,opt,name=listing_custom_attribute,json=listingCustomAttribute,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductChannel struct {
+	ProductChannel *ProductChannelInfo `protobuf:"bytes,8,opt,name=product_channel,json=productChannel,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductChannelExclusivity struct {
+	ProductChannelExclusivity *ProductChannelExclusivityInfo `protobuf:"bytes,9,opt,name=product_channel_exclusivity,json=productChannelExclusivity,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductCondition struct {
+	ProductCondition *ProductConditionInfo `protobuf:"bytes,10,opt,name=product_condition,json=productCondition,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductOfferId struct {
+	ProductOfferId *ProductOfferIdInfo `protobuf:"bytes,11,opt,name=product_offer_id,json=productOfferId,proto3,oneof"`
+}
+
+type ListingDimensionInfo_ProductType struct {
+	ProductType *ProductTypeInfo `protobuf:"bytes,12,opt,name=product_type,json=productType,proto3,oneof"`
+}
+
+func (*ListingDimensionInfo_ListingBrand) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelId) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelClass) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelCountryRegion) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelState) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_HotelCity) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ListingCustomAttribute) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductChannel) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductChannelExclusivity) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductCondition) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductOfferId) isListingDimensionInfo_Dimension() {}
+
+func (*ListingDimensionInfo_ProductType) isListingDimensionInfo_Dimension() {}
+
+func (m *ListingDimensionInfo) GetDimension() isListingDimensionInfo_Dimension {
+	if m != nil {
+		return m.Dimension
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetListingBrand() *ListingBrandInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ListingBrand); ok {
+		return x.ListingBrand
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelId() *HotelIdInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelId); ok {
+		return x.HotelId
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelClass() *HotelClassInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelClass); ok {
+		return x.HotelClass
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelCountryRegion() *HotelCountryRegionInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelCountryRegion); ok {
+		return x.HotelCountryRegion
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelState() *HotelStateInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelState); ok {
+		return x.HotelState
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetHotelCity() *HotelCityInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_HotelCity); ok {
+		return x.HotelCity
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetListingCustomAttribute() *ListingCustomAttributeInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ListingCustomAttribute); ok {
+		return x.ListingCustomAttribute
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductChannel() *ProductChannelInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductChannel); ok {
+		return x.ProductChannel
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductChannelExclusivity() *ProductChannelExclusivityInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductChannelExclusivity); ok {
+		return x.ProductChannelExclusivity
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductCondition() *ProductConditionInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductCondition); ok {
+		return x.ProductCondition
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductOfferId() *ProductOfferIdInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductOfferId); ok {
+		return x.ProductOfferId
+	}
+	return nil
+}
+
+func (m *ListingDimensionInfo) GetProductType() *ProductTypeInfo {
+	if x, ok := m.GetDimension().(*ListingDimensionInfo_ProductType); ok {
+		return x.ProductType
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ListingDimensionInfo) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ListingDimensionInfo_OneofMarshaler, _ListingDimensionInfo_OneofUnmarshaler, _ListingDimensionInfo_OneofSizer, []interface{}{
+		(*ListingDimensionInfo_ListingBrand)(nil),
+		(*ListingDimensionInfo_HotelId)(nil),
+		(*ListingDimensionInfo_HotelClass)(nil),
+		(*ListingDimensionInfo_HotelCountryRegion)(nil),
+		(*ListingDimensionInfo_HotelState)(nil),
+		(*ListingDimensionInfo_HotelCity)(nil),
+		(*ListingDimensionInfo_ListingCustomAttribute)(nil),
+		(*ListingDimensionInfo_ProductChannel)(nil),
+		(*ListingDimensionInfo_ProductChannelExclusivity)(nil),
+		(*ListingDimensionInfo_ProductCondition)(nil),
+		(*ListingDimensionInfo_ProductOfferId)(nil),
+		(*ListingDimensionInfo_ProductType)(nil),
+	}
+}
+
+func _ListingDimensionInfo_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ListingDimensionInfo)
+	// dimension
+	switch x := m.Dimension.(type) {
+	case *ListingDimensionInfo_ListingBrand:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ListingBrand); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_HotelId:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelId); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_HotelClass:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelClass); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_HotelCountryRegion:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelCountryRegion); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_HotelState:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelState); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_HotelCity:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelCity); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_ListingCustomAttribute:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ListingCustomAttribute); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_ProductChannel:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProductChannel); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_ProductChannelExclusivity:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProductChannelExclusivity); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_ProductCondition:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProductCondition); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_ProductOfferId:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProductOfferId); err != nil {
+			return err
+		}
+	case *ListingDimensionInfo_ProductType:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProductType); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ListingDimensionInfo.Dimension has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ListingDimensionInfo_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ListingDimensionInfo)
+	switch tag {
+	case 1: // dimension.listing_brand
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ListingBrandInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_ListingBrand{msg}
+		return true, err
+	case 2: // dimension.hotel_id
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(HotelIdInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_HotelId{msg}
+		return true, err
+	case 3: // dimension.hotel_class
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(HotelClassInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_HotelClass{msg}
+		return true, err
+	case 4: // dimension.hotel_country_region
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(HotelCountryRegionInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_HotelCountryRegion{msg}
+		return true, err
+	case 5: // dimension.hotel_state
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(HotelStateInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_HotelState{msg}
+		return true, err
+	case 6: // dimension.hotel_city
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(HotelCityInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_HotelCity{msg}
+		return true, err
+	case 7: // dimension.listing_custom_attribute
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ListingCustomAttributeInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_ListingCustomAttribute{msg}
+		return true, err
+	case 8: // dimension.product_channel
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ProductChannelInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_ProductChannel{msg}
+		return true, err
+	case 9: // dimension.product_channel_exclusivity
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ProductChannelExclusivityInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_ProductChannelExclusivity{msg}
+		return true, err
+	case 10: // dimension.product_condition
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ProductConditionInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_ProductCondition{msg}
+		return true, err
+	case 11: // dimension.product_offer_id
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ProductOfferIdInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_ProductOfferId{msg}
+		return true, err
+	case 12: // dimension.product_type
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ProductTypeInfo)
+		err := b.DecodeMessage(msg)
+		m.Dimension = &ListingDimensionInfo_ProductType{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ListingDimensionInfo_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ListingDimensionInfo)
+	// dimension
+	switch x := m.Dimension.(type) {
+	case *ListingDimensionInfo_ListingBrand:
+		s := proto.Size(x.ListingBrand)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_HotelId:
+		s := proto.Size(x.HotelId)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_HotelClass:
+		s := proto.Size(x.HotelClass)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_HotelCountryRegion:
+		s := proto.Size(x.HotelCountryRegion)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_HotelState:
+		s := proto.Size(x.HotelState)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_HotelCity:
+		s := proto.Size(x.HotelCity)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_ListingCustomAttribute:
+		s := proto.Size(x.ListingCustomAttribute)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_ProductChannel:
+		s := proto.Size(x.ProductChannel)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_ProductChannelExclusivity:
+		s := proto.Size(x.ProductChannelExclusivity)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_ProductCondition:
+		s := proto.Size(x.ProductCondition)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_ProductOfferId:
+		s := proto.Size(x.ProductOfferId)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ListingDimensionInfo_ProductType:
+		s := proto.Size(x.ProductType)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Brand of the listing.
+type ListingBrandInfo struct {
+	// String value of the listing brand.
+	Value                *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ListingBrandInfo) Reset()         { *m = ListingBrandInfo{} }
+func (m *ListingBrandInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingBrandInfo) ProtoMessage()    {}
+func (*ListingBrandInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{8}
+}
+func (m *ListingBrandInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingBrandInfo.Unmarshal(m, b)
+}
+func (m *ListingBrandInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingBrandInfo.Marshal(b, m, deterministic)
+}
+func (dst *ListingBrandInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingBrandInfo.Merge(dst, src)
+}
+func (m *ListingBrandInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingBrandInfo.Size(m)
+}
+func (m *ListingBrandInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingBrandInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingBrandInfo proto.InternalMessageInfo
+
+func (m *ListingBrandInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Advertiser-specific hotel ID.
+type HotelIdInfo struct {
+	// String value of the hotel ID.
+	Value                *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *HotelIdInfo) Reset()         { *m = HotelIdInfo{} }
+func (m *HotelIdInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelIdInfo) ProtoMessage()    {}
+func (*HotelIdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{9}
+}
+func (m *HotelIdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelIdInfo.Unmarshal(m, b)
+}
+func (m *HotelIdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelIdInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelIdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelIdInfo.Merge(dst, src)
+}
+func (m *HotelIdInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelIdInfo.Size(m)
+}
+func (m *HotelIdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelIdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelIdInfo proto.InternalMessageInfo
+
+func (m *HotelIdInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Class of the hotel as a number of stars 1 to 5.
+type HotelClassInfo struct {
+	// Long value of the hotel class.
+	Value                *wrappers.Int64Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *HotelClassInfo) Reset()         { *m = HotelClassInfo{} }
+func (m *HotelClassInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelClassInfo) ProtoMessage()    {}
+func (*HotelClassInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{10}
+}
+func (m *HotelClassInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelClassInfo.Unmarshal(m, b)
+}
+func (m *HotelClassInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelClassInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelClassInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelClassInfo.Merge(dst, src)
+}
+func (m *HotelClassInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelClassInfo.Size(m)
+}
+func (m *HotelClassInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelClassInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelClassInfo proto.InternalMessageInfo
+
+func (m *HotelClassInfo) GetValue() *wrappers.Int64Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Country or Region the hotel is located in.
+type HotelCountryRegionInfo struct {
+	// The Geo Target Constant resource name.
+	CountryRegionCriterion *wrappers.StringValue `protobuf:"bytes,1,opt,name=country_region_criterion,json=countryRegionCriterion,proto3" json:"country_region_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}              `json:"-"`
+	XXX_unrecognized       []byte                `json:"-"`
+	XXX_sizecache          int32                 `json:"-"`
+}
+
+func (m *HotelCountryRegionInfo) Reset()         { *m = HotelCountryRegionInfo{} }
+func (m *HotelCountryRegionInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelCountryRegionInfo) ProtoMessage()    {}
+func (*HotelCountryRegionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{11}
+}
+func (m *HotelCountryRegionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelCountryRegionInfo.Unmarshal(m, b)
+}
+func (m *HotelCountryRegionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelCountryRegionInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelCountryRegionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelCountryRegionInfo.Merge(dst, src)
+}
+func (m *HotelCountryRegionInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelCountryRegionInfo.Size(m)
+}
+func (m *HotelCountryRegionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelCountryRegionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelCountryRegionInfo proto.InternalMessageInfo
+
+func (m *HotelCountryRegionInfo) GetCountryRegionCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryRegionCriterion
+	}
+	return nil
+}
+
+// State the hotel is located in.
+type HotelStateInfo struct {
+	// The Geo Target Constant resource name.
+	StateCriterion       *wrappers.StringValue `protobuf:"bytes,1,opt,name=state_criterion,json=stateCriterion,proto3" json:"state_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *HotelStateInfo) Reset()         { *m = HotelStateInfo{} }
+func (m *HotelStateInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelStateInfo) ProtoMessage()    {}
+func (*HotelStateInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{12}
+}
+func (m *HotelStateInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelStateInfo.Unmarshal(m, b)
+}
+func (m *HotelStateInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelStateInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelStateInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelStateInfo.Merge(dst, src)
+}
+func (m *HotelStateInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelStateInfo.Size(m)
+}
+func (m *HotelStateInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelStateInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelStateInfo proto.InternalMessageInfo
+
+func (m *HotelStateInfo) GetStateCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.StateCriterion
+	}
+	return nil
+}
+
+// City the hotel is located in.
+type HotelCityInfo struct {
+	// The Geo Target Constant resource name.
+	CityCriterion        *wrappers.StringValue `protobuf:"bytes,1,opt,name=city_criterion,json=cityCriterion,proto3" json:"city_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *HotelCityInfo) Reset()         { *m = HotelCityInfo{} }
+func (m *HotelCityInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelCityInfo) ProtoMessage()    {}
+func (*HotelCityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{13}
+}
+func (m *HotelCityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelCityInfo.Unmarshal(m, b)
+}
+func (m *HotelCityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelCityInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelCityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelCityInfo.Merge(dst, src)
+}
+func (m *HotelCityInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelCityInfo.Size(m)
+}
+func (m *HotelCityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelCityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelCityInfo proto.InternalMessageInfo
+
+func (m *HotelCityInfo) GetCityCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CityCriterion
+	}
+	return nil
+}
+
+// Listing custom attribute.
+type ListingCustomAttributeInfo struct {
+	// String value of the listing custom attribute.
+	Value *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	// Indicates the index of the custom attribute.
+	Index                enums.ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex `protobuf:"varint,2,opt,name=index,proto3,enum=google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex" json:"index,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                            `json:"-"`
+	XXX_sizecache        int32                                                             `json:"-"`
+}
+
+func (m *ListingCustomAttributeInfo) Reset()         { *m = ListingCustomAttributeInfo{} }
+func (m *ListingCustomAttributeInfo) String() string { return proto.CompactTextString(m) }
+func (*ListingCustomAttributeInfo) ProtoMessage()    {}
+func (*ListingCustomAttributeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{14}
+}
+func (m *ListingCustomAttributeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingCustomAttributeInfo.Unmarshal(m, b)
+}
+func (m *ListingCustomAttributeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingCustomAttributeInfo.Marshal(b, m, deterministic)
+}
+func (dst *ListingCustomAttributeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingCustomAttributeInfo.Merge(dst, src)
+}
+func (m *ListingCustomAttributeInfo) XXX_Size() int {
+	return xxx_messageInfo_ListingCustomAttributeInfo.Size(m)
+}
+func (m *ListingCustomAttributeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingCustomAttributeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingCustomAttributeInfo proto.InternalMessageInfo
+
+func (m *ListingCustomAttributeInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *ListingCustomAttributeInfo) GetIndex() enums.ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex {
+	if m != nil {
+		return m.Index
+	}
+	return enums.ListingCustomAttributeIndexEnum_UNSPECIFIED
+}
+
+// Locality of a product offer.
+type ProductChannelInfo struct {
+	// Value of the locality.
+	Channel              enums.ProductChannelEnum_ProductChannel `protobuf:"varint,1,opt,name=channel,proto3,enum=google.ads.googleads.v0.enums.ProductChannelEnum_ProductChannel" json:"channel,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *ProductChannelInfo) Reset()         { *m = ProductChannelInfo{} }
+func (m *ProductChannelInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelInfo) ProtoMessage()    {}
+func (*ProductChannelInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{15}
+}
+func (m *ProductChannelInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelInfo.Unmarshal(m, b)
+}
+func (m *ProductChannelInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelInfo.Marshal(b, m, deterministic)
+}
+func (dst *ProductChannelInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelInfo.Merge(dst, src)
+}
+func (m *ProductChannelInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelInfo.Size(m)
+}
+func (m *ProductChannelInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelInfo proto.InternalMessageInfo
+
+func (m *ProductChannelInfo) GetChannel() enums.ProductChannelEnum_ProductChannel {
+	if m != nil {
+		return m.Channel
+	}
+	return enums.ProductChannelEnum_UNSPECIFIED
+}
+
+// Availability of a product offer.
+type ProductChannelExclusivityInfo struct {
+	// Value of the availability.
+	ChannelExclusivity   enums.ProductChannelExclusivityEnum_ProductChannelExclusivity `protobuf:"varint,1,opt,name=channel_exclusivity,json=channelExclusivity,proto3,enum=google.ads.googleads.v0.enums.ProductChannelExclusivityEnum_ProductChannelExclusivity" json:"channel_exclusivity,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                      `json:"-"`
+	XXX_unrecognized     []byte                                                        `json:"-"`
+	XXX_sizecache        int32                                                         `json:"-"`
+}
+
+func (m *ProductChannelExclusivityInfo) Reset()         { *m = ProductChannelExclusivityInfo{} }
+func (m *ProductChannelExclusivityInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelExclusivityInfo) ProtoMessage()    {}
+func (*ProductChannelExclusivityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{16}
+}
+func (m *ProductChannelExclusivityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelExclusivityInfo.Unmarshal(m, b)
+}
+func (m *ProductChannelExclusivityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelExclusivityInfo.Marshal(b, m, deterministic)
+}
+func (dst *ProductChannelExclusivityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelExclusivityInfo.Merge(dst, src)
+}
+func (m *ProductChannelExclusivityInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelExclusivityInfo.Size(m)
+}
+func (m *ProductChannelExclusivityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelExclusivityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelExclusivityInfo proto.InternalMessageInfo
+
+func (m *ProductChannelExclusivityInfo) GetChannelExclusivity() enums.ProductChannelExclusivityEnum_ProductChannelExclusivity {
+	if m != nil {
+		return m.ChannelExclusivity
+	}
+	return enums.ProductChannelExclusivityEnum_UNSPECIFIED
+}
+
+// Condition of a product offer.
+type ProductConditionInfo struct {
+	// Value of the condition.
+	Condition            enums.ProductConditionEnum_ProductCondition `protobuf:"varint,1,opt,name=condition,proto3,enum=google.ads.googleads.v0.enums.ProductConditionEnum_ProductCondition" json:"condition,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *ProductConditionInfo) Reset()         { *m = ProductConditionInfo{} }
+func (m *ProductConditionInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductConditionInfo) ProtoMessage()    {}
+func (*ProductConditionInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{17}
+}
+func (m *ProductConditionInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductConditionInfo.Unmarshal(m, b)
+}
+func (m *ProductConditionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductConditionInfo.Marshal(b, m, deterministic)
+}
+func (dst *ProductConditionInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductConditionInfo.Merge(dst, src)
+}
+func (m *ProductConditionInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductConditionInfo.Size(m)
+}
+func (m *ProductConditionInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductConditionInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductConditionInfo proto.InternalMessageInfo
+
+func (m *ProductConditionInfo) GetCondition() enums.ProductConditionEnum_ProductCondition {
+	if m != nil {
+		return m.Condition
+	}
+	return enums.ProductConditionEnum_UNSPECIFIED
+}
+
+// Id of a product offer.
+type ProductOfferIdInfo struct {
+	// Value of the id.
+	Value                *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ProductOfferIdInfo) Reset()         { *m = ProductOfferIdInfo{} }
+func (m *ProductOfferIdInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductOfferIdInfo) ProtoMessage()    {}
+func (*ProductOfferIdInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{18}
+}
+func (m *ProductOfferIdInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductOfferIdInfo.Unmarshal(m, b)
+}
+func (m *ProductOfferIdInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductOfferIdInfo.Marshal(b, m, deterministic)
+}
+func (dst *ProductOfferIdInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductOfferIdInfo.Merge(dst, src)
+}
+func (m *ProductOfferIdInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductOfferIdInfo.Size(m)
+}
+func (m *ProductOfferIdInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductOfferIdInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductOfferIdInfo proto.InternalMessageInfo
+
+func (m *ProductOfferIdInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+// Type of a product offer.
+type ProductTypeInfo struct {
+	// Value of the type.
+	Value *wrappers.StringValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+	// Level of the type.
+	Level                enums.ProductTypeLevelEnum_ProductTypeLevel `protobuf:"varint,2,opt,name=level,proto3,enum=google.ads.googleads.v0.enums.ProductTypeLevelEnum_ProductTypeLevel" json:"level,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *ProductTypeInfo) Reset()         { *m = ProductTypeInfo{} }
+func (m *ProductTypeInfo) String() string { return proto.CompactTextString(m) }
+func (*ProductTypeInfo) ProtoMessage()    {}
+func (*ProductTypeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{19}
+}
+func (m *ProductTypeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductTypeInfo.Unmarshal(m, b)
+}
+func (m *ProductTypeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductTypeInfo.Marshal(b, m, deterministic)
+}
+func (dst *ProductTypeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductTypeInfo.Merge(dst, src)
+}
+func (m *ProductTypeInfo) XXX_Size() int {
+	return xxx_messageInfo_ProductTypeInfo.Size(m)
+}
+func (m *ProductTypeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductTypeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductTypeInfo proto.InternalMessageInfo
+
+func (m *ProductTypeInfo) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *ProductTypeInfo) GetLevel() enums.ProductTypeLevelEnum_ProductTypeLevel {
+	if m != nil {
+		return m.Level
+	}
+	return enums.ProductTypeLevelEnum_UNSPECIFIED
+}
+
+// Criterion for hotel date selection (default dates vs. user selected).
+type HotelDateSelectionTypeInfo struct {
+	// Type of the hotel date selection
+	Type                 enums.HotelDateSelectionTypeEnum_HotelDateSelectionType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.HotelDateSelectionTypeEnum_HotelDateSelectionType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                `json:"-"`
+	XXX_unrecognized     []byte                                                  `json:"-"`
+	XXX_sizecache        int32                                                   `json:"-"`
+}
+
+func (m *HotelDateSelectionTypeInfo) Reset()         { *m = HotelDateSelectionTypeInfo{} }
+func (m *HotelDateSelectionTypeInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelDateSelectionTypeInfo) ProtoMessage()    {}
+func (*HotelDateSelectionTypeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{20}
+}
+func (m *HotelDateSelectionTypeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelDateSelectionTypeInfo.Unmarshal(m, b)
+}
+func (m *HotelDateSelectionTypeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelDateSelectionTypeInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelDateSelectionTypeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelDateSelectionTypeInfo.Merge(dst, src)
+}
+func (m *HotelDateSelectionTypeInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelDateSelectionTypeInfo.Size(m)
+}
+func (m *HotelDateSelectionTypeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelDateSelectionTypeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelDateSelectionTypeInfo proto.InternalMessageInfo
+
+func (m *HotelDateSelectionTypeInfo) GetType() enums.HotelDateSelectionTypeEnum_HotelDateSelectionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.HotelDateSelectionTypeEnum_UNSPECIFIED
+}
+
+// Criterion for number of days prior to the stay the booking is being made.
+type HotelAdvanceBookingWindowInfo struct {
+	// Low end of the number of days prior to the stay.
+	MinDays *wrappers.Int64Value `protobuf:"bytes,1,opt,name=min_days,json=minDays,proto3" json:"min_days,omitempty"`
+	// High end of the number of days prior to the stay.
+	MaxDays              *wrappers.Int64Value `protobuf:"bytes,2,opt,name=max_days,json=maxDays,proto3" json:"max_days,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *HotelAdvanceBookingWindowInfo) Reset()         { *m = HotelAdvanceBookingWindowInfo{} }
+func (m *HotelAdvanceBookingWindowInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelAdvanceBookingWindowInfo) ProtoMessage()    {}
+func (*HotelAdvanceBookingWindowInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{21}
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelAdvanceBookingWindowInfo.Unmarshal(m, b)
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelAdvanceBookingWindowInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelAdvanceBookingWindowInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelAdvanceBookingWindowInfo.Merge(dst, src)
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelAdvanceBookingWindowInfo.Size(m)
+}
+func (m *HotelAdvanceBookingWindowInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelAdvanceBookingWindowInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelAdvanceBookingWindowInfo proto.InternalMessageInfo
+
+func (m *HotelAdvanceBookingWindowInfo) GetMinDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.MinDays
+	}
+	return nil
+}
+
+func (m *HotelAdvanceBookingWindowInfo) GetMaxDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.MaxDays
+	}
+	return nil
+}
+
+// Criterion for length of hotel stay in nights.
+type HotelLengthOfStayInfo struct {
+	// Low end of the number of nights in the stay.
+	MinNights *wrappers.Int64Value `protobuf:"bytes,1,opt,name=min_nights,json=minNights,proto3" json:"min_nights,omitempty"`
+	// High end of the number of nights in the stay.
+	MaxNights            *wrappers.Int64Value `protobuf:"bytes,2,opt,name=max_nights,json=maxNights,proto3" json:"max_nights,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *HotelLengthOfStayInfo) Reset()         { *m = HotelLengthOfStayInfo{} }
+func (m *HotelLengthOfStayInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelLengthOfStayInfo) ProtoMessage()    {}
+func (*HotelLengthOfStayInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{22}
+}
+func (m *HotelLengthOfStayInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelLengthOfStayInfo.Unmarshal(m, b)
+}
+func (m *HotelLengthOfStayInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelLengthOfStayInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelLengthOfStayInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelLengthOfStayInfo.Merge(dst, src)
+}
+func (m *HotelLengthOfStayInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelLengthOfStayInfo.Size(m)
+}
+func (m *HotelLengthOfStayInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelLengthOfStayInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelLengthOfStayInfo proto.InternalMessageInfo
+
+func (m *HotelLengthOfStayInfo) GetMinNights() *wrappers.Int64Value {
+	if m != nil {
+		return m.MinNights
+	}
+	return nil
+}
+
+func (m *HotelLengthOfStayInfo) GetMaxNights() *wrappers.Int64Value {
+	if m != nil {
+		return m.MaxNights
+	}
+	return nil
+}
+
+// Criterion for day of the week the booking is for.
+type HotelCheckInDayInfo struct {
+	// The day of the week.
+	DayOfWeek            enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,1,opt,name=day_of_week,json=dayOfWeek,proto3,enum=google.ads.googleads.v0.enums.DayOfWeekEnum_DayOfWeek" json:"day_of_week,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *HotelCheckInDayInfo) Reset()         { *m = HotelCheckInDayInfo{} }
+func (m *HotelCheckInDayInfo) String() string { return proto.CompactTextString(m) }
+func (*HotelCheckInDayInfo) ProtoMessage()    {}
+func (*HotelCheckInDayInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{23}
+}
+func (m *HotelCheckInDayInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelCheckInDayInfo.Unmarshal(m, b)
+}
+func (m *HotelCheckInDayInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelCheckInDayInfo.Marshal(b, m, deterministic)
+}
+func (dst *HotelCheckInDayInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelCheckInDayInfo.Merge(dst, src)
+}
+func (m *HotelCheckInDayInfo) XXX_Size() int {
+	return xxx_messageInfo_HotelCheckInDayInfo.Size(m)
+}
+func (m *HotelCheckInDayInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelCheckInDayInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelCheckInDayInfo proto.InternalMessageInfo
+
+func (m *HotelCheckInDayInfo) GetDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.DayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+// Criterion for Interaction Type.
+type InteractionTypeInfo struct {
+	// The interaction type.
+	Type                 enums.InteractionTypeEnum_InteractionType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.InteractionTypeEnum_InteractionType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *InteractionTypeInfo) Reset()         { *m = InteractionTypeInfo{} }
+func (m *InteractionTypeInfo) String() string { return proto.CompactTextString(m) }
+func (*InteractionTypeInfo) ProtoMessage()    {}
+func (*InteractionTypeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{24}
+}
+func (m *InteractionTypeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InteractionTypeInfo.Unmarshal(m, b)
+}
+func (m *InteractionTypeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InteractionTypeInfo.Marshal(b, m, deterministic)
+}
+func (dst *InteractionTypeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InteractionTypeInfo.Merge(dst, src)
+}
+func (m *InteractionTypeInfo) XXX_Size() int {
+	return xxx_messageInfo_InteractionTypeInfo.Size(m)
+}
+func (m *InteractionTypeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_InteractionTypeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InteractionTypeInfo proto.InternalMessageInfo
+
+func (m *InteractionTypeInfo) GetType() enums.InteractionTypeEnum_InteractionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.InteractionTypeEnum_UNSPECIFIED
+}
+
+// Represents an AdSchedule criterion.
+//
+// AdSchedule is specified as the day of the week and a time interval
+// within which ads will be shown.
+//
+// No more than six AdSchedules can be added for the same day.
+type AdScheduleInfo struct {
+	// Minutes after the start hour at which this schedule starts.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	StartMinute enums.MinuteOfHourEnum_MinuteOfHour `protobuf:"varint,1,opt,name=start_minute,json=startMinute,proto3,enum=google.ads.googleads.v0.enums.MinuteOfHourEnum_MinuteOfHour" json:"start_minute,omitempty"`
+	// Minutes after the end hour at which this schedule ends. The schedule is
+	// exclusive of the end minute.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	EndMinute enums.MinuteOfHourEnum_MinuteOfHour `protobuf:"varint,2,opt,name=end_minute,json=endMinute,proto3,enum=google.ads.googleads.v0.enums.MinuteOfHourEnum_MinuteOfHour" json:"end_minute,omitempty"`
+	// Starting hour in 24 hour time.
+	// This field must be between 0 and 23, inclusive.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	StartHour *wrappers.Int32Value `protobuf:"bytes,3,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"`
+	// Ending hour in 24 hour time; 24 signifies end of the day.
+	// This field must be between 0 and 24, inclusive.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	EndHour *wrappers.Int32Value `protobuf:"bytes,4,opt,name=end_hour,json=endHour,proto3" json:"end_hour,omitempty"`
+	// Day of the week the schedule applies to.
+	//
+	// This field is required for CREATE operations and is prohibited on UPDATE
+	// operations.
+	DayOfWeek            enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,5,opt,name=day_of_week,json=dayOfWeek,proto3,enum=google.ads.googleads.v0.enums.DayOfWeekEnum_DayOfWeek" json:"day_of_week,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *AdScheduleInfo) Reset()         { *m = AdScheduleInfo{} }
+func (m *AdScheduleInfo) String() string { return proto.CompactTextString(m) }
+func (*AdScheduleInfo) ProtoMessage()    {}
+func (*AdScheduleInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{25}
+}
+func (m *AdScheduleInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdScheduleInfo.Unmarshal(m, b)
+}
+func (m *AdScheduleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdScheduleInfo.Marshal(b, m, deterministic)
+}
+func (dst *AdScheduleInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdScheduleInfo.Merge(dst, src)
+}
+func (m *AdScheduleInfo) XXX_Size() int {
+	return xxx_messageInfo_AdScheduleInfo.Size(m)
+}
+func (m *AdScheduleInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdScheduleInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdScheduleInfo proto.InternalMessageInfo
+
+func (m *AdScheduleInfo) GetStartMinute() enums.MinuteOfHourEnum_MinuteOfHour {
+	if m != nil {
+		return m.StartMinute
+	}
+	return enums.MinuteOfHourEnum_UNSPECIFIED
+}
+
+func (m *AdScheduleInfo) GetEndMinute() enums.MinuteOfHourEnum_MinuteOfHour {
+	if m != nil {
+		return m.EndMinute
+	}
+	return enums.MinuteOfHourEnum_UNSPECIFIED
+}
+
+func (m *AdScheduleInfo) GetStartHour() *wrappers.Int32Value {
+	if m != nil {
+		return m.StartHour
+	}
+	return nil
+}
+
+func (m *AdScheduleInfo) GetEndHour() *wrappers.Int32Value {
+	if m != nil {
+		return m.EndHour
+	}
+	return nil
+}
+
+func (m *AdScheduleInfo) GetDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.DayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+// An age range criterion.
+type AgeRangeInfo struct {
+	// Type of the age range.
+	Type                 enums.AgeRangeTypeEnum_AgeRangeType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.AgeRangeTypeEnum_AgeRangeType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *AgeRangeInfo) Reset()         { *m = AgeRangeInfo{} }
+func (m *AgeRangeInfo) String() string { return proto.CompactTextString(m) }
+func (*AgeRangeInfo) ProtoMessage()    {}
+func (*AgeRangeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{26}
+}
+func (m *AgeRangeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AgeRangeInfo.Unmarshal(m, b)
+}
+func (m *AgeRangeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AgeRangeInfo.Marshal(b, m, deterministic)
+}
+func (dst *AgeRangeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AgeRangeInfo.Merge(dst, src)
+}
+func (m *AgeRangeInfo) XXX_Size() int {
+	return xxx_messageInfo_AgeRangeInfo.Size(m)
+}
+func (m *AgeRangeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AgeRangeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AgeRangeInfo proto.InternalMessageInfo
+
+func (m *AgeRangeInfo) GetType() enums.AgeRangeTypeEnum_AgeRangeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AgeRangeTypeEnum_UNSPECIFIED
+}
+
+// A gender criterion.
+type GenderInfo struct {
+	// Type of the gender.
+	Type                 enums.GenderTypeEnum_GenderType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.GenderTypeEnum_GenderType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *GenderInfo) Reset()         { *m = GenderInfo{} }
+func (m *GenderInfo) String() string { return proto.CompactTextString(m) }
+func (*GenderInfo) ProtoMessage()    {}
+func (*GenderInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{27}
+}
+func (m *GenderInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenderInfo.Unmarshal(m, b)
+}
+func (m *GenderInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenderInfo.Marshal(b, m, deterministic)
+}
+func (dst *GenderInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenderInfo.Merge(dst, src)
+}
+func (m *GenderInfo) XXX_Size() int {
+	return xxx_messageInfo_GenderInfo.Size(m)
+}
+func (m *GenderInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenderInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenderInfo proto.InternalMessageInfo
+
+func (m *GenderInfo) GetType() enums.GenderTypeEnum_GenderType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.GenderTypeEnum_UNSPECIFIED
+}
+
+// An income range criterion.
+type IncomeRangeInfo struct {
+	// Type of the income range.
+	Type                 enums.IncomeRangeTypeEnum_IncomeRangeType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.IncomeRangeTypeEnum_IncomeRangeType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *IncomeRangeInfo) Reset()         { *m = IncomeRangeInfo{} }
+func (m *IncomeRangeInfo) String() string { return proto.CompactTextString(m) }
+func (*IncomeRangeInfo) ProtoMessage()    {}
+func (*IncomeRangeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{28}
+}
+func (m *IncomeRangeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IncomeRangeInfo.Unmarshal(m, b)
+}
+func (m *IncomeRangeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IncomeRangeInfo.Marshal(b, m, deterministic)
+}
+func (dst *IncomeRangeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IncomeRangeInfo.Merge(dst, src)
+}
+func (m *IncomeRangeInfo) XXX_Size() int {
+	return xxx_messageInfo_IncomeRangeInfo.Size(m)
+}
+func (m *IncomeRangeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_IncomeRangeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IncomeRangeInfo proto.InternalMessageInfo
+
+func (m *IncomeRangeInfo) GetType() enums.IncomeRangeTypeEnum_IncomeRangeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.IncomeRangeTypeEnum_UNSPECIFIED
+}
+
+// A parental status criterion.
+type ParentalStatusInfo struct {
+	// Type of the parental status.
+	Type                 enums.ParentalStatusTypeEnum_ParentalStatusType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.ParentalStatusTypeEnum_ParentalStatusType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
+	XXX_unrecognized     []byte                                          `json:"-"`
+	XXX_sizecache        int32                                           `json:"-"`
+}
+
+func (m *ParentalStatusInfo) Reset()         { *m = ParentalStatusInfo{} }
+func (m *ParentalStatusInfo) String() string { return proto.CompactTextString(m) }
+func (*ParentalStatusInfo) ProtoMessage()    {}
+func (*ParentalStatusInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{29}
+}
+func (m *ParentalStatusInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParentalStatusInfo.Unmarshal(m, b)
+}
+func (m *ParentalStatusInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParentalStatusInfo.Marshal(b, m, deterministic)
+}
+func (dst *ParentalStatusInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParentalStatusInfo.Merge(dst, src)
+}
+func (m *ParentalStatusInfo) XXX_Size() int {
+	return xxx_messageInfo_ParentalStatusInfo.Size(m)
+}
+func (m *ParentalStatusInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParentalStatusInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParentalStatusInfo proto.InternalMessageInfo
+
+func (m *ParentalStatusInfo) GetType() enums.ParentalStatusTypeEnum_ParentalStatusType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ParentalStatusTypeEnum_UNSPECIFIED
+}
+
+// A YouTube Video criterion.
+type YouTubeVideoInfo struct {
+	// YouTube video id as it appears on the YouTube watch page.
+	VideoId              *wrappers.StringValue `protobuf:"bytes,1,opt,name=video_id,json=videoId,proto3" json:"video_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *YouTubeVideoInfo) Reset()         { *m = YouTubeVideoInfo{} }
+func (m *YouTubeVideoInfo) String() string { return proto.CompactTextString(m) }
+func (*YouTubeVideoInfo) ProtoMessage()    {}
+func (*YouTubeVideoInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{30}
+}
+func (m *YouTubeVideoInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_YouTubeVideoInfo.Unmarshal(m, b)
+}
+func (m *YouTubeVideoInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_YouTubeVideoInfo.Marshal(b, m, deterministic)
+}
+func (dst *YouTubeVideoInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_YouTubeVideoInfo.Merge(dst, src)
+}
+func (m *YouTubeVideoInfo) XXX_Size() int {
+	return xxx_messageInfo_YouTubeVideoInfo.Size(m)
+}
+func (m *YouTubeVideoInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_YouTubeVideoInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_YouTubeVideoInfo proto.InternalMessageInfo
+
+func (m *YouTubeVideoInfo) GetVideoId() *wrappers.StringValue {
+	if m != nil {
+		return m.VideoId
+	}
+	return nil
+}
+
+// A YouTube Channel criterion.
+type YouTubeChannelInfo struct {
+	// The YouTube uploader channel id or the channel code of a YouTube channel.
+	ChannelId            *wrappers.StringValue `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *YouTubeChannelInfo) Reset()         { *m = YouTubeChannelInfo{} }
+func (m *YouTubeChannelInfo) String() string { return proto.CompactTextString(m) }
+func (*YouTubeChannelInfo) ProtoMessage()    {}
+func (*YouTubeChannelInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{31}
+}
+func (m *YouTubeChannelInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_YouTubeChannelInfo.Unmarshal(m, b)
+}
+func (m *YouTubeChannelInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_YouTubeChannelInfo.Marshal(b, m, deterministic)
+}
+func (dst *YouTubeChannelInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_YouTubeChannelInfo.Merge(dst, src)
+}
+func (m *YouTubeChannelInfo) XXX_Size() int {
+	return xxx_messageInfo_YouTubeChannelInfo.Size(m)
+}
+func (m *YouTubeChannelInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_YouTubeChannelInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_YouTubeChannelInfo proto.InternalMessageInfo
+
+func (m *YouTubeChannelInfo) GetChannelId() *wrappers.StringValue {
+	if m != nil {
+		return m.ChannelId
+	}
+	return nil
+}
+
+// A User List criterion. Represents a user list that is defined by the
+// advertiser to be targeted.
+type UserListInfo struct {
+	// The User List resource name.
+	UserList             *wrappers.StringValue `protobuf:"bytes,1,opt,name=user_list,json=userList,proto3" json:"user_list,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UserListInfo) Reset()         { *m = UserListInfo{} }
+func (m *UserListInfo) String() string { return proto.CompactTextString(m) }
+func (*UserListInfo) ProtoMessage()    {}
+func (*UserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{32}
+}
+func (m *UserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListInfo.Unmarshal(m, b)
+}
+func (m *UserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListInfo.Marshal(b, m, deterministic)
+}
+func (dst *UserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListInfo.Merge(dst, src)
+}
+func (m *UserListInfo) XXX_Size() int {
+	return xxx_messageInfo_UserListInfo.Size(m)
+}
+func (m *UserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListInfo proto.InternalMessageInfo
+
+func (m *UserListInfo) GetUserList() *wrappers.StringValue {
+	if m != nil {
+		return m.UserList
+	}
+	return nil
+}
+
+// A Proximity criterion. The geo point and radius determine what geographical
+// area is included. The address is a description of the geo point that does
+// not affect ad serving.
+//
+// There are two ways to create a proximity. First, by setting an address
+// and radius. The geo point will be automatically computed. Second, by
+// setting a geo point and radius. The address is an optional label that won't
+// be validated.
+type ProximityInfo struct {
+	// Latitude and longitude.
+	GeoPoint *GeoPointInfo `protobuf:"bytes,1,opt,name=geo_point,json=geoPoint,proto3" json:"geo_point,omitempty"`
+	// The radius of the proximity.
+	Radius *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=radius,proto3" json:"radius,omitempty"`
+	// The unit of measurement of the radius. Default is KILOMETERS.
+	RadiusUnits enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits `protobuf:"varint,3,opt,name=radius_units,json=radiusUnits,proto3,enum=google.ads.googleads.v0.enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits" json:"radius_units,omitempty"`
+	// Full address.
+	Address              *AddressInfo `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *ProximityInfo) Reset()         { *m = ProximityInfo{} }
+func (m *ProximityInfo) String() string { return proto.CompactTextString(m) }
+func (*ProximityInfo) ProtoMessage()    {}
+func (*ProximityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{33}
+}
+func (m *ProximityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProximityInfo.Unmarshal(m, b)
+}
+func (m *ProximityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProximityInfo.Marshal(b, m, deterministic)
+}
+func (dst *ProximityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProximityInfo.Merge(dst, src)
+}
+func (m *ProximityInfo) XXX_Size() int {
+	return xxx_messageInfo_ProximityInfo.Size(m)
+}
+func (m *ProximityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProximityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProximityInfo proto.InternalMessageInfo
+
+func (m *ProximityInfo) GetGeoPoint() *GeoPointInfo {
+	if m != nil {
+		return m.GeoPoint
+	}
+	return nil
+}
+
+func (m *ProximityInfo) GetRadius() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Radius
+	}
+	return nil
+}
+
+func (m *ProximityInfo) GetRadiusUnits() enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits {
+	if m != nil {
+		return m.RadiusUnits
+	}
+	return enums.ProximityRadiusUnitsEnum_UNSPECIFIED
+}
+
+func (m *ProximityInfo) GetAddress() *AddressInfo {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+// Geo point for proximity criterion.
+type GeoPointInfo struct {
+	// Micro degrees for the longitude.
+	LongitudeInMicroDegrees *wrappers.Int32Value `protobuf:"bytes,1,opt,name=longitude_in_micro_degrees,json=longitudeInMicroDegrees,proto3" json:"longitude_in_micro_degrees,omitempty"`
+	// Micro degrees for the latitude.
+	LatitudeInMicroDegrees *wrappers.Int32Value `protobuf:"bytes,2,opt,name=latitude_in_micro_degrees,json=latitudeInMicroDegrees,proto3" json:"latitude_in_micro_degrees,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}             `json:"-"`
+	XXX_unrecognized       []byte               `json:"-"`
+	XXX_sizecache          int32                `json:"-"`
+}
+
+func (m *GeoPointInfo) Reset()         { *m = GeoPointInfo{} }
+func (m *GeoPointInfo) String() string { return proto.CompactTextString(m) }
+func (*GeoPointInfo) ProtoMessage()    {}
+func (*GeoPointInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{34}
+}
+func (m *GeoPointInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoPointInfo.Unmarshal(m, b)
+}
+func (m *GeoPointInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoPointInfo.Marshal(b, m, deterministic)
+}
+func (dst *GeoPointInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoPointInfo.Merge(dst, src)
+}
+func (m *GeoPointInfo) XXX_Size() int {
+	return xxx_messageInfo_GeoPointInfo.Size(m)
+}
+func (m *GeoPointInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoPointInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoPointInfo proto.InternalMessageInfo
+
+func (m *GeoPointInfo) GetLongitudeInMicroDegrees() *wrappers.Int32Value {
+	if m != nil {
+		return m.LongitudeInMicroDegrees
+	}
+	return nil
+}
+
+func (m *GeoPointInfo) GetLatitudeInMicroDegrees() *wrappers.Int32Value {
+	if m != nil {
+		return m.LatitudeInMicroDegrees
+	}
+	return nil
+}
+
+// Address for proximity criterion.
+type AddressInfo struct {
+	// Postal code.
+	PostalCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
+	// Province or state code.
+	ProvinceCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=province_code,json=provinceCode,proto3" json:"province_code,omitempty"`
+	// Country code.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,3,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Province or state name.
+	ProvinceName *wrappers.StringValue `protobuf:"bytes,4,opt,name=province_name,json=provinceName,proto3" json:"province_name,omitempty"`
+	// Street address line 1.
+	StreetAddress *wrappers.StringValue `protobuf:"bytes,5,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"`
+	// Street address line 2. This field is write-only. It is only used for
+	// calculating the longitude and latitude of an address when geo_point is
+	// empty.
+	StreetAddress2 *wrappers.StringValue `protobuf:"bytes,6,opt,name=street_address2,json=streetAddress2,proto3" json:"street_address2,omitempty"`
+	// Name of the city.
+	CityName             *wrappers.StringValue `protobuf:"bytes,7,opt,name=city_name,json=cityName,proto3" json:"city_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AddressInfo) Reset()         { *m = AddressInfo{} }
+func (m *AddressInfo) String() string { return proto.CompactTextString(m) }
+func (*AddressInfo) ProtoMessage()    {}
+func (*AddressInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{35}
+}
+func (m *AddressInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AddressInfo.Unmarshal(m, b)
+}
+func (m *AddressInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AddressInfo.Marshal(b, m, deterministic)
+}
+func (dst *AddressInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AddressInfo.Merge(dst, src)
+}
+func (m *AddressInfo) XXX_Size() int {
+	return xxx_messageInfo_AddressInfo.Size(m)
+}
+func (m *AddressInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AddressInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddressInfo proto.InternalMessageInfo
+
+func (m *AddressInfo) GetPostalCode() *wrappers.StringValue {
+	if m != nil {
+		return m.PostalCode
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetProvinceCode() *wrappers.StringValue {
+	if m != nil {
+		return m.ProvinceCode
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetProvinceName() *wrappers.StringValue {
+	if m != nil {
+		return m.ProvinceName
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetStreetAddress() *wrappers.StringValue {
+	if m != nil {
+		return m.StreetAddress
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetStreetAddress2() *wrappers.StringValue {
+	if m != nil {
+		return m.StreetAddress2
+	}
+	return nil
+}
+
+func (m *AddressInfo) GetCityName() *wrappers.StringValue {
+	if m != nil {
+		return m.CityName
+	}
+	return nil
+}
+
+// A topic criterion. Use topics to target or exclude placements in the
+// Google Display Network based on the category into which the placement falls
+// (for example, "Pets & Animals/Pets/Dogs").
+type TopicInfo struct {
+	// The Topic Constant resource name.
+	TopicConstant *wrappers.StringValue `protobuf:"bytes,1,opt,name=topic_constant,json=topicConstant,proto3" json:"topic_constant,omitempty"`
+	// The category to target or exclude. Each subsequent element in the array
+	// describes a more specific sub-category. For example,
+	// "Pets & Animals", "Pets", "Dogs" represents the "Pets & Animals/Pets/Dogs"
+	// category.
+	Path                 []*wrappers.StringValue `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *TopicInfo) Reset()         { *m = TopicInfo{} }
+func (m *TopicInfo) String() string { return proto.CompactTextString(m) }
+func (*TopicInfo) ProtoMessage()    {}
+func (*TopicInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{36}
+}
+func (m *TopicInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TopicInfo.Unmarshal(m, b)
+}
+func (m *TopicInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TopicInfo.Marshal(b, m, deterministic)
+}
+func (dst *TopicInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TopicInfo.Merge(dst, src)
+}
+func (m *TopicInfo) XXX_Size() int {
+	return xxx_messageInfo_TopicInfo.Size(m)
+}
+func (m *TopicInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_TopicInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TopicInfo proto.InternalMessageInfo
+
+func (m *TopicInfo) GetTopicConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.TopicConstant
+	}
+	return nil
+}
+
+func (m *TopicInfo) GetPath() []*wrappers.StringValue {
+	if m != nil {
+		return m.Path
+	}
+	return nil
+}
+
+// A language criterion.
+type LanguageInfo struct {
+	// The language constant resource name.
+	LanguageConstant     *wrappers.StringValue `protobuf:"bytes,1,opt,name=language_constant,json=languageConstant,proto3" json:"language_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LanguageInfo) Reset()         { *m = LanguageInfo{} }
+func (m *LanguageInfo) String() string { return proto.CompactTextString(m) }
+func (*LanguageInfo) ProtoMessage()    {}
+func (*LanguageInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{37}
+}
+func (m *LanguageInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LanguageInfo.Unmarshal(m, b)
+}
+func (m *LanguageInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LanguageInfo.Marshal(b, m, deterministic)
+}
+func (dst *LanguageInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LanguageInfo.Merge(dst, src)
+}
+func (m *LanguageInfo) XXX_Size() int {
+	return xxx_messageInfo_LanguageInfo.Size(m)
+}
+func (m *LanguageInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_LanguageInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LanguageInfo proto.InternalMessageInfo
+
+func (m *LanguageInfo) GetLanguageConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageConstant
+	}
+	return nil
+}
+
+// An IpBlock criterion used for IP exclusions. We allow:
+//  - IPv4 and IPv6 addresses
+//  - individual addresses (192.168.0.1)
+//  - masks for individual addresses (192.168.0.1/32)
+//  - masks for Class C networks (192.168.0.1/24)
+type IpBlockInfo struct {
+	// The IP address of this IP block.
+	IpAddress            *wrappers.StringValue `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *IpBlockInfo) Reset()         { *m = IpBlockInfo{} }
+func (m *IpBlockInfo) String() string { return proto.CompactTextString(m) }
+func (*IpBlockInfo) ProtoMessage()    {}
+func (*IpBlockInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{38}
+}
+func (m *IpBlockInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IpBlockInfo.Unmarshal(m, b)
+}
+func (m *IpBlockInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IpBlockInfo.Marshal(b, m, deterministic)
+}
+func (dst *IpBlockInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IpBlockInfo.Merge(dst, src)
+}
+func (m *IpBlockInfo) XXX_Size() int {
+	return xxx_messageInfo_IpBlockInfo.Size(m)
+}
+func (m *IpBlockInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_IpBlockInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IpBlockInfo proto.InternalMessageInfo
+
+func (m *IpBlockInfo) GetIpAddress() *wrappers.StringValue {
+	if m != nil {
+		return m.IpAddress
+	}
+	return nil
+}
+
+// Content Label for category exclusion.
+type ContentLabelInfo struct {
+	// Content label type, required for CREATE operations.
+	Type                 enums.ContentLabelTypeEnum_ContentLabelType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.ContentLabelTypeEnum_ContentLabelType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *ContentLabelInfo) Reset()         { *m = ContentLabelInfo{} }
+func (m *ContentLabelInfo) String() string { return proto.CompactTextString(m) }
+func (*ContentLabelInfo) ProtoMessage()    {}
+func (*ContentLabelInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{39}
+}
+func (m *ContentLabelInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ContentLabelInfo.Unmarshal(m, b)
+}
+func (m *ContentLabelInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ContentLabelInfo.Marshal(b, m, deterministic)
+}
+func (dst *ContentLabelInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ContentLabelInfo.Merge(dst, src)
+}
+func (m *ContentLabelInfo) XXX_Size() int {
+	return xxx_messageInfo_ContentLabelInfo.Size(m)
+}
+func (m *ContentLabelInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ContentLabelInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ContentLabelInfo proto.InternalMessageInfo
+
+func (m *ContentLabelInfo) GetType() enums.ContentLabelTypeEnum_ContentLabelType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ContentLabelTypeEnum_UNSPECIFIED
+}
+
+// Represents a Carrier Criterion.
+type CarrierInfo struct {
+	// The Carrier constant resource name.
+	CarrierConstant      *wrappers.StringValue `protobuf:"bytes,1,opt,name=carrier_constant,json=carrierConstant,proto3" json:"carrier_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CarrierInfo) Reset()         { *m = CarrierInfo{} }
+func (m *CarrierInfo) String() string { return proto.CompactTextString(m) }
+func (*CarrierInfo) ProtoMessage()    {}
+func (*CarrierInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{40}
+}
+func (m *CarrierInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CarrierInfo.Unmarshal(m, b)
+}
+func (m *CarrierInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CarrierInfo.Marshal(b, m, deterministic)
+}
+func (dst *CarrierInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CarrierInfo.Merge(dst, src)
+}
+func (m *CarrierInfo) XXX_Size() int {
+	return xxx_messageInfo_CarrierInfo.Size(m)
+}
+func (m *CarrierInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CarrierInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CarrierInfo proto.InternalMessageInfo
+
+func (m *CarrierInfo) GetCarrierConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.CarrierConstant
+	}
+	return nil
+}
+
+// Represents a particular interest-based topic to be targeted.
+type UserInterestInfo struct {
+	// The UserInterest resource name.
+	UserInterestCategory *wrappers.StringValue `protobuf:"bytes,1,opt,name=user_interest_category,json=userInterestCategory,proto3" json:"user_interest_category,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UserInterestInfo) Reset()         { *m = UserInterestInfo{} }
+func (m *UserInterestInfo) String() string { return proto.CompactTextString(m) }
+func (*UserInterestInfo) ProtoMessage()    {}
+func (*UserInterestInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criteria_9296a1565f76dc58, []int{41}
+}
+func (m *UserInterestInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInterestInfo.Unmarshal(m, b)
+}
+func (m *UserInterestInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInterestInfo.Marshal(b, m, deterministic)
+}
+func (dst *UserInterestInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInterestInfo.Merge(dst, src)
+}
+func (m *UserInterestInfo) XXX_Size() int {
+	return xxx_messageInfo_UserInterestInfo.Size(m)
+}
+func (m *UserInterestInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInterestInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInterestInfo proto.InternalMessageInfo
+
+func (m *UserInterestInfo) GetUserInterestCategory() *wrappers.StringValue {
+	if m != nil {
+		return m.UserInterestCategory
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*KeywordInfo)(nil), "google.ads.googleads.v0.common.KeywordInfo")
+	proto.RegisterType((*PlacementInfo)(nil), "google.ads.googleads.v0.common.PlacementInfo")
+	proto.RegisterType((*LocationInfo)(nil), "google.ads.googleads.v0.common.LocationInfo")
+	proto.RegisterType((*DeviceInfo)(nil), "google.ads.googleads.v0.common.DeviceInfo")
+	proto.RegisterType((*PreferredContentInfo)(nil), "google.ads.googleads.v0.common.PreferredContentInfo")
+	proto.RegisterType((*ListingGroupInfo)(nil), "google.ads.googleads.v0.common.ListingGroupInfo")
+	proto.RegisterType((*ListingScopeInfo)(nil), "google.ads.googleads.v0.common.ListingScopeInfo")
+	proto.RegisterType((*ListingDimensionInfo)(nil), "google.ads.googleads.v0.common.ListingDimensionInfo")
+	proto.RegisterType((*ListingBrandInfo)(nil), "google.ads.googleads.v0.common.ListingBrandInfo")
+	proto.RegisterType((*HotelIdInfo)(nil), "google.ads.googleads.v0.common.HotelIdInfo")
+	proto.RegisterType((*HotelClassInfo)(nil), "google.ads.googleads.v0.common.HotelClassInfo")
+	proto.RegisterType((*HotelCountryRegionInfo)(nil), "google.ads.googleads.v0.common.HotelCountryRegionInfo")
+	proto.RegisterType((*HotelStateInfo)(nil), "google.ads.googleads.v0.common.HotelStateInfo")
+	proto.RegisterType((*HotelCityInfo)(nil), "google.ads.googleads.v0.common.HotelCityInfo")
+	proto.RegisterType((*ListingCustomAttributeInfo)(nil), "google.ads.googleads.v0.common.ListingCustomAttributeInfo")
+	proto.RegisterType((*ProductChannelInfo)(nil), "google.ads.googleads.v0.common.ProductChannelInfo")
+	proto.RegisterType((*ProductChannelExclusivityInfo)(nil), "google.ads.googleads.v0.common.ProductChannelExclusivityInfo")
+	proto.RegisterType((*ProductConditionInfo)(nil), "google.ads.googleads.v0.common.ProductConditionInfo")
+	proto.RegisterType((*ProductOfferIdInfo)(nil), "google.ads.googleads.v0.common.ProductOfferIdInfo")
+	proto.RegisterType((*ProductTypeInfo)(nil), "google.ads.googleads.v0.common.ProductTypeInfo")
+	proto.RegisterType((*HotelDateSelectionTypeInfo)(nil), "google.ads.googleads.v0.common.HotelDateSelectionTypeInfo")
+	proto.RegisterType((*HotelAdvanceBookingWindowInfo)(nil), "google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo")
+	proto.RegisterType((*HotelLengthOfStayInfo)(nil), "google.ads.googleads.v0.common.HotelLengthOfStayInfo")
+	proto.RegisterType((*HotelCheckInDayInfo)(nil), "google.ads.googleads.v0.common.HotelCheckInDayInfo")
+	proto.RegisterType((*InteractionTypeInfo)(nil), "google.ads.googleads.v0.common.InteractionTypeInfo")
+	proto.RegisterType((*AdScheduleInfo)(nil), "google.ads.googleads.v0.common.AdScheduleInfo")
+	proto.RegisterType((*AgeRangeInfo)(nil), "google.ads.googleads.v0.common.AgeRangeInfo")
+	proto.RegisterType((*GenderInfo)(nil), "google.ads.googleads.v0.common.GenderInfo")
+	proto.RegisterType((*IncomeRangeInfo)(nil), "google.ads.googleads.v0.common.IncomeRangeInfo")
+	proto.RegisterType((*ParentalStatusInfo)(nil), "google.ads.googleads.v0.common.ParentalStatusInfo")
+	proto.RegisterType((*YouTubeVideoInfo)(nil), "google.ads.googleads.v0.common.YouTubeVideoInfo")
+	proto.RegisterType((*YouTubeChannelInfo)(nil), "google.ads.googleads.v0.common.YouTubeChannelInfo")
+	proto.RegisterType((*UserListInfo)(nil), "google.ads.googleads.v0.common.UserListInfo")
+	proto.RegisterType((*ProximityInfo)(nil), "google.ads.googleads.v0.common.ProximityInfo")
+	proto.RegisterType((*GeoPointInfo)(nil), "google.ads.googleads.v0.common.GeoPointInfo")
+	proto.RegisterType((*AddressInfo)(nil), "google.ads.googleads.v0.common.AddressInfo")
+	proto.RegisterType((*TopicInfo)(nil), "google.ads.googleads.v0.common.TopicInfo")
+	proto.RegisterType((*LanguageInfo)(nil), "google.ads.googleads.v0.common.LanguageInfo")
+	proto.RegisterType((*IpBlockInfo)(nil), "google.ads.googleads.v0.common.IpBlockInfo")
+	proto.RegisterType((*ContentLabelInfo)(nil), "google.ads.googleads.v0.common.ContentLabelInfo")
+	proto.RegisterType((*CarrierInfo)(nil), "google.ads.googleads.v0.common.CarrierInfo")
+	proto.RegisterType((*UserInterestInfo)(nil), "google.ads.googleads.v0.common.UserInterestInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/criteria.proto", fileDescriptor_criteria_9296a1565f76dc58)
+}
+
+var fileDescriptor_criteria_9296a1565f76dc58 = []byte{
+	// 2205 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4f, 0x73, 0x1b, 0x49,
+	0x15, 0x47, 0x72, 0xbc, 0xb6, 0x9e, 0x64, 0xc7, 0x99, 0x04, 0xa3, 0x64, 0xd9, 0xad, 0xd4, 0x9c,
+	0xb6, 0x80, 0x95, 0x8d, 0x13, 0xc2, 0x92, 0x25, 0x15, 0x64, 0x39, 0xd8, 0x62, 0x9d, 0xc4, 0x2b,
+	0x7b, 0x9d, 0xdd, 0x60, 0x98, 0x6d, 0xcf, 0xb4, 0x46, 0x4d, 0x46, 0xdd, 0x53, 0x3d, 0x3d, 0x8e,
+	0xc5, 0x85, 0x2a, 0x2e, 0x1c, 0xb9, 0xc3, 0x09, 0x8a, 0x0b, 0x7c, 0x0a, 0x0a, 0x2e, 0x14, 0x1f,
+	0x81, 0x4f, 0x43, 0xf5, 0xbf, 0xd1, 0xc8, 0x92, 0x35, 0xa3, 0xd4, 0x9e, 0xac, 0x79, 0xf3, 0x7e,
+	0xbf, 0xf7, 0xfa, 0xcf, 0xfc, 0x5e, 0xf7, 0x33, 0x7c, 0x1c, 0x32, 0x16, 0x46, 0x78, 0x0b, 0x05,
+	0xc9, 0x96, 0xfe, 0x29, 0x7f, 0x5d, 0x6c, 0x6f, 0xf9, 0x6c, 0x38, 0x64, 0x74, 0xcb, 0xe7, 0x44,
+	0x60, 0x4e, 0x50, 0x2b, 0xe6, 0x4c, 0x30, 0xe7, 0x43, 0xed, 0xd3, 0x42, 0x41, 0xd2, 0xca, 0xdc,
+	0x5b, 0x17, 0xdb, 0x2d, 0xed, 0x7e, 0x6f, 0xe7, 0x3a, 0x3a, 0x4c, 0xd3, 0x61, 0xb2, 0x85, 0x42,
+	0xec, 0x71, 0x44, 0x43, 0xec, 0x89, 0x51, 0x8c, 0x35, 0xe7, 0xbd, 0x47, 0xf3, 0x31, 0x3e, 0xa3,
+	0x02, 0x53, 0xe1, 0x45, 0xe8, 0x1c, 0x47, 0x79, 0xdc, 0xd6, 0x7c, 0x5c, 0x80, 0x46, 0x1e, 0xeb,
+	0x7b, 0x6f, 0x31, 0x7e, 0x63, 0x00, 0xdf, 0x2b, 0x00, 0xe0, 0x0b, 0xe2, 0x97, 0x24, 0x0f, 0x31,
+	0x0d, 0x30, 0xcf, 0x67, 0xf3, 0x64, 0x3e, 0x60, 0xc0, 0x04, 0x8e, 0xbc, 0x00, 0x09, 0xec, 0x25,
+	0x38, 0xc2, 0xbe, 0x20, 0x8c, 0xe6, 0xe1, 0x3f, 0x9a, 0x0f, 0x27, 0xd4, 0x67, 0xc3, 0x19, 0x73,
+	0xf7, 0xb0, 0x08, 0x26, 0x30, 0x47, 0x53, 0xc1, 0x0a, 0x66, 0xfc, 0x0d, 0x1e, 0xbd, 0x65, 0x3c,
+	0xf0, 0x86, 0x48, 0xf8, 0x83, 0x3c, 0x6e, 0x77, 0x3e, 0x2e, 0x22, 0x89, 0x20, 0x34, 0xf4, 0xfc,
+	0x34, 0x11, 0x6c, 0xe8, 0x21, 0x21, 0x38, 0x39, 0x4f, 0x05, 0xf6, 0x08, 0x0d, 0xf0, 0x65, 0xb9,
+	0xd8, 0x96, 0x23, 0xe4, 0x2c, 0x8d, 0xf3, 0xb1, 0x0b, 0x76, 0xd6, 0x90, 0x50, 0x19, 0x89, 0xf5,
+	0xbd, 0x01, 0x4b, 0xb9, 0xc1, 0x7c, 0x32, 0x1f, 0x13, 0x23, 0x8e, 0xa9, 0x40, 0x91, 0x97, 0x08,
+	0x24, 0xd2, 0x24, 0x1f, 0xed, 0x71, 0x01, 0x92, 0xe3, 0x3e, 0xe6, 0x1c, 0x07, 0x9e, 0xdd, 0x9d,
+	0x39, 0xec, 0x83, 0x22, 0x2c, 0x0b, 0x52, 0x5f, 0x78, 0xfe, 0x00, 0x51, 0x8a, 0x23, 0x03, 0x7a,
+	0xba, 0x10, 0xc8, 0xc3, 0x97, 0x7e, 0x94, 0x26, 0xe4, 0x82, 0x88, 0x51, 0xb9, 0x0d, 0x94, 0x11,
+	0x30, 0x1a, 0x10, 0xb9, 0x1f, 0xca, 0x2d, 0x87, 0x85, 0xc9, 0xe1, 0x79, 0x11, 0xbe, 0xc8, 0xf2,
+	0x2d, 0x9c, 0x20, 0x76, 0x49, 0x86, 0x44, 0x8c, 0x3c, 0x8e, 0x02, 0x92, 0x26, 0x5e, 0x4a, 0x89,
+	0x48, 0x0c, 0xd6, 0x88, 0xc8, 0x96, 0x7a, 0x3a, 0x4f, 0xfb, 0x5b, 0x6f, 0x39, 0x8a, 0x63, 0xcc,
+	0xcd, 0x7b, 0xf7, 0x6f, 0x15, 0xa8, 0x7f, 0xa6, 0xf7, 0x60, 0x97, 0xf6, 0x99, 0xb3, 0x0d, 0x37,
+	0x04, 0xbe, 0x14, 0xcd, 0xca, 0xfd, 0xca, 0x47, 0xf5, 0x9d, 0xef, 0x1a, 0xe1, 0x69, 0x59, 0x78,
+	0xeb, 0x58, 0x70, 0x42, 0xc3, 0x53, 0x14, 0xa5, 0xb8, 0xa7, 0x3c, 0x1d, 0x1f, 0x60, 0xbc, 0x79,
+	0x9b, 0xd5, 0xfb, 0x95, 0x8f, 0xd6, 0x77, 0xf6, 0x5a, 0xd7, 0x69, 0x97, 0x4a, 0xb9, 0x65, 0x22,
+	0x3e, 0x97, 0xb8, 0x93, 0x51, 0x8c, 0x9f, 0xd1, 0x74, 0x38, 0x65, 0xec, 0xd5, 0x86, 0xf6, 0xa7,
+	0xfb, 0x14, 0xd6, 0x8e, 0x22, 0xe4, 0xe3, 0x21, 0xa6, 0x42, 0xe5, 0xd9, 0x82, 0xa5, 0x94, 0x47,
+	0xa5, 0xd2, 0x94, 0x8e, 0xee, 0x19, 0x34, 0x0e, 0x99, 0x8f, 0xe4, 0x6a, 0x28, 0xfc, 0x21, 0xdc,
+	0x0e, 0x31, 0xf3, 0x04, 0xe2, 0x21, 0x56, 0x2b, 0x95, 0x08, 0x44, 0xcb, 0x0d, 0xfb, 0x56, 0x88,
+	0xd9, 0x89, 0xc2, 0x75, 0x0c, 0xcc, 0xed, 0x01, 0xec, 0x29, 0x45, 0x53, 0xdc, 0x7b, 0x70, 0x43,
+	0xcd, 0x45, 0x45, 0xcd, 0xc5, 0x76, 0xc1, 0x5c, 0x68, 0xa0, 0x9a, 0x01, 0xfd, 0xb3, 0xa7, 0xd0,
+	0xee, 0x25, 0xdc, 0x39, 0xb2, 0x5b, 0xbf, 0xa3, 0x77, 0xbe, 0x62, 0xff, 0xda, 0xb0, 0xeb, 0x99,
+	0x3e, 0x2c, 0x60, 0xbf, 0x4a, 0x91, 0xcd, 0xf6, 0xac, 0x17, 0x26, 0xf2, 0x9f, 0xaa, 0xb0, 0x71,
+	0xa8, 0xb5, 0x61, 0x5f, 0x4a, 0x83, 0x0a, 0xfb, 0xe5, 0xc4, 0xa0, 0x8a, 0x16, 0x38, 0x0f, 0xcf,
+	0x42, 0x5e, 0x35, 0xea, 0x70, 0xce, 0x31, 0x80, 0x8f, 0x12, 0xec, 0x5d, 0xc8, 0xd9, 0x55, 0xc3,
+	0xaa, 0xef, 0x3c, 0x6c, 0xcd, 0x2f, 0x7e, 0x96, 0x6b, 0x8f, 0x0c, 0x31, 0x4d, 0xcc, 0xa2, 0xf6,
+	0x6a, 0x92, 0x47, 0x2d, 0x92, 0xf3, 0x0a, 0xee, 0x6a, 0xc9, 0xf1, 0x50, 0x60, 0x04, 0xce, 0x94,
+	0x57, 0x46, 0x9b, 0x4b, 0x25, 0x56, 0x79, 0x53, 0xc3, 0xdb, 0x81, 0x4a, 0xb7, 0x63, 0xb1, 0xee,
+	0x20, 0x9b, 0x9b, 0x63, 0x9f, 0xc5, 0x7a, 0xc1, 0x4f, 0x00, 0x02, 0x9b, 0x48, 0xd2, 0xac, 0xde,
+	0x5f, 0x7a, 0xe7, 0x11, 0xe4, 0x78, 0xdc, 0x3f, 0xd7, 0xe0, 0xce, 0x2c, 0x27, 0xe7, 0x15, 0xac,
+	0x59, 0xe9, 0x3e, 0xe7, 0x88, 0x06, 0x66, 0xd7, 0x6e, 0x97, 0x8c, 0xb8, 0x2b, 0x31, 0x92, 0xe8,
+	0xe0, 0x5b, 0xbd, 0x46, 0x94, 0xb3, 0x39, 0x07, 0xb0, 0xaa, 0x6b, 0x27, 0x09, 0xcc, 0x3a, 0x7c,
+	0xbf, 0x88, 0xf3, 0x40, 0xfa, 0x77, 0x2d, 0xdd, 0xca, 0x40, 0x3f, 0x3a, 0x9f, 0x43, 0x5d, 0x33,
+	0xf9, 0x11, 0x4a, 0x12, 0x33, 0xe1, 0xad, 0x52, 0x64, 0x1d, 0x89, 0x30, 0x7c, 0x30, 0xc8, 0x2c,
+	0xce, 0x6f, 0xe0, 0x8e, 0xa1, 0x64, 0x29, 0x15, 0x7c, 0xe4, 0x71, 0x1c, 0xca, 0xc5, 0xbc, 0xa1,
+	0xb8, 0x1f, 0x95, 0xe3, 0xd6, 0xd0, 0x9e, 0x42, 0x9a, 0x18, 0xce, 0x60, 0xea, 0xcd, 0x38, 0x7d,
+	0x59, 0xad, 0x70, 0x73, 0x79, 0x81, 0xf4, 0x8f, 0x25, 0x62, 0x22, 0x7d, 0x65, 0x71, 0x5e, 0x00,
+	0x98, 0xf4, 0x89, 0x18, 0x35, 0xdf, 0x53, 0x8c, 0x1f, 0x97, 0x4b, 0x9a, 0x88, 0x91, 0x21, 0xac,
+	0x0d, 0xac, 0xc1, 0xb9, 0x80, 0xe6, 0x75, 0x67, 0x80, 0xe6, 0x8a, 0x62, 0x7f, 0x5c, 0x72, 0x3f,
+	0x74, 0x14, 0xbc, 0x6d, 0xd1, 0x26, 0xd4, 0x66, 0x34, 0xf3, 0xad, 0xf3, 0x2b, 0xb8, 0x79, 0xa5,
+	0x40, 0x36, 0x57, 0x55, 0xb8, 0x9d, 0xa2, 0x70, 0x47, 0x1a, 0xd6, 0xd1, 0x28, 0x13, 0x66, 0x3d,
+	0x9e, 0xb0, 0x3a, 0xbf, 0x83, 0xf7, 0xe7, 0xd4, 0xdf, 0x66, 0x4d, 0x85, 0x7a, 0xb2, 0x58, 0xa8,
+	0x67, 0x63, 0x02, 0x13, 0xf5, 0x6e, 0x7c, 0x9d, 0x83, 0xe3, 0xc3, 0xad, 0xa9, 0xfa, 0xdd, 0x84,
+	0x72, 0xa2, 0x64, 0xc3, 0x5a, 0x9c, 0x89, 0xb6, 0x11, 0x5f, 0xb1, 0x3b, 0xbf, 0x06, 0x6b, 0xf3,
+	0x58, 0xbf, 0x8f, 0xb9, 0xfc, 0xe0, 0xea, 0x0b, 0xcd, 0xe2, 0x4b, 0x09, 0xcb, 0xbe, 0x3b, 0x3b,
+	0x8b, 0xc6, 0xea, 0x9c, 0x40, 0x23, 0x7f, 0x9a, 0x68, 0x36, 0x14, 0xf7, 0x56, 0x49, 0x6e, 0xa9,
+	0xcd, 0x86, 0xb8, 0x1e, 0x8f, 0x4d, 0xbb, 0x75, 0xa8, 0x65, 0xf2, 0xe4, 0xfe, 0x3c, 0xd3, 0xc1,
+	0x4c, 0x4f, 0x9c, 0x1d, 0x58, 0xd6, 0x22, 0x5e, 0xa6, 0x8c, 0x6a, 0x57, 0xb7, 0x0d, 0xf5, 0x9c,
+	0x86, 0xbc, 0x13, 0x45, 0x07, 0xd6, 0x27, 0x95, 0xc3, 0xf9, 0xe1, 0x24, 0xcb, 0xfb, 0x53, 0x2c,
+	0x5d, 0x2a, 0x1e, 0x3d, 0x9c, 0x20, 0x89, 0x61, 0x73, 0xb6, 0x44, 0x38, 0xa7, 0xd0, 0x9c, 0x94,
+	0x9c, 0x5c, 0x25, 0x29, 0x93, 0xe5, 0xa6, 0x9f, 0xa7, 0x1c, 0x57, 0x92, 0x57, 0x26, 0xed, 0x4c,
+	0x31, 0x9c, 0x67, 0x70, 0x53, 0x09, 0xce, 0x82, 0x01, 0xd6, 0x15, 0x68, 0x4c, 0x7c, 0x02, 0x6b,
+	0x13, 0xc2, 0xe1, 0x74, 0x60, 0x5d, 0xaa, 0xce, 0x82, 0xb4, 0x6b, 0x12, 0x33, 0x66, 0xfd, 0x57,
+	0x05, 0xee, 0x5d, 0xaf, 0x18, 0xef, 0xb2, 0x70, 0x4e, 0x0c, 0xcb, 0xea, 0xba, 0x62, 0xce, 0x32,
+	0xaf, 0xcb, 0x1d, 0x2a, 0xa6, 0xa2, 0x07, 0xf8, 0x32, 0x7f, 0xbe, 0x98, 0xf5, 0xbe, 0xa7, 0x03,
+	0xb9, 0x31, 0x38, 0xd3, 0x32, 0xe4, 0xbc, 0x86, 0x15, 0xab, 0x65, 0xfa, 0x78, 0xf3, 0xb3, 0xc2,
+	0x53, 0xd5, 0x84, 0x7c, 0xe8, 0xf3, 0x54, 0xde, 0xd4, 0xb3, 0x84, 0xee, 0xdf, 0x2b, 0xf0, 0xc1,
+	0x5c, 0x39, 0x72, 0xfe, 0x50, 0x81, 0xdb, 0xb3, 0xb4, 0x4e, 0xa7, 0x72, 0xba, 0x58, 0x2a, 0x63,
+	0xfc, 0x8c, 0xac, 0x72, 0x6f, 0x7b, 0x8e, 0x3f, 0x65, 0x73, 0x7f, 0x2b, 0x8f, 0x9c, 0xd3, 0x12,
+	0xe6, 0x9c, 0x43, 0x6d, 0xac, 0x85, 0xe5, 0x0e, 0x80, 0x57, 0x79, 0x26, 0xb2, 0xb1, 0xc6, 0xde,
+	0x98, 0xd6, 0x3d, 0xc8, 0x56, 0x26, 0x27, 0x6d, 0xef, 0x24, 0x07, 0x7f, 0xa9, 0xc0, 0xcd, 0x2b,
+	0x4a, 0xf6, 0x4e, 0xbb, 0xf3, 0x35, 0x2c, 0xab, 0x5b, 0x58, 0xc9, 0x3b, 0x4d, 0x2e, 0xe4, 0xa1,
+	0x84, 0xe5, 0x47, 0x9c, 0x19, 0x7b, 0x9a, 0xd2, 0xfd, 0x7d, 0x05, 0xee, 0xa9, 0x6f, 0x74, 0x0f,
+	0x09, 0x7c, 0x6c, 0x9b, 0x14, 0x59, 0xba, 0xc1, 0xc4, 0x61, 0xfb, 0xa8, 0x20, 0xf2, 0x6c, 0x22,
+	0x15, 0x7f, 0xf6, 0x2b, 0x73, 0xce, 0xff, 0x63, 0x05, 0x3e, 0x50, 0x0e, 0xed, 0xe0, 0x02, 0x51,
+	0x1f, 0xef, 0x32, 0xf6, 0x86, 0xd0, 0xf0, 0x15, 0xa1, 0x01, 0x7b, 0xab, 0xf2, 0x78, 0x04, 0xab,
+	0x43, 0x42, 0xbd, 0x00, 0x8d, 0x92, 0x32, 0x52, 0xba, 0x32, 0x24, 0x74, 0x0f, 0x8d, 0x12, 0x85,
+	0x43, 0x97, 0x1a, 0x57, 0x2d, 0x83, 0x43, 0x97, 0x12, 0x27, 0x33, 0xfa, 0xb6, 0xca, 0xe8, 0x10,
+	0xd3, 0x50, 0x0c, 0x5e, 0xf6, 0x8f, 0x05, 0xd2, 0x1f, 0xc9, 0x63, 0x00, 0x99, 0x09, 0x25, 0xe1,
+	0x40, 0x94, 0xca, 0xa5, 0x36, 0x24, 0xf4, 0x85, 0xf2, 0x56, 0x58, 0x74, 0x69, 0xb1, 0xd5, 0x32,
+	0x58, 0x74, 0xa9, 0xb1, 0xee, 0x10, 0x6e, 0x6b, 0x2d, 0x1d, 0x60, 0xff, 0x4d, 0x57, 0x8e, 0xce,
+	0xd4, 0x84, 0x7a, 0xae, 0xe7, 0x65, 0xd6, 0xe9, 0x51, 0xd1, 0x4d, 0x0f, 0x8d, 0x5e, 0xf6, 0x5f,
+	0x61, 0xfc, 0x46, 0x5f, 0xf6, 0xec, 0x53, 0xaf, 0x16, 0xd8, 0x9f, 0x32, 0x5c, 0x77, 0xdc, 0x47,
+	0xca, 0xf6, 0xc3, 0xe9, 0xc4, 0x7e, 0xd8, 0x2d, 0x88, 0x73, 0x85, 0x41, 0x45, 0xbb, 0x62, 0xb3,
+	0x37, 0xbd, 0x25, 0x58, 0x6f, 0x07, 0xc7, 0xfe, 0x00, 0x07, 0x69, 0xa4, 0x43, 0x79, 0xd0, 0x48,
+	0x04, 0xe2, 0xc2, 0xd3, 0x5d, 0x1e, 0x13, 0xf2, 0xa7, 0x05, 0x21, 0x9f, 0x2b, 0xe7, 0x97, 0xfd,
+	0x03, 0x96, 0x72, 0x15, 0x2f, 0x6f, 0xe8, 0xd5, 0x15, 0xa3, 0x36, 0x39, 0xbf, 0x04, 0xc0, 0x34,
+	0xb0, 0xf4, 0xd5, 0x6f, 0x80, 0xbe, 0x86, 0x69, 0x60, 0xc8, 0x1f, 0x03, 0xe8, 0xec, 0x07, 0x2c,
+	0xe5, 0xe6, 0xda, 0x31, 0x73, 0xa9, 0x1f, 0xec, 0x98, 0xa5, 0x56, 0xee, 0x92, 0x46, 0x6e, 0x5a,
+	0x99, 0x98, 0x42, 0xde, 0x28, 0x46, 0xae, 0x60, 0x1a, 0x28, 0xdc, 0x95, 0xbd, 0xb0, 0xfc, 0x4d,
+	0xed, 0x85, 0xaf, 0xa1, 0xd1, 0x0e, 0x71, 0x0f, 0xd1, 0x50, 0xaf, 0xcc, 0xd1, 0xc4, 0x26, 0x28,
+	0x9a, 0x32, 0x0b, 0xcd, 0x76, 0x40, 0xde, 0x60, 0x96, 0xff, 0x35, 0xc0, 0xbe, 0x6a, 0xae, 0x9a,
+	0x96, 0x48, 0x9e, 0xff, 0x93, 0x02, 0x7e, 0x0d, 0xcc, 0xd8, 0xc7, 0x8f, 0x86, 0x9b, 0xc0, 0xcd,
+	0xae, 0x6a, 0xa4, 0x8e, 0x07, 0xb0, 0xe8, 0x2e, 0xce, 0xd0, 0xb9, 0x5d, 0x3c, 0x61, 0x33, 0xa1,
+	0x38, 0x38, 0x47, 0xa6, 0xbd, 0x78, 0xac, 0xba, 0x8b, 0x2a, 0xda, 0xd9, 0x44, 0xb4, 0x83, 0x22,
+	0xf5, 0x9e, 0x20, 0x18, 0x77, 0x49, 0xa6, 0xcc, 0x26, 0xe6, 0x67, 0xb0, 0xf1, 0x15, 0x4b, 0x4f,
+	0xd2, 0x73, 0x7c, 0x4a, 0x02, 0xcc, 0x54, 0xc4, 0x1f, 0xc3, 0xea, 0x85, 0x7c, 0x90, 0xa7, 0xf9,
+	0x32, 0x75, 0x66, 0x45, 0x79, 0x77, 0x03, 0xf7, 0x73, 0x70, 0x0c, 0x59, 0xfe, 0x54, 0xf2, 0x29,
+	0x80, 0x3d, 0x16, 0x94, 0x24, 0xac, 0x19, 0xff, 0x6e, 0xe0, 0x76, 0xa1, 0xf1, 0x45, 0x82, 0xb9,
+	0x3c, 0x12, 0x29, 0xb2, 0x9f, 0x40, 0x2d, 0x4d, 0x30, 0xf7, 0xe4, 0xad, 0xae, 0x14, 0xd7, 0x6a,
+	0x6a, 0xe0, 0xee, 0x7f, 0xaa, 0xb0, 0x76, 0x64, 0x7b, 0x8c, 0x8a, 0xac, 0x0b, 0xb5, 0x10, 0x33,
+	0x2f, 0x66, 0x24, 0x6b, 0x99, 0xfd, 0xa0, 0xe8, 0x6e, 0xb1, 0x8f, 0xd9, 0x91, 0xf4, 0x57, 0x6d,
+	0x8e, 0xd5, 0xd0, 0x3c, 0x39, 0x0f, 0xe1, 0x3d, 0xdd, 0xb5, 0x34, 0xba, 0x3c, 0x9d, 0xd4, 0x1e,
+	0x4b, 0xcf, 0x23, 0xdd, 0xd5, 0xe9, 0x19, 0x5f, 0x87, 0x41, 0x23, 0xdf, 0xeb, 0x54, 0x1f, 0x7a,
+	0x99, 0x5e, 0x98, 0x19, 0x44, 0x4f, 0x61, 0xbf, 0x90, 0x50, 0x5b, 0xa5, 0xa7, 0x5e, 0xf4, 0xea,
+	0x7c, 0xfc, 0xe0, 0x3c, 0x83, 0x15, 0x14, 0x04, 0x1c, 0x27, 0x89, 0x91, 0x86, 0xc2, 0xc6, 0x48,
+	0x5b, 0xbb, 0xab, 0xe1, 0x5a, 0xac, 0xfb, 0xcf, 0x0a, 0x34, 0xf2, 0x13, 0xe1, 0x7c, 0x09, 0xf7,
+	0x22, 0x46, 0x43, 0x22, 0xd2, 0x00, 0x7b, 0x84, 0x7a, 0x43, 0xe2, 0x73, 0xe6, 0x05, 0x38, 0xe4,
+	0x18, 0xcf, 0x2d, 0x73, 0x56, 0x85, 0xbe, 0x93, 0xc1, 0xbb, 0xf4, 0xb9, 0x04, 0xef, 0x69, 0xac,
+	0x73, 0x0a, 0x77, 0x23, 0x24, 0xae, 0x21, 0xae, 0x16, 0x13, 0x6f, 0x5a, 0xf4, 0x24, 0xaf, 0xfb,
+	0xbf, 0x25, 0xa8, 0xe7, 0xc6, 0xe6, 0x3c, 0x81, 0x7a, 0xcc, 0x12, 0x81, 0x22, 0xcf, 0x67, 0x41,
+	0xb9, 0xf3, 0x15, 0x68, 0x40, 0x87, 0x05, 0xd8, 0x69, 0xc3, 0x5a, 0xcc, 0xd9, 0x05, 0xa1, 0x3e,
+	0xd6, 0x04, 0xd5, 0x12, 0x04, 0x0d, 0x0b, 0x51, 0x14, 0x4f, 0xa1, 0x61, 0xef, 0x67, 0x8a, 0xa1,
+	0x4c, 0x77, 0xaf, 0x6e, 0x10, 0x53, 0x39, 0x50, 0x34, 0xc4, 0x66, 0x89, 0x4b, 0xe6, 0xf0, 0x02,
+	0x0d, 0xb1, 0xbc, 0x61, 0x25, 0x82, 0x63, 0x2c, 0x3c, 0xbb, 0x4d, 0x96, 0xcb, 0xdc, 0xb0, 0x34,
+	0xc6, 0x4c, 0xa7, 0xbe, 0xfe, 0xe5, 0x49, 0x76, 0x4c, 0x9f, 0xa8, 0xf0, 0xfa, 0x97, 0x63, 0xd9,
+	0x91, 0x9f, 0xba, 0xba, 0xed, 0xa9, 0xa1, 0xac, 0x94, 0xf9, 0xd4, 0xa5, 0xbb, 0x1c, 0x86, 0x3c,
+	0x96, 0xd6, 0x4e, 0x58, 0x4c, 0x7c, 0x7b, 0x6d, 0x14, 0xf2, 0x61, 0xb1, 0xf6, 0xf8, 0x9a, 0xc2,
+	0xd8, 0xd6, 0xb8, 0xb3, 0x0d, 0x37, 0x62, 0x24, 0x06, 0xa6, 0x2b, 0x5a, 0xf0, 0x0f, 0x05, 0xe9,
+	0xe9, 0x7e, 0x05, 0x8d, 0x43, 0x44, 0xc3, 0x14, 0x99, 0xb2, 0xd1, 0x85, 0x5b, 0x91, 0x79, 0x5e,
+	0x2c, 0x93, 0x0d, 0x0b, 0xcb, 0xfa, 0xf4, 0xbf, 0x80, 0x7a, 0x37, 0xde, 0x8d, 0x98, 0x3c, 0xca,
+	0x69, 0x85, 0x25, 0x71, 0xb6, 0x62, 0xa5, 0x14, 0x96, 0xc4, 0x66, 0x9e, 0xdd, 0x08, 0x36, 0x4c,
+	0xeb, 0xfc, 0x10, 0x9d, 0x1b, 0xc9, 0x5e, 0xac, 0x49, 0x9e, 0x87, 0x67, 0x15, 0xe7, 0xaa, 0xd1,
+	0xd4, 0x9b, 0x53, 0xa8, 0x77, 0x10, 0xe7, 0xc4, 0xd4, 0xea, 0x7d, 0xd8, 0xf0, 0xf5, 0xe3, 0x62,
+	0x53, 0x72, 0xd3, 0xa0, 0xb2, 0x19, 0xe9, 0xc3, 0x86, 0xac, 0x13, 0xea, 0x78, 0x88, 0x4d, 0xad,
+	0xe8, 0xc1, 0xa6, 0xaa, 0x15, 0xc4, 0x18, 0x3d, 0x1f, 0x09, 0x1c, 0x32, 0x3e, 0x2a, 0x15, 0xe2,
+	0x4e, 0x9a, 0xe3, 0xeb, 0x18, 0xe4, 0xee, 0xbf, 0x2b, 0xe0, 0xfa, 0x6c, 0x58, 0xa0, 0x9a, 0xbb,
+	0x6b, 0xa6, 0xdf, 0x80, 0x8e, 0x24, 0xf5, 0x51, 0xe5, 0xf5, 0x9e, 0x01, 0x84, 0x4c, 0x2e, 0x66,
+	0x8b, 0xf1, 0x70, 0x2b, 0xc4, 0x54, 0x05, 0xb6, 0xff, 0x0b, 0x8b, 0x49, 0x72, 0xdd, 0xbf, 0xd4,
+	0x3f, 0xd5, 0x7f, 0xfe, 0x5a, 0x5d, 0xda, 0x6f, 0xb7, 0xff, 0x51, 0xfd, 0x70, 0x5f, 0x93, 0xb5,
+	0x83, 0xa4, 0xa5, 0x7f, 0xca, 0x5f, 0xa7, 0xdb, 0xad, 0x8e, 0x72, 0xfb, 0xaf, 0x75, 0x38, 0x6b,
+	0x07, 0xc9, 0x59, 0xe6, 0x70, 0x76, 0xba, 0x7d, 0xa6, 0x1d, 0xce, 0xdf, 0x53, 0x81, 0x1f, 0xfc,
+	0x3f, 0x00, 0x00, 0xff, 0xff, 0xea, 0x0f, 0xf8, 0x73, 0xca, 0x1f, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/criterion_category_availability.pb.go b/googleapis/ads/googleads/v0/common/criterion_category_availability.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..169bcbfd465209bff46b64168e7f9bc59d651c3a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/criterion_category_availability.pb.go
@@ -0,0 +1,257 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/criterion_category_availability.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Information of category availability, per advertising channel.
+type CriterionCategoryAvailability struct {
+	// Channel types and subtypes that are available to the category.
+	Channel *CriterionCategoryChannelAvailability `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"`
+	// Locales that are available to the category for the channel.
+	Locale               []*CriterionCategoryLocaleAvailability `protobuf:"bytes,2,rep,name=locale,proto3" json:"locale,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *CriterionCategoryAvailability) Reset()         { *m = CriterionCategoryAvailability{} }
+func (m *CriterionCategoryAvailability) String() string { return proto.CompactTextString(m) }
+func (*CriterionCategoryAvailability) ProtoMessage()    {}
+func (*CriterionCategoryAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_category_availability_529df28267b0fcc5, []int{0}
+}
+func (m *CriterionCategoryAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryAvailability.Unmarshal(m, b)
+}
+func (m *CriterionCategoryAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryAvailability.Marshal(b, m, deterministic)
+}
+func (dst *CriterionCategoryAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryAvailability.Merge(dst, src)
+}
+func (m *CriterionCategoryAvailability) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryAvailability.Size(m)
+}
+func (m *CriterionCategoryAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryAvailability proto.InternalMessageInfo
+
+func (m *CriterionCategoryAvailability) GetChannel() *CriterionCategoryChannelAvailability {
+	if m != nil {
+		return m.Channel
+	}
+	return nil
+}
+
+func (m *CriterionCategoryAvailability) GetLocale() []*CriterionCategoryLocaleAvailability {
+	if m != nil {
+		return m.Locale
+	}
+	return nil
+}
+
+// Information of advertising channel type and subtypes a category is available
+// in.
+type CriterionCategoryChannelAvailability struct {
+	// Format of the channel availability. Can be ALL_CHANNELS (the rest of the
+	// fields will not be set), CHANNEL_TYPE (only advertising_channel_type type
+	// will be set, the category is available to all sub types under it) or
+	// CHANNEL_TYPE_AND_SUBTYPES (advertising_channel_type,
+	// advertising_channel_sub_type, and include_default_channel_sub_type will all
+	// be set).
+	AvailabilityMode enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode `protobuf:"varint,1,opt,name=availability_mode,json=availabilityMode,proto3,enum=google.ads.googleads.v0.enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode" json:"availability_mode,omitempty"`
+	// Channel type the category is available to.
+	AdvertisingChannelType enums.AdvertisingChannelTypeEnum_AdvertisingChannelType `protobuf:"varint,2,opt,name=advertising_channel_type,json=advertisingChannelType,proto3,enum=google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum_AdvertisingChannelType" json:"advertising_channel_type,omitempty"`
+	// Channel subtypes under the channel type the category is available to.
+	AdvertisingChannelSubType []enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType `protobuf:"varint,3,rep,packed,name=advertising_channel_sub_type,json=advertisingChannelSubType,proto3,enum=google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType" json:"advertising_channel_sub_type,omitempty"`
+	// Whether default channel sub type is included. For example,
+	// advertising_channel_type being DISPLAY and include_default_channel_sub_type
+	// being false means that the default display campaign where channel sub type
+	// is not set is not included in this availability configuration.
+	IncludeDefaultChannelSubType *wrappers.BoolValue `protobuf:"bytes,4,opt,name=include_default_channel_sub_type,json=includeDefaultChannelSubType,proto3" json:"include_default_channel_sub_type,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}            `json:"-"`
+	XXX_unrecognized             []byte              `json:"-"`
+	XXX_sizecache                int32               `json:"-"`
+}
+
+func (m *CriterionCategoryChannelAvailability) Reset()         { *m = CriterionCategoryChannelAvailability{} }
+func (m *CriterionCategoryChannelAvailability) String() string { return proto.CompactTextString(m) }
+func (*CriterionCategoryChannelAvailability) ProtoMessage()    {}
+func (*CriterionCategoryChannelAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_category_availability_529df28267b0fcc5, []int{1}
+}
+func (m *CriterionCategoryChannelAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryChannelAvailability.Unmarshal(m, b)
+}
+func (m *CriterionCategoryChannelAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryChannelAvailability.Marshal(b, m, deterministic)
+}
+func (dst *CriterionCategoryChannelAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryChannelAvailability.Merge(dst, src)
+}
+func (m *CriterionCategoryChannelAvailability) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryChannelAvailability.Size(m)
+}
+func (m *CriterionCategoryChannelAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryChannelAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryChannelAvailability proto.InternalMessageInfo
+
+func (m *CriterionCategoryChannelAvailability) GetAvailabilityMode() enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode {
+	if m != nil {
+		return m.AvailabilityMode
+	}
+	return enums.CriterionCategoryChannelAvailabilityModeEnum_UNSPECIFIED
+}
+
+func (m *CriterionCategoryChannelAvailability) GetAdvertisingChannelType() enums.AdvertisingChannelTypeEnum_AdvertisingChannelType {
+	if m != nil {
+		return m.AdvertisingChannelType
+	}
+	return enums.AdvertisingChannelTypeEnum_UNSPECIFIED
+}
+
+func (m *CriterionCategoryChannelAvailability) GetAdvertisingChannelSubType() []enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType {
+	if m != nil {
+		return m.AdvertisingChannelSubType
+	}
+	return nil
+}
+
+func (m *CriterionCategoryChannelAvailability) GetIncludeDefaultChannelSubType() *wrappers.BoolValue {
+	if m != nil {
+		return m.IncludeDefaultChannelSubType
+	}
+	return nil
+}
+
+// Information about which locales a category is available in.
+type CriterionCategoryLocaleAvailability struct {
+	// Format of the locale availability. Can be LAUNCHED_TO_ALL (both country and
+	// language will be empty), COUNTRY (only country will be set), LANGUAGE (only
+	// language wil be set), COUNTRY_AND_LANGUAGE (both country and language will
+	// be set).
+	AvailabilityMode enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode `protobuf:"varint,1,opt,name=availability_mode,json=availabilityMode,proto3,enum=google.ads.googleads.v0.enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode" json:"availability_mode,omitempty"`
+	// Code of the country.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Code of the language.
+	LanguageCode         *wrappers.StringValue `protobuf:"bytes,3,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CriterionCategoryLocaleAvailability) Reset()         { *m = CriterionCategoryLocaleAvailability{} }
+func (m *CriterionCategoryLocaleAvailability) String() string { return proto.CompactTextString(m) }
+func (*CriterionCategoryLocaleAvailability) ProtoMessage()    {}
+func (*CriterionCategoryLocaleAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_category_availability_529df28267b0fcc5, []int{2}
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailability.Unmarshal(m, b)
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailability.Marshal(b, m, deterministic)
+}
+func (dst *CriterionCategoryLocaleAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryLocaleAvailability.Merge(dst, src)
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailability.Size(m)
+}
+func (m *CriterionCategoryLocaleAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryLocaleAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryLocaleAvailability proto.InternalMessageInfo
+
+func (m *CriterionCategoryLocaleAvailability) GetAvailabilityMode() enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode {
+	if m != nil {
+		return m.AvailabilityMode
+	}
+	return enums.CriterionCategoryLocaleAvailabilityModeEnum_UNSPECIFIED
+}
+
+func (m *CriterionCategoryLocaleAvailability) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *CriterionCategoryLocaleAvailability) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CriterionCategoryAvailability)(nil), "google.ads.googleads.v0.common.CriterionCategoryAvailability")
+	proto.RegisterType((*CriterionCategoryChannelAvailability)(nil), "google.ads.googleads.v0.common.CriterionCategoryChannelAvailability")
+	proto.RegisterType((*CriterionCategoryLocaleAvailability)(nil), "google.ads.googleads.v0.common.CriterionCategoryLocaleAvailability")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/criterion_category_availability.proto", fileDescriptor_criterion_category_availability_529df28267b0fcc5)
+}
+
+var fileDescriptor_criterion_category_availability_529df28267b0fcc5 = []byte{
+	// 574 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0xc1, 0x8e, 0xd3, 0x30,
+	0x10, 0x86, 0x95, 0x74, 0xb5, 0x48, 0xee, 0xb2, 0x82, 0x1c, 0x50, 0xa9, 0xca, 0xaa, 0x2a, 0x1c,
+	0x7a, 0x72, 0xaa, 0x72, 0x04, 0x09, 0xd2, 0x14, 0xed, 0x05, 0x44, 0xd5, 0x45, 0x3d, 0x40, 0x45,
+	0xe4, 0x24, 0xde, 0x60, 0xc9, 0xb1, 0x23, 0xc7, 0x2e, 0xea, 0x2b, 0xf0, 0x02, 0x1c, 0x11, 0x1c,
+	0x79, 0x14, 0x38, 0x23, 0x71, 0xe0, 0x61, 0x50, 0xec, 0x64, 0xe9, 0xd2, 0x26, 0xdb, 0x9e, 0xea,
+	0xc6, 0xf3, 0x7f, 0xf3, 0xcf, 0x64, 0xec, 0x80, 0x69, 0xc2, 0x79, 0x42, 0xb1, 0x8b, 0xe2, 0xdc,
+	0x35, 0xcb, 0x62, 0xb5, 0x1a, 0xb9, 0x11, 0x4f, 0x53, 0xce, 0xdc, 0x48, 0x10, 0x89, 0x05, 0xe1,
+	0x2c, 0x88, 0x90, 0xc4, 0x09, 0x17, 0xeb, 0x00, 0xad, 0x10, 0xa1, 0x28, 0x24, 0x94, 0xc8, 0x35,
+	0xcc, 0x04, 0x97, 0xdc, 0x39, 0x33, 0x52, 0x88, 0xe2, 0x1c, 0x5e, 0x51, 0xe0, 0x6a, 0x04, 0x0d,
+	0xa5, 0xfb, 0xbc, 0x2e, 0x0b, 0x66, 0x2a, 0xcd, 0x5d, 0x14, 0xaf, 0xb0, 0x90, 0x24, 0x27, 0x2c,
+	0x09, 0xa2, 0x0f, 0x88, 0x31, 0x4c, 0x83, 0x5c, 0x85, 0x81, 0x5c, 0x67, 0xd8, 0x64, 0xe8, 0x3e,
+	0x3d, 0x9c, 0xb0, 0xa1, 0x9e, 0x35, 0xab, 0x77, 0x14, 0x59, 0x41, 0x36, 0x8b, 0x0d, 0x52, 0x1e,
+	0x57, 0xc4, 0xd7, 0x07, 0x13, 0x29, 0x8f, 0x10, 0xc5, 0xb5, 0xc0, 0xb2, 0x85, 0xae, 0xfe, 0x17,
+	0xaa, 0x4b, 0xf7, 0xa3, 0x40, 0x59, 0x86, 0x45, 0x6e, 0xf6, 0x07, 0x7f, 0x2c, 0xf0, 0xc0, 0xaf,
+	0xa8, 0x7e, 0x09, 0xf5, 0x36, 0x60, 0xce, 0x7b, 0x70, 0xab, 0x74, 0xdd, 0xb1, 0xfa, 0xd6, 0xb0,
+	0x3d, 0x9e, 0xc2, 0xe6, 0xd7, 0x02, 0xb7, 0x78, 0xbe, 0xd1, 0x6f, 0x62, 0xe7, 0x15, 0xd4, 0x79,
+	0x07, 0x8e, 0x4d, 0x0d, 0x1d, 0xbb, 0xdf, 0x1a, 0xb6, 0xc7, 0xfe, 0xc1, 0xf8, 0x97, 0x5a, 0x7e,
+	0x8d, 0x5e, 0x22, 0x07, 0xbf, 0x8e, 0xc0, 0xa3, 0x7d, 0xec, 0x38, 0x5f, 0x2d, 0x70, 0x77, 0xab,
+	0x87, 0xba, 0xe0, 0xd3, 0xb1, 0xac, 0x75, 0xa4, 0xdf, 0xca, 0x5e, 0xf5, 0xbe, 0xe2, 0x31, 0x7e,
+	0xc1, 0x54, 0xba, 0x77, 0xf0, 0xfc, 0x0e, 0xfa, 0xef, 0x89, 0xf3, 0xc9, 0x02, 0x9d, 0xba, 0x89,
+	0xec, 0xd8, 0xda, 0xea, 0xec, 0x06, 0xab, 0xde, 0x3f, 0x79, 0x99, 0xf7, 0xcd, 0x3a, 0x33, 0xc6,
+	0x76, 0x6f, 0xcd, 0xef, 0xa1, 0x9d, 0xcf, 0x9d, 0xcf, 0x16, 0xe8, 0x35, 0x1d, 0xb0, 0x4e, 0xab,
+	0xdf, 0x1a, 0x9e, 0x8e, 0x17, 0x07, 0x1b, 0xba, 0x50, 0x61, 0x83, 0xa7, 0x72, 0x77, 0x7e, 0x1f,
+	0xd5, 0x6d, 0x39, 0x21, 0xe8, 0x13, 0x16, 0x51, 0x15, 0xe3, 0x20, 0xc6, 0x97, 0x48, 0x51, 0xb9,
+	0x6d, 0xee, 0x48, 0x4f, 0x72, 0xb7, 0x32, 0x57, 0x9d, 0x0e, 0x38, 0xe1, 0x9c, 0x2e, 0x10, 0x55,
+	0x78, 0xde, 0x2b, 0x19, 0x53, 0x83, 0xb8, 0x9e, 0x63, 0xf0, 0xd3, 0x06, 0x0f, 0xf7, 0x98, 0x43,
+	0xe7, 0x4b, 0xc3, 0x58, 0x89, 0x43, 0xc7, 0x6a, 0x9b, 0x5f, 0x3f, 0x55, 0xbb, 0x63, 0x77, 0x0c,
+	0xd5, 0x33, 0x70, 0x12, 0x71, 0xc5, 0x64, 0x71, 0x39, 0x15, 0xde, 0x6c, 0xdd, 0x99, 0xde, 0x56,
+	0x67, 0x2e, 0xa4, 0x20, 0x2c, 0x31, 0xbd, 0x69, 0x97, 0x0a, 0xbf, 0x00, 0x78, 0xe0, 0x36, 0x45,
+	0x2c, 0x51, 0x28, 0xc1, 0x86, 0xd0, 0xda, 0x83, 0x70, 0x52, 0x49, 0x0a, 0xc4, 0xe4, 0xb7, 0x05,
+	0x06, 0x11, 0x4f, 0x6f, 0x38, 0xf8, 0x93, 0x41, 0xe3, 0x45, 0x35, 0x2b, 0xf2, 0xcc, 0xac, 0xb7,
+	0xe5, 0xa7, 0x07, 0x26, 0xbc, 0xc8, 0x01, 0xb9, 0x48, 0xdc, 0x04, 0x33, 0xed, 0xa2, 0xba, 0x52,
+	0x33, 0x92, 0xd7, 0x7d, 0x99, 0x9e, 0x98, 0x9f, 0x6f, 0x76, 0xeb, 0xdc, 0xf3, 0xbe, 0xdb, 0x67,
+	0xe7, 0x06, 0xe6, 0xc5, 0x39, 0x34, 0xcb, 0x62, 0xb5, 0x18, 0x41, 0x5f, 0x87, 0xfd, 0xa8, 0x02,
+	0x96, 0x5e, 0x9c, 0x2f, 0xaf, 0x02, 0x96, 0x8b, 0xd1, 0xd2, 0x04, 0x84, 0xc7, 0x3a, 0xf1, 0xe3,
+	0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x29, 0xe2, 0xf4, 0x0c, 0x11, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/custom_parameter.pb.go b/googleapis/ads/googleads/v0/common/custom_parameter.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..df2e0b66d9561a5b973b2132752a5f697a0315f4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/custom_parameter.pb.go
@@ -0,0 +1,99 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/custom_parameter.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A mapping that can be used by custom parameter tags in a
+// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+type CustomParameter struct {
+	// The key matching the parameter tag name.
+	Key *wrappers.StringValue `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	// The value to be substituted.
+	Value                *wrappers.StringValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomParameter) Reset()         { *m = CustomParameter{} }
+func (m *CustomParameter) String() string { return proto.CompactTextString(m) }
+func (*CustomParameter) ProtoMessage()    {}
+func (*CustomParameter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_custom_parameter_7e46384f1a98f62b, []int{0}
+}
+func (m *CustomParameter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomParameter.Unmarshal(m, b)
+}
+func (m *CustomParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomParameter.Marshal(b, m, deterministic)
+}
+func (dst *CustomParameter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomParameter.Merge(dst, src)
+}
+func (m *CustomParameter) XXX_Size() int {
+	return xxx_messageInfo_CustomParameter.Size(m)
+}
+func (m *CustomParameter) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomParameter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomParameter proto.InternalMessageInfo
+
+func (m *CustomParameter) GetKey() *wrappers.StringValue {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+func (m *CustomParameter) GetValue() *wrappers.StringValue {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomParameter)(nil), "google.ads.googleads.v0.common.CustomParameter")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/custom_parameter.proto", fileDescriptor_custom_parameter_7e46384f1a98f62b)
+}
+
+var fileDescriptor_custom_parameter_7e46384f1a98f62b = []byte{
+	// 265 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xb1, 0x4a, 0xc4, 0x40,
+	0x10, 0x86, 0x49, 0x0e, 0x2d, 0xd6, 0x42, 0x08, 0x16, 0x87, 0xc8, 0x21, 0x57, 0x59, 0xcd, 0x86,
+	0x13, 0x2b, 0xab, 0xdc, 0x09, 0xd7, 0x06, 0x85, 0x14, 0x12, 0x90, 0xbd, 0x64, 0x5d, 0x0e, 0xb3,
+	0x99, 0x65, 0x37, 0x89, 0xf8, 0x3a, 0x96, 0x3e, 0xca, 0x3d, 0x95, 0xec, 0x4e, 0x72, 0x85, 0xa0,
+	0x58, 0xe5, 0x0f, 0xfb, 0xfd, 0xdf, 0x0c, 0xc3, 0xee, 0x14, 0xa2, 0x6a, 0x24, 0x17, 0xb5, 0xe3,
+	0x14, 0x7d, 0x1a, 0x52, 0x5e, 0xa1, 0xd6, 0xd8, 0xf2, 0xaa, 0x77, 0x1d, 0xea, 0x17, 0x23, 0xac,
+	0xd0, 0xb2, 0x93, 0x16, 0x8c, 0xc5, 0x0e, 0x93, 0x05, 0xb1, 0x20, 0x6a, 0x07, 0xc7, 0x1a, 0x0c,
+	0x29, 0x50, 0xed, 0x72, 0x7c, 0xe7, 0x81, 0xde, 0xf5, 0xaf, 0xfc, 0xdd, 0x0a, 0x63, 0xa4, 0x75,
+	0xd4, 0x5f, 0xf6, 0xec, 0x7c, 0x13, 0xcc, 0xf9, 0x24, 0x4e, 0x80, 0xcd, 0xde, 0xe4, 0xc7, 0x3c,
+	0xba, 0x8e, 0x6e, 0xce, 0x56, 0x57, 0xa3, 0x15, 0x26, 0x01, 0x3c, 0x75, 0x76, 0xdf, 0xaa, 0x42,
+	0x34, 0xbd, 0x7c, 0xf4, 0x60, 0xb2, 0x62, 0x27, 0x83, 0xff, 0x9b, 0xc7, 0xff, 0x68, 0x10, 0xba,
+	0x3e, 0x44, 0x6c, 0x59, 0xa1, 0x86, 0xbf, 0xb7, 0x5f, 0x5f, 0xfc, 0xd8, 0x2d, 0xf7, 0xca, 0x3c,
+	0x7a, 0x7e, 0x18, 0x7b, 0x0a, 0x1b, 0xd1, 0x2a, 0x40, 0xab, 0xb8, 0x92, 0x6d, 0x18, 0x38, 0x1d,
+	0xcf, 0xec, 0xdd, 0x6f, 0xb7, 0xbc, 0xa7, 0xcf, 0x67, 0x3c, 0xdb, 0x66, 0xd9, 0x57, 0xbc, 0xd8,
+	0x92, 0x2c, 0xab, 0x1d, 0x50, 0xf4, 0xa9, 0x48, 0x61, 0x13, 0xb0, 0xc3, 0x04, 0x94, 0x59, 0xed,
+	0xca, 0x23, 0x50, 0x16, 0x69, 0x49, 0xc0, 0xee, 0x34, 0x0c, 0xbe, 0xfd, 0x0e, 0x00, 0x00, 0xff,
+	0xff, 0xc3, 0x33, 0x4d, 0xc8, 0xc3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/dates.pb.go b/googleapis/ads/googleads/v0/common/dates.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..06162f96acd4813d49d1e2e965395efa9f4bfbe4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/dates.pb.go
@@ -0,0 +1,98 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/dates.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A date range.
+type DateRange struct {
+	// The start date, in yyyy-mm-dd format.
+	StartDate *wrappers.StringValue `protobuf:"bytes,1,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// The end date, in yyyy-mm-dd format.
+	EndDate              *wrappers.StringValue `protobuf:"bytes,2,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *DateRange) Reset()         { *m = DateRange{} }
+func (m *DateRange) String() string { return proto.CompactTextString(m) }
+func (*DateRange) ProtoMessage()    {}
+func (*DateRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dates_68fc4d867dec9fcb, []int{0}
+}
+func (m *DateRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DateRange.Unmarshal(m, b)
+}
+func (m *DateRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DateRange.Marshal(b, m, deterministic)
+}
+func (dst *DateRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DateRange.Merge(dst, src)
+}
+func (m *DateRange) XXX_Size() int {
+	return xxx_messageInfo_DateRange.Size(m)
+}
+func (m *DateRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_DateRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DateRange proto.InternalMessageInfo
+
+func (m *DateRange) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *DateRange) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*DateRange)(nil), "google.ads.googleads.v0.common.DateRange")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/dates.proto", fileDescriptor_dates_68fc4d867dec9fcb)
+}
+
+var fileDescriptor_dates_68fc4d867dec9fcb = []byte{
+	// 268 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x31, 0x4b, 0x03, 0x31,
+	0x18, 0x86, 0xc9, 0x09, 0x6a, 0xe3, 0x76, 0x93, 0x88, 0x14, 0xe9, 0x24, 0x0e, 0x5f, 0x0e, 0x1d,
+	0x1c, 0x3a, 0x5d, 0x2d, 0x74, 0x2d, 0x15, 0x6e, 0x90, 0x03, 0x49, 0x9b, 0xcf, 0x50, 0xb8, 0xcb,
+	0x77, 0x24, 0x69, 0x9d, 0xfd, 0x2b, 0x8e, 0xfe, 0x0a, 0x67, 0x7f, 0x95, 0x24, 0xb9, 0xeb, 0xa6,
+	0x74, 0xba, 0x17, 0xee, 0x79, 0x9f, 0x97, 0x7c, 0xfc, 0x4e, 0x13, 0xe9, 0x06, 0x85, 0x54, 0x4e,
+	0xa4, 0x18, 0xd2, 0xbe, 0x10, 0x1b, 0x6a, 0x5b, 0x32, 0x42, 0x49, 0x8f, 0x0e, 0x3a, 0x4b, 0x9e,
+	0xf2, 0x71, 0x02, 0x40, 0x2a, 0x07, 0x07, 0x16, 0xf6, 0x05, 0x24, 0xf6, 0xaa, 0xff, 0x2f, 0x22,
+	0xbd, 0xde, 0xbd, 0x89, 0x77, 0x2b, 0xbb, 0x0e, 0x6d, 0xdf, 0x9f, 0x7c, 0x30, 0x3e, 0x9a, 0x4b,
+	0x8f, 0x2b, 0x69, 0x34, 0xe6, 0x53, 0xce, 0x9d, 0x97, 0xd6, 0xbf, 0x86, 0x89, 0x4b, 0x76, 0xc3,
+	0x6e, 0x2f, 0xee, 0xaf, 0x7b, 0x2f, 0x0c, 0x0a, 0x78, 0xf6, 0x76, 0x6b, 0x74, 0x25, 0x9b, 0x1d,
+	0xae, 0x46, 0x91, 0x0f, 0x86, 0xfc, 0x91, 0x9f, 0xa3, 0x51, 0xa9, 0x9a, 0x1d, 0x51, 0x3d, 0x43,
+	0xa3, 0x42, 0x71, 0xf6, 0xcd, 0xf8, 0x64, 0x43, 0x2d, 0xfc, 0xff, 0x94, 0x19, 0x0f, 0xb0, 0x5b,
+	0x06, 0xd5, 0x92, 0xbd, 0xcc, 0x7b, 0x5a, 0x53, 0x23, 0x8d, 0x06, 0xb2, 0x5a, 0x68, 0x34, 0x71,
+	0x68, 0x38, 0x5a, 0xb7, 0x75, 0x7f, 0xdd, 0x70, 0x9a, 0x3e, 0x9f, 0xd9, 0xc9, 0xa2, 0x2c, 0xbf,
+	0xb2, 0xf1, 0x22, 0xc9, 0x4a, 0xe5, 0x20, 0xc5, 0x90, 0xaa, 0x02, 0x9e, 0x22, 0xf6, 0x33, 0x00,
+	0x75, 0xa9, 0x5c, 0x7d, 0x00, 0xea, 0xaa, 0xa8, 0x13, 0xb0, 0x3e, 0x8d, 0xc3, 0x0f, 0xbf, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0x29, 0x33, 0x41, 0x4f, 0xbb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/explorer_auto_optimizer_setting.pb.go b/googleapis/ads/googleads/v0/common/explorer_auto_optimizer_setting.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..09412cf7652ebd435e5b61da6a3622b8ab1e760c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/explorer_auto_optimizer_setting.pb.go
@@ -0,0 +1,92 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/explorer_auto_optimizer_setting.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Settings for the
+// <a href="https://support.google.com/google-ads/answer/190596">
+// Display Campaign Optimizer</a>, initially termed "Explorer".
+type ExplorerAutoOptimizerSetting struct {
+	// Indicates whether the optimizer is turned on.
+	OptIn                *wrappers.BoolValue `protobuf:"bytes,1,opt,name=opt_in,json=optIn,proto3" json:"opt_in,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ExplorerAutoOptimizerSetting) Reset()         { *m = ExplorerAutoOptimizerSetting{} }
+func (m *ExplorerAutoOptimizerSetting) String() string { return proto.CompactTextString(m) }
+func (*ExplorerAutoOptimizerSetting) ProtoMessage()    {}
+func (*ExplorerAutoOptimizerSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_explorer_auto_optimizer_setting_f844f2dcfafe2751, []int{0}
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExplorerAutoOptimizerSetting.Unmarshal(m, b)
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExplorerAutoOptimizerSetting.Marshal(b, m, deterministic)
+}
+func (dst *ExplorerAutoOptimizerSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExplorerAutoOptimizerSetting.Merge(dst, src)
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_Size() int {
+	return xxx_messageInfo_ExplorerAutoOptimizerSetting.Size(m)
+}
+func (m *ExplorerAutoOptimizerSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExplorerAutoOptimizerSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExplorerAutoOptimizerSetting proto.InternalMessageInfo
+
+func (m *ExplorerAutoOptimizerSetting) GetOptIn() *wrappers.BoolValue {
+	if m != nil {
+		return m.OptIn
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ExplorerAutoOptimizerSetting)(nil), "google.ads.googleads.v0.common.ExplorerAutoOptimizerSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/explorer_auto_optimizer_setting.proto", fileDescriptor_explorer_auto_optimizer_setting_f844f2dcfafe2751)
+}
+
+var fileDescriptor_explorer_auto_optimizer_setting_f844f2dcfafe2751 = []byte{
+	// 274 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x4e, 0xf3, 0x30,
+	0x14, 0x85, 0x95, 0xfe, 0xfa, 0x3b, 0x84, 0xad, 0x13, 0xaa, 0x50, 0x05, 0x9d, 0x98, 0xae, 0x03,
+	0x8c, 0x4c, 0x0e, 0xa0, 0x8a, 0x89, 0x02, 0x52, 0x06, 0x14, 0x29, 0x72, 0x1b, 0x63, 0x59, 0x72,
+	0x7c, 0x2d, 0xdb, 0x29, 0x88, 0xc7, 0x61, 0xe4, 0x51, 0x78, 0x01, 0x5e, 0x07, 0x25, 0x37, 0xe9,
+	0x46, 0xa7, 0x1c, 0x29, 0xe7, 0x7e, 0x9f, 0x75, 0xd2, 0x5b, 0x85, 0xa8, 0x8c, 0x64, 0xa2, 0x0e,
+	0x8c, 0x62, 0x97, 0x76, 0x19, 0xdb, 0x62, 0xd3, 0xa0, 0x65, 0xf2, 0xdd, 0x19, 0xf4, 0xd2, 0x57,
+	0xa2, 0x8d, 0x58, 0xa1, 0x8b, 0xba, 0xd1, 0x1f, 0xd2, 0x57, 0x41, 0xc6, 0xa8, 0xad, 0x02, 0xe7,
+	0x31, 0xe2, 0x6c, 0x41, 0xa7, 0x20, 0xea, 0x00, 0x7b, 0x0a, 0xec, 0x32, 0x20, 0xca, 0x7c, 0xf8,
+	0xcf, 0xfa, 0xf6, 0xa6, 0x7d, 0x65, 0x6f, 0x5e, 0x38, 0x27, 0x7d, 0xa0, 0xfb, 0xe5, 0x63, 0x7a,
+	0x72, 0x37, 0x88, 0x78, 0x1b, 0xf1, 0x61, 0xd4, 0x3c, 0x93, 0x65, 0x76, 0x91, 0x4e, 0xd1, 0xc5,
+	0x4a, 0xdb, 0xe3, 0xe4, 0x34, 0x39, 0x3f, 0xba, 0x9c, 0x0f, 0x16, 0x18, 0x81, 0x90, 0x23, 0x9a,
+	0x42, 0x98, 0x56, 0x3e, 0xfd, 0x47, 0x17, 0xef, 0x6d, 0xfe, 0x93, 0xa4, 0xcb, 0x2d, 0x36, 0x70,
+	0xf8, 0x65, 0xf9, 0xd9, 0x21, 0xef, 0xba, 0xa3, 0xaf, 0x93, 0x97, 0x61, 0x24, 0x50, 0x68, 0x84,
+	0x55, 0x80, 0x5e, 0x31, 0x25, 0x6d, 0xef, 0x1e, 0x47, 0x73, 0x3a, 0xfc, 0xb5, 0xe1, 0x35, 0x7d,
+	0x3e, 0x27, 0xff, 0x56, 0x9c, 0x7f, 0x4d, 0x16, 0x2b, 0x82, 0xf1, 0x3a, 0x00, 0xc5, 0x2e, 0x15,
+	0x19, 0xdc, 0xf4, 0xb5, 0xef, 0xb1, 0x50, 0xf2, 0x3a, 0x94, 0xfb, 0x42, 0x59, 0x64, 0x25, 0x15,
+	0x36, 0xd3, 0x5e, 0x7c, 0xf5, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x15, 0xed, 0xa1, 0xbb, 0xbb, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/feed_common.pb.go b/googleapis/ads/googleads/v0/common/feed_common.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..fd8004170e1cb422caae90111d6cfba579f09abe
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/feed_common.pb.go
@@ -0,0 +1,100 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/feed_common.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Represents a price in a particular currency.
+type Price struct {
+	// Three-character ISO 4217 currency code.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// Amount in micros. One million is equivalent to one unit.
+	AmountMicros         *wrappers.Int64Value `protobuf:"bytes,2,opt,name=amount_micros,json=amountMicros,proto3" json:"amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Price) Reset()         { *m = Price{} }
+func (m *Price) String() string { return proto.CompactTextString(m) }
+func (*Price) ProtoMessage()    {}
+func (*Price) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_common_3c465e0e5062e040, []int{0}
+}
+func (m *Price) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Price.Unmarshal(m, b)
+}
+func (m *Price) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Price.Marshal(b, m, deterministic)
+}
+func (dst *Price) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Price.Merge(dst, src)
+}
+func (m *Price) XXX_Size() int {
+	return xxx_messageInfo_Price.Size(m)
+}
+func (m *Price) XXX_DiscardUnknown() {
+	xxx_messageInfo_Price.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Price proto.InternalMessageInfo
+
+func (m *Price) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *Price) GetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.AmountMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Price)(nil), "google.ads.googleads.v0.common.Price")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/feed_common.proto", fileDescriptor_feed_common_3c465e0e5062e040)
+}
+
+var fileDescriptor_feed_common_3c465e0e5062e040 = []byte{
+	// 294 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xf3, 0x40,
+	0x14, 0x85, 0x49, 0x7f, 0x7e, 0x17, 0xd1, 0x22, 0x74, 0x55, 0x54, 0x8a, 0x74, 0xe5, 0x6a, 0x26,
+	0xa8, 0xb8, 0x71, 0x63, 0x5a, 0xb1, 0xb8, 0x10, 0x82, 0x42, 0x16, 0x12, 0x08, 0xd3, 0x99, 0xdb,
+	0x21, 0x90, 0xcc, 0x0d, 0x33, 0x49, 0xc5, 0x77, 0xf0, 0x29, 0x5c, 0xfa, 0x1e, 0x6e, 0x7c, 0x2a,
+	0xc9, 0xdc, 0xa4, 0x1b, 0xd1, 0x55, 0x0e, 0xe4, 0x7c, 0xdf, 0x61, 0x6e, 0x18, 0x69, 0x44, 0x5d,
+	0x02, 0x17, 0xca, 0x71, 0x8a, 0x5d, 0xda, 0x46, 0x5c, 0x62, 0x55, 0xa1, 0xe1, 0x1b, 0x00, 0x95,
+	0x53, 0x66, 0xb5, 0xc5, 0x06, 0x27, 0x33, 0xaa, 0x31, 0xa1, 0x1c, 0xdb, 0x11, 0x6c, 0x1b, 0x31,
+	0x6a, 0x1d, 0xf5, 0xff, 0xb9, 0x6f, 0xaf, 0xdb, 0x0d, 0x7f, 0xb1, 0xa2, 0xae, 0xc1, 0x3a, 0xe2,
+	0xe7, 0x6f, 0x41, 0xf8, 0x3f, 0xb1, 0x85, 0x84, 0x49, 0x1c, 0x8e, 0x65, 0x6b, 0x2d, 0x18, 0xf9,
+	0x9a, 0x4b, 0x54, 0x30, 0x0d, 0x4e, 0x83, 0xb3, 0xfd, 0xf3, 0x93, 0x5e, 0xcb, 0x06, 0x03, 0x7b,
+	0x6a, 0x6c, 0x61, 0x74, 0x2a, 0xca, 0x16, 0x1e, 0x0f, 0x06, 0x64, 0x89, 0x0a, 0x26, 0x37, 0xe1,
+	0x58, 0x54, 0xd8, 0x9a, 0x26, 0xaf, 0x0a, 0x69, 0xd1, 0x4d, 0x47, 0x5e, 0x71, 0xfc, 0x43, 0x71,
+	0x6f, 0x9a, 0xab, 0xcb, 0xde, 0x40, 0xc4, 0x83, 0x07, 0x16, 0x9f, 0x41, 0x38, 0x97, 0x58, 0xb1,
+	0xbf, 0x5f, 0xb5, 0x38, 0xbc, 0x03, 0x50, 0x4b, 0x9f, 0x93, 0xce, 0x99, 0x04, 0xcf, 0xb7, 0x3d,
+	0xa2, 0xb1, 0x14, 0x46, 0x33, 0xb4, 0x9a, 0x6b, 0x30, 0x7e, 0x71, 0x38, 0x65, 0x5d, 0xb8, 0xdf,
+	0x2e, 0x7b, 0x4d, 0x9f, 0xf7, 0xd1, 0xbf, 0x55, 0x1c, 0x7f, 0x8c, 0x66, 0x2b, 0x92, 0xc5, 0xca,
+	0x31, 0x8a, 0x5d, 0x4a, 0x23, 0x46, 0x9b, 0x5f, 0x43, 0x21, 0x8b, 0x95, 0xcb, 0x76, 0x85, 0x2c,
+	0x8d, 0x32, 0x2a, 0xac, 0xf7, 0xfc, 0xf0, 0xc5, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x3c,
+	0x7c, 0x9a, 0xd1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/frequency_cap.pb.go b/googleapis/ads/googleads/v0/common/frequency_cap.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a32d726d945b8e61e627c358d2ef137b397d9187
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/frequency_cap.pb.go
@@ -0,0 +1,181 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/frequency_cap.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A rule specifying the maximum number of times an ad (or some set of ads) can
+// be shown to a user over a particular time period.
+type FrequencyCapEntry struct {
+	// The key of a particular frequency cap. There can be no more
+	// than one frequency cap with the same key.
+	Key *FrequencyCapKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	// Maximum number of events allowed during the time range by this cap.
+	Cap                  *wrappers.Int32Value `protobuf:"bytes,2,opt,name=cap,proto3" json:"cap,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *FrequencyCapEntry) Reset()         { *m = FrequencyCapEntry{} }
+func (m *FrequencyCapEntry) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapEntry) ProtoMessage()    {}
+func (*FrequencyCapEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_753d8e89250afc52, []int{0}
+}
+func (m *FrequencyCapEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapEntry.Unmarshal(m, b)
+}
+func (m *FrequencyCapEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapEntry.Marshal(b, m, deterministic)
+}
+func (dst *FrequencyCapEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapEntry.Merge(dst, src)
+}
+func (m *FrequencyCapEntry) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapEntry.Size(m)
+}
+func (m *FrequencyCapEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapEntry proto.InternalMessageInfo
+
+func (m *FrequencyCapEntry) GetKey() *FrequencyCapKey {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+func (m *FrequencyCapEntry) GetCap() *wrappers.Int32Value {
+	if m != nil {
+		return m.Cap
+	}
+	return nil
+}
+
+// A group of fields used as keys for a frequency cap.
+// There can be no more than one frequency cap with the same key.
+type FrequencyCapKey struct {
+	// The level on which the cap is to be applied (e.g. ad group ad, ad group).
+	// The cap is applied to all the entities of this level.
+	Level enums.FrequencyCapLevelEnum_FrequencyCapLevel `protobuf:"varint,1,opt,name=level,proto3,enum=google.ads.googleads.v0.enums.FrequencyCapLevelEnum_FrequencyCapLevel" json:"level,omitempty"`
+	// The type of event that the cap applies to (e.g. impression).
+	EventType enums.FrequencyCapEventTypeEnum_FrequencyCapEventType `protobuf:"varint,3,opt,name=event_type,json=eventType,proto3,enum=google.ads.googleads.v0.enums.FrequencyCapEventTypeEnum_FrequencyCapEventType" json:"event_type,omitempty"`
+	// Unit of time the cap is defined at (e.g. day, week).
+	TimeUnit enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit `protobuf:"varint,2,opt,name=time_unit,json=timeUnit,proto3,enum=google.ads.googleads.v0.enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit" json:"time_unit,omitempty"`
+	// Number of time units the cap lasts.
+	TimeLength           *wrappers.Int32Value `protobuf:"bytes,4,opt,name=time_length,json=timeLength,proto3" json:"time_length,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *FrequencyCapKey) Reset()         { *m = FrequencyCapKey{} }
+func (m *FrequencyCapKey) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapKey) ProtoMessage()    {}
+func (*FrequencyCapKey) Descriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_753d8e89250afc52, []int{1}
+}
+func (m *FrequencyCapKey) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapKey.Unmarshal(m, b)
+}
+func (m *FrequencyCapKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapKey.Marshal(b, m, deterministic)
+}
+func (dst *FrequencyCapKey) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapKey.Merge(dst, src)
+}
+func (m *FrequencyCapKey) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapKey.Size(m)
+}
+func (m *FrequencyCapKey) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapKey.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapKey proto.InternalMessageInfo
+
+func (m *FrequencyCapKey) GetLevel() enums.FrequencyCapLevelEnum_FrequencyCapLevel {
+	if m != nil {
+		return m.Level
+	}
+	return enums.FrequencyCapLevelEnum_UNSPECIFIED
+}
+
+func (m *FrequencyCapKey) GetEventType() enums.FrequencyCapEventTypeEnum_FrequencyCapEventType {
+	if m != nil {
+		return m.EventType
+	}
+	return enums.FrequencyCapEventTypeEnum_UNSPECIFIED
+}
+
+func (m *FrequencyCapKey) GetTimeUnit() enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit {
+	if m != nil {
+		return m.TimeUnit
+	}
+	return enums.FrequencyCapTimeUnitEnum_UNSPECIFIED
+}
+
+func (m *FrequencyCapKey) GetTimeLength() *wrappers.Int32Value {
+	if m != nil {
+		return m.TimeLength
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*FrequencyCapEntry)(nil), "google.ads.googleads.v0.common.FrequencyCapEntry")
+	proto.RegisterType((*FrequencyCapKey)(nil), "google.ads.googleads.v0.common.FrequencyCapKey")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/frequency_cap.proto", fileDescriptor_frequency_cap_753d8e89250afc52)
+}
+
+var fileDescriptor_frequency_cap_753d8e89250afc52 = []byte{
+	// 432 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x4f, 0x6b, 0xd4, 0x40,
+	0x14, 0x27, 0x1b, 0x15, 0x3b, 0x85, 0x8a, 0x39, 0x2d, 0x15, 0x8a, 0xec, 0xc9, 0x8b, 0x33, 0x21,
+	0x3d, 0x78, 0x68, 0x2f, 0x69, 0xdd, 0x16, 0x71, 0x91, 0x12, 0xea, 0x1e, 0x24, 0x10, 0xa6, 0xc9,
+	0x6b, 0x0c, 0x66, 0xfe, 0x98, 0x4c, 0x22, 0xf9, 0x00, 0xe2, 0xf7, 0xf0, 0xe8, 0x17, 0x11, 0xfc,
+	0x54, 0x32, 0x33, 0x49, 0x74, 0x5d, 0xd6, 0x25, 0xa7, 0xfc, 0x92, 0xf7, 0xfb, 0xf3, 0xf2, 0xde,
+	0x0c, 0x0a, 0x72, 0x21, 0xf2, 0x12, 0x08, 0xcd, 0x6a, 0x62, 0xa1, 0x46, 0xad, 0x4f, 0x52, 0xc1,
+	0x98, 0xe0, 0xe4, 0xbe, 0x82, 0xcf, 0x0d, 0xf0, 0xb4, 0x4b, 0x52, 0x2a, 0xb1, 0xac, 0x84, 0x12,
+	0xde, 0x89, 0x25, 0x62, 0x9a, 0xd5, 0x78, 0xd4, 0xe0, 0xd6, 0xc7, 0x56, 0x73, 0x7c, 0xbe, 0xcb,
+	0x13, 0x78, 0xc3, 0xea, 0x4d, 0xcb, 0x04, 0x5a, 0xe0, 0x2a, 0x51, 0x9d, 0x04, 0xeb, 0x7e, 0xfc,
+	0x6a, 0x8a, 0xba, 0x84, 0x16, 0xca, 0x5e, 0x78, 0x36, 0x45, 0xa8, 0x0a, 0x06, 0x49, 0xc3, 0x0b,
+	0xd5, 0x8b, 0xfb, 0x7f, 0x22, 0xe6, 0xed, 0xae, 0xb9, 0x27, 0x5f, 0x2a, 0x2a, 0x25, 0x54, 0xb5,
+	0xad, 0x2f, 0xbe, 0x3a, 0xe8, 0xe9, 0xd5, 0xe0, 0x70, 0x49, 0xe5, 0x92, 0xab, 0xaa, 0xf3, 0x42,
+	0xe4, 0x7e, 0x82, 0x6e, 0xee, 0x3c, 0x77, 0x5e, 0x1c, 0x06, 0x04, 0xff, 0x7f, 0x2e, 0xf8, 0x6f,
+	0xfd, 0x5b, 0xe8, 0x22, 0xad, 0xf5, 0x5e, 0x22, 0x37, 0xa5, 0x72, 0x3e, 0x33, 0x16, 0xcf, 0x06,
+	0x8b, 0xa1, 0x0d, 0xfc, 0x86, 0xab, 0xd3, 0x60, 0x4d, 0xcb, 0x06, 0x22, 0xcd, 0x5b, 0x7c, 0x73,
+	0xd1, 0x93, 0x7f, 0x7c, 0xbc, 0x18, 0x3d, 0x34, 0x73, 0x30, 0x7d, 0x1c, 0x05, 0x57, 0x3b, 0xfb,
+	0x30, 0x83, 0xd8, 0x68, 0x63, 0xa5, 0x75, 0x4b, 0xde, 0xb0, 0xed, 0xaf, 0x91, 0x35, 0xf5, 0x18,
+	0x42, 0x7f, 0x76, 0x34, 0x77, 0x4d, 0xc4, 0xbb, 0x09, 0x11, 0x4b, 0x2d, 0xbe, 0xed, 0x24, 0x6c,
+	0xc5, 0x8c, 0x95, 0xe8, 0x00, 0x06, 0xe8, 0x15, 0xe8, 0x60, 0xdc, 0x8d, 0x99, 0xca, 0x51, 0xb0,
+	0x9a, 0x90, 0x76, 0x5b, 0x30, 0x78, 0xcf, 0x0b, 0xb5, 0x15, 0x36, 0x14, 0xa2, 0xc7, 0xaa, 0x47,
+	0xde, 0x39, 0x3a, 0x34, 0x51, 0x25, 0xf0, 0x5c, 0x7d, 0x9c, 0x3f, 0xd8, 0xbf, 0x02, 0xa4, 0xf9,
+	0x2b, 0x43, 0xbf, 0xf8, 0xe9, 0xa0, 0x45, 0x2a, 0xd8, 0x9e, 0xa5, 0x5f, 0x6c, 0x9c, 0x9a, 0x1b,
+	0xed, 0x79, 0xe3, 0x7c, 0x78, 0xdd, 0x8b, 0x72, 0x51, 0x52, 0x9e, 0x63, 0x51, 0xe5, 0x24, 0x07,
+	0x6e, 0x12, 0x87, 0xa3, 0x2b, 0x8b, 0x7a, 0xd7, 0xa5, 0x3c, 0xb3, 0x8f, 0xef, 0x33, 0xf7, 0x3a,
+	0x0c, 0x7f, 0xcc, 0x4e, 0xae, 0xad, 0x59, 0x98, 0xd5, 0xd8, 0x42, 0x8d, 0xd6, 0x3e, 0xbe, 0x34,
+	0xb4, 0x5f, 0x03, 0x21, 0x0e, 0xb3, 0x3a, 0x1e, 0x09, 0xf1, 0xda, 0x8f, 0x2d, 0xe1, 0xee, 0x91,
+	0x09, 0x3e, 0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x51, 0x58, 0xef, 0xf8, 0x0c, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/keyword_plan_common.pb.go b/googleapis/ads/googleads/v0/common/keyword_plan_common.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4cdbb4ec5838e08b710ae63780021c075bfc605d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/keyword_plan_common.pb.go
@@ -0,0 +1,105 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/keyword_plan_common.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Historical metrics.
+type KeywordPlanHistoricalMetrics struct {
+	// Average monthly searches for the past 12 months.
+	AvgMonthlySearches *wrappers.Int64Value `protobuf:"bytes,1,opt,name=avg_monthly_searches,json=avgMonthlySearches,proto3" json:"avg_monthly_searches,omitempty"`
+	// The competition level for the query.
+	Competition          enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel `protobuf:"varint,2,opt,name=competition,proto3,enum=google.ads.googleads.v0.enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel" json:"competition,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                            `json:"-"`
+	XXX_sizecache        int32                                                             `json:"-"`
+}
+
+func (m *KeywordPlanHistoricalMetrics) Reset()         { *m = KeywordPlanHistoricalMetrics{} }
+func (m *KeywordPlanHistoricalMetrics) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanHistoricalMetrics) ProtoMessage()    {}
+func (*KeywordPlanHistoricalMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_common_f1ae42b0d746bad1, []int{0}
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanHistoricalMetrics.Unmarshal(m, b)
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanHistoricalMetrics.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanHistoricalMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanHistoricalMetrics.Merge(dst, src)
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanHistoricalMetrics.Size(m)
+}
+func (m *KeywordPlanHistoricalMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanHistoricalMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanHistoricalMetrics proto.InternalMessageInfo
+
+func (m *KeywordPlanHistoricalMetrics) GetAvgMonthlySearches() *wrappers.Int64Value {
+	if m != nil {
+		return m.AvgMonthlySearches
+	}
+	return nil
+}
+
+func (m *KeywordPlanHistoricalMetrics) GetCompetition() enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel {
+	if m != nil {
+		return m.Competition
+	}
+	return enums.KeywordPlanCompetitionLevelEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanHistoricalMetrics)(nil), "google.ads.googleads.v0.common.KeywordPlanHistoricalMetrics")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/keyword_plan_common.proto", fileDescriptor_keyword_plan_common_f1ae42b0d746bad1)
+}
+
+var fileDescriptor_keyword_plan_common_f1ae42b0d746bad1 = []byte{
+	// 354 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x4a, 0xeb, 0x40,
+	0x14, 0x26, 0xbd, 0x70, 0x17, 0x29, 0xdc, 0x45, 0xb8, 0x48, 0xa9, 0x52, 0x4a, 0x57, 0x5d, 0xcd,
+	0x84, 0x2a, 0x22, 0xb8, 0x4a, 0x55, 0xaa, 0x68, 0xa1, 0x54, 0xe8, 0xa2, 0x04, 0xc2, 0x34, 0x19,
+	0xa7, 0xc1, 0x99, 0x39, 0x61, 0x66, 0x92, 0x52, 0xf0, 0x69, 0x5c, 0xfa, 0x28, 0xe2, 0x9b, 0xf8,
+	0x12, 0x92, 0x4c, 0x5a, 0x2b, 0xd2, 0xae, 0xf2, 0x25, 0xf3, 0xfd, 0x9c, 0xef, 0x64, 0xdc, 0x0b,
+	0x06, 0xc0, 0x38, 0xc5, 0x24, 0xd1, 0xd8, 0xc2, 0x12, 0x15, 0x3e, 0x8e, 0x41, 0x08, 0x90, 0xf8,
+	0x99, 0xae, 0x57, 0xa0, 0x92, 0x28, 0xe3, 0x44, 0x46, 0xf6, 0x1b, 0xca, 0x14, 0x18, 0xf0, 0x3a,
+	0x96, 0x8e, 0x48, 0xa2, 0xd1, 0x56, 0x89, 0x0a, 0x1f, 0x59, 0x56, 0x7b, 0xb8, 0xcf, 0x99, 0xca,
+	0x5c, 0xe8, 0x5f, 0xc6, 0x19, 0x35, 0xa9, 0x49, 0x41, 0x46, 0x9c, 0x16, 0x94, 0xdb, 0x8c, 0x76,
+	0x9d, 0x81, 0xab, 0xb7, 0x45, 0xfe, 0x84, 0x57, 0x8a, 0x64, 0x19, 0x55, 0xda, 0x9e, 0xf7, 0x3e,
+	0x1d, 0xf7, 0xe4, 0xde, 0x1a, 0x4d, 0x38, 0x91, 0xb7, 0xa9, 0x36, 0xa0, 0xd2, 0x98, 0xf0, 0x31,
+	0x35, 0x2a, 0x8d, 0xb5, 0x37, 0x76, 0xff, 0x93, 0x82, 0x45, 0x02, 0xa4, 0x59, 0xf2, 0x75, 0xa4,
+	0x29, 0x51, 0xf1, 0x92, 0xea, 0x96, 0xd3, 0x75, 0xfa, 0xcd, 0xc1, 0x71, 0x3d, 0x38, 0xda, 0xf8,
+	0xa3, 0x3b, 0x69, 0xce, 0xcf, 0x66, 0x84, 0xe7, 0x74, 0xea, 0x91, 0x82, 0x8d, 0xad, 0xee, 0xb1,
+	0x96, 0x79, 0x2f, 0x6e, 0x73, 0x67, 0xd4, 0x56, 0xa3, 0xeb, 0xf4, 0xff, 0x0d, 0xe6, 0x68, 0xdf,
+	0x26, 0xaa, 0xa6, 0x68, 0x67, 0xc0, 0xab, 0x6f, 0xf1, 0x43, 0x59, 0xf3, 0x46, 0xe6, 0xe2, 0xd0,
+	0xf9, 0x74, 0x37, 0x6e, 0xf8, 0xe1, 0xb8, 0xbd, 0x18, 0x04, 0x3a, 0xbc, 0xf8, 0xe1, 0xd1, 0x4f,
+	0x43, 0x01, 0x72, 0x52, 0xd6, 0x9b, 0x38, 0xf3, 0xeb, 0x5a, 0xc9, 0x80, 0x13, 0xc9, 0x10, 0x28,
+	0x86, 0x19, 0x95, 0x55, 0xf9, 0xcd, 0x2f, 0xca, 0x52, 0xbd, 0xef, 0x2e, 0x5c, 0xda, 0xc7, 0x6b,
+	0xe3, 0xcf, 0x28, 0x08, 0xde, 0x1a, 0x9d, 0x91, 0x35, 0x0b, 0x12, 0x8d, 0x2c, 0x2c, 0xd1, 0xcc,
+	0x47, 0x36, 0xf3, 0x7d, 0x43, 0x08, 0x83, 0x44, 0x87, 0x5b, 0x42, 0x38, 0xf3, 0x43, 0x4b, 0x58,
+	0xfc, 0xad, 0x82, 0x4f, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x86, 0x43, 0x77, 0x3f, 0x83, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/matching_function.pb.go b/googleapis/ads/googleads/v0/common/matching_function.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a5d07719b7622aff5add62846406cbb11b3a6f8f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/matching_function.pb.go
@@ -0,0 +1,106 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/matching_function.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Matching function associated with a
+// CustomerFeed, CampaignFeed, or AdGroupFeed. The matching function is used
+// to filter the set of feed items selected.
+type MatchingFunction struct {
+	// String representation of the Function.
+	//
+	// Examples:
+	// 1) IDENTITY(true) or IDENTITY(false). All or none feed items serve.
+	// 2) EQUALS(CONTEXT.DEVICE,"Mobile")
+	// 3) IN(FEED_ITEM_ID,{1000001,1000002,1000003})
+	// 4) CONTAINS_ANY(FeedAttribute[12345678,0],{"Mars cruise","Venus cruise"})
+	// 5) AND(IN(FEED_ITEM_ID,{10001,10002}),EQUALS(CONTEXT.DEVICE,"Mobile"))
+	// See
+	// https:
+	// //developers.google.com/adwords/api/docs/guides/feed-matching-functions
+	//
+	// Note that because multiple strings may represent the same underlying
+	// function (whitespace and single versus double quotation marks, for
+	// example), the value returned may not be identical to the string sent in a
+	// mutate request.
+	FunctionString       *wrappers.StringValue `protobuf:"bytes,1,opt,name=function_string,json=functionString,proto3" json:"function_string,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MatchingFunction) Reset()         { *m = MatchingFunction{} }
+func (m *MatchingFunction) String() string { return proto.CompactTextString(m) }
+func (*MatchingFunction) ProtoMessage()    {}
+func (*MatchingFunction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_matching_function_ced7df2e67441782, []int{0}
+}
+func (m *MatchingFunction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MatchingFunction.Unmarshal(m, b)
+}
+func (m *MatchingFunction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MatchingFunction.Marshal(b, m, deterministic)
+}
+func (dst *MatchingFunction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MatchingFunction.Merge(dst, src)
+}
+func (m *MatchingFunction) XXX_Size() int {
+	return xxx_messageInfo_MatchingFunction.Size(m)
+}
+func (m *MatchingFunction) XXX_DiscardUnknown() {
+	xxx_messageInfo_MatchingFunction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MatchingFunction proto.InternalMessageInfo
+
+func (m *MatchingFunction) GetFunctionString() *wrappers.StringValue {
+	if m != nil {
+		return m.FunctionString
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*MatchingFunction)(nil), "google.ads.googleads.v0.common.MatchingFunction")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/matching_function.proto", fileDescriptor_matching_function_ced7df2e67441782)
+}
+
+var fileDescriptor_matching_function_ced7df2e67441782 = []byte{
+	// 261 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe4, 0xfc,
+	0xdc, 0xdc, 0xfc, 0x3c, 0xfd, 0xdc, 0xc4, 0x92, 0xe4, 0x8c, 0xcc, 0xbc, 0xf4, 0xf8, 0xb4, 0xd2,
+	0xbc, 0xe4, 0x92, 0xcc, 0xfc, 0x3c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x39, 0x88, 0x62,
+	0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x3e, 0xbd, 0x32, 0x03, 0x3d, 0x88, 0x3e, 0x29, 0xa8, 0xbc,
+	0x3e, 0x58, 0x75, 0x52, 0x69, 0x9a, 0x7e, 0x79, 0x51, 0x62, 0x41, 0x41, 0x6a, 0x51, 0x31, 0x44,
+	0xbf, 0x52, 0x24, 0x97, 0x80, 0x2f, 0xd4, 0x68, 0x37, 0xa8, 0xc9, 0x42, 0xae, 0x5c, 0xfc, 0x30,
+	0x5b, 0xe2, 0x8b, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, 0x25, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x64,
+	0xa0, 0x56, 0xe8, 0xc1, 0x4c, 0xd3, 0x0b, 0x06, 0x4b, 0x87, 0x25, 0xe6, 0x94, 0xa6, 0x06, 0xf1,
+	0xc1, 0x34, 0x41, 0x04, 0x9d, 0x4e, 0x33, 0x72, 0x29, 0x25, 0xe7, 0xe7, 0xea, 0xe1, 0x77, 0xa1,
+	0x93, 0x28, 0xba, 0xfd, 0x01, 0x20, 0xc3, 0x03, 0x18, 0xa3, 0x5c, 0xa0, 0x1a, 0xd3, 0xf3, 0x73,
+	0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x56, 0xc3, 0x82, 0xa8,
+	0x20, 0xb3, 0x18, 0x57, 0x88, 0x59, 0x43, 0xa8, 0x45, 0x4c, 0xcc, 0xee, 0x8e, 0x8e, 0xab, 0x98,
+	0xe4, 0xdc, 0x21, 0x86, 0x39, 0xa6, 0x14, 0xeb, 0x41, 0x98, 0x20, 0x56, 0x98, 0x81, 0x9e, 0x33,
+	0x58, 0xd9, 0x29, 0x98, 0x82, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x82, 0x98, 0x30, 0x83, 0x18,
+	0x88, 0x82, 0x24, 0x36, 0xb0, 0xc5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcd, 0x1d, 0x10,
+	0x51, 0xa9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/metrics.pb.go b/googleapis/ads/googleads/v0/common/metrics.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..81942023c20b50043f55f31f053b48c9c919f461
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/metrics.pb.go
@@ -0,0 +1,707 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/metrics.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Metrics data.
+type Metrics struct {
+	// All conversions from interactions (as oppose to view through conversions)
+	// divided by the number of ad interactions.
+	AllConversionsFromInteractionsRate *wrappers.DoubleValue `protobuf:"bytes,65,opt,name=all_conversions_from_interactions_rate,json=allConversionsFromInteractionsRate,proto3" json:"all_conversions_from_interactions_rate,omitempty"`
+	// The total value of all conversions.
+	AllConversionsValue *wrappers.DoubleValue `protobuf:"bytes,66,opt,name=all_conversions_value,json=allConversionsValue,proto3" json:"all_conversions_value,omitempty"`
+	// The total number of conversions. This includes "Conversions" plus
+	// conversions that have their "Include in Conversions" setting unchecked.
+	AllConversions *wrappers.DoubleValue `protobuf:"bytes,7,opt,name=all_conversions,json=allConversions,proto3" json:"all_conversions,omitempty"`
+	// The value of all conversions divided by the total cost of ad interactions
+	// (such as clicks for text ads or views for video ads).
+	AllConversionsValuePerCost *wrappers.DoubleValue `protobuf:"bytes,62,opt,name=all_conversions_value_per_cost,json=allConversionsValuePerCost,proto3" json:"all_conversions_value_per_cost,omitempty"`
+	// The value of all conversions from interactions divided by the total number
+	// of interactions.
+	AllConversionsFromInteractionsValuePerInteraction *wrappers.DoubleValue `protobuf:"bytes,67,opt,name=all_conversions_from_interactions_value_per_interaction,json=allConversionsFromInteractionsValuePerInteraction,proto3" json:"all_conversions_from_interactions_value_per_interaction,omitempty"`
+	// The average amount you pay per interaction. This amount is the total cost
+	// of your ads divided by the total number of interactions.
+	AverageCost *wrappers.DoubleValue `protobuf:"bytes,8,opt,name=average_cost,json=averageCost,proto3" json:"average_cost,omitempty"`
+	// The total cost of all clicks divided by the total number of clicks
+	// received.
+	AverageCpc *wrappers.DoubleValue `protobuf:"bytes,9,opt,name=average_cpc,json=averageCpc,proto3" json:"average_cpc,omitempty"`
+	// Average cost-per-thousand impressions (CPM).
+	AverageCpm *wrappers.DoubleValue `protobuf:"bytes,10,opt,name=average_cpm,json=averageCpm,proto3" json:"average_cpm,omitempty"`
+	// The average amount you pay each time someone views your ad.
+	// The average CPV is defined by the total cost of all ad views divided by
+	// the number of views.
+	AverageCpv *wrappers.DoubleValue `protobuf:"bytes,11,opt,name=average_cpv,json=averageCpv,proto3" json:"average_cpv,omitempty"`
+	// Your ad's position relative to those of other advertisers.
+	AveragePosition *wrappers.DoubleValue `protobuf:"bytes,13,opt,name=average_position,json=averagePosition,proto3" json:"average_position,omitempty"`
+	// An indication on how other advertisers' Shopping ads for similar products
+	// are performing based on how often people who see their ad click on it.
+	BenchmarkCtr *wrappers.DoubleValue `protobuf:"bytes,77,opt,name=benchmark_ctr,json=benchmarkCtr,proto3" json:"benchmark_ctr,omitempty"`
+	// Percentage of clicks where the user only visited a single page on your
+	// site. Imported from Google Analytics.
+	BounceRate *wrappers.DoubleValue `protobuf:"bytes,15,opt,name=bounce_rate,json=bounceRate,proto3" json:"bounce_rate,omitempty"`
+	// The number of clicks.
+	Clicks *wrappers.Int64Value `protobuf:"bytes,19,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// The estimated percent of times that your ad was eligible to show
+	// on the Display Network but didn't because your budget was too low.
+	// Note: Content budget lost impression share is reported in the range of 0
+	// to 0.9. Any value above 0.9 is reported as 0.9001.
+	ContentBudgetLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,20,opt,name=content_budget_lost_impression_share,json=contentBudgetLostImpressionShare,proto3" json:"content_budget_lost_impression_share,omitempty"`
+	// The impressions you've received on the Display Network divided
+	// by the estimated number of impressions you were eligible to receive.
+	// Note: Content impression share is reported in the range of 0.1 to 1. Any
+	// value below 0.1 is reported as 0.0999.
+	ContentImpressionShare *wrappers.DoubleValue `protobuf:"bytes,21,opt,name=content_impression_share,json=contentImpressionShare,proto3" json:"content_impression_share,omitempty"`
+	// The last date/time a conversion tag for this conversion action successfully
+	// fired and was seen by Google Ads. This firing event may not have been the
+	// result of an attributable conversion (e.g. because the tag was fired from a
+	// browser that did not previously click an ad from an appropriate
+	// advertiser). The date/time is in the customer's time zone.
+	ConversionLastReceivedRequestDateTime *wrappers.StringValue `protobuf:"bytes,73,opt,name=conversion_last_received_request_date_time,json=conversionLastReceivedRequestDateTime,proto3" json:"conversion_last_received_request_date_time,omitempty"`
+	// The date of the most recent conversion for this conversion action. The date
+	// is in the customer's time zone.
+	ConversionLastConversionDate *wrappers.StringValue `protobuf:"bytes,74,opt,name=conversion_last_conversion_date,json=conversionLastConversionDate,proto3" json:"conversion_last_conversion_date,omitempty"`
+	// The estimated percentage of impressions on the Display Network
+	// that your ads didn't receive due to poor Ad Rank.
+	// Note: Content rank lost impression share is reported in the range of 0
+	// to 0.9. Any value above 0.9 is reported as 0.9001.
+	ContentRankLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,22,opt,name=content_rank_lost_impression_share,json=contentRankLostImpressionShare,proto3" json:"content_rank_lost_impression_share,omitempty"`
+	// Conversions from interactions divided by the number of ad interactions
+	// (such as clicks for text ads or views for video ads).
+	ConversionsFromInteractionsRate *wrappers.DoubleValue `protobuf:"bytes,69,opt,name=conversions_from_interactions_rate,json=conversionsFromInteractionsRate,proto3" json:"conversions_from_interactions_rate,omitempty"`
+	// The total value of conversions.
+	ConversionsValue *wrappers.DoubleValue `protobuf:"bytes,70,opt,name=conversions_value,json=conversionsValue,proto3" json:"conversions_value,omitempty"`
+	// The value of conversions divided by the cost of ad interactions.
+	ConversionsValuePerCost *wrappers.DoubleValue `protobuf:"bytes,71,opt,name=conversions_value_per_cost,json=conversionsValuePerCost,proto3" json:"conversions_value_per_cost,omitempty"`
+	// The value of conversions from interactions divided by the number of ad
+	// interactions.
+	ConversionsFromInteractionsValuePerInteraction *wrappers.DoubleValue `protobuf:"bytes,72,opt,name=conversions_from_interactions_value_per_interaction,json=conversionsFromInteractionsValuePerInteraction,proto3" json:"conversions_from_interactions_value_per_interaction,omitempty"`
+	// The number of conversions. This only includes conversion actions which have
+	// "Include in Conversions" checked.
+	Conversions *wrappers.DoubleValue `protobuf:"bytes,25,opt,name=conversions,proto3" json:"conversions,omitempty"`
+	// The sum of your cost-per-click (CPC) and cost-per-thousand impressions
+	// (CPM) costs during this period.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,26,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// The cost of ad interactions divided by all conversions.
+	CostPerAllConversions *wrappers.DoubleValue `protobuf:"bytes,68,opt,name=cost_per_all_conversions,json=costPerAllConversions,proto3" json:"cost_per_all_conversions,omitempty"`
+	// The cost of ad interactions divided by conversions.
+	CostPerConversion *wrappers.DoubleValue `protobuf:"bytes,28,opt,name=cost_per_conversion,json=costPerConversion,proto3" json:"cost_per_conversion,omitempty"`
+	// Conversions from when a customer clicks on a Google Ads ad on one device,
+	// then converts on a different device or browser.
+	// Cross-device conversions are already included in all_conversions.
+	CrossDeviceConversions *wrappers.DoubleValue `protobuf:"bytes,29,opt,name=cross_device_conversions,json=crossDeviceConversions,proto3" json:"cross_device_conversions,omitempty"`
+	// The number of clicks your ad receives (Clicks) divided by the number
+	// of times your ad is shown (Impressions).
+	Ctr *wrappers.DoubleValue `protobuf:"bytes,30,opt,name=ctr,proto3" json:"ctr,omitempty"`
+	// How often people engage with your ad after it's shown to them. This is the
+	// number of ad expansions divided by the number of times your ad is shown.
+	EngagementRate *wrappers.DoubleValue `protobuf:"bytes,31,opt,name=engagement_rate,json=engagementRate,proto3" json:"engagement_rate,omitempty"`
+	// The number of engagements.
+	// An engagement occurs when a viewer expands your Lightbox ad. Also, in the
+	// future, other ad types may support engagement metrics.
+	Engagements *wrappers.Int64Value `protobuf:"bytes,32,opt,name=engagements,proto3" json:"engagements,omitempty"`
+	// Average lead value of hotel.
+	HotelAverageLeadValueMicros *wrappers.DoubleValue `protobuf:"bytes,75,opt,name=hotel_average_lead_value_micros,json=hotelAverageLeadValueMicros,proto3" json:"hotel_average_lead_value_micros,omitempty"`
+	// Count of how often your ad has appeared on a search results page or
+	// website on the Google Network.
+	Impressions *wrappers.Int64Value `protobuf:"bytes,37,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// How often people interact with your ad after it is shown to them.
+	// This is the number of interactions divided by the number of times your ad
+	// is shown.
+	InteractionRate *wrappers.DoubleValue `protobuf:"bytes,38,opt,name=interaction_rate,json=interactionRate,proto3" json:"interaction_rate,omitempty"`
+	// The number of interactions.
+	// An interaction is the main user action associated with an ad format-clicks
+	// for text and shopping ads, views for video ads, and so on.
+	Interactions *wrappers.Int64Value `protobuf:"bytes,39,opt,name=interactions,proto3" json:"interactions,omitempty"`
+	// The percentage of clicks filtered out of your total number of clicks
+	// (filtered + non-filtered clicks) during the reporting period.
+	InvalidClickRate *wrappers.DoubleValue `protobuf:"bytes,40,opt,name=invalid_click_rate,json=invalidClickRate,proto3" json:"invalid_click_rate,omitempty"`
+	// Number of clicks Google considers illegitimate and doesn't charge you for.
+	InvalidClicks *wrappers.Int64Value `protobuf:"bytes,41,opt,name=invalid_clicks,json=invalidClicks,proto3" json:"invalid_clicks,omitempty"`
+	// Percentage of first-time sessions (from people who had never visited your
+	// site before). Imported from Google Analytics.
+	PercentNewVisitors *wrappers.DoubleValue `protobuf:"bytes,42,opt,name=percent_new_visitors,json=percentNewVisitors,proto3" json:"percent_new_visitors,omitempty"`
+	// Number of offline phone calls.
+	PhoneCalls *wrappers.Int64Value `protobuf:"bytes,43,opt,name=phone_calls,json=phoneCalls,proto3" json:"phone_calls,omitempty"`
+	// Number of offline phone impressions.
+	PhoneImpressions *wrappers.Int64Value `protobuf:"bytes,44,opt,name=phone_impressions,json=phoneImpressions,proto3" json:"phone_impressions,omitempty"`
+	// Number of phone calls received (phone_calls) divided by the number of
+	// times your phone number is shown (phone_impressions).
+	PhoneThroughRate *wrappers.DoubleValue `protobuf:"bytes,45,opt,name=phone_through_rate,json=phoneThroughRate,proto3" json:"phone_through_rate,omitempty"`
+	// Your clickthrough rate (Ctr) divided by the average clickthrough rate of
+	// all advertisers on the websites that show your ads. Measures how your ads
+	// perform on Display Network sites compared to other ads on the same sites.
+	RelativeCtr *wrappers.DoubleValue `protobuf:"bytes,46,opt,name=relative_ctr,json=relativeCtr,proto3" json:"relative_ctr,omitempty"`
+	// The percentage of the customer's Shopping ad impressions that are shown in
+	// the most prominent Shopping position. See
+	// <a href="https://support.google.com/adwords/answer/7501826">this Merchant
+	// Center article</a> for details. Any value below 0.1 is reported as 0.0999.
+	SearchAbsoluteTopImpressionShare *wrappers.DoubleValue `protobuf:"bytes,78,opt,name=search_absolute_top_impression_share,json=searchAbsoluteTopImpressionShare,proto3" json:"search_absolute_top_impression_share,omitempty"`
+	// The estimated percent of times that your ad was eligible to show on the
+	// Search Network but didn't because your budget was too low. Note: Search
+	// budget lost impression share is reported in the range of 0 to 0.9. Any
+	// value above 0.9 is reported as 0.9001.
+	SearchBudgetLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,47,opt,name=search_budget_lost_impression_share,json=searchBudgetLostImpressionShare,proto3" json:"search_budget_lost_impression_share,omitempty"`
+	// The impressions you've received divided by the estimated number of
+	// impressions you were eligible to receive on the Search Network for search
+	// terms that matched your keywords exactly (or were close variants of your
+	// keyword), regardless of your keyword match types. Note: Search exact match
+	// impression share is reported in the range of 0.1 to 1. Any value below 0.1
+	// is reported as 0.0999.
+	SearchExactMatchImpressionShare *wrappers.DoubleValue `protobuf:"bytes,49,opt,name=search_exact_match_impression_share,json=searchExactMatchImpressionShare,proto3" json:"search_exact_match_impression_share,omitempty"`
+	// The impressions you've received on the Search Network divided
+	// by the estimated number of impressions you were eligible to receive.
+	// Note: Search impression share is reported in the range of 0.1 to 1. Any
+	// value below 0.1 is reported as 0.0999.
+	SearchImpressionShare *wrappers.DoubleValue `protobuf:"bytes,50,opt,name=search_impression_share,json=searchImpressionShare,proto3" json:"search_impression_share,omitempty"`
+	// The estimated percentage of impressions on the Search Network
+	// that your ads didn't receive due to poor Ad Rank.
+	// Note: Search rank lost impression share is reported in the range of 0 to
+	// 0.9. Any value above 0.9 is reported as 0.9001.
+	SearchRankLostImpressionShare *wrappers.DoubleValue `protobuf:"bytes,51,opt,name=search_rank_lost_impression_share,json=searchRankLostImpressionShare,proto3" json:"search_rank_lost_impression_share,omitempty"`
+	// The value of all conversions divided by the number of all conversions.
+	ValuePerAllConversions *wrappers.DoubleValue `protobuf:"bytes,52,opt,name=value_per_all_conversions,json=valuePerAllConversions,proto3" json:"value_per_all_conversions,omitempty"`
+	// The value of conversions divided by the number of conversions.
+	ValuePerConversion *wrappers.DoubleValue `protobuf:"bytes,53,opt,name=value_per_conversion,json=valuePerConversion,proto3" json:"value_per_conversion,omitempty"`
+	// Percentage of impressions where the viewer watched all of your video.
+	VideoQuartile_100Rate *wrappers.DoubleValue `protobuf:"bytes,54,opt,name=video_quartile_100_rate,json=videoQuartile100Rate,proto3" json:"video_quartile_100_rate,omitempty"`
+	// Percentage of impressions where the viewer watched 25% of your video.
+	VideoQuartile_25Rate *wrappers.DoubleValue `protobuf:"bytes,55,opt,name=video_quartile_25_rate,json=videoQuartile25Rate,proto3" json:"video_quartile_25_rate,omitempty"`
+	// Percentage of impressions where the viewer watched 50% of your video.
+	VideoQuartile_50Rate *wrappers.DoubleValue `protobuf:"bytes,56,opt,name=video_quartile_50_rate,json=videoQuartile50Rate,proto3" json:"video_quartile_50_rate,omitempty"`
+	// Percentage of impressions where the viewer watched 75% of your video.
+	VideoQuartile_75Rate *wrappers.DoubleValue `protobuf:"bytes,57,opt,name=video_quartile_75_rate,json=videoQuartile75Rate,proto3" json:"video_quartile_75_rate,omitempty"`
+	// The number of views your TrueView video ad receives divided by its number
+	// of impressions, including thumbnail impressions for TrueView in-display
+	// ads.
+	VideoViewRate *wrappers.DoubleValue `protobuf:"bytes,58,opt,name=video_view_rate,json=videoViewRate,proto3" json:"video_view_rate,omitempty"`
+	// The number of times your video ads were viewed.
+	VideoViews *wrappers.Int64Value `protobuf:"bytes,59,opt,name=video_views,json=videoViews,proto3" json:"video_views,omitempty"`
+	// The total number of view-through conversions.
+	// These happen when a customer sees an image or rich media ad, then later
+	// completes a conversion on your site without interacting with (e.g.,
+	// clicking on) another ad.
+	ViewThroughConversions *wrappers.Int64Value `protobuf:"bytes,60,opt,name=view_through_conversions,json=viewThroughConversions,proto3" json:"view_through_conversions,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}             `json:"-"`
+	XXX_unrecognized       []byte               `json:"-"`
+	XXX_sizecache          int32                `json:"-"`
+}
+
+func (m *Metrics) Reset()         { *m = Metrics{} }
+func (m *Metrics) String() string { return proto.CompactTextString(m) }
+func (*Metrics) ProtoMessage()    {}
+func (*Metrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_metrics_7c5dfe462d366304, []int{0}
+}
+func (m *Metrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Metrics.Unmarshal(m, b)
+}
+func (m *Metrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Metrics.Marshal(b, m, deterministic)
+}
+func (dst *Metrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Metrics.Merge(dst, src)
+}
+func (m *Metrics) XXX_Size() int {
+	return xxx_messageInfo_Metrics.Size(m)
+}
+func (m *Metrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_Metrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Metrics proto.InternalMessageInfo
+
+func (m *Metrics) GetAllConversionsFromInteractionsRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromInteractionsRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsValue
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsValuePerCost() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsValuePerCost
+	}
+	return nil
+}
+
+func (m *Metrics) GetAllConversionsFromInteractionsValuePerInteraction() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AllConversionsFromInteractionsValuePerInteraction
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCost() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCost
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCpc() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCpc
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCpm() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCpm
+	}
+	return nil
+}
+
+func (m *Metrics) GetAverageCpv() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AverageCpv
+	}
+	return nil
+}
+
+func (m *Metrics) GetAveragePosition() *wrappers.DoubleValue {
+	if m != nil {
+		return m.AveragePosition
+	}
+	return nil
+}
+
+func (m *Metrics) GetBenchmarkCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BenchmarkCtr
+	}
+	return nil
+}
+
+func (m *Metrics) GetBounceRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BounceRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *Metrics) GetContentBudgetLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ContentBudgetLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetContentImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ContentImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionLastReceivedRequestDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionLastReceivedRequestDateTime
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionLastConversionDate() *wrappers.StringValue {
+	if m != nil {
+		return m.ConversionLastConversionDate
+	}
+	return nil
+}
+
+func (m *Metrics) GetContentRankLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ContentRankLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsFromInteractionsRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsFromInteractionsRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsValue
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsValuePerCost() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsValuePerCost
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversionsFromInteractionsValuePerInteraction() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ConversionsFromInteractionsValuePerInteraction
+	}
+	return nil
+}
+
+func (m *Metrics) GetConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Conversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *Metrics) GetCostPerAllConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CostPerAllConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetCostPerConversion() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CostPerConversion
+	}
+	return nil
+}
+
+func (m *Metrics) GetCrossDeviceConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.CrossDeviceConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Ctr
+	}
+	return nil
+}
+
+func (m *Metrics) GetEngagementRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.EngagementRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetEngagements() *wrappers.Int64Value {
+	if m != nil {
+		return m.Engagements
+	}
+	return nil
+}
+
+func (m *Metrics) GetHotelAverageLeadValueMicros() *wrappers.DoubleValue {
+	if m != nil {
+		return m.HotelAverageLeadValueMicros
+	}
+	return nil
+}
+
+func (m *Metrics) GetImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetInteractionRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.InteractionRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetInteractions() *wrappers.Int64Value {
+	if m != nil {
+		return m.Interactions
+	}
+	return nil
+}
+
+func (m *Metrics) GetInvalidClickRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.InvalidClickRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetInvalidClicks() *wrappers.Int64Value {
+	if m != nil {
+		return m.InvalidClicks
+	}
+	return nil
+}
+
+func (m *Metrics) GetPercentNewVisitors() *wrappers.DoubleValue {
+	if m != nil {
+		return m.PercentNewVisitors
+	}
+	return nil
+}
+
+func (m *Metrics) GetPhoneCalls() *wrappers.Int64Value {
+	if m != nil {
+		return m.PhoneCalls
+	}
+	return nil
+}
+
+func (m *Metrics) GetPhoneImpressions() *wrappers.Int64Value {
+	if m != nil {
+		return m.PhoneImpressions
+	}
+	return nil
+}
+
+func (m *Metrics) GetPhoneThroughRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.PhoneThroughRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetRelativeCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.RelativeCtr
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchAbsoluteTopImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchAbsoluteTopImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchBudgetLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchBudgetLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchExactMatchImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchExactMatchImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetSearchRankLostImpressionShare() *wrappers.DoubleValue {
+	if m != nil {
+		return m.SearchRankLostImpressionShare
+	}
+	return nil
+}
+
+func (m *Metrics) GetValuePerAllConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ValuePerAllConversions
+	}
+	return nil
+}
+
+func (m *Metrics) GetValuePerConversion() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ValuePerConversion
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_100Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_100Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_25Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_25Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_50Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_50Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoQuartile_75Rate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoQuartile_75Rate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoViewRate() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoViewRate
+	}
+	return nil
+}
+
+func (m *Metrics) GetVideoViews() *wrappers.Int64Value {
+	if m != nil {
+		return m.VideoViews
+	}
+	return nil
+}
+
+func (m *Metrics) GetViewThroughConversions() *wrappers.Int64Value {
+	if m != nil {
+		return m.ViewThroughConversions
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Metrics)(nil), "google.ads.googleads.v0.common.Metrics")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/metrics.proto", fileDescriptor_metrics_7c5dfe462d366304)
+}
+
+var fileDescriptor_metrics_7c5dfe462d366304 = []byte{
+	// 1314 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x98, 0xed, 0x52, 0xdb, 0x46,
+	0x17, 0xc7, 0x87, 0x64, 0x26, 0x79, 0x9e, 0x35, 0x84, 0x44, 0x21, 0x44, 0x21, 0x09, 0x49, 0xf3,
+	0xd6, 0x34, 0x4d, 0x65, 0x03, 0x21, 0xb4, 0xcd, 0xdb, 0x18, 0x93, 0x10, 0x52, 0x60, 0x08, 0xa1,
+	0x74, 0xda, 0x61, 0x66, 0xbb, 0x5e, 0x9f, 0xd8, 0x2a, 0x92, 0x56, 0xd9, 0x5d, 0x8b, 0xde, 0x42,
+	0xbf, 0xf5, 0x1a, 0xfa, 0xb1, 0x97, 0xd1, 0x8f, 0xbd, 0x85, 0xde, 0x4c, 0x67, 0x5f, 0x6c, 0xc9,
+	0x32, 0xc6, 0x4b, 0x3f, 0x21, 0xc4, 0xf9, 0xff, 0xfe, 0x47, 0xab, 0xdd, 0x73, 0x0e, 0x42, 0x8f,
+	0xdb, 0x8c, 0xb5, 0x23, 0xa8, 0x92, 0x96, 0xa8, 0x9a, 0x4b, 0x75, 0x95, 0xd5, 0xaa, 0x94, 0xc5,
+	0x31, 0x4b, 0xaa, 0x31, 0x48, 0x1e, 0x52, 0x11, 0xa4, 0x9c, 0x49, 0xe6, 0xcd, 0x9b, 0x90, 0x80,
+	0xb4, 0x44, 0xd0, 0x8f, 0x0e, 0xb2, 0x5a, 0x60, 0xa2, 0xe7, 0xec, 0xdf, 0xab, 0x3a, 0xba, 0xd9,
+	0xfd, 0x58, 0x3d, 0xe2, 0x24, 0x4d, 0x81, 0x5b, 0xfd, 0x9d, 0x7f, 0xee, 0xa2, 0xf3, 0x5b, 0x86,
+	0xe8, 0xa5, 0xe8, 0x01, 0x89, 0x22, 0x4c, 0x59, 0x92, 0x01, 0x17, 0x21, 0x4b, 0x04, 0xfe, 0xc8,
+	0x59, 0x8c, 0xc3, 0x44, 0x02, 0x27, 0x54, 0xea, 0x3b, 0x9c, 0x48, 0xf0, 0xeb, 0xb7, 0x27, 0x1e,
+	0x56, 0x16, 0x6f, 0x58, 0xc7, 0xa0, 0x07, 0x0f, 0xd6, 0x58, 0xb7, 0x19, 0xc1, 0x3e, 0x89, 0xba,
+	0xb0, 0x7b, 0x87, 0x44, 0x51, 0x23, 0x47, 0xbd, 0xe1, 0x2c, 0xde, 0x28, 0x80, 0x76, 0x89, 0x04,
+	0x6f, 0x07, 0x5d, 0x29, 0x3b, 0x66, 0x4a, 0xec, 0xaf, 0x3a, 0x18, 0x5c, 0x1e, 0x34, 0xd0, 0x37,
+	0xbd, 0xd7, 0x68, 0xba, 0x44, 0xf4, 0xcf, 0x3b, 0xb0, 0x2e, 0x0c, 0xb2, 0xbc, 0x9f, 0xd1, 0xfc,
+	0xb1, 0x89, 0xe1, 0x14, 0x38, 0xa6, 0x4c, 0x48, 0xff, 0xa5, 0x03, 0x75, 0xee, 0x98, 0x0c, 0x77,
+	0x80, 0x37, 0x98, 0x90, 0xde, 0xef, 0x13, 0x68, 0x65, 0xfc, 0x6a, 0xe7, 0xa6, 0x85, 0xdb, 0x7e,
+	0xc3, 0xc1, 0x7b, 0xe1, 0xe4, 0xe5, 0xef, 0xe5, 0x52, 0xb8, 0xe7, 0xbd, 0x42, 0x93, 0x24, 0x03,
+	0x4e, 0xda, 0x60, 0x1e, 0xf1, 0x7f, 0x0e, 0x36, 0x15, 0xab, 0xd0, 0xcf, 0xf4, 0x02, 0x55, 0xfa,
+	0x80, 0x94, 0xfa, 0xff, 0x77, 0xd0, 0xa3, 0x9e, 0x3e, 0xa5, 0x83, 0xf2, 0xd8, 0x47, 0xa7, 0x92,
+	0xc7, 0x83, 0xf2, 0xcc, 0xaf, 0x9c, 0x4a, 0x9e, 0x79, 0xeb, 0xe8, 0x62, 0x4f, 0x9e, 0x32, 0x11,
+	0xea, 0x85, 0x9e, 0x72, 0x60, 0x4c, 0x5b, 0xd5, 0x8e, 0x15, 0x79, 0x75, 0x34, 0xd5, 0x84, 0x84,
+	0x76, 0x62, 0xc2, 0x0f, 0x31, 0x95, 0xdc, 0xdf, 0x72, 0xa0, 0x4c, 0xf6, 0x25, 0x0d, 0xc9, 0xd5,
+	0xa3, 0x34, 0x59, 0x37, 0xa1, 0x60, 0x8e, 0xdb, 0xb4, 0xcb, 0xa3, 0x18, 0x81, 0x3e, 0x56, 0x4b,
+	0xe8, 0x1c, 0x8d, 0x42, 0x7a, 0x28, 0xfc, 0xcb, 0x5a, 0x79, 0x7d, 0x48, 0xb9, 0x91, 0xc8, 0xa7,
+	0x4f, 0x8c, 0xd0, 0x86, 0x7a, 0x11, 0xba, 0x47, 0x59, 0x22, 0x21, 0x91, 0xb8, 0xd9, 0x6d, 0xb5,
+	0x41, 0xe2, 0x88, 0x09, 0x89, 0xc3, 0x38, 0xe5, 0x20, 0xd4, 0x1e, 0xc2, 0xa2, 0x43, 0x38, 0xf8,
+	0x33, 0x0e, 0xc9, 0xdc, 0xb6, 0xa4, 0x55, 0x0d, 0xda, 0x64, 0x42, 0x6e, 0xf4, 0x31, 0x1f, 0x14,
+	0xc5, 0xdb, 0x47, 0x7e, 0xcf, 0x6d, 0xc8, 0xe1, 0x8a, 0x83, 0xc3, 0xac, 0x55, 0x97, 0xb9, 0x47,
+	0xe8, 0x51, 0x7e, 0xa2, 0x70, 0x44, 0x84, 0xc4, 0x1c, 0x28, 0x84, 0x19, 0xb4, 0x30, 0x87, 0x4f,
+	0x5d, 0x10, 0x12, 0xb7, 0x88, 0x04, 0x2c, 0xc3, 0x18, 0xfc, 0x8d, 0x11, 0x4e, 0x1f, 0x24, 0x0f,
+	0x93, 0xb6, 0x71, 0xba, 0x9f, 0xf3, 0x36, 0x89, 0x90, 0xbb, 0x96, 0xb6, 0x6b, 0x60, 0x6b, 0x44,
+	0xc2, 0x5e, 0x18, 0x83, 0x47, 0xd1, 0xad, 0xb2, 0x71, 0xe1, 0x77, 0x65, 0xe9, 0xbf, 0x73, 0x70,
+	0xbb, 0x31, 0xe8, 0x96, 0x9f, 0x60, 0x65, 0xe4, 0x75, 0xd0, 0x9d, 0xde, 0xaa, 0x71, 0x92, 0x1c,
+	0x8e, 0x78, 0x43, 0xb3, 0x0e, 0xeb, 0x37, 0x6f, 0x39, 0xbb, 0x24, 0x39, 0x3c, 0xee, 0xfd, 0x84,
+	0xda, 0x69, 0x5c, 0x1f, 0x78, 0xed, 0xe0, 0x54, 0x58, 0x96, 0xe3, 0x9b, 0xc0, 0x06, 0xba, 0x34,
+	0xdc, 0x00, 0xde, 0x38, 0x90, 0x2f, 0xd2, 0x72, 0xf5, 0xff, 0x11, 0xcd, 0x9d, 0x50, 0xb2, 0xd7,
+	0x1d, 0x98, 0x57, 0xe9, 0x88, 0x7a, 0xfd, 0xdb, 0x04, 0x5a, 0xfa, 0x2f, 0xb5, 0xfa, 0xad, 0x83,
+	0x69, 0x40, 0x4f, 0x57, 0xa8, 0x5f, 0xa2, 0x4a, 0xb1, 0xc1, 0x5d, 0x73, 0xa9, 0xd3, 0x05, 0x81,
+	0xf7, 0x5c, 0xe9, 0x85, 0xc4, 0x71, 0x48, 0x39, 0x13, 0xfe, 0xdc, 0xf8, 0x22, 0x81, 0x54, 0xfc,
+	0x96, 0x0e, 0xf7, 0xbe, 0x57, 0x47, 0x57, 0x48, 0xfd, 0xa4, 0xe5, 0x5e, 0xbb, 0xe6, 0x90, 0xca,
+	0x15, 0xa5, 0xde, 0x01, 0x5e, 0x1f, 0x6c, 0xb9, 0x9b, 0xe8, 0x72, 0x1f, 0x9b, 0x23, 0xfd, 0x1b,
+	0x0e, 0xc4, 0x4b, 0x96, 0x98, 0xe3, 0x74, 0x7d, 0xe1, 0x4c, 0x08, 0xdc, 0x82, 0x2c, 0xa4, 0x30,
+	0x90, 0xe4, 0x4d, 0xa7, 0xfa, 0xa2, 0xd4, 0x6b, 0x5a, 0x5c, 0xcc, 0x32, 0x40, 0x67, 0x55, 0x49,
+	0x9f, 0x77, 0x40, 0xa8, 0x40, 0x35, 0x8f, 0x40, 0xd2, 0x26, 0x6d, 0x88, 0xcd, 0xa1, 0x95, 0xe0,
+	0xdf, 0x72, 0x99, 0x47, 0x72, 0x91, 0x3e, 0x23, 0x2f, 0x50, 0x25, 0xbf, 0x23, 0xfc, 0xdb, 0xe3,
+	0xdf, 0x58, 0x31, 0xde, 0x6b, 0xa2, 0x5b, 0x1d, 0x26, 0x21, 0xc2, 0xbd, 0x0e, 0xa7, 0xc6, 0x44,
+	0xbb, 0x61, 0xed, 0x26, 0xf8, 0xce, 0x21, 0xab, 0xeb, 0x1a, 0x52, 0x37, 0x8c, 0x4d, 0x20, 0x2d,
+	0x7d, 0xdb, 0x6e, 0x8b, 0x17, 0xa8, 0x92, 0x57, 0x22, 0xe1, 0xdf, 0x77, 0x48, 0xb1, 0x10, 0xaf,
+	0xda, 0x6f, 0xe1, 0xd8, 0x98, 0x95, 0x7a, 0xe0, 0xd2, 0x7e, 0x0b, 0x2a, 0xbd, 0x54, 0xaf, 0xd0,
+	0x64, 0xf1, 0x58, 0xfa, 0x9f, 0x8f, 0x4f, 0x64, 0x40, 0xe0, 0xbd, 0x43, 0x5e, 0x98, 0x64, 0x24,
+	0x0a, 0x5b, 0x58, 0xb7, 0x46, 0x93, 0xcb, 0x43, 0x97, 0x82, 0x64, 0x75, 0x0d, 0x25, 0xd3, 0xc9,
+	0xac, 0xa2, 0x0b, 0x03, 0x2c, 0xe1, 0x7f, 0x31, 0x3e, 0x9d, 0xa9, 0x22, 0x46, 0x78, 0xdb, 0x68,
+	0x26, 0x05, 0x4e, 0xd5, 0xfe, 0x49, 0xe0, 0x08, 0x67, 0xa1, 0x08, 0x25, 0xe3, 0xc2, 0x7f, 0xe4,
+	0x90, 0x91, 0x67, 0x95, 0xdb, 0x70, 0xb4, 0x6f, 0x75, 0xea, 0xf4, 0xa7, 0x1d, 0x96, 0x00, 0xa6,
+	0x24, 0x8a, 0x84, 0xff, 0xa5, 0xc3, 0xe9, 0xd7, 0xf1, 0x0d, 0x15, 0xee, 0xbd, 0x45, 0x97, 0x8c,
+	0xba, 0xf8, 0xb2, 0x1f, 0x8f, 0x67, 0x5c, 0xd4, 0xaa, 0x8d, 0xc2, 0x1b, 0x7f, 0x87, 0x3c, 0x43,
+	0x92, 0x1d, 0xce, 0xba, 0xed, 0x8e, 0x59, 0xe7, 0xaf, 0x5c, 0xd6, 0x59, 0xeb, 0xf6, 0x8c, 0xac,
+	0xf7, 0xd2, 0x39, 0x44, 0x44, 0x86, 0x19, 0xe8, 0x91, 0x2b, 0x70, 0x29, 0x89, 0x3d, 0x85, 0x9a,
+	0xb8, 0x22, 0x74, 0x4f, 0x00, 0xe1, 0xb4, 0x83, 0x49, 0x53, 0xb0, 0xa8, 0xab, 0x26, 0x04, 0x96,
+	0x0e, 0xf7, 0xd6, 0x6d, 0x97, 0xe9, 0xc7, 0x90, 0xea, 0x16, 0xb4, 0xc7, 0xd2, 0x72, 0x77, 0xfd,
+	0x05, 0xdd, 0xb5, 0x6e, 0x27, 0x8e, 0x5a, 0x55, 0x97, 0xf6, 0x6a, 0x40, 0xa3, 0x27, 0xad, 0xdc,
+	0x0b, 0x7e, 0x25, 0x54, 0xe2, 0x98, 0x48, 0xda, 0x19, 0xf6, 0x5a, 0x70, 0xf7, 0x7a, 0xad, 0x38,
+	0x5b, 0x0a, 0x53, 0xf6, 0xda, 0x43, 0x57, 0xad, 0xd7, 0x10, 0x7f, 0xd1, 0xa5, 0x33, 0x18, 0x71,
+	0x99, 0xfa, 0x11, 0x7d, 0x66, 0xa9, 0x27, 0x0c, 0x3d, 0x4b, 0x0e, 0xfc, 0x9b, 0x06, 0x33, 0x6a,
+	0xe6, 0xf9, 0x01, 0x5d, 0xcb, 0x7b, 0x78, 0xb9, 0xb3, 0x3d, 0x71, 0x69, 0x1a, 0x99, 0x6d, 0xd6,
+	0xa5, 0xd6, 0xb6, 0x8d, 0x66, 0x8a, 0xa3, 0x48, 0xbf, 0xb7, 0x2d, 0xbb, 0x9c, 0xe0, 0xac, 0x3f,
+	0x85, 0xf4, 0x9b, 0xdb, 0x07, 0x74, 0x35, 0x0b, 0x5b, 0xc0, 0xf0, 0xa7, 0x2e, 0xe1, 0x32, 0x8c,
+	0x00, 0x2f, 0xd4, 0x6a, 0xe6, 0xf8, 0x3c, 0x75, 0x40, 0xce, 0x68, 0xf1, 0x7b, 0xab, 0x5d, 0xa8,
+	0xd5, 0xf4, 0x11, 0x7a, 0x8f, 0x66, 0x4b, 0xd0, 0xc5, 0x65, 0xc3, 0x5c, 0x71, 0xf9, 0x67, 0x7c,
+	0x80, 0xb9, 0xb8, 0x3c, 0x02, 0xb9, 0x6c, 0xd3, 0xfc, 0xfa, 0xd4, 0xc8, 0xe5, 0x51, 0x59, 0xae,
+	0xd8, 0x2c, 0xbf, 0x39, 0x35, 0x72, 0xc5, 0x64, 0xb9, 0x86, 0xa6, 0x0d, 0x32, 0x0b, 0xe1, 0xc8,
+	0xb0, 0xbe, 0x75, 0x60, 0x4d, 0x69, 0xd1, 0x7e, 0x08, 0x47, 0x9a, 0xf2, 0x1c, 0x55, 0x72, 0x8a,
+	0xf0, 0x9f, 0x39, 0x54, 0xd5, 0x3e, 0x40, 0xcf, 0x54, 0xda, 0xbd, 0x57, 0x0a, 0x8b, 0x3b, 0xef,
+	0xf9, 0x78, 0xd4, 0xac, 0x12, 0xdb, 0x7a, 0x58, 0xd8, 0x78, 0xab, 0x7f, 0x4d, 0xa8, 0x31, 0x3e,
+	0x0e, 0x4e, 0xfe, 0x48, 0xb4, 0x3a, 0x69, 0xbf, 0x00, 0xed, 0x28, 0xf4, 0xce, 0xc4, 0x4f, 0x6b,
+	0x36, 0xbe, 0xcd, 0x22, 0x92, 0xb4, 0x03, 0xc6, 0xdb, 0xd5, 0x36, 0x24, 0xda, 0xb8, 0xf7, 0x49,
+	0x2a, 0x0d, 0xc5, 0xa8, 0x2f, 0x54, 0xcf, 0xcc, 0x8f, 0x3f, 0xce, 0x9c, 0x5d, 0xaf, 0xd7, 0xff,
+	0x3c, 0x33, 0xbf, 0x6e, 0x60, 0xf5, 0x96, 0x08, 0xcc, 0xa5, 0xba, 0xda, 0xaf, 0x05, 0x0d, 0x1d,
+	0xf6, 0x77, 0x2f, 0xe0, 0xa0, 0xde, 0x12, 0x07, 0xfd, 0x80, 0x83, 0xfd, 0xda, 0x81, 0x09, 0x68,
+	0x9e, 0xd3, 0xc6, 0x4b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x6f, 0x5e, 0x32, 0x19, 0x13,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/policy.pb.go b/googleapis/ads/googleads/v0/common/policy.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1fc027dae74d4a845bce4e37d5dde6e9db7cd48b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/policy.pb.go
@@ -0,0 +1,1098 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/policy.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Key of the violation. The key is used for referring to a violation
+// when filing an exemption request.
+type PolicyViolationKey struct {
+	// Unique ID of the violated policy.
+	PolicyName *wrappers.StringValue `protobuf:"bytes,1,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"`
+	// The text that violates the policy if specified.
+	// Otherwise, refers to the policy in general
+	// (e.g., when requesting to be exempt from the whole policy).
+	// If not specified for criterion exemptions, the whole policy is implied.
+	// Must be specified for ad exemptions.
+	ViolatingText        *wrappers.StringValue `protobuf:"bytes,2,opt,name=violating_text,json=violatingText,proto3" json:"violating_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PolicyViolationKey) Reset()         { *m = PolicyViolationKey{} }
+func (m *PolicyViolationKey) String() string { return proto.CompactTextString(m) }
+func (*PolicyViolationKey) ProtoMessage()    {}
+func (*PolicyViolationKey) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{0}
+}
+func (m *PolicyViolationKey) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyViolationKey.Unmarshal(m, b)
+}
+func (m *PolicyViolationKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyViolationKey.Marshal(b, m, deterministic)
+}
+func (dst *PolicyViolationKey) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyViolationKey.Merge(dst, src)
+}
+func (m *PolicyViolationKey) XXX_Size() int {
+	return xxx_messageInfo_PolicyViolationKey.Size(m)
+}
+func (m *PolicyViolationKey) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyViolationKey.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyViolationKey proto.InternalMessageInfo
+
+func (m *PolicyViolationKey) GetPolicyName() *wrappers.StringValue {
+	if m != nil {
+		return m.PolicyName
+	}
+	return nil
+}
+
+func (m *PolicyViolationKey) GetViolatingText() *wrappers.StringValue {
+	if m != nil {
+		return m.ViolatingText
+	}
+	return nil
+}
+
+// Parameter for controlling how policy checking is done.
+type PolicyValidationParameter struct {
+	// The list of policy topics that should not cause a PolicyFindingError to
+	// be reported. This field is currently only compatible with Enhanced Text Ad.
+	// It corresponds to the PolicyTopicEntry.topic field.
+	//
+	// Resources violating these policies will be saved, but will not be eligible
+	// to serve. They may begin serving at a later time due to a change in
+	// policies, re-review of the resource, or a change in advertiser
+	// certificates.
+	IgnorablePolicyTopics []*wrappers.StringValue `protobuf:"bytes,1,rep,name=ignorable_policy_topics,json=ignorablePolicyTopics,proto3" json:"ignorable_policy_topics,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}                `json:"-"`
+	XXX_unrecognized      []byte                  `json:"-"`
+	XXX_sizecache         int32                   `json:"-"`
+}
+
+func (m *PolicyValidationParameter) Reset()         { *m = PolicyValidationParameter{} }
+func (m *PolicyValidationParameter) String() string { return proto.CompactTextString(m) }
+func (*PolicyValidationParameter) ProtoMessage()    {}
+func (*PolicyValidationParameter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{1}
+}
+func (m *PolicyValidationParameter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyValidationParameter.Unmarshal(m, b)
+}
+func (m *PolicyValidationParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyValidationParameter.Marshal(b, m, deterministic)
+}
+func (dst *PolicyValidationParameter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyValidationParameter.Merge(dst, src)
+}
+func (m *PolicyValidationParameter) XXX_Size() int {
+	return xxx_messageInfo_PolicyValidationParameter.Size(m)
+}
+func (m *PolicyValidationParameter) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyValidationParameter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyValidationParameter proto.InternalMessageInfo
+
+func (m *PolicyValidationParameter) GetIgnorablePolicyTopics() []*wrappers.StringValue {
+	if m != nil {
+		return m.IgnorablePolicyTopics
+	}
+	return nil
+}
+
+// Policy finding attached to a resource (e.g. alcohol policy associated with
+// a site that sells alcohol).
+//
+// Each PolicyTopicEntry has a topic that indicates the specific ads policy
+// the entry is about and a type to indicate the effect that the entry will have
+// on serving. It may optionally have one or more evidences that indicate the
+// reason for the finding. It may also optionally have one or more constraints
+// that provide details about how serving may be restricted.
+//
+// Next tag: 5
+type PolicyTopicEntry struct {
+	// Policy topic this finding refers to. For example, "ALCOHOL",
+	// "TRADEMARKS_IN_AD_TEXT", or "DESTINATION_NOT_WORKING". The set of possible
+	// policy topics is not fixed for a particular API version and may change
+	// at any time.
+	Topic *wrappers.StringValue `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
+	// Describes the negative or positive effect this policy will have on serving.
+	Type enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType `protobuf:"varint,2,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType" json:"type,omitempty"`
+	// Additional information that explains policy finding
+	// (e.g. the brand name for a trademark finding).
+	Evidences []*PolicyTopicEvidence `protobuf:"bytes,3,rep,name=evidences,proto3" json:"evidences,omitempty"`
+	// Indicates how serving of this resource may be affected (e.g. not serving
+	// in a country).
+	Constraints          []*PolicyTopicConstraint `protobuf:"bytes,4,rep,name=constraints,proto3" json:"constraints,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *PolicyTopicEntry) Reset()         { *m = PolicyTopicEntry{} }
+func (m *PolicyTopicEntry) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEntry) ProtoMessage()    {}
+func (*PolicyTopicEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{2}
+}
+func (m *PolicyTopicEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEntry.Unmarshal(m, b)
+}
+func (m *PolicyTopicEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEntry.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEntry.Merge(dst, src)
+}
+func (m *PolicyTopicEntry) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEntry.Size(m)
+}
+func (m *PolicyTopicEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEntry proto.InternalMessageInfo
+
+func (m *PolicyTopicEntry) GetTopic() *wrappers.StringValue {
+	if m != nil {
+		return m.Topic
+	}
+	return nil
+}
+
+func (m *PolicyTopicEntry) GetType() enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.PolicyTopicEntryTypeEnum_UNSPECIFIED
+}
+
+func (m *PolicyTopicEntry) GetEvidences() []*PolicyTopicEvidence {
+	if m != nil {
+		return m.Evidences
+	}
+	return nil
+}
+
+func (m *PolicyTopicEntry) GetConstraints() []*PolicyTopicConstraint {
+	if m != nil {
+		return m.Constraints
+	}
+	return nil
+}
+
+// Additional information that explains a policy finding.
+//
+// Next Id: 8
+type PolicyTopicEvidence struct {
+	// Specific evidence information depending on the evidence type.
+	//
+	// Types that are valid to be assigned to Value:
+	//	*PolicyTopicEvidence_HttpCode
+	//	*PolicyTopicEvidence_WebsiteList_
+	//	*PolicyTopicEvidence_TextList_
+	//	*PolicyTopicEvidence_LanguageCode
+	//	*PolicyTopicEvidence_DestinationTextList_
+	//	*PolicyTopicEvidence_DestinationMismatch_
+	Value                isPolicyTopicEvidence_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *PolicyTopicEvidence) Reset()         { *m = PolicyTopicEvidence{} }
+func (m *PolicyTopicEvidence) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence) ProtoMessage()    {}
+func (*PolicyTopicEvidence) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{3}
+}
+func (m *PolicyTopicEvidence) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEvidence) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence.Merge(dst, src)
+}
+func (m *PolicyTopicEvidence) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence.Size(m)
+}
+func (m *PolicyTopicEvidence) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence proto.InternalMessageInfo
+
+type isPolicyTopicEvidence_Value interface {
+	isPolicyTopicEvidence_Value()
+}
+
+type PolicyTopicEvidence_HttpCode struct {
+	HttpCode *wrappers.Int32Value `protobuf:"bytes,2,opt,name=http_code,json=httpCode,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_WebsiteList_ struct {
+	WebsiteList *PolicyTopicEvidence_WebsiteList `protobuf:"bytes,3,opt,name=website_list,json=websiteList,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_TextList_ struct {
+	TextList *PolicyTopicEvidence_TextList `protobuf:"bytes,4,opt,name=text_list,json=textList,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_LanguageCode struct {
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=language_code,json=languageCode,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_DestinationTextList_ struct {
+	DestinationTextList *PolicyTopicEvidence_DestinationTextList `protobuf:"bytes,6,opt,name=destination_text_list,json=destinationTextList,proto3,oneof"`
+}
+
+type PolicyTopicEvidence_DestinationMismatch_ struct {
+	DestinationMismatch *PolicyTopicEvidence_DestinationMismatch `protobuf:"bytes,7,opt,name=destination_mismatch,json=destinationMismatch,proto3,oneof"`
+}
+
+func (*PolicyTopicEvidence_HttpCode) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_WebsiteList_) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_TextList_) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_LanguageCode) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_DestinationTextList_) isPolicyTopicEvidence_Value() {}
+
+func (*PolicyTopicEvidence_DestinationMismatch_) isPolicyTopicEvidence_Value() {}
+
+func (m *PolicyTopicEvidence) GetValue() isPolicyTopicEvidence_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetHttpCode() *wrappers.Int32Value {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_HttpCode); ok {
+		return x.HttpCode
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetWebsiteList() *PolicyTopicEvidence_WebsiteList {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_WebsiteList_); ok {
+		return x.WebsiteList
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetTextList() *PolicyTopicEvidence_TextList {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_TextList_); ok {
+		return x.TextList
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetLanguageCode() *wrappers.StringValue {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_LanguageCode); ok {
+		return x.LanguageCode
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetDestinationTextList() *PolicyTopicEvidence_DestinationTextList {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_DestinationTextList_); ok {
+		return x.DestinationTextList
+	}
+	return nil
+}
+
+func (m *PolicyTopicEvidence) GetDestinationMismatch() *PolicyTopicEvidence_DestinationMismatch {
+	if x, ok := m.GetValue().(*PolicyTopicEvidence_DestinationMismatch_); ok {
+		return x.DestinationMismatch
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*PolicyTopicEvidence) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _PolicyTopicEvidence_OneofMarshaler, _PolicyTopicEvidence_OneofUnmarshaler, _PolicyTopicEvidence_OneofSizer, []interface{}{
+		(*PolicyTopicEvidence_HttpCode)(nil),
+		(*PolicyTopicEvidence_WebsiteList_)(nil),
+		(*PolicyTopicEvidence_TextList_)(nil),
+		(*PolicyTopicEvidence_LanguageCode)(nil),
+		(*PolicyTopicEvidence_DestinationTextList_)(nil),
+		(*PolicyTopicEvidence_DestinationMismatch_)(nil),
+	}
+}
+
+func _PolicyTopicEvidence_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*PolicyTopicEvidence)
+	// value
+	switch x := m.Value.(type) {
+	case *PolicyTopicEvidence_HttpCode:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HttpCode); err != nil {
+			return err
+		}
+	case *PolicyTopicEvidence_WebsiteList_:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.WebsiteList); err != nil {
+			return err
+		}
+	case *PolicyTopicEvidence_TextList_:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TextList); err != nil {
+			return err
+		}
+	case *PolicyTopicEvidence_LanguageCode:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.LanguageCode); err != nil {
+			return err
+		}
+	case *PolicyTopicEvidence_DestinationTextList_:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DestinationTextList); err != nil {
+			return err
+		}
+	case *PolicyTopicEvidence_DestinationMismatch_:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DestinationMismatch); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("PolicyTopicEvidence.Value has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _PolicyTopicEvidence_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*PolicyTopicEvidence)
+	switch tag {
+	case 2: // value.http_code
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.Int32Value)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicEvidence_HttpCode{msg}
+		return true, err
+	case 3: // value.website_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicEvidence_WebsiteList)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicEvidence_WebsiteList_{msg}
+		return true, err
+	case 4: // value.text_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicEvidence_TextList)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicEvidence_TextList_{msg}
+		return true, err
+	case 5: // value.language_code
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicEvidence_LanguageCode{msg}
+		return true, err
+	case 6: // value.destination_text_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicEvidence_DestinationTextList)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicEvidence_DestinationTextList_{msg}
+		return true, err
+	case 7: // value.destination_mismatch
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicEvidence_DestinationMismatch)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicEvidence_DestinationMismatch_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _PolicyTopicEvidence_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*PolicyTopicEvidence)
+	// value
+	switch x := m.Value.(type) {
+	case *PolicyTopicEvidence_HttpCode:
+		s := proto.Size(x.HttpCode)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicEvidence_WebsiteList_:
+		s := proto.Size(x.WebsiteList)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicEvidence_TextList_:
+		s := proto.Size(x.TextList)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicEvidence_LanguageCode:
+		s := proto.Size(x.LanguageCode)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicEvidence_DestinationTextList_:
+		s := proto.Size(x.DestinationTextList)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicEvidence_DestinationMismatch_:
+		s := proto.Size(x.DestinationMismatch)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A list of fragments of text that violated a policy.
+//
+// Next Id: 2
+type PolicyTopicEvidence_TextList struct {
+	// The fragments of text from the resource that caused the policy finding.
+	Texts                []*wrappers.StringValue `protobuf:"bytes,1,rep,name=texts,proto3" json:"texts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_TextList) Reset()         { *m = PolicyTopicEvidence_TextList{} }
+func (m *PolicyTopicEvidence_TextList) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_TextList) ProtoMessage()    {}
+func (*PolicyTopicEvidence_TextList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{3, 0}
+}
+func (m *PolicyTopicEvidence_TextList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_TextList.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_TextList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_TextList.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEvidence_TextList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_TextList.Merge(dst, src)
+}
+func (m *PolicyTopicEvidence_TextList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_TextList.Size(m)
+}
+func (m *PolicyTopicEvidence_TextList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_TextList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_TextList proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_TextList) GetTexts() []*wrappers.StringValue {
+	if m != nil {
+		return m.Texts
+	}
+	return nil
+}
+
+// A list of websites that caused a policy finding. Used for
+// ONE_WEBSITE_PER_AD_GROUP policy topic, for example. In case there are more
+// than five websites, only the top five (those that appear in resources the
+// most) will be listed here.
+//
+// Next Id: 2
+type PolicyTopicEvidence_WebsiteList struct {
+	// Websites that caused the policy finding.
+	Websites             []*wrappers.StringValue `protobuf:"bytes,1,rep,name=websites,proto3" json:"websites,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_WebsiteList) Reset()         { *m = PolicyTopicEvidence_WebsiteList{} }
+func (m *PolicyTopicEvidence_WebsiteList) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_WebsiteList) ProtoMessage()    {}
+func (*PolicyTopicEvidence_WebsiteList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{3, 1}
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEvidence_WebsiteList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Merge(dst, src)
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_WebsiteList.Size(m)
+}
+func (m *PolicyTopicEvidence_WebsiteList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_WebsiteList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_WebsiteList proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_WebsiteList) GetWebsites() []*wrappers.StringValue {
+	if m != nil {
+		return m.Websites
+	}
+	return nil
+}
+
+// A list of strings found in a destination page that caused a policy
+// finding.
+//
+// Next Id: 2
+type PolicyTopicEvidence_DestinationTextList struct {
+	// List of text found in the resource's destination page.
+	DestinationTexts     []*wrappers.StringValue `protobuf:"bytes,1,rep,name=destination_texts,json=destinationTexts,proto3" json:"destination_texts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_DestinationTextList) Reset() {
+	*m = PolicyTopicEvidence_DestinationTextList{}
+}
+func (m *PolicyTopicEvidence_DestinationTextList) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_DestinationTextList) ProtoMessage()    {}
+func (*PolicyTopicEvidence_DestinationTextList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{3, 2}
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEvidence_DestinationTextList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Merge(dst, src)
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.Size(m)
+}
+func (m *PolicyTopicEvidence_DestinationTextList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationTextList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_DestinationTextList proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_DestinationTextList) GetDestinationTexts() []*wrappers.StringValue {
+	if m != nil {
+		return m.DestinationTexts
+	}
+	return nil
+}
+
+// Evidence of mismatches between the URLs of a resource.
+//
+// Next Id: 2
+type PolicyTopicEvidence_DestinationMismatch struct {
+	// The set of URLs that did not match each other.
+	UrlTypes             []enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType `protobuf:"varint,1,rep,packed,name=url_types,json=urlTypes,proto3,enum=google.ads.googleads.v0.enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType" json:"url_types,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                                                                `json:"-"`
+	XXX_unrecognized     []byte                                                                                                  `json:"-"`
+	XXX_sizecache        int32                                                                                                   `json:"-"`
+}
+
+func (m *PolicyTopicEvidence_DestinationMismatch) Reset() {
+	*m = PolicyTopicEvidence_DestinationMismatch{}
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEvidence_DestinationMismatch) ProtoMessage()    {}
+func (*PolicyTopicEvidence_DestinationMismatch) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{3, 3}
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEvidence_DestinationMismatch) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Merge(dst, src)
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.Size(m)
+}
+func (m *PolicyTopicEvidence_DestinationMismatch) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidence_DestinationMismatch proto.InternalMessageInfo
+
+func (m *PolicyTopicEvidence_DestinationMismatch) GetUrlTypes() []enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType {
+	if m != nil {
+		return m.UrlTypes
+	}
+	return nil
+}
+
+// Describes the effect on serving that a policy topic entry will have.
+//
+// Next Id: 5
+type PolicyTopicConstraint struct {
+	// Specific information about the constraint.
+	//
+	// Types that are valid to be assigned to Value:
+	//	*PolicyTopicConstraint_CountryConstraintList_
+	//	*PolicyTopicConstraint_ResellerConstraint_
+	//	*PolicyTopicConstraint_CertificateMissingInCountryList
+	//	*PolicyTopicConstraint_CertificateDomainMismatchInCountryList
+	Value                isPolicyTopicConstraint_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *PolicyTopicConstraint) Reset()         { *m = PolicyTopicConstraint{} }
+func (m *PolicyTopicConstraint) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicConstraint) ProtoMessage()    {}
+func (*PolicyTopicConstraint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{4}
+}
+func (m *PolicyTopicConstraint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicConstraint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint.Merge(dst, src)
+}
+func (m *PolicyTopicConstraint) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint.Size(m)
+}
+func (m *PolicyTopicConstraint) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint proto.InternalMessageInfo
+
+type isPolicyTopicConstraint_Value interface {
+	isPolicyTopicConstraint_Value()
+}
+
+type PolicyTopicConstraint_CountryConstraintList_ struct {
+	CountryConstraintList *PolicyTopicConstraint_CountryConstraintList `protobuf:"bytes,1,opt,name=country_constraint_list,json=countryConstraintList,proto3,oneof"`
+}
+
+type PolicyTopicConstraint_ResellerConstraint_ struct {
+	ResellerConstraint *PolicyTopicConstraint_ResellerConstraint `protobuf:"bytes,2,opt,name=reseller_constraint,json=resellerConstraint,proto3,oneof"`
+}
+
+type PolicyTopicConstraint_CertificateMissingInCountryList struct {
+	CertificateMissingInCountryList *PolicyTopicConstraint_CountryConstraintList `protobuf:"bytes,3,opt,name=certificate_missing_in_country_list,json=certificateMissingInCountryList,proto3,oneof"`
+}
+
+type PolicyTopicConstraint_CertificateDomainMismatchInCountryList struct {
+	CertificateDomainMismatchInCountryList *PolicyTopicConstraint_CountryConstraintList `protobuf:"bytes,4,opt,name=certificate_domain_mismatch_in_country_list,json=certificateDomainMismatchInCountryList,proto3,oneof"`
+}
+
+func (*PolicyTopicConstraint_CountryConstraintList_) isPolicyTopicConstraint_Value() {}
+
+func (*PolicyTopicConstraint_ResellerConstraint_) isPolicyTopicConstraint_Value() {}
+
+func (*PolicyTopicConstraint_CertificateMissingInCountryList) isPolicyTopicConstraint_Value() {}
+
+func (*PolicyTopicConstraint_CertificateDomainMismatchInCountryList) isPolicyTopicConstraint_Value() {}
+
+func (m *PolicyTopicConstraint) GetValue() isPolicyTopicConstraint_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetCountryConstraintList() *PolicyTopicConstraint_CountryConstraintList {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_CountryConstraintList_); ok {
+		return x.CountryConstraintList
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetResellerConstraint() *PolicyTopicConstraint_ResellerConstraint {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_ResellerConstraint_); ok {
+		return x.ResellerConstraint
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetCertificateMissingInCountryList() *PolicyTopicConstraint_CountryConstraintList {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_CertificateMissingInCountryList); ok {
+		return x.CertificateMissingInCountryList
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint) GetCertificateDomainMismatchInCountryList() *PolicyTopicConstraint_CountryConstraintList {
+	if x, ok := m.GetValue().(*PolicyTopicConstraint_CertificateDomainMismatchInCountryList); ok {
+		return x.CertificateDomainMismatchInCountryList
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*PolicyTopicConstraint) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _PolicyTopicConstraint_OneofMarshaler, _PolicyTopicConstraint_OneofUnmarshaler, _PolicyTopicConstraint_OneofSizer, []interface{}{
+		(*PolicyTopicConstraint_CountryConstraintList_)(nil),
+		(*PolicyTopicConstraint_ResellerConstraint_)(nil),
+		(*PolicyTopicConstraint_CertificateMissingInCountryList)(nil),
+		(*PolicyTopicConstraint_CertificateDomainMismatchInCountryList)(nil),
+	}
+}
+
+func _PolicyTopicConstraint_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*PolicyTopicConstraint)
+	// value
+	switch x := m.Value.(type) {
+	case *PolicyTopicConstraint_CountryConstraintList_:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CountryConstraintList); err != nil {
+			return err
+		}
+	case *PolicyTopicConstraint_ResellerConstraint_:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ResellerConstraint); err != nil {
+			return err
+		}
+	case *PolicyTopicConstraint_CertificateMissingInCountryList:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CertificateMissingInCountryList); err != nil {
+			return err
+		}
+	case *PolicyTopicConstraint_CertificateDomainMismatchInCountryList:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CertificateDomainMismatchInCountryList); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("PolicyTopicConstraint.Value has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _PolicyTopicConstraint_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*PolicyTopicConstraint)
+	switch tag {
+	case 1: // value.country_constraint_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicConstraint_CountryConstraintList)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicConstraint_CountryConstraintList_{msg}
+		return true, err
+	case 2: // value.reseller_constraint
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicConstraint_ResellerConstraint)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicConstraint_ResellerConstraint_{msg}
+		return true, err
+	case 3: // value.certificate_missing_in_country_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicConstraint_CountryConstraintList)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicConstraint_CertificateMissingInCountryList{msg}
+		return true, err
+	case 4: // value.certificate_domain_mismatch_in_country_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PolicyTopicConstraint_CountryConstraintList)
+		err := b.DecodeMessage(msg)
+		m.Value = &PolicyTopicConstraint_CertificateDomainMismatchInCountryList{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _PolicyTopicConstraint_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*PolicyTopicConstraint)
+	// value
+	switch x := m.Value.(type) {
+	case *PolicyTopicConstraint_CountryConstraintList_:
+		s := proto.Size(x.CountryConstraintList)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicConstraint_ResellerConstraint_:
+		s := proto.Size(x.ResellerConstraint)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicConstraint_CertificateMissingInCountryList:
+		s := proto.Size(x.CertificateMissingInCountryList)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *PolicyTopicConstraint_CertificateDomainMismatchInCountryList:
+		s := proto.Size(x.CertificateDomainMismatchInCountryList)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A list of countries where a resource's serving is constrained.
+//
+// Next Id: 3
+type PolicyTopicConstraint_CountryConstraintList struct {
+	// Total number of countries targeted by the resource.
+	TotalTargetedCountries *wrappers.Int32Value `protobuf:"bytes,1,opt,name=total_targeted_countries,json=totalTargetedCountries,proto3" json:"total_targeted_countries,omitempty"`
+	// Countries in which serving is restricted.
+	Countries            []*PolicyTopicConstraint_CountryConstraint `protobuf:"bytes,2,rep,name=countries,proto3" json:"countries,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                   `json:"-"`
+	XXX_unrecognized     []byte                                     `json:"-"`
+	XXX_sizecache        int32                                      `json:"-"`
+}
+
+func (m *PolicyTopicConstraint_CountryConstraintList) Reset() {
+	*m = PolicyTopicConstraint_CountryConstraintList{}
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PolicyTopicConstraint_CountryConstraintList) ProtoMessage() {}
+func (*PolicyTopicConstraint_CountryConstraintList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{4, 0}
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicConstraint_CountryConstraintList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Merge(dst, src)
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.Size(m)
+}
+func (m *PolicyTopicConstraint_CountryConstraintList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint_CountryConstraintList proto.InternalMessageInfo
+
+func (m *PolicyTopicConstraint_CountryConstraintList) GetTotalTargetedCountries() *wrappers.Int32Value {
+	if m != nil {
+		return m.TotalTargetedCountries
+	}
+	return nil
+}
+
+func (m *PolicyTopicConstraint_CountryConstraintList) GetCountries() []*PolicyTopicConstraint_CountryConstraint {
+	if m != nil {
+		return m.Countries
+	}
+	return nil
+}
+
+// Indicates that a policy topic was constrained due to disapproval of the
+// website for reseller purposes.
+//
+// Next Id: 1
+type PolicyTopicConstraint_ResellerConstraint struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicConstraint_ResellerConstraint) Reset() {
+	*m = PolicyTopicConstraint_ResellerConstraint{}
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicConstraint_ResellerConstraint) ProtoMessage()    {}
+func (*PolicyTopicConstraint_ResellerConstraint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{4, 1}
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicConstraint_ResellerConstraint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Merge(dst, src)
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.Size(m)
+}
+func (m *PolicyTopicConstraint_ResellerConstraint) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint_ResellerConstraint proto.InternalMessageInfo
+
+// Indicates that a resource's ability to serve in a particular country is
+// constrained.
+//
+// Next Id: 2
+type PolicyTopicConstraint_CountryConstraint struct {
+	// Geo target constant resource name of the country in which serving is
+	// constrained.
+	CountryCriterion     *wrappers.StringValue `protobuf:"bytes,1,opt,name=country_criterion,json=countryCriterion,proto3" json:"country_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PolicyTopicConstraint_CountryConstraint) Reset() {
+	*m = PolicyTopicConstraint_CountryConstraint{}
+}
+func (m *PolicyTopicConstraint_CountryConstraint) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicConstraint_CountryConstraint) ProtoMessage()    {}
+func (*PolicyTopicConstraint_CountryConstraint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_92661ff34caa4cee, []int{4, 2}
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Unmarshal(m, b)
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicConstraint_CountryConstraint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Merge(dst, src)
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.Size(m)
+}
+func (m *PolicyTopicConstraint_CountryConstraint) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicConstraint_CountryConstraint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicConstraint_CountryConstraint proto.InternalMessageInfo
+
+func (m *PolicyTopicConstraint_CountryConstraint) GetCountryCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCriterion
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*PolicyViolationKey)(nil), "google.ads.googleads.v0.common.PolicyViolationKey")
+	proto.RegisterType((*PolicyValidationParameter)(nil), "google.ads.googleads.v0.common.PolicyValidationParameter")
+	proto.RegisterType((*PolicyTopicEntry)(nil), "google.ads.googleads.v0.common.PolicyTopicEntry")
+	proto.RegisterType((*PolicyTopicEvidence)(nil), "google.ads.googleads.v0.common.PolicyTopicEvidence")
+	proto.RegisterType((*PolicyTopicEvidence_TextList)(nil), "google.ads.googleads.v0.common.PolicyTopicEvidence.TextList")
+	proto.RegisterType((*PolicyTopicEvidence_WebsiteList)(nil), "google.ads.googleads.v0.common.PolicyTopicEvidence.WebsiteList")
+	proto.RegisterType((*PolicyTopicEvidence_DestinationTextList)(nil), "google.ads.googleads.v0.common.PolicyTopicEvidence.DestinationTextList")
+	proto.RegisterType((*PolicyTopicEvidence_DestinationMismatch)(nil), "google.ads.googleads.v0.common.PolicyTopicEvidence.DestinationMismatch")
+	proto.RegisterType((*PolicyTopicConstraint)(nil), "google.ads.googleads.v0.common.PolicyTopicConstraint")
+	proto.RegisterType((*PolicyTopicConstraint_CountryConstraintList)(nil), "google.ads.googleads.v0.common.PolicyTopicConstraint.CountryConstraintList")
+	proto.RegisterType((*PolicyTopicConstraint_ResellerConstraint)(nil), "google.ads.googleads.v0.common.PolicyTopicConstraint.ResellerConstraint")
+	proto.RegisterType((*PolicyTopicConstraint_CountryConstraint)(nil), "google.ads.googleads.v0.common.PolicyTopicConstraint.CountryConstraint")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/policy.proto", fileDescriptor_policy_92661ff34caa4cee)
+}
+
+var fileDescriptor_policy_92661ff34caa4cee = []byte{
+	// 964 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x96, 0xcf, 0x6f, 0x1b, 0x45,
+	0x14, 0xc7, 0xb3, 0x4e, 0xda, 0xd8, 0xcf, 0x6d, 0x94, 0x4e, 0x6a, 0x6a, 0x0c, 0x2a, 0x95, 0x91,
+	0x10, 0x52, 0xa5, 0x75, 0xe4, 0x08, 0x09, 0x51, 0x7e, 0x28, 0x71, 0x2a, 0x3b, 0x6a, 0x8b, 0xc2,
+	0xe2, 0x26, 0x12, 0x44, 0x6c, 0x27, 0xbb, 0xd3, 0xed, 0x48, 0xbb, 0x33, 0x66, 0x66, 0xec, 0xc4,
+	0xe2, 0x87, 0xb8, 0xf0, 0x3f, 0x20, 0x71, 0xe3, 0xd8, 0x2b, 0x77, 0x24, 0xae, 0x9c, 0xe1, 0xff,
+	0x41, 0x3b, 0x33, 0x6b, 0x6f, 0x6c, 0x07, 0x3b, 0x56, 0x38, 0x79, 0x3c, 0xfb, 0xde, 0xe7, 0x7d,
+	0xe7, 0xcd, 0x7b, 0x6f, 0x17, 0x1e, 0x46, 0x9c, 0x47, 0x31, 0x69, 0xe0, 0x50, 0x36, 0xcc, 0x32,
+	0x5d, 0x0d, 0xb6, 0x1b, 0x01, 0x4f, 0x12, 0xce, 0x1a, 0x3d, 0x1e, 0xd3, 0x60, 0xe8, 0xf6, 0x04,
+	0x57, 0x1c, 0xdd, 0x37, 0x16, 0x2e, 0x0e, 0xa5, 0x3b, 0x32, 0x76, 0x07, 0xdb, 0xae, 0x31, 0xae,
+	0x3d, 0xba, 0x0c, 0x46, 0x58, 0x3f, 0x91, 0x96, 0xe5, 0x2b, 0xde, 0xa3, 0x81, 0x4f, 0x98, 0x12,
+	0x43, 0x5f, 0x0d, 0x7b, 0xc4, 0xc0, 0x6b, 0xc7, 0x57, 0x71, 0x1e, 0xd0, 0x90, 0xb0, 0x80, 0xf8,
+	0x21, 0x91, 0x8a, 0x32, 0xac, 0x28, 0x67, 0x7e, 0x42, 0x65, 0x82, 0x55, 0xf0, 0xca, 0xef, 0x8b,
+	0x38, 0x0f, 0xb6, 0xaa, 0x1b, 0xfa, 0xdf, 0x69, 0xff, 0x65, 0xe3, 0x4c, 0xe0, 0x5e, 0x8f, 0x08,
+	0x69, 0x9e, 0xd7, 0x7f, 0x71, 0x00, 0x1d, 0x6a, 0xfa, 0x11, 0xe5, 0xb1, 0x66, 0x3d, 0x21, 0x43,
+	0xf4, 0x09, 0x94, 0x6d, 0x4c, 0x86, 0x13, 0x52, 0x75, 0x1e, 0x38, 0xef, 0x97, 0x9b, 0x6f, 0xdb,
+	0x73, 0xbb, 0x19, 0xcc, 0xfd, 0x52, 0x09, 0xca, 0xa2, 0x23, 0x1c, 0xf7, 0x89, 0x07, 0xc6, 0xe1,
+	0x73, 0x9c, 0x10, 0xd4, 0x82, 0x8d, 0x81, 0xc1, 0xb1, 0xc8, 0x57, 0xe4, 0x5c, 0x55, 0x0b, 0x0b,
+	0x10, 0x6e, 0x8f, 0x7c, 0xba, 0xe4, 0x5c, 0xd5, 0xbf, 0x85, 0x37, 0xad, 0x32, 0x1c, 0xd3, 0x50,
+	0x4b, 0x3b, 0xc4, 0x02, 0x27, 0x44, 0x11, 0x81, 0xba, 0x70, 0x8f, 0x46, 0x8c, 0x0b, 0x7c, 0x1a,
+	0x13, 0x3f, 0x9f, 0x1e, 0x59, 0x75, 0x1e, 0xac, 0xce, 0x0d, 0x55, 0x19, 0x39, 0x9b, 0x10, 0x5d,
+	0xed, 0x5a, 0xff, 0xbb, 0x00, 0x9b, 0xb9, 0x8d, 0xc7, 0xe9, 0x35, 0xa1, 0x26, 0xdc, 0xd0, 0xe4,
+	0x85, 0xb2, 0x60, 0x4c, 0xd1, 0x0b, 0x58, 0x4b, 0x2f, 0x41, 0x1f, 0x7b, 0xa3, 0xf9, 0xd4, 0xbd,
+	0xac, 0x76, 0xf4, 0xf5, 0xba, 0x93, 0x21, 0xbb, 0xc3, 0x1e, 0x79, 0xcc, 0xfa, 0xc9, 0xcc, 0x07,
+	0x9e, 0x26, 0xa3, 0x2f, 0xa0, 0x94, 0x15, 0x82, 0xac, 0xae, 0xea, 0x23, 0xef, 0xb8, 0xff, 0x5d,
+	0xa2, 0x17, 0x70, 0xd6, 0xd7, 0x1b, 0x53, 0xd0, 0x31, 0x94, 0x03, 0xce, 0xa4, 0x12, 0x98, 0x32,
+	0x25, 0xab, 0x6b, 0x1a, 0xfa, 0xc1, 0x15, 0xa0, 0xad, 0x91, 0xb7, 0x97, 0x27, 0xd5, 0x7f, 0x2a,
+	0xc2, 0xd6, 0x8c, 0xd8, 0xe8, 0x23, 0x28, 0xbd, 0x52, 0xaa, 0xe7, 0x07, 0x3c, 0x24, 0xb6, 0x42,
+	0xde, 0x9a, 0xca, 0xee, 0x01, 0x53, 0x3b, 0x4d, 0x9d, 0xdc, 0xce, 0x8a, 0x57, 0x4c, 0xed, 0x5b,
+	0x3c, 0x24, 0x28, 0x84, 0x5b, 0x67, 0xe4, 0x54, 0x52, 0x45, 0xfc, 0x98, 0x4a, 0x55, 0x5d, 0xd5,
+	0xee, 0x9f, 0x2d, 0x91, 0x02, 0xf7, 0xd8, 0x70, 0x9e, 0x52, 0xa9, 0x3a, 0x2b, 0x5e, 0xf9, 0x6c,
+	0xfc, 0x17, 0x7d, 0x0d, 0xa5, 0xb4, 0x7c, 0x4d, 0x88, 0x35, 0x1d, 0xe2, 0xe3, 0x65, 0x42, 0xa4,
+	0x05, 0x6d, 0xf9, 0x45, 0x65, 0xd7, 0xa8, 0x05, 0xb7, 0x63, 0xcc, 0xa2, 0x3e, 0x8e, 0x88, 0x49,
+	0xc1, 0x8d, 0xf9, 0x05, 0xd6, 0x59, 0xf1, 0x6e, 0x65, 0x4e, 0x3a, 0x0f, 0x3f, 0x40, 0x25, 0x3f,
+	0x07, 0xc6, 0x6a, 0x6f, 0x6a, 0x58, 0x7b, 0x19, 0xb5, 0xfb, 0x63, 0x60, 0x4e, 0xf8, 0x56, 0x38,
+	0xbd, 0x8d, 0xbe, 0x87, 0xbb, 0xb3, 0xc6, 0x50, 0x75, 0xfd, 0x5a, 0xa2, 0x3f, 0xb3, 0xb8, 0x89,
+	0xe8, 0xd9, 0x76, 0xed, 0x53, 0x28, 0x8e, 0x94, 0xa4, 0x6d, 0x4a, 0xce, 0xd5, 0x62, 0xfd, 0x6f,
+	0x4c, 0x6b, 0x6d, 0x28, 0xe7, 0x2e, 0x1f, 0x7d, 0x08, 0x45, 0x7b, 0xf9, 0x8b, 0x51, 0x46, 0xd6,
+	0xb5, 0x17, 0xb0, 0x35, 0x23, 0x69, 0xe8, 0x00, 0xee, 0x4c, 0x5e, 0xce, 0x62, 0xe4, 0xcd, 0x89,
+	0x5c, 0xcb, 0xda, 0xef, 0xce, 0x85, 0x10, 0x59, 0x0a, 0xd0, 0xaf, 0x0e, 0x94, 0xb2, 0x99, 0x6f,
+	0xd8, 0x1b, 0xcd, 0x1f, 0xaf, 0x30, 0x6f, 0x6c, 0xd6, 0x67, 0xa0, 0x9f, 0x8b, 0x78, 0xe6, 0x20,
+	0x9a, 0xeb, 0xe1, 0x15, 0xfb, 0x66, 0x21, 0xf7, 0xd6, 0xe1, 0xc6, 0x20, 0x3d, 0x50, 0xfd, 0x8f,
+	0x75, 0xa8, 0xcc, 0x9c, 0x14, 0xe8, 0x67, 0x07, 0xee, 0x05, 0xbc, 0xaf, 0xdf, 0x88, 0xe3, 0xa1,
+	0x61, 0x6a, 0xd8, 0x4c, 0xdc, 0x27, 0x4b, 0x8d, 0x20, 0xb7, 0x65, 0xa0, 0xe3, 0x1d, 0x5b, 0xc7,
+	0x95, 0x60, 0xd6, 0x03, 0xf4, 0x1d, 0x6c, 0x09, 0x22, 0x49, 0x1c, 0x13, 0x91, 0xd3, 0x61, 0xc7,
+	0x52, 0x67, 0x39, 0x09, 0x9e, 0x05, 0x8e, 0xb7, 0x3a, 0x2b, 0x1e, 0x12, 0x53, 0xbb, 0xe9, 0x2d,
+	0xbe, 0x1b, 0x10, 0xa1, 0xe8, 0x4b, 0x1a, 0x60, 0x45, 0xd2, 0x3e, 0x92, 0xe9, 0xbb, 0x93, 0x32,
+	0x3f, 0xcb, 0x4d, 0x6e, 0xca, 0x5d, 0x73, 0x42, 0xde, 0xc9, 0x45, 0x7e, 0x66, 0x02, 0x1f, 0x30,
+	0x6b, 0xac, 0x53, 0xf3, 0xda, 0x81, 0x87, 0x79, 0x75, 0x21, 0x4f, 0x30, 0xcd, 0x7d, 0x73, 0x4c,
+	0xaa, 0x5c, 0xfb, 0x3f, 0x54, 0xbe, 0x97, 0x53, 0xb0, 0xaf, 0x05, 0x64, 0x65, 0x77, 0x41, 0x6c,
+	0xed, 0x1f, 0x07, 0x2a, 0x33, 0x19, 0xe8, 0x39, 0x54, 0x15, 0x57, 0x38, 0xf6, 0x15, 0x16, 0x11,
+	0x51, 0x24, 0xb4, 0xaa, 0xa9, 0x6e, 0x9c, 0x79, 0x6f, 0x1f, 0xef, 0x0d, 0xed, 0xdc, 0xb5, 0xbe,
+	0xad, 0xcc, 0x15, 0x11, 0x28, 0x8d, 0x39, 0x05, 0xdd, 0xdc, 0xed, 0x6b, 0x3a, 0xba, 0x37, 0x26,
+	0xd7, 0xee, 0x02, 0x9a, 0x2e, 0xa7, 0xda, 0x37, 0x70, 0x67, 0xca, 0x2b, 0x1d, 0x3b, 0xa3, 0x8e,
+	0x12, 0x54, 0x11, 0x41, 0x39, 0x5b, 0xe8, 0xeb, 0x65, 0x33, 0x6b, 0x8d, 0xcc, 0x6b, 0xd4, 0xc0,
+	0x7b, 0x7f, 0x3a, 0x50, 0x0f, 0x78, 0x32, 0xe7, 0x60, 0x7b, 0x65, 0x73, 0xb2, 0xc3, 0x94, 0x7e,
+	0xe8, 0x7c, 0xb5, 0x6f, 0xcd, 0x23, 0x9e, 0xbe, 0xb4, 0x5c, 0x2e, 0xa2, 0x46, 0x44, 0x98, 0x8e,
+	0x9d, 0x7d, 0xe7, 0xf6, 0xa8, 0xbc, 0xec, 0x03, 0xfc, 0x91, 0xf9, 0xf9, 0xad, 0xb0, 0xda, 0xde,
+	0xdd, 0x7d, 0x5d, 0xb8, 0xdf, 0x36, 0xb0, 0xdd, 0x50, 0xba, 0x66, 0x99, 0xae, 0x8e, 0xb6, 0xdd,
+	0x96, 0x36, 0xfb, 0x2b, 0x33, 0x38, 0xd9, 0x0d, 0xe5, 0xc9, 0xc8, 0xe0, 0xe4, 0x68, 0xfb, 0xc4,
+	0x18, 0x9c, 0xde, 0xd4, 0x81, 0x77, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x05, 0x08, 0x96,
+	0xf8, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/real_time_bidding_setting.pb.go b/googleapis/ads/googleads/v0/common/real_time_bidding_setting.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6e68391c6a8675a8c747486a75e8b0846a90bc4a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/real_time_bidding_setting.pb.go
@@ -0,0 +1,90 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/real_time_bidding_setting.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Settings for Real-Time Bidding, a feature only available for campaigns
+// targeting the Ad Exchange network.
+type RealTimeBiddingSetting struct {
+	// Whether the campaign is opted in to real-time bidding.
+	OptIn                *wrappers.BoolValue `protobuf:"bytes,1,opt,name=opt_in,json=optIn,proto3" json:"opt_in,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *RealTimeBiddingSetting) Reset()         { *m = RealTimeBiddingSetting{} }
+func (m *RealTimeBiddingSetting) String() string { return proto.CompactTextString(m) }
+func (*RealTimeBiddingSetting) ProtoMessage()    {}
+func (*RealTimeBiddingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_real_time_bidding_setting_bb30570aed4e7c68, []int{0}
+}
+func (m *RealTimeBiddingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RealTimeBiddingSetting.Unmarshal(m, b)
+}
+func (m *RealTimeBiddingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RealTimeBiddingSetting.Marshal(b, m, deterministic)
+}
+func (dst *RealTimeBiddingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RealTimeBiddingSetting.Merge(dst, src)
+}
+func (m *RealTimeBiddingSetting) XXX_Size() int {
+	return xxx_messageInfo_RealTimeBiddingSetting.Size(m)
+}
+func (m *RealTimeBiddingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_RealTimeBiddingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RealTimeBiddingSetting proto.InternalMessageInfo
+
+func (m *RealTimeBiddingSetting) GetOptIn() *wrappers.BoolValue {
+	if m != nil {
+		return m.OptIn
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*RealTimeBiddingSetting)(nil), "google.ads.googleads.v0.common.RealTimeBiddingSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/real_time_bidding_setting.proto", fileDescriptor_real_time_bidding_setting_bb30570aed4e7c68)
+}
+
+var fileDescriptor_real_time_bidding_setting_bb30570aed4e7c68 = []byte{
+	// 269 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0x86, 0xe9, 0xc4, 0x1d, 0xea, 0x6d, 0x07, 0x91, 0x09, 0x43, 0x76, 0xf2, 0xf4, 0xa5, 0xea,
+	0x51, 0x10, 0x5a, 0x85, 0x21, 0x5e, 0xc6, 0x94, 0x1e, 0xa4, 0x50, 0xd2, 0x25, 0x86, 0x40, 0x9a,
+	0x2f, 0x24, 0xd9, 0xfc, 0x3f, 0x1e, 0xfd, 0x29, 0xde, 0xfc, 0x47, 0xd2, 0x7e, 0xed, 0x4e, 0xea,
+	0xa9, 0x2f, 0xf4, 0x7d, 0x9e, 0x37, 0x7c, 0xe9, 0x9d, 0x42, 0x54, 0x46, 0x32, 0x2e, 0x02, 0xa3,
+	0xd8, 0xa5, 0x7d, 0xc6, 0xb6, 0xd8, 0xb6, 0x68, 0x99, 0x97, 0xdc, 0xd4, 0x51, 0xb7, 0xb2, 0x6e,
+	0xb4, 0x10, 0xda, 0xaa, 0x3a, 0xc8, 0x18, 0xb5, 0x55, 0xe0, 0x3c, 0x46, 0x9c, 0x2d, 0x08, 0x02,
+	0x2e, 0x02, 0x1c, 0x78, 0xd8, 0x67, 0x40, 0xfc, 0x7c, 0xf8, 0xcf, 0xfa, 0x76, 0xb3, 0x7b, 0x63,
+	0xef, 0x9e, 0x3b, 0x27, 0x7d, 0x20, 0x7e, 0xf9, 0x94, 0x9e, 0x6e, 0x24, 0x37, 0x2f, 0xba, 0x95,
+	0x05, 0x0d, 0x3c, 0x93, 0x7f, 0x76, 0x95, 0x4e, 0xd1, 0xc5, 0x5a, 0xdb, 0xb3, 0xe4, 0x22, 0xb9,
+	0x3c, 0xb9, 0x9e, 0x0f, 0x7e, 0x18, 0x55, 0x50, 0x20, 0x9a, 0x92, 0x9b, 0x9d, 0xdc, 0x1c, 0xa3,
+	0x8b, 0x8f, 0xb6, 0xf8, 0x4e, 0xd2, 0xe5, 0x16, 0x5b, 0xf8, 0xff, 0x4d, 0xc5, 0xf9, 0xef, 0x8b,
+	0xeb, 0xce, 0xbb, 0x4e, 0x5e, 0x1f, 0x06, 0x5c, 0xa1, 0xe1, 0x56, 0x01, 0x7a, 0xc5, 0x94, 0xb4,
+	0xfd, 0xea, 0x78, 0x22, 0xa7, 0xc3, 0x5f, 0x17, 0xbb, 0xa5, 0xcf, 0xc7, 0xe4, 0x68, 0x95, 0xe7,
+	0x9f, 0x93, 0xc5, 0x8a, 0x64, 0xb9, 0x08, 0x40, 0xb1, 0x4b, 0x65, 0x06, 0xf7, 0x7d, 0xed, 0x6b,
+	0x2c, 0x54, 0xb9, 0x08, 0xd5, 0xa1, 0x50, 0x95, 0x59, 0x45, 0x85, 0x66, 0xda, 0x0f, 0xdf, 0xfc,
+	0x04, 0x00, 0x00, 0xff, 0xff, 0x06, 0x56, 0x26, 0xd9, 0xa9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/tag_snippet.pb.go b/googleapis/ads/googleads/v0/common/tag_snippet.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4d7d4710cb616803b9f6771e947879945526bf5a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/tag_snippet.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/tag_snippet.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The site tag and event snippet pair for a TrackingCodeType.
+type TagSnippet struct {
+	// The type of the generated tag snippets for tracking conversions.
+	Type enums.TrackingCodeTypeEnum_TrackingCodeType `protobuf:"varint,1,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.TrackingCodeTypeEnum_TrackingCodeType" json:"type,omitempty"`
+	// The format of the web page where the tracking tag and snippet will be
+	// installed, e.g. HTML.
+	PageFormat enums.TrackingCodePageFormatEnum_TrackingCodePageFormat `protobuf:"varint,2,opt,name=page_format,json=pageFormat,proto3,enum=google.ads.googleads.v0.enums.TrackingCodePageFormatEnum_TrackingCodePageFormat" json:"page_format,omitempty"`
+	// The site tag that adds visitors to your basic remarketing lists and sets
+	// new cookies on your domain.
+	GlobalSiteTag *wrappers.StringValue `protobuf:"bytes,3,opt,name=global_site_tag,json=globalSiteTag,proto3" json:"global_site_tag,omitempty"`
+	// The event snippet that works with the site tag to track actions that
+	// should be counted as conversions.
+	EventSnippet         *wrappers.StringValue `protobuf:"bytes,4,opt,name=event_snippet,json=eventSnippet,proto3" json:"event_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *TagSnippet) Reset()         { *m = TagSnippet{} }
+func (m *TagSnippet) String() string { return proto.CompactTextString(m) }
+func (*TagSnippet) ProtoMessage()    {}
+func (*TagSnippet) Descriptor() ([]byte, []int) {
+	return fileDescriptor_tag_snippet_41d6e556b94abd18, []int{0}
+}
+func (m *TagSnippet) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TagSnippet.Unmarshal(m, b)
+}
+func (m *TagSnippet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TagSnippet.Marshal(b, m, deterministic)
+}
+func (dst *TagSnippet) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TagSnippet.Merge(dst, src)
+}
+func (m *TagSnippet) XXX_Size() int {
+	return xxx_messageInfo_TagSnippet.Size(m)
+}
+func (m *TagSnippet) XXX_DiscardUnknown() {
+	xxx_messageInfo_TagSnippet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TagSnippet proto.InternalMessageInfo
+
+func (m *TagSnippet) GetType() enums.TrackingCodeTypeEnum_TrackingCodeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.TrackingCodeTypeEnum_UNSPECIFIED
+}
+
+func (m *TagSnippet) GetPageFormat() enums.TrackingCodePageFormatEnum_TrackingCodePageFormat {
+	if m != nil {
+		return m.PageFormat
+	}
+	return enums.TrackingCodePageFormatEnum_UNSPECIFIED
+}
+
+func (m *TagSnippet) GetGlobalSiteTag() *wrappers.StringValue {
+	if m != nil {
+		return m.GlobalSiteTag
+	}
+	return nil
+}
+
+func (m *TagSnippet) GetEventSnippet() *wrappers.StringValue {
+	if m != nil {
+		return m.EventSnippet
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*TagSnippet)(nil), "google.ads.googleads.v0.common.TagSnippet")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/tag_snippet.proto", fileDescriptor_tag_snippet_41d6e556b94abd18)
+}
+
+var fileDescriptor_tag_snippet_41d6e556b94abd18 = []byte{
+	// 387 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x41, 0xcb, 0xda, 0x30,
+	0x1c, 0xc6, 0x69, 0xdf, 0x97, 0x1d, 0xe2, 0x9c, 0xd0, 0x53, 0x91, 0x21, 0xe2, 0xc9, 0x53, 0x52,
+	0x1c, 0xec, 0x32, 0x76, 0xa8, 0xba, 0x79, 0x2d, 0x5a, 0x64, 0x8c, 0x42, 0x89, 0xed, 0xdf, 0x50,
+	0xd6, 0x26, 0x59, 0x93, 0x3a, 0xfc, 0x3a, 0x3b, 0xee, 0x7b, 0xec, 0xb2, 0x8f, 0xb1, 0x4f, 0x32,
+	0x9a, 0xb4, 0x3a, 0x10, 0xc7, 0x3c, 0xf5, 0x69, 0xf3, 0xfc, 0x9e, 0xa7, 0x49, 0xfe, 0x28, 0x60,
+	0x42, 0xb0, 0x12, 0x08, 0xcd, 0x15, 0xb1, 0xb2, 0x55, 0xa7, 0x80, 0x64, 0xa2, 0xaa, 0x04, 0x27,
+	0x9a, 0xb2, 0x54, 0xf1, 0x42, 0x4a, 0xd0, 0x58, 0xd6, 0x42, 0x0b, 0x6f, 0x62, 0x6d, 0x98, 0xe6,
+	0x0a, 0x5f, 0x08, 0x7c, 0x0a, 0xb0, 0x25, 0xc6, 0xef, 0xef, 0x25, 0x02, 0x6f, 0x2a, 0x45, 0x74,
+	0x4d, 0xb3, 0x2f, 0x05, 0x67, 0x69, 0x26, 0x72, 0x48, 0x25, 0x65, 0x90, 0x1e, 0x45, 0x5d, 0xd1,
+	0x2e, 0x7e, 0xfc, 0xf6, 0x11, 0x5c, 0x9f, 0x25, 0x74, 0x5c, 0xf7, 0x5b, 0xc4, 0xbc, 0x1d, 0x9a,
+	0x23, 0xf9, 0x56, 0x53, 0x29, 0xa1, 0x56, 0x76, 0x7d, 0xf6, 0xdb, 0x45, 0x28, 0xa6, 0x6c, 0x67,
+	0xf7, 0xe2, 0x7d, 0x42, 0xcf, 0x2d, 0xec, 0x3b, 0x53, 0x67, 0xfe, 0x6a, 0xb1, 0xc6, 0xf7, 0x36,
+	0x65, 0x5a, 0x71, 0xdc, 0xb5, 0xae, 0x44, 0x0e, 0xf1, 0x59, 0xc2, 0x07, 0xde, 0x54, 0x37, 0x1f,
+	0xb7, 0x26, 0xd1, 0xfb, 0x8a, 0x06, 0x7f, 0xed, 0xca, 0x77, 0x4d, 0x41, 0xf4, 0x40, 0x41, 0x44,
+	0x19, 0x7c, 0x34, 0xf0, 0x4d, 0xcd, 0x75, 0x69, 0x8b, 0xe4, 0x45, 0x7b, 0x6b, 0x34, 0x62, 0xa5,
+	0x38, 0xd0, 0x32, 0x55, 0x85, 0x86, 0x54, 0x53, 0xe6, 0x3f, 0x4d, 0x9d, 0xf9, 0x60, 0xf1, 0xba,
+	0xaf, 0xed, 0x4f, 0x05, 0xef, 0x74, 0x5d, 0x70, 0xb6, 0xa7, 0x65, 0x03, 0xdb, 0xa1, 0x85, 0x76,
+	0x85, 0x86, 0x98, 0x32, 0x2f, 0x44, 0x43, 0x38, 0x01, 0xd7, 0xfd, 0x7d, 0xfb, 0xcf, 0xff, 0x91,
+	0xf1, 0xd2, 0x20, 0xdd, 0xa9, 0x2e, 0x7f, 0x3a, 0x68, 0x96, 0x89, 0x0a, 0xff, 0x7b, 0x44, 0x96,
+	0xa3, 0xeb, 0x45, 0x44, 0x6d, 0x68, 0xe4, 0x7c, 0x5e, 0x77, 0x08, 0x13, 0x25, 0xe5, 0x0c, 0x8b,
+	0x9a, 0x11, 0x06, 0xdc, 0x54, 0xf6, 0x63, 0x20, 0x0b, 0x75, 0x6f, 0x4c, 0xdf, 0xd9, 0xc7, 0x77,
+	0xf7, 0x69, 0x13, 0x86, 0x3f, 0xdc, 0xc9, 0xc6, 0x86, 0x85, 0xb9, 0xc2, 0x56, 0xb6, 0x6a, 0x1f,
+	0xe0, 0x95, 0xb1, 0xfd, 0xea, 0x0d, 0x49, 0x98, 0xab, 0xe4, 0x62, 0x48, 0xf6, 0x41, 0x62, 0x0d,
+	0x87, 0x17, 0xa6, 0xf8, 0xcd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xc4, 0x9f, 0x11, 0x1e,
+	0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/user_lists.pb.go b/googleapis/ads/googleads/v0/common/user_lists.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..246acbac96705248cae768ff16909c340a978991
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/user_lists.pb.go
@@ -0,0 +1,172 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/user_lists.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// SimilarUserList is a list of users which are similar to users from another
+// UserList. These lists are read-only and automatically created by Google.
+type SimilarUserListInfo struct {
+	// Seed UserList from which this list is derived.
+	SeedUserList         *wrappers.StringValue `protobuf:"bytes,1,opt,name=seed_user_list,json=seedUserList,proto3" json:"seed_user_list,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *SimilarUserListInfo) Reset()         { *m = SimilarUserListInfo{} }
+func (m *SimilarUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*SimilarUserListInfo) ProtoMessage()    {}
+func (*SimilarUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_lists_7f01f78cb9521749, []int{0}
+}
+func (m *SimilarUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SimilarUserListInfo.Unmarshal(m, b)
+}
+func (m *SimilarUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SimilarUserListInfo.Marshal(b, m, deterministic)
+}
+func (dst *SimilarUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SimilarUserListInfo.Merge(dst, src)
+}
+func (m *SimilarUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_SimilarUserListInfo.Size(m)
+}
+func (m *SimilarUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_SimilarUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SimilarUserListInfo proto.InternalMessageInfo
+
+func (m *SimilarUserListInfo) GetSeedUserList() *wrappers.StringValue {
+	if m != nil {
+		return m.SeedUserList
+	}
+	return nil
+}
+
+// UserList of CRM users provided by the advertiser.
+type CrmBasedUserListInfo struct {
+	// A string that uniquely identifies a mobile application from which the data
+	// was collected to the Google Ads API.
+	// For iOS, the ID string is the 9 digit string that appears at the end of an
+	// App Store URL (e.g., "476943146" for "Flood-It! 2" whose App Store link is
+	// http://itunes.apple.com/us/app/flood-it!-2/id476943146).
+	// For Android, the ID string is the application's package name
+	// (e.g., "com.labpixies.colordrips" for "Color Drips" given Google Play link
+	// https://play.google.com/store/apps/details?id=com.labpixies.colordrips).
+	// Required when creating CrmBasedUserList for uploading mobile advertising
+	// IDs.
+	AppId *wrappers.StringValue `protobuf:"bytes,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	// Matching key type of the list.
+	// Mixed data types are not allowed on the same list.
+	// This field is required for an ADD operation.
+	UploadKeyType enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType `protobuf:"varint,2,opt,name=upload_key_type,json=uploadKeyType,proto3,enum=google.ads.googleads.v0.enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType" json:"upload_key_type,omitempty"`
+	// Data source of the list. Default value is FIRST_PARTY.
+	// Only whitelisted customers can create third party sourced crm lists.
+	DataSourceType       enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType `protobuf:"varint,3,opt,name=data_source_type,json=dataSourceType,proto3,enum=google.ads.googleads.v0.enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType" json:"data_source_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                      `json:"-"`
+	XXX_unrecognized     []byte                                                        `json:"-"`
+	XXX_sizecache        int32                                                         `json:"-"`
+}
+
+func (m *CrmBasedUserListInfo) Reset()         { *m = CrmBasedUserListInfo{} }
+func (m *CrmBasedUserListInfo) String() string { return proto.CompactTextString(m) }
+func (*CrmBasedUserListInfo) ProtoMessage()    {}
+func (*CrmBasedUserListInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_lists_7f01f78cb9521749, []int{1}
+}
+func (m *CrmBasedUserListInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CrmBasedUserListInfo.Unmarshal(m, b)
+}
+func (m *CrmBasedUserListInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CrmBasedUserListInfo.Marshal(b, m, deterministic)
+}
+func (dst *CrmBasedUserListInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CrmBasedUserListInfo.Merge(dst, src)
+}
+func (m *CrmBasedUserListInfo) XXX_Size() int {
+	return xxx_messageInfo_CrmBasedUserListInfo.Size(m)
+}
+func (m *CrmBasedUserListInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CrmBasedUserListInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CrmBasedUserListInfo proto.InternalMessageInfo
+
+func (m *CrmBasedUserListInfo) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+func (m *CrmBasedUserListInfo) GetUploadKeyType() enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType {
+	if m != nil {
+		return m.UploadKeyType
+	}
+	return enums.CustomerMatchUploadKeyTypeEnum_UNSPECIFIED
+}
+
+func (m *CrmBasedUserListInfo) GetDataSourceType() enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType {
+	if m != nil {
+		return m.DataSourceType
+	}
+	return enums.UserListCrmDataSourceTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*SimilarUserListInfo)(nil), "google.ads.googleads.v0.common.SimilarUserListInfo")
+	proto.RegisterType((*CrmBasedUserListInfo)(nil), "google.ads.googleads.v0.common.CrmBasedUserListInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/user_lists.proto", fileDescriptor_user_lists_7f01f78cb9521749)
+}
+
+var fileDescriptor_user_lists_7f01f78cb9521749 = []byte{
+	// 427 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcf, 0x6e, 0xd4, 0x30,
+	0x10, 0xc6, 0x95, 0x54, 0xf4, 0x10, 0x20, 0xa0, 0x85, 0xc3, 0x0a, 0xa1, 0xaa, 0xda, 0x53, 0x4f,
+	0x76, 0xd4, 0x1e, 0x39, 0x25, 0x29, 0xaa, 0x2a, 0x40, 0xaa, 0x76, 0x69, 0x04, 0x28, 0x92, 0xe5,
+	0xc6, 0x6e, 0x88, 0x88, 0x63, 0xcb, 0x63, 0x17, 0xe5, 0xc6, 0xb3, 0x70, 0xe4, 0x39, 0x38, 0x71,
+	0xe3, 0x8d, 0x50, 0x9c, 0x3f, 0x94, 0x95, 0xb2, 0xcb, 0x69, 0x67, 0xd6, 0x33, 0xbf, 0xf9, 0xe6,
+	0xcb, 0x04, 0xb8, 0x94, 0xb2, 0xac, 0x39, 0xa6, 0x0c, 0x86, 0xb0, 0x8b, 0xee, 0x22, 0x5c, 0x48,
+	0x21, 0x64, 0x83, 0x2d, 0x70, 0x4d, 0xea, 0x0a, 0x0c, 0x20, 0xa5, 0xa5, 0x91, 0x8b, 0xa3, 0xbe,
+	0x0a, 0x51, 0x06, 0x68, 0x6a, 0x40, 0x77, 0x11, 0xea, 0x1b, 0x5e, 0x24, 0x73, 0x40, 0xde, 0x58,
+	0x01, 0xb8, 0xb0, 0x60, 0xa4, 0xe0, 0x9a, 0x08, 0x6a, 0x8a, 0xcf, 0xc4, 0xaa, 0x5a, 0x52, 0x46,
+	0xbe, 0xf0, 0x96, 0x98, 0x56, 0xf1, 0x7e, 0xc6, 0x3e, 0xc6, 0xa4, 0x89, 0x14, 0x5a, 0x10, 0x46,
+	0x0d, 0x25, 0x20, 0xad, 0x2e, 0xf8, 0x7d, 0xc6, 0xa0, 0x13, 0xbb, 0xec, 0xc6, 0xde, 0xe2, 0xaf,
+	0x9a, 0x2a, 0xc5, 0xf5, 0xb0, 0xc7, 0xea, 0x63, 0xf0, 0x6c, 0x53, 0x89, 0xaa, 0xa6, 0xfa, 0x1a,
+	0xb8, 0x7e, 0x5b, 0x81, 0xb9, 0x6c, 0x6e, 0xe5, 0x22, 0x09, 0x42, 0xe0, 0x9c, 0x91, 0x69, 0xc6,
+	0xd2, 0x3b, 0xf6, 0x4e, 0x1e, 0x9e, 0xbe, 0x1c, 0x96, 0x45, 0x23, 0x0f, 0x6d, 0x8c, 0xae, 0x9a,
+	0x32, 0xa3, 0xb5, 0xe5, 0xeb, 0x47, 0x5d, 0xcf, 0xc8, 0x59, 0xfd, 0xf6, 0x83, 0xe7, 0xa9, 0x16,
+	0x09, 0x85, 0xbf, 0x7f, 0x3a, 0xf8, 0x59, 0x70, 0x48, 0x95, 0x22, 0x15, 0xfb, 0x2f, 0xe8, 0x03,
+	0xaa, 0xd4, 0x25, 0x5b, 0x7c, 0xf3, 0x82, 0x27, 0x5b, 0x36, 0x2d, 0xfd, 0x63, 0xef, 0x24, 0x3c,
+	0xfd, 0x80, 0xe6, 0xbe, 0x85, 0xf3, 0x09, 0xa5, 0x83, 0xd7, 0xef, 0x3a, 0xab, 0xaf, 0x1d, 0xe2,
+	0x0d, 0x6f, 0xdf, 0xb7, 0x8a, 0xbf, 0x6e, 0xac, 0xd8, 0xf1, 0xbc, 0x7e, 0x6c, 0xef, 0xa7, 0x9d,
+	0x84, 0xa7, 0xdb, 0x36, 0x2f, 0x0f, 0x9c, 0x86, 0x6c, 0x8f, 0x86, 0x71, 0xff, 0x54, 0x8b, 0x73,
+	0x6a, 0xe8, 0xc6, 0x01, 0x26, 0x09, 0xb3, 0xaf, 0xeb, 0x90, 0xfd, 0x93, 0x27, 0x3f, 0xbd, 0x60,
+	0x55, 0x48, 0x81, 0x76, 0x5f, 0x5f, 0x12, 0x8e, 0x44, 0xb8, 0xea, 0x2c, 0xbd, 0xf2, 0x3e, 0x9d,
+	0x0f, 0x1d, 0xa5, 0xac, 0x69, 0x53, 0x22, 0xa9, 0x4b, 0x5c, 0xf2, 0xc6, 0x19, 0x3e, 0xde, 0x96,
+	0xaa, 0x60, 0xee, 0xfe, 0x5f, 0xf5, 0x3f, 0xdf, 0xfd, 0x83, 0x8b, 0x38, 0xfe, 0xe1, 0x1f, 0x5d,
+	0xf4, 0xb0, 0x98, 0x01, 0xea, 0xc3, 0x2e, 0xca, 0x22, 0x94, 0xba, 0xb2, 0x5f, 0x63, 0x41, 0x1e,
+	0x33, 0xc8, 0xa7, 0x82, 0x3c, 0x8b, 0xf2, 0xbe, 0xe0, 0xe6, 0xd0, 0x0d, 0x3e, 0xfb, 0x13, 0x00,
+	0x00, 0xff, 0xff, 0x74, 0x93, 0xe3, 0x13, 0x77, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/common/value.pb.go b/googleapis/ads/googleads/v0/common/value.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..eded538424f0ebcf1b0fa86da4240c3780b229b3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/common/value.pb.go
@@ -0,0 +1,277 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/common/value.proto
+
+package common // import "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A generic data container.
+type Value struct {
+	// A value.
+	//
+	// Types that are valid to be assigned to Value:
+	//	*Value_BooleanValue
+	//	*Value_Int64Value
+	//	*Value_FloatValue
+	//	*Value_DoubleValue
+	//	*Value_StringValue
+	Value                isValue_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *Value) Reset()         { *m = Value{} }
+func (m *Value) String() string { return proto.CompactTextString(m) }
+func (*Value) ProtoMessage()    {}
+func (*Value) Descriptor() ([]byte, []int) {
+	return fileDescriptor_value_e9174d7d4390b938, []int{0}
+}
+func (m *Value) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Value.Unmarshal(m, b)
+}
+func (m *Value) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Value.Marshal(b, m, deterministic)
+}
+func (dst *Value) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Value.Merge(dst, src)
+}
+func (m *Value) XXX_Size() int {
+	return xxx_messageInfo_Value.Size(m)
+}
+func (m *Value) XXX_DiscardUnknown() {
+	xxx_messageInfo_Value.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Value proto.InternalMessageInfo
+
+type isValue_Value interface {
+	isValue_Value()
+}
+
+type Value_BooleanValue struct {
+	BooleanValue bool `protobuf:"varint,1,opt,name=boolean_value,json=booleanValue,proto3,oneof"`
+}
+
+type Value_Int64Value struct {
+	Int64Value int64 `protobuf:"varint,2,opt,name=int64_value,json=int64Value,proto3,oneof"`
+}
+
+type Value_FloatValue struct {
+	FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3,oneof"`
+}
+
+type Value_DoubleValue struct {
+	DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3,oneof"`
+}
+
+type Value_StringValue struct {
+	StringValue string `protobuf:"bytes,5,opt,name=string_value,json=stringValue,proto3,oneof"`
+}
+
+func (*Value_BooleanValue) isValue_Value() {}
+
+func (*Value_Int64Value) isValue_Value() {}
+
+func (*Value_FloatValue) isValue_Value() {}
+
+func (*Value_DoubleValue) isValue_Value() {}
+
+func (*Value_StringValue) isValue_Value() {}
+
+func (m *Value) GetValue() isValue_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *Value) GetBooleanValue() bool {
+	if x, ok := m.GetValue().(*Value_BooleanValue); ok {
+		return x.BooleanValue
+	}
+	return false
+}
+
+func (m *Value) GetInt64Value() int64 {
+	if x, ok := m.GetValue().(*Value_Int64Value); ok {
+		return x.Int64Value
+	}
+	return 0
+}
+
+func (m *Value) GetFloatValue() float32 {
+	if x, ok := m.GetValue().(*Value_FloatValue); ok {
+		return x.FloatValue
+	}
+	return 0
+}
+
+func (m *Value) GetDoubleValue() float64 {
+	if x, ok := m.GetValue().(*Value_DoubleValue); ok {
+		return x.DoubleValue
+	}
+	return 0
+}
+
+func (m *Value) GetStringValue() string {
+	if x, ok := m.GetValue().(*Value_StringValue); ok {
+		return x.StringValue
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{
+		(*Value_BooleanValue)(nil),
+		(*Value_Int64Value)(nil),
+		(*Value_FloatValue)(nil),
+		(*Value_DoubleValue)(nil),
+		(*Value_StringValue)(nil),
+	}
+}
+
+func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Value)
+	// value
+	switch x := m.Value.(type) {
+	case *Value_BooleanValue:
+		t := uint64(0)
+		if x.BooleanValue {
+			t = 1
+		}
+		b.EncodeVarint(1<<3 | proto.WireVarint)
+		b.EncodeVarint(t)
+	case *Value_Int64Value:
+		b.EncodeVarint(2<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Int64Value))
+	case *Value_FloatValue:
+		b.EncodeVarint(3<<3 | proto.WireFixed32)
+		b.EncodeFixed32(uint64(math.Float32bits(x.FloatValue)))
+	case *Value_DoubleValue:
+		b.EncodeVarint(4<<3 | proto.WireFixed64)
+		b.EncodeFixed64(math.Float64bits(x.DoubleValue))
+	case *Value_StringValue:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.StringValue)
+	case nil:
+	default:
+		return fmt.Errorf("Value.Value has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Value)
+	switch tag {
+	case 1: // value.boolean_value
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &Value_BooleanValue{x != 0}
+		return true, err
+	case 2: // value.int64_value
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &Value_Int64Value{int64(x)}
+		return true, err
+	case 3: // value.float_value
+		if wire != proto.WireFixed32 {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeFixed32()
+		m.Value = &Value_FloatValue{math.Float32frombits(uint32(x))}
+		return true, err
+	case 4: // value.double_value
+		if wire != proto.WireFixed64 {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeFixed64()
+		m.Value = &Value_DoubleValue{math.Float64frombits(x)}
+		return true, err
+	case 5: // value.string_value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Value = &Value_StringValue{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Value_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Value)
+	// value
+	switch x := m.Value.(type) {
+	case *Value_BooleanValue:
+		n += 1 // tag and wire
+		n += 1
+	case *Value_Int64Value:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.Int64Value))
+	case *Value_FloatValue:
+		n += 1 // tag and wire
+		n += 4
+	case *Value_DoubleValue:
+		n += 1 // tag and wire
+		n += 8
+	case *Value_StringValue:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.StringValue)))
+		n += len(x.StringValue)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*Value)(nil), "google.ads.googleads.v0.common.Value")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/common/value.proto", fileDescriptor_value_e9174d7d4390b938)
+}
+
+var fileDescriptor_value_e9174d7d4390b938 = []byte{
+	// 292 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xd0, 0x3f, 0x4f, 0x83, 0x40,
+	0x18, 0x06, 0xf0, 0x1e, 0xb5, 0xfe, 0xb9, 0xd6, 0xa5, 0x93, 0x53, 0x83, 0x35, 0x26, 0xc4, 0xe1,
+	0x20, 0xd1, 0xb8, 0x38, 0x81, 0x26, 0x65, 0x6c, 0x18, 0x18, 0x0c, 0x89, 0x39, 0x0a, 0x5e, 0x48,
+	0x8e, 0x7b, 0x1b, 0x8e, 0xf2, 0x81, 0x1c, 0xfd, 0x14, 0x6e, 0x26, 0x7e, 0x2a, 0x73, 0xf7, 0x5e,
+	0xd9, 0x74, 0xe2, 0xc9, 0xc3, 0x8f, 0x23, 0xf7, 0xd0, 0x3b, 0x01, 0x20, 0x64, 0x1d, 0xf2, 0x4a,
+	0x87, 0x18, 0x4d, 0x1a, 0xa2, 0x70, 0x07, 0x6d, 0x0b, 0x2a, 0x1c, 0xb8, 0x3c, 0xd4, 0x6c, 0xdf,
+	0x41, 0x0f, 0xcb, 0x15, 0x02, 0xc6, 0x2b, 0xcd, 0x46, 0xcb, 0x86, 0x88, 0xa1, 0x5d, 0x7f, 0x13,
+	0x3a, 0xcb, 0x8d, 0x5f, 0xde, 0xd2, 0xcb, 0x12, 0x40, 0xd6, 0x5c, 0xbd, 0xd9, 0x03, 0xae, 0x88,
+	0x4f, 0x82, 0xf3, 0x74, 0x92, 0x2d, 0x5c, 0x8d, 0xec, 0x9a, 0xce, 0x1b, 0xd5, 0x3f, 0x3e, 0x38,
+	0xe4, 0xf9, 0x24, 0x98, 0xa6, 0x93, 0x8c, 0xda, 0x72, 0x24, 0xef, 0x12, 0x78, 0xef, 0xc8, 0xd4,
+	0x27, 0x81, 0x67, 0x88, 0x2d, 0x91, 0xdc, 0xd0, 0x45, 0x05, 0x87, 0x52, 0xd6, 0xce, 0x9c, 0xf8,
+	0x24, 0x20, 0xe9, 0x24, 0x9b, 0x63, 0x3b, 0x22, 0xdd, 0x77, 0x8d, 0x12, 0x0e, 0xcd, 0x7c, 0x12,
+	0x5c, 0x18, 0x84, 0xad, 0x45, 0xc9, 0x19, 0x9d, 0xd9, 0xb7, 0xc9, 0x17, 0xa1, 0xeb, 0x1d, 0xb4,
+	0xec, 0xff, 0x0b, 0x27, 0xd4, 0x7e, 0xb6, 0x35, 0xe3, 0x6c, 0xc9, 0xeb, 0x8b, 0xd3, 0x02, 0x24,
+	0x57, 0x82, 0x41, 0x27, 0x42, 0x51, 0x2b, 0x3b, 0xdd, 0x71, 0xda, 0x7d, 0xa3, 0xff, 0x5a, 0xfa,
+	0x09, 0x1f, 0x1f, 0xde, 0x74, 0x13, 0xc7, 0x9f, 0xde, 0x6a, 0x83, 0x87, 0xc5, 0x95, 0x66, 0x18,
+	0x4d, 0xca, 0x23, 0xf6, 0x6c, 0xd9, 0xcf, 0x11, 0x14, 0x71, 0xa5, 0x8b, 0x11, 0x14, 0x79, 0x54,
+	0x20, 0x28, 0x4f, 0xed, 0x8f, 0xef, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x0b, 0x36, 0xc8,
+	0xe1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/access_reason.pb.go b/googleapis/ads/googleads/v0/enums/access_reason.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..943a2dd67b0b883150877c549693d9a0e434914b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/access_reason.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/access_reason.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible access reasons.
+type AccessReasonEnum_AccessReason int32
+
+const (
+	// Not specified.
+	AccessReasonEnum_UNSPECIFIED AccessReasonEnum_AccessReason = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccessReasonEnum_UNKNOWN AccessReasonEnum_AccessReason = 1
+	// The entity is owned by the user.
+	AccessReasonEnum_OWNED AccessReasonEnum_AccessReason = 2
+	// The entity is shared to the user.
+	AccessReasonEnum_SHARED AccessReasonEnum_AccessReason = 3
+	// The entity is licensed to the user.
+	AccessReasonEnum_LICENSED AccessReasonEnum_AccessReason = 4
+	// The user subscribed to the entity.
+	AccessReasonEnum_SUBSCRIBED AccessReasonEnum_AccessReason = 5
+	// The entity is accessible to the user.
+	AccessReasonEnum_AFFILIATED AccessReasonEnum_AccessReason = 6
+)
+
+var AccessReasonEnum_AccessReason_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OWNED",
+	3: "SHARED",
+	4: "LICENSED",
+	5: "SUBSCRIBED",
+	6: "AFFILIATED",
+}
+var AccessReasonEnum_AccessReason_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"OWNED":       2,
+	"SHARED":      3,
+	"LICENSED":    4,
+	"SUBSCRIBED":  5,
+	"AFFILIATED":  6,
+}
+
+func (x AccessReasonEnum_AccessReason) String() string {
+	return proto.EnumName(AccessReasonEnum_AccessReason_name, int32(x))
+}
+func (AccessReasonEnum_AccessReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_access_reason_757eb5f4e3d691fd, []int{0, 0}
+}
+
+// Indicates the way the entity such as user list is related to a user.
+type AccessReasonEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccessReasonEnum) Reset()         { *m = AccessReasonEnum{} }
+func (m *AccessReasonEnum) String() string { return proto.CompactTextString(m) }
+func (*AccessReasonEnum) ProtoMessage()    {}
+func (*AccessReasonEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_access_reason_757eb5f4e3d691fd, []int{0}
+}
+func (m *AccessReasonEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccessReasonEnum.Unmarshal(m, b)
+}
+func (m *AccessReasonEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccessReasonEnum.Marshal(b, m, deterministic)
+}
+func (dst *AccessReasonEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccessReasonEnum.Merge(dst, src)
+}
+func (m *AccessReasonEnum) XXX_Size() int {
+	return xxx_messageInfo_AccessReasonEnum.Size(m)
+}
+func (m *AccessReasonEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccessReasonEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccessReasonEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AccessReasonEnum)(nil), "google.ads.googleads.v0.enums.AccessReasonEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AccessReasonEnum_AccessReason", AccessReasonEnum_AccessReason_name, AccessReasonEnum_AccessReason_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/access_reason.proto", fileDescriptor_access_reason_757eb5f4e3d691fd)
+}
+
+var fileDescriptor_access_reason_757eb5f4e3d691fd = []byte{
+	// 298 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0xc2, 0x30,
+	0x1c, 0xc6, 0x1d, 0x08, 0xea, 0x1f, 0xa2, 0xb5, 0x77, 0x0e, 0xf2, 0x00, 0xdd, 0x8c, 0x47, 0x4f,
+	0x1d, 0x2d, 0xd8, 0x48, 0x0a, 0xd9, 0x1c, 0x24, 0x66, 0x89, 0x99, 0xdb, 0xd2, 0x98, 0xb0, 0x15,
+	0x57, 0xe1, 0x0d, 0x7c, 0x11, 0x8f, 0x3e, 0x86, 0x47, 0x9f, 0xca, 0xac, 0x13, 0xc2, 0x45, 0x2f,
+	0xcd, 0xd7, 0x7e, 0xfd, 0xb5, 0xff, 0xef, 0x83, 0x6b, 0xa5, 0xb5, 0x5a, 0xe5, 0x6e, 0x92, 0x19,
+	0xb7, 0x91, 0xb5, 0xda, 0x7a, 0x6e, 0x5e, 0x6e, 0x0a, 0xe3, 0x26, 0x69, 0x9a, 0x1b, 0xf3, 0x54,
+	0xe5, 0x89, 0xd1, 0x25, 0x59, 0x57, 0xfa, 0x4d, 0xe3, 0x41, 0x73, 0x8f, 0x24, 0x99, 0x21, 0x7b,
+	0x84, 0x6c, 0x3d, 0x62, 0x91, 0xe1, 0xbb, 0x03, 0x88, 0x5a, 0x2c, 0xb0, 0x14, 0x2f, 0x37, 0xc5,
+	0xf0, 0x15, 0xfa, 0x87, 0x67, 0xf8, 0x02, 0x7a, 0x91, 0x0c, 0xe7, 0x7c, 0x24, 0xc6, 0x82, 0x33,
+	0x74, 0x84, 0x7b, 0x70, 0x12, 0xc9, 0x7b, 0x39, 0x5b, 0x4a, 0xe4, 0xe0, 0x33, 0xe8, 0xcc, 0x96,
+	0x92, 0x33, 0xd4, 0xc2, 0x00, 0xdd, 0xf0, 0x8e, 0x06, 0x9c, 0xa1, 0x36, 0xee, 0xc3, 0xe9, 0x54,
+	0x8c, 0xb8, 0x0c, 0x39, 0x43, 0xc7, 0xf8, 0x1c, 0x20, 0x8c, 0xfc, 0x70, 0x14, 0x08, 0x9f, 0x33,
+	0xd4, 0xa9, 0xf7, 0x74, 0x3c, 0x16, 0x53, 0x41, 0x1f, 0x38, 0x43, 0x5d, 0xff, 0xcb, 0x81, 0xab,
+	0x54, 0x17, 0xe4, 0xdf, 0x69, 0xfd, 0xcb, 0xc3, 0xb1, 0xe6, 0x75, 0xbe, 0xb9, 0xf3, 0xe8, 0xff,
+	0x32, 0x4a, 0xaf, 0x92, 0x52, 0x11, 0x5d, 0x29, 0x57, 0xe5, 0xa5, 0x4d, 0xbf, 0x2b, 0x69, 0xfd,
+	0x62, 0xfe, 0xe8, 0xec, 0xd6, 0xae, 0x1f, 0xad, 0xf6, 0x84, 0xd2, 0xcf, 0xd6, 0x60, 0xd2, 0x3c,
+	0x45, 0x33, 0x43, 0x1a, 0x59, 0xab, 0x85, 0x47, 0xea, 0x5a, 0xcc, 0xf7, 0xce, 0x8f, 0x69, 0x66,
+	0xe2, 0xbd, 0x1f, 0x2f, 0xbc, 0xd8, 0xfa, 0xcf, 0x5d, 0xfb, 0xe9, 0xcd, 0x4f, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xd0, 0x24, 0x60, 0xa5, 0xa7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/account_budget_proposal_status.pb.go b/googleapis/ads/googleads/v0/enums/account_budget_proposal_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f40a49132da9bed59a9ce8a717bd64084f980f5a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/account_budget_proposal_status.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/account_budget_proposal_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible statuses of an AccountBudgetProposal.
+type AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus int32
+
+const (
+	// Not specified.
+	AccountBudgetProposalStatusEnum_UNSPECIFIED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccountBudgetProposalStatusEnum_UNKNOWN AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 1
+	// The proposal is pending approval.
+	AccountBudgetProposalStatusEnum_PENDING AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 2
+	// The proposal has been approved but the corresponding billing setup
+	// has not.  This can occur for proposals that set up the first budget
+	// when signing up for billing or when performing a change of bill-to
+	// operation.
+	AccountBudgetProposalStatusEnum_APPROVED_HELD AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 3
+	// The proposal has been approved.
+	AccountBudgetProposalStatusEnum_APPROVED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 4
+	// The proposal has been cancelled by the user.
+	AccountBudgetProposalStatusEnum_CANCELLED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 5
+	// The proposal has been rejected by the user, e.g. by rejecting an
+	// acceptance email.
+	AccountBudgetProposalStatusEnum_REJECTED AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus = 6
+)
+
+var AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "APPROVED_HELD",
+	4: "APPROVED",
+	5: "CANCELLED",
+	6: "REJECTED",
+}
+var AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"PENDING":       2,
+	"APPROVED_HELD": 3,
+	"APPROVED":      4,
+	"CANCELLED":     5,
+	"REJECTED":      6,
+}
+
+func (x AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus) String() string {
+	return proto.EnumName(AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_name, int32(x))
+}
+func (AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_status_b35417438480c65c, []int{0, 0}
+}
+
+// Message describing AccountBudgetProposal statuses.
+type AccountBudgetProposalStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetProposalStatusEnum) Reset()         { *m = AccountBudgetProposalStatusEnum{} }
+func (m *AccountBudgetProposalStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalStatusEnum) ProtoMessage()    {}
+func (*AccountBudgetProposalStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_status_b35417438480c65c, []int{0}
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalStatusEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudgetProposalStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalStatusEnum.Merge(dst, src)
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalStatusEnum.Size(m)
+}
+func (m *AccountBudgetProposalStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AccountBudgetProposalStatusEnum)(nil), "google.ads.googleads.v0.enums.AccountBudgetProposalStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus", AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_name, AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/account_budget_proposal_status.proto", fileDescriptor_account_budget_proposal_status_b35417438480c65c)
+}
+
+var fileDescriptor_account_budget_proposal_status_b35417438480c65c = []byte{
+	// 317 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0xf2, 0x30,
+	0x00, 0xc7, 0xbf, 0xc1, 0x27, 0x6a, 0x91, 0x58, 0x7b, 0x35, 0x44, 0xe5, 0x01, 0xba, 0x25, 0x1e,
+	0x3d, 0x75, 0x6b, 0x45, 0x94, 0x94, 0x06, 0x04, 0x13, 0xb3, 0x64, 0x29, 0x6c, 0x69, 0x4c, 0x60,
+	0x5d, 0xe8, 0xc6, 0x23, 0xf8, 0x20, 0x1e, 0x79, 0x14, 0x6f, 0xbe, 0x91, 0x69, 0x07, 0xdc, 0xe4,
+	0xd2, 0xfc, 0xdb, 0x7f, 0xfb, 0x6b, 0xfb, 0x03, 0xa1, 0xd2, 0x5a, 0x2d, 0x33, 0x5f, 0xa6, 0xc6,
+	0xaf, 0xa3, 0x4d, 0x9b, 0xc0, 0xcf, 0xf2, 0x6a, 0x65, 0x7c, 0xb9, 0x58, 0xe8, 0x2a, 0x2f, 0x93,
+	0x79, 0x95, 0xaa, 0xac, 0x4c, 0x8a, 0xb5, 0x2e, 0xb4, 0x91, 0xcb, 0xc4, 0x94, 0xb2, 0xac, 0x0c,
+	0x2e, 0xd6, 0xba, 0xd4, 0xa8, 0x5b, 0x1f, 0xc4, 0x32, 0x35, 0xf8, 0xc0, 0xc0, 0x9b, 0x00, 0x3b,
+	0x46, 0x6f, 0xeb, 0x81, 0x1b, 0x52, 0x73, 0x42, 0x87, 0x11, 0x3b, 0xca, 0xc4, 0x41, 0x58, 0x5e,
+	0xad, 0x7a, 0x9f, 0x1e, 0xb8, 0x3e, 0xb2, 0x07, 0x5d, 0x82, 0xf6, 0x94, 0x4f, 0x04, 0x8b, 0x06,
+	0x8f, 0x03, 0x46, 0xe1, 0x3f, 0xd4, 0x06, 0xa7, 0x53, 0xfe, 0xc2, 0x47, 0x6f, 0x1c, 0x7a, 0x76,
+	0x22, 0x18, 0xa7, 0x03, 0xde, 0x87, 0x0d, 0x74, 0x05, 0x3a, 0x44, 0x88, 0xf1, 0x68, 0xc6, 0x68,
+	0xf2, 0xc4, 0x86, 0x14, 0x36, 0xd1, 0x05, 0x38, 0xdb, 0x2f, 0xc1, 0xff, 0xa8, 0x03, 0xce, 0x23,
+	0xc2, 0x23, 0x36, 0x1c, 0x32, 0x0a, 0x4f, 0x6c, 0x39, 0x66, 0xcf, 0x2c, 0x7a, 0x65, 0x14, 0xb6,
+	0xc2, 0x1f, 0x0f, 0xdc, 0x2d, 0xf4, 0x0a, 0x1f, 0xfd, 0x52, 0x78, 0x7b, 0xe4, 0xad, 0xc2, 0x3a,
+	0x11, 0xde, 0xfb, 0xce, 0x2c, 0x56, 0x7a, 0x29, 0x73, 0x85, 0xf5, 0x5a, 0xf9, 0x2a, 0xcb, 0x9d,
+	0xb1, 0xbd, 0xe9, 0xe2, 0xc3, 0xfc, 0x21, 0xfe, 0xc1, 0x8d, 0x5f, 0x8d, 0x66, 0x9f, 0x90, 0x6d,
+	0xa3, 0xdb, 0xaf, 0x51, 0x24, 0x35, 0xb8, 0x8e, 0x36, 0xcd, 0x02, 0x6c, 0xdd, 0x99, 0xef, 0x7d,
+	0x1f, 0x93, 0xd4, 0xc4, 0x87, 0x3e, 0x9e, 0x05, 0xb1, 0xeb, 0xe7, 0x2d, 0x77, 0xe9, 0xfd, 0x6f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x3d, 0x6f, 0x58, 0xec, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/account_budget_proposal_type.pb.go b/googleapis/ads/googleads/v0/enums/account_budget_proposal_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5fb349bce6800a0ed2543b06e1e526c78a2b16e6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/account_budget_proposal_type.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/account_budget_proposal_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible types of an AccountBudgetProposal.
+type AccountBudgetProposalTypeEnum_AccountBudgetProposalType int32
+
+const (
+	// Not specified.
+	AccountBudgetProposalTypeEnum_UNSPECIFIED AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccountBudgetProposalTypeEnum_UNKNOWN AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 1
+	// Identifies a request to create a new budget.
+	AccountBudgetProposalTypeEnum_CREATE AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 2
+	// Identifies a request to edit an existing budget.
+	AccountBudgetProposalTypeEnum_UPDATE AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 3
+	// Identifies a request to end a budget that has already started.
+	AccountBudgetProposalTypeEnum_END AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 4
+	// Identifies a request to remove a budget that hasn't started yet.
+	AccountBudgetProposalTypeEnum_REMOVE AccountBudgetProposalTypeEnum_AccountBudgetProposalType = 5
+)
+
+var AccountBudgetProposalTypeEnum_AccountBudgetProposalType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CREATE",
+	3: "UPDATE",
+	4: "END",
+	5: "REMOVE",
+}
+var AccountBudgetProposalTypeEnum_AccountBudgetProposalType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CREATE":      2,
+	"UPDATE":      3,
+	"END":         4,
+	"REMOVE":      5,
+}
+
+func (x AccountBudgetProposalTypeEnum_AccountBudgetProposalType) String() string {
+	return proto.EnumName(AccountBudgetProposalTypeEnum_AccountBudgetProposalType_name, int32(x))
+}
+func (AccountBudgetProposalTypeEnum_AccountBudgetProposalType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_type_b26bf84569e65178, []int{0, 0}
+}
+
+// Message describing AccountBudgetProposal types.
+type AccountBudgetProposalTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetProposalTypeEnum) Reset()         { *m = AccountBudgetProposalTypeEnum{} }
+func (m *AccountBudgetProposalTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalTypeEnum) ProtoMessage()    {}
+func (*AccountBudgetProposalTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_type_b26bf84569e65178, []int{0}
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalTypeEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudgetProposalTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalTypeEnum.Merge(dst, src)
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalTypeEnum.Size(m)
+}
+func (m *AccountBudgetProposalTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AccountBudgetProposalTypeEnum)(nil), "google.ads.googleads.v0.enums.AccountBudgetProposalTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType", AccountBudgetProposalTypeEnum_AccountBudgetProposalType_name, AccountBudgetProposalTypeEnum_AccountBudgetProposalType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/account_budget_proposal_type.proto", fileDescriptor_account_budget_proposal_type_b26bf84569e65178)
+}
+
+var fileDescriptor_account_budget_proposal_type_b26bf84569e65178 = []byte{
+	// 296 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x6a, 0xbb, 0x30,
+	0x1c, 0xc7, 0xff, 0xea, 0x7f, 0x2d, 0xa4, 0x87, 0x89, 0xb7, 0x1d, 0x1c, 0xac, 0x0f, 0x10, 0x85,
+	0x1d, 0x77, 0x59, 0xac, 0x59, 0x29, 0x63, 0x56, 0xba, 0xea, 0x60, 0x08, 0x62, 0x35, 0x0b, 0x03,
+	0x35, 0xc1, 0x68, 0xa1, 0x4f, 0xb0, 0xf7, 0xd8, 0x71, 0x8f, 0xb2, 0xcb, 0x5e, 0x69, 0x24, 0x69,
+	0x7b, 0x73, 0x97, 0xf0, 0x21, 0xdf, 0xe4, 0x93, 0x5f, 0xbe, 0xe0, 0x9e, 0x32, 0x46, 0x6b, 0xe2,
+	0x15, 0x95, 0xf0, 0x34, 0x4a, 0xda, 0xfb, 0x1e, 0x69, 0x87, 0x46, 0x78, 0x45, 0x59, 0xb2, 0xa1,
+	0xed, 0xf3, 0xdd, 0x50, 0x51, 0xd2, 0xe7, 0xbc, 0x63, 0x9c, 0x89, 0xa2, 0xce, 0xfb, 0x03, 0x27,
+	0x90, 0x77, 0xac, 0x67, 0x8e, 0xab, 0xaf, 0xc1, 0xa2, 0x12, 0xf0, 0x6c, 0x80, 0x7b, 0x1f, 0x2a,
+	0xc3, 0xfc, 0xc3, 0x00, 0x2e, 0xd2, 0x96, 0x40, 0x49, 0xe2, 0xa3, 0x63, 0x7b, 0xe0, 0x04, 0xb7,
+	0x43, 0x33, 0x7f, 0x03, 0x57, 0xa3, 0x07, 0x9c, 0x4b, 0x30, 0x4b, 0xa2, 0xe7, 0x18, 0x2f, 0x56,
+	0x0f, 0x2b, 0x1c, 0xda, 0xff, 0x9c, 0x19, 0x98, 0x26, 0xd1, 0x63, 0xb4, 0x7e, 0x89, 0x6c, 0xc3,
+	0x01, 0x60, 0xb2, 0xd8, 0x60, 0xb4, 0xc5, 0xb6, 0x29, 0x39, 0x89, 0x43, 0xc9, 0x96, 0x33, 0x05,
+	0x16, 0x8e, 0x42, 0xfb, 0xbf, 0xdc, 0xdc, 0xe0, 0xa7, 0x75, 0x8a, 0xed, 0x8b, 0xe0, 0xc7, 0x00,
+	0x37, 0x25, 0x6b, 0xe0, 0x9f, 0xf3, 0x06, 0xd7, 0xa3, 0xb3, 0xc4, 0xf2, 0xbb, 0xb1, 0xf1, 0x1a,
+	0x1c, 0x05, 0x94, 0xd5, 0x45, 0x4b, 0x21, 0xeb, 0xa8, 0x47, 0x49, 0xab, 0xca, 0x38, 0x55, 0xc8,
+	0xdf, 0xc5, 0x48, 0xa3, 0x77, 0x6a, 0xfd, 0x34, 0xad, 0x25, 0x42, 0x5f, 0xa6, 0xbb, 0xd4, 0x2a,
+	0x54, 0x09, 0xa8, 0x51, 0x52, 0xea, 0x43, 0x59, 0x8c, 0xf8, 0x3e, 0xe5, 0x19, 0xaa, 0x44, 0x76,
+	0xce, 0xb3, 0xd4, 0xcf, 0x54, 0xbe, 0x9b, 0xa8, 0x47, 0x6f, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0x37, 0x86, 0x1d, 0x51, 0xc5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/account_budget_status.pb.go b/googleapis/ads/googleads/v0/enums/account_budget_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3467027bedef87459bb0a6a77c11add0c332c539
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/account_budget_status.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/account_budget_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible statuses of an AccountBudget.
+type AccountBudgetStatusEnum_AccountBudgetStatus int32
+
+const (
+	// Not specified.
+	AccountBudgetStatusEnum_UNSPECIFIED AccountBudgetStatusEnum_AccountBudgetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	AccountBudgetStatusEnum_UNKNOWN AccountBudgetStatusEnum_AccountBudgetStatus = 1
+	// The account budget is pending approval.
+	AccountBudgetStatusEnum_PENDING AccountBudgetStatusEnum_AccountBudgetStatus = 2
+	// The account budget has been approved.
+	AccountBudgetStatusEnum_APPROVED AccountBudgetStatusEnum_AccountBudgetStatus = 3
+	// The account budget has been cancelled by the user.
+	AccountBudgetStatusEnum_CANCELLED AccountBudgetStatusEnum_AccountBudgetStatus = 4
+)
+
+var AccountBudgetStatusEnum_AccountBudgetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "APPROVED",
+	4: "CANCELLED",
+}
+var AccountBudgetStatusEnum_AccountBudgetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"PENDING":     2,
+	"APPROVED":    3,
+	"CANCELLED":   4,
+}
+
+func (x AccountBudgetStatusEnum_AccountBudgetStatus) String() string {
+	return proto.EnumName(AccountBudgetStatusEnum_AccountBudgetStatus_name, int32(x))
+}
+func (AccountBudgetStatusEnum_AccountBudgetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_status_2620bffae5958f60, []int{0, 0}
+}
+
+// Message describing AccountBudget statuses.
+type AccountBudgetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetStatusEnum) Reset()         { *m = AccountBudgetStatusEnum{} }
+func (m *AccountBudgetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetStatusEnum) ProtoMessage()    {}
+func (*AccountBudgetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_status_2620bffae5958f60, []int{0}
+}
+func (m *AccountBudgetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetStatusEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudgetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetStatusEnum.Merge(dst, src)
+}
+func (m *AccountBudgetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetStatusEnum.Size(m)
+}
+func (m *AccountBudgetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AccountBudgetStatusEnum)(nil), "google.ads.googleads.v0.enums.AccountBudgetStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AccountBudgetStatusEnum_AccountBudgetStatus", AccountBudgetStatusEnum_AccountBudgetStatus_name, AccountBudgetStatusEnum_AccountBudgetStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/account_budget_status.proto", fileDescriptor_account_budget_status_2620bffae5958f60)
+}
+
+var fileDescriptor_account_budget_status_2620bffae5958f60 = []byte{
+	// 286 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4b, 0xc3, 0x30,
+	0x18, 0xc6, 0x5d, 0x27, 0xfe, 0xc9, 0x14, 0x4b, 0x3d, 0xe8, 0x65, 0x07, 0xf7, 0x01, 0xd2, 0x82,
+	0x27, 0xf1, 0x94, 0xb6, 0xb1, 0x14, 0x47, 0x16, 0x1c, 0xab, 0x20, 0x95, 0xd1, 0xb5, 0x25, 0x08,
+	0x6b, 0x32, 0x96, 0x64, 0xf8, 0x79, 0x3c, 0xfa, 0x4d, 0xf4, 0x53, 0x49, 0x12, 0xb7, 0xd3, 0xf4,
+	0x12, 0x9e, 0xf0, 0xe4, 0x97, 0xf7, 0x7d, 0x1e, 0x70, 0xc7, 0x84, 0x60, 0xcb, 0x36, 0xac, 0x1a,
+	0x19, 0x3a, 0x69, 0xd4, 0x26, 0x0a, 0x5b, 0xae, 0x3b, 0x19, 0x56, 0x75, 0x2d, 0x34, 0x57, 0xf3,
+	0x85, 0x6e, 0x58, 0xab, 0xe6, 0x52, 0x55, 0x4a, 0x4b, 0xb8, 0x5a, 0x0b, 0x25, 0x82, 0xa1, 0x7b,
+	0x0f, 0xab, 0x46, 0xc2, 0x1d, 0x0a, 0x37, 0x11, 0xb4, 0xe8, 0xe8, 0x1d, 0x5c, 0x21, 0x47, 0xc7,
+	0x16, 0x9e, 0x5a, 0x16, 0x73, 0xdd, 0x8d, 0x5e, 0xc1, 0xe5, 0x1e, 0x2b, 0xb8, 0x00, 0x83, 0x19,
+	0x99, 0x52, 0x9c, 0xe4, 0x0f, 0x39, 0x4e, 0xfd, 0x83, 0x60, 0x00, 0x8e, 0x67, 0xe4, 0x91, 0x4c,
+	0x9e, 0x89, 0xdf, 0x33, 0x17, 0x8a, 0x49, 0x9a, 0x93, 0xcc, 0xf7, 0x82, 0x33, 0x70, 0x82, 0x28,
+	0x7d, 0x9a, 0x14, 0x38, 0xf5, 0xfb, 0xc1, 0x39, 0x38, 0x4d, 0x10, 0x49, 0xf0, 0x78, 0x8c, 0x53,
+	0xff, 0x30, 0xfe, 0xea, 0x81, 0x9b, 0x5a, 0x74, 0xf0, 0xdf, 0xfd, 0xe2, 0xeb, 0x3d, 0x2b, 0x50,
+	0x13, 0x8c, 0xf6, 0x5e, 0xe2, 0x5f, 0x94, 0x89, 0x65, 0xc5, 0x19, 0x14, 0x6b, 0x16, 0xb2, 0x96,
+	0xdb, 0xd8, 0xdb, 0x96, 0x56, 0x6f, 0xf2, 0x8f, 0xd2, 0xee, 0xed, 0xf9, 0xe1, 0xf5, 0x33, 0x84,
+	0x3e, 0xbd, 0x61, 0xe6, 0xbe, 0x42, 0x8d, 0x84, 0x4e, 0x1a, 0x55, 0x44, 0xd0, 0x34, 0x21, 0xbf,
+	0xb7, 0x7e, 0x89, 0x1a, 0x59, 0xee, 0xfc, 0xb2, 0x88, 0x4a, 0xeb, 0x2f, 0x8e, 0xec, 0xd0, 0xdb,
+	0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, 0x1d, 0xbe, 0x41, 0xa8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_customizer_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/ad_customizer_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8bffac6be2d26e6abf0f8757f042e5204701293f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_customizer_placeholder_field.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_customizer_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Ad Customizers placeholder fields.
+type AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField int32
+
+const (
+	// Not specified.
+	AdCustomizerPlaceholderFieldEnum_UNSPECIFIED AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	AdCustomizerPlaceholderFieldEnum_UNKNOWN AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 1
+	// Data Type: INT64. Integer value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_INTEGER AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 2
+	// Data Type: STRING. Price value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_PRICE AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 3
+	// Data Type: DATE_TIME. Date value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_DATE AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 4
+	// Data Type: STRING. String value to be inserted.
+	AdCustomizerPlaceholderFieldEnum_STRING AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField = 5
+)
+
+var AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INTEGER",
+	3: "PRICE",
+	4: "DATE",
+	5: "STRING",
+}
+var AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"INTEGER":     2,
+	"PRICE":       3,
+	"DATE":        4,
+	"STRING":      5,
+}
+
+func (x AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField) String() string {
+	return proto.EnumName(AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_name, int32(x))
+}
+func (AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_customizer_placeholder_field_2555744dcdb89a47, []int{0, 0}
+}
+
+// Values for Ad Customizer placeholder fields.
+type AdCustomizerPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdCustomizerPlaceholderFieldEnum) Reset()         { *m = AdCustomizerPlaceholderFieldEnum{} }
+func (m *AdCustomizerPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*AdCustomizerPlaceholderFieldEnum) ProtoMessage()    {}
+func (*AdCustomizerPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_customizer_placeholder_field_2555744dcdb89a47, []int{0}
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdCustomizerPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.Size(m)
+}
+func (m *AdCustomizerPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdCustomizerPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdCustomizerPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdCustomizerPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.AdCustomizerPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField", AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_name, AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_customizer_placeholder_field.proto", fileDescriptor_ad_customizer_placeholder_field_2555744dcdb89a47)
+}
+
+var fileDescriptor_ad_customizer_placeholder_field_2555744dcdb89a47 = []byte{
+	// 302 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x3d, 0x4e, 0xf3, 0x30,
+	0x1c, 0xc6, 0xdf, 0xf4, 0xeb, 0x05, 0x77, 0xc0, 0xf2, 0x4c, 0x25, 0xda, 0x03, 0x38, 0x91, 0x18,
+	0x99, 0xdc, 0xd4, 0x8d, 0x22, 0x24, 0x13, 0xf5, 0x0b, 0x09, 0x45, 0xaa, 0x42, 0x6c, 0x4c, 0x50,
+	0x12, 0x47, 0x71, 0xd3, 0x81, 0x43, 0x70, 0x08, 0x46, 0x8e, 0xc2, 0xc8, 0x89, 0x90, 0x13, 0x1a,
+	0x26, 0xb2, 0x58, 0x8f, 0xf5, 0xd8, 0x3f, 0xff, 0xfd, 0x03, 0xae, 0x54, 0x4a, 0xa6, 0xc2, 0x8e,
+	0xb8, 0xb6, 0x9b, 0x68, 0xd2, 0xd1, 0xb1, 0x45, 0x5e, 0x65, 0xda, 0x8e, 0xf8, 0x3e, 0xae, 0xf4,
+	0x41, 0x65, 0xc9, 0xab, 0x28, 0xf7, 0x45, 0x1a, 0xc5, 0xe2, 0x59, 0xa5, 0x5c, 0x94, 0xfb, 0xa7,
+	0x44, 0xa4, 0x1c, 0x17, 0xa5, 0x3a, 0x28, 0x34, 0x69, 0x6e, 0xe2, 0x88, 0x6b, 0xdc, 0x42, 0xf0,
+	0xd1, 0xc1, 0x35, 0x64, 0xf6, 0x66, 0x81, 0x2b, 0xc2, 0xdd, 0x96, 0x13, 0xfc, 0x62, 0x96, 0x86,
+	0x42, 0xf3, 0x2a, 0x9b, 0xbd, 0x80, 0xcb, 0xae, 0x33, 0xe8, 0x02, 0x8c, 0xb7, 0x6c, 0x1d, 0x50,
+	0xd7, 0x5f, 0xfa, 0x74, 0x01, 0xff, 0xa1, 0x31, 0xf8, 0xbf, 0x65, 0xb7, 0xec, 0xee, 0x9e, 0x41,
+	0xcb, 0x6c, 0x7c, 0xb6, 0xa1, 0x1e, 0x5d, 0xc1, 0x1e, 0x3a, 0x07, 0xc3, 0x60, 0xe5, 0xbb, 0x14,
+	0xf6, 0xd1, 0x19, 0x18, 0x2c, 0xc8, 0x86, 0xc2, 0x01, 0x02, 0x60, 0xb4, 0xde, 0xac, 0x7c, 0xe6,
+	0xc1, 0xe1, 0xfc, 0xcb, 0x02, 0xd3, 0x58, 0x65, 0xb8, 0x73, 0xec, 0xf9, 0xb4, 0x6b, 0x9e, 0xc0,
+	0x7c, 0x3c, 0xb0, 0x1e, 0xe6, 0x3f, 0x0c, 0xa9, 0xd2, 0x28, 0x97, 0x58, 0x95, 0xd2, 0x96, 0x22,
+	0xaf, 0xb5, 0x9c, 0x7c, 0x16, 0x89, 0xfe, 0x43, 0xef, 0x4d, 0xbd, 0xbe, 0xf7, 0xfa, 0x1e, 0x21,
+	0x1f, 0xbd, 0x89, 0xd7, 0xa0, 0x08, 0xd7, 0xb8, 0x89, 0x26, 0xed, 0x1c, 0x6c, 0xfc, 0xe8, 0xcf,
+	0x53, 0x1f, 0x12, 0xae, 0xc3, 0xb6, 0x0f, 0x77, 0x4e, 0x58, 0xf7, 0x8f, 0xa3, 0xfa, 0xd1, 0xeb,
+	0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x56, 0xb7, 0x95, 0xd2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_group_ad_rotation_mode.pb.go b/googleapis/ads/googleads/v0/enums/ad_group_ad_rotation_mode.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..241baba05c44aa5123e2c4b370524b7c16ddfe9d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_group_ad_rotation_mode.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_group_ad_rotation_mode.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible ad rotation modes of an ad group.
+type AdGroupAdRotationModeEnum_AdGroupAdRotationMode int32
+
+const (
+	// The ad rotation mode has not been specified.
+	AdGroupAdRotationModeEnum_UNSPECIFIED AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupAdRotationModeEnum_UNKNOWN AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 1
+	// Optimize ad group ads based on clicks or conversions.
+	AdGroupAdRotationModeEnum_OPTIMIZE AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 2
+	// Rotate evenly forever.
+	AdGroupAdRotationModeEnum_ROTATE_FOREVER AdGroupAdRotationModeEnum_AdGroupAdRotationMode = 3
+)
+
+var AdGroupAdRotationModeEnum_AdGroupAdRotationMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPTIMIZE",
+	3: "ROTATE_FOREVER",
+}
+var AdGroupAdRotationModeEnum_AdGroupAdRotationMode_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"OPTIMIZE":       2,
+	"ROTATE_FOREVER": 3,
+}
+
+func (x AdGroupAdRotationModeEnum_AdGroupAdRotationMode) String() string {
+	return proto.EnumName(AdGroupAdRotationModeEnum_AdGroupAdRotationMode_name, int32(x))
+}
+func (AdGroupAdRotationModeEnum_AdGroupAdRotationMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_rotation_mode_3fa52ee91bad9207, []int{0, 0}
+}
+
+// Container for enum describing possible ad rotation modes of ads within an
+// ad group.
+type AdGroupAdRotationModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAdRotationModeEnum) Reset()         { *m = AdGroupAdRotationModeEnum{} }
+func (m *AdGroupAdRotationModeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdRotationModeEnum) ProtoMessage()    {}
+func (*AdGroupAdRotationModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_rotation_mode_3fa52ee91bad9207, []int{0}
+}
+func (m *AdGroupAdRotationModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdRotationModeEnum.Unmarshal(m, b)
+}
+func (m *AdGroupAdRotationModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdRotationModeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupAdRotationModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdRotationModeEnum.Merge(dst, src)
+}
+func (m *AdGroupAdRotationModeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdRotationModeEnum.Size(m)
+}
+func (m *AdGroupAdRotationModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdRotationModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdRotationModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupAdRotationModeEnum)(nil), "google.ads.googleads.v0.enums.AdGroupAdRotationModeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode", AdGroupAdRotationModeEnum_AdGroupAdRotationMode_name, AdGroupAdRotationModeEnum_AdGroupAdRotationMode_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_group_ad_rotation_mode.proto", fileDescriptor_ad_group_ad_rotation_mode_3fa52ee91bad9207)
+}
+
+var fileDescriptor_ad_group_ad_rotation_mode_3fa52ee91bad9207 = []byte{
+	// 285 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xc3, 0x30,
+	0x14, 0x86, 0x6d, 0x07, 0x2a, 0x99, 0x68, 0x09, 0x78, 0xa1, 0xb0, 0x0b, 0xf7, 0x00, 0x69, 0xc1,
+	0x4b, 0xf1, 0x22, 0xd5, 0xac, 0x14, 0x59, 0x5b, 0x6a, 0xd7, 0xc1, 0x28, 0x94, 0x68, 0x4a, 0x18,
+	0xac, 0x3d, 0xa5, 0x69, 0xf7, 0x40, 0x5e, 0xfa, 0x28, 0xfa, 0x52, 0xd2, 0x74, 0xdb, 0xd5, 0xdc,
+	0x4d, 0xf8, 0xe1, 0xe3, 0x3b, 0x27, 0xe7, 0x47, 0xcf, 0x12, 0x40, 0x6e, 0x0a, 0x9b, 0x0b, 0x65,
+	0x0f, 0xb1, 0x4f, 0x5b, 0xc7, 0x2e, 0xaa, 0xae, 0x54, 0x36, 0x17, 0xb9, 0x6c, 0xa0, 0xab, 0x73,
+	0x2e, 0xf2, 0x06, 0x5a, 0xde, 0xae, 0xa1, 0xca, 0x4b, 0x10, 0x05, 0xa9, 0x1b, 0x68, 0x01, 0x4f,
+	0x06, 0x87, 0x70, 0xa1, 0xc8, 0x41, 0x27, 0x5b, 0x87, 0x68, 0x7d, 0xda, 0xa2, 0x3b, 0x2a, 0xbc,
+	0x7e, 0x00, 0x15, 0xf1, 0x4e, 0x9f, 0x83, 0x28, 0x58, 0xd5, 0x95, 0xd3, 0x25, 0xba, 0x3d, 0x0a,
+	0xf1, 0x0d, 0x1a, 0x2f, 0x82, 0xf7, 0x88, 0xbd, 0xf8, 0x33, 0x9f, 0xbd, 0x5a, 0x67, 0x78, 0x8c,
+	0x2e, 0x16, 0xc1, 0x5b, 0x10, 0x2e, 0x03, 0xcb, 0xc0, 0x57, 0xe8, 0x32, 0x8c, 0x12, 0x7f, 0xee,
+	0xaf, 0x98, 0x65, 0x62, 0x8c, 0xae, 0xe3, 0x30, 0xa1, 0x09, 0xcb, 0x67, 0x61, 0xcc, 0x52, 0x16,
+	0x5b, 0x23, 0xf7, 0xd7, 0x40, 0x0f, 0x9f, 0x50, 0x92, 0x93, 0x7f, 0x73, 0xef, 0x8f, 0x2e, 0x8f,
+	0xfa, 0xb3, 0x22, 0x63, 0xe5, 0xee, 0x64, 0x09, 0x1b, 0x5e, 0x49, 0x02, 0x8d, 0xb4, 0x65, 0x51,
+	0xe9, 0xa3, 0xf7, 0x3d, 0xd5, 0x6b, 0xf5, 0x4f, 0x6d, 0x4f, 0xfa, 0xfd, 0x32, 0x47, 0x1e, 0xa5,
+	0xdf, 0xe6, 0xc4, 0x1b, 0x46, 0x51, 0xa1, 0xc8, 0x10, 0xfb, 0x94, 0x3a, 0xa4, 0x6f, 0x41, 0xfd,
+	0xec, 0x79, 0x46, 0x85, 0xca, 0x0e, 0x3c, 0x4b, 0x9d, 0x4c, 0xf3, 0x8f, 0x73, 0xbd, 0xf4, 0xf1,
+	0x2f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, 0x7c, 0xc5, 0xaa, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_group_ad_status.pb.go b/googleapis/ads/googleads/v0/enums/ad_group_ad_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e706582dc4bb342faab360be7ea2cc40a3380cf6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_group_ad_status.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_group_ad_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible statuses of an AdGroupAd.
+type AdGroupAdStatusEnum_AdGroupAdStatus int32
+
+const (
+	// No value has been specified.
+	AdGroupAdStatusEnum_UNSPECIFIED AdGroupAdStatusEnum_AdGroupAdStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupAdStatusEnum_UNKNOWN AdGroupAdStatusEnum_AdGroupAdStatus = 1
+	// The ad group ad is enabled.
+	AdGroupAdStatusEnum_ENABLED AdGroupAdStatusEnum_AdGroupAdStatus = 2
+	// The ad group ad is paused.
+	AdGroupAdStatusEnum_PAUSED AdGroupAdStatusEnum_AdGroupAdStatus = 3
+	// The ad group ad is removed.
+	AdGroupAdStatusEnum_REMOVED AdGroupAdStatusEnum_AdGroupAdStatus = 4
+)
+
+var AdGroupAdStatusEnum_AdGroupAdStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+var AdGroupAdStatusEnum_AdGroupAdStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x AdGroupAdStatusEnum_AdGroupAdStatus) String() string {
+	return proto.EnumName(AdGroupAdStatusEnum_AdGroupAdStatus_name, int32(x))
+}
+func (AdGroupAdStatusEnum_AdGroupAdStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_status_b5908d4fbaec2768, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of an AdGroupAd.
+type AdGroupAdStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAdStatusEnum) Reset()         { *m = AdGroupAdStatusEnum{} }
+func (m *AdGroupAdStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdStatusEnum) ProtoMessage()    {}
+func (*AdGroupAdStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_status_b5908d4fbaec2768, []int{0}
+}
+func (m *AdGroupAdStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdStatusEnum.Unmarshal(m, b)
+}
+func (m *AdGroupAdStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupAdStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdStatusEnum.Merge(dst, src)
+}
+func (m *AdGroupAdStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdStatusEnum.Size(m)
+}
+func (m *AdGroupAdStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupAdStatusEnum)(nil), "google.ads.googleads.v0.enums.AdGroupAdStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdGroupAdStatusEnum_AdGroupAdStatus", AdGroupAdStatusEnum_AdGroupAdStatus_name, AdGroupAdStatusEnum_AdGroupAdStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_group_ad_status.proto", fileDescriptor_ad_group_ad_status_b5908d4fbaec2768)
+}
+
+var fileDescriptor_ad_group_ad_status_b5908d4fbaec2768 = []byte{
+	// 276 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x6d, 0x27, 0x13, 0xb2, 0xc3, 0x4a, 0xf5, 0xba, 0x83, 0x7b, 0x80, 0xa4, 0x20, 0x78,
+	0xf1, 0x94, 0xda, 0x58, 0x86, 0x9a, 0x15, 0x4b, 0x2b, 0x48, 0xa1, 0x44, 0x53, 0x82, 0xd0, 0x36,
+	0xa5, 0xff, 0x76, 0x0f, 0xe4, 0xd1, 0xf7, 0xf0, 0xe2, 0x53, 0x49, 0x52, 0xb7, 0xc3, 0x40, 0x2f,
+	0xe1, 0x4b, 0xbe, 0xfc, 0xf2, 0xcf, 0xf7, 0xa1, 0x6b, 0xa5, 0xb5, 0xaa, 0x2b, 0x22, 0x24, 0x90,
+	0x49, 0x1a, 0xb5, 0x0b, 0x48, 0xd5, 0x8e, 0x0d, 0x10, 0x21, 0x4b, 0xd5, 0xeb, 0xb1, 0x2b, 0x85,
+	0x2c, 0x61, 0x10, 0xc3, 0x08, 0xb8, 0xeb, 0xf5, 0xa0, 0xfd, 0xd5, 0x74, 0x19, 0x0b, 0x09, 0xf8,
+	0xc0, 0xe1, 0x5d, 0x80, 0x2d, 0xb7, 0xae, 0xd1, 0x39, 0x95, 0xb1, 0x21, 0xa9, 0x4c, 0x2d, 0xc7,
+	0xda, 0xb1, 0x59, 0x67, 0x68, 0x79, 0x74, 0xec, 0x2f, 0xd1, 0x22, 0xe3, 0x69, 0xc2, 0x6e, 0x37,
+	0x77, 0x1b, 0x16, 0x79, 0x27, 0xfe, 0x02, 0x9d, 0x65, 0xfc, 0x9e, 0x6f, 0x9f, 0xb9, 0xe7, 0x98,
+	0x0d, 0xe3, 0x34, 0x7c, 0x60, 0x91, 0xe7, 0xfa, 0x08, 0xcd, 0x13, 0x9a, 0xa5, 0x2c, 0xf2, 0x66,
+	0xc6, 0x78, 0x62, 0x8f, 0xdb, 0x9c, 0x45, 0xde, 0x69, 0xf8, 0xe5, 0xa0, 0xcb, 0x37, 0xdd, 0xe0,
+	0x7f, 0xff, 0x14, 0x5e, 0x1c, 0x8d, 0x4e, 0x4c, 0x90, 0xc4, 0x79, 0x09, 0x7f, 0x31, 0xa5, 0x6b,
+	0xd1, 0x2a, 0xac, 0x7b, 0x45, 0x54, 0xd5, 0xda, 0x98, 0xfb, 0x4a, 0xba, 0x77, 0xf8, 0xa3, 0xa1,
+	0x1b, 0xbb, 0x7e, 0xb8, 0xb3, 0x98, 0xd2, 0x4f, 0x77, 0x15, 0x4f, 0x4f, 0x51, 0x09, 0x78, 0x92,
+	0x46, 0xe5, 0x01, 0x36, 0xe9, 0xe1, 0x7b, 0xef, 0x17, 0x54, 0x42, 0x71, 0xf0, 0x8b, 0x3c, 0x28,
+	0xac, 0xff, 0x3a, 0xb7, 0x43, 0xaf, 0x7e, 0x02, 0x00, 0x00, 0xff, 0xff, 0x17, 0x63, 0xf0, 0x2a,
+	0x95, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_group_criterion_status.pb.go b/googleapis/ads/googleads/v0/enums/ad_group_criterion_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..eee7c7a3df51308378c473e04c18ce21362d70fc
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_group_criterion_status.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_group_criterion_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible statuses of an AdGroupCriterion.
+type AdGroupCriterionStatusEnum_AdGroupCriterionStatus int32
+
+const (
+	// No value has been specified.
+	AdGroupCriterionStatusEnum_UNSPECIFIED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupCriterionStatusEnum_UNKNOWN AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 1
+	// The ad group criterion is enabled.
+	AdGroupCriterionStatusEnum_ENABLED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 2
+	// The ad group criterion is paused.
+	AdGroupCriterionStatusEnum_PAUSED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 3
+	// The ad group criterion is removed.
+	AdGroupCriterionStatusEnum_REMOVED AdGroupCriterionStatusEnum_AdGroupCriterionStatus = 4
+)
+
+var AdGroupCriterionStatusEnum_AdGroupCriterionStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+var AdGroupCriterionStatusEnum_AdGroupCriterionStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x AdGroupCriterionStatusEnum_AdGroupCriterionStatus) String() string {
+	return proto.EnumName(AdGroupCriterionStatusEnum_AdGroupCriterionStatus_name, int32(x))
+}
+func (AdGroupCriterionStatusEnum_AdGroupCriterionStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_status_677787c819c505bf, []int{0, 0}
+}
+
+// Message describing AdGroupCriterion statuses.
+type AdGroupCriterionStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupCriterionStatusEnum) Reset()         { *m = AdGroupCriterionStatusEnum{} }
+func (m *AdGroupCriterionStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionStatusEnum) ProtoMessage()    {}
+func (*AdGroupCriterionStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_status_677787c819c505bf, []int{0}
+}
+func (m *AdGroupCriterionStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionStatusEnum.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupCriterionStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionStatusEnum.Merge(dst, src)
+}
+func (m *AdGroupCriterionStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionStatusEnum.Size(m)
+}
+func (m *AdGroupCriterionStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupCriterionStatusEnum)(nil), "google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus", AdGroupCriterionStatusEnum_AdGroupCriterionStatus_name, AdGroupCriterionStatusEnum_AdGroupCriterionStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_group_criterion_status.proto", fileDescriptor_ad_group_criterion_status_677787c819c505bf)
+}
+
+var fileDescriptor_ad_group_criterion_status_677787c819c505bf = []byte{
+	// 285 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x5d, 0x27, 0x13, 0xb2, 0x83, 0xa5, 0x07, 0x0f, 0xca, 0x0e, 0xee, 0x01, 0xd2, 0x82,
+	0x47, 0xf1, 0x90, 0xae, 0xb1, 0x0c, 0xb5, 0x2b, 0x96, 0x56, 0x90, 0x40, 0x89, 0x4b, 0x09, 0x85,
+	0x35, 0x29, 0x49, 0xbb, 0x83, 0x8f, 0xe3, 0xd1, 0x47, 0x11, 0x1f, 0x4a, 0x92, 0xda, 0x9d, 0xa6,
+	0x97, 0xf2, 0x2f, 0x3f, 0x7e, 0x5f, 0xbe, 0xef, 0x0f, 0xee, 0xb8, 0x94, 0x7c, 0x57, 0xf9, 0x94,
+	0x69, 0x7f, 0x88, 0x26, 0xed, 0x03, 0xbf, 0x12, 0x7d, 0xa3, 0x7d, 0xca, 0x4a, 0xae, 0x64, 0xdf,
+	0x96, 0x5b, 0x55, 0x77, 0x95, 0xaa, 0xa5, 0x28, 0x75, 0x47, 0xbb, 0x5e, 0xc3, 0x56, 0xc9, 0x4e,
+	0x7a, 0x8b, 0xc1, 0x81, 0x94, 0x69, 0x78, 0xd0, 0xe1, 0x3e, 0x80, 0x56, 0x5f, 0xbe, 0x83, 0x4b,
+	0xc4, 0x62, 0x33, 0x60, 0x35, 0xfa, 0x99, 0xd5, 0xb1, 0xe8, 0x9b, 0x25, 0x01, 0x17, 0xc7, 0xa9,
+	0x77, 0x0e, 0xe6, 0x79, 0x92, 0xa5, 0x78, 0xb5, 0xbe, 0x5f, 0xe3, 0xc8, 0x3d, 0xf1, 0xe6, 0xe0,
+	0x2c, 0x4f, 0x1e, 0x92, 0xcd, 0x4b, 0xe2, 0x4e, 0xcc, 0x0f, 0x4e, 0x50, 0xf8, 0x88, 0x23, 0xd7,
+	0xf1, 0x00, 0x98, 0xa5, 0x28, 0xcf, 0x70, 0xe4, 0x4e, 0x0d, 0x78, 0xc6, 0x4f, 0x9b, 0x02, 0x47,
+	0xee, 0x69, 0xf8, 0x3d, 0x01, 0xd7, 0x5b, 0xd9, 0xc0, 0x7f, 0x37, 0x0c, 0xaf, 0x8e, 0x6f, 0x90,
+	0x9a, 0xeb, 0xd2, 0xc9, 0x6b, 0xf8, 0x6b, 0x73, 0xb9, 0xa3, 0x82, 0x43, 0xa9, 0xb8, 0xcf, 0x2b,
+	0x61, 0x6f, 0x1f, 0xeb, 0x6a, 0x6b, 0xfd, 0x47, 0x7b, 0xb7, 0xf6, 0xfb, 0xe1, 0x4c, 0x63, 0x84,
+	0x3e, 0x9d, 0x45, 0x3c, 0x8c, 0x42, 0x4c, 0xc3, 0x21, 0x9a, 0x54, 0x04, 0xd0, 0x74, 0xa1, 0xbf,
+	0x46, 0x4e, 0x10, 0xd3, 0xe4, 0xc0, 0x49, 0x11, 0x10, 0xcb, 0xdf, 0x66, 0xf6, 0xd1, 0x9b, 0x9f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x6a, 0xd0, 0xd4, 0x02, 0xb1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_group_status.pb.go b/googleapis/ads/googleads/v0/enums/ad_group_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d47fccc49aa13f597c061f761aaabcd365474134
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_group_status.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_group_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible statuses of an ad group.
+type AdGroupStatusEnum_AdGroupStatus int32
+
+const (
+	// The status has not been specified.
+	AdGroupStatusEnum_UNSPECIFIED AdGroupStatusEnum_AdGroupStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupStatusEnum_UNKNOWN AdGroupStatusEnum_AdGroupStatus = 1
+	// The ad group is enabled.
+	AdGroupStatusEnum_ENABLED AdGroupStatusEnum_AdGroupStatus = 2
+	// The ad group is paused.
+	AdGroupStatusEnum_PAUSED AdGroupStatusEnum_AdGroupStatus = 3
+	// The ad group is removed.
+	AdGroupStatusEnum_REMOVED AdGroupStatusEnum_AdGroupStatus = 4
+)
+
+var AdGroupStatusEnum_AdGroupStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+var AdGroupStatusEnum_AdGroupStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x AdGroupStatusEnum_AdGroupStatus) String() string {
+	return proto.EnumName(AdGroupStatusEnum_AdGroupStatus_name, int32(x))
+}
+func (AdGroupStatusEnum_AdGroupStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_status_8f21159d221de842, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of an ad group.
+type AdGroupStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupStatusEnum) Reset()         { *m = AdGroupStatusEnum{} }
+func (m *AdGroupStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupStatusEnum) ProtoMessage()    {}
+func (*AdGroupStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_status_8f21159d221de842, []int{0}
+}
+func (m *AdGroupStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupStatusEnum.Unmarshal(m, b)
+}
+func (m *AdGroupStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupStatusEnum.Merge(dst, src)
+}
+func (m *AdGroupStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupStatusEnum.Size(m)
+}
+func (m *AdGroupStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupStatusEnum)(nil), "google.ads.googleads.v0.enums.AdGroupStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdGroupStatusEnum_AdGroupStatus", AdGroupStatusEnum_AdGroupStatus_name, AdGroupStatusEnum_AdGroupStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_group_status.proto", fileDescriptor_ad_group_status_8f21159d221de842)
+}
+
+var fileDescriptor_ad_group_status_8f21159d221de842 = []byte{
+	// 271 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x6d, 0x27, 0x13, 0x32, 0xc4, 0x9a, 0xfb, 0x0e, 0xee, 0x01, 0x92, 0xc2, 0x8e, 0x9e,
+	0x52, 0x1b, 0xcb, 0x50, 0xb3, 0x62, 0x69, 0x05, 0x29, 0x8c, 0x68, 0x4a, 0x14, 0xd6, 0xa6, 0xf4,
+	0xdf, 0xee, 0x81, 0x3c, 0xfa, 0x1a, 0xde, 0x7c, 0x2a, 0x49, 0xea, 0x06, 0x3b, 0xe8, 0x25, 0x7c,
+	0xc9, 0x97, 0x5f, 0xfe, 0xf9, 0x3e, 0xb4, 0xd4, 0xc6, 0xe8, 0x6d, 0x45, 0xa5, 0x02, 0x3a, 0x4a,
+	0xab, 0x76, 0x21, 0xad, 0x9a, 0xa1, 0x06, 0x2a, 0xd5, 0x46, 0x77, 0x66, 0x68, 0x37, 0xd0, 0xcb,
+	0x7e, 0x00, 0xd2, 0x76, 0xa6, 0x37, 0x78, 0x3e, 0xde, 0x24, 0x52, 0x01, 0x39, 0x40, 0x64, 0x17,
+	0x12, 0x07, 0x2d, 0xde, 0xd0, 0x25, 0x53, 0x89, 0xc5, 0x32, 0x47, 0xf1, 0x66, 0xa8, 0x17, 0x19,
+	0x3a, 0x3f, 0x3a, 0xc4, 0x17, 0x68, 0x96, 0x8b, 0x2c, 0xe5, 0x37, 0xab, 0xdb, 0x15, 0x8f, 0x83,
+	0x13, 0x3c, 0x43, 0x67, 0xb9, 0xb8, 0x13, 0xeb, 0x27, 0x11, 0x78, 0x76, 0xc3, 0x05, 0x8b, 0xee,
+	0x79, 0x1c, 0xf8, 0x18, 0xa1, 0x69, 0xca, 0xf2, 0x8c, 0xc7, 0xc1, 0xc4, 0x1a, 0x8f, 0xfc, 0x61,
+	0x5d, 0xf0, 0x38, 0x38, 0x8d, 0xbe, 0x3c, 0x74, 0xf5, 0x6a, 0x6a, 0xf2, 0xef, 0x7f, 0x22, 0x7c,
+	0x34, 0x38, 0xb5, 0x11, 0x52, 0xef, 0x39, 0xfa, 0x85, 0xb4, 0xd9, 0xca, 0x46, 0x13, 0xd3, 0x69,
+	0xaa, 0xab, 0xc6, 0x05, 0xdc, 0x37, 0xd1, 0xbe, 0xc3, 0x1f, 0xc5, 0x5c, 0xbb, 0xf5, 0xc3, 0x9f,
+	0x24, 0x8c, 0x7d, 0xfa, 0xf3, 0x64, 0x7c, 0x8a, 0x29, 0x20, 0xa3, 0xb4, 0xaa, 0x08, 0x89, 0x4d,
+	0x0e, 0xdf, 0x7b, 0xbf, 0x64, 0x0a, 0xca, 0x83, 0x5f, 0x16, 0x61, 0xe9, 0xfc, 0x97, 0xa9, 0x1b,
+	0xba, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xd9, 0xc8, 0xff, 0x8c, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_group_type.pb.go b/googleapis/ads/googleads/v0/enums/ad_group_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b3e7cfec1d3fd84c3b60dadd15108bd0e18eaabe
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_group_type.pb.go
@@ -0,0 +1,158 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_group_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum listing the possible types of an ad group.
+type AdGroupTypeEnum_AdGroupType int32
+
+const (
+	// The type has not been specified.
+	AdGroupTypeEnum_UNSPECIFIED AdGroupTypeEnum_AdGroupType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdGroupTypeEnum_UNKNOWN AdGroupTypeEnum_AdGroupType = 1
+	// The default ad group type for Search campaigns.
+	AdGroupTypeEnum_SEARCH_STANDARD AdGroupTypeEnum_AdGroupType = 2
+	// The default ad group type for Display campaigns.
+	AdGroupTypeEnum_DISPLAY_STANDARD AdGroupTypeEnum_AdGroupType = 3
+	// The ad group type for Shopping campaigns serving standard product ads.
+	AdGroupTypeEnum_SHOPPING_PRODUCT_ADS AdGroupTypeEnum_AdGroupType = 4
+	// The default ad group type for Hotel campaigns.
+	AdGroupTypeEnum_HOTEL_ADS AdGroupTypeEnum_AdGroupType = 6
+	// The type for ad groups in Smart Shopping campaigns.
+	AdGroupTypeEnum_SHOPPING_SMART_ADS AdGroupTypeEnum_AdGroupType = 7
+	// Short unskippable in-stream video ads.
+	AdGroupTypeEnum_VIDEO_BUMPER AdGroupTypeEnum_AdGroupType = 8
+	// TrueView (skippable) in-stream video ads.
+	AdGroupTypeEnum_VIDEO_TRUE_VIEW_IN_STREAM AdGroupTypeEnum_AdGroupType = 9
+	// TrueView in-display video ads.
+	AdGroupTypeEnum_VIDEO_TRUE_VIEW_IN_DISPLAY AdGroupTypeEnum_AdGroupType = 10
+	// Unskippable in-stream video ads.
+	AdGroupTypeEnum_VIDEO_NON_SKIPPABLE_IN_STREAM AdGroupTypeEnum_AdGroupType = 11
+	// Outstream video ads.
+	AdGroupTypeEnum_VIDEO_OUTSTREAM AdGroupTypeEnum_AdGroupType = 12
+)
+
+var AdGroupTypeEnum_AdGroupType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "SEARCH_STANDARD",
+	3:  "DISPLAY_STANDARD",
+	4:  "SHOPPING_PRODUCT_ADS",
+	6:  "HOTEL_ADS",
+	7:  "SHOPPING_SMART_ADS",
+	8:  "VIDEO_BUMPER",
+	9:  "VIDEO_TRUE_VIEW_IN_STREAM",
+	10: "VIDEO_TRUE_VIEW_IN_DISPLAY",
+	11: "VIDEO_NON_SKIPPABLE_IN_STREAM",
+	12: "VIDEO_OUTSTREAM",
+}
+var AdGroupTypeEnum_AdGroupType_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"SEARCH_STANDARD":               2,
+	"DISPLAY_STANDARD":              3,
+	"SHOPPING_PRODUCT_ADS":          4,
+	"HOTEL_ADS":                     6,
+	"SHOPPING_SMART_ADS":            7,
+	"VIDEO_BUMPER":                  8,
+	"VIDEO_TRUE_VIEW_IN_STREAM":     9,
+	"VIDEO_TRUE_VIEW_IN_DISPLAY":    10,
+	"VIDEO_NON_SKIPPABLE_IN_STREAM": 11,
+	"VIDEO_OUTSTREAM":               12,
+}
+
+func (x AdGroupTypeEnum_AdGroupType) String() string {
+	return proto.EnumName(AdGroupTypeEnum_AdGroupType_name, int32(x))
+}
+func (AdGroupTypeEnum_AdGroupType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_type_3b9233b105e8c706, []int{0, 0}
+}
+
+// Defines types of an ad group, specific to a particular campaign channel
+// type. This type drives validations that restrict which entities can be
+// added to the ad group.
+type AdGroupTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupTypeEnum) Reset()         { *m = AdGroupTypeEnum{} }
+func (m *AdGroupTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupTypeEnum) ProtoMessage()    {}
+func (*AdGroupTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_type_3b9233b105e8c706, []int{0}
+}
+func (m *AdGroupTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupTypeEnum.Unmarshal(m, b)
+}
+func (m *AdGroupTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupTypeEnum.Merge(dst, src)
+}
+func (m *AdGroupTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupTypeEnum.Size(m)
+}
+func (m *AdGroupTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupTypeEnum)(nil), "google.ads.googleads.v0.enums.AdGroupTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdGroupTypeEnum_AdGroupType", AdGroupTypeEnum_AdGroupType_name, AdGroupTypeEnum_AdGroupType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_group_type.proto", fileDescriptor_ad_group_type_3b9233b105e8c706)
+}
+
+var fileDescriptor_ad_group_type_3b9233b105e8c706 = []byte{
+	// 395 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcf, 0x6e, 0xd3, 0x30,
+	0x18, 0xa7, 0x19, 0xda, 0xd8, 0xd7, 0xa1, 0x5a, 0x66, 0x42, 0x80, 0x14, 0xa4, 0xed, 0x01, 0x9c,
+	0x20, 0x8e, 0x9c, 0x9c, 0xc6, 0xa4, 0xd6, 0x5a, 0xc7, 0x8a, 0x93, 0x4c, 0xa0, 0x48, 0x56, 0x20,
+	0x51, 0x84, 0xb4, 0xc6, 0x51, 0xb3, 0x4e, 0xda, 0xdb, 0x20, 0x8e, 0x9c, 0x79, 0x01, 0xae, 0x3c,
+	0x15, 0x4a, 0xdc, 0x95, 0x1e, 0x80, 0x4b, 0xf4, 0xcb, 0xef, 0xcf, 0x67, 0xfb, 0xfb, 0xc1, 0x9b,
+	0xc6, 0x98, 0xe6, 0xa6, 0xf6, 0xca, 0xaa, 0xf7, 0x2c, 0x1c, 0xd0, 0x9d, 0xef, 0xd5, 0xed, 0x76,
+	0xdd, 0x7b, 0x65, 0xa5, 0x9b, 0x8d, 0xd9, 0x76, 0xfa, 0xf6, 0xbe, 0xab, 0x49, 0xb7, 0x31, 0xb7,
+	0x06, 0xbb, 0xd6, 0x47, 0xca, 0xaa, 0x27, 0xfb, 0x08, 0xb9, 0xf3, 0xc9, 0x18, 0xb9, 0xfc, 0xe1,
+	0xc0, 0x8c, 0x56, 0xd1, 0x90, 0x4a, 0xef, 0xbb, 0x9a, 0xb5, 0xdb, 0xf5, 0xe5, 0x57, 0x07, 0xa6,
+	0x07, 0x1c, 0x9e, 0xc1, 0x34, 0x13, 0x4a, 0xb2, 0x39, 0x7f, 0xcf, 0x59, 0x88, 0x1e, 0xe1, 0x29,
+	0x9c, 0x64, 0xe2, 0x4a, 0xc4, 0xd7, 0x02, 0x4d, 0xf0, 0x33, 0x98, 0x29, 0x46, 0x93, 0xf9, 0x42,
+	0xab, 0x94, 0x8a, 0x90, 0x26, 0x21, 0x72, 0xf0, 0x39, 0xa0, 0x90, 0x2b, 0xb9, 0xa4, 0x1f, 0xfe,
+	0xb0, 0x47, 0xf8, 0x05, 0x9c, 0xab, 0x45, 0x2c, 0x25, 0x17, 0x91, 0x96, 0x49, 0x1c, 0x66, 0xf3,
+	0x54, 0xd3, 0x50, 0xa1, 0xc7, 0xf8, 0x29, 0x9c, 0x2e, 0xe2, 0x94, 0x2d, 0xc7, 0xdf, 0x63, 0xfc,
+	0x1c, 0xf0, 0xde, 0xa8, 0x56, 0x34, 0xb1, 0xb6, 0x13, 0x8c, 0xe0, 0x2c, 0xe7, 0x21, 0x8b, 0x75,
+	0x90, 0xad, 0x24, 0x4b, 0xd0, 0x13, 0xec, 0xc2, 0x4b, 0xcb, 0xa4, 0x49, 0xc6, 0x74, 0xce, 0xd9,
+	0xb5, 0xe6, 0x42, 0xab, 0x34, 0x61, 0x74, 0x85, 0x4e, 0xf1, 0x6b, 0x78, 0xf5, 0x17, 0x79, 0x77,
+	0x35, 0x04, 0xf8, 0x02, 0x5c, 0xab, 0x8b, 0x58, 0x68, 0x75, 0xc5, 0xa5, 0xa4, 0xc1, 0x92, 0x1d,
+	0x8c, 0x98, 0x0e, 0xef, 0xb3, 0x96, 0x38, 0x4b, 0x77, 0xe4, 0x59, 0xf0, 0x73, 0x02, 0x17, 0x9f,
+	0xcd, 0x9a, 0xfc, 0x77, 0xb9, 0x01, 0x3a, 0xd8, 0xa2, 0x1c, 0xda, 0x90, 0x93, 0x8f, 0xc1, 0x2e,
+	0xd2, 0x98, 0x9b, 0xb2, 0x6d, 0x88, 0xd9, 0x34, 0x5e, 0x53, 0xb7, 0x63, 0x57, 0x0f, 0x95, 0x76,
+	0x5f, 0xfa, 0x7f, 0x34, 0xfc, 0x6e, 0xfc, 0x7e, 0x73, 0x8e, 0x22, 0x4a, 0xbf, 0x3b, 0x6e, 0x64,
+	0x47, 0xd1, 0xaa, 0x27, 0x16, 0x0e, 0x28, 0xf7, 0xc9, 0xd0, 0x62, 0xff, 0xeb, 0x41, 0x2f, 0x68,
+	0xd5, 0x17, 0x7b, 0xbd, 0xc8, 0xfd, 0x62, 0xd4, 0x3f, 0x1d, 0x8f, 0x87, 0xbe, 0xfd, 0x1d, 0x00,
+	0x00, 0xff, 0xff, 0xb8, 0x57, 0x8e, 0xbb, 0x55, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_network_type.pb.go b/googleapis/ads/googleads/v0/enums/ad_network_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4da881ddf4f2a08f610552ce43acf6e2cb94ab97
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_network_type.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_network_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates Google Ads network types.
+type AdNetworkTypeEnum_AdNetworkType int32
+
+const (
+	// Not specified.
+	AdNetworkTypeEnum_UNSPECIFIED AdNetworkTypeEnum_AdNetworkType = 0
+	// The value is unknown in this version.
+	AdNetworkTypeEnum_UNKNOWN AdNetworkTypeEnum_AdNetworkType = 1
+	// Google search.
+	AdNetworkTypeEnum_SEARCH AdNetworkTypeEnum_AdNetworkType = 2
+	// Search partners.
+	AdNetworkTypeEnum_SEARCH_PARTNERS AdNetworkTypeEnum_AdNetworkType = 3
+	// Display Network.
+	AdNetworkTypeEnum_CONTENT AdNetworkTypeEnum_AdNetworkType = 4
+	// YouTube Search.
+	AdNetworkTypeEnum_YOUTUBE_SEARCH AdNetworkTypeEnum_AdNetworkType = 5
+	// YouTube Videos
+	AdNetworkTypeEnum_YOUTUBE_WATCH AdNetworkTypeEnum_AdNetworkType = 6
+	// Cross-network.
+	AdNetworkTypeEnum_MIXED AdNetworkTypeEnum_AdNetworkType = 7
+)
+
+var AdNetworkTypeEnum_AdNetworkType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SEARCH",
+	3: "SEARCH_PARTNERS",
+	4: "CONTENT",
+	5: "YOUTUBE_SEARCH",
+	6: "YOUTUBE_WATCH",
+	7: "MIXED",
+}
+var AdNetworkTypeEnum_AdNetworkType_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"SEARCH":          2,
+	"SEARCH_PARTNERS": 3,
+	"CONTENT":         4,
+	"YOUTUBE_SEARCH":  5,
+	"YOUTUBE_WATCH":   6,
+	"MIXED":           7,
+}
+
+func (x AdNetworkTypeEnum_AdNetworkType) String() string {
+	return proto.EnumName(AdNetworkTypeEnum_AdNetworkType_name, int32(x))
+}
+func (AdNetworkTypeEnum_AdNetworkType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_network_type_8e7c5c4b59c79566, []int{0, 0}
+}
+
+// Container for enumeration of Google Ads network types.
+type AdNetworkTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdNetworkTypeEnum) Reset()         { *m = AdNetworkTypeEnum{} }
+func (m *AdNetworkTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdNetworkTypeEnum) ProtoMessage()    {}
+func (*AdNetworkTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_network_type_8e7c5c4b59c79566, []int{0}
+}
+func (m *AdNetworkTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdNetworkTypeEnum.Unmarshal(m, b)
+}
+func (m *AdNetworkTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdNetworkTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdNetworkTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdNetworkTypeEnum.Merge(dst, src)
+}
+func (m *AdNetworkTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdNetworkTypeEnum.Size(m)
+}
+func (m *AdNetworkTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdNetworkTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdNetworkTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdNetworkTypeEnum)(nil), "google.ads.googleads.v0.enums.AdNetworkTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdNetworkTypeEnum_AdNetworkType", AdNetworkTypeEnum_AdNetworkType_name, AdNetworkTypeEnum_AdNetworkType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_network_type.proto", fileDescriptor_ad_network_type_8e7c5c4b59c79566)
+}
+
+var fileDescriptor_ad_network_type_8e7c5c4b59c79566 = []byte{
+	// 318 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4e, 0xf2, 0x30,
+	0x14, 0xc7, 0xbf, 0xc1, 0x07, 0xc4, 0x43, 0x90, 0x52, 0xaf, 0xb9, 0x90, 0x07, 0xe8, 0x96, 0x70,
+	0xe9, 0x55, 0x37, 0x2a, 0x10, 0x63, 0x59, 0x60, 0x03, 0x35, 0x4b, 0x96, 0xe9, 0x96, 0xc6, 0x08,
+	0xeb, 0x42, 0x01, 0xc3, 0x43, 0xf8, 0x12, 0x7a, 0xe7, 0x6b, 0x78, 0xe7, 0x53, 0x99, 0xad, 0x8c,
+	0x84, 0x0b, 0xbd, 0x69, 0x7e, 0x39, 0xe7, 0xfc, 0xda, 0x9e, 0x3f, 0xf4, 0x85, 0x94, 0x62, 0x99,
+	0x98, 0x51, 0xac, 0x4c, 0x8d, 0x39, 0xed, 0x2c, 0x33, 0x49, 0xb7, 0x2b, 0x65, 0x46, 0x71, 0x98,
+	0x26, 0x9b, 0x57, 0xb9, 0x7e, 0x09, 0x37, 0xfb, 0x2c, 0x21, 0xd9, 0x5a, 0x6e, 0x24, 0xee, 0xea,
+	0x49, 0x12, 0xc5, 0x8a, 0x1c, 0x25, 0xb2, 0xb3, 0x48, 0x21, 0xf5, 0x3e, 0x0c, 0xe8, 0xd0, 0x98,
+	0x6b, 0xcf, 0xdb, 0x67, 0x09, 0x4b, 0xb7, 0xab, 0xde, 0x9b, 0x01, 0xad, 0x93, 0x2a, 0x6e, 0x43,
+	0xd3, 0xe7, 0x33, 0x97, 0x39, 0xe3, 0xeb, 0x31, 0x1b, 0xa0, 0x7f, 0xb8, 0x09, 0x0d, 0x9f, 0xdf,
+	0xf0, 0xc9, 0x82, 0x23, 0x03, 0x03, 0xd4, 0x67, 0x8c, 0x4e, 0x9d, 0x11, 0xaa, 0xe0, 0x0b, 0x68,
+	0x6b, 0x0e, 0x5d, 0x3a, 0xf5, 0x38, 0x9b, 0xce, 0x50, 0x35, 0x9f, 0x76, 0x26, 0xdc, 0x63, 0xdc,
+	0x43, 0xff, 0x31, 0x86, 0xf3, 0xfb, 0x89, 0xef, 0xf9, 0x36, 0x0b, 0x0f, 0x56, 0x0d, 0x77, 0xa0,
+	0x55, 0xd6, 0x16, 0xd4, 0x73, 0x46, 0xa8, 0x8e, 0xcf, 0xa0, 0x76, 0x3b, 0xbe, 0x63, 0x03, 0xd4,
+	0xb0, 0xbf, 0x0c, 0xb8, 0x7c, 0x92, 0x2b, 0xf2, 0xe7, 0x2e, 0x36, 0x3e, 0xf9, 0xb2, 0x9b, 0xaf,
+	0xef, 0x1a, 0x0f, 0xf6, 0x41, 0x12, 0x72, 0x19, 0xa5, 0x82, 0xc8, 0xb5, 0x30, 0x45, 0x92, 0x16,
+	0xe1, 0x94, 0x29, 0x66, 0xcf, 0xea, 0x97, 0x50, 0xaf, 0x8a, 0xf3, 0xbd, 0x52, 0x1d, 0x52, 0xfa,
+	0x59, 0xe9, 0x0e, 0xf5, 0x55, 0x34, 0x56, 0x44, 0x63, 0x4e, 0x73, 0x8b, 0xe4, 0xa1, 0xa9, 0xef,
+	0xb2, 0x1f, 0xd0, 0x58, 0x05, 0xc7, 0x7e, 0x30, 0xb7, 0x82, 0xa2, 0xff, 0x58, 0x2f, 0x1e, 0xed,
+	0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xe6, 0xe0, 0x73, 0xc8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_serving_optimization_status.pb.go b/googleapis/ads/googleads/v0/enums/ad_serving_optimization_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e585cda46e69418c83e36db17051f16f3af363b2
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_serving_optimization_status.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_serving_optimization_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible serving statuses.
+type AdServingOptimizationStatusEnum_AdServingOptimizationStatus int32
+
+const (
+	// No value has been specified.
+	AdServingOptimizationStatusEnum_UNSPECIFIED AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdServingOptimizationStatusEnum_UNKNOWN AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 1
+	// Ad serving is optimized based on CTR for the campaign.
+	AdServingOptimizationStatusEnum_OPTIMIZE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 2
+	// Ad serving is optimized based on CTR * Conversion for the campaign. If
+	// the campaign is not in the conversion optimizer bidding strategy, it will
+	// default to OPTIMIZED.
+	AdServingOptimizationStatusEnum_CONVERSION_OPTIMIZE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 3
+	// Ads are rotated evenly for 90 days, then optimized for clicks.
+	AdServingOptimizationStatusEnum_ROTATE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 4
+	// Show lower performing ads more evenly with higher performing ads, and do
+	// not optimize.
+	AdServingOptimizationStatusEnum_ROTATE_INDEFINITELY AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 5
+	// Ad serving optimization status is not available.
+	AdServingOptimizationStatusEnum_UNAVAILABLE AdServingOptimizationStatusEnum_AdServingOptimizationStatus = 6
+)
+
+var AdServingOptimizationStatusEnum_AdServingOptimizationStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPTIMIZE",
+	3: "CONVERSION_OPTIMIZE",
+	4: "ROTATE",
+	5: "ROTATE_INDEFINITELY",
+	6: "UNAVAILABLE",
+}
+var AdServingOptimizationStatusEnum_AdServingOptimizationStatus_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"OPTIMIZE":            2,
+	"CONVERSION_OPTIMIZE": 3,
+	"ROTATE":              4,
+	"ROTATE_INDEFINITELY": 5,
+	"UNAVAILABLE":         6,
+}
+
+func (x AdServingOptimizationStatusEnum_AdServingOptimizationStatus) String() string {
+	return proto.EnumName(AdServingOptimizationStatusEnum_AdServingOptimizationStatus_name, int32(x))
+}
+func (AdServingOptimizationStatusEnum_AdServingOptimizationStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_serving_optimization_status_897e6671d350f9ab, []int{0, 0}
+}
+
+// Possible ad serving statuses of a campaign.
+type AdServingOptimizationStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdServingOptimizationStatusEnum) Reset()         { *m = AdServingOptimizationStatusEnum{} }
+func (m *AdServingOptimizationStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*AdServingOptimizationStatusEnum) ProtoMessage()    {}
+func (*AdServingOptimizationStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_serving_optimization_status_897e6671d350f9ab, []int{0}
+}
+func (m *AdServingOptimizationStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdServingOptimizationStatusEnum.Unmarshal(m, b)
+}
+func (m *AdServingOptimizationStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdServingOptimizationStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdServingOptimizationStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdServingOptimizationStatusEnum.Merge(dst, src)
+}
+func (m *AdServingOptimizationStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_AdServingOptimizationStatusEnum.Size(m)
+}
+func (m *AdServingOptimizationStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdServingOptimizationStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdServingOptimizationStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdServingOptimizationStatusEnum)(nil), "google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus", AdServingOptimizationStatusEnum_AdServingOptimizationStatus_name, AdServingOptimizationStatusEnum_AdServingOptimizationStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_serving_optimization_status.proto", fileDescriptor_ad_serving_optimization_status_897e6671d350f9ab)
+}
+
+var fileDescriptor_ad_serving_optimization_status_897e6671d350f9ab = []byte{
+	// 330 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0xed, 0xa6, 0x53, 0x32, 0xc1, 0x52, 0x0f, 0x1e, 0x64, 0xa8, 0x7b, 0x80, 0xb4, 0xe0,
+	0xd1, 0x53, 0xba, 0x65, 0x23, 0x38, 0xd3, 0xb2, 0x76, 0x15, 0x47, 0xa1, 0x54, 0x53, 0x42, 0x61,
+	0x4d, 0xc6, 0xd2, 0xed, 0xe0, 0x93, 0x78, 0xf6, 0xe8, 0x33, 0xf8, 0x04, 0xde, 0x7c, 0x23, 0x69,
+	0xe2, 0x86, 0x17, 0x77, 0x29, 0x7f, 0xf8, 0x7f, 0xfd, 0x7d, 0xc9, 0x2f, 0xc0, 0xe7, 0x52, 0xf2,
+	0x45, 0xe1, 0xe6, 0x4c, 0xb9, 0x26, 0x36, 0x69, 0xe3, 0xb9, 0x85, 0x58, 0x57, 0xca, 0xcd, 0x59,
+	0xa6, 0x8a, 0xd5, 0xa6, 0x14, 0x3c, 0x93, 0xcb, 0xba, 0xac, 0xca, 0xd7, 0xbc, 0x2e, 0xa5, 0xc8,
+	0x54, 0x9d, 0xd7, 0x6b, 0x05, 0x97, 0x2b, 0x59, 0x4b, 0xa7, 0x67, 0x7e, 0x84, 0x39, 0x53, 0x70,
+	0xc7, 0x80, 0x1b, 0x0f, 0x6a, 0x46, 0xff, 0xd3, 0x02, 0x57, 0x88, 0x45, 0x06, 0x13, 0xfc, 0xa1,
+	0x44, 0x1a, 0x82, 0xc5, 0xba, 0xea, 0xbf, 0x59, 0xe0, 0x72, 0xcf, 0x8c, 0x73, 0x06, 0xba, 0x33,
+	0x1a, 0x85, 0x78, 0x40, 0x46, 0x04, 0x0f, 0xed, 0x03, 0xa7, 0x0b, 0x8e, 0x67, 0xf4, 0x9e, 0x06,
+	0x8f, 0xd4, 0xb6, 0x9c, 0x53, 0x70, 0x12, 0x84, 0x31, 0x79, 0x20, 0x73, 0x6c, 0xb7, 0x9c, 0x0b,
+	0x70, 0x3e, 0x08, 0x68, 0x82, 0xa7, 0x11, 0x09, 0x68, 0xb6, 0x2b, 0xda, 0x0e, 0x00, 0x9d, 0x69,
+	0x10, 0xa3, 0x18, 0xdb, 0x87, 0xcd, 0x90, 0xc9, 0x19, 0xa1, 0x43, 0x3c, 0x22, 0x94, 0xc4, 0x78,
+	0xf2, 0x64, 0x1f, 0x99, 0x4d, 0x28, 0x41, 0x64, 0x82, 0xfc, 0x09, 0xb6, 0x3b, 0xfe, 0xb7, 0x05,
+	0x6e, 0x5e, 0x64, 0x05, 0xf7, 0x5e, 0xd2, 0xbf, 0xde, 0x73, 0xfa, 0xb0, 0xb1, 0x14, 0x5a, 0xf3,
+	0x5f, 0xd7, 0x90, 0xcb, 0x45, 0x2e, 0x38, 0x94, 0x2b, 0xee, 0xf2, 0x42, 0x68, 0x87, 0x5b, 0xf7,
+	0xcb, 0x52, 0xfd, 0xf3, 0x14, 0x77, 0xfa, 0xfb, 0xde, 0x6a, 0x8f, 0x11, 0xfa, 0x68, 0xf5, 0xc6,
+	0x06, 0x85, 0x98, 0x82, 0x26, 0x36, 0x29, 0xf1, 0x60, 0x63, 0x53, 0x7d, 0x6d, 0xfb, 0x14, 0x31,
+	0x95, 0xee, 0xfa, 0x34, 0xf1, 0x52, 0xdd, 0x3f, 0x77, 0xf4, 0xd2, 0xdb, 0x9f, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x6b, 0x1e, 0x9a, 0x55, 0xfe, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/ad_type.pb.go b/googleapis/ads/googleads/v0/enums/ad_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..aba8a85219959f96480851abd065a8f4c86aa2cd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/ad_type.pb.go
@@ -0,0 +1,164 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/ad_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible types of an ad.
+type AdTypeEnum_AdType int32
+
+const (
+	// No value has been specified.
+	AdTypeEnum_UNSPECIFIED AdTypeEnum_AdType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	AdTypeEnum_UNKNOWN AdTypeEnum_AdType = 1
+	// The ad is a text ad.
+	AdTypeEnum_TEXT_AD AdTypeEnum_AdType = 2
+	// The ad is an expanded text ad.
+	AdTypeEnum_EXPANDED_TEXT_AD AdTypeEnum_AdType = 3
+	// The ad is a dynamic search ad.
+	AdTypeEnum_DYNAMIC_SEARCH_AD AdTypeEnum_AdType = 4
+	// The ad is a responsive display ad.
+	AdTypeEnum_RESPONSIVE_DISPLAY_AD AdTypeEnum_AdType = 5
+	// The ad is a call only ad.
+	AdTypeEnum_CALL_ONLY_AD AdTypeEnum_AdType = 6
+	// The ad is an expanded dynamic search ad.
+	AdTypeEnum_EXPANDED_DYNAMIC_SEARCH_AD AdTypeEnum_AdType = 7
+	// The ad is a hotel ad.
+	AdTypeEnum_HOTEL_AD AdTypeEnum_AdType = 8
+	// The ad is a Smart Shopping ad.
+	AdTypeEnum_SHOPPING_SMART_AD AdTypeEnum_AdType = 9
+	// The ad is a standard Shopping ad.
+	AdTypeEnum_SHOPPING_PRODUCT_AD AdTypeEnum_AdType = 10
+	// The ad is a video ad.
+	AdTypeEnum_VIDEO_AD AdTypeEnum_AdType = 12
+	// This ad is a Gmail ad.
+	AdTypeEnum_GMAIL_AD AdTypeEnum_AdType = 13
+	// This ad is an Image ad.
+	AdTypeEnum_IMAGE_AD AdTypeEnum_AdType = 14
+)
+
+var AdTypeEnum_AdType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "TEXT_AD",
+	3:  "EXPANDED_TEXT_AD",
+	4:  "DYNAMIC_SEARCH_AD",
+	5:  "RESPONSIVE_DISPLAY_AD",
+	6:  "CALL_ONLY_AD",
+	7:  "EXPANDED_DYNAMIC_SEARCH_AD",
+	8:  "HOTEL_AD",
+	9:  "SHOPPING_SMART_AD",
+	10: "SHOPPING_PRODUCT_AD",
+	12: "VIDEO_AD",
+	13: "GMAIL_AD",
+	14: "IMAGE_AD",
+}
+var AdTypeEnum_AdType_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"TEXT_AD":                    2,
+	"EXPANDED_TEXT_AD":           3,
+	"DYNAMIC_SEARCH_AD":          4,
+	"RESPONSIVE_DISPLAY_AD":      5,
+	"CALL_ONLY_AD":               6,
+	"EXPANDED_DYNAMIC_SEARCH_AD": 7,
+	"HOTEL_AD":                   8,
+	"SHOPPING_SMART_AD":          9,
+	"SHOPPING_PRODUCT_AD":        10,
+	"VIDEO_AD":                   12,
+	"GMAIL_AD":                   13,
+	"IMAGE_AD":                   14,
+}
+
+func (x AdTypeEnum_AdType) String() string {
+	return proto.EnumName(AdTypeEnum_AdType_name, int32(x))
+}
+func (AdTypeEnum_AdType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_0178b510acb3ad28, []int{0, 0}
+}
+
+// Container for enum describing possible types of an ad.
+type AdTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdTypeEnum) Reset()         { *m = AdTypeEnum{} }
+func (m *AdTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdTypeEnum) ProtoMessage()    {}
+func (*AdTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_type_0178b510acb3ad28, []int{0}
+}
+func (m *AdTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdTypeEnum.Unmarshal(m, b)
+}
+func (m *AdTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdTypeEnum.Merge(dst, src)
+}
+func (m *AdTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdTypeEnum.Size(m)
+}
+func (m *AdTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdTypeEnum)(nil), "google.ads.googleads.v0.enums.AdTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdTypeEnum_AdType", AdTypeEnum_AdType_name, AdTypeEnum_AdType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/ad_type.proto", fileDescriptor_ad_type_0178b510acb3ad28)
+}
+
+var fileDescriptor_ad_type_0178b510acb3ad28 = []byte{
+	// 386 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xdd, 0x8a, 0xd3, 0x40,
+	0x14, 0xb6, 0xa9, 0xb6, 0x75, 0x5a, 0x35, 0x8e, 0x16, 0x51, 0xa8, 0x60, 0x6f, 0x85, 0x49, 0xc0,
+	0x4b, 0xaf, 0xa6, 0x99, 0x31, 0x1d, 0x4c, 0x26, 0x43, 0x92, 0xc6, 0x56, 0x02, 0x21, 0x9a, 0x10,
+	0x84, 0x36, 0x09, 0x4d, 0x5b, 0xe8, 0x83, 0xf8, 0x02, 0xe2, 0xd5, 0x3e, 0xc3, 0x3e, 0xc1, 0x3e,
+	0xd5, 0x32, 0x93, 0x6d, 0x6e, 0x96, 0xdd, 0x9b, 0x70, 0xbe, 0x9f, 0x7c, 0x67, 0x38, 0x1f, 0xf8,
+	0x5c, 0x54, 0x55, 0xb1, 0xcd, 0x8d, 0x34, 0x6b, 0x8c, 0x76, 0x94, 0xd3, 0xc9, 0x34, 0xf2, 0xf2,
+	0xb8, 0x6b, 0x8c, 0x34, 0x4b, 0x0e, 0xe7, 0x3a, 0x47, 0xf5, 0xbe, 0x3a, 0x54, 0x70, 0xd6, 0x3a,
+	0x50, 0x9a, 0x35, 0xa8, 0x33, 0xa3, 0x93, 0x89, 0x94, 0x79, 0xfe, 0x5f, 0x03, 0x00, 0x67, 0xe1,
+	0xb9, 0xce, 0x69, 0x79, 0xdc, 0xcd, 0xff, 0x6a, 0x60, 0xd0, 0x42, 0xf8, 0x0a, 0x8c, 0x57, 0x3c,
+	0x10, 0xd4, 0x62, 0xdf, 0x18, 0x25, 0xfa, 0x13, 0x38, 0x06, 0xc3, 0x15, 0xff, 0xce, 0xbd, 0x1f,
+	0x5c, 0xef, 0x49, 0x10, 0xd2, 0x75, 0x98, 0x60, 0xa2, 0x6b, 0xf0, 0x2d, 0xd0, 0xe9, 0x5a, 0x60,
+	0x4e, 0x28, 0x49, 0x2e, 0x6c, 0x1f, 0x4e, 0xc1, 0x6b, 0xb2, 0xe1, 0xd8, 0x65, 0x56, 0x12, 0x50,
+	0xec, 0x5b, 0x4b, 0x49, 0x3f, 0x85, 0xef, 0xc1, 0xd4, 0xa7, 0x81, 0xf0, 0x78, 0xc0, 0x22, 0x9a,
+	0x10, 0x16, 0x08, 0x07, 0x6f, 0xa4, 0xf4, 0x0c, 0xea, 0x60, 0x62, 0x61, 0xc7, 0x49, 0x3c, 0xee,
+	0x28, 0x66, 0x00, 0x3f, 0x82, 0x0f, 0x5d, 0xf2, 0xfd, 0xb0, 0x21, 0x9c, 0x80, 0xd1, 0xd2, 0x0b,
+	0xa9, 0x23, 0xd1, 0x48, 0x6e, 0x0c, 0x96, 0x9e, 0x10, 0x8c, 0xdb, 0x49, 0xe0, 0x62, 0x5f, 0x3d,
+	0xe4, 0x39, 0x7c, 0x07, 0xde, 0x74, 0xb4, 0xf0, 0x3d, 0xb2, 0xb2, 0x94, 0x00, 0xe4, 0xdf, 0x11,
+	0x23, 0xd4, 0x93, 0x68, 0x22, 0x91, 0xed, 0x62, 0xa6, 0xb2, 0x5e, 0x48, 0xc4, 0x5c, 0x6c, 0x53,
+	0x89, 0x5e, 0x2e, 0xae, 0x7b, 0xe0, 0xd3, 0xef, 0x6a, 0x87, 0x1e, 0x3d, 0xe6, 0x62, 0xdc, 0x9e,
+	0x4e, 0xc8, 0xc3, 0x8b, 0xde, 0xcf, 0xc5, 0x9d, 0xbb, 0xa8, 0xb6, 0x69, 0x59, 0xa0, 0x6a, 0x5f,
+	0x18, 0x45, 0x5e, 0xaa, 0x5a, 0x2e, 0xbd, 0xd5, 0x7f, 0x9a, 0x07, 0x6a, 0xfc, 0xaa, 0xbe, 0xff,
+	0xb4, 0xbe, 0x8d, 0xf1, 0x95, 0x36, 0xb3, 0xdb, 0x28, 0x9c, 0x35, 0xa8, 0x1d, 0xe5, 0x14, 0x99,
+	0x48, 0xb6, 0xd6, 0xdc, 0x5c, 0xf4, 0x18, 0x67, 0x4d, 0xdc, 0xe9, 0x71, 0x64, 0xc6, 0x4a, 0xff,
+	0x35, 0x50, 0x4b, 0xbf, 0xdc, 0x06, 0x00, 0x00, 0xff, 0xff, 0x0a, 0xf6, 0xba, 0x75, 0x3a, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/advertising_channel_sub_type.pb.go b/googleapis/ads/googleads/v0/enums/advertising_channel_sub_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e751054465782721775e9cc6f4229872e37dfb96
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/advertising_channel_sub_type.pb.go
@@ -0,0 +1,145 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/advertising_channel_sub_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing the different channel subtypes.
+type AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType int32
+
+const (
+	// Not specified.
+	AdvertisingChannelSubTypeEnum_UNSPECIFIED AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 0
+	// Used as a return value only. Represents value unknown in this version.
+	AdvertisingChannelSubTypeEnum_UNKNOWN AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 1
+	// Mobile app campaigns for Search.
+	AdvertisingChannelSubTypeEnum_SEARCH_MOBILE_APP AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 2
+	// Mobile app campaigns for Display.
+	AdvertisingChannelSubTypeEnum_DISPLAY_MOBILE_APP AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 3
+	// AdWords express campaigns for search.
+	AdvertisingChannelSubTypeEnum_SEARCH_EXPRESS AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 4
+	// AdWords Express campaigns for display.
+	AdvertisingChannelSubTypeEnum_DISPLAY_EXPRESS AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 5
+	// Smart Shopping campaigns.
+	AdvertisingChannelSubTypeEnum_SHOPPING_SMART_ADS AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 6
+	// Gmail Ad campaigns.
+	AdvertisingChannelSubTypeEnum_DISPLAY_GMAIL_AD AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 7
+	// Smart display campaigns.
+	AdvertisingChannelSubTypeEnum_DISPLAY_SMART_CAMPAIGN AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 8
+	// Video Outstream campaigns.
+	AdvertisingChannelSubTypeEnum_VIDEO_OUTSTREAM AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType = 9
+)
+
+var AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SEARCH_MOBILE_APP",
+	3: "DISPLAY_MOBILE_APP",
+	4: "SEARCH_EXPRESS",
+	5: "DISPLAY_EXPRESS",
+	6: "SHOPPING_SMART_ADS",
+	7: "DISPLAY_GMAIL_AD",
+	8: "DISPLAY_SMART_CAMPAIGN",
+	9: "VIDEO_OUTSTREAM",
+}
+var AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"SEARCH_MOBILE_APP":      2,
+	"DISPLAY_MOBILE_APP":     3,
+	"SEARCH_EXPRESS":         4,
+	"DISPLAY_EXPRESS":        5,
+	"SHOPPING_SMART_ADS":     6,
+	"DISPLAY_GMAIL_AD":       7,
+	"DISPLAY_SMART_CAMPAIGN": 8,
+	"VIDEO_OUTSTREAM":        9,
+}
+
+func (x AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType) String() string {
+	return proto.EnumName(AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_name, int32(x))
+}
+func (AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_advertising_channel_sub_type_ce75430c9173807b, []int{0, 0}
+}
+
+// An immutable specialization of an Advertising Channel.
+type AdvertisingChannelSubTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdvertisingChannelSubTypeEnum) Reset()         { *m = AdvertisingChannelSubTypeEnum{} }
+func (m *AdvertisingChannelSubTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdvertisingChannelSubTypeEnum) ProtoMessage()    {}
+func (*AdvertisingChannelSubTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_advertising_channel_sub_type_ce75430c9173807b, []int{0}
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdvertisingChannelSubTypeEnum.Unmarshal(m, b)
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdvertisingChannelSubTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdvertisingChannelSubTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdvertisingChannelSubTypeEnum.Merge(dst, src)
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdvertisingChannelSubTypeEnum.Size(m)
+}
+func (m *AdvertisingChannelSubTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdvertisingChannelSubTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdvertisingChannelSubTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdvertisingChannelSubTypeEnum)(nil), "google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType", AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_name, AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/advertising_channel_sub_type.proto", fileDescriptor_advertising_channel_sub_type_ce75430c9173807b)
+}
+
+var fileDescriptor_advertising_channel_sub_type_ce75430c9173807b = []byte{
+	// 382 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xdf, 0xee, 0x93, 0x30,
+	0x1c, 0xc5, 0x85, 0x9f, 0x6e, 0xda, 0x25, 0xae, 0x56, 0x5d, 0xa2, 0xc9, 0x4c, 0xdc, 0x03, 0x14,
+	0x12, 0x2f, 0xbd, 0xb1, 0x40, 0x65, 0x8d, 0x03, 0x1a, 0xca, 0xe6, 0x9f, 0x90, 0x34, 0x6c, 0x10,
+	0x5c, 0xb2, 0x01, 0x59, 0xc7, 0x92, 0xbd, 0x86, 0x8f, 0xe0, 0xa5, 0x8f, 0xe2, 0x8d, 0xaf, 0xe2,
+	0x23, 0x18, 0x60, 0x4c, 0x6f, 0xe6, 0x0d, 0x39, 0xf9, 0x9e, 0xc3, 0xa7, 0xc9, 0x39, 0xe0, 0x5d,
+	0x5e, 0x96, 0xf9, 0x2e, 0x33, 0x92, 0x54, 0x19, 0x9d, 0x6c, 0xd4, 0xc9, 0x34, 0xb2, 0xa2, 0xde,
+	0x2b, 0x23, 0x49, 0x4f, 0xd9, 0xe1, 0xb8, 0x55, 0xdb, 0x22, 0x97, 0x9b, 0xaf, 0x49, 0x51, 0x64,
+	0x3b, 0xa9, 0xea, 0xb5, 0x3c, 0x9e, 0xab, 0x0c, 0x57, 0x87, 0xf2, 0x58, 0xa2, 0x69, 0xf7, 0x1b,
+	0x4e, 0x52, 0x85, 0xaf, 0x04, 0x7c, 0x32, 0x71, 0x4b, 0x98, 0x7d, 0xd3, 0xc1, 0x94, 0xfc, 0xa5,
+	0xd8, 0x1d, 0x44, 0xd4, 0xeb, 0xe8, 0x5c, 0x65, 0xb4, 0xa8, 0xf7, 0xb3, 0xdf, 0x1a, 0x78, 0x71,
+	0x33, 0x81, 0xc6, 0x60, 0xb4, 0xf4, 0x05, 0xa7, 0x36, 0x7b, 0xcf, 0xa8, 0x03, 0xef, 0xa1, 0x11,
+	0x18, 0x2e, 0xfd, 0x0f, 0x7e, 0xf0, 0xd1, 0x87, 0x1a, 0x7a, 0x0e, 0x9e, 0x08, 0x4a, 0x42, 0x7b,
+	0x2e, 0xbd, 0xc0, 0x62, 0x0b, 0x2a, 0x09, 0xe7, 0x50, 0x47, 0x13, 0x80, 0x1c, 0x26, 0xf8, 0x82,
+	0x7c, 0xfe, 0xf7, 0x7e, 0x87, 0x10, 0x78, 0x7c, 0x89, 0xd3, 0x4f, 0x3c, 0xa4, 0x42, 0xc0, 0xfb,
+	0xe8, 0x29, 0x18, 0xf7, 0xd9, 0xfe, 0xf8, 0xa0, 0x01, 0x88, 0x79, 0xc0, 0x39, 0xf3, 0x5d, 0x29,
+	0x3c, 0x12, 0x46, 0x92, 0x38, 0x02, 0x0e, 0xd0, 0x33, 0x00, 0xfb, 0xb0, 0xeb, 0x11, 0xb6, 0x90,
+	0xc4, 0x81, 0x43, 0xf4, 0x12, 0x4c, 0xfa, 0x6b, 0x17, 0xb6, 0x89, 0xc7, 0x09, 0x73, 0x7d, 0xf8,
+	0xb0, 0xc1, 0xaf, 0x98, 0x43, 0x03, 0x19, 0x2c, 0x23, 0x11, 0x85, 0x94, 0x78, 0xf0, 0x91, 0xf5,
+	0x4b, 0x03, 0xaf, 0x37, 0xe5, 0x1e, 0xff, 0xb7, 0x3a, 0xeb, 0xd5, 0xcd, 0x56, 0x78, 0xd3, 0x3c,
+	0xd7, 0xbe, 0x58, 0x17, 0x40, 0x5e, 0xee, 0x92, 0x22, 0xc7, 0xe5, 0x21, 0x37, 0xf2, 0xac, 0x68,
+	0x77, 0xe9, 0xd7, 0xac, 0xb6, 0xea, 0xc6, 0xb8, 0x6f, 0xdb, 0xef, 0x77, 0xfd, 0xce, 0x25, 0xe4,
+	0x87, 0x3e, 0x75, 0x3b, 0x14, 0x49, 0x15, 0xee, 0x64, 0xa3, 0x56, 0x26, 0x6e, 0x36, 0x52, 0x3f,
+	0x7b, 0x3f, 0x26, 0xa9, 0x8a, 0xaf, 0x7e, 0xbc, 0x32, 0xe3, 0xd6, 0x5f, 0x0f, 0xda, 0x47, 0xdf,
+	0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xbc, 0x94, 0x11, 0x50, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/advertising_channel_type.pb.go b/googleapis/ads/googleads/v0/enums/advertising_channel_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c644726a92f480e5d415a14c9b472084a8143476
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/advertising_channel_type.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/advertising_channel_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing the various advertising channel types.
+type AdvertisingChannelTypeEnum_AdvertisingChannelType int32
+
+const (
+	// Not specified.
+	AdvertisingChannelTypeEnum_UNSPECIFIED AdvertisingChannelTypeEnum_AdvertisingChannelType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AdvertisingChannelTypeEnum_UNKNOWN AdvertisingChannelTypeEnum_AdvertisingChannelType = 1
+	// Search Network. Includes display bundled, and Search+ campaigns.
+	AdvertisingChannelTypeEnum_SEARCH AdvertisingChannelTypeEnum_AdvertisingChannelType = 2
+	// Google Display Network only.
+	AdvertisingChannelTypeEnum_DISPLAY AdvertisingChannelTypeEnum_AdvertisingChannelType = 3
+	// Shopping campaigns serve on the shopping property
+	// and on google.com search results.
+	AdvertisingChannelTypeEnum_SHOPPING AdvertisingChannelTypeEnum_AdvertisingChannelType = 4
+	// Hotel Ads campaigns.
+	AdvertisingChannelTypeEnum_HOTEL AdvertisingChannelTypeEnum_AdvertisingChannelType = 5
+	// Video campaigns.
+	AdvertisingChannelTypeEnum_VIDEO AdvertisingChannelTypeEnum_AdvertisingChannelType = 6
+)
+
+var AdvertisingChannelTypeEnum_AdvertisingChannelType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SEARCH",
+	3: "DISPLAY",
+	4: "SHOPPING",
+	5: "HOTEL",
+	6: "VIDEO",
+}
+var AdvertisingChannelTypeEnum_AdvertisingChannelType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"SEARCH":      2,
+	"DISPLAY":     3,
+	"SHOPPING":    4,
+	"HOTEL":       5,
+	"VIDEO":       6,
+}
+
+func (x AdvertisingChannelTypeEnum_AdvertisingChannelType) String() string {
+	return proto.EnumName(AdvertisingChannelTypeEnum_AdvertisingChannelType_name, int32(x))
+}
+func (AdvertisingChannelTypeEnum_AdvertisingChannelType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_advertising_channel_type_5cc528374513ea09, []int{0, 0}
+}
+
+// The channel type a campaign may target to serve on.
+type AdvertisingChannelTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdvertisingChannelTypeEnum) Reset()         { *m = AdvertisingChannelTypeEnum{} }
+func (m *AdvertisingChannelTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AdvertisingChannelTypeEnum) ProtoMessage()    {}
+func (*AdvertisingChannelTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_advertising_channel_type_5cc528374513ea09, []int{0}
+}
+func (m *AdvertisingChannelTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdvertisingChannelTypeEnum.Unmarshal(m, b)
+}
+func (m *AdvertisingChannelTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdvertisingChannelTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdvertisingChannelTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdvertisingChannelTypeEnum.Merge(dst, src)
+}
+func (m *AdvertisingChannelTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AdvertisingChannelTypeEnum.Size(m)
+}
+func (m *AdvertisingChannelTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdvertisingChannelTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdvertisingChannelTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdvertisingChannelTypeEnum)(nil), "google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum_AdvertisingChannelType", AdvertisingChannelTypeEnum_AdvertisingChannelType_name, AdvertisingChannelTypeEnum_AdvertisingChannelType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/advertising_channel_type.proto", fileDescriptor_advertising_channel_type_5cc528374513ea09)
+}
+
+var fileDescriptor_advertising_channel_type_5cc528374513ea09 = []byte{
+	// 307 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xed, 0xe6, 0xa6, 0x66, 0x82, 0x21, 0x07, 0x0f, 0xca, 0x0e, 0xee, 0x01, 0xd2, 0x82,
+	0x47, 0xbd, 0x64, 0x5b, 0xdc, 0x8a, 0xa3, 0x0d, 0x76, 0x9b, 0x28, 0x85, 0x51, 0xd7, 0x10, 0x07,
+	0x6d, 0x52, 0x9a, 0xae, 0xb0, 0xc7, 0xf0, 0x15, 0x3c, 0xfa, 0x28, 0xe2, 0x43, 0x49, 0x5a, 0x37,
+	0x2f, 0xd3, 0x4b, 0xf9, 0xc1, 0x8f, 0xef, 0xeb, 0x3f, 0x1f, 0xb8, 0x15, 0x4a, 0x89, 0x84, 0xdb,
+	0x51, 0xac, 0xed, 0x1a, 0x0d, 0x95, 0x8e, 0xcd, 0xe5, 0x3a, 0xd5, 0x76, 0x14, 0x97, 0x3c, 0x2f,
+	0x56, 0x7a, 0x25, 0xc5, 0x62, 0xf9, 0x1a, 0x49, 0xc9, 0x93, 0x45, 0xb1, 0xc9, 0x38, 0xce, 0x72,
+	0x55, 0x28, 0xd4, 0xad, 0x23, 0x38, 0x8a, 0x35, 0xde, 0xa5, 0x71, 0xe9, 0xe0, 0x2a, 0xdd, 0x7b,
+	0xb3, 0xc0, 0x05, 0xf9, 0x6d, 0x18, 0xd4, 0x05, 0xd3, 0x4d, 0xc6, 0xa9, 0x5c, 0xa7, 0x3d, 0x0d,
+	0xce, 0xf7, 0x5b, 0x74, 0x06, 0x3a, 0x33, 0x2f, 0x60, 0x74, 0xe0, 0xde, 0xb9, 0x74, 0x08, 0x0f,
+	0x50, 0x07, 0x1c, 0xcd, 0xbc, 0x7b, 0xcf, 0x7f, 0xf4, 0xa0, 0x85, 0x00, 0x68, 0x07, 0x94, 0x3c,
+	0x0c, 0xc6, 0xb0, 0x61, 0xc4, 0xd0, 0x0d, 0xd8, 0x84, 0x3c, 0xc1, 0x26, 0x3a, 0x05, 0xc7, 0xc1,
+	0xd8, 0x67, 0xcc, 0xf5, 0x46, 0xf0, 0x10, 0x9d, 0x80, 0xd6, 0xd8, 0x9f, 0xd2, 0x09, 0x6c, 0x19,
+	0x9c, 0xbb, 0x43, 0xea, 0xc3, 0x76, 0xff, 0xcb, 0x02, 0x57, 0x4b, 0x95, 0xe2, 0x7f, 0x2f, 0xef,
+	0x5f, 0xee, 0x3f, 0x8c, 0x99, 0x57, 0x33, 0xeb, 0xb9, 0xff, 0x93, 0x16, 0x2a, 0x89, 0xa4, 0xc0,
+	0x2a, 0x17, 0xb6, 0xe0, 0xb2, 0xda, 0x64, 0xbb, 0x62, 0xb6, 0xd2, 0x7f, 0x8c, 0x7a, 0x53, 0x7d,
+	0xdf, 0x1b, 0xcd, 0x11, 0x21, 0x1f, 0x8d, 0xee, 0xa8, 0xae, 0x22, 0xb1, 0xc6, 0x35, 0x1a, 0x9a,
+	0x3b, 0xd8, 0x4c, 0xa4, 0x3f, 0xb7, 0x3e, 0x24, 0xb1, 0x0e, 0x77, 0x3e, 0x9c, 0x3b, 0x61, 0xe5,
+	0x5f, 0xda, 0xd5, 0x4f, 0xaf, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x80, 0x05, 0x51, 0xf4, 0xc8,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/affiliate_location_feed_relationship_type.pb.go b/googleapis/ads/googleads/v0/enums/affiliate_location_feed_relationship_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e7fea9d391b24175b7345558c39b21a575cde67d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/affiliate_location_feed_relationship_type.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/affiliate_location_feed_relationship_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for a relationship type for an affiliate location feed.
+type AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType int32
+
+const (
+	// Not specified.
+	AffiliateLocationFeedRelationshipTypeEnum_UNSPECIFIED AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AffiliateLocationFeedRelationshipTypeEnum_UNKNOWN AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType = 1
+	// General retailer relationship.
+	AffiliateLocationFeedRelationshipTypeEnum_GENERAL_RETAILER AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType = 2
+)
+
+var AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "GENERAL_RETAILER",
+}
+var AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"GENERAL_RETAILER": 2,
+}
+
+func (x AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType) String() string {
+	return proto.EnumName(AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_name, int32(x))
+}
+func (AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_affiliate_location_feed_relationship_type_623152188cd1ee87, []int{0, 0}
+}
+
+// Container for enum describing possible values for a relationship type for
+// an affiliate location feed.
+type AffiliateLocationFeedRelationshipTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AffiliateLocationFeedRelationshipTypeEnum) Reset() {
+	*m = AffiliateLocationFeedRelationshipTypeEnum{}
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AffiliateLocationFeedRelationshipTypeEnum) ProtoMessage()    {}
+func (*AffiliateLocationFeedRelationshipTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_affiliate_location_feed_relationship_type_623152188cd1ee87, []int{0}
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Unmarshal(m, b)
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AffiliateLocationFeedRelationshipTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Merge(dst, src)
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.Size(m)
+}
+func (m *AffiliateLocationFeedRelationshipTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AffiliateLocationFeedRelationshipTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AffiliateLocationFeedRelationshipTypeEnum)(nil), "google.ads.googleads.v0.enums.AffiliateLocationFeedRelationshipTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType", AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_name, AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/affiliate_location_feed_relationship_type.proto", fileDescriptor_affiliate_location_feed_relationship_type_623152188cd1ee87)
+}
+
+var fileDescriptor_affiliate_location_feed_relationship_type_623152188cd1ee87 = []byte{
+	// 295 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xf2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xc4, 0xb4, 0xb4, 0xcc, 0x9c, 0xcc, 0xc4, 0x92, 0xd4, 0xf8, 0x9c, 0xfc,
+	0xe4, 0xc4, 0x92, 0xcc, 0xfc, 0xbc, 0xf8, 0xb4, 0xd4, 0xd4, 0x94, 0xf8, 0xa2, 0xd4, 0x1c, 0x30,
+	0xaf, 0x38, 0x23, 0xb3, 0x20, 0xbe, 0xa4, 0xb2, 0x20, 0x55, 0xaf, 0xa0, 0x28, 0xbf, 0x24, 0x5f,
+	0x48, 0x16, 0x62, 0x86, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0xdc, 0x38, 0xbd, 0x32, 0x03, 0x3d, 0xb0,
+	0x71, 0x4a, 0x1d, 0x8c, 0x5c, 0x9a, 0x8e, 0x30, 0x23, 0x7d, 0xa0, 0x26, 0xba, 0xa5, 0xa6, 0xa6,
+	0x04, 0x21, 0x99, 0x17, 0x52, 0x59, 0x90, 0xea, 0x9a, 0x57, 0x9a, 0xab, 0x14, 0xcd, 0xa5, 0x4a,
+	0x94, 0x62, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57,
+	0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46,
+	0x21, 0x11, 0x2e, 0x01, 0x77, 0x57, 0x3f, 0xd7, 0x20, 0x47, 0x9f, 0xf8, 0x20, 0xd7, 0x10, 0x47,
+	0x4f, 0x1f, 0xd7, 0x20, 0x01, 0x26, 0xa7, 0xdb, 0x8c, 0x5c, 0x8a, 0xc9, 0xf9, 0xb9, 0x7a, 0x78,
+	0x1d, 0xec, 0xa4, 0x45, 0x94, 0x03, 0x02, 0x40, 0x7e, 0x0f, 0x60, 0x8c, 0x72, 0x82, 0x1a, 0x96,
+	0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0x0e, 0x19,
+	0x58, 0xe0, 0x16, 0x64, 0x16, 0xe3, 0x08, 0x6b, 0x6b, 0x30, 0xb9, 0x88, 0x89, 0xd9, 0xdd, 0xd1,
+	0x71, 0x15, 0x93, 0xac, 0x3b, 0xc4, 0x28, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33,
+	0xd0, 0x03, 0x85, 0x4c, 0xf1, 0x29, 0x98, 0x7c, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x3e, 0x26,
+	0xcc, 0x20, 0x06, 0x2c, 0x9f, 0xc4, 0x06, 0xb6, 0xd4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x44,
+	0xd5, 0x6c, 0xea, 0xdf, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/age_range_type.pb.go b/googleapis/ads/googleads/v0/enums/age_range_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c2aa273b8af08ec91725c48cf96b1ec074ffe3dc
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/age_range_type.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/age_range_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of demographic age ranges (e.g. between 18 and 24 years old).
+type AgeRangeTypeEnum_AgeRangeType int32
+
+const (
+	// Not specified.
+	AgeRangeTypeEnum_UNSPECIFIED AgeRangeTypeEnum_AgeRangeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	AgeRangeTypeEnum_UNKNOWN AgeRangeTypeEnum_AgeRangeType = 1
+	// Between 18 and 24 years old.
+	AgeRangeTypeEnum_AGE_RANGE_18_24 AgeRangeTypeEnum_AgeRangeType = 503001
+	// Between 25 and 34 years old.
+	AgeRangeTypeEnum_AGE_RANGE_25_34 AgeRangeTypeEnum_AgeRangeType = 503002
+	// Between 35 and 44 years old.
+	AgeRangeTypeEnum_AGE_RANGE_35_44 AgeRangeTypeEnum_AgeRangeType = 503003
+	// Between 45 and 54 years old.
+	AgeRangeTypeEnum_AGE_RANGE_45_54 AgeRangeTypeEnum_AgeRangeType = 503004
+	// Between 55 and 64 years old.
+	AgeRangeTypeEnum_AGE_RANGE_55_64 AgeRangeTypeEnum_AgeRangeType = 503005
+	// 65 years old and beyond.
+	AgeRangeTypeEnum_AGE_RANGE_65_UP AgeRangeTypeEnum_AgeRangeType = 503006
+	// Undetermined age range.
+	AgeRangeTypeEnum_AGE_RANGE_UNDETERMINED AgeRangeTypeEnum_AgeRangeType = 503999
+)
+
+var AgeRangeTypeEnum_AgeRangeType_name = map[int32]string{
+	0:      "UNSPECIFIED",
+	1:      "UNKNOWN",
+	503001: "AGE_RANGE_18_24",
+	503002: "AGE_RANGE_25_34",
+	503003: "AGE_RANGE_35_44",
+	503004: "AGE_RANGE_45_54",
+	503005: "AGE_RANGE_55_64",
+	503006: "AGE_RANGE_65_UP",
+	503999: "AGE_RANGE_UNDETERMINED",
+}
+var AgeRangeTypeEnum_AgeRangeType_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"AGE_RANGE_18_24":        503001,
+	"AGE_RANGE_25_34":        503002,
+	"AGE_RANGE_35_44":        503003,
+	"AGE_RANGE_45_54":        503004,
+	"AGE_RANGE_55_64":        503005,
+	"AGE_RANGE_65_UP":        503006,
+	"AGE_RANGE_UNDETERMINED": 503999,
+}
+
+func (x AgeRangeTypeEnum_AgeRangeType) String() string {
+	return proto.EnumName(AgeRangeTypeEnum_AgeRangeType_name, int32(x))
+}
+func (AgeRangeTypeEnum_AgeRangeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_age_range_type_846fc75750f12f7f, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic age ranges.
+type AgeRangeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AgeRangeTypeEnum) Reset()         { *m = AgeRangeTypeEnum{} }
+func (m *AgeRangeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*AgeRangeTypeEnum) ProtoMessage()    {}
+func (*AgeRangeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_age_range_type_846fc75750f12f7f, []int{0}
+}
+func (m *AgeRangeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AgeRangeTypeEnum.Unmarshal(m, b)
+}
+func (m *AgeRangeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AgeRangeTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *AgeRangeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AgeRangeTypeEnum.Merge(dst, src)
+}
+func (m *AgeRangeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_AgeRangeTypeEnum.Size(m)
+}
+func (m *AgeRangeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AgeRangeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AgeRangeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AgeRangeTypeEnum)(nil), "google.ads.googleads.v0.enums.AgeRangeTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AgeRangeTypeEnum_AgeRangeType", AgeRangeTypeEnum_AgeRangeType_name, AgeRangeTypeEnum_AgeRangeType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/age_range_type.proto", fileDescriptor_age_range_type_846fc75750f12f7f)
+}
+
+var fileDescriptor_age_range_type_846fc75750f12f7f = []byte{
+	// 336 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xc4, 0xf4, 0xd4, 0xf8, 0xa2, 0xc4, 0xbc, 0xf4, 0xd4, 0xf8, 0x92, 0xca,
+	0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x42, 0xbd, 0xc4, 0x94, 0x62,
+	0x3d, 0xb8, 0x1e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x1e, 0xa5, 0x97, 0x8c, 0x5c, 0x02, 0x8e, 0xe9,
+	0xa9, 0x41, 0x20, 0x6d, 0x21, 0x95, 0x05, 0xa9, 0xae, 0x79, 0xa5, 0xb9, 0x4a, 0x57, 0x18, 0xb9,
+	0x78, 0x90, 0x05, 0x85, 0xf8, 0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c, 0x9d, 0x3d, 0xdd, 0x3c,
+	0x5d, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd, 0xfc, 0xc3, 0xfd, 0x04,
+	0x18, 0x85, 0x44, 0xb9, 0xf8, 0x1d, 0xdd, 0x5d, 0xe3, 0x83, 0x1c, 0xfd, 0xdc, 0x5d, 0xe3, 0x0d,
+	0x2d, 0xe2, 0x8d, 0x4c, 0x04, 0x6e, 0xde, 0x94, 0x43, 0x15, 0x36, 0x32, 0x8d, 0x37, 0x36, 0x11,
+	0xb8, 0x85, 0x2e, 0x6c, 0x6c, 0x1a, 0x6f, 0x62, 0x22, 0x70, 0x1b, 0x5d, 0xd8, 0xc4, 0x34, 0xde,
+	0xd4, 0x44, 0xe0, 0x0e, 0xba, 0xb0, 0xa9, 0x69, 0xbc, 0x99, 0x89, 0xc0, 0x5d, 0x74, 0x61, 0x33,
+	0xd3, 0xf8, 0xd0, 0x00, 0x81, 0x7b, 0x37, 0xe5, 0x84, 0x64, 0xb8, 0xc4, 0x10, 0xc2, 0xa1, 0x7e,
+	0x2e, 0xae, 0x21, 0xae, 0x41, 0xbe, 0x9e, 0x7e, 0xae, 0x2e, 0x02, 0xfb, 0x1f, 0xca, 0x39, 0x1d,
+	0x62, 0xe4, 0x52, 0x4c, 0xce, 0xcf, 0xd5, 0xc3, 0x1b, 0x22, 0x4e, 0x82, 0xc8, 0x3e, 0x0f, 0x00,
+	0x85, 0x61, 0x00, 0x63, 0x94, 0x13, 0x54, 0x4f, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e,
+	0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0x38, 0x84, 0x61, 0x31, 0x51, 0x90, 0x59, 0x8c, 0x23, 0x62,
+	0xac, 0xc1, 0xe4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0xb2, 0xee, 0x10, 0xa3, 0x1c,
+	0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0x14, 0xf4, 0xc5, 0xa7, 0x60, 0xf2,
+	0x31, 0x8e, 0x29, 0xc5, 0x31, 0x70, 0xf9, 0x98, 0x30, 0x83, 0x18, 0xb0, 0x7c, 0x12, 0x1b, 0xd8,
+	0x52, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x72, 0xdc, 0x47, 0x0c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/app_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/app_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0f3853442192273e6953aa3db16fea4dad04bf9c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/app_placeholder_field.pb.go
@@ -0,0 +1,150 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/app_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for App placeholder fields.
+type AppPlaceholderFieldEnum_AppPlaceholderField int32
+
+const (
+	// Not specified.
+	AppPlaceholderFieldEnum_UNSPECIFIED AppPlaceholderFieldEnum_AppPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	AppPlaceholderFieldEnum_UNKNOWN AppPlaceholderFieldEnum_AppPlaceholderField = 1
+	// Data Type: INT64. The application store that the target application
+	// belongs to. Valid values are: 1 = Apple iTunes Store; 2 = Google Play
+	// Store.
+	AppPlaceholderFieldEnum_STORE AppPlaceholderFieldEnum_AppPlaceholderField = 2
+	// Data Type: STRING. The store-specific ID for the target application.
+	AppPlaceholderFieldEnum_ID AppPlaceholderFieldEnum_AppPlaceholderField = 3
+	// Data Type: STRING. The visible text displayed when the link is rendered
+	// in an ad.
+	AppPlaceholderFieldEnum_LINK_TEXT AppPlaceholderFieldEnum_AppPlaceholderField = 4
+	// Data Type: STRING. The destination URL of the in-app link.
+	AppPlaceholderFieldEnum_URL AppPlaceholderFieldEnum_AppPlaceholderField = 5
+	// Data Type: URL_LIST. Final URLs for the in-app link when using Upgraded
+	// URLs.
+	AppPlaceholderFieldEnum_FINAL_URLS AppPlaceholderFieldEnum_AppPlaceholderField = 6
+	// Data Type: URL_LIST. Final Mobile URLs for the in-app link when using
+	// Upgraded URLs.
+	AppPlaceholderFieldEnum_FINAL_MOBILE_URLS AppPlaceholderFieldEnum_AppPlaceholderField = 7
+	// Data Type: URL. Tracking template for the in-app link when using Upgraded
+	// URLs.
+	AppPlaceholderFieldEnum_TRACKING_URL AppPlaceholderFieldEnum_AppPlaceholderField = 8
+	// Data Type: STRING. Final URL suffix for the in-app link when using
+	// parallel tracking.
+	AppPlaceholderFieldEnum_FINAL_URL_SUFFIX AppPlaceholderFieldEnum_AppPlaceholderField = 9
+)
+
+var AppPlaceholderFieldEnum_AppPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "STORE",
+	3: "ID",
+	4: "LINK_TEXT",
+	5: "URL",
+	6: "FINAL_URLS",
+	7: "FINAL_MOBILE_URLS",
+	8: "TRACKING_URL",
+	9: "FINAL_URL_SUFFIX",
+}
+var AppPlaceholderFieldEnum_AppPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"STORE":             2,
+	"ID":                3,
+	"LINK_TEXT":         4,
+	"URL":               5,
+	"FINAL_URLS":        6,
+	"FINAL_MOBILE_URLS": 7,
+	"TRACKING_URL":      8,
+	"FINAL_URL_SUFFIX":  9,
+}
+
+func (x AppPlaceholderFieldEnum_AppPlaceholderField) String() string {
+	return proto.EnumName(AppPlaceholderFieldEnum_AppPlaceholderField_name, int32(x))
+}
+func (AppPlaceholderFieldEnum_AppPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_app_placeholder_field_f3f678b0f2e2b317, []int{0, 0}
+}
+
+// Values for App placeholder fields.
+type AppPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AppPlaceholderFieldEnum) Reset()         { *m = AppPlaceholderFieldEnum{} }
+func (m *AppPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*AppPlaceholderFieldEnum) ProtoMessage()    {}
+func (*AppPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_app_placeholder_field_f3f678b0f2e2b317, []int{0}
+}
+func (m *AppPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AppPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *AppPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AppPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *AppPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AppPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *AppPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_AppPlaceholderFieldEnum.Size(m)
+}
+func (m *AppPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AppPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AppPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AppPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.AppPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AppPlaceholderFieldEnum_AppPlaceholderField", AppPlaceholderFieldEnum_AppPlaceholderField_name, AppPlaceholderFieldEnum_AppPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/app_placeholder_field.proto", fileDescriptor_app_placeholder_field_f3f678b0f2e2b317)
+}
+
+var fileDescriptor_app_placeholder_field_f3f678b0f2e2b317 = []byte{
+	// 345 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xcf, 0x4e, 0xea, 0x40,
+	0x18, 0xc5, 0x6f, 0xcb, 0x05, 0x2e, 0x1f, 0xf7, 0x5e, 0xc7, 0x51, 0xa3, 0x1b, 0x16, 0xf2, 0x00,
+	0xd3, 0x26, 0xae, 0x8c, 0xab, 0x16, 0x5a, 0x32, 0xa1, 0x96, 0xa6, 0x7f, 0x90, 0x98, 0x26, 0x4d,
+	0xa5, 0xb5, 0x92, 0x94, 0xce, 0x84, 0x11, 0x1e, 0xc8, 0xa5, 0x89, 0x0f, 0x82, 0x4f, 0x65, 0xda,
+	0x0a, 0x6e, 0xd0, 0xcd, 0xe4, 0xcc, 0x77, 0xe6, 0x37, 0x93, 0x73, 0x06, 0xae, 0x33, 0xc6, 0xb2,
+	0x3c, 0x55, 0xe2, 0x44, 0x28, 0xb5, 0x2c, 0xd5, 0x46, 0x55, 0xd2, 0x62, 0xbd, 0x14, 0x4a, 0xcc,
+	0x79, 0xc4, 0xf3, 0x78, 0x9e, 0x3e, 0xb1, 0x3c, 0x49, 0x57, 0xd1, 0xe3, 0x22, 0xcd, 0x13, 0xc2,
+	0x57, 0xec, 0x99, 0xe1, 0x5e, 0x7d, 0x9e, 0xc4, 0x89, 0x20, 0x7b, 0x94, 0x6c, 0x54, 0x52, 0xa1,
+	0xfd, 0xad, 0x04, 0xe7, 0x1a, 0xe7, 0xce, 0x17, 0x6d, 0x96, 0xb0, 0x51, 0xac, 0x97, 0xfd, 0x37,
+	0x09, 0x4e, 0x0e, 0x78, 0xf8, 0x08, 0xba, 0x81, 0xed, 0x39, 0xc6, 0x80, 0x9a, 0xd4, 0x18, 0xa2,
+	0x5f, 0xb8, 0x0b, 0xed, 0xc0, 0x1e, 0xdb, 0x93, 0x3b, 0x1b, 0x49, 0xb8, 0x03, 0x4d, 0xcf, 0x9f,
+	0xb8, 0x06, 0x92, 0x71, 0x0b, 0x64, 0x3a, 0x44, 0x0d, 0xfc, 0x0f, 0x3a, 0x16, 0xb5, 0xc7, 0x91,
+	0x6f, 0xcc, 0x7c, 0xf4, 0x1b, 0xb7, 0xa1, 0x11, 0xb8, 0x16, 0x6a, 0xe2, 0xff, 0x00, 0x26, 0xb5,
+	0x35, 0x2b, 0x0a, 0x5c, 0xcb, 0x43, 0x2d, 0x7c, 0x06, 0xc7, 0xf5, 0xfe, 0x76, 0xa2, 0x53, 0xcb,
+	0xa8, 0xc7, 0x6d, 0x8c, 0xe0, 0xaf, 0xef, 0x6a, 0x83, 0x31, 0xb5, 0x47, 0xe5, 0x08, 0xfd, 0xc1,
+	0xa7, 0x80, 0xf6, 0x60, 0xe4, 0x05, 0xa6, 0x49, 0x67, 0xa8, 0xa3, 0x6f, 0x25, 0xb8, 0x9c, 0xb3,
+	0x25, 0xf9, 0x31, 0xb1, 0x7e, 0x71, 0x20, 0x92, 0x53, 0x56, 0xe5, 0x48, 0xf7, 0xfa, 0x27, 0x9a,
+	0xb1, 0x3c, 0x2e, 0x32, 0xc2, 0x56, 0x99, 0x92, 0xa5, 0x45, 0x55, 0xe4, 0xae, 0x77, 0xbe, 0x10,
+	0xdf, 0x7c, 0xc3, 0x4d, 0xb5, 0xbe, 0xc8, 0x8d, 0x91, 0xa6, 0xbd, 0xca, 0xbd, 0x51, 0x7d, 0x95,
+	0x96, 0x08, 0x52, 0xcb, 0x52, 0x4d, 0x55, 0x52, 0x56, 0x2b, 0xde, 0x77, 0x7e, 0xa8, 0x25, 0x22,
+	0xdc, 0xfb, 0xe1, 0x54, 0x0d, 0x2b, 0xff, 0xa1, 0x55, 0x3d, 0x7a, 0xf5, 0x11, 0x00, 0x00, 0xff,
+	0xff, 0xec, 0x9f, 0x59, 0xbc, 0xfa, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/attribution_model.pb.go b/googleapis/ads/googleads/v0/enums/attribution_model.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ad0d17be5b10d95af96ace3d84f8b685f354effa
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/attribution_model.pb.go
@@ -0,0 +1,150 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/attribution_model.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The attribution model that describes how to distribute credit for a
+// particular conversion across potentially many prior interactions.
+type AttributionModelEnum_AttributionModel int32
+
+const (
+	// Not specified.
+	AttributionModelEnum_UNSPECIFIED AttributionModelEnum_AttributionModel = 0
+	// Used for return value only. Represents value unknown in this version.
+	AttributionModelEnum_UNKNOWN AttributionModelEnum_AttributionModel = 1
+	// Uses external attribution.
+	AttributionModelEnum_EXTERNAL AttributionModelEnum_AttributionModel = 100
+	// Attributes all credit for a conversion to its last click.
+	AttributionModelEnum_GOOGLE_ADS_LAST_CLICK AttributionModelEnum_AttributionModel = 101
+	// Attributes all credit for a conversion to its first click using Google
+	// Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK AttributionModelEnum_AttributionModel = 102
+	// Attributes credit for a conversion equally across all of its clicks using
+	// Google Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_LINEAR AttributionModelEnum_AttributionModel = 103
+	// Attributes exponentially more credit for a conversion to its more recent
+	// clicks using Google Search attribution (half-life is 1 week).
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY AttributionModelEnum_AttributionModel = 104
+	// Attributes 40% of the credit for a conversion to its first and last
+	// clicks. Remaining 20% is evenly distributed across all other clicks. This
+	// uses Google Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED AttributionModelEnum_AttributionModel = 105
+	// Flexible model that uses machine learning to determine the appropriate
+	// distribution of credit among clicks using Google Search attribution.
+	AttributionModelEnum_GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN AttributionModelEnum_AttributionModel = 106
+)
+
+var AttributionModelEnum_AttributionModel_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	100: "EXTERNAL",
+	101: "GOOGLE_ADS_LAST_CLICK",
+	102: "GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK",
+	103: "GOOGLE_SEARCH_ATTRIBUTION_LINEAR",
+	104: "GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY",
+	105: "GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED",
+	106: "GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN",
+}
+var AttributionModelEnum_AttributionModel_value = map[string]int32{
+	"UNSPECIFIED":                              0,
+	"UNKNOWN":                                  1,
+	"EXTERNAL":                                 100,
+	"GOOGLE_ADS_LAST_CLICK":                    101,
+	"GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK":    102,
+	"GOOGLE_SEARCH_ATTRIBUTION_LINEAR":         103,
+	"GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY":     104,
+	"GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED": 105,
+	"GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN":    106,
+}
+
+func (x AttributionModelEnum_AttributionModel) String() string {
+	return proto.EnumName(AttributionModelEnum_AttributionModel_name, int32(x))
+}
+func (AttributionModelEnum_AttributionModel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_attribution_model_03c15a84641f0f34, []int{0, 0}
+}
+
+// Container for enum representing the attribution model that describes how to
+// distribute credit for a particular conversion across potentially many prior
+// interactions.
+type AttributionModelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AttributionModelEnum) Reset()         { *m = AttributionModelEnum{} }
+func (m *AttributionModelEnum) String() string { return proto.CompactTextString(m) }
+func (*AttributionModelEnum) ProtoMessage()    {}
+func (*AttributionModelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_attribution_model_03c15a84641f0f34, []int{0}
+}
+func (m *AttributionModelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AttributionModelEnum.Unmarshal(m, b)
+}
+func (m *AttributionModelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AttributionModelEnum.Marshal(b, m, deterministic)
+}
+func (dst *AttributionModelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AttributionModelEnum.Merge(dst, src)
+}
+func (m *AttributionModelEnum) XXX_Size() int {
+	return xxx_messageInfo_AttributionModelEnum.Size(m)
+}
+func (m *AttributionModelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AttributionModelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AttributionModelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AttributionModelEnum)(nil), "google.ads.googleads.v0.enums.AttributionModelEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.AttributionModelEnum_AttributionModel", AttributionModelEnum_AttributionModel_name, AttributionModelEnum_AttributionModel_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/attribution_model.proto", fileDescriptor_attribution_model_03c15a84641f0f34)
+}
+
+var fileDescriptor_attribution_model_03c15a84641f0f34 = []byte{
+	// 369 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x8b, 0x9b, 0x40,
+	0x00, 0xc5, 0x1b, 0x0b, 0x6d, 0x99, 0x14, 0x3a, 0x0c, 0xcd, 0xa1, 0x87, 0x40, 0x1b, 0x52, 0x48,
+	0xa1, 0x8c, 0x42, 0xe9, 0xa9, 0xa7, 0x51, 0x27, 0x76, 0x88, 0x19, 0x45, 0x4d, 0xfa, 0x07, 0x61,
+	0x30, 0xd5, 0xba, 0x2e, 0xd1, 0x09, 0xd1, 0xe4, 0x03, 0xed, 0x71, 0x61, 0xbf, 0x46, 0x0e, 0xfb,
+	0xa9, 0x16, 0x35, 0xc9, 0x42, 0xc0, 0x5c, 0x86, 0x07, 0xef, 0xbd, 0x99, 0xe1, 0xfd, 0xc0, 0xf7,
+	0x54, 0xca, 0x74, 0x9d, 0xa8, 0x51, 0x5c, 0xaa, 0xad, 0xac, 0xd5, 0x5e, 0x53, 0x93, 0x62, 0x97,
+	0x97, 0x6a, 0x54, 0x55, 0xdb, 0x6c, 0xb5, 0xab, 0x32, 0x59, 0x88, 0x5c, 0xc6, 0xc9, 0x1a, 0x6f,
+	0xb6, 0xb2, 0x92, 0x68, 0xd8, 0x66, 0x71, 0x14, 0x97, 0xf8, 0x5c, 0xc3, 0x7b, 0x0d, 0x37, 0xb5,
+	0xd1, 0x41, 0x01, 0xef, 0xc9, 0x73, 0x75, 0x5e, 0x37, 0x69, 0xb1, 0xcb, 0x47, 0x0f, 0x0a, 0x80,
+	0x97, 0x06, 0x7a, 0x07, 0xfa, 0x0b, 0xee, 0xbb, 0xd4, 0x60, 0x53, 0x46, 0x4d, 0xf8, 0x02, 0xf5,
+	0xc1, 0xeb, 0x05, 0x9f, 0x71, 0xe7, 0x17, 0x87, 0x3d, 0xf4, 0x16, 0xbc, 0xa1, 0xbf, 0x03, 0xea,
+	0x71, 0x62, 0xc3, 0x18, 0x7d, 0x00, 0x03, 0xcb, 0x71, 0x2c, 0x9b, 0x0a, 0x62, 0xfa, 0xc2, 0x26,
+	0x7e, 0x20, 0x0c, 0x9b, 0x19, 0x33, 0x98, 0xa0, 0x2f, 0xe0, 0xf3, 0xd1, 0xf2, 0x29, 0xf1, 0x8c,
+	0x9f, 0x82, 0x04, 0x81, 0xc7, 0xf4, 0x45, 0xc0, 0x1c, 0x2e, 0xa6, 0xcc, 0x3b, 0x47, 0xff, 0xa3,
+	0x31, 0xf8, 0xd8, 0x1d, 0xb5, 0x19, 0xa7, 0xc4, 0x83, 0x29, 0x9a, 0x80, 0x71, 0x77, 0x2a, 0x60,
+	0x73, 0x2a, 0x4c, 0x6a, 0x90, 0x3f, 0xf0, 0x06, 0x7d, 0x05, 0x93, 0xee, 0xa4, 0xeb, 0xf8, 0xac,
+	0x11, 0x3a, 0xf1, 0xa9, 0x09, 0xb3, 0xeb, 0x1f, 0x35, 0x49, 0x40, 0x84, 0xe9, 0xb1, 0x25, 0xe5,
+	0xf0, 0x56, 0x3f, 0xf4, 0xc0, 0xa7, 0x7f, 0x32, 0xc7, 0x57, 0xe7, 0xd6, 0x07, 0x97, 0x93, 0xba,
+	0x35, 0x24, 0xb7, 0xf7, 0x57, 0x3f, 0xf6, 0x52, 0xb9, 0x8e, 0x8a, 0x14, 0xcb, 0x6d, 0xaa, 0xa6,
+	0x49, 0xd1, 0x20, 0x3c, 0xd1, 0xde, 0x64, 0x65, 0x07, 0xfc, 0x1f, 0xcd, 0x79, 0xa7, 0xbc, 0xb4,
+	0x08, 0xb9, 0x57, 0x86, 0x56, 0x7b, 0x15, 0x89, 0x4b, 0xdc, 0xca, 0x5a, 0x2d, 0x35, 0x5c, 0x73,
+	0x2d, 0x1f, 0x4f, 0x7e, 0x48, 0xe2, 0x32, 0x3c, 0xfb, 0xe1, 0x52, 0x0b, 0x1b, 0x7f, 0xf5, 0xaa,
+	0x79, 0xf4, 0xdb, 0x53, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0x00, 0xb5, 0x3a, 0x70, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/bid_modifier_source.pb.go b/googleapis/ads/googleads/v0/enums/bid_modifier_source.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..bc1a08736e257d13c15ffb7036ed33cf753f6630
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/bid_modifier_source.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/bid_modifier_source.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible bid modifier sources.
+type BidModifierSourceEnum_BidModifierSource int32
+
+const (
+	// Not specified.
+	BidModifierSourceEnum_UNSPECIFIED BidModifierSourceEnum_BidModifierSource = 0
+	// Used for return value only. Represents value unknown in this version.
+	BidModifierSourceEnum_UNKNOWN BidModifierSourceEnum_BidModifierSource = 1
+	// The bid modifier is specified at the campaign level, on the campaign
+	// level criterion.
+	BidModifierSourceEnum_CAMPAIGN BidModifierSourceEnum_BidModifierSource = 2
+	// The bid modifier is specified (overridden) at the ad group level.
+	BidModifierSourceEnum_AD_GROUP BidModifierSourceEnum_BidModifierSource = 3
+)
+
+var BidModifierSourceEnum_BidModifierSource_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CAMPAIGN",
+	3: "AD_GROUP",
+}
+var BidModifierSourceEnum_BidModifierSource_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CAMPAIGN":    2,
+	"AD_GROUP":    3,
+}
+
+func (x BidModifierSourceEnum_BidModifierSource) String() string {
+	return proto.EnumName(BidModifierSourceEnum_BidModifierSource_name, int32(x))
+}
+func (BidModifierSourceEnum_BidModifierSource) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bid_modifier_source_f02ca399af0ade5b, []int{0, 0}
+}
+
+// Container for enum describing possible bid modifier sources.
+type BidModifierSourceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BidModifierSourceEnum) Reset()         { *m = BidModifierSourceEnum{} }
+func (m *BidModifierSourceEnum) String() string { return proto.CompactTextString(m) }
+func (*BidModifierSourceEnum) ProtoMessage()    {}
+func (*BidModifierSourceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bid_modifier_source_f02ca399af0ade5b, []int{0}
+}
+func (m *BidModifierSourceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BidModifierSourceEnum.Unmarshal(m, b)
+}
+func (m *BidModifierSourceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BidModifierSourceEnum.Marshal(b, m, deterministic)
+}
+func (dst *BidModifierSourceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BidModifierSourceEnum.Merge(dst, src)
+}
+func (m *BidModifierSourceEnum) XXX_Size() int {
+	return xxx_messageInfo_BidModifierSourceEnum.Size(m)
+}
+func (m *BidModifierSourceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BidModifierSourceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BidModifierSourceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BidModifierSourceEnum)(nil), "google.ads.googleads.v0.enums.BidModifierSourceEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.BidModifierSourceEnum_BidModifierSource", BidModifierSourceEnum_BidModifierSource_name, BidModifierSourceEnum_BidModifierSource_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/bid_modifier_source.proto", fileDescriptor_bid_modifier_source_f02ca399af0ade5b)
+}
+
+var fileDescriptor_bid_modifier_source_f02ca399af0ade5b = []byte{
+	// 269 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xa4, 0xcc, 0x94, 0xf8, 0xdc, 0xfc, 0x94, 0xcc, 0xb4, 0xcc, 0xd4, 0xa2,
+	0xf8, 0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88,
+	0x6a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x46, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x46, 0xa5, 0x34,
+	0x2e, 0x51, 0xa7, 0xcc, 0x14, 0x5f, 0xa8, 0xd6, 0x60, 0xb0, 0x4e, 0xd7, 0xbc, 0xd2, 0x5c, 0x25,
+	0x5f, 0x2e, 0x41, 0x0c, 0x09, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f,
+	0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70,
+	0x3f, 0x01, 0x46, 0x21, 0x1e, 0x2e, 0x0e, 0x67, 0x47, 0xdf, 0x00, 0x47, 0x4f, 0x77, 0x3f, 0x01,
+	0x26, 0x10, 0xcf, 0xd1, 0x25, 0xde, 0x3d, 0xc8, 0x3f, 0x34, 0x40, 0x80, 0xd9, 0xe9, 0x38, 0x23,
+	0x97, 0x62, 0x72, 0x7e, 0xae, 0x1e, 0x5e, 0xd7, 0x38, 0x89, 0x61, 0x58, 0x19, 0x00, 0xf2, 0x44,
+	0x00, 0x63, 0x94, 0x13, 0x54, 0x63, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba,
+	0x7e, 0x7a, 0x6a, 0x1e, 0xd8, 0x8b, 0xb0, 0xf0, 0x28, 0xc8, 0x2c, 0xc6, 0x11, 0x3c, 0xd6, 0x60,
+	0x72, 0x11, 0x13, 0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x59, 0x77, 0x88, 0x51, 0x8e, 0x29, 0xc5,
+	0x7a, 0x10, 0x26, 0x88, 0x15, 0x66, 0xa0, 0x07, 0xf2, 0x77, 0xf1, 0x29, 0x98, 0x7c, 0x8c, 0x63,
+	0x4a, 0x71, 0x0c, 0x5c, 0x3e, 0x26, 0xcc, 0x20, 0x06, 0x2c, 0x9f, 0xc4, 0x06, 0xb6, 0xd4, 0x18,
+	0x10, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xa8, 0xae, 0xc8, 0x92, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/bidding_source.pb.go b/googleapis/ads/googleads/v0/enums/bidding_source.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d05116509adb904fd39990eee8ee26b6590c00fb
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/bidding_source.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/bidding_source.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible bidding sources.
+type BiddingSourceEnum_BiddingSource int32
+
+const (
+	// Not specified.
+	BiddingSourceEnum_UNSPECIFIED BiddingSourceEnum_BiddingSource = 0
+	// Used for return value only. Represents value unknown in this version.
+	BiddingSourceEnum_UNKNOWN BiddingSourceEnum_BiddingSource = 1
+	// Bidding entity is defined on the ad group.
+	BiddingSourceEnum_ADGROUP BiddingSourceEnum_BiddingSource = 2
+	// Bidding entity is defined on the ad group criterion.
+	BiddingSourceEnum_CRITERION BiddingSourceEnum_BiddingSource = 3
+	// Effective bidding entity is inherited from campaign bidding strategy.
+	BiddingSourceEnum_CAMPAIGN_BIDDING_STRATEGY BiddingSourceEnum_BiddingSource = 5
+)
+
+var BiddingSourceEnum_BiddingSource_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADGROUP",
+	3: "CRITERION",
+	5: "CAMPAIGN_BIDDING_STRATEGY",
+}
+var BiddingSourceEnum_BiddingSource_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"ADGROUP":                   2,
+	"CRITERION":                 3,
+	"CAMPAIGN_BIDDING_STRATEGY": 5,
+}
+
+func (x BiddingSourceEnum_BiddingSource) String() string {
+	return proto.EnumName(BiddingSourceEnum_BiddingSource_name, int32(x))
+}
+func (BiddingSourceEnum_BiddingSource) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_source_8ff63990646de11f, []int{0, 0}
+}
+
+// Container for enum describing possible bidding sources.
+type BiddingSourceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingSourceEnum) Reset()         { *m = BiddingSourceEnum{} }
+func (m *BiddingSourceEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingSourceEnum) ProtoMessage()    {}
+func (*BiddingSourceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_source_8ff63990646de11f, []int{0}
+}
+func (m *BiddingSourceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingSourceEnum.Unmarshal(m, b)
+}
+func (m *BiddingSourceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingSourceEnum.Marshal(b, m, deterministic)
+}
+func (dst *BiddingSourceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingSourceEnum.Merge(dst, src)
+}
+func (m *BiddingSourceEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingSourceEnum.Size(m)
+}
+func (m *BiddingSourceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingSourceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingSourceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BiddingSourceEnum)(nil), "google.ads.googleads.v0.enums.BiddingSourceEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.BiddingSourceEnum_BiddingSource", BiddingSourceEnum_BiddingSource_name, BiddingSourceEnum_BiddingSource_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/bidding_source.proto", fileDescriptor_bidding_source_8ff63990646de11f)
+}
+
+var fileDescriptor_bidding_source_8ff63990646de11f = []byte{
+	// 293 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xa4, 0xcc, 0x94, 0x94, 0xcc, 0xbc, 0xf4, 0xf8, 0xe2, 0xfc, 0xd2, 0xa2,
+	0xe4, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x42, 0xbd, 0xc4, 0x94, 0x62,
+	0x3d, 0xb8, 0x1e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x1e, 0xa5, 0x5a, 0x2e, 0x41, 0x27, 0x88, 0xb6,
+	0x60, 0xb0, 0x2e, 0xd7, 0xbc, 0xd2, 0x5c, 0xa5, 0x0c, 0x2e, 0x5e, 0x14, 0x41, 0x21, 0x7e, 0x2e,
+	0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e,
+	0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x10, 0xc7, 0xd1, 0xc5, 0x3d,
+	0xc8, 0x3f, 0x34, 0x40, 0x80, 0x49, 0x88, 0x97, 0x8b, 0xd3, 0x39, 0xc8, 0x33, 0xc4, 0x35, 0xc8,
+	0xd3, 0xdf, 0x4f, 0x80, 0x59, 0x48, 0x96, 0x4b, 0xd2, 0xd9, 0xd1, 0x37, 0xc0, 0xd1, 0xd3, 0xdd,
+	0x2f, 0xde, 0xc9, 0xd3, 0xc5, 0xc5, 0xd3, 0xcf, 0x3d, 0x3e, 0x38, 0x24, 0xc8, 0x31, 0xc4, 0xd5,
+	0x3d, 0x52, 0x80, 0xd5, 0xe9, 0x30, 0x23, 0x97, 0x62, 0x72, 0x7e, 0xae, 0x1e, 0x5e, 0x47, 0x3a,
+	0x09, 0xa1, 0xb8, 0x26, 0x00, 0xe4, 0xaf, 0x00, 0xc6, 0x28, 0x27, 0xa8, 0xa6, 0xf4, 0xfc, 0x9c,
+	0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0, 0xaf, 0x61, 0xa1, 0x53,
+	0x90, 0x59, 0x8c, 0x23, 0xb0, 0xac, 0xc1, 0xe4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c,
+	0xb2, 0xee, 0x10, 0xa3, 0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0x14,
+	0x1c, 0xc5, 0xa7, 0x60, 0xf2, 0x31, 0x8e, 0x29, 0xc5, 0x31, 0x70, 0xf9, 0x98, 0x30, 0x83, 0x18,
+	0xb0, 0x7c, 0x12, 0x1b, 0xd8, 0x52, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x27, 0x67,
+	0xa1, 0xa0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/bidding_strategy_type.pb.go b/googleapis/ads/googleads/v0/enums/bidding_strategy_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e8112e5efd4c9d0cf649d12a381a200a0ae75eb5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/bidding_strategy_type.pb.go
@@ -0,0 +1,176 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/bidding_strategy_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible bidding strategy types.
+type BiddingStrategyTypeEnum_BiddingStrategyType int32
+
+const (
+	// Not specified.
+	BiddingStrategyTypeEnum_UNSPECIFIED BiddingStrategyTypeEnum_BiddingStrategyType = 0
+	// Used for return value only. Represents value unknown in this version.
+	BiddingStrategyTypeEnum_UNKNOWN BiddingStrategyTypeEnum_BiddingStrategyType = 1
+	// Enhanced CPC is a bidding strategy that raises bids for clicks
+	// that seem more likely to lead to a conversion and lowers
+	// them for clicks where they seem less likely.
+	BiddingStrategyTypeEnum_ENHANCED_CPC BiddingStrategyTypeEnum_BiddingStrategyType = 2
+	// Manual click based bidding where user pays per click.
+	BiddingStrategyTypeEnum_MANUAL_CPC BiddingStrategyTypeEnum_BiddingStrategyType = 3
+	// Manual impression based bidding
+	// where user pays per thousand impressions.
+	BiddingStrategyTypeEnum_MANUAL_CPM BiddingStrategyTypeEnum_BiddingStrategyType = 4
+	// A bidding strategy that pays a configurable amount per video view.
+	BiddingStrategyTypeEnum_MANUAL_CPV BiddingStrategyTypeEnum_BiddingStrategyType = 13
+	// A bidding strategy that automatically maximizes number of conversions
+	// given a daily budget.
+	BiddingStrategyTypeEnum_MAXIMIZE_CONVERSIONS BiddingStrategyTypeEnum_BiddingStrategyType = 10
+	// An automated bidding strategy that automatically sets bids to maximize
+	// revenue while spending your budget.
+	BiddingStrategyTypeEnum_MAXIMIZE_CONVERSION_VALUE BiddingStrategyTypeEnum_BiddingStrategyType = 11
+	// Page-One Promoted bidding scheme, which sets max cpc bids to
+	// target impressions on page one or page one promoted slots on google.com.
+	BiddingStrategyTypeEnum_PAGE_ONE_PROMOTED BiddingStrategyTypeEnum_BiddingStrategyType = 5
+	// Percent Cpc is bidding strategy where bids are a fraction of the
+	// advertised price for some good or service.
+	BiddingStrategyTypeEnum_PERCENT_CPC BiddingStrategyTypeEnum_BiddingStrategyType = 12
+	// Target CPA is an automated bid strategy that sets bids
+	// to help get as many conversions as possible
+	// at the target cost-per-acquisition (CPA) you set.
+	BiddingStrategyTypeEnum_TARGET_CPA BiddingStrategyTypeEnum_BiddingStrategyType = 6
+	// Target Outrank Share is an automated bidding strategy that sets bids
+	// based on the target fraction of auctions where the advertiser
+	// should outrank a specific competitor.
+	BiddingStrategyTypeEnum_TARGET_OUTRANK_SHARE BiddingStrategyTypeEnum_BiddingStrategyType = 7
+	// Target ROAS is an automated bidding strategy
+	// that helps you maximize revenue while averaging
+	// a specific target Return On Average Spend (ROAS).
+	BiddingStrategyTypeEnum_TARGET_ROAS BiddingStrategyTypeEnum_BiddingStrategyType = 8
+	// Target Spend is an automated bid strategy that sets your bids
+	// to help get as many clicks as possible within your budget.
+	BiddingStrategyTypeEnum_TARGET_SPEND BiddingStrategyTypeEnum_BiddingStrategyType = 9
+)
+
+var BiddingStrategyTypeEnum_BiddingStrategyType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ENHANCED_CPC",
+	3:  "MANUAL_CPC",
+	4:  "MANUAL_CPM",
+	13: "MANUAL_CPV",
+	10: "MAXIMIZE_CONVERSIONS",
+	11: "MAXIMIZE_CONVERSION_VALUE",
+	5:  "PAGE_ONE_PROMOTED",
+	12: "PERCENT_CPC",
+	6:  "TARGET_CPA",
+	7:  "TARGET_OUTRANK_SHARE",
+	8:  "TARGET_ROAS",
+	9:  "TARGET_SPEND",
+}
+var BiddingStrategyTypeEnum_BiddingStrategyType_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"ENHANCED_CPC":              2,
+	"MANUAL_CPC":                3,
+	"MANUAL_CPM":                4,
+	"MANUAL_CPV":                13,
+	"MAXIMIZE_CONVERSIONS":      10,
+	"MAXIMIZE_CONVERSION_VALUE": 11,
+	"PAGE_ONE_PROMOTED":         5,
+	"PERCENT_CPC":               12,
+	"TARGET_CPA":                6,
+	"TARGET_OUTRANK_SHARE":      7,
+	"TARGET_ROAS":               8,
+	"TARGET_SPEND":              9,
+}
+
+func (x BiddingStrategyTypeEnum_BiddingStrategyType) String() string {
+	return proto.EnumName(BiddingStrategyTypeEnum_BiddingStrategyType_name, int32(x))
+}
+func (BiddingStrategyTypeEnum_BiddingStrategyType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_type_59808af5df705879, []int{0, 0}
+}
+
+// Container for enum describing possible bidding strategy types.
+type BiddingStrategyTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingStrategyTypeEnum) Reset()         { *m = BiddingStrategyTypeEnum{} }
+func (m *BiddingStrategyTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategyTypeEnum) ProtoMessage()    {}
+func (*BiddingStrategyTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_type_59808af5df705879, []int{0}
+}
+func (m *BiddingStrategyTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategyTypeEnum.Unmarshal(m, b)
+}
+func (m *BiddingStrategyTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategyTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *BiddingStrategyTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategyTypeEnum.Merge(dst, src)
+}
+func (m *BiddingStrategyTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategyTypeEnum.Size(m)
+}
+func (m *BiddingStrategyTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategyTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategyTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BiddingStrategyTypeEnum)(nil), "google.ads.googleads.v0.enums.BiddingStrategyTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.BiddingStrategyTypeEnum_BiddingStrategyType", BiddingStrategyTypeEnum_BiddingStrategyType_name, BiddingStrategyTypeEnum_BiddingStrategyType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/bidding_strategy_type.proto", fileDescriptor_bidding_strategy_type_59808af5df705879)
+}
+
+var fileDescriptor_bidding_strategy_type_59808af5df705879 = []byte{
+	// 398 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcd, 0x6e, 0xd4, 0x30,
+	0x18, 0x64, 0x53, 0x68, 0xc1, 0x5b, 0xc0, 0x18, 0x10, 0xe5, 0xb0, 0x07, 0xfa, 0x00, 0xce, 0x4a,
+	0x9c, 0x10, 0x27, 0x6f, 0xf6, 0x23, 0x8d, 0xda, 0xd8, 0x56, 0xfe, 0x40, 0x55, 0x24, 0x2b, 0x25,
+	0x91, 0xb5, 0x52, 0x37, 0x89, 0xd6, 0x69, 0xa5, 0x7d, 0x1d, 0xb8, 0xf1, 0x12, 0x9c, 0xe1, 0xa9,
+	0x90, 0x93, 0xb4, 0xd2, 0x4a, 0x4b, 0x2f, 0xd1, 0x4c, 0xc6, 0xe3, 0xf9, 0xfc, 0x0d, 0xfa, 0xa4,
+	0x9b, 0x46, 0x5f, 0x57, 0x6e, 0x51, 0x1a, 0x77, 0x80, 0x16, 0xdd, 0xce, 0xdd, 0xaa, 0xbe, 0x59,
+	0x1b, 0xf7, 0x6a, 0x55, 0x96, 0xab, 0x5a, 0x2b, 0xd3, 0x6d, 0x8a, 0xae, 0xd2, 0x5b, 0xd5, 0x6d,
+	0xdb, 0x8a, 0xb6, 0x9b, 0xa6, 0x6b, 0xc8, 0x6c, 0x38, 0x4f, 0x8b, 0xd2, 0xd0, 0x7b, 0x2b, 0xbd,
+	0x9d, 0xd3, 0xde, 0x7a, 0xfa, 0xdb, 0x41, 0xef, 0x16, 0x83, 0x3d, 0x1e, 0xdd, 0xc9, 0xb6, 0xad,
+	0xa0, 0xbe, 0x59, 0x9f, 0xfe, 0x74, 0xd0, 0xeb, 0x3d, 0x1a, 0x79, 0x89, 0xa6, 0x29, 0x8f, 0x25,
+	0x78, 0xc1, 0x97, 0x00, 0x96, 0xf8, 0x11, 0x99, 0xa2, 0xa3, 0x94, 0x9f, 0x73, 0xf1, 0x95, 0xe3,
+	0x09, 0xc1, 0xe8, 0x18, 0xf8, 0x19, 0xe3, 0x1e, 0x2c, 0x95, 0x27, 0x3d, 0xec, 0x90, 0x17, 0x08,
+	0x85, 0x8c, 0xa7, 0xec, 0xa2, 0xe7, 0x07, 0x3b, 0x3c, 0xc4, 0x8f, 0x77, 0x78, 0x86, 0x9f, 0x93,
+	0x13, 0xf4, 0x26, 0x64, 0xdf, 0x82, 0x30, 0xb8, 0x04, 0xe5, 0x09, 0x9e, 0x41, 0x14, 0x07, 0x82,
+	0xc7, 0x18, 0x91, 0x19, 0x7a, 0xbf, 0x47, 0x51, 0x19, 0xbb, 0x48, 0x01, 0x4f, 0xc9, 0x5b, 0xf4,
+	0x4a, 0x32, 0x1f, 0x94, 0xe0, 0xa0, 0x64, 0x24, 0x42, 0x91, 0xc0, 0x12, 0x3f, 0xb1, 0xf3, 0x4a,
+	0x88, 0x3c, 0xe0, 0x49, 0x3f, 0xc0, 0xb1, 0x0d, 0x4c, 0x58, 0xe4, 0x83, 0xe5, 0x0c, 0x1f, 0xda,
+	0xc0, 0x91, 0x8b, 0x34, 0x89, 0x18, 0x3f, 0x57, 0xf1, 0x19, 0x8b, 0x00, 0x1f, 0x59, 0xeb, 0xa8,
+	0x44, 0x82, 0xc5, 0xf8, 0xa9, 0x7d, 0xdd, 0xf8, 0x23, 0x96, 0xc0, 0x97, 0xf8, 0xd9, 0xe2, 0xcf,
+	0x04, 0x7d, 0xf8, 0xde, 0xac, 0xe9, 0x83, 0x7b, 0x5e, 0x9c, 0xec, 0x59, 0xa4, 0xb4, 0x05, 0xc9,
+	0xc9, 0xe5, 0x62, 0xb4, 0xea, 0xe6, 0xba, 0xa8, 0x35, 0x6d, 0x36, 0xda, 0xd5, 0x55, 0xdd, 0xd7,
+	0x77, 0xd7, 0x76, 0xbb, 0x32, 0xff, 0x29, 0xff, 0x73, 0xff, 0xfd, 0xe1, 0x1c, 0xf8, 0x8c, 0xfd,
+	0x72, 0x66, 0xfe, 0x70, 0x15, 0x2b, 0x0d, 0x1d, 0xa0, 0x45, 0xd9, 0x9c, 0xda, 0x42, 0xcd, 0xdf,
+	0x3b, 0x3d, 0x67, 0xa5, 0xc9, 0xef, 0xf5, 0x3c, 0x9b, 0xe7, 0xbd, 0x7e, 0x75, 0xd8, 0x87, 0x7e,
+	0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x98, 0xc2, 0x78, 0x70, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/billing_setup_status.pb.go b/googleapis/ads/googleads/v0/enums/billing_setup_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3b628d61ef1bda075f576ecfc6f44cd99dd0d4dc
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/billing_setup_status.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/billing_setup_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible statuses of a BillingSetup.
+type BillingSetupStatusEnum_BillingSetupStatus int32
+
+const (
+	// Not specified.
+	BillingSetupStatusEnum_UNSPECIFIED BillingSetupStatusEnum_BillingSetupStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	BillingSetupStatusEnum_UNKNOWN BillingSetupStatusEnum_BillingSetupStatus = 1
+	// The billing setup is pending approval.
+	BillingSetupStatusEnum_PENDING BillingSetupStatusEnum_BillingSetupStatus = 2
+	// The billing setup has been approved but the corresponding first budget
+	// has not.  This can only occur for billing setups configured for monthly
+	// invoicing.
+	BillingSetupStatusEnum_APPROVED_HELD BillingSetupStatusEnum_BillingSetupStatus = 3
+	// The billing setup has been approved.
+	BillingSetupStatusEnum_APPROVED BillingSetupStatusEnum_BillingSetupStatus = 4
+	// The billing setup was cancelled by the user prior to approval.
+	BillingSetupStatusEnum_CANCELLED BillingSetupStatusEnum_BillingSetupStatus = 5
+)
+
+var BillingSetupStatusEnum_BillingSetupStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PENDING",
+	3: "APPROVED_HELD",
+	4: "APPROVED",
+	5: "CANCELLED",
+}
+var BillingSetupStatusEnum_BillingSetupStatus_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"PENDING":       2,
+	"APPROVED_HELD": 3,
+	"APPROVED":      4,
+	"CANCELLED":     5,
+}
+
+func (x BillingSetupStatusEnum_BillingSetupStatus) String() string {
+	return proto.EnumName(BillingSetupStatusEnum_BillingSetupStatus_name, int32(x))
+}
+func (BillingSetupStatusEnum_BillingSetupStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_status_668c8b84286f82ef, []int{0, 0}
+}
+
+// Message describing BillingSetup statuses.
+type BillingSetupStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BillingSetupStatusEnum) Reset()         { *m = BillingSetupStatusEnum{} }
+func (m *BillingSetupStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*BillingSetupStatusEnum) ProtoMessage()    {}
+func (*BillingSetupStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_status_668c8b84286f82ef, []int{0}
+}
+func (m *BillingSetupStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetupStatusEnum.Unmarshal(m, b)
+}
+func (m *BillingSetupStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetupStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *BillingSetupStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetupStatusEnum.Merge(dst, src)
+}
+func (m *BillingSetupStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_BillingSetupStatusEnum.Size(m)
+}
+func (m *BillingSetupStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetupStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetupStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BillingSetupStatusEnum)(nil), "google.ads.googleads.v0.enums.BillingSetupStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.BillingSetupStatusEnum_BillingSetupStatus", BillingSetupStatusEnum_BillingSetupStatus_name, BillingSetupStatusEnum_BillingSetupStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/billing_setup_status.proto", fileDescriptor_billing_setup_status_668c8b84286f82ef)
+}
+
+var fileDescriptor_billing_setup_status_668c8b84286f82ef = []byte{
+	// 297 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdd, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc5, 0xed, 0xe6, 0x67, 0xe6, 0x30, 0xe6, 0x42, 0xaf, 0x76, 0xe1, 0x1e, 0x20, 0x2d, 0x78,
+	0x23, 0x78, 0x95, 0xae, 0x71, 0x0e, 0x4b, 0x16, 0x2c, 0xab, 0x20, 0x85, 0xd2, 0xd9, 0x12, 0x0a,
+	0x6d, 0x53, 0x96, 0x76, 0xef, 0xe0, 0x6b, 0x78, 0xe9, 0x93, 0x88, 0x4f, 0x25, 0x49, 0xed, 0x6e,
+	0x86, 0xde, 0x84, 0x93, 0x9c, 0xfc, 0x92, 0xf3, 0x3f, 0xe0, 0x4e, 0x48, 0x29, 0x8a, 0xcc, 0x4e,
+	0x52, 0x65, 0x77, 0x52, 0xab, 0xad, 0x63, 0x67, 0x55, 0x5b, 0x2a, 0x7b, 0x9d, 0x17, 0x45, 0x5e,
+	0x89, 0x58, 0x65, 0x4d, 0x5b, 0xc7, 0xaa, 0x49, 0x9a, 0x56, 0xe1, 0x7a, 0x23, 0x1b, 0x89, 0x26,
+	0xdd, 0x75, 0x9c, 0xa4, 0x0a, 0xef, 0x48, 0xbc, 0x75, 0xb0, 0x21, 0xa7, 0xef, 0x16, 0xb8, 0x72,
+	0x3b, 0x3a, 0xd0, 0x70, 0x60, 0x58, 0x5a, 0xb5, 0xe5, 0x54, 0x02, 0xb4, 0xef, 0xa0, 0x0b, 0x30,
+	0x5a, 0xb1, 0x80, 0xd3, 0xd9, 0xe2, 0x61, 0x41, 0x3d, 0x78, 0x80, 0x46, 0xe0, 0x64, 0xc5, 0x9e,
+	0xd8, 0xf2, 0x85, 0x41, 0x4b, 0x6f, 0x38, 0x65, 0xde, 0x82, 0xcd, 0xe1, 0x00, 0x5d, 0x82, 0x31,
+	0xe1, 0xfc, 0x79, 0x19, 0x52, 0x2f, 0x7e, 0xa4, 0xbe, 0x07, 0x87, 0xe8, 0x1c, 0x9c, 0xf6, 0x47,
+	0xf0, 0x10, 0x8d, 0xc1, 0xd9, 0x8c, 0xb0, 0x19, 0xf5, 0x7d, 0xea, 0xc1, 0x23, 0xf7, 0xcb, 0x02,
+	0x37, 0x6f, 0xb2, 0xc4, 0xff, 0x26, 0x76, 0xaf, 0xf7, 0x43, 0x71, 0x3d, 0x29, 0xb7, 0x5e, 0xdd,
+	0x5f, 0x52, 0xc8, 0x22, 0xa9, 0x04, 0x96, 0x1b, 0x61, 0x8b, 0xac, 0x32, 0x3d, 0xf4, 0xad, 0xd5,
+	0xb9, 0xfa, 0xa3, 0xc4, 0x7b, 0xb3, 0x7e, 0x0c, 0x86, 0x73, 0x42, 0x3e, 0x07, 0x93, 0x79, 0xf7,
+	0x14, 0x49, 0x15, 0xee, 0xa4, 0x56, 0xa1, 0x83, 0x75, 0x35, 0xea, 0xbb, 0xf7, 0x23, 0x92, 0xaa,
+	0x68, 0xe7, 0x47, 0xa1, 0x13, 0x19, 0x7f, 0x7d, 0x6c, 0x3e, 0xbd, 0xfd, 0x09, 0x00, 0x00, 0xff,
+	0xff, 0x75, 0xae, 0xb1, 0x4e, 0xb8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/budget_delivery_method.pb.go b/googleapis/ads/googleads/v0/enums/budget_delivery_method.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c1cc4616ce5939f0aa792f6c0a2d4ad5f5f3285e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/budget_delivery_method.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/budget_delivery_method.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible delivery methods of a Budget.
+type BudgetDeliveryMethodEnum_BudgetDeliveryMethod int32
+
+const (
+	// Not specified.
+	BudgetDeliveryMethodEnum_UNSPECIFIED BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 0
+	// Used for return value only. Represents value unknown in this version.
+	BudgetDeliveryMethodEnum_UNKNOWN BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 1
+	// The budget server will throttle serving evenly across
+	// the entire time period.
+	BudgetDeliveryMethodEnum_STANDARD BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 2
+	// The budget server will not throttle serving,
+	// and ads will serve as fast as possible.
+	BudgetDeliveryMethodEnum_ACCELERATED BudgetDeliveryMethodEnum_BudgetDeliveryMethod = 3
+)
+
+var BudgetDeliveryMethodEnum_BudgetDeliveryMethod_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "STANDARD",
+	3: "ACCELERATED",
+}
+var BudgetDeliveryMethodEnum_BudgetDeliveryMethod_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"STANDARD":    2,
+	"ACCELERATED": 3,
+}
+
+func (x BudgetDeliveryMethodEnum_BudgetDeliveryMethod) String() string {
+	return proto.EnumName(BudgetDeliveryMethodEnum_BudgetDeliveryMethod_name, int32(x))
+}
+func (BudgetDeliveryMethodEnum_BudgetDeliveryMethod) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_budget_delivery_method_20c0b5dc6c2cec81, []int{0, 0}
+}
+
+// Message describing Budget delivery methods. A delivery method determines the
+// rate at which the Budget is spent.
+type BudgetDeliveryMethodEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BudgetDeliveryMethodEnum) Reset()         { *m = BudgetDeliveryMethodEnum{} }
+func (m *BudgetDeliveryMethodEnum) String() string { return proto.CompactTextString(m) }
+func (*BudgetDeliveryMethodEnum) ProtoMessage()    {}
+func (*BudgetDeliveryMethodEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_budget_delivery_method_20c0b5dc6c2cec81, []int{0}
+}
+func (m *BudgetDeliveryMethodEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BudgetDeliveryMethodEnum.Unmarshal(m, b)
+}
+func (m *BudgetDeliveryMethodEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BudgetDeliveryMethodEnum.Marshal(b, m, deterministic)
+}
+func (dst *BudgetDeliveryMethodEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BudgetDeliveryMethodEnum.Merge(dst, src)
+}
+func (m *BudgetDeliveryMethodEnum) XXX_Size() int {
+	return xxx_messageInfo_BudgetDeliveryMethodEnum.Size(m)
+}
+func (m *BudgetDeliveryMethodEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BudgetDeliveryMethodEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BudgetDeliveryMethodEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BudgetDeliveryMethodEnum)(nil), "google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod", BudgetDeliveryMethodEnum_BudgetDeliveryMethod_name, BudgetDeliveryMethodEnum_BudgetDeliveryMethod_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/budget_delivery_method.proto", fileDescriptor_budget_delivery_method_20c0b5dc6c2cec81)
+}
+
+var fileDescriptor_budget_delivery_method_20c0b5dc6c2cec81 = []byte{
+	// 276 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xa4, 0xd2, 0x94, 0xf4, 0xd4, 0x92, 0xf8, 0x94, 0xd4, 0x9c, 0xcc, 0xb2,
+	0xd4, 0xa2, 0xca, 0xf8, 0xdc, 0xd4, 0x92, 0x8c, 0xfc, 0x14, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c,
+	0x21, 0x59, 0x88, 0x06, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x5e, 0xbd, 0x32, 0x03, 0x3d, 0xb0,
+	0x5e, 0xa5, 0x7c, 0x2e, 0x09, 0x27, 0xb0, 0x76, 0x17, 0xa8, 0x6e, 0x5f, 0xb0, 0x66, 0xd7, 0xbc,
+	0xd2, 0x5c, 0xa5, 0x60, 0x2e, 0x11, 0x6c, 0x72, 0x42, 0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1, 0x01,
+	0xae, 0xce, 0x9e, 0x6e, 0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e, 0xde,
+	0x7e, 0xfe, 0xe1, 0x7e, 0x02, 0x8c, 0x42, 0x3c, 0x5c, 0x1c, 0xc1, 0x21, 0x8e, 0x7e, 0x2e, 0x8e,
+	0x41, 0x2e, 0x02, 0x4c, 0x20, 0xb5, 0x8e, 0xce, 0xce, 0xae, 0x3e, 0xae, 0x41, 0x8e, 0x21, 0xae,
+	0x2e, 0x02, 0xcc, 0x4e, 0xa7, 0x18, 0xb9, 0x14, 0x93, 0xf3, 0x73, 0xf5, 0xf0, 0x3a, 0xcb, 0x49,
+	0x12, 0x9b, 0xc5, 0x01, 0x20, 0x0f, 0x05, 0x30, 0x46, 0x39, 0x41, 0xf5, 0xa6, 0xe7, 0xe7, 0x24,
+	0xe6, 0xa5, 0xeb, 0xe5, 0x17, 0xa5, 0xeb, 0xa7, 0xa7, 0xe6, 0x81, 0xbd, 0x0b, 0x0b, 0x9e, 0x82,
+	0xcc, 0x62, 0x1c, 0xa1, 0x65, 0x0d, 0x26, 0x17, 0x31, 0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x92,
+	0x75, 0x87, 0x18, 0xe5, 0x98, 0x52, 0xac, 0x07, 0x61, 0x82, 0x58, 0x61, 0x06, 0x7a, 0xa0, 0x00,
+	0x28, 0x3e, 0x05, 0x93, 0x8f, 0x71, 0x4c, 0x29, 0x8e, 0x81, 0xcb, 0xc7, 0x84, 0x19, 0xc4, 0x80,
+	0xe5, 0x93, 0xd8, 0xc0, 0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x60, 0x4f, 0x2e, 0xcb,
+	0xa1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/budget_status.pb.go b/googleapis/ads/googleads/v0/enums/budget_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..92029d50aa93e59daf994e44cb5888b6fed78e5d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/budget_status.pb.go
@@ -0,0 +1,113 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/budget_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a Budget.
+type BudgetStatusEnum_BudgetStatus int32
+
+const (
+	// Not specified.
+	BudgetStatusEnum_UNSPECIFIED BudgetStatusEnum_BudgetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	BudgetStatusEnum_UNKNOWN BudgetStatusEnum_BudgetStatus = 1
+	// Budget is enabled.
+	BudgetStatusEnum_ENABLED BudgetStatusEnum_BudgetStatus = 2
+	// Budget is removed.
+	BudgetStatusEnum_REMOVED BudgetStatusEnum_BudgetStatus = 3
+)
+
+var BudgetStatusEnum_BudgetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+var BudgetStatusEnum_BudgetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x BudgetStatusEnum_BudgetStatus) String() string {
+	return proto.EnumName(BudgetStatusEnum_BudgetStatus_name, int32(x))
+}
+func (BudgetStatusEnum_BudgetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_budget_status_b79aada4454e9811, []int{0, 0}
+}
+
+// Message describing a Budget status
+type BudgetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BudgetStatusEnum) Reset()         { *m = BudgetStatusEnum{} }
+func (m *BudgetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*BudgetStatusEnum) ProtoMessage()    {}
+func (*BudgetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_budget_status_b79aada4454e9811, []int{0}
+}
+func (m *BudgetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BudgetStatusEnum.Unmarshal(m, b)
+}
+func (m *BudgetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BudgetStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *BudgetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BudgetStatusEnum.Merge(dst, src)
+}
+func (m *BudgetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_BudgetStatusEnum.Size(m)
+}
+func (m *BudgetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BudgetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BudgetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BudgetStatusEnum)(nil), "google.ads.googleads.v0.enums.BudgetStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.BudgetStatusEnum_BudgetStatus", BudgetStatusEnum_BudgetStatus_name, BudgetStatusEnum_BudgetStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/budget_status.proto", fileDescriptor_budget_status_b79aada4454e9811)
+}
+
+var fileDescriptor_budget_status_b79aada4454e9811 = []byte{
+	// 256 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4c, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xa4, 0xd2, 0x94, 0xf4, 0xd4, 0x92, 0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2,
+	0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x3a, 0xbd, 0xc4, 0x94, 0x62, 0x3d,
+	0xb8, 0x16, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x16, 0xa5, 0x28, 0x2e, 0x01, 0x27, 0xb0, 0xae, 0x60,
+	0xb0, 0x26, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x37, 0x2e, 0x1e, 0x64, 0x31, 0x21, 0x7e, 0x2e, 0xee,
+	0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e,
+	0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x10, 0xc7, 0xd5, 0xcf, 0xd1, 0xc9,
+	0xc7, 0xd5, 0x45, 0x80, 0x09, 0xc4, 0x09, 0x72, 0xf5, 0xf5, 0x0f, 0x73, 0x75, 0x11, 0x60, 0x76,
+	0x3a, 0xc4, 0xc8, 0xa5, 0x98, 0x9c, 0x9f, 0xab, 0x87, 0xd7, 0x05, 0x4e, 0x82, 0xc8, 0x76, 0x05,
+	0x80, 0xdc, 0x1c, 0xc0, 0x18, 0xe5, 0x04, 0xd5, 0x93, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97,
+	0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0xf6, 0x11, 0xcc, 0xe3, 0x05, 0x99, 0xc5, 0x38, 0xc2,
+	0xc1, 0x1a, 0x4c, 0x2e, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24, 0xeb, 0x0e, 0x31, 0xca,
+	0x31, 0xa5, 0x58, 0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x40, 0x7e, 0x2d, 0x3e, 0x05, 0x93,
+	0x8f, 0x71, 0x4c, 0x29, 0x8e, 0x81, 0xcb, 0xc7, 0x84, 0x19, 0xc4, 0x80, 0xe5, 0x93, 0xd8, 0xc0,
+	0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xbd, 0x23, 0x9e, 0x7b, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/call_conversion_reporting_state.pb.go b/googleapis/ads/googleads/v0/enums/call_conversion_reporting_state.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..de6dddcc9b9068940057130913752a57bffcd1bb
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/call_conversion_reporting_state.pb.go
@@ -0,0 +1,125 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/call_conversion_reporting_state.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible data types for a call conversion action state.
+type CallConversionReportingStateEnum_CallConversionReportingState int32
+
+const (
+	// Not specified.
+	CallConversionReportingStateEnum_UNSPECIFIED CallConversionReportingStateEnum_CallConversionReportingState = 0
+	// Used for return value only. Represents value unknown in this version.
+	CallConversionReportingStateEnum_UNKNOWN CallConversionReportingStateEnum_CallConversionReportingState = 1
+	// Call conversion action is disabled.
+	CallConversionReportingStateEnum_DISABLED CallConversionReportingStateEnum_CallConversionReportingState = 2
+	// Call conversion action will use call conversion type set at the
+	// account level.
+	CallConversionReportingStateEnum_USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION CallConversionReportingStateEnum_CallConversionReportingState = 3
+	// Call conversion action will use call conversion type set at the resource
+	// (call only ads/call extensions) level.
+	CallConversionReportingStateEnum_USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION CallConversionReportingStateEnum_CallConversionReportingState = 4
+)
+
+var CallConversionReportingStateEnum_CallConversionReportingState_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DISABLED",
+	3: "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION",
+	4: "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION",
+}
+var CallConversionReportingStateEnum_CallConversionReportingState_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DISABLED":    2,
+	"USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION":  3,
+	"USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION": 4,
+}
+
+func (x CallConversionReportingStateEnum_CallConversionReportingState) String() string {
+	return proto.EnumName(CallConversionReportingStateEnum_CallConversionReportingState_name, int32(x))
+}
+func (CallConversionReportingStateEnum_CallConversionReportingState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_call_conversion_reporting_state_7cdcaa6987dc2f7b, []int{0, 0}
+}
+
+// Container for enum describing possible data types for call conversion
+// reporting state.
+type CallConversionReportingStateEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallConversionReportingStateEnum) Reset()         { *m = CallConversionReportingStateEnum{} }
+func (m *CallConversionReportingStateEnum) String() string { return proto.CompactTextString(m) }
+func (*CallConversionReportingStateEnum) ProtoMessage()    {}
+func (*CallConversionReportingStateEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_call_conversion_reporting_state_7cdcaa6987dc2f7b, []int{0}
+}
+func (m *CallConversionReportingStateEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallConversionReportingStateEnum.Unmarshal(m, b)
+}
+func (m *CallConversionReportingStateEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallConversionReportingStateEnum.Marshal(b, m, deterministic)
+}
+func (dst *CallConversionReportingStateEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallConversionReportingStateEnum.Merge(dst, src)
+}
+func (m *CallConversionReportingStateEnum) XXX_Size() int {
+	return xxx_messageInfo_CallConversionReportingStateEnum.Size(m)
+}
+func (m *CallConversionReportingStateEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallConversionReportingStateEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallConversionReportingStateEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CallConversionReportingStateEnum)(nil), "google.ads.googleads.v0.enums.CallConversionReportingStateEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CallConversionReportingStateEnum_CallConversionReportingState", CallConversionReportingStateEnum_CallConversionReportingState_name, CallConversionReportingStateEnum_CallConversionReportingState_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/call_conversion_reporting_state.proto", fileDescriptor_call_conversion_reporting_state_7cdcaa6987dc2f7b)
+}
+
+var fileDescriptor_call_conversion_reporting_state_7cdcaa6987dc2f7b = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4b, 0xfb, 0x30,
+	0x18, 0xc6, 0xff, 0xdd, 0xfe, 0xa8, 0x64, 0x82, 0xa5, 0x67, 0x07, 0x6e, 0x27, 0x05, 0x4d, 0x0b,
+	0x1e, 0x3d, 0xa5, 0x59, 0x1c, 0xc5, 0x92, 0x8e, 0x76, 0xad, 0x20, 0x85, 0x50, 0xd7, 0x12, 0x06,
+	0x59, 0x32, 0x9a, 0x6e, 0x1f, 0xc8, 0x8b, 0xe0, 0x47, 0x11, 0x4f, 0x7e, 0x22, 0x49, 0xeb, 0x76,
+	0xb3, 0x97, 0xf0, 0xc0, 0xf3, 0xe4, 0xf7, 0xf2, 0x3e, 0x2f, 0xc0, 0x5c, 0x29, 0x2e, 0x2a, 0xb7,
+	0x28, 0xb5, 0xdb, 0x49, 0xa3, 0xf6, 0x9e, 0x5b, 0xc9, 0xdd, 0x46, 0xbb, 0xab, 0x42, 0x08, 0xb6,
+	0x52, 0x72, 0x5f, 0xd5, 0x7a, 0xad, 0x24, 0xab, 0xab, 0xad, 0xaa, 0x9b, 0xb5, 0xe4, 0x4c, 0x37,
+	0x45, 0x53, 0xc1, 0x6d, 0xad, 0x1a, 0xe5, 0x8c, 0xbb, 0x9f, 0xb0, 0x28, 0x35, 0x3c, 0x42, 0xe0,
+	0xde, 0x83, 0x2d, 0x64, 0xfa, 0x65, 0x81, 0x2b, 0x5c, 0x08, 0x81, 0x8f, 0x9c, 0xf8, 0x80, 0x49,
+	0x0c, 0x85, 0xc8, 0xdd, 0x66, 0xfa, 0x6e, 0x81, 0xcb, 0xbe, 0x90, 0x73, 0x01, 0x46, 0x29, 0x4d,
+	0x16, 0x04, 0x07, 0x8f, 0x01, 0x99, 0xd9, 0xff, 0x9c, 0x11, 0x38, 0x4d, 0xe9, 0x13, 0x8d, 0x9e,
+	0xa9, 0x6d, 0x39, 0xe7, 0xe0, 0x6c, 0x16, 0x24, 0xc8, 0x0f, 0xc9, 0xcc, 0x1e, 0x38, 0xb7, 0xe0,
+	0x3a, 0x4d, 0x08, 0x43, 0x18, 0x47, 0x29, 0x5d, 0xb2, 0x90, 0x64, 0x24, 0x64, 0x18, 0x85, 0x21,
+	0xc3, 0x11, 0xcd, 0x48, 0x9c, 0x04, 0x11, 0x65, 0x08, 0x2f, 0x83, 0x88, 0xda, 0x43, 0xe7, 0x0e,
+	0xdc, 0x98, 0x74, 0x4c, 0x92, 0x28, 0x8d, 0x31, 0xe9, 0x8f, 0xff, 0xf7, 0xbf, 0x2d, 0x30, 0x59,
+	0xa9, 0x0d, 0xec, 0x5d, 0xda, 0x9f, 0xf4, 0x2d, 0xb3, 0x30, 0xb5, 0x2d, 0xac, 0x17, 0xff, 0x97,
+	0xc1, 0x95, 0x28, 0x24, 0x87, 0xaa, 0xe6, 0x2e, 0xaf, 0x64, 0x5b, 0xea, 0xe1, 0x1a, 0xdb, 0xb5,
+	0xfe, 0xe3, 0x38, 0x0f, 0xed, 0xfb, 0x36, 0x18, 0xce, 0x11, 0xfa, 0x18, 0x8c, 0xe7, 0x1d, 0x0a,
+	0x95, 0x1a, 0x76, 0xd2, 0xa8, 0xcc, 0x83, 0xa6, 0x5d, 0xfd, 0x79, 0xf0, 0x73, 0x54, 0xea, 0xfc,
+	0xe8, 0xe7, 0x99, 0x97, 0xb7, 0xfe, 0xeb, 0x49, 0x3b, 0xf4, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff,
+	0xc1, 0xfc, 0x20, 0x51, 0x10, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/call_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/call_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a64f4e3402006a61c14b0ebc2857821b03e9ee6d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/call_placeholder_field.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/call_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Call placeholder fields.
+type CallPlaceholderFieldEnum_CallPlaceholderField int32
+
+const (
+	// Not specified.
+	CallPlaceholderFieldEnum_UNSPECIFIED CallPlaceholderFieldEnum_CallPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	CallPlaceholderFieldEnum_UNKNOWN CallPlaceholderFieldEnum_CallPlaceholderField = 1
+	// Data Type: STRING. The advertiser's phone number to append to the ad.
+	CallPlaceholderFieldEnum_PHONE_NUMBER CallPlaceholderFieldEnum_CallPlaceholderField = 2
+	// Data Type: STRING. Uppercase two-letter country code of the advertiser's
+	// phone number.
+	CallPlaceholderFieldEnum_COUNTRY_CODE CallPlaceholderFieldEnum_CallPlaceholderField = 3
+	// Data Type: BOOLEAN. Indicates whether call tracking is enabled. Default:
+	// true.
+	CallPlaceholderFieldEnum_TRACKED CallPlaceholderFieldEnum_CallPlaceholderField = 4
+	// Data Type: INT64. The ID of an AdCallMetricsConversion object. This
+	// object contains the phoneCallDurationfield which is the minimum duration
+	// (in seconds) of a call to be considered a conversion.
+	CallPlaceholderFieldEnum_CONVERSION_TYPE_ID CallPlaceholderFieldEnum_CallPlaceholderField = 5
+	// Data Type: STRING. Indicates whether this call extension uses its own
+	// call conversion setting or follows the account level setting.
+	// Valid values are: USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION and
+	// USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION.
+	CallPlaceholderFieldEnum_CONVERSION_REPORTING_STATE CallPlaceholderFieldEnum_CallPlaceholderField = 6
+)
+
+var CallPlaceholderFieldEnum_CallPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PHONE_NUMBER",
+	3: "COUNTRY_CODE",
+	4: "TRACKED",
+	5: "CONVERSION_TYPE_ID",
+	6: "CONVERSION_REPORTING_STATE",
+}
+var CallPlaceholderFieldEnum_CallPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"PHONE_NUMBER":               2,
+	"COUNTRY_CODE":               3,
+	"TRACKED":                    4,
+	"CONVERSION_TYPE_ID":         5,
+	"CONVERSION_REPORTING_STATE": 6,
+}
+
+func (x CallPlaceholderFieldEnum_CallPlaceholderField) String() string {
+	return proto.EnumName(CallPlaceholderFieldEnum_CallPlaceholderField_name, int32(x))
+}
+func (CallPlaceholderFieldEnum_CallPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_call_placeholder_field_1efb02a4392b5d2d, []int{0, 0}
+}
+
+// Values for Call placeholder fields.
+type CallPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallPlaceholderFieldEnum) Reset()         { *m = CallPlaceholderFieldEnum{} }
+func (m *CallPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*CallPlaceholderFieldEnum) ProtoMessage()    {}
+func (*CallPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_call_placeholder_field_1efb02a4392b5d2d, []int{0}
+}
+func (m *CallPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *CallPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *CallPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *CallPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_CallPlaceholderFieldEnum.Size(m)
+}
+func (m *CallPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CallPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.CallPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CallPlaceholderFieldEnum_CallPlaceholderField", CallPlaceholderFieldEnum_CallPlaceholderField_name, CallPlaceholderFieldEnum_CallPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/call_placeholder_field.proto", fileDescriptor_call_placeholder_field_1efb02a4392b5d2d)
+}
+
+var fileDescriptor_call_placeholder_field_1efb02a4392b5d2d = []byte{
+	// 332 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x14, 0xc6, 0xed, 0xa6, 0x13, 0x32, 0xc1, 0x50, 0x44, 0x54, 0x98, 0xe0, 0x1e, 0x20, 0x2d, 0x78,
+	0xa7, 0x57, 0xfd, 0x93, 0xcd, 0x32, 0x4c, 0x42, 0xd7, 0x4e, 0x26, 0x85, 0x50, 0xd7, 0x5a, 0x07,
+	0x59, 0x33, 0x16, 0xb7, 0xb7, 0xf1, 0xc6, 0x4b, 0x1f, 0xc1, 0x47, 0xd8, 0x53, 0x49, 0x5a, 0x37,
+	0xbd, 0x98, 0xde, 0x84, 0x8f, 0xf3, 0xf1, 0xcb, 0xe1, 0xfc, 0xc0, 0x4d, 0x21, 0x65, 0x21, 0x72,
+	0x2b, 0xcd, 0x94, 0x55, 0x47, 0x9d, 0x56, 0xb6, 0x95, 0x97, 0xcb, 0x99, 0xb2, 0x26, 0xa9, 0x10,
+	0x7c, 0x2e, 0xd2, 0x49, 0xfe, 0x22, 0x45, 0x96, 0x2f, 0xf8, 0xf3, 0x34, 0x17, 0x19, 0x9a, 0x2f,
+	0xe4, 0xab, 0x34, 0x3b, 0x35, 0x80, 0xd2, 0x4c, 0xa1, 0x2d, 0x8b, 0x56, 0x36, 0xaa, 0xd8, 0xee,
+	0xa7, 0x01, 0xce, 0xbc, 0x54, 0x08, 0xf6, 0x83, 0xf7, 0x34, 0x8d, 0xcb, 0xe5, 0xac, 0xfb, 0x66,
+	0x80, 0x93, 0x5d, 0xa5, 0x79, 0x0c, 0xda, 0x31, 0x19, 0x32, 0xec, 0x05, 0xbd, 0x00, 0xfb, 0x70,
+	0xcf, 0x6c, 0x83, 0xc3, 0x98, 0x0c, 0x08, 0x7d, 0x20, 0xd0, 0x30, 0x21, 0x38, 0x62, 0x77, 0x94,
+	0x60, 0x4e, 0xe2, 0x7b, 0x17, 0x87, 0xb0, 0xa1, 0x27, 0x1e, 0x8d, 0x49, 0x14, 0x8e, 0xb9, 0x47,
+	0x7d, 0x0c, 0x9b, 0x1a, 0x88, 0x42, 0xc7, 0x1b, 0x60, 0x1f, 0xee, 0x9b, 0xa7, 0xc0, 0xf4, 0x28,
+	0x19, 0xe1, 0x70, 0x18, 0x50, 0xc2, 0xa3, 0x31, 0xc3, 0x3c, 0xf0, 0xe1, 0x81, 0x79, 0x09, 0x2e,
+	0x7e, 0xcd, 0x43, 0xcc, 0x68, 0x18, 0x05, 0xa4, 0xcf, 0x87, 0x91, 0x13, 0x61, 0xd8, 0x72, 0xd7,
+	0x06, 0xb8, 0x9a, 0xc8, 0x19, 0xfa, 0xf7, 0x44, 0xf7, 0x7c, 0xd7, 0x09, 0x4c, 0xcb, 0x61, 0xc6,
+	0xa3, 0xfb, 0xcd, 0x16, 0x52, 0xa4, 0x65, 0x81, 0xe4, 0xa2, 0xb0, 0x8a, 0xbc, 0xac, 0xd4, 0x6d,
+	0x54, 0xcf, 0xa7, 0xea, 0x0f, 0xf3, 0xb7, 0xd5, 0xfb, 0xde, 0x68, 0xf6, 0x1d, 0xe7, 0xa3, 0xd1,
+	0xe9, 0xd7, 0x5f, 0x39, 0x99, 0x42, 0x75, 0xd4, 0x69, 0x64, 0x23, 0xed, 0x52, 0xad, 0x37, 0x7d,
+	0xe2, 0x64, 0x2a, 0xd9, 0xf6, 0xc9, 0xc8, 0x4e, 0xaa, 0xfe, 0xa9, 0x55, 0x2d, 0xbd, 0xfe, 0x0a,
+	0x00, 0x00, 0xff, 0xff, 0xfb, 0xf5, 0x10, 0x42, 0xed, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/callout_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/callout_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a2efc22568d3252af34667cda3a5830b18a4d5f8
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/callout_placeholder_field.pb.go
@@ -0,0 +1,110 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/callout_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Callout placeholder fields.
+type CalloutPlaceholderFieldEnum_CalloutPlaceholderField int32
+
+const (
+	// Not specified.
+	CalloutPlaceholderFieldEnum_UNSPECIFIED CalloutPlaceholderFieldEnum_CalloutPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	CalloutPlaceholderFieldEnum_UNKNOWN CalloutPlaceholderFieldEnum_CalloutPlaceholderField = 1
+	// Data Type: STRING. Callout text.
+	CalloutPlaceholderFieldEnum_CALLOUT_TEXT CalloutPlaceholderFieldEnum_CalloutPlaceholderField = 2
+)
+
+var CalloutPlaceholderFieldEnum_CalloutPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CALLOUT_TEXT",
+}
+var CalloutPlaceholderFieldEnum_CalloutPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"CALLOUT_TEXT": 2,
+}
+
+func (x CalloutPlaceholderFieldEnum_CalloutPlaceholderField) String() string {
+	return proto.EnumName(CalloutPlaceholderFieldEnum_CalloutPlaceholderField_name, int32(x))
+}
+func (CalloutPlaceholderFieldEnum_CalloutPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_callout_placeholder_field_4df33348e5fa305d, []int{0, 0}
+}
+
+// Values for Callout placeholder fields.
+type CalloutPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CalloutPlaceholderFieldEnum) Reset()         { *m = CalloutPlaceholderFieldEnum{} }
+func (m *CalloutPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*CalloutPlaceholderFieldEnum) ProtoMessage()    {}
+func (*CalloutPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_callout_placeholder_field_4df33348e5fa305d, []int{0}
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CalloutPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CalloutPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *CalloutPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CalloutPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_CalloutPlaceholderFieldEnum.Size(m)
+}
+func (m *CalloutPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CalloutPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CalloutPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CalloutPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.CalloutPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField", CalloutPlaceholderFieldEnum_CalloutPlaceholderField_name, CalloutPlaceholderFieldEnum_CalloutPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/callout_placeholder_field.proto", fileDescriptor_callout_placeholder_field_4df33348e5fa305d)
+}
+
+var fileDescriptor_callout_placeholder_field_4df33348e5fa305d = []byte{
+	// 268 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe4, 0xc4, 0x9c, 0x9c, 0xfc, 0xd2, 0x92, 0xf8, 0x82, 0x9c, 0xc4, 0xe4,
+	0xd4, 0x8c, 0xfc, 0x9c, 0x94, 0xd4, 0xa2, 0xf8, 0xb4, 0xcc, 0xd4, 0x9c, 0x14, 0xbd, 0x82, 0xa2,
+	0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x1e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x76, 0xbd, 0x32,
+	0x03, 0x3d, 0xb0, 0x76, 0xa5, 0x0c, 0x2e, 0x69, 0x67, 0x88, 0x09, 0x01, 0x08, 0x03, 0xdc, 0x40,
+	0xfa, 0x5d, 0xf3, 0x4a, 0x73, 0x95, 0x3c, 0xb9, 0xc4, 0x71, 0x48, 0x0b, 0xf1, 0x73, 0x71, 0x87,
+	0xfa, 0x05, 0x07, 0xb8, 0x3a, 0x7b, 0xba, 0x79, 0xba, 0xba, 0x08, 0x30, 0x08, 0x71, 0x73, 0xb1,
+	0x87, 0xfa, 0x79, 0xfb, 0xf9, 0x87, 0xfb, 0x09, 0x30, 0x0a, 0x09, 0x70, 0xf1, 0x38, 0x3b, 0xfa,
+	0xf8, 0xf8, 0x87, 0x86, 0xc4, 0x87, 0xb8, 0x46, 0x84, 0x08, 0x30, 0x39, 0x9d, 0x65, 0xe4, 0x52,
+	0x4c, 0xce, 0xcf, 0xd5, 0xc3, 0xeb, 0x1e, 0x27, 0x19, 0x1c, 0xd6, 0x05, 0x80, 0x3c, 0x13, 0xc0,
+	0x18, 0xe5, 0x04, 0xd5, 0x9e, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f,
+	0x9e, 0x9a, 0x07, 0xf6, 0x2a, 0x2c, 0x74, 0x0a, 0x32, 0x8b, 0x71, 0x04, 0x96, 0x35, 0x98, 0x5c,
+	0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xd6, 0x1d, 0x62, 0x94, 0x63, 0x4a, 0xb1, 0x1e,
+	0x84, 0x09, 0x62, 0x85, 0x19, 0xe8, 0x81, 0x7c, 0x5e, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98, 0x52,
+	0x1c, 0x03, 0x97, 0x8f, 0x09, 0x33, 0x88, 0x01, 0xcb, 0x27, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04,
+	0x00, 0x00, 0xff, 0xff, 0xff, 0x10, 0x36, 0x00, 0xa0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/campaign_group_status.pb.go b/googleapis/ads/googleads/v0/enums/campaign_group_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..91682270402c10ee6dda0800c0a73b0d7ee1c47d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/campaign_group_status.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/campaign_group_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a CampaignGroup.
+type CampaignGroupStatusEnum_CampaignGroupStatus int32
+
+const (
+	// Not specified.
+	CampaignGroupStatusEnum_UNSPECIFIED CampaignGroupStatusEnum_CampaignGroupStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignGroupStatusEnum_UNKNOWN CampaignGroupStatusEnum_CampaignGroupStatus = 1
+	// Campaign group is currently serving ads depending on budget information.
+	CampaignGroupStatusEnum_ENABLED CampaignGroupStatusEnum_CampaignGroupStatus = 2
+	// Campaign group has been removed.
+	CampaignGroupStatusEnum_REMOVED CampaignGroupStatusEnum_CampaignGroupStatus = 4
+)
+
+var CampaignGroupStatusEnum_CampaignGroupStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	4: "REMOVED",
+}
+var CampaignGroupStatusEnum_CampaignGroupStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     4,
+}
+
+func (x CampaignGroupStatusEnum_CampaignGroupStatus) String() string {
+	return proto.EnumName(CampaignGroupStatusEnum_CampaignGroupStatus_name, int32(x))
+}
+func (CampaignGroupStatusEnum_CampaignGroupStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_status_0530aace33372d44, []int{0, 0}
+}
+
+// Message describing CampaignGroup statuses.
+type CampaignGroupStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignGroupStatusEnum) Reset()         { *m = CampaignGroupStatusEnum{} }
+func (m *CampaignGroupStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignGroupStatusEnum) ProtoMessage()    {}
+func (*CampaignGroupStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_status_0530aace33372d44, []int{0}
+}
+func (m *CampaignGroupStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignGroupStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignGroupStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignGroupStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignGroupStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignGroupStatusEnum.Merge(dst, src)
+}
+func (m *CampaignGroupStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignGroupStatusEnum.Size(m)
+}
+func (m *CampaignGroupStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignGroupStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignGroupStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignGroupStatusEnum)(nil), "google.ads.googleads.v0.enums.CampaignGroupStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CampaignGroupStatusEnum_CampaignGroupStatus", CampaignGroupStatusEnum_CampaignGroupStatus_name, CampaignGroupStatusEnum_CampaignGroupStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/campaign_group_status.proto", fileDescriptor_campaign_group_status_0530aace33372d44)
+}
+
+var fileDescriptor_campaign_group_status_0530aace33372d44 = []byte{
+	// 267 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4c, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe4, 0xc4, 0xdc, 0x82, 0xc4, 0xcc, 0xf4, 0xbc, 0xf8, 0xf4, 0xa2, 0xfc,
+	0xd2, 0x82, 0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21,
+	0x59, 0x88, 0x7a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x56, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x56,
+	0xa5, 0x0c, 0x2e, 0x71, 0x67, 0xa8, 0x6e, 0x77, 0x90, 0xe6, 0x60, 0xb0, 0x5e, 0xd7, 0xbc, 0xd2,
+	0x5c, 0x25, 0x5f, 0x2e, 0x61, 0x2c, 0x52, 0x42, 0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1, 0x01, 0xae,
+	0xce, 0x9e, 0x6e, 0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e, 0xde, 0x7e,
+	0xfe, 0xe1, 0x7e, 0x02, 0x8c, 0x20, 0x8e, 0xab, 0x9f, 0xa3, 0x93, 0x8f, 0xab, 0x8b, 0x00, 0x13,
+	0x88, 0x13, 0xe4, 0xea, 0xeb, 0x1f, 0xe6, 0xea, 0x22, 0xc0, 0xe2, 0x74, 0x92, 0x91, 0x4b, 0x31,
+	0x39, 0x3f, 0x57, 0x0f, 0xaf, 0x7b, 0x9c, 0x24, 0xb0, 0x58, 0x19, 0x00, 0xf2, 0x48, 0x00, 0x63,
+	0x94, 0x13, 0x54, 0x6b, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a,
+	0x6a, 0x1e, 0xd8, 0x9b, 0xb0, 0x50, 0x29, 0xc8, 0x2c, 0xc6, 0x11, 0x48, 0xd6, 0x60, 0x72, 0x11,
+	0x13, 0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x59, 0x77, 0x88, 0x51, 0x8e, 0x29, 0xc5, 0x7a, 0x10,
+	0x26, 0x88, 0x15, 0x66, 0xa0, 0x07, 0xf2, 0x79, 0xf1, 0x29, 0x98, 0x7c, 0x8c, 0x63, 0x4a, 0x71,
+	0x0c, 0x5c, 0x3e, 0x26, 0xcc, 0x20, 0x06, 0x2c, 0x9f, 0xc4, 0x06, 0xb6, 0xd4, 0x18, 0x10, 0x00,
+	0x00, 0xff, 0xff, 0x2f, 0xcf, 0x77, 0xdc, 0x98, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/campaign_serving_status.pb.go b/googleapis/ads/googleads/v0/enums/campaign_serving_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f131fd682b838534fe97cbc17c8078df1cff9f46
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/campaign_serving_status.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/campaign_serving_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible serving statuses of a campaign.
+type CampaignServingStatusEnum_CampaignServingStatus int32
+
+const (
+	// No value has been specified.
+	CampaignServingStatusEnum_UNSPECIFIED CampaignServingStatusEnum_CampaignServingStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	CampaignServingStatusEnum_UNKNOWN CampaignServingStatusEnum_CampaignServingStatus = 1
+	// Serving.
+	CampaignServingStatusEnum_SERVING CampaignServingStatusEnum_CampaignServingStatus = 2
+	// None.
+	CampaignServingStatusEnum_NONE CampaignServingStatusEnum_CampaignServingStatus = 3
+	// Ended.
+	CampaignServingStatusEnum_ENDED CampaignServingStatusEnum_CampaignServingStatus = 4
+	// Pending.
+	CampaignServingStatusEnum_PENDING CampaignServingStatusEnum_CampaignServingStatus = 5
+	// Suspended.
+	CampaignServingStatusEnum_SUSPENDED CampaignServingStatusEnum_CampaignServingStatus = 6
+)
+
+var CampaignServingStatusEnum_CampaignServingStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SERVING",
+	3: "NONE",
+	4: "ENDED",
+	5: "PENDING",
+	6: "SUSPENDED",
+}
+var CampaignServingStatusEnum_CampaignServingStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"SERVING":     2,
+	"NONE":        3,
+	"ENDED":       4,
+	"PENDING":     5,
+	"SUSPENDED":   6,
+}
+
+func (x CampaignServingStatusEnum_CampaignServingStatus) String() string {
+	return proto.EnumName(CampaignServingStatusEnum_CampaignServingStatus_name, int32(x))
+}
+func (CampaignServingStatusEnum_CampaignServingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_serving_status_73372c2f9572d776, []int{0, 0}
+}
+
+// Message describing Campaign serving statuses.
+type CampaignServingStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignServingStatusEnum) Reset()         { *m = CampaignServingStatusEnum{} }
+func (m *CampaignServingStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignServingStatusEnum) ProtoMessage()    {}
+func (*CampaignServingStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_serving_status_73372c2f9572d776, []int{0}
+}
+func (m *CampaignServingStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignServingStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignServingStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignServingStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignServingStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignServingStatusEnum.Merge(dst, src)
+}
+func (m *CampaignServingStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignServingStatusEnum.Size(m)
+}
+func (m *CampaignServingStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignServingStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignServingStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignServingStatusEnum)(nil), "google.ads.googleads.v0.enums.CampaignServingStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CampaignServingStatusEnum_CampaignServingStatus", CampaignServingStatusEnum_CampaignServingStatus_name, CampaignServingStatusEnum_CampaignServingStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/campaign_serving_status.proto", fileDescriptor_campaign_serving_status_73372c2f9572d776)
+}
+
+var fileDescriptor_campaign_serving_status_73372c2f9572d776 = []byte{
+	// 297 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x18, 0xc5, 0xed, 0xfe, 0xe9, 0x32, 0xc4, 0x12, 0xf0, 0x42, 0x61, 0x17, 0xee, 0x01, 0xd2, 0x82,
+	0x97, 0xbb, 0xea, 0xd6, 0x38, 0x86, 0x90, 0x15, 0x43, 0x2b, 0x48, 0x61, 0xc4, 0xb5, 0x84, 0xc2,
+	0x9a, 0x94, 0xa6, 0xed, 0x73, 0xf8, 0x0c, 0x5e, 0xfa, 0x28, 0xfa, 0x52, 0x92, 0x64, 0xdb, 0xd5,
+	0xf4, 0x26, 0x9c, 0x70, 0xbe, 0xdf, 0x97, 0x93, 0x03, 0xe6, 0x5c, 0x4a, 0xbe, 0xcf, 0x3d, 0x96,
+	0x29, 0xcf, 0x4a, 0xad, 0x3a, 0xdf, 0xcb, 0x45, 0x5b, 0x2a, 0x6f, 0xc7, 0xca, 0x8a, 0x15, 0x5c,
+	0x6c, 0x55, 0x5e, 0x77, 0x85, 0xe0, 0x5b, 0xd5, 0xb0, 0xa6, 0x55, 0xa8, 0xaa, 0x65, 0x23, 0xe1,
+	0xd4, 0x12, 0x88, 0x65, 0x0a, 0x9d, 0x60, 0xd4, 0xf9, 0xc8, 0xc0, 0xb3, 0x0f, 0x07, 0xdc, 0x2d,
+	0x0f, 0x0b, 0xa8, 0xe5, 0xa9, 0xc1, 0xb1, 0x68, 0xcb, 0x99, 0x02, 0xb7, 0x67, 0x4d, 0x78, 0x03,
+	0x26, 0x31, 0xa1, 0x11, 0x5e, 0xae, 0x9f, 0xd6, 0x38, 0x74, 0x2f, 0xe0, 0x04, 0x5c, 0xc6, 0xe4,
+	0x99, 0x6c, 0x5e, 0x89, 0xeb, 0xe8, 0x0b, 0xc5, 0x2f, 0xc9, 0x9a, 0xac, 0xdc, 0x1e, 0xbc, 0x02,
+	0x03, 0xb2, 0x21, 0xd8, 0xed, 0xc3, 0x31, 0x18, 0x62, 0x12, 0xe2, 0xd0, 0x1d, 0xe8, 0x89, 0x08,
+	0x93, 0x50, 0x4f, 0x0c, 0xe1, 0x35, 0x18, 0xd3, 0x98, 0x46, 0xd6, 0x1b, 0x2d, 0x7e, 0x1c, 0xf0,
+	0xb0, 0x93, 0x25, 0xfa, 0x37, 0xf8, 0xe2, 0xfe, 0x6c, 0xb0, 0x48, 0xff, 0x39, 0x72, 0xde, 0x16,
+	0x07, 0x98, 0xcb, 0x3d, 0x13, 0x1c, 0xc9, 0x9a, 0x7b, 0x3c, 0x17, 0xa6, 0x91, 0x63, 0x85, 0x55,
+	0xa1, 0xfe, 0x68, 0x74, 0x6e, 0xce, 0xcf, 0x5e, 0x7f, 0x15, 0x04, 0x5f, 0xbd, 0xe9, 0xca, 0xae,
+	0x0a, 0x32, 0x85, 0xac, 0xd4, 0x2a, 0xf1, 0x91, 0x6e, 0x48, 0x7d, 0x1f, 0xfd, 0x34, 0xc8, 0x54,
+	0x7a, 0xf2, 0xd3, 0xc4, 0x4f, 0x8d, 0xff, 0x3e, 0x32, 0x8f, 0x3e, 0xfe, 0x06, 0x00, 0x00, 0xff,
+	0xff, 0x88, 0x30, 0x07, 0xeb, 0xc5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/campaign_shared_set_status.pb.go b/googleapis/ads/googleads/v0/enums/campaign_shared_set_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..72a082ebdcac20ad714f2849ec0994bf1070f421
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/campaign_shared_set_status.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/campaign_shared_set_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum listing the possible campaign shared set statuses.
+type CampaignSharedSetStatusEnum_CampaignSharedSetStatus int32
+
+const (
+	// Not specified.
+	CampaignSharedSetStatusEnum_UNSPECIFIED CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignSharedSetStatusEnum_UNKNOWN CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 1
+	// The campaign shared set is enabled.
+	CampaignSharedSetStatusEnum_ENABLED CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 2
+	// The campaign shared set is removed and can no longer be used.
+	CampaignSharedSetStatusEnum_REMOVED CampaignSharedSetStatusEnum_CampaignSharedSetStatus = 3
+)
+
+var CampaignSharedSetStatusEnum_CampaignSharedSetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+var CampaignSharedSetStatusEnum_CampaignSharedSetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x CampaignSharedSetStatusEnum_CampaignSharedSetStatus) String() string {
+	return proto.EnumName(CampaignSharedSetStatusEnum_CampaignSharedSetStatus_name, int32(x))
+}
+func (CampaignSharedSetStatusEnum_CampaignSharedSetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_status_82017bcab3cc753a, []int{0, 0}
+}
+
+// Container for enum describing types of campaign shared set statuses.
+type CampaignSharedSetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignSharedSetStatusEnum) Reset()         { *m = CampaignSharedSetStatusEnum{} }
+func (m *CampaignSharedSetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSetStatusEnum) ProtoMessage()    {}
+func (*CampaignSharedSetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_status_82017bcab3cc753a, []int{0}
+}
+func (m *CampaignSharedSetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSetStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignSharedSetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSetStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignSharedSetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSetStatusEnum.Merge(dst, src)
+}
+func (m *CampaignSharedSetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSetStatusEnum.Size(m)
+}
+func (m *CampaignSharedSetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignSharedSetStatusEnum)(nil), "google.ads.googleads.v0.enums.CampaignSharedSetStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus", CampaignSharedSetStatusEnum_CampaignSharedSetStatus_name, CampaignSharedSetStatusEnum_CampaignSharedSetStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/campaign_shared_set_status.proto", fileDescriptor_campaign_shared_set_status_82017bcab3cc753a)
+}
+
+var fileDescriptor_campaign_shared_set_status_82017bcab3cc753a = []byte{
+	// 276 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe4, 0xc4, 0xdc, 0x82, 0xc4, 0xcc, 0xf4, 0xbc, 0xf8, 0xe2, 0x8c, 0xc4,
+	0xa2, 0xd4, 0x94, 0xf8, 0xe2, 0xd4, 0x92, 0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x26, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x7e, 0xbd,
+	0x32, 0x03, 0x3d, 0xb0, 0x7e, 0xa5, 0x02, 0x2e, 0x69, 0x67, 0xa8, 0x11, 0xc1, 0x60, 0x13, 0x82,
+	0x53, 0x4b, 0x82, 0xc1, 0xfa, 0x5d, 0xf3, 0x4a, 0x73, 0x95, 0x02, 0xb9, 0xc4, 0x71, 0x48, 0x0b,
+	0xf1, 0x73, 0x71, 0x87, 0xfa, 0x05, 0x07, 0xb8, 0x3a, 0x7b, 0xba, 0x79, 0xba, 0xba, 0x08, 0x30,
+	0x08, 0x71, 0x73, 0xb1, 0x87, 0xfa, 0x79, 0xfb, 0xf9, 0x87, 0xfb, 0x09, 0x30, 0x82, 0x38, 0xae,
+	0x7e, 0x8e, 0x4e, 0x3e, 0xae, 0x2e, 0x02, 0x4c, 0x20, 0x4e, 0x90, 0xab, 0xaf, 0x7f, 0x98, 0xab,
+	0x8b, 0x00, 0xb3, 0xd3, 0x59, 0x46, 0x2e, 0xc5, 0xe4, 0xfc, 0x5c, 0x3d, 0xbc, 0xee, 0x72, 0x92,
+	0xc1, 0x61, 0x6d, 0x00, 0xc8, 0x53, 0x01, 0x8c, 0x51, 0x4e, 0x50, 0xed, 0xe9, 0xf9, 0x39, 0x89,
+	0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79, 0x60, 0x2f, 0xc3, 0x82, 0xa9, 0x20,
+	0xb3, 0x18, 0x47, 0xa8, 0x59, 0x83, 0xc9, 0x45, 0x4c, 0xcc, 0xee, 0x8e, 0x8e, 0xab, 0x98, 0x64,
+	0xdd, 0x21, 0x46, 0x39, 0xa6, 0x14, 0xeb, 0x41, 0x98, 0x20, 0x56, 0x98, 0x81, 0x1e, 0x28, 0x04,
+	0x8a, 0x4f, 0xc1, 0xe4, 0x63, 0x1c, 0x53, 0x8a, 0x63, 0xe0, 0xf2, 0x31, 0x61, 0x06, 0x31, 0x60,
+	0xf9, 0x24, 0x36, 0xb0, 0xa5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xcf, 0xee, 0xb5,
+	0xa9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/campaign_status.pb.go b/googleapis/ads/googleads/v0/enums/campaign_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..afb605c5792b30aa3ff7c002c6f13e73b19e060b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/campaign_status.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/campaign_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a campaign.
+type CampaignStatusEnum_CampaignStatus int32
+
+const (
+	// Not specified.
+	CampaignStatusEnum_UNSPECIFIED CampaignStatusEnum_CampaignStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	CampaignStatusEnum_UNKNOWN CampaignStatusEnum_CampaignStatus = 1
+	// Campaign is currently serving ads depending on budget information.
+	CampaignStatusEnum_ENABLED CampaignStatusEnum_CampaignStatus = 2
+	// Campaign has been paused by the user.
+	CampaignStatusEnum_PAUSED CampaignStatusEnum_CampaignStatus = 3
+	// Campaign has been removed.
+	CampaignStatusEnum_REMOVED CampaignStatusEnum_CampaignStatus = 4
+)
+
+var CampaignStatusEnum_CampaignStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "PAUSED",
+	4: "REMOVED",
+}
+var CampaignStatusEnum_CampaignStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"PAUSED":      3,
+	"REMOVED":     4,
+}
+
+func (x CampaignStatusEnum_CampaignStatus) String() string {
+	return proto.EnumName(CampaignStatusEnum_CampaignStatus_name, int32(x))
+}
+func (CampaignStatusEnum_CampaignStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_status_a4946b8bf190e841, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a campaign.
+type CampaignStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignStatusEnum) Reset()         { *m = CampaignStatusEnum{} }
+func (m *CampaignStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignStatusEnum) ProtoMessage()    {}
+func (*CampaignStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_status_a4946b8bf190e841, []int{0}
+}
+func (m *CampaignStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignStatusEnum.Unmarshal(m, b)
+}
+func (m *CampaignStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignStatusEnum.Merge(dst, src)
+}
+func (m *CampaignStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignStatusEnum.Size(m)
+}
+func (m *CampaignStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignStatusEnum)(nil), "google.ads.googleads.v0.enums.CampaignStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CampaignStatusEnum_CampaignStatus", CampaignStatusEnum_CampaignStatus_name, CampaignStatusEnum_CampaignStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/campaign_status.proto", fileDescriptor_campaign_status_a4946b8bf190e841)
+}
+
+var fileDescriptor_campaign_status_a4946b8bf190e841 = []byte{
+	// 270 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe4, 0xc4, 0xdc, 0x82, 0xc4, 0xcc, 0xf4, 0xbc, 0xf8, 0xe2, 0x92, 0xc4,
+	0x92, 0xd2, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x4a, 0xbd, 0xc4, 0x94,
+	0x62, 0x3d, 0xb8, 0x26, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x26, 0xa5, 0x2c, 0x2e, 0x21, 0x67, 0xa8,
+	0xbe, 0x60, 0xb0, 0x36, 0xd7, 0xbc, 0xd2, 0x5c, 0xa5, 0x10, 0x2e, 0x3e, 0x54, 0x51, 0x21, 0x7e,
+	0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21,
+	0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x10, 0xc7, 0xd5, 0xcf,
+	0xd1, 0xc9, 0xc7, 0xd5, 0x45, 0x80, 0x49, 0x88, 0x8b, 0x8b, 0x2d, 0xc0, 0x31, 0x34, 0xd8, 0xd5,
+	0x45, 0x80, 0x19, 0x24, 0x11, 0xe4, 0xea, 0xeb, 0x1f, 0xe6, 0xea, 0x22, 0xc0, 0xe2, 0x74, 0x84,
+	0x91, 0x4b, 0x31, 0x39, 0x3f, 0x57, 0x0f, 0xaf, 0x8b, 0x9c, 0x84, 0x51, 0x6d, 0x0e, 0x00, 0xf9,
+	0x22, 0x80, 0x31, 0xca, 0x09, 0xaa, 0x2b, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28,
+	0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x47, 0x58, 0x60, 0x14, 0x64, 0x16, 0xe3, 0x08, 0x1b, 0x6b,
+	0x30, 0xb9, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0xac, 0x3b, 0xc4, 0x28, 0xc7, 0x94,
+	0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x03, 0xf9, 0xbd, 0xf8, 0x14, 0x4c, 0x3e, 0xc6,
+	0x31, 0xa5, 0x38, 0x06, 0x2e, 0x1f, 0x13, 0x66, 0x10, 0x03, 0x96, 0x4f, 0x62, 0x03, 0x5b, 0x6a,
+	0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xc6, 0x73, 0xa2, 0x1a, 0x8f, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/change_status_operation.pb.go b/googleapis/ads/googleads/v0/enums/change_status_operation.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..32751d9f8d4df95b163149c39e08bc695d53b01e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/change_status_operation.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/change_status_operation.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Status of the changed resource
+type ChangeStatusOperationEnum_ChangeStatusOperation int32
+
+const (
+	// No value has been specified.
+	ChangeStatusOperationEnum_UNSPECIFIED ChangeStatusOperationEnum_ChangeStatusOperation = 0
+	// Used for return value only. Represents an unclassified resource unknown
+	// in this version.
+	ChangeStatusOperationEnum_UNKNOWN ChangeStatusOperationEnum_ChangeStatusOperation = 1
+	// The resource was created.
+	ChangeStatusOperationEnum_ADDED ChangeStatusOperationEnum_ChangeStatusOperation = 2
+	// The resource was modified.
+	ChangeStatusOperationEnum_CHANGED ChangeStatusOperationEnum_ChangeStatusOperation = 3
+	// The resource was removed.
+	ChangeStatusOperationEnum_REMOVED ChangeStatusOperationEnum_ChangeStatusOperation = 4
+)
+
+var ChangeStatusOperationEnum_ChangeStatusOperation_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADDED",
+	3: "CHANGED",
+	4: "REMOVED",
+}
+var ChangeStatusOperationEnum_ChangeStatusOperation_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ADDED":       2,
+	"CHANGED":     3,
+	"REMOVED":     4,
+}
+
+func (x ChangeStatusOperationEnum_ChangeStatusOperation) String() string {
+	return proto.EnumName(ChangeStatusOperationEnum_ChangeStatusOperation_name, int32(x))
+}
+func (ChangeStatusOperationEnum_ChangeStatusOperation) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_operation_b1df569575e87122, []int{0, 0}
+}
+
+// Container for enum describing operations for the ChangeStatus resource.
+type ChangeStatusOperationEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChangeStatusOperationEnum) Reset()         { *m = ChangeStatusOperationEnum{} }
+func (m *ChangeStatusOperationEnum) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatusOperationEnum) ProtoMessage()    {}
+func (*ChangeStatusOperationEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_operation_b1df569575e87122, []int{0}
+}
+func (m *ChangeStatusOperationEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatusOperationEnum.Unmarshal(m, b)
+}
+func (m *ChangeStatusOperationEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatusOperationEnum.Marshal(b, m, deterministic)
+}
+func (dst *ChangeStatusOperationEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatusOperationEnum.Merge(dst, src)
+}
+func (m *ChangeStatusOperationEnum) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatusOperationEnum.Size(m)
+}
+func (m *ChangeStatusOperationEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatusOperationEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatusOperationEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ChangeStatusOperationEnum)(nil), "google.ads.googleads.v0.enums.ChangeStatusOperationEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ChangeStatusOperationEnum_ChangeStatusOperation", ChangeStatusOperationEnum_ChangeStatusOperation_name, ChangeStatusOperationEnum_ChangeStatusOperation_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/change_status_operation.proto", fileDescriptor_change_status_operation_b1df569575e87122)
+}
+
+var fileDescriptor_change_status_operation_b1df569575e87122 = []byte{
+	// 281 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe4, 0x8c, 0xc4, 0xbc, 0xf4, 0xd4, 0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2,
+	0xe2, 0xf8, 0xfc, 0x82, 0xd4, 0xa2, 0xc4, 0x92, 0xcc, 0xfc, 0x3c, 0xbd, 0x82, 0xa2, 0xfc, 0x92,
+	0x7c, 0x21, 0x59, 0x88, 0x0e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x66, 0xbd, 0x32, 0x03, 0x3d,
+	0xb0, 0x66, 0xa5, 0x72, 0x2e, 0x49, 0x67, 0xb0, 0xfe, 0x60, 0xb0, 0x76, 0x7f, 0x98, 0x6e, 0xd7,
+	0xbc, 0xd2, 0x5c, 0xa5, 0x28, 0x2e, 0x51, 0xac, 0x92, 0x42, 0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1,
+	0x01, 0xae, 0xce, 0x9e, 0x6e, 0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e,
+	0xde, 0x7e, 0xfe, 0xe1, 0x7e, 0x02, 0x8c, 0x42, 0x9c, 0x5c, 0xac, 0x8e, 0x2e, 0x2e, 0xae, 0x2e,
+	0x02, 0x4c, 0x20, 0x71, 0x67, 0x0f, 0x47, 0x3f, 0x77, 0x57, 0x17, 0x01, 0x66, 0x10, 0x27, 0xc8,
+	0xd5, 0xd7, 0x3f, 0xcc, 0xd5, 0x45, 0x80, 0xc5, 0xe9, 0x34, 0x23, 0x97, 0x62, 0x72, 0x7e, 0xae,
+	0x1e, 0x5e, 0xe7, 0x39, 0x49, 0x61, 0xb5, 0x3f, 0x00, 0xe4, 0xb3, 0x00, 0xc6, 0x28, 0x27, 0xa8,
+	0xe6, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0,
+	0xbf, 0x61, 0x01, 0x55, 0x90, 0x59, 0x8c, 0x23, 0xdc, 0xac, 0xc1, 0xe4, 0x22, 0x26, 0x66, 0x77,
+	0x47, 0xc7, 0x55, 0x4c, 0xb2, 0xee, 0x10, 0xa3, 0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b,
+	0xcc, 0x40, 0x0f, 0x14, 0x10, 0xc5, 0xa7, 0x60, 0xf2, 0x31, 0x8e, 0x29, 0xc5, 0x31, 0x70, 0xf9,
+	0x98, 0x30, 0x83, 0x18, 0xb0, 0x7c, 0x12, 0x1b, 0xd8, 0x52, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x02, 0xe5, 0xee, 0xbb, 0xab, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/change_status_resource_type.pb.go b/googleapis/ads/googleads/v0/enums/change_status_resource_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7a91f1cb68a117022f192a18cac8f3aba20d5e48
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/change_status_resource_type.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/change_status_resource_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum listing the resource types support by the ChangeStatus resource.
+type ChangeStatusResourceTypeEnum_ChangeStatusResourceType int32
+
+const (
+	// No value has been specified.
+	ChangeStatusResourceTypeEnum_UNSPECIFIED ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 0
+	// Used for return value only. Represents an unclassified resource unknown
+	// in this version.
+	ChangeStatusResourceTypeEnum_UNKNOWN ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 1
+	// An AdGroup resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 3
+	// An AdGroupAd resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP_AD ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 4
+	// An AdGroupCriterion resource change.
+	ChangeStatusResourceTypeEnum_AD_GROUP_CRITERION ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 5
+	// A Campaign resource change.
+	ChangeStatusResourceTypeEnum_CAMPAIGN ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 6
+	// A CampaignCriterion resource change.
+	ChangeStatusResourceTypeEnum_CAMPAIGN_CRITERION ChangeStatusResourceTypeEnum_ChangeStatusResourceType = 7
+)
+
+var ChangeStatusResourceTypeEnum_ChangeStatusResourceType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "AD_GROUP",
+	4: "AD_GROUP_AD",
+	5: "AD_GROUP_CRITERION",
+	6: "CAMPAIGN",
+	7: "CAMPAIGN_CRITERION",
+}
+var ChangeStatusResourceTypeEnum_ChangeStatusResourceType_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"AD_GROUP":           3,
+	"AD_GROUP_AD":        4,
+	"AD_GROUP_CRITERION": 5,
+	"CAMPAIGN":           6,
+	"CAMPAIGN_CRITERION": 7,
+}
+
+func (x ChangeStatusResourceTypeEnum_ChangeStatusResourceType) String() string {
+	return proto.EnumName(ChangeStatusResourceTypeEnum_ChangeStatusResourceType_name, int32(x))
+}
+func (ChangeStatusResourceTypeEnum_ChangeStatusResourceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_resource_type_21cfa4bee3165095, []int{0, 0}
+}
+
+// Container for enum describing supported resource types for the ChangeStatus
+// resource.
+type ChangeStatusResourceTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChangeStatusResourceTypeEnum) Reset()         { *m = ChangeStatusResourceTypeEnum{} }
+func (m *ChangeStatusResourceTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatusResourceTypeEnum) ProtoMessage()    {}
+func (*ChangeStatusResourceTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_resource_type_21cfa4bee3165095, []int{0}
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatusResourceTypeEnum.Unmarshal(m, b)
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatusResourceTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *ChangeStatusResourceTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatusResourceTypeEnum.Merge(dst, src)
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatusResourceTypeEnum.Size(m)
+}
+func (m *ChangeStatusResourceTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatusResourceTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatusResourceTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ChangeStatusResourceTypeEnum)(nil), "google.ads.googleads.v0.enums.ChangeStatusResourceTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType", ChangeStatusResourceTypeEnum_ChangeStatusResourceType_name, ChangeStatusResourceTypeEnum_ChangeStatusResourceType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/change_status_resource_type.proto", fileDescriptor_change_status_resource_type_21cfa4bee3165095)
+}
+
+var fileDescriptor_change_status_resource_type_21cfa4bee3165095 = []byte{
+	// 318 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe4, 0x8c, 0xc4, 0xbc, 0xf4, 0xd4, 0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2,
+	0xe2, 0xf8, 0xa2, 0xd4, 0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd,
+	0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x2e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x01,
+	0x7a, 0x65, 0x06, 0x7a, 0x60, 0x03, 0x94, 0xb6, 0x31, 0x72, 0xc9, 0x38, 0x83, 0x0d, 0x09, 0x06,
+	0x9b, 0x11, 0x04, 0x35, 0x22, 0xa4, 0xb2, 0x20, 0xd5, 0x35, 0xaf, 0x34, 0x57, 0x69, 0x2a, 0x23,
+	0x97, 0x04, 0x2e, 0x05, 0x42, 0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1, 0x01, 0xae, 0xce, 0x9e, 0x6e,
+	0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e, 0xde, 0x7e, 0xfe, 0xe1, 0x7e,
+	0x02, 0x8c, 0x42, 0x3c, 0x5c, 0x1c, 0x8e, 0x2e, 0xf1, 0xee, 0x41, 0xfe, 0xa1, 0x01, 0x02, 0xcc,
+	0x20, 0xb5, 0x30, 0x5e, 0xbc, 0xa3, 0x8b, 0x00, 0x8b, 0x90, 0x18, 0x97, 0x10, 0x5c, 0xc0, 0x39,
+	0xc8, 0x33, 0xc4, 0x35, 0xc8, 0xd3, 0xdf, 0x4f, 0x80, 0x15, 0xa4, 0xcd, 0xd9, 0xd1, 0x37, 0xc0,
+	0xd1, 0xd3, 0xdd, 0x4f, 0x80, 0x0d, 0xa4, 0x0a, 0xc6, 0x43, 0x52, 0xc5, 0xee, 0x74, 0x8e, 0x91,
+	0x4b, 0x31, 0x39, 0x3f, 0x57, 0x0f, 0xaf, 0xf7, 0x9c, 0x64, 0x71, 0x39, 0x3d, 0x00, 0x14, 0x38,
+	0x01, 0x8c, 0x51, 0x4e, 0x50, 0xfd, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9,
+	0xfa, 0xe9, 0xa9, 0x79, 0xe0, 0xa0, 0x83, 0x85, 0x77, 0x41, 0x66, 0x31, 0x8e, 0xe0, 0xb7, 0x06,
+	0x93, 0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0xc9, 0xba, 0x43, 0x8c, 0x72, 0x4c, 0x29,
+	0xd6, 0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0x3d, 0x50, 0x38, 0x16, 0x9f, 0x82, 0xc9, 0xc7, 0x38,
+	0xa6, 0x14, 0xc7, 0xc0, 0xe5, 0x63, 0xc2, 0x0c, 0x62, 0xc0, 0xf2, 0x49, 0x6c, 0x60, 0x4b, 0x8d,
+	0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5a, 0x54, 0x8c, 0x19, 0xf2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/content_label_type.pb.go b/googleapis/ads/googleads/v0/enums/content_label_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f1a7c5373f88d95f99bb8755b5b2dedc89a625b8
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/content_label_type.pb.go
@@ -0,0 +1,177 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/content_label_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum listing the content label types supported by ContentLabel criterion.
+type ContentLabelTypeEnum_ContentLabelType int32
+
+const (
+	// Not specified.
+	ContentLabelTypeEnum_UNSPECIFIED ContentLabelTypeEnum_ContentLabelType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ContentLabelTypeEnum_UNKNOWN ContentLabelTypeEnum_ContentLabelType = 1
+	// Sexually suggestive content.
+	ContentLabelTypeEnum_SEXUALLY_SUGGESTIVE ContentLabelTypeEnum_ContentLabelType = 2
+	// Below the fold placement.
+	ContentLabelTypeEnum_BELOW_THE_FOLD ContentLabelTypeEnum_ContentLabelType = 3
+	// Parked domain.
+	ContentLabelTypeEnum_PARKED_DOMAIN ContentLabelTypeEnum_ContentLabelType = 4
+	// Game.
+	ContentLabelTypeEnum_GAME ContentLabelTypeEnum_ContentLabelType = 5
+	// Juvenile, gross & bizarre content.
+	ContentLabelTypeEnum_JUVENILE ContentLabelTypeEnum_ContentLabelType = 6
+	// Profanity & rough language.
+	ContentLabelTypeEnum_PROFANITY ContentLabelTypeEnum_ContentLabelType = 7
+	// Death & tragedy.
+	ContentLabelTypeEnum_TRAGEDY ContentLabelTypeEnum_ContentLabelType = 8
+	// Video.
+	ContentLabelTypeEnum_VIDEO ContentLabelTypeEnum_ContentLabelType = 9
+	// Content rating: G.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_G ContentLabelTypeEnum_ContentLabelType = 10
+	// Content rating: PG.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_PG ContentLabelTypeEnum_ContentLabelType = 11
+	// Content rating: T.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_T ContentLabelTypeEnum_ContentLabelType = 12
+	// Content rating: MA.
+	ContentLabelTypeEnum_VIDEO_RATING_DV_MA ContentLabelTypeEnum_ContentLabelType = 13
+	// Content rating: not yet rated.
+	ContentLabelTypeEnum_VIDEO_NOT_YET_RATED ContentLabelTypeEnum_ContentLabelType = 14
+	// Embedded video.
+	ContentLabelTypeEnum_EMBEDDED_VIDEO ContentLabelTypeEnum_ContentLabelType = 15
+	// Live streaming video.
+	ContentLabelTypeEnum_LIVE_STREAMING_VIDEO ContentLabelTypeEnum_ContentLabelType = 16
+)
+
+var ContentLabelTypeEnum_ContentLabelType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "SEXUALLY_SUGGESTIVE",
+	3:  "BELOW_THE_FOLD",
+	4:  "PARKED_DOMAIN",
+	5:  "GAME",
+	6:  "JUVENILE",
+	7:  "PROFANITY",
+	8:  "TRAGEDY",
+	9:  "VIDEO",
+	10: "VIDEO_RATING_DV_G",
+	11: "VIDEO_RATING_DV_PG",
+	12: "VIDEO_RATING_DV_T",
+	13: "VIDEO_RATING_DV_MA",
+	14: "VIDEO_NOT_YET_RATED",
+	15: "EMBEDDED_VIDEO",
+	16: "LIVE_STREAMING_VIDEO",
+}
+var ContentLabelTypeEnum_ContentLabelType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"SEXUALLY_SUGGESTIVE":  2,
+	"BELOW_THE_FOLD":       3,
+	"PARKED_DOMAIN":        4,
+	"GAME":                 5,
+	"JUVENILE":             6,
+	"PROFANITY":            7,
+	"TRAGEDY":              8,
+	"VIDEO":                9,
+	"VIDEO_RATING_DV_G":    10,
+	"VIDEO_RATING_DV_PG":   11,
+	"VIDEO_RATING_DV_T":    12,
+	"VIDEO_RATING_DV_MA":   13,
+	"VIDEO_NOT_YET_RATED":  14,
+	"EMBEDDED_VIDEO":       15,
+	"LIVE_STREAMING_VIDEO": 16,
+}
+
+func (x ContentLabelTypeEnum_ContentLabelType) String() string {
+	return proto.EnumName(ContentLabelTypeEnum_ContentLabelType_name, int32(x))
+}
+func (ContentLabelTypeEnum_ContentLabelType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_content_label_type_29d39b60679e7f56, []int{0, 0}
+}
+
+// Container for enum describing content label types in ContentLabel.
+type ContentLabelTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ContentLabelTypeEnum) Reset()         { *m = ContentLabelTypeEnum{} }
+func (m *ContentLabelTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ContentLabelTypeEnum) ProtoMessage()    {}
+func (*ContentLabelTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_content_label_type_29d39b60679e7f56, []int{0}
+}
+func (m *ContentLabelTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ContentLabelTypeEnum.Unmarshal(m, b)
+}
+func (m *ContentLabelTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ContentLabelTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *ContentLabelTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ContentLabelTypeEnum.Merge(dst, src)
+}
+func (m *ContentLabelTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ContentLabelTypeEnum.Size(m)
+}
+func (m *ContentLabelTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ContentLabelTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ContentLabelTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ContentLabelTypeEnum)(nil), "google.ads.googleads.v0.enums.ContentLabelTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ContentLabelTypeEnum_ContentLabelType", ContentLabelTypeEnum_ContentLabelType_name, ContentLabelTypeEnum_ContentLabelType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/content_label_type.proto", fileDescriptor_content_label_type_29d39b60679e7f56)
+}
+
+var fileDescriptor_content_label_type_29d39b60679e7f56 = []byte{
+	// 438 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x6e, 0xd3, 0x40,
+	0x10, 0x26, 0xee, 0x5f, 0xb2, 0x69, 0xda, 0xed, 0xd2, 0x02, 0x97, 0x1e, 0xe8, 0x03, 0xac, 0x23,
+	0x21, 0x71, 0xe1, 0xb4, 0xee, 0x4e, 0x96, 0xa5, 0xf6, 0xda, 0xb2, 0xd7, 0x2e, 0x41, 0x91, 0x56,
+	0x69, 0x63, 0x59, 0x48, 0x89, 0x1d, 0xd5, 0x6e, 0xa5, 0xbe, 0x0e, 0x47, 0x1e, 0x84, 0x03, 0x67,
+	0x5e, 0x83, 0x77, 0x40, 0x6b, 0xd3, 0x1e, 0xa2, 0xc0, 0xc5, 0xfa, 0x34, 0xdf, 0xf7, 0xcd, 0x78,
+	0xf6, 0x1b, 0xf4, 0xbe, 0xa8, 0xaa, 0x62, 0x99, 0xbb, 0xf3, 0x45, 0xed, 0x76, 0xd0, 0xa2, 0x87,
+	0xb1, 0x9b, 0x97, 0xf7, 0xab, 0xda, 0xbd, 0xad, 0xca, 0x26, 0x2f, 0x1b, 0xb3, 0x9c, 0xdf, 0xe4,
+	0x4b, 0xd3, 0x3c, 0xae, 0x73, 0xba, 0xbe, 0xab, 0x9a, 0x8a, 0x9c, 0x77, 0x62, 0x3a, 0x5f, 0xd4,
+	0xf4, 0xd9, 0x47, 0x1f, 0xc6, 0xb4, 0xf5, 0x5d, 0xfc, 0x76, 0xd0, 0xe9, 0x65, 0xe7, 0xf5, 0xad,
+	0x55, 0x3f, 0xae, 0x73, 0x28, 0xef, 0x57, 0x17, 0xbf, 0x1c, 0x84, 0x37, 0x09, 0x72, 0x8c, 0x86,
+	0xa9, 0x4a, 0x22, 0xb8, 0x94, 0x13, 0x09, 0x1c, 0xbf, 0x20, 0x43, 0x74, 0x90, 0xaa, 0x2b, 0x15,
+	0x5e, 0x2b, 0xdc, 0x23, 0xaf, 0xd1, 0xcb, 0x04, 0x3e, 0xa7, 0xcc, 0xf7, 0xa7, 0x26, 0x49, 0x85,
+	0x80, 0x44, 0xcb, 0x0c, 0xb0, 0x43, 0x08, 0x3a, 0xf2, 0xc0, 0x0f, 0xaf, 0x8d, 0xfe, 0x08, 0x66,
+	0x12, 0xfa, 0x1c, 0xef, 0x90, 0x13, 0x34, 0x8a, 0x58, 0x7c, 0x05, 0xdc, 0xf0, 0x30, 0x60, 0x52,
+	0xe1, 0x5d, 0xd2, 0x47, 0xbb, 0x82, 0x05, 0x80, 0xf7, 0xc8, 0x21, 0xea, 0x7f, 0x4a, 0x33, 0x50,
+	0xd2, 0x07, 0xbc, 0x4f, 0x46, 0x68, 0x10, 0xc5, 0xe1, 0x84, 0x29, 0xa9, 0xa7, 0xf8, 0xc0, 0xce,
+	0xd4, 0x31, 0x13, 0xc0, 0xa7, 0xb8, 0x4f, 0x06, 0x68, 0x2f, 0x93, 0x1c, 0x42, 0x3c, 0x20, 0x67,
+	0xe8, 0xa4, 0x85, 0x26, 0x66, 0x5a, 0x2a, 0x61, 0x78, 0x66, 0x04, 0x46, 0xe4, 0x15, 0x22, 0x9b,
+	0xe5, 0x48, 0xe0, 0xe1, 0x36, 0xb9, 0xc6, 0x87, 0xdb, 0xe4, 0x01, 0xc3, 0x23, 0xbb, 0x5c, 0x57,
+	0x57, 0xa1, 0x36, 0x53, 0xd0, 0x96, 0x07, 0x8e, 0x8f, 0xec, 0x72, 0x10, 0x78, 0xc0, 0x39, 0x70,
+	0xd3, 0xfd, 0xca, 0x31, 0x79, 0x83, 0x4e, 0x7d, 0x99, 0x81, 0x49, 0x74, 0x0c, 0x2c, 0xb0, 0x6d,
+	0x3a, 0x06, 0x7b, 0x3f, 0x7a, 0xe8, 0xed, 0x6d, 0xb5, 0xa2, 0xff, 0x4d, 0xc5, 0x3b, 0xdb, 0x7c,
+	0xf9, 0xc8, 0x66, 0x19, 0xf5, 0xbe, 0x78, 0x7f, 0x7d, 0x45, 0xb5, 0x9c, 0x97, 0x05, 0xad, 0xee,
+	0x0a, 0xb7, 0xc8, 0xcb, 0x36, 0xe9, 0xa7, 0xab, 0x58, 0x7f, 0xad, 0xff, 0x71, 0x24, 0x1f, 0xda,
+	0xef, 0x37, 0x67, 0x47, 0x30, 0xf6, 0xdd, 0x39, 0x17, 0x5d, 0x2b, 0xb6, 0xa8, 0x69, 0x07, 0x2d,
+	0xca, 0xc6, 0xd4, 0xc6, 0x5f, 0xff, 0x7c, 0xe2, 0x67, 0x6c, 0x51, 0xcf, 0x9e, 0xf9, 0x59, 0x36,
+	0x9e, 0xb5, 0xfc, 0xcd, 0x7e, 0x3b, 0xf4, 0xdd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0xeb,
+	0x43, 0x52, 0x98, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/conversion_action_category.pb.go b/googleapis/ads/googleads/v0/enums/conversion_action_category.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..048ac5aeb14130cdbbf6d0895e3dabcfcae84ecd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/conversion_action_category.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/conversion_action_category.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The category of conversions that are associated with a ConversionAction.
+type ConversionActionCategoryEnum_ConversionActionCategory int32
+
+const (
+	// Not specified.
+	ConversionActionCategoryEnum_UNSPECIFIED ConversionActionCategoryEnum_ConversionActionCategory = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionCategoryEnum_UNKNOWN ConversionActionCategoryEnum_ConversionActionCategory = 1
+	// Default category.
+	ConversionActionCategoryEnum_DEFAULT ConversionActionCategoryEnum_ConversionActionCategory = 2
+	// User visiting a page.
+	ConversionActionCategoryEnum_PAGE_VIEW ConversionActionCategoryEnum_ConversionActionCategory = 3
+	// Purchase, sales, or "order placed" event.
+	ConversionActionCategoryEnum_PURCHASE ConversionActionCategoryEnum_ConversionActionCategory = 4
+	// Signup user action.
+	ConversionActionCategoryEnum_SIGNUP ConversionActionCategoryEnum_ConversionActionCategory = 5
+	// Lead-generating action.
+	ConversionActionCategoryEnum_LEAD ConversionActionCategoryEnum_ConversionActionCategory = 6
+	// Software download action (as for an app).
+	ConversionActionCategoryEnum_DOWNLOAD ConversionActionCategoryEnum_ConversionActionCategory = 7
+)
+
+var ConversionActionCategoryEnum_ConversionActionCategory_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DEFAULT",
+	3: "PAGE_VIEW",
+	4: "PURCHASE",
+	5: "SIGNUP",
+	6: "LEAD",
+	7: "DOWNLOAD",
+}
+var ConversionActionCategoryEnum_ConversionActionCategory_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DEFAULT":     2,
+	"PAGE_VIEW":   3,
+	"PURCHASE":    4,
+	"SIGNUP":      5,
+	"LEAD":        6,
+	"DOWNLOAD":    7,
+}
+
+func (x ConversionActionCategoryEnum_ConversionActionCategory) String() string {
+	return proto.EnumName(ConversionActionCategoryEnum_ConversionActionCategory_name, int32(x))
+}
+func (ConversionActionCategoryEnum_ConversionActionCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_category_58fddaaaba20c6a0, []int{0, 0}
+}
+
+// Container for enum describing the category of conversions that are associated
+// with a ConversionAction.
+type ConversionActionCategoryEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionCategoryEnum) Reset()         { *m = ConversionActionCategoryEnum{} }
+func (m *ConversionActionCategoryEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionCategoryEnum) ProtoMessage()    {}
+func (*ConversionActionCategoryEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_category_58fddaaaba20c6a0, []int{0}
+}
+func (m *ConversionActionCategoryEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionCategoryEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionCategoryEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionCategoryEnum.Marshal(b, m, deterministic)
+}
+func (dst *ConversionActionCategoryEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionCategoryEnum.Merge(dst, src)
+}
+func (m *ConversionActionCategoryEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionCategoryEnum.Size(m)
+}
+func (m *ConversionActionCategoryEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionCategoryEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionCategoryEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ConversionActionCategoryEnum)(nil), "google.ads.googleads.v0.enums.ConversionActionCategoryEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ConversionActionCategoryEnum_ConversionActionCategory", ConversionActionCategoryEnum_ConversionActionCategory_name, ConversionActionCategoryEnum_ConversionActionCategory_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/conversion_action_category.proto", fileDescriptor_conversion_action_category_58fddaaaba20c6a0)
+}
+
+var fileDescriptor_conversion_action_category_58fddaaaba20c6a0 = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x6a, 0xf2, 0x30,
+	0x1c, 0xc5, 0xbf, 0xaa, 0x9f, 0xba, 0xb8, 0xb1, 0x90, 0xab, 0x5d, 0xcc, 0x8b, 0xf9, 0x00, 0x69,
+	0x61, 0x97, 0x83, 0x41, 0x6c, 0x63, 0x57, 0x26, 0x31, 0xcc, 0x55, 0x61, 0x14, 0xa4, 0x6b, 0x4b,
+	0x10, 0x34, 0x91, 0x46, 0x85, 0xbd, 0xc0, 0x1e, 0x64, 0x37, 0x83, 0x3d, 0xca, 0x2e, 0xf6, 0x4c,
+	0x23, 0xa9, 0x7a, 0xd7, 0xdd, 0x24, 0x27, 0x9c, 0xff, 0x39, 0x49, 0x7e, 0xe0, 0x5e, 0x28, 0x25,
+	0x56, 0x85, 0x9b, 0xe6, 0xda, 0xad, 0xa4, 0x51, 0x7b, 0xcf, 0x2d, 0xe4, 0x6e, 0xad, 0xdd, 0x4c,
+	0xc9, 0x7d, 0x51, 0xea, 0xa5, 0x92, 0x8b, 0x34, 0xdb, 0x9a, 0x2d, 0x4b, 0xb7, 0x85, 0x50, 0xe5,
+	0x1b, 0xde, 0x94, 0x6a, 0xab, 0x50, 0xbf, 0x0a, 0xe1, 0x34, 0xd7, 0xf8, 0x94, 0xc7, 0x7b, 0x0f,
+	0xdb, 0xfc, 0xe0, 0xd3, 0x01, 0xd7, 0xfe, 0xa9, 0x83, 0xd8, 0x0a, 0xff, 0xd0, 0x40, 0xe5, 0x6e,
+	0x3d, 0x78, 0x77, 0xc0, 0x55, 0xdd, 0x00, 0xba, 0x04, 0xbd, 0x98, 0x4d, 0x39, 0xf5, 0xa3, 0x51,
+	0x44, 0x03, 0xf8, 0x0f, 0xf5, 0x40, 0x27, 0x66, 0x8f, 0x6c, 0x32, 0x67, 0xd0, 0x31, 0x87, 0x80,
+	0x8e, 0x48, 0x3c, 0x7e, 0x86, 0x0d, 0x74, 0x01, 0xce, 0x38, 0x09, 0xe9, 0x62, 0x16, 0xd1, 0x39,
+	0x6c, 0xa2, 0x73, 0xd0, 0xe5, 0xf1, 0x93, 0xff, 0x40, 0xa6, 0x14, 0xb6, 0x10, 0x00, 0xed, 0x69,
+	0x14, 0xb2, 0x98, 0xc3, 0xff, 0xa8, 0x0b, 0x5a, 0x63, 0x4a, 0x02, 0xd8, 0x36, 0x33, 0xc1, 0x64,
+	0xce, 0xc6, 0x13, 0x12, 0xc0, 0xce, 0xf0, 0xc7, 0x01, 0x37, 0x99, 0x5a, 0xe3, 0x3f, 0xff, 0x33,
+	0xec, 0xd7, 0xbd, 0x95, 0x1b, 0x1a, 0xdc, 0x79, 0x19, 0x1e, 0xf2, 0x42, 0xad, 0x52, 0x29, 0xb0,
+	0x2a, 0x85, 0x2b, 0x0a, 0x69, 0x59, 0x1d, 0xf9, 0x6e, 0x96, 0xba, 0x06, 0xf7, 0x9d, 0x5d, 0x3f,
+	0x1a, 0xcd, 0x90, 0x90, 0xaf, 0x46, 0x3f, 0xac, 0xaa, 0x48, 0xae, 0x71, 0x25, 0x8d, 0x9a, 0x79,
+	0xd8, 0x80, 0xd3, 0xdf, 0x47, 0x3f, 0x21, 0xb9, 0x4e, 0x4e, 0x7e, 0x32, 0xf3, 0x12, 0xeb, 0xbf,
+	0xb6, 0xed, 0xa5, 0xb7, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x28, 0x09, 0x80, 0xdc, 0xe2, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/conversion_action_counting_type.pb.go b/googleapis/ads/googleads/v0/enums/conversion_action_counting_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d85d721ec7969c7a28e237ed98b6037f1018f38b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/conversion_action_counting_type.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/conversion_action_counting_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Indicates how conversions for this action will be counted. For more
+// information, see https://support.google.com/google-ads/answer/3438531.
+type ConversionActionCountingTypeEnum_ConversionActionCountingType int32
+
+const (
+	// Not specified.
+	ConversionActionCountingTypeEnum_UNSPECIFIED ConversionActionCountingTypeEnum_ConversionActionCountingType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionCountingTypeEnum_UNKNOWN ConversionActionCountingTypeEnum_ConversionActionCountingType = 1
+	// Count only one conversion per click.
+	ConversionActionCountingTypeEnum_ONE_PER_CLICK ConversionActionCountingTypeEnum_ConversionActionCountingType = 2
+	// Count all conversions per click.
+	ConversionActionCountingTypeEnum_MANY_PER_CLICK ConversionActionCountingTypeEnum_ConversionActionCountingType = 3
+)
+
+var ConversionActionCountingTypeEnum_ConversionActionCountingType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ONE_PER_CLICK",
+	3: "MANY_PER_CLICK",
+}
+var ConversionActionCountingTypeEnum_ConversionActionCountingType_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"ONE_PER_CLICK":  2,
+	"MANY_PER_CLICK": 3,
+}
+
+func (x ConversionActionCountingTypeEnum_ConversionActionCountingType) String() string {
+	return proto.EnumName(ConversionActionCountingTypeEnum_ConversionActionCountingType_name, int32(x))
+}
+func (ConversionActionCountingTypeEnum_ConversionActionCountingType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_counting_type_a5ab9312a541ab18, []int{0, 0}
+}
+
+// Container for enum describing the conversion deduplication mode for
+// conversion optimizer.
+type ConversionActionCountingTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionCountingTypeEnum) Reset()         { *m = ConversionActionCountingTypeEnum{} }
+func (m *ConversionActionCountingTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionCountingTypeEnum) ProtoMessage()    {}
+func (*ConversionActionCountingTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_counting_type_a5ab9312a541ab18, []int{0}
+}
+func (m *ConversionActionCountingTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionCountingTypeEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionCountingTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionCountingTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *ConversionActionCountingTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionCountingTypeEnum.Merge(dst, src)
+}
+func (m *ConversionActionCountingTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionCountingTypeEnum.Size(m)
+}
+func (m *ConversionActionCountingTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionCountingTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionCountingTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ConversionActionCountingTypeEnum)(nil), "google.ads.googleads.v0.enums.ConversionActionCountingTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ConversionActionCountingTypeEnum_ConversionActionCountingType", ConversionActionCountingTypeEnum_ConversionActionCountingType_name, ConversionActionCountingTypeEnum_ConversionActionCountingType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/conversion_action_counting_type.proto", fileDescriptor_conversion_action_counting_type_a5ab9312a541ab18)
+}
+
+var fileDescriptor_conversion_action_counting_type_a5ab9312a541ab18 = []byte{
+	// 289 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xed, 0x06, 0x0a, 0x19, 0x6a, 0xcd, 0xd9, 0x81, 0xdb, 0x03, 0xa4, 0x05, 0x8f, 0x9e,
+	0xd2, 0x58, 0x47, 0x99, 0x66, 0x45, 0xdd, 0x44, 0x29, 0x94, 0xda, 0x86, 0x50, 0x58, 0x93, 0xd2,
+	0xb4, 0x85, 0x3d, 0x81, 0xef, 0xe1, 0xd1, 0x47, 0xf1, 0xe8, 0x13, 0x49, 0xd2, 0xad, 0x78, 0xb1,
+	0x97, 0xe4, 0x23, 0x5f, 0xf2, 0xcb, 0xf7, 0xff, 0x00, 0xe1, 0x52, 0xf2, 0x2d, 0x73, 0x92, 0x4c,
+	0x39, 0x9d, 0xd4, 0xaa, 0x75, 0x1d, 0x26, 0x9a, 0x42, 0x39, 0xa9, 0x14, 0x2d, 0xab, 0x54, 0x2e,
+	0x45, 0x9c, 0xa4, 0xb5, 0xde, 0x52, 0xd9, 0x88, 0x3a, 0x17, 0x3c, 0xae, 0x77, 0x25, 0x43, 0x65,
+	0x25, 0x6b, 0x09, 0xa7, 0xdd, 0x4b, 0x94, 0x64, 0x0a, 0xf5, 0x10, 0xd4, 0xba, 0xc8, 0x40, 0xe6,
+	0x1f, 0x16, 0xb8, 0x22, 0x3d, 0x08, 0x1b, 0x0e, 0xd9, 0x63, 0x9e, 0x77, 0x25, 0xf3, 0x45, 0x53,
+	0xcc, 0x53, 0x70, 0x39, 0x74, 0x07, 0x9e, 0x83, 0xc9, 0x9a, 0x3e, 0x85, 0x3e, 0x09, 0xee, 0x02,
+	0xff, 0xd6, 0x3e, 0x82, 0x13, 0x70, 0xb2, 0xa6, 0x4b, 0xba, 0x7a, 0xa1, 0xb6, 0x05, 0x2f, 0xc0,
+	0xe9, 0x8a, 0xfa, 0x71, 0xe8, 0x3f, 0xc6, 0xe4, 0x3e, 0x20, 0x4b, 0x7b, 0x04, 0x21, 0x38, 0x7b,
+	0xc0, 0xf4, 0xf5, 0xcf, 0xd9, 0xd8, 0xfb, 0xb1, 0xc0, 0x2c, 0x95, 0x05, 0x1a, 0xcc, 0xeb, 0xcd,
+	0x86, 0x82, 0x84, 0x7a, 0xe2, 0xd0, 0x7a, 0xf3, 0xf6, 0x0c, 0x2e, 0xb7, 0x89, 0xe0, 0x48, 0x56,
+	0xdc, 0xe1, 0x4c, 0x98, 0x3e, 0x0e, 0x45, 0x96, 0xb9, 0xfa, 0xa7, 0xd7, 0x1b, 0xb3, 0x7e, 0x8e,
+	0xc6, 0x0b, 0x8c, 0xbf, 0x46, 0xd3, 0x45, 0x87, 0xc2, 0x99, 0x42, 0x9d, 0xd4, 0x6a, 0xe3, 0x22,
+	0x5d, 0x8c, 0xfa, 0x3e, 0xf8, 0x11, 0xce, 0x54, 0xd4, 0xfb, 0xd1, 0xc6, 0x8d, 0x8c, 0xff, 0x7e,
+	0x6c, 0x3e, 0xbd, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x44, 0xe6, 0xb3, 0xcb, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/conversion_action_status.pb.go b/googleapis/ads/googleads/v0/enums/conversion_action_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..973a73c75260eae953c16f1132597538c1044d5f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/conversion_action_status.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/conversion_action_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a conversion action.
+type ConversionActionStatusEnum_ConversionActionStatus int32
+
+const (
+	// Not specified.
+	ConversionActionStatusEnum_UNSPECIFIED ConversionActionStatusEnum_ConversionActionStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionStatusEnum_UNKNOWN ConversionActionStatusEnum_ConversionActionStatus = 1
+	// Conversions will be recorded.
+	ConversionActionStatusEnum_ENABLED ConversionActionStatusEnum_ConversionActionStatus = 2
+	// Conversions will not be recorded.
+	ConversionActionStatusEnum_REMOVED ConversionActionStatusEnum_ConversionActionStatus = 3
+	// Conversions will not be recorded and the conversion action will not
+	// appear in the UI.
+	ConversionActionStatusEnum_HIDDEN ConversionActionStatusEnum_ConversionActionStatus = 4
+)
+
+var ConversionActionStatusEnum_ConversionActionStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+	4: "HIDDEN",
+}
+var ConversionActionStatusEnum_ConversionActionStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+	"HIDDEN":      4,
+}
+
+func (x ConversionActionStatusEnum_ConversionActionStatus) String() string {
+	return proto.EnumName(ConversionActionStatusEnum_ConversionActionStatus_name, int32(x))
+}
+func (ConversionActionStatusEnum_ConversionActionStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_status_b2b7ef780a9c4a8e, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a conversion action.
+type ConversionActionStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionStatusEnum) Reset()         { *m = ConversionActionStatusEnum{} }
+func (m *ConversionActionStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionStatusEnum) ProtoMessage()    {}
+func (*ConversionActionStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_status_b2b7ef780a9c4a8e, []int{0}
+}
+func (m *ConversionActionStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionStatusEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *ConversionActionStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionStatusEnum.Merge(dst, src)
+}
+func (m *ConversionActionStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionStatusEnum.Size(m)
+}
+func (m *ConversionActionStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ConversionActionStatusEnum)(nil), "google.ads.googleads.v0.enums.ConversionActionStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ConversionActionStatusEnum_ConversionActionStatus", ConversionActionStatusEnum_ConversionActionStatus_name, ConversionActionStatusEnum_ConversionActionStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/conversion_action_status.proto", fileDescriptor_conversion_action_status_b2b7ef780a9c4a8e)
+}
+
+var fileDescriptor_conversion_action_status_b2b7ef780a9c4a8e = []byte{
+	// 280 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe4, 0xfc, 0xbc, 0xb2, 0xd4, 0xa2, 0xe2, 0xcc, 0xfc, 0xbc, 0xf8, 0xc4,
+	0xe4, 0x12, 0x10, 0x55, 0x5c, 0x92, 0x58, 0x52, 0x5a, 0xac, 0x57, 0x50, 0x94, 0x5f, 0x92, 0x2f,
+	0x24, 0x0b, 0xd1, 0xa2, 0x97, 0x98, 0x52, 0xac, 0x07, 0xd7, 0xad, 0x57, 0x66, 0xa0, 0x07, 0xd6,
+	0xad, 0x54, 0xc5, 0x25, 0xe5, 0x0c, 0x37, 0xc0, 0x11, 0xac, 0x3f, 0x18, 0xac, 0xdd, 0x35, 0xaf,
+	0x34, 0x57, 0x29, 0x86, 0x4b, 0x0c, 0xbb, 0xac, 0x10, 0x3f, 0x17, 0x77, 0xa8, 0x5f, 0x70, 0x80,
+	0xab, 0xb3, 0xa7, 0x9b, 0xa7, 0xab, 0x8b, 0x00, 0x83, 0x10, 0x37, 0x17, 0x7b, 0xa8, 0x9f, 0xb7,
+	0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0x23, 0x88, 0xe3, 0xea, 0xe7, 0xe8, 0xe4, 0xe3, 0xea, 0x22, 0xc0,
+	0x04, 0xe2, 0x04, 0xb9, 0xfa, 0xfa, 0x87, 0xb9, 0xba, 0x08, 0x30, 0x0b, 0x71, 0x71, 0xb1, 0x79,
+	0x78, 0xba, 0xb8, 0xb8, 0xfa, 0x09, 0xb0, 0x38, 0x9d, 0x61, 0xe4, 0x52, 0x4c, 0xce, 0xcf, 0xd5,
+	0xc3, 0xeb, 0x42, 0x27, 0x69, 0xec, 0x2e, 0x08, 0x00, 0xf9, 0x2e, 0x80, 0x31, 0xca, 0x09, 0xaa,
+	0x3b, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec,
+	0x77, 0x58, 0x68, 0x15, 0x64, 0x16, 0xe3, 0x08, 0x3c, 0x6b, 0x30, 0xb9, 0x88, 0x89, 0xd9, 0xdd,
+	0xd1, 0x71, 0x15, 0x93, 0xac, 0x3b, 0xc4, 0x28, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a,
+	0x33, 0xd0, 0x03, 0x85, 0x45, 0xf1, 0x29, 0x98, 0x7c, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x3e,
+	0x26, 0xcc, 0x20, 0x06, 0x2c, 0x9f, 0xc4, 0x06, 0xb6, 0xd4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff,
+	0x5f, 0x8e, 0x82, 0x7b, 0xb0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/conversion_action_type.pb.go b/googleapis/ads/googleads/v0/enums/conversion_action_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ef7f2caf15bc510d17fdb2bdaf0d4a499b60e441
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/conversion_action_type.pb.go
@@ -0,0 +1,149 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/conversion_action_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible types of a conversion action.
+type ConversionActionTypeEnum_ConversionActionType int32
+
+const (
+	// Not specified.
+	ConversionActionTypeEnum_UNSPECIFIED ConversionActionTypeEnum_ConversionActionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ConversionActionTypeEnum_UNKNOWN ConversionActionTypeEnum_ConversionActionType = 1
+	// Conversions that occur when a user clicks on an ad's call extension.
+	ConversionActionTypeEnum_AD_CALL ConversionActionTypeEnum_ConversionActionType = 2
+	// Conversions that occur when a user on a mobile device clicks a phone
+	// number.
+	ConversionActionTypeEnum_CLICK_TO_CALL ConversionActionTypeEnum_ConversionActionType = 3
+	// Conversions that occur when a user downloads a mobile app from the Google
+	// Play Store.
+	ConversionActionTypeEnum_GOOGLE_PLAY_DOWNLOAD ConversionActionTypeEnum_ConversionActionType = 4
+	// Conversions that occur when a user makes a purchase in an app through
+	// Android billing.
+	ConversionActionTypeEnum_GOOGLE_PLAY_IN_APP_PURCHASE ConversionActionTypeEnum_ConversionActionType = 5
+	// Call conversions that are tracked by the advertiser and uploaded.
+	ConversionActionTypeEnum_UPLOAD_CALLS ConversionActionTypeEnum_ConversionActionType = 6
+	// Conversions that are tracked by the advertiser and uploaded with
+	// attributed clicks.
+	ConversionActionTypeEnum_UPLOAD_CLICKS ConversionActionTypeEnum_ConversionActionType = 7
+	// Conversions that occur on a webpage.
+	ConversionActionTypeEnum_WEBPAGE ConversionActionTypeEnum_ConversionActionType = 8
+	// Conversions that occur when a user calls a dynamically-generated phone
+	// number from an advertiser's website.
+	ConversionActionTypeEnum_WEBSITE_CALL ConversionActionTypeEnum_ConversionActionType = 9
+)
+
+var ConversionActionTypeEnum_ConversionActionType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_CALL",
+	3: "CLICK_TO_CALL",
+	4: "GOOGLE_PLAY_DOWNLOAD",
+	5: "GOOGLE_PLAY_IN_APP_PURCHASE",
+	6: "UPLOAD_CALLS",
+	7: "UPLOAD_CLICKS",
+	8: "WEBPAGE",
+	9: "WEBSITE_CALL",
+}
+var ConversionActionTypeEnum_ConversionActionType_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"AD_CALL":                     2,
+	"CLICK_TO_CALL":               3,
+	"GOOGLE_PLAY_DOWNLOAD":        4,
+	"GOOGLE_PLAY_IN_APP_PURCHASE": 5,
+	"UPLOAD_CALLS":                6,
+	"UPLOAD_CLICKS":               7,
+	"WEBPAGE":                     8,
+	"WEBSITE_CALL":                9,
+}
+
+func (x ConversionActionTypeEnum_ConversionActionType) String() string {
+	return proto.EnumName(ConversionActionTypeEnum_ConversionActionType_name, int32(x))
+}
+func (ConversionActionTypeEnum_ConversionActionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_type_b6eff01350215c1e, []int{0, 0}
+}
+
+// Container for enum describing possible types of a conversion action.
+type ConversionActionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionTypeEnum) Reset()         { *m = ConversionActionTypeEnum{} }
+func (m *ConversionActionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionTypeEnum) ProtoMessage()    {}
+func (*ConversionActionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_type_b6eff01350215c1e, []int{0}
+}
+func (m *ConversionActionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionTypeEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *ConversionActionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionTypeEnum.Merge(dst, src)
+}
+func (m *ConversionActionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionTypeEnum.Size(m)
+}
+func (m *ConversionActionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ConversionActionTypeEnum)(nil), "google.ads.googleads.v0.enums.ConversionActionTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ConversionActionTypeEnum_ConversionActionType", ConversionActionTypeEnum_ConversionActionType_name, ConversionActionTypeEnum_ConversionActionType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/conversion_action_type.proto", fileDescriptor_conversion_action_type_b6eff01350215c1e)
+}
+
+var fileDescriptor_conversion_action_type_b6eff01350215c1e = []byte{
+	// 360 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xd1, 0x4e, 0xbb, 0x30,
+	0x14, 0xc6, 0xff, 0x6c, 0x7f, 0x37, 0xed, 0x34, 0x56, 0xb2, 0x8b, 0x19, 0xb3, 0x18, 0xf7, 0x00,
+	0x85, 0xc4, 0x3b, 0xbd, 0x2a, 0x50, 0x91, 0x8c, 0x40, 0x23, 0x63, 0x44, 0x43, 0x42, 0x70, 0x10,
+	0xb2, 0x64, 0xa3, 0x64, 0xdd, 0x96, 0xec, 0x75, 0xbc, 0xf4, 0x51, 0x76, 0xeb, 0x8b, 0xf8, 0x08,
+	0xa6, 0xc5, 0x2d, 0x5e, 0x4c, 0x6f, 0xe0, 0xeb, 0xf9, 0xfa, 0x3b, 0x5f, 0x7a, 0x0e, 0xb8, 0x2b,
+	0x18, 0x2b, 0x66, 0xb9, 0x96, 0x66, 0x5c, 0xab, 0xa5, 0x50, 0x6b, 0x5d, 0xcb, 0xcb, 0xd5, 0x9c,
+	0x6b, 0x13, 0x56, 0xae, 0xf3, 0x05, 0x9f, 0xb2, 0x32, 0x49, 0x27, 0x4b, 0xf1, 0x5b, 0x6e, 0xaa,
+	0x1c, 0x55, 0x0b, 0xb6, 0x64, 0x6a, 0xbf, 0x06, 0x50, 0x9a, 0x71, 0xb4, 0x67, 0xd1, 0x5a, 0x47,
+	0x92, 0x1d, 0x7c, 0x2a, 0xa0, 0x67, 0xee, 0x79, 0x2c, 0xf1, 0xd1, 0xa6, 0xca, 0x49, 0xb9, 0x9a,
+	0x0f, 0x3e, 0x14, 0xd0, 0x3d, 0x64, 0xaa, 0xe7, 0xa0, 0x13, 0x7a, 0x01, 0x25, 0xa6, 0xf3, 0xe0,
+	0x10, 0x0b, 0xfe, 0x53, 0x3b, 0xa0, 0x1d, 0x7a, 0x43, 0xcf, 0x8f, 0x3c, 0xa8, 0x88, 0x03, 0xb6,
+	0x12, 0x13, 0xbb, 0x2e, 0x6c, 0xa8, 0x17, 0xe0, 0xcc, 0x74, 0x1d, 0x73, 0x98, 0x8c, 0xfc, 0xba,
+	0xd4, 0x54, 0x7b, 0xa0, 0x6b, 0xfb, 0xbe, 0xed, 0x92, 0x84, 0xba, 0xf8, 0x39, 0xb1, 0xfc, 0xc8,
+	0x73, 0x7d, 0x6c, 0xc1, 0xff, 0xea, 0x35, 0xb8, 0xfa, 0xe9, 0x38, 0x5e, 0x82, 0x29, 0x4d, 0x68,
+	0xf8, 0x64, 0x3e, 0xe2, 0x80, 0xc0, 0x23, 0x15, 0x82, 0xd3, 0x90, 0x8a, 0xcb, 0xb2, 0x57, 0x00,
+	0x5b, 0xa2, 0xff, 0xae, 0x22, 0x62, 0x02, 0xd8, 0x16, 0xf9, 0x11, 0x31, 0x28, 0xb6, 0x09, 0x3c,
+	0x16, 0x44, 0x44, 0x8c, 0xc0, 0x19, 0x91, 0x3a, 0xfe, 0xc4, 0xd8, 0x2a, 0xe0, 0x66, 0xc2, 0xe6,
+	0xe8, 0xcf, 0xc1, 0x18, 0x97, 0x87, 0x1e, 0x4e, 0xc5, 0x48, 0xa9, 0xf2, 0x62, 0x7c, 0xb3, 0x05,
+	0x9b, 0xa5, 0x65, 0x81, 0xd8, 0xa2, 0xd0, 0x8a, 0xbc, 0x94, 0x03, 0xdf, 0x2d, 0xa8, 0x9a, 0xf2,
+	0x5f, 0xf6, 0x75, 0x2f, 0xbf, 0x6f, 0x8d, 0xa6, 0x8d, 0xf1, 0x7b, 0xa3, 0x6f, 0xd7, 0xad, 0x70,
+	0xc6, 0x51, 0x2d, 0x85, 0x1a, 0xeb, 0x48, 0x6c, 0x80, 0x6f, 0x77, 0x7e, 0x8c, 0x33, 0x1e, 0xef,
+	0xfd, 0x78, 0xac, 0xc7, 0xd2, 0x7f, 0x6d, 0xc9, 0xd0, 0xdb, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x2c, 0xd4, 0xfc, 0x8a, 0x23, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/criterion_category_channel_availability_mode.pb.go b/googleapis/ads/googleads/v0/enums/criterion_category_channel_availability_mode.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..08a50cae25ce800962a6be121481c67ee2a8f002
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/criterion_category_channel_availability_mode.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/criterion_category_channel_availability_mode.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum containing the possible CriterionCategoryChannelAvailabilityMode.
+type CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode int32
+
+const (
+	// Not specified.
+	CriterionCategoryChannelAvailabilityModeEnum_UNSPECIFIED CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 0
+	// Used for return value only. Represents value unknown in this version.
+	CriterionCategoryChannelAvailabilityModeEnum_UNKNOWN CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 1
+	// The category is available to campaigns of all channel types and subtypes.
+	CriterionCategoryChannelAvailabilityModeEnum_ALL_CHANNELS CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 2
+	// The category is available to campaigns of a specific channel type,
+	// including all subtypes under it.
+	CriterionCategoryChannelAvailabilityModeEnum_CHANNEL_TYPE_AND_ALL_SUBTYPES CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 3
+	// The category is available to campaigns of a specific channel type and
+	// subtype(s).
+	CriterionCategoryChannelAvailabilityModeEnum_CHANNEL_TYPE_AND_SUBSET_SUBTYPES CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode = 4
+)
+
+var CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ALL_CHANNELS",
+	3: "CHANNEL_TYPE_AND_ALL_SUBTYPES",
+	4: "CHANNEL_TYPE_AND_SUBSET_SUBTYPES",
+}
+var CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_value = map[string]int32{
+	"UNSPECIFIED":                      0,
+	"UNKNOWN":                          1,
+	"ALL_CHANNELS":                     2,
+	"CHANNEL_TYPE_AND_ALL_SUBTYPES":    3,
+	"CHANNEL_TYPE_AND_SUBSET_SUBTYPES": 4,
+}
+
+func (x CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode) String() string {
+	return proto.EnumName(CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_name, int32(x))
+}
+func (CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_category_channel_availability_mode_9b4137a1b0eff9b7, []int{0, 0}
+}
+
+// Describes channel availability mode for a criterion availability - whether
+// the availability is meant to include all advertising channels, or a
+// particular channel with all its channel subtypes, or a channel with a certain
+// subset of channel subtypes.
+type CriterionCategoryChannelAvailabilityModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionCategoryChannelAvailabilityModeEnum) Reset() {
+	*m = CriterionCategoryChannelAvailabilityModeEnum{}
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*CriterionCategoryChannelAvailabilityModeEnum) ProtoMessage() {}
+func (*CriterionCategoryChannelAvailabilityModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_category_channel_availability_mode_9b4137a1b0eff9b7, []int{0}
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Unmarshal(m, b)
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Marshal(b, m, deterministic)
+}
+func (dst *CriterionCategoryChannelAvailabilityModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Merge(dst, src)
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.Size(m)
+}
+func (m *CriterionCategoryChannelAvailabilityModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryChannelAvailabilityModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CriterionCategoryChannelAvailabilityModeEnum)(nil), "google.ads.googleads.v0.enums.CriterionCategoryChannelAvailabilityModeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode", CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_name, CriterionCategoryChannelAvailabilityModeEnum_CriterionCategoryChannelAvailabilityMode_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/criterion_category_channel_availability_mode.proto", fileDescriptor_criterion_category_channel_availability_mode_9b4137a1b0eff9b7)
+}
+
+var fileDescriptor_criterion_category_channel_availability_mode_9b4137a1b0eff9b7 = []byte{
+	// 332 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x4b, 0xc3, 0x30,
+	0x1c, 0xc5, 0xed, 0x26, 0x0a, 0x99, 0x60, 0xe9, 0x7d, 0xe0, 0x86, 0x07, 0x0f, 0x9a, 0x16, 0x3c,
+	0x7a, 0x4a, 0xbb, 0x3a, 0x87, 0x33, 0x16, 0xba, 0x4e, 0x94, 0x42, 0xc8, 0xda, 0x10, 0x0b, 0x6d,
+	0x32, 0x9a, 0x6e, 0xb0, 0xaf, 0xa3, 0x37, 0x3f, 0x8a, 0x67, 0xcf, 0x7e, 0x16, 0x49, 0xbb, 0x4d,
+	0x41, 0x94, 0x5d, 0xca, 0xfb, 0xf3, 0x5e, 0x7f, 0xe1, 0xff, 0xfe, 0x20, 0xe0, 0x52, 0xf2, 0x9c,
+	0xd9, 0x34, 0x55, 0x76, 0x23, 0xb5, 0x5a, 0x3a, 0x36, 0x13, 0x8b, 0x42, 0xd9, 0x49, 0x99, 0x55,
+	0xac, 0xcc, 0xa4, 0x20, 0x09, 0xad, 0x18, 0x97, 0xe5, 0x8a, 0x24, 0xcf, 0x54, 0x08, 0x96, 0x13,
+	0xba, 0xa4, 0x59, 0x4e, 0x67, 0x59, 0x9e, 0x55, 0x2b, 0x52, 0xc8, 0x94, 0xc1, 0x79, 0x29, 0x2b,
+	0x69, 0x75, 0x1b, 0x0c, 0xa4, 0xa9, 0x82, 0x5b, 0x22, 0x5c, 0x3a, 0xb0, 0x26, 0xf6, 0x3f, 0x0c,
+	0x70, 0xee, 0x6d, 0xa8, 0xde, 0x1a, 0xea, 0x35, 0x4c, 0xf4, 0x03, 0x79, 0x27, 0x53, 0xe6, 0x8b,
+	0x45, 0xd1, 0x7f, 0x35, 0xc0, 0xd9, 0xae, 0x3f, 0x58, 0xc7, 0xa0, 0x13, 0xe1, 0x30, 0xf0, 0xbd,
+	0xd1, 0xf5, 0xc8, 0x1f, 0x98, 0x7b, 0x56, 0x07, 0x1c, 0x46, 0xf8, 0x16, 0xdf, 0x3f, 0x60, 0xd3,
+	0xb0, 0x4c, 0x70, 0x84, 0xc6, 0x63, 0xe2, 0xdd, 0x20, 0x8c, 0xfd, 0x71, 0x68, 0xb6, 0xac, 0x1e,
+	0xe8, 0xae, 0x27, 0x32, 0x79, 0x0c, 0x7c, 0x82, 0xf0, 0x80, 0xe8, 0x48, 0x18, 0xb9, 0x7a, 0x0e,
+	0xcd, 0xb6, 0x75, 0x0a, 0x4e, 0x7e, 0x45, 0xc2, 0xc8, 0x0d, 0xfd, 0xc9, 0x77, 0x6a, 0xdf, 0xfd,
+	0x34, 0x40, 0x2f, 0x91, 0x05, 0xfc, 0x77, 0x79, 0xf7, 0x62, 0xd7, 0x45, 0x02, 0x5d, 0x65, 0x60,
+	0x3c, 0xb9, 0x6b, 0x1e, 0x97, 0x39, 0x15, 0x1c, 0xca, 0x92, 0xdb, 0x9c, 0x89, 0xba, 0xe8, 0xcd,
+	0xb9, 0xe6, 0x99, 0xfa, 0xe3, 0x7a, 0x57, 0xf5, 0xf7, 0xa5, 0xd5, 0x1e, 0x22, 0xf4, 0xd6, 0xea,
+	0x0e, 0x1b, 0x14, 0x4a, 0x15, 0x6c, 0xa4, 0x56, 0x53, 0x07, 0xea, 0x96, 0xd5, 0xfb, 0xc6, 0x8f,
+	0x51, 0xaa, 0xe2, 0xad, 0x1f, 0x4f, 0x9d, 0xb8, 0xf6, 0x67, 0x07, 0xf5, 0xa3, 0x97, 0x5f, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0x00, 0xc3, 0x3f, 0x00, 0x31, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/criterion_category_locale_availability_mode.pb.go b/googleapis/ads/googleads/v0/enums/criterion_category_locale_availability_mode.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b83cbc56effc1e211995574dea175e3a9fee6508
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/criterion_category_locale_availability_mode.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/criterion_category_locale_availability_mode.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum containing the possible CriterionCategoryLocaleAvailabilityMode.
+type CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode int32
+
+const (
+	// Not specified.
+	CriterionCategoryLocaleAvailabilityModeEnum_UNSPECIFIED CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 0
+	// Used for return value only. Represents value unknown in this version.
+	CriterionCategoryLocaleAvailabilityModeEnum_UNKNOWN CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 1
+	// The category is available to campaigns of all locales.
+	CriterionCategoryLocaleAvailabilityModeEnum_ALL_LOCALES CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 2
+	// The category is available to campaigns within a list of countries,
+	// regardless of language.
+	CriterionCategoryLocaleAvailabilityModeEnum_COUNTRY_AND_ALL_LANGUAGES CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 3
+	// The category is available to campaigns within a list of languages,
+	// regardless of country.
+	CriterionCategoryLocaleAvailabilityModeEnum_LANGUAGE_AND_ALL_COUNTRIES CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 4
+	// The category is available to campaigns within a list of country, language
+	// pairs.
+	CriterionCategoryLocaleAvailabilityModeEnum_COUNTRY_AND_LANGUAGE CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode = 5
+)
+
+var CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ALL_LOCALES",
+	3: "COUNTRY_AND_ALL_LANGUAGES",
+	4: "LANGUAGE_AND_ALL_COUNTRIES",
+	5: "COUNTRY_AND_LANGUAGE",
+}
+var CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"ALL_LOCALES":                2,
+	"COUNTRY_AND_ALL_LANGUAGES":  3,
+	"LANGUAGE_AND_ALL_COUNTRIES": 4,
+	"COUNTRY_AND_LANGUAGE":       5,
+}
+
+func (x CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode) String() string {
+	return proto.EnumName(CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_name, int32(x))
+}
+func (CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_category_locale_availability_mode_3ad4b9809399a3b4, []int{0, 0}
+}
+
+// Describes locale availabilty mode for a criterion availability - whether
+// it's available globally, or a particular country with all languages, or a
+// particular language with all countries, or a country-language pair.
+type CriterionCategoryLocaleAvailabilityModeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) Reset() {
+	*m = CriterionCategoryLocaleAvailabilityModeEnum{}
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*CriterionCategoryLocaleAvailabilityModeEnum) ProtoMessage() {}
+func (*CriterionCategoryLocaleAvailabilityModeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_category_locale_availability_mode_3ad4b9809399a3b4, []int{0}
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Unmarshal(m, b)
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Marshal(b, m, deterministic)
+}
+func (dst *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Merge(dst, src)
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.Size(m)
+}
+func (m *CriterionCategoryLocaleAvailabilityModeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionCategoryLocaleAvailabilityModeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CriterionCategoryLocaleAvailabilityModeEnum)(nil), "google.ads.googleads.v0.enums.CriterionCategoryLocaleAvailabilityModeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode", CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_name, CriterionCategoryLocaleAvailabilityModeEnum_CriterionCategoryLocaleAvailabilityMode_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/criterion_category_locale_availability_mode.proto", fileDescriptor_criterion_category_locale_availability_mode_3ad4b9809399a3b4)
+}
+
+var fileDescriptor_criterion_category_locale_availability_mode_3ad4b9809399a3b4 = []byte{
+	// 341 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc7, 0xed, 0xe6, 0x1f, 0xc8, 0x0e, 0x96, 0xe2, 0x41, 0x85, 0x09, 0xee, 0xe2, 0x41, 0x49,
+	0x0b, 0x1e, 0x3d, 0x65, 0x5d, 0x2d, 0xc3, 0x9a, 0x0e, 0x6b, 0x27, 0x4a, 0x21, 0x64, 0x6d, 0x08,
+	0x85, 0xb6, 0x19, 0x4d, 0x37, 0xd8, 0xeb, 0x78, 0xf4, 0xe6, 0x6b, 0xf8, 0x0e, 0x1e, 0x7c, 0x13,
+	0x69, 0xba, 0x8e, 0x5d, 0x94, 0x5d, 0xca, 0xb7, 0x7c, 0x7e, 0xf9, 0x84, 0x7c, 0x7f, 0xc0, 0xe7,
+	0x42, 0xf0, 0x8c, 0x99, 0x34, 0x91, 0x66, 0x13, 0xeb, 0xb4, 0xb4, 0x4c, 0x56, 0x2c, 0x72, 0x69,
+	0xc6, 0x65, 0x5a, 0xb1, 0x32, 0x15, 0x05, 0x89, 0x69, 0xc5, 0xb8, 0x28, 0x57, 0x24, 0x13, 0x31,
+	0xcd, 0x18, 0xa1, 0x4b, 0x9a, 0x66, 0x74, 0x96, 0x66, 0x69, 0xb5, 0x22, 0xb9, 0x48, 0x18, 0x9c,
+	0x97, 0xa2, 0x12, 0x46, 0xbf, 0xb1, 0x40, 0x9a, 0x48, 0xb8, 0x11, 0xc2, 0xa5, 0x05, 0x95, 0x70,
+	0xf0, 0xa3, 0x81, 0x6b, 0xbb, 0x95, 0xda, 0x6b, 0xa7, 0xa7, 0x94, 0x68, 0xcb, 0xf8, 0x28, 0x12,
+	0xe6, 0x14, 0x8b, 0x7c, 0xf0, 0xa9, 0x81, 0xab, 0x1d, 0xe7, 0x8d, 0x63, 0xd0, 0x0b, 0x71, 0x30,
+	0x71, 0xec, 0xf1, 0xfd, 0xd8, 0x19, 0xe9, 0x7b, 0x46, 0x0f, 0x1c, 0x85, 0xf8, 0x01, 0xfb, 0x2f,
+	0x58, 0xd7, 0x6a, 0x8a, 0x3c, 0x8f, 0x78, 0xbe, 0x8d, 0x3c, 0x27, 0xd0, 0x3b, 0x46, 0x1f, 0x9c,
+	0xd9, 0x7e, 0x88, 0x9f, 0x9f, 0x5e, 0x09, 0xc2, 0x23, 0xa2, 0x20, 0xc2, 0x6e, 0x88, 0x5c, 0x27,
+	0xd0, 0xbb, 0xc6, 0x05, 0x38, 0x6f, 0x7f, 0x37, 0xbc, 0x99, 0x1f, 0x3b, 0x81, 0xbe, 0x6f, 0x9c,
+	0x82, 0x93, 0xed, 0xe3, 0xed, 0xac, 0x7e, 0x30, 0xfc, 0xd6, 0xc0, 0x65, 0x2c, 0x72, 0xf8, 0x6f,
+	0x13, 0xc3, 0x9b, 0x1d, 0x9f, 0x35, 0xa9, 0x6b, 0x9d, 0x68, 0x6f, 0xc3, 0xb5, 0x8e, 0x8b, 0x8c,
+	0x16, 0x1c, 0x8a, 0x92, 0x9b, 0x9c, 0x15, 0xaa, 0xf4, 0x76, 0x73, 0xf3, 0x54, 0xfe, 0xb1, 0xc8,
+	0x3b, 0xf5, 0x7d, 0xef, 0x74, 0x5d, 0x84, 0x3e, 0x3a, 0x7d, 0xb7, 0x51, 0xa1, 0x44, 0xc2, 0x26,
+	0xd6, 0x69, 0x6a, 0xc1, 0xba, 0x72, 0xf9, 0xd5, 0xf2, 0x08, 0x25, 0x32, 0xda, 0xf0, 0x68, 0x6a,
+	0x45, 0x8a, 0xcf, 0x0e, 0xd5, 0xa5, 0xb7, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xfc, 0x96,
+	0x5b, 0x3c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/criterion_type.pb.go b/googleapis/ads/googleads/v0/enums/criterion_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9316cb32bbc083cb7f39c8d9c1c39c12980221ae
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/criterion_type.pb.go
@@ -0,0 +1,203 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/criterion_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible criterion types.
+type CriterionTypeEnum_CriterionType int32
+
+const (
+	// Not specified.
+	CriterionTypeEnum_UNSPECIFIED CriterionTypeEnum_CriterionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CriterionTypeEnum_UNKNOWN CriterionTypeEnum_CriterionType = 1
+	// Keyword. e.g. 'mars cruise'.
+	CriterionTypeEnum_KEYWORD CriterionTypeEnum_CriterionType = 2
+	// Placement, aka Website. e.g. 'www.flowers4sale.com'
+	CriterionTypeEnum_PLACEMENT CriterionTypeEnum_CriterionType = 3
+	// Devices to target.
+	CriterionTypeEnum_DEVICE CriterionTypeEnum_CriterionType = 6
+	// Locations to target.
+	CriterionTypeEnum_LOCATION CriterionTypeEnum_CriterionType = 7
+	// Listing groups to target.
+	CriterionTypeEnum_LISTING_GROUP CriterionTypeEnum_CriterionType = 8
+	// Ad Schedule.
+	CriterionTypeEnum_AD_SCHEDULE CriterionTypeEnum_CriterionType = 9
+	// Age range.
+	CriterionTypeEnum_AGE_RANGE CriterionTypeEnum_CriterionType = 10
+	// Gender.
+	CriterionTypeEnum_GENDER CriterionTypeEnum_CriterionType = 11
+	// Income Range.
+	CriterionTypeEnum_INCOME_RANGE CriterionTypeEnum_CriterionType = 12
+	// Parental status.
+	CriterionTypeEnum_PARENTAL_STATUS CriterionTypeEnum_CriterionType = 13
+	// YouTube Video.
+	CriterionTypeEnum_YOUTUBE_VIDEO CriterionTypeEnum_CriterionType = 14
+	// YouTube Channel.
+	CriterionTypeEnum_YOUTUBE_CHANNEL CriterionTypeEnum_CriterionType = 15
+	// User list.
+	CriterionTypeEnum_USER_LIST CriterionTypeEnum_CriterionType = 16
+	// Proximity.
+	CriterionTypeEnum_PROXIMITY CriterionTypeEnum_CriterionType = 17
+	// A topic target on the display network (e.g. "Pets & Animals").
+	CriterionTypeEnum_TOPIC CriterionTypeEnum_CriterionType = 18
+	// Listing scope to target.
+	CriterionTypeEnum_LISTING_SCOPE CriterionTypeEnum_CriterionType = 19
+	// Language.
+	CriterionTypeEnum_LANGUAGE CriterionTypeEnum_CriterionType = 20
+	// IpBlock.
+	CriterionTypeEnum_IP_BLOCK CriterionTypeEnum_CriterionType = 21
+	// Content Label for category exclusion.
+	CriterionTypeEnum_CONTENT_LABEL CriterionTypeEnum_CriterionType = 22
+	// Carrier.
+	CriterionTypeEnum_CARRIER CriterionTypeEnum_CriterionType = 23
+	// A category the user is interested in.
+	CriterionTypeEnum_USER_INTEREST CriterionTypeEnum_CriterionType = 24
+)
+
+var CriterionTypeEnum_CriterionType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "KEYWORD",
+	3:  "PLACEMENT",
+	6:  "DEVICE",
+	7:  "LOCATION",
+	8:  "LISTING_GROUP",
+	9:  "AD_SCHEDULE",
+	10: "AGE_RANGE",
+	11: "GENDER",
+	12: "INCOME_RANGE",
+	13: "PARENTAL_STATUS",
+	14: "YOUTUBE_VIDEO",
+	15: "YOUTUBE_CHANNEL",
+	16: "USER_LIST",
+	17: "PROXIMITY",
+	18: "TOPIC",
+	19: "LISTING_SCOPE",
+	20: "LANGUAGE",
+	21: "IP_BLOCK",
+	22: "CONTENT_LABEL",
+	23: "CARRIER",
+	24: "USER_INTEREST",
+}
+var CriterionTypeEnum_CriterionType_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"KEYWORD":         2,
+	"PLACEMENT":       3,
+	"DEVICE":          6,
+	"LOCATION":        7,
+	"LISTING_GROUP":   8,
+	"AD_SCHEDULE":     9,
+	"AGE_RANGE":       10,
+	"GENDER":          11,
+	"INCOME_RANGE":    12,
+	"PARENTAL_STATUS": 13,
+	"YOUTUBE_VIDEO":   14,
+	"YOUTUBE_CHANNEL": 15,
+	"USER_LIST":       16,
+	"PROXIMITY":       17,
+	"TOPIC":           18,
+	"LISTING_SCOPE":   19,
+	"LANGUAGE":        20,
+	"IP_BLOCK":        21,
+	"CONTENT_LABEL":   22,
+	"CARRIER":         23,
+	"USER_INTEREST":   24,
+}
+
+func (x CriterionTypeEnum_CriterionType) String() string {
+	return proto.EnumName(CriterionTypeEnum_CriterionType_name, int32(x))
+}
+func (CriterionTypeEnum_CriterionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_type_f43400bfbfc8f5e1, []int{0, 0}
+}
+
+// The possible types of a criterion.
+type CriterionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionTypeEnum) Reset()         { *m = CriterionTypeEnum{} }
+func (m *CriterionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CriterionTypeEnum) ProtoMessage()    {}
+func (*CriterionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_type_f43400bfbfc8f5e1, []int{0}
+}
+func (m *CriterionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionTypeEnum.Unmarshal(m, b)
+}
+func (m *CriterionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *CriterionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionTypeEnum.Merge(dst, src)
+}
+func (m *CriterionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionTypeEnum.Size(m)
+}
+func (m *CriterionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CriterionTypeEnum)(nil), "google.ads.googleads.v0.enums.CriterionTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CriterionTypeEnum_CriterionType", CriterionTypeEnum_CriterionType_name, CriterionTypeEnum_CriterionType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/criterion_type.proto", fileDescriptor_criterion_type_f43400bfbfc8f5e1)
+}
+
+var fileDescriptor_criterion_type_f43400bfbfc8f5e1 = []byte{
+	// 473 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x6e, 0xda, 0x40,
+	0x10, 0x2e, 0xa0, 0x92, 0xb0, 0x40, 0x19, 0x36, 0xfd, 0xbb, 0xe4, 0xd0, 0x3c, 0x80, 0x8d, 0xda,
+	0x63, 0x4f, 0xeb, 0xf5, 0xd4, 0x59, 0x61, 0x76, 0xad, 0xf5, 0x9a, 0x94, 0x0a, 0xc9, 0xa2, 0xc1,
+	0xb2, 0x90, 0x82, 0x8d, 0x30, 0x89, 0x94, 0xd7, 0xe8, 0x23, 0xf4, 0xd8, 0xd7, 0xe8, 0xad, 0xcf,
+	0xd4, 0x43, 0xb5, 0xa6, 0x8e, 0x9a, 0x43, 0x73, 0xb1, 0xbe, 0xdd, 0x6f, 0xbe, 0xf9, 0x76, 0x3c,
+	0x1f, 0x79, 0x9f, 0x97, 0x65, 0x7e, 0x93, 0xb9, 0xab, 0x75, 0xe5, 0x1e, 0xa1, 0x45, 0x77, 0x13,
+	0x37, 0x2b, 0x6e, 0xb7, 0x95, 0x7b, 0xbd, 0xdf, 0x1c, 0xb2, 0xfd, 0xa6, 0x2c, 0xd2, 0xc3, 0xfd,
+	0x2e, 0x73, 0x76, 0xfb, 0xf2, 0x50, 0xd2, 0xf3, 0x63, 0xa1, 0xb3, 0x5a, 0x57, 0xce, 0x83, 0xc6,
+	0xb9, 0x9b, 0x38, 0xb5, 0xe6, 0xe2, 0x5b, 0x87, 0x8c, 0x79, 0xa3, 0x33, 0xf7, 0xbb, 0x0c, 0x8b,
+	0xdb, 0xed, 0xc5, 0xef, 0x36, 0x19, 0x3e, 0xba, 0xa5, 0x23, 0xd2, 0x4f, 0x64, 0x1c, 0x21, 0x17,
+	0x9f, 0x04, 0xfa, 0xf0, 0x8c, 0xf6, 0xc9, 0x49, 0x22, 0xa7, 0x52, 0x5d, 0x49, 0x68, 0xd9, 0xc3,
+	0x14, 0x17, 0x57, 0x4a, 0xfb, 0xd0, 0xa6, 0x43, 0xd2, 0x8b, 0x42, 0xc6, 0x71, 0x86, 0xd2, 0x40,
+	0x87, 0x12, 0xd2, 0xf5, 0x71, 0x2e, 0x38, 0x42, 0x97, 0x0e, 0xc8, 0x69, 0xa8, 0x38, 0x33, 0x42,
+	0x49, 0x38, 0xa1, 0x63, 0x32, 0x0c, 0x45, 0x6c, 0x84, 0x0c, 0xd2, 0x40, 0xab, 0x24, 0x82, 0x53,
+	0x6b, 0xc3, 0xfc, 0x34, 0xe6, 0x97, 0xe8, 0x27, 0x21, 0x42, 0xcf, 0x36, 0x63, 0x01, 0xa6, 0x9a,
+	0xc9, 0x00, 0x81, 0xd8, 0x66, 0x01, 0x4a, 0x1f, 0x35, 0xf4, 0x29, 0x90, 0x81, 0x90, 0x5c, 0xcd,
+	0x1a, 0x76, 0x40, 0xcf, 0xc8, 0x28, 0x62, 0x1a, 0xa5, 0x61, 0x61, 0x1a, 0x1b, 0x66, 0x92, 0x18,
+	0x86, 0xd6, 0x65, 0xa1, 0x12, 0x93, 0x78, 0x98, 0xce, 0x85, 0x8f, 0x0a, 0x5e, 0xd8, 0xba, 0xe6,
+	0x8a, 0x5f, 0x32, 0x29, 0x31, 0x84, 0x91, 0x75, 0x4a, 0x62, 0xd4, 0xa9, 0x7d, 0x12, 0x40, 0x3d,
+	0x85, 0x56, 0x9f, 0xc5, 0x4c, 0x98, 0x05, 0x8c, 0x69, 0x8f, 0x3c, 0x37, 0x2a, 0x12, 0x1c, 0xe8,
+	0xbf, 0xcf, 0x8e, 0xb9, 0x8a, 0x10, 0xce, 0xea, 0xb9, 0x98, 0x0c, 0x12, 0x16, 0x20, 0xbc, 0xb4,
+	0x27, 0x11, 0xa5, 0x5e, 0xa8, 0xf8, 0x14, 0x5e, 0xd9, 0x72, 0xae, 0xa4, 0x41, 0x69, 0xd2, 0x90,
+	0x79, 0x18, 0xc2, 0x6b, 0xfb, 0xbb, 0x38, 0xd3, 0x5a, 0xa0, 0x86, 0x37, 0x96, 0xaf, 0x7d, 0x85,
+	0x34, 0xa8, 0x31, 0x36, 0xf0, 0xd6, 0xfb, 0xd9, 0x22, 0xef, 0xae, 0xcb, 0xad, 0xf3, 0xe4, 0xea,
+	0x3c, 0xfa, 0x68, 0x43, 0x91, 0xdd, 0x76, 0xd4, 0xfa, 0xe2, 0xfd, 0x15, 0xe5, 0xe5, 0xcd, 0xaa,
+	0xc8, 0x9d, 0x72, 0x9f, 0xbb, 0x79, 0x56, 0xd4, 0x59, 0x68, 0x32, 0xb3, 0xdb, 0x54, 0xff, 0x89,
+	0xd0, 0xc7, 0xfa, 0xfb, 0xbd, 0xdd, 0x09, 0x18, 0xfb, 0xd1, 0x3e, 0x0f, 0x8e, 0xad, 0xd8, 0xba,
+	0x72, 0x8e, 0xd0, 0xa2, 0xf9, 0xc4, 0xb1, 0x19, 0xa9, 0x7e, 0x35, 0xfc, 0x92, 0xad, 0xab, 0xe5,
+	0x03, 0xbf, 0x9c, 0x4f, 0x96, 0x35, 0xff, 0xb5, 0x5b, 0x9b, 0x7e, 0xf8, 0x13, 0x00, 0x00, 0xff,
+	0xff, 0xd0, 0xd6, 0x60, 0x96, 0xb6, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/custom_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/custom_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..263800cdc853020149a5ed9d2561b0075e8e5f81
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/custom_placeholder_field.pb.go
@@ -0,0 +1,225 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/custom_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Custom placeholder fields.
+type CustomPlaceholderFieldEnum_CustomPlaceholderField int32
+
+const (
+	// Not specified.
+	CustomPlaceholderFieldEnum_UNSPECIFIED CustomPlaceholderFieldEnum_CustomPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomPlaceholderFieldEnum_UNKNOWN CustomPlaceholderFieldEnum_CustomPlaceholderField = 1
+	// Data Type: STRING. Required. Combination ID and ID2 must be unique per
+	// offer.
+	CustomPlaceholderFieldEnum_ID CustomPlaceholderFieldEnum_CustomPlaceholderField = 2
+	// Data Type: STRING. Combination ID and ID2 must be unique per offer.
+	CustomPlaceholderFieldEnum_ID2 CustomPlaceholderFieldEnum_CustomPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with product name to be shown
+	// in dynamic ad.
+	CustomPlaceholderFieldEnum_ITEM_TITLE CustomPlaceholderFieldEnum_CustomPlaceholderField = 4
+	// Data Type: STRING. Optional text to be shown in the image ad.
+	CustomPlaceholderFieldEnum_ITEM_SUBTITLE CustomPlaceholderFieldEnum_CustomPlaceholderField = 5
+	// Data Type: STRING. Optional description of the product to be shown in the
+	// ad.
+	CustomPlaceholderFieldEnum_ITEM_DESCRIPTION CustomPlaceholderFieldEnum_CustomPlaceholderField = 6
+	// Data Type: STRING. Full address of your offer or service, including
+	// postal code. This will be used to identify the closest product to the
+	// user when there are multiple offers in the feed that are relevant to the
+	// user.
+	CustomPlaceholderFieldEnum_ITEM_ADDRESS CustomPlaceholderFieldEnum_CustomPlaceholderField = 7
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	CustomPlaceholderFieldEnum_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 8
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	CustomPlaceholderFieldEnum_FORMATTED_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 9
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	CustomPlaceholderFieldEnum_SALE_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 10
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	CustomPlaceholderFieldEnum_FORMATTED_SALE_PRICE CustomPlaceholderFieldEnum_CustomPlaceholderField = 11
+	// Data Type: URL. Image to be displayed in the ad. Highly recommended for
+	// image ads.
+	CustomPlaceholderFieldEnum_IMAGE_URL CustomPlaceholderFieldEnum_CustomPlaceholderField = 12
+	// Data Type: STRING. Used as a recommendation engine signal to serve items
+	// in the same category.
+	CustomPlaceholderFieldEnum_ITEM_CATEGORY CustomPlaceholderFieldEnum_CustomPlaceholderField = 13
+	// Data Type: URL_LIST. Final URLs for the ad when using Upgraded
+	// URLs. User will be redirected to these URLs when they click on an ad, or
+	// when they click on a specific product for ads that have multiple
+	// products.
+	CustomPlaceholderFieldEnum_FINAL_URLS CustomPlaceholderFieldEnum_CustomPlaceholderField = 14
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	CustomPlaceholderFieldEnum_FINAL_MOBILE_URLS CustomPlaceholderFieldEnum_CustomPlaceholderField = 15
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	CustomPlaceholderFieldEnum_TRACKING_URL CustomPlaceholderFieldEnum_CustomPlaceholderField = 16
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	CustomPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS CustomPlaceholderFieldEnum_CustomPlaceholderField = 17
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	CustomPlaceholderFieldEnum_ANDROID_APP_LINK CustomPlaceholderFieldEnum_CustomPlaceholderField = 18
+	// Data Type: STRING_LIST. List of recommended IDs to show together with
+	// this item.
+	CustomPlaceholderFieldEnum_SIMILAR_IDS CustomPlaceholderFieldEnum_CustomPlaceholderField = 19
+	// Data Type: STRING. iOS app link.
+	CustomPlaceholderFieldEnum_IOS_APP_LINK CustomPlaceholderFieldEnum_CustomPlaceholderField = 20
+	// Data Type: INT64. iOS app store ID.
+	CustomPlaceholderFieldEnum_IOS_APP_STORE_ID CustomPlaceholderFieldEnum_CustomPlaceholderField = 21
+)
+
+var CustomPlaceholderFieldEnum_CustomPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ID",
+	3:  "ID2",
+	4:  "ITEM_TITLE",
+	5:  "ITEM_SUBTITLE",
+	6:  "ITEM_DESCRIPTION",
+	7:  "ITEM_ADDRESS",
+	8:  "PRICE",
+	9:  "FORMATTED_PRICE",
+	10: "SALE_PRICE",
+	11: "FORMATTED_SALE_PRICE",
+	12: "IMAGE_URL",
+	13: "ITEM_CATEGORY",
+	14: "FINAL_URLS",
+	15: "FINAL_MOBILE_URLS",
+	16: "TRACKING_URL",
+	17: "CONTEXTUAL_KEYWORDS",
+	18: "ANDROID_APP_LINK",
+	19: "SIMILAR_IDS",
+	20: "IOS_APP_LINK",
+	21: "IOS_APP_STORE_ID",
+}
+var CustomPlaceholderFieldEnum_CustomPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"ID":                   2,
+	"ID2":                  3,
+	"ITEM_TITLE":           4,
+	"ITEM_SUBTITLE":        5,
+	"ITEM_DESCRIPTION":     6,
+	"ITEM_ADDRESS":         7,
+	"PRICE":                8,
+	"FORMATTED_PRICE":      9,
+	"SALE_PRICE":           10,
+	"FORMATTED_SALE_PRICE": 11,
+	"IMAGE_URL":            12,
+	"ITEM_CATEGORY":        13,
+	"FINAL_URLS":           14,
+	"FINAL_MOBILE_URLS":    15,
+	"TRACKING_URL":         16,
+	"CONTEXTUAL_KEYWORDS":  17,
+	"ANDROID_APP_LINK":     18,
+	"SIMILAR_IDS":          19,
+	"IOS_APP_LINK":         20,
+	"IOS_APP_STORE_ID":     21,
+}
+
+func (x CustomPlaceholderFieldEnum_CustomPlaceholderField) String() string {
+	return proto.EnumName(CustomPlaceholderFieldEnum_CustomPlaceholderField_name, int32(x))
+}
+func (CustomPlaceholderFieldEnum_CustomPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_custom_placeholder_field_da1fc5fdf27a9f46, []int{0, 0}
+}
+
+// Values for Custom placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type CustomPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomPlaceholderFieldEnum) Reset()         { *m = CustomPlaceholderFieldEnum{} }
+func (m *CustomPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomPlaceholderFieldEnum) ProtoMessage()    {}
+func (*CustomPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_custom_placeholder_field_da1fc5fdf27a9f46, []int{0}
+}
+func (m *CustomPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *CustomPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *CustomPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *CustomPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomPlaceholderFieldEnum.Size(m)
+}
+func (m *CustomPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CustomPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.CustomPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CustomPlaceholderFieldEnum_CustomPlaceholderField", CustomPlaceholderFieldEnum_CustomPlaceholderField_name, CustomPlaceholderFieldEnum_CustomPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/custom_placeholder_field.proto", fileDescriptor_custom_placeholder_field_da1fc5fdf27a9f46)
+}
+
+var fileDescriptor_custom_placeholder_field_da1fc5fdf27a9f46 = []byte{
+	// 484 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdd, 0x8e, 0x12, 0x31,
+	0x18, 0x15, 0x70, 0x41, 0x3e, 0x96, 0xa5, 0x14, 0x56, 0x8d, 0x66, 0x2f, 0xdc, 0x07, 0x18, 0x88,
+	0x5e, 0xea, 0x4d, 0x99, 0x16, 0xd2, 0x30, 0x4c, 0x27, 0x6d, 0xd9, 0x75, 0x0d, 0x49, 0x83, 0xcc,
+	0x38, 0x6e, 0x02, 0x0c, 0x61, 0x96, 0x7d, 0x1d, 0x13, 0x2f, 0x7d, 0x08, 0x1f, 0xc0, 0xf8, 0x50,
+	0xa6, 0x1d, 0x16, 0xbc, 0x58, 0xbd, 0x69, 0xbe, 0xef, 0x9c, 0xef, 0x9c, 0xfe, 0x1d, 0xf8, 0x90,
+	0x66, 0x59, 0xba, 0x4c, 0x7a, 0xf3, 0x38, 0xef, 0x15, 0xa5, 0xad, 0xee, 0xfb, 0xbd, 0x64, 0xbd,
+	0x5b, 0xe5, 0xbd, 0xc5, 0x2e, 0xbf, 0xcb, 0x56, 0x66, 0xb3, 0x9c, 0x2f, 0x92, 0xaf, 0xd9, 0x32,
+	0x4e, 0xb6, 0xe6, 0xcb, 0x6d, 0xb2, 0x8c, 0xbd, 0xcd, 0x36, 0xbb, 0xcb, 0xf0, 0x45, 0x21, 0xf1,
+	0xe6, 0x71, 0xee, 0x1d, 0xd4, 0xde, 0x7d, 0xdf, 0x73, 0xea, 0xcb, 0x9f, 0x15, 0x78, 0xe5, 0x3b,
+	0x87, 0xe8, 0x68, 0x30, 0xb4, 0x7a, 0xb6, 0xde, 0xad, 0x2e, 0xbf, 0x55, 0xe0, 0xf9, 0xe3, 0x34,
+	0x6e, 0x41, 0x63, 0x1a, 0xaa, 0x88, 0xf9, 0x7c, 0xc8, 0x19, 0x45, 0x4f, 0x70, 0x03, 0x6a, 0xd3,
+	0x70, 0x1c, 0x8a, 0xeb, 0x10, 0x95, 0x70, 0x15, 0xca, 0x9c, 0xa2, 0x32, 0xae, 0x41, 0x85, 0xd3,
+	0xb7, 0xa8, 0x82, 0xcf, 0x00, 0xb8, 0x66, 0x13, 0xa3, 0xb9, 0x0e, 0x18, 0x7a, 0x8a, 0xdb, 0xd0,
+	0x74, 0xbd, 0x9a, 0x0e, 0x0a, 0xe8, 0x04, 0x77, 0x01, 0x39, 0x88, 0x32, 0xe5, 0x4b, 0x1e, 0x69,
+	0x2e, 0x42, 0x54, 0xc5, 0x08, 0x4e, 0x1d, 0x4a, 0x28, 0x95, 0x4c, 0x29, 0x54, 0xc3, 0x75, 0x38,
+	0x89, 0x24, 0xf7, 0x19, 0x7a, 0x86, 0x3b, 0xd0, 0x1a, 0x0a, 0x39, 0x21, 0x5a, 0x33, 0x6a, 0x0a,
+	0xb0, 0x6e, 0xb7, 0x52, 0x24, 0x60, 0xfb, 0x1e, 0xf0, 0x4b, 0xe8, 0x1e, 0x87, 0xfe, 0x62, 0x1a,
+	0xb8, 0x09, 0x75, 0x3e, 0x21, 0x23, 0x66, 0xa6, 0x32, 0x40, 0xa7, 0x87, 0x33, 0xf9, 0x44, 0xb3,
+	0x91, 0x90, 0x37, 0xa8, 0x69, 0xbd, 0x86, 0x3c, 0x24, 0x81, 0x9d, 0x50, 0xe8, 0x0c, 0x9f, 0x43,
+	0xbb, 0xe8, 0x27, 0x62, 0xc0, 0x03, 0x56, 0xc0, 0x2d, 0x7b, 0x48, 0x2d, 0x89, 0x3f, 0xe6, 0xe1,
+	0xc8, 0x79, 0x21, 0xfc, 0x02, 0x3a, 0xbe, 0x08, 0x35, 0xfb, 0xa8, 0xa7, 0x24, 0x30, 0x63, 0x76,
+	0x73, 0x2d, 0x24, 0x55, 0xa8, 0x6d, 0x6f, 0x49, 0x42, 0x2a, 0x05, 0xa7, 0x86, 0x44, 0x91, 0x09,
+	0x78, 0x38, 0x46, 0xd8, 0xbe, 0xa6, 0xe2, 0x13, 0x1e, 0x10, 0x69, 0x38, 0x55, 0xa8, 0xe3, 0xae,
+	0x2d, 0xd4, 0x71, 0xa4, 0xeb, 0x9e, 0x67, 0x8f, 0x28, 0x2d, 0x24, 0x33, 0x9c, 0xa2, 0xf3, 0xc1,
+	0xef, 0x12, 0xbc, 0x59, 0x64, 0x2b, 0xef, 0xbf, 0xdf, 0x3c, 0x78, 0xfd, 0xf8, 0x27, 0x46, 0x36,
+	0x22, 0x51, 0xe9, 0xd3, 0x60, 0xaf, 0x4e, 0xb3, 0xe5, 0x7c, 0x9d, 0x7a, 0xd9, 0x36, 0xed, 0xa5,
+	0xc9, 0xda, 0x05, 0xe8, 0x21, 0x72, 0x9b, 0xdb, 0xfc, 0x1f, 0x09, 0x7c, 0xef, 0xd6, 0xef, 0xe5,
+	0xca, 0x88, 0x90, 0x1f, 0xe5, 0x8b, 0x51, 0x61, 0x45, 0xe2, 0xdc, 0x2b, 0x4a, 0x5b, 0x5d, 0xf5,
+	0x3d, 0x9b, 0xa7, 0xfc, 0xd7, 0x03, 0x3f, 0x23, 0x71, 0x3e, 0x3b, 0xf0, 0xb3, 0xab, 0xfe, 0xcc,
+	0xf1, 0x9f, 0xab, 0x6e, 0xd3, 0x77, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x58, 0x53, 0x00, 0x84,
+	0xf5, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/customer_match_upload_key_type.pb.go b/googleapis/ads/googleads/v0/enums/customer_match_upload_key_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..495f0e3fade53e66843295cf5a2267b4879fb258
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/customer_match_upload_key_type.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/customer_match_upload_key_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible customer match upload key types.
+type CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType int32
+
+const (
+	// Not specified.
+	CustomerMatchUploadKeyTypeEnum_UNSPECIFIED CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 0
+	// Used for return value only. Represents value unknown in this version.
+	CustomerMatchUploadKeyTypeEnum_UNKNOWN CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 1
+	// Members are matched from customer info such as email address, phone
+	// number or physical address.
+	CustomerMatchUploadKeyTypeEnum_CONTACT_INFO CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 2
+	// Members are matched from a user id generated and assigned by the
+	// advertiser.
+	CustomerMatchUploadKeyTypeEnum_CRM_ID CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 3
+	// Members are matched from mobile advertising ids.
+	CustomerMatchUploadKeyTypeEnum_MOBILE_ADVERTISING_ID CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType = 4
+)
+
+var CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CONTACT_INFO",
+	3: "CRM_ID",
+	4: "MOBILE_ADVERTISING_ID",
+}
+var CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"CONTACT_INFO":          2,
+	"CRM_ID":                3,
+	"MOBILE_ADVERTISING_ID": 4,
+}
+
+func (x CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType) String() string {
+	return proto.EnumName(CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_name, int32(x))
+}
+func (CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_customer_match_upload_key_type_49e9fec7ee2e2de4, []int{0, 0}
+}
+
+// Indicates what type of data are the user list's members matched from.
+type CustomerMatchUploadKeyTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerMatchUploadKeyTypeEnum) Reset()         { *m = CustomerMatchUploadKeyTypeEnum{} }
+func (m *CustomerMatchUploadKeyTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerMatchUploadKeyTypeEnum) ProtoMessage()    {}
+func (*CustomerMatchUploadKeyTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_match_upload_key_type_49e9fec7ee2e2de4, []int{0}
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Unmarshal(m, b)
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *CustomerMatchUploadKeyTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Merge(dst, src)
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.Size(m)
+}
+func (m *CustomerMatchUploadKeyTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerMatchUploadKeyTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerMatchUploadKeyTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CustomerMatchUploadKeyTypeEnum)(nil), "google.ads.googleads.v0.enums.CustomerMatchUploadKeyTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType", CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_name, CustomerMatchUploadKeyTypeEnum_CustomerMatchUploadKeyType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/customer_match_upload_key_type.proto", fileDescriptor_customer_match_upload_key_type_49e9fec7ee2e2de4)
+}
+
+var fileDescriptor_customer_match_upload_key_type_49e9fec7ee2e2de4 = []byte{
+	// 315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xf3, 0x30,
+	0x18, 0x86, 0xff, 0x6e, 0x3f, 0x13, 0x32, 0xc1, 0x12, 0xf0, 0x40, 0x61, 0x8a, 0xbb, 0x80, 0xb4,
+	0xe0, 0xa1, 0x47, 0x69, 0xd7, 0x8d, 0x30, 0x97, 0x8e, 0xad, 0x9b, 0x20, 0x85, 0x50, 0xd7, 0x10,
+	0xc5, 0xb5, 0x29, 0x4b, 0x3b, 0xe8, 0x85, 0x78, 0x03, 0x1e, 0x7a, 0x29, 0x1e, 0x79, 0x49, 0x92,
+	0x74, 0xdb, 0x59, 0x3d, 0x09, 0x2f, 0xbc, 0xc9, 0x93, 0xef, 0x7b, 0x80, 0x27, 0xa4, 0x14, 0x5b,
+	0xee, 0x24, 0xa9, 0x72, 0x9a, 0xa8, 0xd3, 0xde, 0x75, 0x78, 0x5e, 0x65, 0xca, 0xd9, 0x54, 0xaa,
+	0x94, 0x19, 0xdf, 0xb1, 0x2c, 0x29, 0x37, 0xaf, 0xac, 0x2a, 0xb6, 0x32, 0x49, 0xd9, 0x3b, 0xaf,
+	0x59, 0x59, 0x17, 0x1c, 0x15, 0x3b, 0x59, 0x4a, 0x38, 0x68, 0x1e, 0xa2, 0x24, 0x55, 0xe8, 0xc4,
+	0x40, 0x7b, 0x17, 0x19, 0xc6, 0xf0, 0xc3, 0x02, 0x37, 0xfe, 0x81, 0x33, 0xd3, 0x98, 0x95, 0xa1,
+	0x4c, 0x79, 0x1d, 0xd5, 0x05, 0x0f, 0xf2, 0x2a, 0x1b, 0x2a, 0x70, 0xdd, 0x7e, 0x03, 0x5e, 0x80,
+	0xfe, 0x8a, 0x2e, 0xe7, 0x81, 0x4f, 0xc6, 0x24, 0x18, 0xd9, 0xff, 0x60, 0x1f, 0x9c, 0xad, 0xe8,
+	0x94, 0x86, 0x4f, 0xd4, 0xb6, 0xa0, 0x0d, 0xce, 0xfd, 0x90, 0x46, 0xd8, 0x8f, 0x18, 0xa1, 0xe3,
+	0xd0, 0xee, 0x40, 0x00, 0x7a, 0xfe, 0x62, 0xc6, 0xc8, 0xc8, 0xee, 0xc2, 0x2b, 0x70, 0x39, 0x0b,
+	0x3d, 0xf2, 0x18, 0x30, 0x3c, 0x5a, 0x07, 0x8b, 0x88, 0x2c, 0x09, 0x9d, 0xe8, 0xea, 0xbf, 0xf7,
+	0x63, 0x81, 0xbb, 0x8d, 0xcc, 0xd0, 0x9f, 0xd3, 0x7b, 0xb7, 0xed, 0x83, 0xcd, 0xf5, 0xf6, 0x73,
+	0xeb, 0xf9, 0xe0, 0x10, 0x09, 0xb9, 0x4d, 0x72, 0x81, 0xe4, 0x4e, 0x38, 0x82, 0xe7, 0xc6, 0xcd,
+	0xd1, 0x69, 0xf1, 0xa6, 0x5a, 0x14, 0x3f, 0x98, 0xf3, 0xb3, 0xd3, 0x9d, 0x60, 0xfc, 0xd5, 0x19,
+	0x4c, 0x1a, 0x14, 0x4e, 0x15, 0x6a, 0xa2, 0x4e, 0x6b, 0x17, 0x69, 0x4d, 0xea, 0xfb, 0xd8, 0xc7,
+	0x38, 0x55, 0xf1, 0xa9, 0x8f, 0xd7, 0x6e, 0x6c, 0xfa, 0x97, 0x9e, 0xf9, 0xf4, 0xfe, 0x37, 0x00,
+	0x00, 0xff, 0xff, 0x99, 0xad, 0x2f, 0x13, 0xd6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/data_driven_model_status.pb.go b/googleapis/ads/googleads/v0/enums/data_driven_model_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ac14f2b4942d43b74f9eb9751c6ba1af6fc1676f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/data_driven_model_status.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/data_driven_model_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates data driven model statuses.
+type DataDrivenModelStatusEnum_DataDrivenModelStatus int32
+
+const (
+	// Not specified.
+	DataDrivenModelStatusEnum_UNSPECIFIED DataDrivenModelStatusEnum_DataDrivenModelStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	DataDrivenModelStatusEnum_UNKNOWN DataDrivenModelStatusEnum_DataDrivenModelStatus = 1
+	// The data driven model is available.
+	DataDrivenModelStatusEnum_AVAILABLE DataDrivenModelStatusEnum_DataDrivenModelStatus = 2
+	// The data driven model is stale. It hasn't been updated for at least 7
+	// days. It is still being used, but will become expired if it does not get
+	// updated for 30 days.
+	DataDrivenModelStatusEnum_STALE DataDrivenModelStatusEnum_DataDrivenModelStatus = 3
+	// The data driven model expired. It hasn't been updated for at least 30
+	// days and cannot be used. Most commonly this is because there hasn't been
+	// the required number of events in a recent 30-day period.
+	DataDrivenModelStatusEnum_EXPIRED DataDrivenModelStatusEnum_DataDrivenModelStatus = 4
+	// The data driven model has never been generated. Most commonly this is
+	// because there has never been the required number of events in any 30-day
+	// period.
+	DataDrivenModelStatusEnum_NEVER_GENERATED DataDrivenModelStatusEnum_DataDrivenModelStatus = 5
+)
+
+var DataDrivenModelStatusEnum_DataDrivenModelStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AVAILABLE",
+	3: "STALE",
+	4: "EXPIRED",
+	5: "NEVER_GENERATED",
+}
+var DataDrivenModelStatusEnum_DataDrivenModelStatus_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"AVAILABLE":       2,
+	"STALE":           3,
+	"EXPIRED":         4,
+	"NEVER_GENERATED": 5,
+}
+
+func (x DataDrivenModelStatusEnum_DataDrivenModelStatus) String() string {
+	return proto.EnumName(DataDrivenModelStatusEnum_DataDrivenModelStatus_name, int32(x))
+}
+func (DataDrivenModelStatusEnum_DataDrivenModelStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_data_driven_model_status_0a8e32904769d8b5, []int{0, 0}
+}
+
+// Container for enum indicating data driven model status.
+type DataDrivenModelStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DataDrivenModelStatusEnum) Reset()         { *m = DataDrivenModelStatusEnum{} }
+func (m *DataDrivenModelStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*DataDrivenModelStatusEnum) ProtoMessage()    {}
+func (*DataDrivenModelStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_data_driven_model_status_0a8e32904769d8b5, []int{0}
+}
+func (m *DataDrivenModelStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DataDrivenModelStatusEnum.Unmarshal(m, b)
+}
+func (m *DataDrivenModelStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DataDrivenModelStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *DataDrivenModelStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DataDrivenModelStatusEnum.Merge(dst, src)
+}
+func (m *DataDrivenModelStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_DataDrivenModelStatusEnum.Size(m)
+}
+func (m *DataDrivenModelStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DataDrivenModelStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DataDrivenModelStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DataDrivenModelStatusEnum)(nil), "google.ads.googleads.v0.enums.DataDrivenModelStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.DataDrivenModelStatusEnum_DataDrivenModelStatus", DataDrivenModelStatusEnum_DataDrivenModelStatus_name, DataDrivenModelStatusEnum_DataDrivenModelStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/data_driven_model_status.proto", fileDescriptor_data_driven_model_status_0a8e32904769d8b5)
+}
+
+var fileDescriptor_data_driven_model_status_0a8e32904769d8b5 = []byte{
+	// 308 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xf3, 0x30,
+	0x18, 0xc6, 0xbf, 0x6e, 0xdf, 0x94, 0x65, 0xc8, 0x4a, 0xc4, 0x03, 0x85, 0x1d, 0xb8, 0x0b, 0x48,
+	0x0b, 0x1e, 0xea, 0x49, 0x6a, 0x5f, 0x47, 0x71, 0xc6, 0xb2, 0x3f, 0x55, 0xa4, 0x50, 0xa2, 0x29,
+	0x61, 0xb0, 0x36, 0x73, 0xe9, 0x7a, 0x19, 0x5e, 0x84, 0x87, 0x5e, 0x8a, 0xde, 0x94, 0x24, 0x75,
+	0x3b, 0x9a, 0x9e, 0x84, 0x07, 0x9e, 0xfc, 0xde, 0xbc, 0xf9, 0xa1, 0x2b, 0xa9, 0x94, 0x5c, 0xe6,
+	0x1e, 0x17, 0xda, 0x6b, 0xa2, 0x49, 0xb5, 0xef, 0xe5, 0xe5, 0xa6, 0xd0, 0x9e, 0xe0, 0x15, 0xcf,
+	0xc4, 0x7a, 0x51, 0xe7, 0x65, 0x56, 0x28, 0x91, 0x2f, 0x33, 0x5d, 0xf1, 0x6a, 0xa3, 0xc9, 0x6a,
+	0xad, 0x2a, 0x85, 0x07, 0x0d, 0x42, 0xb8, 0xd0, 0x64, 0x47, 0x93, 0xda, 0x27, 0x96, 0x1e, 0xbe,
+	0x39, 0xe8, 0x34, 0xe4, 0x15, 0x0f, 0xed, 0x80, 0x3b, 0xc3, 0x4f, 0x2d, 0x0e, 0xe5, 0xa6, 0x18,
+	0xbe, 0xa2, 0x93, 0xbd, 0x25, 0xee, 0xa3, 0xde, 0x9c, 0x4d, 0x63, 0xb8, 0x8e, 0x6e, 0x22, 0x08,
+	0xdd, 0x7f, 0xb8, 0x87, 0x0e, 0xe7, 0xec, 0x96, 0xdd, 0x3f, 0x30, 0xd7, 0xc1, 0x47, 0xa8, 0x4b,
+	0x13, 0x1a, 0x8d, 0x69, 0x30, 0x06, 0xb7, 0x85, 0xbb, 0xa8, 0x33, 0x9d, 0xd1, 0x31, 0xb8, 0x6d,
+	0x73, 0x0d, 0x1e, 0xe3, 0x68, 0x02, 0xa1, 0xfb, 0x1f, 0x1f, 0xa3, 0x3e, 0x83, 0x04, 0x26, 0xd9,
+	0x08, 0x18, 0x4c, 0xe8, 0x0c, 0x42, 0xb7, 0x13, 0x7c, 0x39, 0xe8, 0xfc, 0x45, 0x15, 0xe4, 0xcf,
+	0xb5, 0x83, 0xb3, 0xbd, 0x6b, 0xc5, 0xe6, 0xc7, 0xb1, 0xf3, 0x14, 0xfc, 0xc0, 0x52, 0x2d, 0x79,
+	0x29, 0x89, 0x5a, 0x4b, 0x4f, 0xe6, 0xa5, 0xf5, 0xb1, 0x35, 0xb8, 0x5a, 0xe8, 0x5f, 0x84, 0x5e,
+	0xda, 0xf3, 0xbd, 0xd5, 0x1e, 0x51, 0xfa, 0xd1, 0x1a, 0x8c, 0x9a, 0x51, 0x54, 0x68, 0xd2, 0x44,
+	0x93, 0x12, 0x9f, 0x18, 0x3f, 0xfa, 0x73, 0xdb, 0xa7, 0x54, 0xe8, 0x74, 0xd7, 0xa7, 0x89, 0x9f,
+	0xda, 0xfe, 0xf9, 0xc0, 0x3e, 0x7a, 0xf1, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x5e, 0x3b, 0x28,
+	0xc4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/day_of_week.pb.go b/googleapis/ads/googleads/v0/enums/day_of_week.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..435af0752b9b6b556079c860a0770da3af345a53
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/day_of_week.pb.go
@@ -0,0 +1,136 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/day_of_week.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates days of the week, e.g., "Monday".
+type DayOfWeekEnum_DayOfWeek int32
+
+const (
+	// Not specified.
+	DayOfWeekEnum_UNSPECIFIED DayOfWeekEnum_DayOfWeek = 0
+	// The value is unknown in this version.
+	DayOfWeekEnum_UNKNOWN DayOfWeekEnum_DayOfWeek = 1
+	// Monday.
+	DayOfWeekEnum_MONDAY DayOfWeekEnum_DayOfWeek = 2
+	// Tuesday.
+	DayOfWeekEnum_TUESDAY DayOfWeekEnum_DayOfWeek = 3
+	// Wednesday.
+	DayOfWeekEnum_WEDNESDAY DayOfWeekEnum_DayOfWeek = 4
+	// Thursday.
+	DayOfWeekEnum_THURSDAY DayOfWeekEnum_DayOfWeek = 5
+	// Friday.
+	DayOfWeekEnum_FRIDAY DayOfWeekEnum_DayOfWeek = 6
+	// Saturday.
+	DayOfWeekEnum_SATURDAY DayOfWeekEnum_DayOfWeek = 7
+	// Sunday.
+	DayOfWeekEnum_SUNDAY DayOfWeekEnum_DayOfWeek = 8
+)
+
+var DayOfWeekEnum_DayOfWeek_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MONDAY",
+	3: "TUESDAY",
+	4: "WEDNESDAY",
+	5: "THURSDAY",
+	6: "FRIDAY",
+	7: "SATURDAY",
+	8: "SUNDAY",
+}
+var DayOfWeekEnum_DayOfWeek_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MONDAY":      2,
+	"TUESDAY":     3,
+	"WEDNESDAY":   4,
+	"THURSDAY":    5,
+	"FRIDAY":      6,
+	"SATURDAY":    7,
+	"SUNDAY":      8,
+}
+
+func (x DayOfWeekEnum_DayOfWeek) String() string {
+	return proto.EnumName(DayOfWeekEnum_DayOfWeek_name, int32(x))
+}
+func (DayOfWeekEnum_DayOfWeek) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_day_of_week_8b74b2709672516d, []int{0, 0}
+}
+
+// Container for enumeration of days of the week, e.g., "Monday".
+type DayOfWeekEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DayOfWeekEnum) Reset()         { *m = DayOfWeekEnum{} }
+func (m *DayOfWeekEnum) String() string { return proto.CompactTextString(m) }
+func (*DayOfWeekEnum) ProtoMessage()    {}
+func (*DayOfWeekEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_day_of_week_8b74b2709672516d, []int{0}
+}
+func (m *DayOfWeekEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DayOfWeekEnum.Unmarshal(m, b)
+}
+func (m *DayOfWeekEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DayOfWeekEnum.Marshal(b, m, deterministic)
+}
+func (dst *DayOfWeekEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DayOfWeekEnum.Merge(dst, src)
+}
+func (m *DayOfWeekEnum) XXX_Size() int {
+	return xxx_messageInfo_DayOfWeekEnum.Size(m)
+}
+func (m *DayOfWeekEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DayOfWeekEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DayOfWeekEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DayOfWeekEnum)(nil), "google.ads.googleads.v0.enums.DayOfWeekEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.DayOfWeekEnum_DayOfWeek", DayOfWeekEnum_DayOfWeek_name, DayOfWeekEnum_DayOfWeek_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/day_of_week.proto", fileDescriptor_day_of_week_8b74b2709672516d)
+}
+
+var fileDescriptor_day_of_week_8b74b2709672516d = []byte{
+	// 303 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0x86, 0x32, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc, 0xd2,
+	0xdc, 0x62, 0xfd, 0x94, 0xc4, 0xca, 0xf8, 0xfc, 0xb4, 0xf8, 0xf2, 0xd4, 0xd4, 0x6c, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x2a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x06, 0xbd,
+	0x32, 0x03, 0x3d, 0xb0, 0x06, 0xa5, 0xe9, 0x8c, 0x5c, 0xbc, 0x2e, 0x89, 0x95, 0xfe, 0x69, 0xe1,
+	0xa9, 0xa9, 0xd9, 0xae, 0x79, 0xa5, 0xb9, 0x4a, 0xad, 0x8c, 0x5c, 0x9c, 0x70, 0x11, 0x21, 0x7e,
+	0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21,
+	0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x2e, 0x2e, 0x36,
+	0x5f, 0x7f, 0x3f, 0x17, 0xc7, 0x48, 0x01, 0x26, 0x90, 0x44, 0x48, 0xa8, 0x6b, 0x30, 0x88, 0xc3,
+	0x2c, 0xc4, 0xcb, 0xc5, 0x19, 0xee, 0xea, 0xe2, 0x07, 0xe1, 0xb2, 0x08, 0xf1, 0x70, 0x71, 0x84,
+	0x78, 0x84, 0x06, 0x81, 0x79, 0xac, 0x20, 0x5d, 0x6e, 0x41, 0x9e, 0x20, 0x36, 0x1b, 0x48, 0x26,
+	0xd8, 0x31, 0x24, 0x34, 0x08, 0xc4, 0x63, 0x07, 0xc9, 0x04, 0x87, 0x82, 0xcd, 0xe3, 0x70, 0xda,
+	0xcf, 0xc8, 0xa5, 0x98, 0x9c, 0x9f, 0xab, 0x87, 0xd7, 0xfd, 0x4e, 0x7c, 0x70, 0xa7, 0x06, 0x80,
+	0xbc, 0x1b, 0xc0, 0x18, 0xe5, 0x04, 0xd5, 0x90, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f,
+	0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0x0e, 0x0c, 0x58, 0x88, 0x15, 0x64, 0x16, 0xe3, 0x08, 0x40,
+	0x6b, 0x30, 0xb9, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0xac, 0x3b, 0xc4, 0x28, 0xc7,
+	0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x03, 0x05, 0x54, 0xf1, 0x29, 0x98, 0x7c,
+	0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x3e, 0x26, 0xcc, 0x20, 0x06, 0x2c, 0x9f, 0xc4, 0x06, 0xb6,
+	0xd4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xeb, 0xea, 0x27, 0x3e, 0xb4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/device.pb.go b/googleapis/ads/googleads/v0/enums/device.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..34eaa09f3d234ccf2dc60bb4aa72774c49c9ae31
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/device.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/device.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates Google Ads devices available for targeting.
+type DeviceEnum_Device int32
+
+const (
+	// Not specified.
+	DeviceEnum_UNSPECIFIED DeviceEnum_Device = 0
+	// The value is unknown in this version.
+	DeviceEnum_UNKNOWN DeviceEnum_Device = 1
+	// Mobile devices with full browsers.
+	DeviceEnum_MOBILE DeviceEnum_Device = 2
+	// Tablets with full browsers.
+	DeviceEnum_TABLET DeviceEnum_Device = 3
+	// Computers.
+	DeviceEnum_DESKTOP DeviceEnum_Device = 4
+)
+
+var DeviceEnum_Device_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MOBILE",
+	3: "TABLET",
+	4: "DESKTOP",
+}
+var DeviceEnum_Device_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MOBILE":      2,
+	"TABLET":      3,
+	"DESKTOP":     4,
+}
+
+func (x DeviceEnum_Device) String() string {
+	return proto.EnumName(DeviceEnum_Device_name, int32(x))
+}
+func (DeviceEnum_Device) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_device_8acc755801fd4e7c, []int{0, 0}
+}
+
+// Container for enumeration of Google Ads devices available for targeting.
+type DeviceEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceEnum) Reset()         { *m = DeviceEnum{} }
+func (m *DeviceEnum) String() string { return proto.CompactTextString(m) }
+func (*DeviceEnum) ProtoMessage()    {}
+func (*DeviceEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_device_8acc755801fd4e7c, []int{0}
+}
+func (m *DeviceEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceEnum.Unmarshal(m, b)
+}
+func (m *DeviceEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceEnum.Marshal(b, m, deterministic)
+}
+func (dst *DeviceEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceEnum.Merge(dst, src)
+}
+func (m *DeviceEnum) XXX_Size() int {
+	return xxx_messageInfo_DeviceEnum.Size(m)
+}
+func (m *DeviceEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DeviceEnum)(nil), "google.ads.googleads.v0.enums.DeviceEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.DeviceEnum_Device", DeviceEnum_Device_name, DeviceEnum_Device_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/device.proto", fileDescriptor_device_8acc755801fd4e7c)
+}
+
+var fileDescriptor_device_8acc755801fd4e7c = []byte{
+	// 257 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x94, 0xd4, 0xb2, 0xcc, 0xe4, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c,
+	0x21, 0x59, 0x88, 0x02, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x5a, 0xbd, 0x32, 0x03, 0x3d, 0xb0,
+	0x5a, 0xa5, 0x48, 0x2e, 0x2e, 0x17, 0xb0, 0x72, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x6f, 0x2e, 0x36,
+	0x08, 0x4f, 0x88, 0x9f, 0x8b, 0x3b, 0xd4, 0x2f, 0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3, 0xd5,
+	0x45, 0x80, 0x41, 0x88, 0x9b, 0x8b, 0x3d, 0xd4, 0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80, 0x51,
+	0x88, 0x8b, 0x8b, 0xcd, 0xd7, 0xdf, 0xc9, 0xd3, 0xc7, 0x55, 0x80, 0x09, 0xc4, 0x0e, 0x71, 0x74,
+	0xf2, 0x71, 0x0d, 0x11, 0x60, 0x06, 0x29, 0x72, 0x71, 0x0d, 0xf6, 0x0e, 0xf1, 0x0f, 0x10, 0x60,
+	0x71, 0xda, 0xc3, 0xc8, 0xa5, 0x98, 0x9c, 0x9f, 0xab, 0x87, 0xd7, 0x01, 0x4e, 0xdc, 0x10, 0x0b,
+	0x03, 0x40, 0x8e, 0x0d, 0x60, 0x8c, 0x72, 0x82, 0xaa, 0x4e, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7,
+	0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0x7b, 0x05, 0xe6, 0xd5, 0x82, 0xcc, 0x62, 0x1c,
+	0x3e, 0xb7, 0x06, 0x93, 0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0xc9, 0xba, 0x43, 0x8c,
+	0x72, 0x4c, 0x29, 0xd6, 0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0x3d, 0x90, 0x57, 0x8b, 0x4f, 0xc1,
+	0xe4, 0x63, 0x1c, 0x53, 0x8a, 0x63, 0xe0, 0xf2, 0x31, 0x61, 0x06, 0x31, 0x60, 0xf9, 0x24, 0x36,
+	0xb0, 0xa5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x85, 0x99, 0x03, 0x92, 0x6d, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/display_ad_format_setting.pb.go b/googleapis/ads/googleads/v0/enums/display_ad_format_setting.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..2637fd2d43ca7bfdb465a209c2373e871b5201f6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/display_ad_format_setting.pb.go
@@ -0,0 +1,121 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/display_ad_format_setting.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates display ad format settings.
+type DisplayAdFormatSettingEnum_DisplayAdFormatSetting int32
+
+const (
+	// Not specified.
+	DisplayAdFormatSettingEnum_UNSPECIFIED DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 0
+	// The value is unknown in this version.
+	DisplayAdFormatSettingEnum_UNKNOWN DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 1
+	// Text, image and native formats.
+	DisplayAdFormatSettingEnum_ALL_FORMATS DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 2
+	// Text and image formats.
+	DisplayAdFormatSettingEnum_NON_NATIVE DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 3
+	// Native format, i.e. the format rendering is controlled by the publisher
+	// and not by Google.
+	DisplayAdFormatSettingEnum_NATIVE DisplayAdFormatSettingEnum_DisplayAdFormatSetting = 4
+)
+
+var DisplayAdFormatSettingEnum_DisplayAdFormatSetting_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ALL_FORMATS",
+	3: "NON_NATIVE",
+	4: "NATIVE",
+}
+var DisplayAdFormatSettingEnum_DisplayAdFormatSetting_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ALL_FORMATS": 2,
+	"NON_NATIVE":  3,
+	"NATIVE":      4,
+}
+
+func (x DisplayAdFormatSettingEnum_DisplayAdFormatSetting) String() string {
+	return proto.EnumName(DisplayAdFormatSettingEnum_DisplayAdFormatSetting_name, int32(x))
+}
+func (DisplayAdFormatSettingEnum_DisplayAdFormatSetting) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_display_ad_format_setting_4e0440badaec0ae7, []int{0, 0}
+}
+
+// Container for display ad format settings.
+type DisplayAdFormatSettingEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DisplayAdFormatSettingEnum) Reset()         { *m = DisplayAdFormatSettingEnum{} }
+func (m *DisplayAdFormatSettingEnum) String() string { return proto.CompactTextString(m) }
+func (*DisplayAdFormatSettingEnum) ProtoMessage()    {}
+func (*DisplayAdFormatSettingEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_display_ad_format_setting_4e0440badaec0ae7, []int{0}
+}
+func (m *DisplayAdFormatSettingEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayAdFormatSettingEnum.Unmarshal(m, b)
+}
+func (m *DisplayAdFormatSettingEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayAdFormatSettingEnum.Marshal(b, m, deterministic)
+}
+func (dst *DisplayAdFormatSettingEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayAdFormatSettingEnum.Merge(dst, src)
+}
+func (m *DisplayAdFormatSettingEnum) XXX_Size() int {
+	return xxx_messageInfo_DisplayAdFormatSettingEnum.Size(m)
+}
+func (m *DisplayAdFormatSettingEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayAdFormatSettingEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayAdFormatSettingEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DisplayAdFormatSettingEnum)(nil), "google.ads.googleads.v0.enums.DisplayAdFormatSettingEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.DisplayAdFormatSettingEnum_DisplayAdFormatSetting", DisplayAdFormatSettingEnum_DisplayAdFormatSetting_name, DisplayAdFormatSettingEnum_DisplayAdFormatSetting_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/display_ad_format_setting.proto", fileDescriptor_display_ad_format_setting_4e0440badaec0ae7)
+}
+
+var fileDescriptor_display_ad_format_setting_4e0440badaec0ae7 = []byte{
+	// 291 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0x6d, 0x27, 0x13, 0x32, 0xd0, 0xd2, 0x83, 0x07, 0x65, 0x07, 0xf7, 0x00, 0x69, 0xc1,
+	0xa3, 0x78, 0x48, 0x5d, 0x3b, 0x8a, 0x33, 0x2d, 0x76, 0xab, 0x20, 0x85, 0x12, 0x97, 0x1a, 0x0a,
+	0x6d, 0x53, 0x9a, 0x6e, 0xe0, 0xd1, 0x57, 0xf1, 0xe8, 0xa3, 0x88, 0x0f, 0x25, 0x49, 0xb6, 0x9d,
+	0xe6, 0x2e, 0xe5, 0x83, 0x1f, 0xbf, 0xaf, 0xff, 0x7c, 0xe0, 0x9e, 0x71, 0xce, 0xaa, 0xc2, 0x21,
+	0x54, 0x38, 0x3a, 0xca, 0xb4, 0x71, 0x9d, 0xa2, 0x59, 0xd7, 0xc2, 0xa1, 0xa5, 0x68, 0x2b, 0xf2,
+	0x91, 0x13, 0x9a, 0xbf, 0xf3, 0xae, 0x26, 0x7d, 0x2e, 0x8a, 0xbe, 0x2f, 0x1b, 0x06, 0xdb, 0x8e,
+	0xf7, 0xdc, 0x1e, 0x6b, 0x07, 0x12, 0x2a, 0xe0, 0x5e, 0x87, 0x1b, 0x17, 0x2a, 0x7d, 0xf2, 0x69,
+	0x80, 0xab, 0xa9, 0xae, 0x40, 0x34, 0x50, 0x05, 0x89, 0xf6, 0xfd, 0x66, 0x5d, 0x4f, 0x56, 0xe0,
+	0xf2, 0x30, 0xb5, 0x2f, 0xc0, 0x68, 0x89, 0x93, 0xd8, 0x7f, 0x08, 0x83, 0xd0, 0x9f, 0x5a, 0x27,
+	0xf6, 0x08, 0x9c, 0x2d, 0xf1, 0x23, 0x8e, 0x5e, 0xb0, 0x65, 0x48, 0x8a, 0xe6, 0xf3, 0x3c, 0x88,
+	0x9e, 0x9f, 0xd0, 0x22, 0xb1, 0x4c, 0xfb, 0x1c, 0x00, 0x1c, 0xe1, 0x1c, 0xa3, 0x45, 0x98, 0xfa,
+	0xd6, 0xc0, 0x06, 0x60, 0xb8, 0xcd, 0xa7, 0xde, 0xaf, 0x01, 0x6e, 0x56, 0xbc, 0x86, 0x47, 0x2f,
+	0xf5, 0xae, 0x0f, 0x1f, 0x12, 0xcb, 0x57, 0xc6, 0xc6, 0xab, 0xb7, 0xb5, 0x19, 0xaf, 0x48, 0xc3,
+	0x20, 0xef, 0x98, 0xc3, 0x8a, 0x46, 0x6d, 0xb0, 0x9b, 0xad, 0x2d, 0xc5, 0x3f, 0x2b, 0xde, 0xa9,
+	0xef, 0x97, 0x39, 0x98, 0x21, 0xf4, 0x6d, 0x8e, 0x67, 0xba, 0x0a, 0x51, 0x01, 0x75, 0x94, 0x29,
+	0x75, 0xa1, 0x9c, 0x44, 0xfc, 0xec, 0x78, 0x86, 0xa8, 0xc8, 0xf6, 0x3c, 0x4b, 0xdd, 0x4c, 0xf1,
+	0xb7, 0xa1, 0xfa, 0xe9, 0xed, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x9a, 0x0f, 0xb8, 0xb9,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/education_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/education_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..85c03ed7432331210cb6c8f45f2e42ed40679336
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/education_placeholder_field.pb.go
@@ -0,0 +1,203 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/education_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Education placeholder fields.
+type EducationPlaceholderFieldEnum_EducationPlaceholderField int32
+
+const (
+	// Not specified.
+	EducationPlaceholderFieldEnum_UNSPECIFIED EducationPlaceholderFieldEnum_EducationPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	EducationPlaceholderFieldEnum_UNKNOWN EducationPlaceholderFieldEnum_EducationPlaceholderField = 1
+	// Data Type: STRING. Required. Combination of PROGRAM ID and LOCATION ID
+	// must be unique per offer.
+	EducationPlaceholderFieldEnum_PROGRAM_ID EducationPlaceholderFieldEnum_EducationPlaceholderField = 2
+	// Data Type: STRING. Combination of PROGRAM ID and LOCATION ID must be
+	// unique per offer.
+	EducationPlaceholderFieldEnum_LOCATION_ID EducationPlaceholderFieldEnum_EducationPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with program name to be shown
+	// in dynamic ad.
+	EducationPlaceholderFieldEnum_PROGRAM_NAME EducationPlaceholderFieldEnum_EducationPlaceholderField = 4
+	// Data Type: STRING. Area of study that can be shown in dynamic ad.
+	EducationPlaceholderFieldEnum_AREA_OF_STUDY EducationPlaceholderFieldEnum_EducationPlaceholderField = 5
+	// Data Type: STRING. Description of program that can be shown in dynamic
+	// ad.
+	EducationPlaceholderFieldEnum_PROGRAM_DESCRIPTION EducationPlaceholderFieldEnum_EducationPlaceholderField = 6
+	// Data Type: STRING. Name of school that can be shown in dynamic ad.
+	EducationPlaceholderFieldEnum_SCHOOL_NAME EducationPlaceholderFieldEnum_EducationPlaceholderField = 7
+	// Data Type: STRING. Complete school address, including postal code.
+	EducationPlaceholderFieldEnum_ADDRESS EducationPlaceholderFieldEnum_EducationPlaceholderField = 8
+	// Data Type: URL. Image to be displayed in ads.
+	EducationPlaceholderFieldEnum_THUMBNAIL_IMAGE_URL EducationPlaceholderFieldEnum_EducationPlaceholderField = 9
+	// Data Type: URL. Alternative hosted file of image to be used in the ad.
+	EducationPlaceholderFieldEnum_ALTERNATIVE_THUMBNAIL_IMAGE_URL EducationPlaceholderFieldEnum_EducationPlaceholderField = 10
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific program and its location).
+	EducationPlaceholderFieldEnum_FINAL_URLS EducationPlaceholderFieldEnum_EducationPlaceholderField = 11
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	EducationPlaceholderFieldEnum_FINAL_MOBILE_URLS EducationPlaceholderFieldEnum_EducationPlaceholderField = 12
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	EducationPlaceholderFieldEnum_TRACKING_URL EducationPlaceholderFieldEnum_EducationPlaceholderField = 13
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	EducationPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS EducationPlaceholderFieldEnum_EducationPlaceholderField = 14
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	EducationPlaceholderFieldEnum_ANDROID_APP_LINK EducationPlaceholderFieldEnum_EducationPlaceholderField = 15
+	// Data Type: STRING_LIST. List of recommended program IDs to show together
+	// with this item.
+	EducationPlaceholderFieldEnum_SIMILAR_PROGRAM_IDS EducationPlaceholderFieldEnum_EducationPlaceholderField = 16
+	// Data Type: STRING. iOS app link.
+	EducationPlaceholderFieldEnum_IOS_APP_LINK EducationPlaceholderFieldEnum_EducationPlaceholderField = 17
+	// Data Type: INT64. iOS app store ID.
+	EducationPlaceholderFieldEnum_IOS_APP_STORE_ID EducationPlaceholderFieldEnum_EducationPlaceholderField = 18
+)
+
+var EducationPlaceholderFieldEnum_EducationPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PROGRAM_ID",
+	3:  "LOCATION_ID",
+	4:  "PROGRAM_NAME",
+	5:  "AREA_OF_STUDY",
+	6:  "PROGRAM_DESCRIPTION",
+	7:  "SCHOOL_NAME",
+	8:  "ADDRESS",
+	9:  "THUMBNAIL_IMAGE_URL",
+	10: "ALTERNATIVE_THUMBNAIL_IMAGE_URL",
+	11: "FINAL_URLS",
+	12: "FINAL_MOBILE_URLS",
+	13: "TRACKING_URL",
+	14: "CONTEXTUAL_KEYWORDS",
+	15: "ANDROID_APP_LINK",
+	16: "SIMILAR_PROGRAM_IDS",
+	17: "IOS_APP_LINK",
+	18: "IOS_APP_STORE_ID",
+}
+var EducationPlaceholderFieldEnum_EducationPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"PROGRAM_ID":                      2,
+	"LOCATION_ID":                     3,
+	"PROGRAM_NAME":                    4,
+	"AREA_OF_STUDY":                   5,
+	"PROGRAM_DESCRIPTION":             6,
+	"SCHOOL_NAME":                     7,
+	"ADDRESS":                         8,
+	"THUMBNAIL_IMAGE_URL":             9,
+	"ALTERNATIVE_THUMBNAIL_IMAGE_URL": 10,
+	"FINAL_URLS":                      11,
+	"FINAL_MOBILE_URLS":               12,
+	"TRACKING_URL":                    13,
+	"CONTEXTUAL_KEYWORDS":             14,
+	"ANDROID_APP_LINK":                15,
+	"SIMILAR_PROGRAM_IDS":             16,
+	"IOS_APP_LINK":                    17,
+	"IOS_APP_STORE_ID":                18,
+}
+
+func (x EducationPlaceholderFieldEnum_EducationPlaceholderField) String() string {
+	return proto.EnumName(EducationPlaceholderFieldEnum_EducationPlaceholderField_name, int32(x))
+}
+func (EducationPlaceholderFieldEnum_EducationPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_education_placeholder_field_d137ac4ba72ea1ae, []int{0, 0}
+}
+
+// Values for Education placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type EducationPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EducationPlaceholderFieldEnum) Reset()         { *m = EducationPlaceholderFieldEnum{} }
+func (m *EducationPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*EducationPlaceholderFieldEnum) ProtoMessage()    {}
+func (*EducationPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_education_placeholder_field_d137ac4ba72ea1ae, []int{0}
+}
+func (m *EducationPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EducationPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *EducationPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EducationPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *EducationPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EducationPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *EducationPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_EducationPlaceholderFieldEnum.Size(m)
+}
+func (m *EducationPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_EducationPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EducationPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*EducationPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.EducationPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.EducationPlaceholderFieldEnum_EducationPlaceholderField", EducationPlaceholderFieldEnum_EducationPlaceholderField_name, EducationPlaceholderFieldEnum_EducationPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/education_placeholder_field.proto", fileDescriptor_education_placeholder_field_d137ac4ba72ea1ae)
+}
+
+var fileDescriptor_education_placeholder_field_d137ac4ba72ea1ae = []byte{
+	// 477 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0x8e, 0xd3, 0x30,
+	0x10, 0xc6, 0xd9, 0x16, 0x76, 0xc1, 0xdd, 0x3f, 0xae, 0x01, 0x21, 0x0e, 0x05, 0xb1, 0xdc, 0xd3,
+	0x4a, 0x1c, 0x39, 0xa0, 0x69, 0xe2, 0x76, 0xad, 0x3a, 0x76, 0x64, 0x27, 0x5d, 0x16, 0x55, 0xb2,
+	0x42, 0x13, 0x42, 0xa5, 0x34, 0xa9, 0x9a, 0xed, 0xbe, 0x0d, 0x17, 0x8e, 0xbc, 0x04, 0x77, 0x2e,
+	0xbc, 0x12, 0x72, 0x42, 0xb6, 0x17, 0xca, 0x25, 0x1a, 0xcf, 0x7c, 0xf3, 0x9b, 0xd8, 0xf3, 0xa1,
+	0x0f, 0x59, 0x59, 0x66, 0x79, 0x3a, 0x8c, 0x93, 0x6a, 0xd8, 0x84, 0x36, 0xba, 0x1b, 0x0d, 0xd3,
+	0x62, 0xb7, 0xae, 0x86, 0x69, 0xb2, 0x5b, 0xc6, 0xb7, 0xab, 0xb2, 0x30, 0x9b, 0x3c, 0x5e, 0xa6,
+	0x5f, 0xcb, 0x3c, 0x49, 0xb7, 0xe6, 0xcb, 0x2a, 0xcd, 0x13, 0x67, 0xb3, 0x2d, 0x6f, 0x4b, 0x32,
+	0x68, 0xba, 0x9c, 0x38, 0xa9, 0x9c, 0x7b, 0x80, 0x73, 0x37, 0x72, 0x6a, 0xc0, 0xe5, 0xcf, 0x2e,
+	0x1a, 0xd0, 0x16, 0x12, 0xec, 0x19, 0x13, 0x8b, 0xa0, 0xc5, 0x6e, 0x7d, 0xf9, 0xad, 0x8b, 0x5e,
+	0x1e, 0x54, 0x90, 0x0b, 0xd4, 0x8b, 0x84, 0x0e, 0xa8, 0xcb, 0x26, 0x8c, 0x7a, 0xf8, 0x01, 0xe9,
+	0xa1, 0x93, 0x48, 0xcc, 0x84, 0xbc, 0x16, 0xf8, 0x88, 0x9c, 0x23, 0x14, 0x28, 0x39, 0x55, 0xe0,
+	0x1b, 0xe6, 0xe1, 0x8e, 0x55, 0x73, 0xe9, 0x42, 0xc8, 0xa4, 0xb0, 0x89, 0x2e, 0xc1, 0xe8, 0xb4,
+	0x15, 0x08, 0xf0, 0x29, 0x7e, 0x48, 0xfa, 0xe8, 0x0c, 0x14, 0x05, 0x23, 0x27, 0x46, 0x87, 0x91,
+	0x77, 0x83, 0x1f, 0x91, 0x17, 0xe8, 0x69, 0x2b, 0xf2, 0xa8, 0x76, 0x15, 0x0b, 0x2c, 0x00, 0x1f,
+	0x5b, 0x9c, 0x76, 0xaf, 0xa4, 0xe4, 0x4d, 0xf3, 0x89, 0x1d, 0x0e, 0x9e, 0xa7, 0xa8, 0xd6, 0xf8,
+	0xb1, 0x6d, 0x0b, 0xaf, 0x22, 0x7f, 0x2c, 0x80, 0x71, 0xc3, 0x7c, 0x98, 0x52, 0x13, 0x29, 0x8e,
+	0x9f, 0x90, 0xb7, 0xe8, 0x35, 0xf0, 0x90, 0x2a, 0x01, 0x21, 0x9b, 0x53, 0xf3, 0x2f, 0x11, 0xb2,
+	0xbf, 0x3e, 0x61, 0x02, 0xb8, 0x3d, 0x6a, 0xdc, 0x23, 0xcf, 0x51, 0xbf, 0x39, 0xfb, 0x72, 0xcc,
+	0x38, 0x6d, 0xd2, 0xa7, 0xf6, 0x02, 0xa1, 0x02, 0x77, 0xc6, 0xc4, 0xb4, 0x6e, 0x3c, 0xb3, 0x63,
+	0x5d, 0x29, 0x42, 0xfa, 0x31, 0x8c, 0x80, 0x9b, 0x19, 0xbd, 0xb9, 0x96, 0xca, 0xd3, 0xf8, 0x9c,
+	0x3c, 0x43, 0x18, 0x84, 0xa7, 0x24, 0xf3, 0x0c, 0x04, 0x81, 0xe1, 0x4c, 0xcc, 0xf0, 0x85, 0x95,
+	0x6b, 0xe6, 0x33, 0x0e, 0xca, 0xec, 0x9f, 0x4a, 0x63, 0x6c, 0xc9, 0x4c, 0xea, 0xbd, 0xb4, 0x6f,
+	0x01, 0x6d, 0x46, 0x87, 0x52, 0x51, 0xfb, 0x84, 0x64, 0xfc, 0xfb, 0x08, 0xbd, 0x59, 0x96, 0x6b,
+	0xe7, 0xbf, 0x7b, 0x1e, 0xbf, 0x3a, 0xb8, 0xc2, 0xc0, 0xda, 0x24, 0x38, 0xfa, 0x34, 0xfe, 0x0b,
+	0xc8, 0xca, 0x3c, 0x2e, 0x32, 0xa7, 0xdc, 0x66, 0xc3, 0x2c, 0x2d, 0x6a, 0x13, 0xb5, 0xce, 0xdb,
+	0xac, 0xaa, 0x03, 0x46, 0x7c, 0x5f, 0x7f, 0xbf, 0x77, 0xba, 0x53, 0x80, 0x1f, 0x9d, 0xc1, 0xb4,
+	0x41, 0x41, 0x52, 0x39, 0x4d, 0x68, 0xa3, 0xf9, 0xc8, 0xb1, 0x86, 0xaa, 0x7e, 0xb5, 0xf5, 0x05,
+	0x24, 0xd5, 0xe2, 0xbe, 0xbe, 0x98, 0x8f, 0x16, 0x75, 0xfd, 0xf3, 0x71, 0x3d, 0xf4, 0xdd, 0x9f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x8b, 0x0c, 0x41, 0xfc, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/feed_attribute_type.pb.go b/googleapis/ads/googleads/v0/enums/feed_attribute_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6a68f190935cbdf280388485f86f227f4218fb69
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/feed_attribute_type.pb.go
@@ -0,0 +1,165 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/feed_attribute_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible data types for a feed attribute.
+type FeedAttributeTypeEnum_FeedAttributeType int32
+
+const (
+	// Not specified.
+	FeedAttributeTypeEnum_UNSPECIFIED FeedAttributeTypeEnum_FeedAttributeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedAttributeTypeEnum_UNKNOWN FeedAttributeTypeEnum_FeedAttributeType = 1
+	// Int64.
+	FeedAttributeTypeEnum_INT64 FeedAttributeTypeEnum_FeedAttributeType = 2
+	// Double.
+	FeedAttributeTypeEnum_DOUBLE FeedAttributeTypeEnum_FeedAttributeType = 3
+	// String.
+	FeedAttributeTypeEnum_STRING FeedAttributeTypeEnum_FeedAttributeType = 4
+	// Boolean.
+	FeedAttributeTypeEnum_BOOLEAN FeedAttributeTypeEnum_FeedAttributeType = 5
+	// Url.
+	FeedAttributeTypeEnum_URL FeedAttributeTypeEnum_FeedAttributeType = 6
+	// Datetime.
+	FeedAttributeTypeEnum_DATE_TIME FeedAttributeTypeEnum_FeedAttributeType = 7
+	// Int64 list.
+	FeedAttributeTypeEnum_INT64_LIST FeedAttributeTypeEnum_FeedAttributeType = 8
+	// Double (8 bytes) list.
+	FeedAttributeTypeEnum_DOUBLE_LIST FeedAttributeTypeEnum_FeedAttributeType = 9
+	// String list.
+	FeedAttributeTypeEnum_STRING_LIST FeedAttributeTypeEnum_FeedAttributeType = 10
+	// Boolean list.
+	FeedAttributeTypeEnum_BOOLEAN_LIST FeedAttributeTypeEnum_FeedAttributeType = 11
+	// Url list.
+	FeedAttributeTypeEnum_URL_LIST FeedAttributeTypeEnum_FeedAttributeType = 12
+	// Datetime list.
+	FeedAttributeTypeEnum_DATE_TIME_LIST FeedAttributeTypeEnum_FeedAttributeType = 13
+	// Price.
+	FeedAttributeTypeEnum_PRICE FeedAttributeTypeEnum_FeedAttributeType = 14
+)
+
+var FeedAttributeTypeEnum_FeedAttributeType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INT64",
+	3:  "DOUBLE",
+	4:  "STRING",
+	5:  "BOOLEAN",
+	6:  "URL",
+	7:  "DATE_TIME",
+	8:  "INT64_LIST",
+	9:  "DOUBLE_LIST",
+	10: "STRING_LIST",
+	11: "BOOLEAN_LIST",
+	12: "URL_LIST",
+	13: "DATE_TIME_LIST",
+	14: "PRICE",
+}
+var FeedAttributeTypeEnum_FeedAttributeType_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"INT64":          2,
+	"DOUBLE":         3,
+	"STRING":         4,
+	"BOOLEAN":        5,
+	"URL":            6,
+	"DATE_TIME":      7,
+	"INT64_LIST":     8,
+	"DOUBLE_LIST":    9,
+	"STRING_LIST":    10,
+	"BOOLEAN_LIST":   11,
+	"URL_LIST":       12,
+	"DATE_TIME_LIST": 13,
+	"PRICE":          14,
+}
+
+func (x FeedAttributeTypeEnum_FeedAttributeType) String() string {
+	return proto.EnumName(FeedAttributeTypeEnum_FeedAttributeType_name, int32(x))
+}
+func (FeedAttributeTypeEnum_FeedAttributeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_attribute_type_f28cb50283557059, []int{0, 0}
+}
+
+// Container for enum describing possible data types for a feed attribute.
+type FeedAttributeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedAttributeTypeEnum) Reset()         { *m = FeedAttributeTypeEnum{} }
+func (m *FeedAttributeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedAttributeTypeEnum) ProtoMessage()    {}
+func (*FeedAttributeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_attribute_type_f28cb50283557059, []int{0}
+}
+func (m *FeedAttributeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttributeTypeEnum.Unmarshal(m, b)
+}
+func (m *FeedAttributeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttributeTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedAttributeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttributeTypeEnum.Merge(dst, src)
+}
+func (m *FeedAttributeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedAttributeTypeEnum.Size(m)
+}
+func (m *FeedAttributeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttributeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttributeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedAttributeTypeEnum)(nil), "google.ads.googleads.v0.enums.FeedAttributeTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FeedAttributeTypeEnum_FeedAttributeType", FeedAttributeTypeEnum_FeedAttributeType_name, FeedAttributeTypeEnum_FeedAttributeType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/feed_attribute_type.proto", fileDescriptor_feed_attribute_type_f28cb50283557059)
+}
+
+var fileDescriptor_feed_attribute_type_f28cb50283557059 = []byte{
+	// 369 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcd, 0x6a, 0xab, 0x40,
+	0x18, 0xbd, 0x9a, 0x9b, 0xbf, 0x2f, 0x3f, 0x77, 0xee, 0xc0, 0xbd, 0xbb, 0x2c, 0x9a, 0x07, 0x18,
+	0x85, 0x96, 0x76, 0xd1, 0x95, 0x26, 0x93, 0x20, 0xb5, 0x2a, 0x46, 0x53, 0x28, 0x82, 0x98, 0x3a,
+	0x95, 0x40, 0xa2, 0x12, 0x4d, 0x20, 0xfb, 0x3e, 0x49, 0x97, 0x7d, 0x91, 0x42, 0x1f, 0xa5, 0x4f,
+	0x51, 0xc6, 0x49, 0xb2, 0x09, 0xed, 0x46, 0x8e, 0xe7, 0x7c, 0xe7, 0x7c, 0xc3, 0x77, 0xe0, 0x26,
+	0xc9, 0xb2, 0x64, 0xc5, 0x94, 0x28, 0x2e, 0x14, 0x01, 0x39, 0xda, 0xa9, 0x0a, 0x4b, 0xb7, 0xeb,
+	0x42, 0x79, 0x66, 0x2c, 0x0e, 0xa3, 0xb2, 0xdc, 0x2c, 0x17, 0xdb, 0x92, 0x85, 0xe5, 0x3e, 0x67,
+	0x24, 0xdf, 0x64, 0x65, 0x86, 0x07, 0x62, 0x9a, 0x44, 0x71, 0x41, 0x4e, 0x46, 0xb2, 0x53, 0x49,
+	0x65, 0x1c, 0xbe, 0xc8, 0xf0, 0x6f, 0xc2, 0x58, 0xac, 0x1d, 0xbd, 0xde, 0x3e, 0x67, 0x34, 0xdd,
+	0xae, 0x87, 0x9f, 0x12, 0xfc, 0x3d, 0x53, 0xf0, 0x1f, 0xe8, 0xf8, 0xd6, 0xcc, 0xa1, 0x23, 0x63,
+	0x62, 0xd0, 0x31, 0xfa, 0x85, 0x3b, 0xd0, 0xf4, 0xad, 0x3b, 0xcb, 0x7e, 0xb0, 0x90, 0x84, 0xdb,
+	0x50, 0x37, 0x2c, 0xef, 0xfa, 0x0a, 0xc9, 0x18, 0xa0, 0x31, 0xb6, 0x7d, 0xdd, 0xa4, 0xa8, 0xc6,
+	0xf1, 0xcc, 0x73, 0x0d, 0x6b, 0x8a, 0x7e, 0xf3, 0x79, 0xdd, 0xb6, 0x4d, 0xaa, 0x59, 0xa8, 0x8e,
+	0x9b, 0x50, 0xf3, 0x5d, 0x13, 0x35, 0x70, 0x0f, 0xda, 0x63, 0xcd, 0xa3, 0xa1, 0x67, 0xdc, 0x53,
+	0xd4, 0xc4, 0x7d, 0x80, 0x2a, 0x27, 0x34, 0x8d, 0x99, 0x87, 0x5a, 0x7c, 0xab, 0x08, 0x13, 0x44,
+	0x9b, 0x13, 0x22, 0x51, 0x10, 0x80, 0x11, 0x74, 0x0f, 0xb1, 0x82, 0xe9, 0xe0, 0x2e, 0xb4, 0x7c,
+	0xd7, 0x14, 0x7f, 0x5d, 0x8c, 0xa1, 0x7f, 0x5a, 0x20, 0xb8, 0x1e, 0x7f, 0xad, 0xe3, 0x1a, 0x23,
+	0x8a, 0xfa, 0xfa, 0xbb, 0x04, 0x17, 0x4f, 0xd9, 0x9a, 0xfc, 0x78, 0x2c, 0xfd, 0xff, 0xd9, 0x3d,
+	0x1c, 0x7e, 0x63, 0x47, 0x7a, 0xd4, 0x0f, 0xc6, 0x24, 0x5b, 0x45, 0x69, 0x42, 0xb2, 0x4d, 0xa2,
+	0x24, 0x2c, 0xad, 0x1a, 0x38, 0xd6, 0x95, 0x2f, 0x8b, 0x6f, 0xda, 0xbb, 0xad, 0xbe, 0xaf, 0x72,
+	0x6d, 0xaa, 0x69, 0x6f, 0xf2, 0x60, 0x2a, 0xa2, 0xb4, 0xb8, 0x20, 0x02, 0x72, 0x34, 0x57, 0x09,
+	0x6f, 0xa5, 0xf8, 0x38, 0xea, 0x81, 0x16, 0x17, 0xc1, 0x49, 0x0f, 0xe6, 0x6a, 0x50, 0xe9, 0x8b,
+	0x46, 0xb5, 0xf4, 0xf2, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xaa, 0xb4, 0xcc, 0xb0, 0x31, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/feed_item_status.pb.go b/googleapis/ads/googleads/v0/enums/feed_item_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..894bdd575c58b3d9b54ead5fcddc9b37f741558c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/feed_item_status.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/feed_item_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a feed item.
+type FeedItemStatusEnum_FeedItemStatus int32
+
+const (
+	// Not specified.
+	FeedItemStatusEnum_UNSPECIFIED FeedItemStatusEnum_FeedItemStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedItemStatusEnum_UNKNOWN FeedItemStatusEnum_FeedItemStatus = 1
+	// Feed item is enabled.
+	FeedItemStatusEnum_ENABLED FeedItemStatusEnum_FeedItemStatus = 2
+	// Feed item has been removed.
+	FeedItemStatusEnum_REMOVED FeedItemStatusEnum_FeedItemStatus = 3
+)
+
+var FeedItemStatusEnum_FeedItemStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+var FeedItemStatusEnum_FeedItemStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedItemStatusEnum_FeedItemStatus) String() string {
+	return proto.EnumName(FeedItemStatusEnum_FeedItemStatus_name, int32(x))
+}
+func (FeedItemStatusEnum_FeedItemStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_status_fb1ba51d1ba4287a, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a feed item.
+type FeedItemStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemStatusEnum) Reset()         { *m = FeedItemStatusEnum{} }
+func (m *FeedItemStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemStatusEnum) ProtoMessage()    {}
+func (*FeedItemStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_status_fb1ba51d1ba4287a, []int{0}
+}
+func (m *FeedItemStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedItemStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedItemStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemStatusEnum.Merge(dst, src)
+}
+func (m *FeedItemStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemStatusEnum.Size(m)
+}
+func (m *FeedItemStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedItemStatusEnum)(nil), "google.ads.googleads.v0.enums.FeedItemStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FeedItemStatusEnum_FeedItemStatus", FeedItemStatusEnum_FeedItemStatus_name, FeedItemStatusEnum_FeedItemStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/feed_item_status.proto", fileDescriptor_feed_item_status_fb1ba51d1ba4287a)
+}
+
+var fileDescriptor_feed_item_status_fb1ba51d1ba4287a = []byte{
+	// 264 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xb4, 0xd4, 0xd4, 0x94, 0xf8, 0xcc, 0x92, 0xd4, 0xdc, 0xf8, 0xe2, 0x92,
+	0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x52, 0xbd, 0xc4,
+	0x94, 0x62, 0x3d, 0xb8, 0x2e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x2e, 0xa5, 0x38, 0x2e, 0x21, 0xb7,
+	0xd4, 0xd4, 0x14, 0xcf, 0x92, 0xd4, 0xdc, 0x60, 0xb0, 0x36, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x0f,
+	0x2e, 0x3e, 0x54, 0x51, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37,
+	0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f,
+	0x01, 0x46, 0x10, 0xc7, 0xd5, 0xcf, 0xd1, 0xc9, 0xc7, 0xd5, 0x45, 0x80, 0x09, 0xc4, 0x09, 0x72,
+	0xf5, 0xf5, 0x0f, 0x73, 0x75, 0x11, 0x60, 0x76, 0x3a, 0xc2, 0xc8, 0xa5, 0x98, 0x9c, 0x9f, 0xab,
+	0x87, 0xd7, 0x15, 0x4e, 0xc2, 0xa8, 0xb6, 0x05, 0x80, 0x5c, 0x1e, 0xc0, 0x18, 0xe5, 0x04, 0xd5,
+	0x95, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0xf6,
+	0x17, 0x2c, 0x04, 0x0a, 0x32, 0x8b, 0x71, 0x04, 0x88, 0x35, 0x98, 0x5c, 0xc4, 0xc4, 0xec, 0xee,
+	0xe8, 0xb8, 0x8a, 0x49, 0xd6, 0x1d, 0x62, 0x94, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85,
+	0x19, 0xe8, 0x81, 0xfc, 0x5b, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98, 0x52, 0x1c, 0x03, 0x97, 0x8f,
+	0x09, 0x33, 0x88, 0x01, 0xcb, 0x27, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff,
+	0x86, 0xa7, 0xa3, 0xa7, 0x84, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/feed_link_status.pb.go b/googleapis/ads/googleads/v0/enums/feed_link_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c5f30086dec0e48ce835202c58fc85326a38050d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/feed_link_status.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/feed_link_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a feed link.
+type FeedLinkStatusEnum_FeedLinkStatus int32
+
+const (
+	// Not specified.
+	FeedLinkStatusEnum_UNSPECIFIED FeedLinkStatusEnum_FeedLinkStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedLinkStatusEnum_UNKNOWN FeedLinkStatusEnum_FeedLinkStatus = 1
+	// Feed link is enabled.
+	FeedLinkStatusEnum_ENABLED FeedLinkStatusEnum_FeedLinkStatus = 2
+	// Feed link has been removed.
+	FeedLinkStatusEnum_REMOVED FeedLinkStatusEnum_FeedLinkStatus = 3
+)
+
+var FeedLinkStatusEnum_FeedLinkStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+var FeedLinkStatusEnum_FeedLinkStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedLinkStatusEnum_FeedLinkStatus) String() string {
+	return proto.EnumName(FeedLinkStatusEnum_FeedLinkStatus_name, int32(x))
+}
+func (FeedLinkStatusEnum_FeedLinkStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_link_status_46af2d1278b1086e, []int{0, 0}
+}
+
+// Container for an enum describing possible statuses of a feed link.
+type FeedLinkStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedLinkStatusEnum) Reset()         { *m = FeedLinkStatusEnum{} }
+func (m *FeedLinkStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedLinkStatusEnum) ProtoMessage()    {}
+func (*FeedLinkStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_link_status_46af2d1278b1086e, []int{0}
+}
+func (m *FeedLinkStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedLinkStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedLinkStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedLinkStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedLinkStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedLinkStatusEnum.Merge(dst, src)
+}
+func (m *FeedLinkStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedLinkStatusEnum.Size(m)
+}
+func (m *FeedLinkStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedLinkStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedLinkStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedLinkStatusEnum)(nil), "google.ads.googleads.v0.enums.FeedLinkStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FeedLinkStatusEnum_FeedLinkStatus", FeedLinkStatusEnum_FeedLinkStatus_name, FeedLinkStatusEnum_FeedLinkStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/feed_link_status.proto", fileDescriptor_feed_link_status_46af2d1278b1086e)
+}
+
+var fileDescriptor_feed_link_status_46af2d1278b1086e = []byte{
+	// 264 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xb4, 0xd4, 0xd4, 0x94, 0xf8, 0x9c, 0xcc, 0xbc, 0xec, 0xf8, 0xe2, 0x92,
+	0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x52, 0xbd, 0xc4,
+	0x94, 0x62, 0x3d, 0xb8, 0x2e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x2e, 0xa5, 0x38, 0x2e, 0x21, 0xb7,
+	0xd4, 0xd4, 0x14, 0x9f, 0xcc, 0xbc, 0xec, 0x60, 0xb0, 0x36, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x0f,
+	0x2e, 0x3e, 0x54, 0x51, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37,
+	0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f,
+	0x01, 0x46, 0x10, 0xc7, 0xd5, 0xcf, 0xd1, 0xc9, 0xc7, 0xd5, 0x45, 0x80, 0x09, 0xc4, 0x09, 0x72,
+	0xf5, 0xf5, 0x0f, 0x73, 0x75, 0x11, 0x60, 0x76, 0x3a, 0xc2, 0xc8, 0xa5, 0x98, 0x9c, 0x9f, 0xab,
+	0x87, 0xd7, 0x15, 0x4e, 0xc2, 0xa8, 0xb6, 0x05, 0x80, 0x5c, 0x1e, 0xc0, 0x18, 0xe5, 0x04, 0xd5,
+	0x95, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0xf6,
+	0x17, 0x2c, 0x04, 0x0a, 0x32, 0x8b, 0x71, 0x04, 0x88, 0x35, 0x98, 0x5c, 0xc4, 0xc4, 0xec, 0xee,
+	0xe8, 0xb8, 0x8a, 0x49, 0xd6, 0x1d, 0x62, 0x94, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85,
+	0x19, 0xe8, 0x81, 0xfc, 0x5b, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98, 0x52, 0x1c, 0x03, 0x97, 0x8f,
+	0x09, 0x33, 0x88, 0x01, 0xcb, 0x27, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff,
+	0x4d, 0x2b, 0x63, 0x50, 0x84, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/feed_mapping_criterion_type.pb.go b/googleapis/ads/googleads/v0/enums/feed_mapping_criterion_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0e8be2c3f957e60f356ce35402ee7f9bbabf1dd3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/feed_mapping_criterion_type.pb.go
@@ -0,0 +1,117 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/feed_mapping_criterion_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible placeholder types for a feed mapping.
+type FeedMappingCriterionTypeEnum_FeedMappingCriterionType int32
+
+const (
+	// Not specified.
+	FeedMappingCriterionTypeEnum_UNSPECIFIED FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedMappingCriterionTypeEnum_UNKNOWN FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 1
+	// Allows campaign targeting at locations within a location feed.
+	FeedMappingCriterionTypeEnum_CAMPAIGN_LOCATION_TARGETS FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 2
+	// Allows url targeting for your dynamic search ads within a page feed.
+	FeedMappingCriterionTypeEnum_DSA_PAGE_FEED FeedMappingCriterionTypeEnum_FeedMappingCriterionType = 3
+)
+
+var FeedMappingCriterionTypeEnum_FeedMappingCriterionType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CAMPAIGN_LOCATION_TARGETS",
+	3: "DSA_PAGE_FEED",
+}
+var FeedMappingCriterionTypeEnum_FeedMappingCriterionType_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"CAMPAIGN_LOCATION_TARGETS": 2,
+	"DSA_PAGE_FEED":             3,
+}
+
+func (x FeedMappingCriterionTypeEnum_FeedMappingCriterionType) String() string {
+	return proto.EnumName(FeedMappingCriterionTypeEnum_FeedMappingCriterionType_name, int32(x))
+}
+func (FeedMappingCriterionTypeEnum_FeedMappingCriterionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_criterion_type_93ad8a18e2c6175b, []int{0, 0}
+}
+
+// Container for enum describing possible criterion types for a feed mapping.
+type FeedMappingCriterionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedMappingCriterionTypeEnum) Reset()         { *m = FeedMappingCriterionTypeEnum{} }
+func (m *FeedMappingCriterionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingCriterionTypeEnum) ProtoMessage()    {}
+func (*FeedMappingCriterionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_criterion_type_93ad8a18e2c6175b, []int{0}
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingCriterionTypeEnum.Unmarshal(m, b)
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingCriterionTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedMappingCriterionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingCriterionTypeEnum.Merge(dst, src)
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingCriterionTypeEnum.Size(m)
+}
+func (m *FeedMappingCriterionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingCriterionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingCriterionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedMappingCriterionTypeEnum)(nil), "google.ads.googleads.v0.enums.FeedMappingCriterionTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType", FeedMappingCriterionTypeEnum_FeedMappingCriterionType_name, FeedMappingCriterionTypeEnum_FeedMappingCriterionType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/feed_mapping_criterion_type.proto", fileDescriptor_feed_mapping_criterion_type_93ad8a18e2c6175b)
+}
+
+var fileDescriptor_feed_mapping_criterion_type_93ad8a18e2c6175b = []byte{
+	// 306 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xf3, 0x30,
+	0x18, 0x86, 0xff, 0x6e, 0xf0, 0x0b, 0x19, 0x62, 0xed, 0x91, 0x82, 0x3d, 0x70, 0x17, 0x90, 0x16,
+	0x3c, 0xf4, 0x40, 0xb2, 0x2e, 0x2b, 0x45, 0x97, 0x15, 0xd7, 0x4d, 0x90, 0x42, 0xa8, 0x4b, 0x0c,
+	0x95, 0x35, 0x09, 0x4d, 0x37, 0xd8, 0x2d, 0x78, 0x19, 0x1e, 0x7a, 0x29, 0x1e, 0x78, 0x4d, 0xd2,
+	0xd6, 0xee, 0xac, 0x9e, 0x84, 0x17, 0x5e, 0xbe, 0x27, 0xdf, 0xf7, 0x80, 0x3b, 0xa1, 0x94, 0xd8,
+	0x72, 0x2f, 0x63, 0xc6, 0x6b, 0x63, 0x9d, 0xf6, 0xbe, 0xc7, 0xe5, 0xae, 0x30, 0xde, 0x2b, 0xe7,
+	0x8c, 0x16, 0x99, 0xd6, 0xb9, 0x14, 0x74, 0x53, 0xe6, 0x15, 0x2f, 0x73, 0x25, 0x69, 0x75, 0xd0,
+	0x1c, 0xea, 0x52, 0x55, 0xca, 0x71, 0xdb, 0x29, 0x98, 0x31, 0x03, 0x8f, 0x00, 0xb8, 0xf7, 0x61,
+	0x03, 0x18, 0xbf, 0x5b, 0xe0, 0x6a, 0xc6, 0x39, 0x9b, 0xb7, 0x8c, 0xa0, 0x43, 0x24, 0x07, 0xcd,
+	0xb1, 0xdc, 0x15, 0xe3, 0x37, 0x70, 0xd1, 0xd7, 0x3b, 0x67, 0x60, 0xb4, 0x22, 0xcb, 0x18, 0x07,
+	0xd1, 0x2c, 0xc2, 0x53, 0xfb, 0x9f, 0x33, 0x02, 0x27, 0x2b, 0x72, 0x4f, 0x16, 0x4f, 0xc4, 0xb6,
+	0x1c, 0x17, 0x5c, 0x06, 0x68, 0x1e, 0xa3, 0x28, 0x24, 0xf4, 0x61, 0x11, 0xa0, 0x24, 0x5a, 0x10,
+	0x9a, 0xa0, 0xc7, 0x10, 0x27, 0x4b, 0x7b, 0xe0, 0x9c, 0x83, 0xd3, 0xe9, 0x12, 0xd1, 0x18, 0x85,
+	0x98, 0xce, 0x30, 0x9e, 0xda, 0xc3, 0xc9, 0xb7, 0x05, 0xae, 0x37, 0xaa, 0x80, 0x7f, 0xae, 0x3c,
+	0x71, 0xfb, 0xf6, 0x89, 0xeb, 0x83, 0x63, 0xeb, 0x79, 0xf2, 0x3b, 0x2f, 0xd4, 0x36, 0x93, 0x02,
+	0xaa, 0x52, 0x78, 0x82, 0xcb, 0x46, 0x47, 0xe7, 0x50, 0xe7, 0xa6, 0x47, 0xe9, 0x6d, 0xf3, 0x7e,
+	0x0c, 0x86, 0x21, 0x42, 0x9f, 0x03, 0x37, 0x6c, 0x51, 0x88, 0x19, 0xd8, 0xc6, 0x3a, 0xad, 0x7d,
+	0x58, 0xbb, 0x31, 0x5f, 0x5d, 0x9f, 0x22, 0x66, 0xd2, 0x63, 0x9f, 0xae, 0xfd, 0xb4, 0xe9, 0x5f,
+	0xfe, 0x37, 0x9f, 0xde, 0xfc, 0x04, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xc4, 0xa2, 0x02, 0xc6, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/feed_mapping_status.pb.go b/googleapis/ads/googleads/v0/enums/feed_mapping_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ea5d396c693c0ba9834fbe4e785b751b8ee7a617
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/feed_mapping_status.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/feed_mapping_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a feed mapping.
+type FeedMappingStatusEnum_FeedMappingStatus int32
+
+const (
+	// Not specified.
+	FeedMappingStatusEnum_UNSPECIFIED FeedMappingStatusEnum_FeedMappingStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedMappingStatusEnum_UNKNOWN FeedMappingStatusEnum_FeedMappingStatus = 1
+	// Feed mapping is enabled.
+	FeedMappingStatusEnum_ENABLED FeedMappingStatusEnum_FeedMappingStatus = 2
+	// Feed mapping has been removed.
+	FeedMappingStatusEnum_REMOVED FeedMappingStatusEnum_FeedMappingStatus = 3
+)
+
+var FeedMappingStatusEnum_FeedMappingStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+var FeedMappingStatusEnum_FeedMappingStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedMappingStatusEnum_FeedMappingStatus) String() string {
+	return proto.EnumName(FeedMappingStatusEnum_FeedMappingStatus_name, int32(x))
+}
+func (FeedMappingStatusEnum_FeedMappingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_status_654747732e989e69, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a feed mapping.
+type FeedMappingStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedMappingStatusEnum) Reset()         { *m = FeedMappingStatusEnum{} }
+func (m *FeedMappingStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingStatusEnum) ProtoMessage()    {}
+func (*FeedMappingStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_status_654747732e989e69, []int{0}
+}
+func (m *FeedMappingStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedMappingStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedMappingStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingStatusEnum.Merge(dst, src)
+}
+func (m *FeedMappingStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingStatusEnum.Size(m)
+}
+func (m *FeedMappingStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedMappingStatusEnum)(nil), "google.ads.googleads.v0.enums.FeedMappingStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FeedMappingStatusEnum_FeedMappingStatus", FeedMappingStatusEnum_FeedMappingStatus_name, FeedMappingStatusEnum_FeedMappingStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/feed_mapping_status.proto", fileDescriptor_feed_mapping_status_654747732e989e69)
+}
+
+var fileDescriptor_feed_mapping_status_654747732e989e69 = []byte{
+	// 266 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xb4, 0xd4, 0xd4, 0x94, 0xf8, 0xdc, 0xc4, 0x82, 0x82, 0xcc, 0xbc, 0xf4,
+	0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88,
+	0x6a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x46, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x46, 0xa5, 0x14,
+	0x2e, 0x51, 0xb7, 0xd4, 0xd4, 0x14, 0x5f, 0x88, 0xd6, 0x60, 0xb0, 0x4e, 0xd7, 0xbc, 0xd2, 0x5c,
+	0x25, 0x6f, 0x2e, 0x41, 0x0c, 0x09, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67,
+	0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff,
+	0x70, 0x3f, 0x01, 0x46, 0x10, 0xc7, 0xd5, 0xcf, 0xd1, 0xc9, 0xc7, 0xd5, 0x45, 0x80, 0x09, 0xc4,
+	0x09, 0x72, 0xf5, 0xf5, 0x0f, 0x73, 0x75, 0x11, 0x60, 0x76, 0x3a, 0xce, 0xc8, 0xa5, 0x98, 0x9c,
+	0x9f, 0xab, 0x87, 0xd7, 0x2d, 0x4e, 0x62, 0x18, 0x16, 0x06, 0x80, 0xbc, 0x10, 0xc0, 0x18, 0xe5,
+	0x04, 0xd5, 0x98, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a,
+	0x07, 0xf6, 0x20, 0x2c, 0x34, 0x0a, 0x32, 0x8b, 0x71, 0x04, 0x8e, 0x35, 0x98, 0x5c, 0xc4, 0xc4,
+	0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xd6, 0x1d, 0x62, 0x94, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09,
+	0x62, 0x85, 0x19, 0xe8, 0x81, 0x7c, 0x5d, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98, 0x52, 0x1c, 0x03,
+	0x97, 0x8f, 0x09, 0x33, 0x88, 0x01, 0xcb, 0x27, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00,
+	0xff, 0xff, 0x4f, 0x07, 0xd5, 0x76, 0x90, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/feed_origin.pb.go b/googleapis/ads/googleads/v0/enums/feed_origin.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..23fae1b7488db6f74304e6b84e3e53863f62b2e0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/feed_origin.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/feed_origin.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for a feed origin.
+type FeedOriginEnum_FeedOrigin int32
+
+const (
+	// Not specified.
+	FeedOriginEnum_UNSPECIFIED FeedOriginEnum_FeedOrigin = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedOriginEnum_UNKNOWN FeedOriginEnum_FeedOrigin = 1
+	// The FeedAttributes for this Feed are managed by the
+	// user. Users can add FeedAttributes to this Feed.
+	FeedOriginEnum_USER FeedOriginEnum_FeedOrigin = 2
+	// The FeedAttributes for an GOOGLE Feed are created by Google. A feed of
+	// this type is maintained by Google and will have the correct attributes
+	// for the placeholder type of the feed.
+	FeedOriginEnum_GOOGLE FeedOriginEnum_FeedOrigin = 3
+)
+
+var FeedOriginEnum_FeedOrigin_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "USER",
+	3: "GOOGLE",
+}
+var FeedOriginEnum_FeedOrigin_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"USER":        2,
+	"GOOGLE":      3,
+}
+
+func (x FeedOriginEnum_FeedOrigin) String() string {
+	return proto.EnumName(FeedOriginEnum_FeedOrigin_name, int32(x))
+}
+func (FeedOriginEnum_FeedOrigin) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_origin_5aa9a66e5b46cb8f, []int{0, 0}
+}
+
+// Container for enum describing possible values for a feed origin.
+type FeedOriginEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedOriginEnum) Reset()         { *m = FeedOriginEnum{} }
+func (m *FeedOriginEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedOriginEnum) ProtoMessage()    {}
+func (*FeedOriginEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_origin_5aa9a66e5b46cb8f, []int{0}
+}
+func (m *FeedOriginEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedOriginEnum.Unmarshal(m, b)
+}
+func (m *FeedOriginEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedOriginEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedOriginEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedOriginEnum.Merge(dst, src)
+}
+func (m *FeedOriginEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedOriginEnum.Size(m)
+}
+func (m *FeedOriginEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedOriginEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedOriginEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedOriginEnum)(nil), "google.ads.googleads.v0.enums.FeedOriginEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FeedOriginEnum_FeedOrigin", FeedOriginEnum_FeedOrigin_name, FeedOriginEnum_FeedOrigin_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/feed_origin.proto", fileDescriptor_feed_origin_5aa9a66e5b46cb8f)
+}
+
+var fileDescriptor_feed_origin_5aa9a66e5b46cb8f = []byte{
+	// 254 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0x86, 0x32, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc, 0xd2,
+	0xdc, 0x62, 0xfd, 0xb4, 0xd4, 0xd4, 0x94, 0xf8, 0xfc, 0xa2, 0xcc, 0xf4, 0xcc, 0x3c, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x2a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x06, 0xbd,
+	0x32, 0x03, 0x3d, 0xb0, 0x06, 0xa5, 0x20, 0x2e, 0x3e, 0xb7, 0xd4, 0xd4, 0x14, 0x7f, 0xb0, 0x16,
+	0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x07, 0x2e, 0x2e, 0x84, 0x88, 0x10, 0x3f, 0x17, 0x77, 0xa8, 0x5f,
+	0x70, 0x80, 0xab, 0xb3, 0xa7, 0x9b, 0xa7, 0xab, 0x8b, 0x00, 0x83, 0x10, 0x37, 0x17, 0x7b, 0xa8,
+	0x9f, 0xb7, 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0xa3, 0x10, 0x07, 0x17, 0x4b, 0x68, 0xb0, 0x6b, 0x90,
+	0x00, 0x93, 0x10, 0x17, 0x17, 0x9b, 0xbb, 0xbf, 0xbf, 0xbb, 0x8f, 0xab, 0x00, 0xb3, 0xd3, 0x01,
+	0x46, 0x2e, 0xc5, 0xe4, 0xfc, 0x5c, 0x3d, 0xbc, 0x36, 0x3b, 0xf1, 0x23, 0x6c, 0x09, 0x00, 0xb9,
+	0x34, 0x80, 0x31, 0xca, 0x09, 0xaa, 0x23, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28,
+	0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x0f, 0x98, 0x67, 0x0b, 0x32, 0x8b, 0x71, 0xf8, 0xdd, 0x1a,
+	0x4c, 0x2e, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24, 0xeb, 0x0e, 0x31, 0xca, 0x31, 0xa5,
+	0x58, 0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x40, 0x7e, 0x2c, 0x3e, 0x05, 0x93, 0x8f, 0x71,
+	0x4c, 0x29, 0x8e, 0x81, 0xcb, 0xc7, 0x84, 0x19, 0xc4, 0x80, 0xe5, 0x93, 0xd8, 0xc0, 0x96, 0x1a,
+	0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x41, 0xa0, 0x95, 0x7f, 0x6f, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/feed_status.pb.go b/googleapis/ads/googleads/v0/enums/feed_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ec7938a07b7841084c9b0dd4e49453232494fd0e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/feed_status.pb.go
@@ -0,0 +1,113 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/feed_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a feed.
+type FeedStatusEnum_FeedStatus int32
+
+const (
+	// Not specified.
+	FeedStatusEnum_UNSPECIFIED FeedStatusEnum_FeedStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedStatusEnum_UNKNOWN FeedStatusEnum_FeedStatus = 1
+	// Feed is enabled.
+	FeedStatusEnum_ENABLED FeedStatusEnum_FeedStatus = 2
+	// Feed has been removed.
+	FeedStatusEnum_REMOVED FeedStatusEnum_FeedStatus = 3
+)
+
+var FeedStatusEnum_FeedStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+var FeedStatusEnum_FeedStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x FeedStatusEnum_FeedStatus) String() string {
+	return proto.EnumName(FeedStatusEnum_FeedStatus_name, int32(x))
+}
+func (FeedStatusEnum_FeedStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_status_dd159d67991f6ccc, []int{0, 0}
+}
+
+// Container for enum describing possible statuses of a feed.
+type FeedStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedStatusEnum) Reset()         { *m = FeedStatusEnum{} }
+func (m *FeedStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedStatusEnum) ProtoMessage()    {}
+func (*FeedStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_status_dd159d67991f6ccc, []int{0}
+}
+func (m *FeedStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedStatusEnum.Unmarshal(m, b)
+}
+func (m *FeedStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedStatusEnum.Merge(dst, src)
+}
+func (m *FeedStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedStatusEnum.Size(m)
+}
+func (m *FeedStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedStatusEnum)(nil), "google.ads.googleads.v0.enums.FeedStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FeedStatusEnum_FeedStatus", FeedStatusEnum_FeedStatus_name, FeedStatusEnum_FeedStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/feed_status.proto", fileDescriptor_feed_status_dd159d67991f6ccc)
+}
+
+var fileDescriptor_feed_status_dd159d67991f6ccc = []byte{
+	// 253 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0x86, 0x32, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc, 0xd2,
+	0xdc, 0x62, 0xfd, 0xb4, 0xd4, 0xd4, 0x94, 0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x2a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x06, 0xbd,
+	0x32, 0x03, 0x3d, 0xb0, 0x06, 0xa5, 0x30, 0x2e, 0x3e, 0xb7, 0xd4, 0xd4, 0x94, 0x60, 0xb0, 0x16,
+	0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x17, 0x2e, 0x2e, 0x84, 0x88, 0x10, 0x3f, 0x17, 0x77, 0xa8, 0x5f,
+	0x70, 0x80, 0xab, 0xb3, 0xa7, 0x9b, 0xa7, 0xab, 0x8b, 0x00, 0x83, 0x10, 0x37, 0x17, 0x7b, 0xa8,
+	0x9f, 0xb7, 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0x23, 0x88, 0xe3, 0xea, 0xe7, 0xe8, 0xe4, 0xe3, 0xea,
+	0x22, 0xc0, 0x04, 0xe2, 0x04, 0xb9, 0xfa, 0xfa, 0x87, 0xb9, 0xba, 0x08, 0x30, 0x3b, 0x1d, 0x60,
+	0xe4, 0x52, 0x4c, 0xce, 0xcf, 0xd5, 0xc3, 0x6b, 0xbb, 0x13, 0x3f, 0xc2, 0xa6, 0x00, 0x90, 0x6b,
+	0x03, 0x18, 0xa3, 0x9c, 0xa0, 0x3a, 0xd2, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2,
+	0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x7e, 0x81, 0x79, 0xb8, 0x20, 0xb3, 0x18, 0x87, 0xff, 0xad, 0xc1,
+	0xe4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0xb2, 0xee, 0x10, 0xa3, 0x1c, 0x53, 0x8a,
+	0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0xe4, 0xcf, 0xe2, 0x53, 0x30, 0xf9, 0x18, 0xc7,
+	0x94, 0xe2, 0x18, 0xb8, 0x7c, 0x4c, 0x98, 0x41, 0x0c, 0x58, 0x3e, 0x89, 0x0d, 0x6c, 0xa9, 0x31,
+	0x20, 0x00, 0x00, 0xff, 0xff, 0x60, 0x36, 0x0a, 0x4e, 0x73, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/flight_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/flight_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d8c855cd72e735ddd7f491538f61e26594b108c5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/flight_placeholder_field.pb.go
@@ -0,0 +1,209 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/flight_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Flight placeholder fields.
+type FlightPlaceholderFieldEnum_FlightPlaceholderField int32
+
+const (
+	// Not specified.
+	FlightPlaceholderFieldEnum_UNSPECIFIED FlightPlaceholderFieldEnum_FlightPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	FlightPlaceholderFieldEnum_UNKNOWN FlightPlaceholderFieldEnum_FlightPlaceholderField = 1
+	// Data Type: STRING. Required. Destination id. Example: PAR, LON.
+	// For feed items that only have destination id, destination id must be a
+	// unique key. For feed items that have both destination id and origin id,
+	// then the combination must be a unique key.
+	FlightPlaceholderFieldEnum_DESTINATION_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 2
+	// Data Type: STRING. Origin id. Example: PAR, LON.
+	// Optional. Combination of destination id and origin id must be unique per
+	// offer.
+	FlightPlaceholderFieldEnum_ORIGIN_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with product name to be shown
+	// in dynamic ad.
+	FlightPlaceholderFieldEnum_FLIGHT_DESCRIPTION FlightPlaceholderFieldEnum_FlightPlaceholderField = 4
+	// Data Type: STRING. Shorter names are recommended.
+	FlightPlaceholderFieldEnum_ORIGIN_NAME FlightPlaceholderFieldEnum_FlightPlaceholderField = 5
+	// Data Type: STRING. Shorter names are recommended.
+	FlightPlaceholderFieldEnum_DESTINATION_NAME FlightPlaceholderFieldEnum_FlightPlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	FlightPlaceholderFieldEnum_FLIGHT_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	FlightPlaceholderFieldEnum_FORMATTED_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 8
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	FlightPlaceholderFieldEnum_FLIGHT_SALE_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 9
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	FlightPlaceholderFieldEnum_FORMATTED_SALE_PRICE FlightPlaceholderFieldEnum_FlightPlaceholderField = 10
+	// Data Type: URL. Image to be displayed in the ad.
+	FlightPlaceholderFieldEnum_IMAGE_URL FlightPlaceholderFieldEnum_FlightPlaceholderField = 11
+	// Data Type: URL_LIST. Required. Final URLs for the ad when using Upgraded
+	// URLs. User will be redirected to these URLs when they click on an ad, or
+	// when they click on a specific flight for ads that show multiple
+	// flights.
+	FlightPlaceholderFieldEnum_FINAL_URLS FlightPlaceholderFieldEnum_FlightPlaceholderField = 12
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	FlightPlaceholderFieldEnum_FINAL_MOBILE_URLS FlightPlaceholderFieldEnum_FlightPlaceholderField = 13
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	FlightPlaceholderFieldEnum_TRACKING_URL FlightPlaceholderFieldEnum_FlightPlaceholderField = 14
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	FlightPlaceholderFieldEnum_ANDROID_APP_LINK FlightPlaceholderFieldEnum_FlightPlaceholderField = 15
+	// Data Type: STRING_LIST. List of recommended destination IDs to show
+	// together with this item.
+	FlightPlaceholderFieldEnum_SIMILAR_DESTINATION_IDS FlightPlaceholderFieldEnum_FlightPlaceholderField = 16
+	// Data Type: STRING. iOS app link.
+	FlightPlaceholderFieldEnum_IOS_APP_LINK FlightPlaceholderFieldEnum_FlightPlaceholderField = 17
+	// Data Type: INT64. iOS app store ID.
+	FlightPlaceholderFieldEnum_IOS_APP_STORE_ID FlightPlaceholderFieldEnum_FlightPlaceholderField = 18
+)
+
+var FlightPlaceholderFieldEnum_FlightPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DESTINATION_ID",
+	3:  "ORIGIN_ID",
+	4:  "FLIGHT_DESCRIPTION",
+	5:  "ORIGIN_NAME",
+	6:  "DESTINATION_NAME",
+	7:  "FLIGHT_PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "FLIGHT_SALE_PRICE",
+	10: "FORMATTED_SALE_PRICE",
+	11: "IMAGE_URL",
+	12: "FINAL_URLS",
+	13: "FINAL_MOBILE_URLS",
+	14: "TRACKING_URL",
+	15: "ANDROID_APP_LINK",
+	16: "SIMILAR_DESTINATION_IDS",
+	17: "IOS_APP_LINK",
+	18: "IOS_APP_STORE_ID",
+}
+var FlightPlaceholderFieldEnum_FlightPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"DESTINATION_ID":          2,
+	"ORIGIN_ID":               3,
+	"FLIGHT_DESCRIPTION":      4,
+	"ORIGIN_NAME":             5,
+	"DESTINATION_NAME":        6,
+	"FLIGHT_PRICE":            7,
+	"FORMATTED_PRICE":         8,
+	"FLIGHT_SALE_PRICE":       9,
+	"FORMATTED_SALE_PRICE":    10,
+	"IMAGE_URL":               11,
+	"FINAL_URLS":              12,
+	"FINAL_MOBILE_URLS":       13,
+	"TRACKING_URL":            14,
+	"ANDROID_APP_LINK":        15,
+	"SIMILAR_DESTINATION_IDS": 16,
+	"IOS_APP_LINK":            17,
+	"IOS_APP_STORE_ID":        18,
+}
+
+func (x FlightPlaceholderFieldEnum_FlightPlaceholderField) String() string {
+	return proto.EnumName(FlightPlaceholderFieldEnum_FlightPlaceholderField_name, int32(x))
+}
+func (FlightPlaceholderFieldEnum_FlightPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c, []int{0, 0}
+}
+
+// Values for Flight placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type FlightPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FlightPlaceholderFieldEnum) Reset()         { *m = FlightPlaceholderFieldEnum{} }
+func (m *FlightPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*FlightPlaceholderFieldEnum) ProtoMessage()    {}
+func (*FlightPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c, []int{0}
+}
+func (m *FlightPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlightPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *FlightPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlightPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *FlightPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlightPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *FlightPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_FlightPlaceholderFieldEnum.Size(m)
+}
+func (m *FlightPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlightPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlightPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FlightPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.FlightPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FlightPlaceholderFieldEnum_FlightPlaceholderField", FlightPlaceholderFieldEnum_FlightPlaceholderField_name, FlightPlaceholderFieldEnum_FlightPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/flight_placeholder_field.proto", fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c)
+}
+
+var fileDescriptor_flight_placeholder_field_b2b97ba1cb854d8c = []byte{
+	// 459 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x6e, 0xd3, 0x40,
+	0x10, 0x26, 0x09, 0xb4, 0x74, 0xd2, 0x26, 0xdb, 0xa5, 0x14, 0x04, 0xf4, 0x40, 0x1f, 0xc0, 0x8e,
+	0xc4, 0x11, 0x2e, 0x9b, 0x78, 0x6d, 0x46, 0xb1, 0xd7, 0xd6, 0xae, 0x53, 0x24, 0x14, 0xc9, 0x0a,
+	0xb5, 0xeb, 0x46, 0x72, 0xe2, 0x28, 0x6e, 0xfb, 0x22, 0xbc, 0x01, 0x47, 0x8e, 0x3c, 0x06, 0x12,
+	0xef, 0x84, 0x76, 0xed, 0x34, 0x01, 0x41, 0x2f, 0xd6, 0xcc, 0x7c, 0x3f, 0x1e, 0xed, 0x7c, 0xf0,
+	0x21, 0x2f, 0xcb, 0xbc, 0xc8, 0xec, 0x59, 0x5a, 0xd9, 0x75, 0xa9, 0xab, 0xbb, 0x81, 0x9d, 0x2d,
+	0x6f, 0x17, 0x95, 0x7d, 0x55, 0xcc, 0xf3, 0xeb, 0x9b, 0x64, 0x55, 0xcc, 0x2e, 0xb3, 0xeb, 0xb2,
+	0x48, 0xb3, 0x75, 0x72, 0x35, 0xcf, 0x8a, 0xd4, 0x5a, 0xad, 0xcb, 0x9b, 0x92, 0x9e, 0xd5, 0x12,
+	0x6b, 0x96, 0x56, 0xd6, 0xbd, 0xda, 0xba, 0x1b, 0x58, 0x46, 0x7d, 0xfe, 0xa3, 0x03, 0xaf, 0x5c,
+	0xe3, 0x10, 0x6d, 0x0d, 0x5c, 0xad, 0xe7, 0xcb, 0xdb, 0xc5, 0xf9, 0xd7, 0x0e, 0x9c, 0xfe, 0x1b,
+	0xa6, 0x7d, 0xe8, 0x4e, 0x84, 0x8a, 0xf8, 0x08, 0x5d, 0xe4, 0x0e, 0x79, 0x44, 0xbb, 0xb0, 0x3f,
+	0x11, 0x63, 0x11, 0x7e, 0x12, 0xa4, 0x45, 0x29, 0xf4, 0x1c, 0xae, 0x62, 0x14, 0x2c, 0xc6, 0x50,
+	0x24, 0xe8, 0x90, 0x36, 0x3d, 0x82, 0x83, 0x50, 0xa2, 0x87, 0xa6, 0xed, 0xd0, 0x53, 0xa0, 0xae,
+	0x8f, 0xde, 0xc7, 0x38, 0x71, 0xb8, 0x1a, 0x49, 0x8c, 0x34, 0x93, 0x3c, 0xd6, 0xc6, 0x0d, 0x4d,
+	0xb0, 0x80, 0x93, 0x27, 0xf4, 0x04, 0xc8, 0xae, 0x97, 0x99, 0xee, 0x51, 0x02, 0x87, 0x8d, 0x3c,
+	0x92, 0x38, 0xe2, 0x64, 0x9f, 0x3e, 0x83, 0xbe, 0x1b, 0xca, 0x80, 0xc5, 0x31, 0x77, 0x9a, 0xe1,
+	0x53, 0xfa, 0x1c, 0x8e, 0x1b, 0x9a, 0x62, 0x3e, 0x6f, 0xc6, 0x07, 0xf4, 0x25, 0x9c, 0x6c, 0xb9,
+	0x3b, 0x08, 0xe8, 0x2d, 0x31, 0x60, 0x1e, 0x4f, 0x26, 0xd2, 0x27, 0x5d, 0xda, 0x03, 0x70, 0x51,
+	0x30, 0x5f, 0xb7, 0x8a, 0x1c, 0x1a, 0x3f, 0xd3, 0x07, 0xe1, 0x10, 0x7d, 0x5e, 0x8f, 0x8f, 0xf4,
+	0x36, 0xb1, 0x64, 0xa3, 0x31, 0x0a, 0xcf, 0x08, 0x7b, 0x7a, 0x6b, 0x26, 0x1c, 0x19, 0xa2, 0x93,
+	0xb0, 0x28, 0x4a, 0x7c, 0x14, 0x63, 0xd2, 0xa7, 0xaf, 0xe1, 0x85, 0xc2, 0x00, 0x7d, 0x26, 0x93,
+	0x3f, 0xdf, 0x47, 0x11, 0xa2, 0x4d, 0x30, 0x54, 0x5b, 0xfa, 0xb1, 0x36, 0xd9, 0x4c, 0x54, 0x1c,
+	0x4a, 0xae, 0x5f, 0x8e, 0x0e, 0x7f, 0xb5, 0xe0, 0xed, 0x65, 0xb9, 0xb0, 0x1e, 0x3c, 0xed, 0xf0,
+	0x4d, 0x7d, 0xb8, 0xea, 0xef, 0xcb, 0x45, 0x3a, 0x17, 0x51, 0xeb, 0xf3, 0xb0, 0x91, 0xe7, 0x65,
+	0x31, 0x5b, 0xe6, 0x56, 0xb9, 0xce, 0xed, 0x3c, 0x5b, 0x9a, 0xd4, 0x6c, 0x72, 0xb6, 0x9a, 0x57,
+	0xff, 0x89, 0xdd, 0x7b, 0xf3, 0xfd, 0xd6, 0xee, 0x78, 0x8c, 0x7d, 0x6f, 0x9f, 0x79, 0xb5, 0x15,
+	0x4b, 0x2b, 0xab, 0x2e, 0x75, 0x75, 0x31, 0xb0, 0x74, 0x88, 0xaa, 0x9f, 0x1b, 0x7c, 0xca, 0xd2,
+	0x6a, 0x7a, 0x8f, 0x4f, 0x2f, 0x06, 0x53, 0x83, 0x7f, 0xd9, 0x33, 0x3f, 0x7d, 0xf7, 0x3b, 0x00,
+	0x00, 0xff, 0xff, 0xad, 0x22, 0x49, 0x9f, 0xea, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/frequency_cap_event_type.pb.go b/googleapis/ads/googleads/v0/enums/frequency_cap_event_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..569600efa5cbf2d1ad138face58f2b468e2bf762
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/frequency_cap_event_type.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/frequency_cap_event_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of event that the cap applies to (e.g. impression).
+type FrequencyCapEventTypeEnum_FrequencyCapEventType int32
+
+const (
+	// Not specified.
+	FrequencyCapEventTypeEnum_UNSPECIFIED FrequencyCapEventTypeEnum_FrequencyCapEventType = 0
+	// Used for return value only. Represents value unknown in this version.
+	FrequencyCapEventTypeEnum_UNKNOWN FrequencyCapEventTypeEnum_FrequencyCapEventType = 1
+	// The cap applies on ad impressions.
+	FrequencyCapEventTypeEnum_IMPRESSION FrequencyCapEventTypeEnum_FrequencyCapEventType = 2
+	// The cap applies on video ad views.
+	FrequencyCapEventTypeEnum_VIDEO_VIEW FrequencyCapEventTypeEnum_FrequencyCapEventType = 3
+)
+
+var FrequencyCapEventTypeEnum_FrequencyCapEventType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "IMPRESSION",
+	3: "VIDEO_VIEW",
+}
+var FrequencyCapEventTypeEnum_FrequencyCapEventType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"IMPRESSION":  2,
+	"VIDEO_VIEW":  3,
+}
+
+func (x FrequencyCapEventTypeEnum_FrequencyCapEventType) String() string {
+	return proto.EnumName(FrequencyCapEventTypeEnum_FrequencyCapEventType_name, int32(x))
+}
+func (FrequencyCapEventTypeEnum_FrequencyCapEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_event_type_c321322f57b41e88, []int{0, 0}
+}
+
+// Container for enum describing the type of event that the cap applies to.
+type FrequencyCapEventTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FrequencyCapEventTypeEnum) Reset()         { *m = FrequencyCapEventTypeEnum{} }
+func (m *FrequencyCapEventTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapEventTypeEnum) ProtoMessage()    {}
+func (*FrequencyCapEventTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_event_type_c321322f57b41e88, []int{0}
+}
+func (m *FrequencyCapEventTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapEventTypeEnum.Unmarshal(m, b)
+}
+func (m *FrequencyCapEventTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapEventTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *FrequencyCapEventTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapEventTypeEnum.Merge(dst, src)
+}
+func (m *FrequencyCapEventTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapEventTypeEnum.Size(m)
+}
+func (m *FrequencyCapEventTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapEventTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapEventTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FrequencyCapEventTypeEnum)(nil), "google.ads.googleads.v0.enums.FrequencyCapEventTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FrequencyCapEventTypeEnum_FrequencyCapEventType", FrequencyCapEventTypeEnum_FrequencyCapEventType_name, FrequencyCapEventTypeEnum_FrequencyCapEventType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/frequency_cap_event_type.proto", fileDescriptor_frequency_cap_event_type_c321322f57b41e88)
+}
+
+var fileDescriptor_frequency_cap_event_type_c321322f57b41e88 = []byte{
+	// 283 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xb4, 0xa2, 0xd4, 0xc2, 0xd2, 0xd4, 0xbc, 0xe4, 0xca, 0xf8, 0xe4, 0xc4,
+	0x82, 0xf8, 0xd4, 0xb2, 0xd4, 0xbc, 0x92, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc,
+	0x92, 0x7c, 0x21, 0x59, 0x88, 0x16, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x6e, 0xbd, 0x32, 0x03,
+	0x3d, 0xb0, 0x6e, 0xa5, 0x22, 0x2e, 0x49, 0x37, 0x98, 0x01, 0xce, 0x89, 0x05, 0xae, 0x20, 0xed,
+	0x21, 0x95, 0x05, 0xa9, 0xae, 0x79, 0xa5, 0xb9, 0x4a, 0xa1, 0x5c, 0xa2, 0x58, 0x25, 0x85, 0xf8,
+	0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c, 0x9d, 0x3d, 0xdd, 0x3c, 0x5d, 0x5d, 0x04, 0x18, 0x84,
+	0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd, 0xfc, 0xc3, 0xfd, 0x04, 0x18, 0x85, 0xf8, 0xb8, 0xb8,
+	0x3c, 0x7d, 0x03, 0x82, 0x5c, 0x83, 0x83, 0x3d, 0xfd, 0xfd, 0x04, 0x98, 0x40, 0xfc, 0x30, 0x4f,
+	0x17, 0x57, 0xff, 0xf8, 0x30, 0x4f, 0xd7, 0x70, 0x01, 0x66, 0xa7, 0xd3, 0x8c, 0x5c, 0x8a, 0xc9,
+	0xf9, 0xb9, 0x7a, 0x78, 0x5d, 0xe6, 0x24, 0x85, 0xd5, 0xea, 0x00, 0x90, 0xa7, 0x02, 0x18, 0xa3,
+	0x9c, 0xa0, 0x9a, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53,
+	0xf3, 0xc0, 0x5e, 0x86, 0x05, 0x52, 0x41, 0x66, 0x31, 0x8e, 0x30, 0xb3, 0x06, 0x93, 0x8b, 0x98,
+	0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0xc9, 0xba, 0x43, 0x8c, 0x72, 0x4c, 0x29, 0xd6, 0x83, 0x30,
+	0x41, 0xac, 0x30, 0x03, 0x3d, 0x50, 0x18, 0x14, 0x9f, 0x82, 0xc9, 0xc7, 0x38, 0xa6, 0x14, 0xc7,
+	0xc0, 0xe5, 0x63, 0xc2, 0x0c, 0x62, 0xc0, 0xf2, 0x49, 0x6c, 0x60, 0x4b, 0x8d, 0x01, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0x2a, 0x2b, 0x21, 0xfe, 0xa7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/frequency_cap_level.pb.go b/googleapis/ads/googleads/v0/enums/frequency_cap_level.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f45fbdb839fcfe3ef8a5e3c9eefd81088cfb7e28
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/frequency_cap_level.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/frequency_cap_level.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The level on which the cap is to be applied (e.g ad group ad, ad group).
+// Cap is applied to all the resources of this level.
+type FrequencyCapLevelEnum_FrequencyCapLevel int32
+
+const (
+	// Not specified.
+	FrequencyCapLevelEnum_UNSPECIFIED FrequencyCapLevelEnum_FrequencyCapLevel = 0
+	// Used for return value only. Represents value unknown in this version.
+	FrequencyCapLevelEnum_UNKNOWN FrequencyCapLevelEnum_FrequencyCapLevel = 1
+	// The cap is applied at the ad group ad level.
+	FrequencyCapLevelEnum_AD_GROUP_AD FrequencyCapLevelEnum_FrequencyCapLevel = 2
+	// The cap is applied at the ad group level.
+	FrequencyCapLevelEnum_AD_GROUP FrequencyCapLevelEnum_FrequencyCapLevel = 3
+	// The cap is applied at the campaign level.
+	FrequencyCapLevelEnum_CAMPAIGN FrequencyCapLevelEnum_FrequencyCapLevel = 4
+)
+
+var FrequencyCapLevelEnum_FrequencyCapLevel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_GROUP_AD",
+	3: "AD_GROUP",
+	4: "CAMPAIGN",
+}
+var FrequencyCapLevelEnum_FrequencyCapLevel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AD_GROUP_AD": 2,
+	"AD_GROUP":    3,
+	"CAMPAIGN":    4,
+}
+
+func (x FrequencyCapLevelEnum_FrequencyCapLevel) String() string {
+	return proto.EnumName(FrequencyCapLevelEnum_FrequencyCapLevel_name, int32(x))
+}
+func (FrequencyCapLevelEnum_FrequencyCapLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_level_35a61c6952c59b53, []int{0, 0}
+}
+
+// Container for enum describing the level on which the cap is to be applied.
+type FrequencyCapLevelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FrequencyCapLevelEnum) Reset()         { *m = FrequencyCapLevelEnum{} }
+func (m *FrequencyCapLevelEnum) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapLevelEnum) ProtoMessage()    {}
+func (*FrequencyCapLevelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_level_35a61c6952c59b53, []int{0}
+}
+func (m *FrequencyCapLevelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapLevelEnum.Unmarshal(m, b)
+}
+func (m *FrequencyCapLevelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapLevelEnum.Marshal(b, m, deterministic)
+}
+func (dst *FrequencyCapLevelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapLevelEnum.Merge(dst, src)
+}
+func (m *FrequencyCapLevelEnum) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapLevelEnum.Size(m)
+}
+func (m *FrequencyCapLevelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapLevelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapLevelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FrequencyCapLevelEnum)(nil), "google.ads.googleads.v0.enums.FrequencyCapLevelEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FrequencyCapLevelEnum_FrequencyCapLevel", FrequencyCapLevelEnum_FrequencyCapLevel_name, FrequencyCapLevelEnum_FrequencyCapLevel_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/frequency_cap_level.proto", fileDescriptor_frequency_cap_level_35a61c6952c59b53)
+}
+
+var fileDescriptor_frequency_cap_level_35a61c6952c59b53 = []byte{
+	// 278 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xb4, 0xa2, 0xd4, 0xc2, 0xd2, 0xd4, 0xbc, 0xe4, 0xca, 0xf8, 0xe4, 0xc4,
+	0x82, 0xf8, 0x9c, 0xd4, 0xb2, 0xd4, 0x1c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88,
+	0x6a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x46, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x46, 0xa5, 0x72,
+	0x2e, 0x51, 0x37, 0x98, 0x5e, 0xe7, 0xc4, 0x02, 0x1f, 0x90, 0x4e, 0xd7, 0xbc, 0xd2, 0x5c, 0xa5,
+	0x38, 0x2e, 0x41, 0x0c, 0x09, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f,
+	0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70,
+	0x3f, 0x01, 0x46, 0x90, 0xac, 0xa3, 0x4b, 0xbc, 0x7b, 0x90, 0x7f, 0x68, 0x40, 0xbc, 0xa3, 0x8b,
+	0x00, 0x93, 0x10, 0x0f, 0x17, 0x07, 0x4c, 0x40, 0x80, 0x19, 0xc4, 0x73, 0x76, 0xf4, 0x0d, 0x70,
+	0xf4, 0x74, 0xf7, 0x13, 0x60, 0x71, 0x3a, 0xce, 0xc8, 0xa5, 0x98, 0x9c, 0x9f, 0xab, 0x87, 0xd7,
+	0x79, 0x4e, 0x62, 0x18, 0x6e, 0x08, 0x00, 0xf9, 0x2a, 0x80, 0x31, 0xca, 0x09, 0xaa, 0x31, 0x3d,
+	0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x67, 0x58,
+	0x00, 0x15, 0x64, 0x16, 0xe3, 0x08, 0x2f, 0x6b, 0x30, 0xb9, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71,
+	0x15, 0x93, 0xac, 0x3b, 0xc4, 0x28, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0,
+	0x03, 0x05, 0x44, 0xf1, 0x29, 0x98, 0x7c, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x3e, 0x26, 0xcc,
+	0x20, 0x06, 0x2c, 0x9f, 0xc4, 0x06, 0xb6, 0xd4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xa9, 0xd4,
+	0x7b, 0x7f, 0xa3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/frequency_cap_time_unit.pb.go b/googleapis/ads/googleads/v0/enums/frequency_cap_time_unit.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..cbe8c3eba0bbae5a8e129693e45fce499be8ece4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/frequency_cap_time_unit.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/frequency_cap_time_unit.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Unit of time the cap is defined at (e.g. day, week).
+type FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit int32
+
+const (
+	// Not specified.
+	FrequencyCapTimeUnitEnum_UNSPECIFIED FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 0
+	// Used for return value only. Represents value unknown in this version.
+	FrequencyCapTimeUnitEnum_UNKNOWN FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 1
+	// The cap would define limit per one day.
+	FrequencyCapTimeUnitEnum_DAY FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 2
+	// The cap would define limit per one week.
+	FrequencyCapTimeUnitEnum_WEEK FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 3
+	// The cap would define limit per one month.
+	FrequencyCapTimeUnitEnum_MONTH FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit = 4
+)
+
+var FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DAY",
+	3: "WEEK",
+	4: "MONTH",
+}
+var FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"DAY":         2,
+	"WEEK":        3,
+	"MONTH":       4,
+}
+
+func (x FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit) String() string {
+	return proto.EnumName(FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_name, int32(x))
+}
+func (FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_time_unit_53c48a163d408dee, []int{0, 0}
+}
+
+// Container for enum describing the unit of time the cap is defined at.
+type FrequencyCapTimeUnitEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FrequencyCapTimeUnitEnum) Reset()         { *m = FrequencyCapTimeUnitEnum{} }
+func (m *FrequencyCapTimeUnitEnum) String() string { return proto.CompactTextString(m) }
+func (*FrequencyCapTimeUnitEnum) ProtoMessage()    {}
+func (*FrequencyCapTimeUnitEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_frequency_cap_time_unit_53c48a163d408dee, []int{0}
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FrequencyCapTimeUnitEnum.Unmarshal(m, b)
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FrequencyCapTimeUnitEnum.Marshal(b, m, deterministic)
+}
+func (dst *FrequencyCapTimeUnitEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FrequencyCapTimeUnitEnum.Merge(dst, src)
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_Size() int {
+	return xxx_messageInfo_FrequencyCapTimeUnitEnum.Size(m)
+}
+func (m *FrequencyCapTimeUnitEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FrequencyCapTimeUnitEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FrequencyCapTimeUnitEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FrequencyCapTimeUnitEnum)(nil), "google.ads.googleads.v0.enums.FrequencyCapTimeUnitEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit", FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_name, FrequencyCapTimeUnitEnum_FrequencyCapTimeUnit_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/frequency_cap_time_unit.proto", fileDescriptor_frequency_cap_time_unit_53c48a163d408dee)
+}
+
+var fileDescriptor_frequency_cap_time_unit_53c48a163d408dee = []byte{
+	// 283 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xb4, 0xa2, 0xd4, 0xc2, 0xd2, 0xd4, 0xbc, 0xe4, 0xca, 0xf8, 0xe4, 0xc4,
+	0x82, 0xf8, 0x92, 0xcc, 0xdc, 0xd4, 0xf8, 0xd2, 0xbc, 0xcc, 0x12, 0xbd, 0x82, 0xa2, 0xfc, 0x92,
+	0x7c, 0x21, 0x59, 0x88, 0x0e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x66, 0xbd, 0x32, 0x03, 0x3d,
+	0xb0, 0x66, 0xa5, 0x3c, 0x2e, 0x09, 0x37, 0x98, 0x7e, 0xe7, 0xc4, 0x82, 0x90, 0xcc, 0xdc, 0xd4,
+	0xd0, 0xbc, 0xcc, 0x12, 0xd7, 0xbc, 0xd2, 0x5c, 0xa5, 0x20, 0x2e, 0x11, 0x6c, 0x72, 0x42, 0xfc,
+	0x5c, 0xdc, 0xa1, 0x7e, 0xc1, 0x01, 0xae, 0xce, 0x9e, 0x6e, 0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42,
+	0xdc, 0x5c, 0xec, 0xa1, 0x7e, 0xde, 0x7e, 0xfe, 0xe1, 0x7e, 0x02, 0x8c, 0x42, 0xec, 0x5c, 0xcc,
+	0x2e, 0x8e, 0x91, 0x02, 0x4c, 0x42, 0x1c, 0x5c, 0x2c, 0xe1, 0xae, 0xae, 0xde, 0x02, 0xcc, 0x42,
+	0x9c, 0x5c, 0xac, 0xbe, 0xfe, 0x7e, 0x21, 0x1e, 0x02, 0x2c, 0x4e, 0xa7, 0x18, 0xb9, 0x14, 0x93,
+	0xf3, 0x73, 0xf5, 0xf0, 0xba, 0xca, 0x49, 0x12, 0x9b, 0xbd, 0x01, 0x20, 0xff, 0x04, 0x30, 0x46,
+	0x39, 0x41, 0xf5, 0xa6, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0xe5, 0x17, 0xa5, 0xeb, 0xa7, 0xa7,
+	0xe6, 0x81, 0x7d, 0x0b, 0x0b, 0x9e, 0x82, 0xcc, 0x62, 0x1c, 0xa1, 0x65, 0x0d, 0x26, 0x17, 0x31,
+	0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x92, 0x75, 0x87, 0x18, 0xe5, 0x98, 0x52, 0xac, 0x07, 0x61,
+	0x82, 0x58, 0x61, 0x06, 0x7a, 0x20, 0xff, 0x17, 0x9f, 0x82, 0xc9, 0xc7, 0x38, 0xa6, 0x14, 0xc7,
+	0xc0, 0xe5, 0x63, 0xc2, 0x0c, 0x62, 0xc0, 0xf2, 0x49, 0x6c, 0x60, 0x4b, 0x8d, 0x01, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0x08, 0x5e, 0x5d, 0x49, 0xa1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/gender_type.pb.go b/googleapis/ads/googleads/v0/enums/gender_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..25f0720a4fad37782184999e134e8d6e928f1bc4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/gender_type.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/gender_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of demographic genders (e.g. female).
+type GenderTypeEnum_GenderType int32
+
+const (
+	// Not specified.
+	GenderTypeEnum_UNSPECIFIED GenderTypeEnum_GenderType = 0
+	// Used for return value only. Represents value unknown in this version.
+	GenderTypeEnum_UNKNOWN GenderTypeEnum_GenderType = 1
+	// Male.
+	GenderTypeEnum_MALE GenderTypeEnum_GenderType = 10
+	// Female.
+	GenderTypeEnum_FEMALE GenderTypeEnum_GenderType = 11
+	// Undetermined gender.
+	GenderTypeEnum_UNDETERMINED GenderTypeEnum_GenderType = 20
+)
+
+var GenderTypeEnum_GenderType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	10: "MALE",
+	11: "FEMALE",
+	20: "UNDETERMINED",
+}
+var GenderTypeEnum_GenderType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"MALE":         10,
+	"FEMALE":       11,
+	"UNDETERMINED": 20,
+}
+
+func (x GenderTypeEnum_GenderType) String() string {
+	return proto.EnumName(GenderTypeEnum_GenderType_name, int32(x))
+}
+func (GenderTypeEnum_GenderType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_gender_type_224225f2f930dba5, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic genders.
+type GenderTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenderTypeEnum) Reset()         { *m = GenderTypeEnum{} }
+func (m *GenderTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*GenderTypeEnum) ProtoMessage()    {}
+func (*GenderTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_gender_type_224225f2f930dba5, []int{0}
+}
+func (m *GenderTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenderTypeEnum.Unmarshal(m, b)
+}
+func (m *GenderTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenderTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *GenderTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenderTypeEnum.Merge(dst, src)
+}
+func (m *GenderTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_GenderTypeEnum.Size(m)
+}
+func (m *GenderTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenderTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenderTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*GenderTypeEnum)(nil), "google.ads.googleads.v0.enums.GenderTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.GenderTypeEnum_GenderType", GenderTypeEnum_GenderType_name, GenderTypeEnum_GenderType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/gender_type.proto", fileDescriptor_gender_type_224225f2f930dba5)
+}
+
+var fileDescriptor_gender_type_224225f2f930dba5 = []byte{
+	// 267 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0x86, 0x32, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc, 0xd2,
+	0xdc, 0x62, 0xfd, 0xf4, 0xd4, 0xbc, 0x94, 0xd4, 0xa2, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x2a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x06, 0xbd,
+	0x32, 0x03, 0x3d, 0xb0, 0x06, 0xa5, 0x14, 0x2e, 0x3e, 0x77, 0xb0, 0x9e, 0x90, 0xca, 0x82, 0x54,
+	0xd7, 0xbc, 0xd2, 0x5c, 0xa5, 0x20, 0x2e, 0x2e, 0x84, 0x88, 0x10, 0x3f, 0x17, 0x77, 0xa8, 0x5f,
+	0x70, 0x80, 0xab, 0xb3, 0xa7, 0x9b, 0xa7, 0xab, 0x8b, 0x00, 0x83, 0x10, 0x37, 0x17, 0x7b, 0xa8,
+	0x9f, 0xb7, 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0xa3, 0x10, 0x07, 0x17, 0x8b, 0xaf, 0xa3, 0x8f, 0xab,
+	0x00, 0x97, 0x10, 0x17, 0x17, 0x9b, 0x9b, 0x2b, 0x98, 0xcd, 0x2d, 0x24, 0xc0, 0xc5, 0x13, 0xea,
+	0xe7, 0xe2, 0x1a, 0xe2, 0x1a, 0xe4, 0xeb, 0xe9, 0xe7, 0xea, 0x22, 0x20, 0xe2, 0x74, 0x80, 0x91,
+	0x4b, 0x31, 0x39, 0x3f, 0x57, 0x0f, 0xaf, 0x5b, 0x9c, 0xf8, 0x11, 0xf6, 0x06, 0x80, 0xdc, 0x1e,
+	0xc0, 0x18, 0xe5, 0x04, 0xd5, 0x91, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0x0e,
+	0xf2, 0x22, 0xd8, 0x67, 0x30, 0xef, 0x17, 0x64, 0x16, 0xe3, 0x08, 0x0d, 0x6b, 0x30, 0xb9, 0x88,
+	0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0xac, 0x3b, 0xc4, 0x28, 0xc7, 0x94, 0x62, 0x3d, 0x08,
+	0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x03, 0xf9, 0xba, 0xf8, 0x14, 0x4c, 0x3e, 0xc6, 0x31, 0xa5, 0x38,
+	0x06, 0x2e, 0x1f, 0x13, 0x66, 0x10, 0x03, 0x96, 0x4f, 0x62, 0x03, 0x5b, 0x6a, 0x0c, 0x08, 0x00,
+	0x00, 0xff, 0xff, 0xc3, 0x0d, 0x58, 0x77, 0x81, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/geo_target_constant_status.pb.go b/googleapis/ads/googleads/v0/enums/geo_target_constant_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5d79f3b1dc6156cadd8cb289cdaae5f35ce52837
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/geo_target_constant_status.pb.go
@@ -0,0 +1,117 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/geo_target_constant_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible statuses of a geo target constant.
+type GeoTargetConstantStatusEnum_GeoTargetConstantStatus int32
+
+const (
+	// No value has been specified.
+	GeoTargetConstantStatusEnum_UNSPECIFIED GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	GeoTargetConstantStatusEnum_UNKNOWN GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 1
+	// The geo target constant is valid.
+	GeoTargetConstantStatusEnum_ENABLED GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 2
+	// The geo target constant is obsolete and will be removed.
+	GeoTargetConstantStatusEnum_REMOVAL_PLANNED GeoTargetConstantStatusEnum_GeoTargetConstantStatus = 3
+)
+
+var GeoTargetConstantStatusEnum_GeoTargetConstantStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVAL_PLANNED",
+}
+var GeoTargetConstantStatusEnum_GeoTargetConstantStatus_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"ENABLED":         2,
+	"REMOVAL_PLANNED": 3,
+}
+
+func (x GeoTargetConstantStatusEnum_GeoTargetConstantStatus) String() string {
+	return proto.EnumName(GeoTargetConstantStatusEnum_GeoTargetConstantStatus_name, int32(x))
+}
+func (GeoTargetConstantStatusEnum_GeoTargetConstantStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_status_01172c2684dfd41a, []int{0, 0}
+}
+
+// Container for describing the status of a geo target constant.
+type GeoTargetConstantStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeoTargetConstantStatusEnum) Reset()         { *m = GeoTargetConstantStatusEnum{} }
+func (m *GeoTargetConstantStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstantStatusEnum) ProtoMessage()    {}
+func (*GeoTargetConstantStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_status_01172c2684dfd41a, []int{0}
+}
+func (m *GeoTargetConstantStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstantStatusEnum.Unmarshal(m, b)
+}
+func (m *GeoTargetConstantStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstantStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *GeoTargetConstantStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstantStatusEnum.Merge(dst, src)
+}
+func (m *GeoTargetConstantStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstantStatusEnum.Size(m)
+}
+func (m *GeoTargetConstantStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstantStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstantStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*GeoTargetConstantStatusEnum)(nil), "google.ads.googleads.v0.enums.GeoTargetConstantStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus", GeoTargetConstantStatusEnum_GeoTargetConstantStatus_name, GeoTargetConstantStatusEnum_GeoTargetConstantStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/geo_target_constant_status.proto", fileDescriptor_geo_target_constant_status_01172c2684dfd41a)
+}
+
+var fileDescriptor_geo_target_constant_status_01172c2684dfd41a = []byte{
+	// 285 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0x86, 0x5d, 0x07, 0x0a, 0xd9, 0x61, 0xa5, 0x1e, 0x3c, 0xe8, 0x0e, 0xee, 0x07, 0xa4, 0x05,
+	0x8f, 0x82, 0x90, 0xae, 0xb1, 0x0c, 0x6b, 0x56, 0x9c, 0xab, 0x28, 0x85, 0x12, 0xd7, 0x10, 0x84,
+	0x35, 0x19, 0xfd, 0xd2, 0xe1, 0xef, 0xf1, 0xe8, 0x4f, 0x11, 0xfc, 0x4f, 0xd2, 0x74, 0xdb, 0xad,
+	0x5e, 0xc2, 0x1b, 0x5e, 0x9e, 0xf7, 0xfb, 0xbe, 0x17, 0xdd, 0x49, 0xad, 0xe5, 0x46, 0xf8, 0xbc,
+	0x04, 0xbf, 0x93, 0xad, 0xda, 0x05, 0xbe, 0x50, 0x4d, 0x05, 0xbe, 0x14, 0xba, 0x30, 0xbc, 0x96,
+	0xc2, 0x14, 0x6b, 0xad, 0xc0, 0x70, 0x65, 0x0a, 0x30, 0xdc, 0x34, 0x80, 0xb7, 0xb5, 0x36, 0xda,
+	0x9b, 0x74, 0x10, 0xe6, 0x25, 0xe0, 0x23, 0x8f, 0x77, 0x01, 0xb6, 0xfc, 0xf4, 0x13, 0x5d, 0xc6,
+	0x42, 0x3f, 0xdb, 0x84, 0xd9, 0x3e, 0x60, 0x69, 0x79, 0xaa, 0x9a, 0x6a, 0xfa, 0x8a, 0x2e, 0x7a,
+	0x6c, 0x6f, 0x8c, 0x46, 0x2b, 0xb6, 0x4c, 0xe9, 0x6c, 0x7e, 0x3f, 0xa7, 0x91, 0x7b, 0xe2, 0x8d,
+	0xd0, 0xd9, 0x8a, 0x3d, 0xb0, 0xc5, 0x0b, 0x73, 0x07, 0xed, 0x87, 0x32, 0x12, 0x26, 0x34, 0x72,
+	0x1d, 0xef, 0x1c, 0x8d, 0x9f, 0xe8, 0xe3, 0x22, 0x23, 0x49, 0x91, 0x26, 0x84, 0x31, 0x1a, 0xb9,
+	0xc3, 0xf0, 0x77, 0x80, 0xae, 0xd7, 0xba, 0xc2, 0xff, 0xee, 0x17, 0x5e, 0xf5, 0x8c, 0x4f, 0xdb,
+	0xe3, 0xd2, 0xc1, 0x5b, 0xb8, 0xc7, 0xa5, 0xde, 0x70, 0x25, 0xb1, 0xae, 0xa5, 0x2f, 0x85, 0xb2,
+	0xa7, 0x1f, 0xea, 0xda, 0x7e, 0x40, 0x4f, 0x7b, 0xb7, 0xf6, 0xfd, 0x72, 0x86, 0x31, 0x21, 0xdf,
+	0xce, 0x24, 0xee, 0xa2, 0x48, 0x09, 0xb8, 0x93, 0xad, 0xca, 0x02, 0xdc, 0x36, 0x01, 0x3f, 0x07,
+	0x3f, 0x27, 0x25, 0xe4, 0x47, 0x3f, 0xcf, 0x82, 0xdc, 0xfa, 0xef, 0xa7, 0x76, 0xe8, 0xcd, 0x5f,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x25, 0x72, 0x39, 0xb1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/geo_targeting_restriction.pb.go b/googleapis/ads/googleads/v0/enums/geo_targeting_restriction.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a7e898482cb06e133ecd2ced0bea514e41103279
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/geo_targeting_restriction.pb.go
@@ -0,0 +1,113 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/geo_targeting_restriction.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A restriction used to determine if the request context's
+// geo should be matched.
+type GeoTargetingRestrictionEnum_GeoTargetingRestriction int32
+
+const (
+	// Not specified.
+	GeoTargetingRestrictionEnum_UNSPECIFIED GeoTargetingRestrictionEnum_GeoTargetingRestriction = 0
+	// Used for return value only. Represents value unknown in this version.
+	GeoTargetingRestrictionEnum_UNKNOWN GeoTargetingRestrictionEnum_GeoTargetingRestriction = 1
+	// Indicates that request context should match the physical location of
+	// the user.
+	GeoTargetingRestrictionEnum_LOCATION_OF_PRESENCE GeoTargetingRestrictionEnum_GeoTargetingRestriction = 2
+)
+
+var GeoTargetingRestrictionEnum_GeoTargetingRestriction_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LOCATION_OF_PRESENCE",
+}
+var GeoTargetingRestrictionEnum_GeoTargetingRestriction_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"LOCATION_OF_PRESENCE": 2,
+}
+
+func (x GeoTargetingRestrictionEnum_GeoTargetingRestriction) String() string {
+	return proto.EnumName(GeoTargetingRestrictionEnum_GeoTargetingRestriction_name, int32(x))
+}
+func (GeoTargetingRestrictionEnum_GeoTargetingRestriction) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_geo_targeting_restriction_f1a4d0dcbbcc21ed, []int{0, 0}
+}
+
+// Message describing feed item geo targeting restriction.
+type GeoTargetingRestrictionEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeoTargetingRestrictionEnum) Reset()         { *m = GeoTargetingRestrictionEnum{} }
+func (m *GeoTargetingRestrictionEnum) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetingRestrictionEnum) ProtoMessage()    {}
+func (*GeoTargetingRestrictionEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_targeting_restriction_f1a4d0dcbbcc21ed, []int{0}
+}
+func (m *GeoTargetingRestrictionEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetingRestrictionEnum.Unmarshal(m, b)
+}
+func (m *GeoTargetingRestrictionEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetingRestrictionEnum.Marshal(b, m, deterministic)
+}
+func (dst *GeoTargetingRestrictionEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetingRestrictionEnum.Merge(dst, src)
+}
+func (m *GeoTargetingRestrictionEnum) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetingRestrictionEnum.Size(m)
+}
+func (m *GeoTargetingRestrictionEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetingRestrictionEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetingRestrictionEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*GeoTargetingRestrictionEnum)(nil), "google.ads.googleads.v0.enums.GeoTargetingRestrictionEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction", GeoTargetingRestrictionEnum_GeoTargetingRestriction_name, GeoTargetingRestrictionEnum_GeoTargetingRestriction_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/geo_targeting_restriction.proto", fileDescriptor_geo_targeting_restriction_f1a4d0dcbbcc21ed)
+}
+
+var fileDescriptor_geo_targeting_restriction_f1a4d0dcbbcc21ed = []byte{
+	// 276 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xf4, 0xd4, 0xfc, 0xf8, 0x92, 0xc4, 0xa2, 0xf4, 0xd4, 0x92, 0xcc, 0xbc,
+	0xf4, 0xf8, 0xa2, 0xd4, 0xe2, 0x92, 0xa2, 0xcc, 0xe4, 0x92, 0xcc, 0xfc, 0x3c, 0xbd, 0x82, 0xa2,
+	0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x1e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x76, 0xbd, 0x32,
+	0x03, 0x3d, 0xb0, 0x76, 0xa5, 0x02, 0x2e, 0x69, 0xf7, 0xd4, 0xfc, 0x10, 0x98, 0x01, 0x41, 0x08,
+	0xfd, 0xae, 0x79, 0xa5, 0xb9, 0x4a, 0x81, 0x5c, 0xe2, 0x38, 0xa4, 0x85, 0xf8, 0xb9, 0xb8, 0x43,
+	0xfd, 0x82, 0x03, 0x5c, 0x9d, 0x3d, 0xdd, 0x3c, 0x5d, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb9, 0xd8,
+	0x43, 0xfd, 0xbc, 0xfd, 0xfc, 0xc3, 0xfd, 0x04, 0x18, 0x85, 0x24, 0xb8, 0x44, 0x7c, 0xfc, 0x9d,
+	0x1d, 0x43, 0x3c, 0xfd, 0xfd, 0xe2, 0xfd, 0xdd, 0xe2, 0x03, 0x82, 0x5c, 0x83, 0x5d, 0xfd, 0x9c,
+	0x5d, 0x05, 0x98, 0x9c, 0xce, 0x32, 0x72, 0x29, 0x26, 0xe7, 0xe7, 0xea, 0xe1, 0x75, 0x97, 0x93,
+	0x0c, 0x0e, 0x6b, 0x03, 0x40, 0x9e, 0x0a, 0x60, 0x8c, 0x72, 0x82, 0x6a, 0x4f, 0xcf, 0xcf, 0x49,
+	0xcc, 0x4b, 0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0x7b, 0x19, 0x16, 0x4a, 0x05,
+	0x99, 0xc5, 0x38, 0x02, 0xcd, 0x1a, 0x4c, 0x2e, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24,
+	0xeb, 0x0e, 0x31, 0xca, 0x31, 0xa5, 0x58, 0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x40, 0x21,
+	0x50, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98, 0x52, 0x1c, 0x03, 0x97, 0x8f, 0x09, 0x33, 0x88, 0x01,
+	0xcb, 0x27, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xd8, 0xda, 0x14, 0x81,
+	0xa8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/google_ads_field_category.pb.go b/googleapis/ads/googleads/v0/enums/google_ads_field_category.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..85e84255476eb26b2b2c1ab1550645cf76d42396
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/google_ads_field_category.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/google_ads_field_category.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The category of the artifact.
+type GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory int32
+
+const (
+	// Unspecified
+	GoogleAdsFieldCategoryEnum_UNSPECIFIED GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 0
+	// Unknown
+	GoogleAdsFieldCategoryEnum_UNKNOWN GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 1
+	// The described artifact is a resource.
+	GoogleAdsFieldCategoryEnum_RESOURCE GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 2
+	// The described artifact is a field and is an attribute of a resource.
+	// Including a resource attribute field in a query may segment the query if
+	// the resource to which it is attributed segments the resource found in
+	// the FROM clause.
+	GoogleAdsFieldCategoryEnum_ATTRIBUTE GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 3
+	// The described artifact is a field and always segments search queries.
+	GoogleAdsFieldCategoryEnum_SEGMENT GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 5
+	// The described artifact is a field and is a metric. It never segments
+	// search queries.
+	GoogleAdsFieldCategoryEnum_METRIC GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory = 6
+)
+
+var GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "RESOURCE",
+	3: "ATTRIBUTE",
+	5: "SEGMENT",
+	6: "METRIC",
+}
+var GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"RESOURCE":    2,
+	"ATTRIBUTE":   3,
+	"SEGMENT":     5,
+	"METRIC":      6,
+}
+
+func (x GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory) String() string {
+	return proto.EnumName(GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_name, int32(x))
+}
+func (GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_category_97cde39ce3aca2c0, []int{0, 0}
+}
+
+// Container for enum that determines if the described artifact is a resource
+// or a field, and if it is a field, when it segments search queries.
+type GoogleAdsFieldCategoryEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GoogleAdsFieldCategoryEnum) Reset()         { *m = GoogleAdsFieldCategoryEnum{} }
+func (m *GoogleAdsFieldCategoryEnum) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsFieldCategoryEnum) ProtoMessage()    {}
+func (*GoogleAdsFieldCategoryEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_category_97cde39ce3aca2c0, []int{0}
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsFieldCategoryEnum.Unmarshal(m, b)
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsFieldCategoryEnum.Marshal(b, m, deterministic)
+}
+func (dst *GoogleAdsFieldCategoryEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsFieldCategoryEnum.Merge(dst, src)
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsFieldCategoryEnum.Size(m)
+}
+func (m *GoogleAdsFieldCategoryEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsFieldCategoryEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsFieldCategoryEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*GoogleAdsFieldCategoryEnum)(nil), "google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory", GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_name, GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/google_ads_field_category.proto", fileDescriptor_google_ads_field_category_97cde39ce3aca2c0)
+}
+
+var fileDescriptor_google_ads_field_category_97cde39ce3aca2c0 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0x5c, 0x98, 0x50, 0x7c, 0x62, 0x4a, 0x71, 0x7c, 0x5a, 0x66, 0x6a, 0x4e, 0x4a, 0x7c, 0x72,
+	0x62, 0x49, 0x6a, 0x7a, 0x7e, 0x51, 0xa5, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x2c, 0x44,
+	0x81, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xbb, 0x5e, 0x99, 0x81, 0x1e, 0x58, 0xbb, 0x52, 0x17,
+	0x23, 0x97, 0x94, 0x3b, 0x58, 0xd8, 0x31, 0xa5, 0xd8, 0x0d, 0x64, 0x80, 0x33, 0x54, 0xbf, 0x6b,
+	0x5e, 0x69, 0xae, 0x52, 0x0e, 0x97, 0x18, 0x76, 0x59, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0,
+	0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f,
+	0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x1e, 0x2e, 0x8e, 0x20, 0xd7, 0x60, 0xff, 0xd0,
+	0x20, 0x67, 0x57, 0x01, 0x26, 0x21, 0x5e, 0x2e, 0x4e, 0xc7, 0x90, 0x90, 0x20, 0x4f, 0xa7, 0xd0,
+	0x10, 0x57, 0x01, 0x66, 0x90, 0xca, 0x60, 0x57, 0x77, 0x5f, 0x57, 0xbf, 0x10, 0x01, 0x56, 0x21,
+	0x2e, 0x2e, 0x36, 0x5f, 0xd7, 0x90, 0x20, 0x4f, 0x67, 0x01, 0x36, 0xa7, 0x33, 0x8c, 0x5c, 0x8a,
+	0xc9, 0xf9, 0xb9, 0x7a, 0x78, 0x9d, 0xec, 0x24, 0x8d, 0xdd, 0x45, 0x01, 0x20, 0xef, 0x06, 0x30,
+	0x46, 0x39, 0x41, 0x75, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0xe5, 0x17, 0xa5, 0xeb, 0xa7,
+	0xa7, 0xe6, 0x81, 0x03, 0x03, 0x16, 0x7e, 0x05, 0x99, 0xc5, 0x38, 0x82, 0xd3, 0x1a, 0x4c, 0x2e,
+	0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24, 0x0b, 0xb1, 0x49, 0xcf, 0x31, 0xa5, 0x58, 0x0f,
+	0x6e, 0xa9, 0x5e, 0x98, 0x81, 0x1e, 0x28, 0x6c, 0x8a, 0x4f, 0xc1, 0xe4, 0x63, 0x1c, 0x53, 0x8a,
+	0x63, 0xe0, 0xf2, 0x31, 0x61, 0x06, 0x31, 0x60, 0xf9, 0x24, 0x36, 0xb0, 0xa5, 0xc6, 0x80, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0xb3, 0x56, 0xff, 0x0d, 0xc2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/google_ads_field_data_type.pb.go b/googleapis/ads/googleads/v0/enums/google_ads_field_data_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0623405d288f7bf24cec96ae0457ca920017bb3c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/google_ads_field_data_type.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/google_ads_field_data_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// These are the various types a GoogleAdsService artifact may take on.
+type GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType int32
+
+const (
+	// Unspecified
+	GoogleAdsFieldDataTypeEnum_UNSPECIFIED GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 0
+	// Unknown
+	GoogleAdsFieldDataTypeEnum_UNKNOWN GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 1
+	// Maps to google.protobuf.BoolValue
+	//
+	// Applicable operators:  =, !=
+	GoogleAdsFieldDataTypeEnum_BOOLEAN GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 2
+	// Maps to google.protobuf.StringValue. It can be compared using the set of
+	// operators specific to dates however.
+	//
+	// Applicable operators:  =, <, >, <=, >=, BETWEEN, DURING, and IN
+	GoogleAdsFieldDataTypeEnum_DATE GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 3
+	// Maps to google.protobuf.DoubleValue
+	//
+	// Applicable operators:  =, !=, <, >, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_DOUBLE GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 4
+	// Maps to an enum. It's specific definition can be found at type_url.
+	//
+	// Applicable operators:  =, !=, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_ENUM GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 5
+	// Maps to google.protobuf.FloatValue
+	//
+	// Applicable operators:  =, !=, <, >, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_FLOAT GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 6
+	// Maps to google.protobuf.Int32Value
+	//
+	// Applicable operators:  =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_INT32 GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 7
+	// Maps to google.protobuf.Int64Value
+	//
+	// Applicable operators:  =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_INT64 GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 8
+	// Maps to a protocol buffer message type. The data type's details can be
+	// found in type_url.
+	//
+	// No operators work with MESSAGE fields.
+	GoogleAdsFieldDataTypeEnum_MESSAGE GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 9
+	// Maps to google.protobuf.StringValue. Represents the resource name
+	// (unique id) of a resource or one of its foreign keys.
+	//
+	// No operators work with RESOURCE_NAME fields.
+	GoogleAdsFieldDataTypeEnum_RESOURCE_NAME GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 10
+	// Maps to google.protobuf.StringValue.
+	//
+	// Applicable operators:  =, !=, LIKE, NOT LIKE, IN, NOT IN
+	GoogleAdsFieldDataTypeEnum_STRING GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType = 11
+)
+
+var GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BOOLEAN",
+	3:  "DATE",
+	4:  "DOUBLE",
+	5:  "ENUM",
+	6:  "FLOAT",
+	7:  "INT32",
+	8:  "INT64",
+	9:  "MESSAGE",
+	10: "RESOURCE_NAME",
+	11: "STRING",
+}
+var GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"BOOLEAN":       2,
+	"DATE":          3,
+	"DOUBLE":        4,
+	"ENUM":          5,
+	"FLOAT":         6,
+	"INT32":         7,
+	"INT64":         8,
+	"MESSAGE":       9,
+	"RESOURCE_NAME": 10,
+	"STRING":        11,
+}
+
+func (x GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType) String() string {
+	return proto.EnumName(GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_name, int32(x))
+}
+func (GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_data_type_48f8da58e8f99892, []int{0, 0}
+}
+
+// Container holding the various data types.
+type GoogleAdsFieldDataTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GoogleAdsFieldDataTypeEnum) Reset()         { *m = GoogleAdsFieldDataTypeEnum{} }
+func (m *GoogleAdsFieldDataTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsFieldDataTypeEnum) ProtoMessage()    {}
+func (*GoogleAdsFieldDataTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_data_type_48f8da58e8f99892, []int{0}
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Unmarshal(m, b)
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *GoogleAdsFieldDataTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Merge(dst, src)
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsFieldDataTypeEnum.Size(m)
+}
+func (m *GoogleAdsFieldDataTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsFieldDataTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsFieldDataTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*GoogleAdsFieldDataTypeEnum)(nil), "google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType", GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_name, GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/google_ads_field_data_type.proto", fileDescriptor_google_ads_field_data_type_48f8da58e8f99892)
+}
+
+var fileDescriptor_google_ads_field_data_type_48f8da58e8f99892 = []byte{
+	// 353 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xcd, 0x4a, 0xeb, 0x40,
+	0x18, 0xbd, 0xe9, 0x7f, 0xa7, 0x5c, 0xee, 0xdc, 0x2c, 0x5c, 0x28, 0x5d, 0xd8, 0x07, 0x98, 0x04,
+	0x2b, 0x6e, 0x04, 0x61, 0xd2, 0x4c, 0x43, 0xb0, 0x9d, 0x94, 0x26, 0xa9, 0x20, 0x81, 0x30, 0x3a,
+	0x31, 0x14, 0xda, 0x4c, 0xe8, 0xa4, 0x85, 0xbe, 0x8e, 0x4b, 0x57, 0x3e, 0x87, 0x08, 0xbe, 0x92,
+	0x4c, 0xfa, 0xb3, 0xaa, 0x6e, 0xc2, 0xc9, 0x77, 0xe6, 0x9c, 0xc3, 0x77, 0x3e, 0x70, 0x97, 0x0a,
+	0x91, 0x2e, 0x12, 0x83, 0x71, 0x69, 0xec, 0xa0, 0x42, 0x1b, 0xd3, 0x48, 0xb2, 0xf5, 0xf2, 0x30,
+	0x8a, 0x19, 0x97, 0xf1, 0xcb, 0x3c, 0x59, 0xf0, 0x98, 0xb3, 0x82, 0xc5, 0xc5, 0x36, 0x4f, 0x50,
+	0xbe, 0x12, 0x85, 0xd0, 0xbb, 0xbb, 0x17, 0x88, 0x71, 0x89, 0x8e, 0x7a, 0xb4, 0x31, 0x51, 0xa9,
+	0xef, 0x7d, 0x69, 0xe0, 0xdc, 0x29, 0xc7, 0x98, 0xcb, 0xa1, 0x72, 0xb0, 0x59, 0xc1, 0x82, 0x6d,
+	0x9e, 0x90, 0x6c, 0xbd, 0xec, 0xbd, 0x6b, 0xe0, 0xec, 0x34, 0xad, 0xff, 0x03, 0x9d, 0x90, 0xfa,
+	0x13, 0x32, 0x70, 0x87, 0x2e, 0xb1, 0xe1, 0x1f, 0xbd, 0x03, 0x9a, 0x21, 0xbd, 0xa7, 0xde, 0x03,
+	0x85, 0x9a, 0xfa, 0xb1, 0x3c, 0x6f, 0x44, 0x30, 0x85, 0x15, 0xbd, 0x05, 0x6a, 0x36, 0x0e, 0x08,
+	0xac, 0xea, 0x00, 0x34, 0x6c, 0x2f, 0xb4, 0x46, 0x04, 0xd6, 0xd4, 0x94, 0xd0, 0x70, 0x0c, 0xeb,
+	0x7a, 0x1b, 0xd4, 0x87, 0x23, 0x0f, 0x07, 0xb0, 0xa1, 0xa0, 0x4b, 0x83, 0xfe, 0x15, 0x6c, 0xee,
+	0xe1, 0xcd, 0x35, 0x6c, 0x29, 0xb7, 0x31, 0xf1, 0x7d, 0xec, 0x10, 0xd8, 0xd6, 0xff, 0x83, 0xbf,
+	0x53, 0xe2, 0x7b, 0xe1, 0x74, 0x40, 0x62, 0x8a, 0xc7, 0x04, 0x02, 0x65, 0xeb, 0x07, 0x53, 0x97,
+	0x3a, 0xb0, 0x63, 0x7d, 0x6a, 0xe0, 0xf2, 0x59, 0x2c, 0xd1, 0xaf, 0x7b, 0x5b, 0x17, 0xa7, 0xb7,
+	0x9a, 0xa8, 0xce, 0x26, 0xda, 0xa3, 0xb5, 0x57, 0xa7, 0x62, 0xc1, 0xb2, 0x14, 0x89, 0x55, 0x6a,
+	0xa4, 0x49, 0x56, 0x36, 0x7a, 0xb8, 0x42, 0x3e, 0x97, 0x3f, 0x1c, 0xe5, 0xb6, 0xfc, 0xbe, 0x56,
+	0xaa, 0x0e, 0xc6, 0x6f, 0x95, 0xee, 0x2e, 0x09, 0x61, 0x2e, 0xd1, 0x31, 0x14, 0xcd, 0x4c, 0xa4,
+	0x0a, 0x96, 0x1f, 0x07, 0x3e, 0xc2, 0x5c, 0x46, 0x47, 0x3e, 0x9a, 0x99, 0x51, 0xc9, 0x3f, 0x35,
+	0xca, 0xd0, 0xfe, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x96, 0x06, 0xb3, 0xb7, 0x08, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/hotel_date_selection_type.pb.go b/googleapis/ads/googleads/v0/enums/hotel_date_selection_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0d873d9af51df0a3732aee88448b61717e4cfbfb
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/hotel_date_selection_type.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/hotel_date_selection_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible hotel date selection types.
+type HotelDateSelectionTypeEnum_HotelDateSelectionType int32
+
+const (
+	// Not specified.
+	HotelDateSelectionTypeEnum_UNSPECIFIED HotelDateSelectionTypeEnum_HotelDateSelectionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	HotelDateSelectionTypeEnum_UNKNOWN HotelDateSelectionTypeEnum_HotelDateSelectionType = 1
+	// Dates selected by default.
+	HotelDateSelectionTypeEnum_DEFAULT_SELECTION HotelDateSelectionTypeEnum_HotelDateSelectionType = 50
+	// Dates selected by the user.
+	HotelDateSelectionTypeEnum_USER_SELECTED HotelDateSelectionTypeEnum_HotelDateSelectionType = 51
+)
+
+var HotelDateSelectionTypeEnum_HotelDateSelectionType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	50: "DEFAULT_SELECTION",
+	51: "USER_SELECTED",
+}
+var HotelDateSelectionTypeEnum_HotelDateSelectionType_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"DEFAULT_SELECTION": 50,
+	"USER_SELECTED":     51,
+}
+
+func (x HotelDateSelectionTypeEnum_HotelDateSelectionType) String() string {
+	return proto.EnumName(HotelDateSelectionTypeEnum_HotelDateSelectionType_name, int32(x))
+}
+func (HotelDateSelectionTypeEnum_HotelDateSelectionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_date_selection_type_2e676c6d0c7214c3, []int{0, 0}
+}
+
+// Container for enum describing possible hotel date selection types
+type HotelDateSelectionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelDateSelectionTypeEnum) Reset()         { *m = HotelDateSelectionTypeEnum{} }
+func (m *HotelDateSelectionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*HotelDateSelectionTypeEnum) ProtoMessage()    {}
+func (*HotelDateSelectionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_date_selection_type_2e676c6d0c7214c3, []int{0}
+}
+func (m *HotelDateSelectionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelDateSelectionTypeEnum.Unmarshal(m, b)
+}
+func (m *HotelDateSelectionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelDateSelectionTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *HotelDateSelectionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelDateSelectionTypeEnum.Merge(dst, src)
+}
+func (m *HotelDateSelectionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_HotelDateSelectionTypeEnum.Size(m)
+}
+func (m *HotelDateSelectionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelDateSelectionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelDateSelectionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*HotelDateSelectionTypeEnum)(nil), "google.ads.googleads.v0.enums.HotelDateSelectionTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.HotelDateSelectionTypeEnum_HotelDateSelectionType", HotelDateSelectionTypeEnum_HotelDateSelectionType_name, HotelDateSelectionTypeEnum_HotelDateSelectionType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/hotel_date_selection_type.proto", fileDescriptor_hotel_date_selection_type_2e676c6d0c7214c3)
+}
+
+var fileDescriptor_hotel_date_selection_type_2e676c6d0c7214c3 = []byte{
+	// 292 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x8c, 0xfc, 0x92, 0xd4, 0x9c, 0xf8, 0x94, 0xc4, 0x92, 0xd4, 0xf8, 0xe2,
+	0xd4, 0x9c, 0xd4, 0xe4, 0x92, 0xcc, 0xfc, 0xbc, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2,
+	0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x1e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x76, 0xbd, 0x32,
+	0x03, 0x3d, 0xb0, 0x76, 0xa5, 0x3a, 0x2e, 0x29, 0x0f, 0x90, 0x09, 0x2e, 0x89, 0x25, 0xa9, 0xc1,
+	0x30, 0xfd, 0x21, 0x95, 0x05, 0xa9, 0xae, 0x79, 0xa5, 0xb9, 0x4a, 0x09, 0x5c, 0x62, 0xd8, 0x65,
+	0x85, 0xf8, 0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c, 0x9d, 0x3d, 0xdd, 0x3c, 0x5d, 0x5d, 0x04,
+	0x18, 0x84, 0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd, 0xfc, 0xc3, 0xfd, 0x04, 0x18, 0x85, 0x44,
+	0xb9, 0x04, 0x5d, 0x5c, 0xdd, 0x1c, 0x43, 0x7d, 0x42, 0xe2, 0x83, 0x5d, 0x7d, 0x5c, 0x9d, 0x43,
+	0x3c, 0xfd, 0xfd, 0x04, 0x8c, 0x84, 0x04, 0xb9, 0x78, 0x43, 0x83, 0x5d, 0x83, 0xa0, 0x62, 0xae,
+	0x2e, 0x02, 0xc6, 0x4e, 0x67, 0x18, 0xb9, 0x14, 0x93, 0xf3, 0x73, 0xf5, 0xf0, 0xba, 0xd2, 0x49,
+	0x1a, 0xbb, 0x2b, 0x02, 0x40, 0x3e, 0x0c, 0x60, 0x8c, 0x72, 0x82, 0xea, 0x4e, 0xcf, 0xcf, 0x49,
+	0xcc, 0x4b, 0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0xfb, 0x1f, 0x16, 0x64, 0x05,
+	0x99, 0xc5, 0x38, 0x42, 0xd0, 0x1a, 0x4c, 0x2e, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24,
+	0xeb, 0x0e, 0x31, 0xca, 0x31, 0xa5, 0x58, 0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x40, 0xe1,
+	0x51, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98, 0x52, 0x1c, 0x03, 0x97, 0x8f, 0x09, 0x33, 0x88, 0x01,
+	0xcb, 0x27, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x9a, 0xc2, 0x8b,
+	0xb5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/hotel_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/hotel_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..2547edf24a5ddb27bda8f1a0edf7cf8ea187e659
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/hotel_placeholder_field.pb.go
@@ -0,0 +1,220 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/hotel_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Hotel placeholder fields.
+type HotelPlaceholderFieldEnum_HotelPlaceholderField int32
+
+const (
+	// Not specified.
+	HotelPlaceholderFieldEnum_UNSPECIFIED HotelPlaceholderFieldEnum_HotelPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	HotelPlaceholderFieldEnum_UNKNOWN HotelPlaceholderFieldEnum_HotelPlaceholderField = 1
+	// Data Type: STRING. Required. Unique ID.
+	HotelPlaceholderFieldEnum_PROPERTY_ID HotelPlaceholderFieldEnum_HotelPlaceholderField = 2
+	// Data Type: STRING. Required. Main headline with property name to be shown
+	// in dynamic ad.
+	HotelPlaceholderFieldEnum_PROPERTY_NAME HotelPlaceholderFieldEnum_HotelPlaceholderField = 3
+	// Data Type: STRING. Name of destination to be shown in dynamic ad.
+	HotelPlaceholderFieldEnum_DESTINATION_NAME HotelPlaceholderFieldEnum_HotelPlaceholderField = 4
+	// Data Type: STRING. Description of destination to be shown in dynamic ad.
+	HotelPlaceholderFieldEnum_DESCRIPTION HotelPlaceholderFieldEnum_HotelPlaceholderField = 5
+	// Data Type: STRING. Complete property address, including postal code.
+	HotelPlaceholderFieldEnum_ADDRESS HotelPlaceholderFieldEnum_HotelPlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	HotelPlaceholderFieldEnum_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	HotelPlaceholderFieldEnum_FORMATTED_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 8
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	HotelPlaceholderFieldEnum_SALE_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 9
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	HotelPlaceholderFieldEnum_FORMATTED_SALE_PRICE HotelPlaceholderFieldEnum_HotelPlaceholderField = 10
+	// Data Type: URL. Image to be displayed in the ad.
+	HotelPlaceholderFieldEnum_IMAGE_URL HotelPlaceholderFieldEnum_HotelPlaceholderField = 11
+	// Data Type: STRING. Category of property used to group like items together
+	// for recommendation engine.
+	HotelPlaceholderFieldEnum_CATEGORY HotelPlaceholderFieldEnum_HotelPlaceholderField = 12
+	// Data Type: INT64. Star rating (1 to 5) used to group like items
+	// together for recommendation engine.
+	HotelPlaceholderFieldEnum_STAR_RATING HotelPlaceholderFieldEnum_HotelPlaceholderField = 13
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	HotelPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS HotelPlaceholderFieldEnum_HotelPlaceholderField = 14
+	// Data Type: URL_LIST. Required. Final URLs for the ad when using Upgraded
+	// URLs. User will be redirected to these URLs when they click on an ad, or
+	// when they click on a specific flight for ads that show multiple
+	// flights.
+	HotelPlaceholderFieldEnum_FINAL_URLS HotelPlaceholderFieldEnum_HotelPlaceholderField = 15
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	HotelPlaceholderFieldEnum_FINAL_MOBILE_URLS HotelPlaceholderFieldEnum_HotelPlaceholderField = 16
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	HotelPlaceholderFieldEnum_TRACKING_URL HotelPlaceholderFieldEnum_HotelPlaceholderField = 17
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	HotelPlaceholderFieldEnum_ANDROID_APP_LINK HotelPlaceholderFieldEnum_HotelPlaceholderField = 18
+	// Data Type: STRING_LIST. List of recommended property IDs to show together
+	// with this item.
+	HotelPlaceholderFieldEnum_SIMILAR_PROPERTY_IDS HotelPlaceholderFieldEnum_HotelPlaceholderField = 19
+	// Data Type: STRING. iOS app link.
+	HotelPlaceholderFieldEnum_IOS_APP_LINK HotelPlaceholderFieldEnum_HotelPlaceholderField = 20
+	// Data Type: INT64. iOS app store ID.
+	HotelPlaceholderFieldEnum_IOS_APP_STORE_ID HotelPlaceholderFieldEnum_HotelPlaceholderField = 21
+)
+
+var HotelPlaceholderFieldEnum_HotelPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PROPERTY_ID",
+	3:  "PROPERTY_NAME",
+	4:  "DESTINATION_NAME",
+	5:  "DESCRIPTION",
+	6:  "ADDRESS",
+	7:  "PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "SALE_PRICE",
+	10: "FORMATTED_SALE_PRICE",
+	11: "IMAGE_URL",
+	12: "CATEGORY",
+	13: "STAR_RATING",
+	14: "CONTEXTUAL_KEYWORDS",
+	15: "FINAL_URLS",
+	16: "FINAL_MOBILE_URLS",
+	17: "TRACKING_URL",
+	18: "ANDROID_APP_LINK",
+	19: "SIMILAR_PROPERTY_IDS",
+	20: "IOS_APP_LINK",
+	21: "IOS_APP_STORE_ID",
+}
+var HotelPlaceholderFieldEnum_HotelPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"PROPERTY_ID":          2,
+	"PROPERTY_NAME":        3,
+	"DESTINATION_NAME":     4,
+	"DESCRIPTION":          5,
+	"ADDRESS":              6,
+	"PRICE":                7,
+	"FORMATTED_PRICE":      8,
+	"SALE_PRICE":           9,
+	"FORMATTED_SALE_PRICE": 10,
+	"IMAGE_URL":            11,
+	"CATEGORY":             12,
+	"STAR_RATING":          13,
+	"CONTEXTUAL_KEYWORDS":  14,
+	"FINAL_URLS":           15,
+	"FINAL_MOBILE_URLS":    16,
+	"TRACKING_URL":         17,
+	"ANDROID_APP_LINK":     18,
+	"SIMILAR_PROPERTY_IDS": 19,
+	"IOS_APP_LINK":         20,
+	"IOS_APP_STORE_ID":     21,
+}
+
+func (x HotelPlaceholderFieldEnum_HotelPlaceholderField) String() string {
+	return proto.EnumName(HotelPlaceholderFieldEnum_HotelPlaceholderField_name, int32(x))
+}
+func (HotelPlaceholderFieldEnum_HotelPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_placeholder_field_e2aef94dde7f15bf, []int{0, 0}
+}
+
+// Values for Hotel placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type HotelPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelPlaceholderFieldEnum) Reset()         { *m = HotelPlaceholderFieldEnum{} }
+func (m *HotelPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*HotelPlaceholderFieldEnum) ProtoMessage()    {}
+func (*HotelPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_placeholder_field_e2aef94dde7f15bf, []int{0}
+}
+func (m *HotelPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *HotelPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *HotelPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *HotelPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_HotelPlaceholderFieldEnum.Size(m)
+}
+func (m *HotelPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*HotelPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.HotelPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.HotelPlaceholderFieldEnum_HotelPlaceholderField", HotelPlaceholderFieldEnum_HotelPlaceholderField_name, HotelPlaceholderFieldEnum_HotelPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/hotel_placeholder_field.proto", fileDescriptor_hotel_placeholder_field_e2aef94dde7f15bf)
+}
+
+var fileDescriptor_hotel_placeholder_field_e2aef94dde7f15bf = []byte{
+	// 491 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdd, 0x6e, 0xda, 0x30,
+	0x18, 0x1d, 0xb0, 0xfe, 0x60, 0xa0, 0x18, 0x03, 0xda, 0xa6, 0xa9, 0x17, 0xeb, 0x03, 0x04, 0xa4,
+	0x5d, 0xf6, 0xca, 0xc4, 0x26, 0xb3, 0x08, 0xb6, 0x65, 0x9b, 0x76, 0x4c, 0x48, 0x16, 0x6b, 0xb2,
+	0xb4, 0x52, 0x20, 0x88, 0xb4, 0x7d, 0xa0, 0x5d, 0xee, 0x66, 0xef, 0x31, 0x6d, 0xef, 0x34, 0x39,
+	0x29, 0x50, 0x4d, 0xdb, 0x6e, 0xa2, 0xcf, 0xe7, 0xf8, 0x9c, 0xcf, 0xf9, 0xbe, 0x03, 0x2e, 0x93,
+	0x2c, 0x4b, 0xd2, 0x78, 0xb0, 0x8c, 0xf2, 0x41, 0x59, 0xba, 0xea, 0x71, 0x38, 0x88, 0xd7, 0x0f,
+	0xab, 0x7c, 0x70, 0x9b, 0xdd, 0xc7, 0xa9, 0xdd, 0xa4, 0xcb, 0x9b, 0xf8, 0x36, 0x4b, 0xa3, 0x78,
+	0x6b, 0xbf, 0xdc, 0xc5, 0x69, 0xe4, 0x6d, 0xb6, 0xd9, 0x7d, 0x86, 0xce, 0x4b, 0x85, 0xb7, 0x8c,
+	0x72, 0x6f, 0x2f, 0xf6, 0x1e, 0x87, 0x5e, 0x21, 0xbe, 0xf8, 0x55, 0x03, 0x6f, 0x3e, 0x38, 0x03,
+	0x79, 0xd0, 0x8f, 0x9d, 0x9c, 0xae, 0x1f, 0x56, 0x17, 0xdf, 0x6b, 0xa0, 0xff, 0x57, 0x16, 0xb5,
+	0x41, 0x63, 0xc6, 0xb5, 0xa4, 0x3e, 0x1b, 0x33, 0x4a, 0xe0, 0x0b, 0xd4, 0x00, 0x27, 0x33, 0x3e,
+	0xe1, 0xe2, 0x9a, 0xc3, 0x8a, 0x63, 0xa5, 0x12, 0x92, 0x2a, 0x33, 0xb7, 0x8c, 0xc0, 0x2a, 0xea,
+	0x80, 0xd6, 0x1e, 0xe0, 0x78, 0x4a, 0x61, 0x0d, 0xf5, 0x00, 0x24, 0x54, 0x1b, 0xc6, 0xb1, 0x61,
+	0x82, 0x97, 0xe8, 0x4b, 0xa7, 0x24, 0x54, 0xfb, 0x8a, 0x49, 0x87, 0xc2, 0x23, 0xe7, 0x8b, 0x09,
+	0x51, 0x54, 0x6b, 0x78, 0x8c, 0xea, 0xe0, 0x48, 0x2a, 0xe6, 0x53, 0x78, 0x82, 0xba, 0xa0, 0x3d,
+	0x16, 0x6a, 0x8a, 0x8d, 0xa1, 0xc4, 0x96, 0xe0, 0x29, 0x3a, 0x03, 0x40, 0xe3, 0x90, 0x3e, 0x9d,
+	0xeb, 0xe8, 0x35, 0xe8, 0x1d, 0x2e, 0x3d, 0x63, 0x00, 0x6a, 0x81, 0x3a, 0x9b, 0xe2, 0x80, 0xda,
+	0x99, 0x0a, 0x61, 0x03, 0x35, 0xc1, 0xa9, 0x8f, 0x0d, 0x0d, 0x84, 0x9a, 0xc3, 0xa6, 0x7b, 0x84,
+	0x36, 0x58, 0x59, 0x85, 0x0d, 0xe3, 0x01, 0x6c, 0xa1, 0x57, 0xa0, 0xeb, 0x0b, 0x6e, 0xe8, 0x47,
+	0x33, 0xc3, 0xa1, 0x9d, 0xd0, 0xf9, 0xb5, 0x50, 0x44, 0xc3, 0x33, 0xd7, 0x70, 0xcc, 0x38, 0x0e,
+	0x9d, 0x8d, 0x86, 0x6d, 0xd4, 0x07, 0x9d, 0xf2, 0x3c, 0x15, 0x23, 0x16, 0xd2, 0x12, 0x86, 0x08,
+	0x82, 0xa6, 0x51, 0xd8, 0x9f, 0x30, 0x1e, 0x14, 0x0d, 0x3b, 0xee, 0xef, 0x31, 0x27, 0x4a, 0x30,
+	0x62, 0xb1, 0x94, 0x36, 0x64, 0x7c, 0x02, 0x91, 0x7b, 0xaf, 0x66, 0x53, 0x16, 0x62, 0x65, 0x9f,
+	0xcd, 0x4f, 0xc3, 0xae, 0x73, 0x60, 0x42, 0x1f, 0xee, 0xf6, 0x9c, 0xc3, 0x0e, 0xd1, 0x46, 0x28,
+	0xea, 0x06, 0xdd, 0x1f, 0xfd, 0xac, 0x80, 0x77, 0x37, 0xd9, 0xca, 0xfb, 0xef, 0xd6, 0x47, 0x6f,
+	0x8b, 0xa5, 0xe6, 0x7f, 0x6e, 0x55, 0xba, 0xc4, 0xc8, 0xca, 0xa7, 0xd1, 0x93, 0x3a, 0xc9, 0xd2,
+	0xe5, 0x3a, 0xf1, 0xb2, 0x6d, 0x32, 0x48, 0xe2, 0x75, 0x91, 0xa7, 0x5d, 0x00, 0x37, 0x77, 0xf9,
+	0x3f, 0xf2, 0x78, 0x59, 0x7c, 0xbf, 0x56, 0x6b, 0x01, 0xc6, 0xdf, 0xaa, 0xe7, 0x41, 0x69, 0x85,
+	0xa3, 0xdc, 0x2b, 0x4b, 0x57, 0x5d, 0x0d, 0x3d, 0x97, 0xaf, 0xfc, 0xc7, 0x8e, 0x5f, 0xe0, 0x28,
+	0x5f, 0xec, 0xf9, 0xc5, 0xd5, 0x70, 0x51, 0xf0, 0x9f, 0x8f, 0x8b, 0xa6, 0xef, 0x7f, 0x07, 0x00,
+	0x00, 0xff, 0xff, 0x43, 0x1f, 0x90, 0xbe, 0x03, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/income_range_type.pb.go b/googleapis/ads/googleads/v0/enums/income_range_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0a8b70acd25e407462080518166f960c045826f4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/income_range_type.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/income_range_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of demographic income ranges (e.g. between 0% to 50%).
+type IncomeRangeTypeEnum_IncomeRangeType int32
+
+const (
+	// Not specified.
+	IncomeRangeTypeEnum_UNSPECIFIED IncomeRangeTypeEnum_IncomeRangeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	IncomeRangeTypeEnum_UNKNOWN IncomeRangeTypeEnum_IncomeRangeType = 1
+	// 0%-50%.
+	IncomeRangeTypeEnum_INCOME_RANGE_0_50 IncomeRangeTypeEnum_IncomeRangeType = 510001
+	// 50% to 60%.
+	IncomeRangeTypeEnum_INCOME_RANGE_50_60 IncomeRangeTypeEnum_IncomeRangeType = 510002
+	// 60% to 70%.
+	IncomeRangeTypeEnum_INCOME_RANGE_60_70 IncomeRangeTypeEnum_IncomeRangeType = 510003
+	// 70% to 80%.
+	IncomeRangeTypeEnum_INCOME_RANGE_70_80 IncomeRangeTypeEnum_IncomeRangeType = 510004
+	// 80% to 90%.
+	IncomeRangeTypeEnum_INCOME_RANGE_80_90 IncomeRangeTypeEnum_IncomeRangeType = 510005
+	// Greater than 90%.
+	IncomeRangeTypeEnum_INCOME_RANGE_90_UP IncomeRangeTypeEnum_IncomeRangeType = 510006
+	// Undetermined income range.
+	IncomeRangeTypeEnum_INCOME_RANGE_UNDETERMINED IncomeRangeTypeEnum_IncomeRangeType = 510000
+)
+
+var IncomeRangeTypeEnum_IncomeRangeType_name = map[int32]string{
+	0:      "UNSPECIFIED",
+	1:      "UNKNOWN",
+	510001: "INCOME_RANGE_0_50",
+	510002: "INCOME_RANGE_50_60",
+	510003: "INCOME_RANGE_60_70",
+	510004: "INCOME_RANGE_70_80",
+	510005: "INCOME_RANGE_80_90",
+	510006: "INCOME_RANGE_90_UP",
+	510000: "INCOME_RANGE_UNDETERMINED",
+}
+var IncomeRangeTypeEnum_IncomeRangeType_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"INCOME_RANGE_0_50":         510001,
+	"INCOME_RANGE_50_60":        510002,
+	"INCOME_RANGE_60_70":        510003,
+	"INCOME_RANGE_70_80":        510004,
+	"INCOME_RANGE_80_90":        510005,
+	"INCOME_RANGE_90_UP":        510006,
+	"INCOME_RANGE_UNDETERMINED": 510000,
+}
+
+func (x IncomeRangeTypeEnum_IncomeRangeType) String() string {
+	return proto.EnumName(IncomeRangeTypeEnum_IncomeRangeType_name, int32(x))
+}
+func (IncomeRangeTypeEnum_IncomeRangeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_income_range_type_7650859890133832, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic income ranges.
+type IncomeRangeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *IncomeRangeTypeEnum) Reset()         { *m = IncomeRangeTypeEnum{} }
+func (m *IncomeRangeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*IncomeRangeTypeEnum) ProtoMessage()    {}
+func (*IncomeRangeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_income_range_type_7650859890133832, []int{0}
+}
+func (m *IncomeRangeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IncomeRangeTypeEnum.Unmarshal(m, b)
+}
+func (m *IncomeRangeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IncomeRangeTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *IncomeRangeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IncomeRangeTypeEnum.Merge(dst, src)
+}
+func (m *IncomeRangeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_IncomeRangeTypeEnum.Size(m)
+}
+func (m *IncomeRangeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_IncomeRangeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IncomeRangeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*IncomeRangeTypeEnum)(nil), "google.ads.googleads.v0.enums.IncomeRangeTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.IncomeRangeTypeEnum_IncomeRangeType", IncomeRangeTypeEnum_IncomeRangeType_name, IncomeRangeTypeEnum_IncomeRangeType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/income_range_type.proto", fileDescriptor_income_range_type_7650859890133832)
+}
+
+var fileDescriptor_income_range_type_7650859890133832 = []byte{
+	// 344 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4d, 0x4a, 0xc3, 0x40,
+	0x1c, 0xc5, 0x4d, 0x05, 0x85, 0xe9, 0xa2, 0x63, 0x14, 0xd4, 0x45, 0x09, 0xf6, 0x00, 0x93, 0x3f,
+	0x48, 0xbf, 0x70, 0x95, 0xb6, 0x63, 0x09, 0xd2, 0x69, 0xa8, 0x4d, 0x05, 0x09, 0x0c, 0xb1, 0x09,
+	0xa1, 0xd0, 0x64, 0x42, 0xd3, 0x16, 0xba, 0xf6, 0x02, 0x3d, 0x83, 0x4b, 0x57, 0x7e, 0xdf, 0xc0,
+	0x8d, 0x57, 0xf1, 0x12, 0x92, 0xc4, 0x16, 0x5a, 0xa2, 0x9b, 0xf0, 0xc8, 0x6f, 0x7e, 0x33, 0xf0,
+	0x1e, 0x2a, 0x7b, 0x42, 0x78, 0x63, 0x57, 0xb5, 0x9d, 0x48, 0x4d, 0x63, 0x9c, 0xe6, 0xa0, 0xba,
+	0xc1, 0xcc, 0x8f, 0xd4, 0x51, 0x30, 0x14, 0xbe, 0xcb, 0x27, 0x76, 0xe0, 0xb9, 0x7c, 0xba, 0x08,
+	0x5d, 0x12, 0x4e, 0xc4, 0x54, 0xc8, 0xc5, 0xf4, 0x2c, 0xb1, 0x9d, 0x88, 0xac, 0x35, 0x32, 0x07,
+	0x92, 0x68, 0xa5, 0xfb, 0x1c, 0x3a, 0xd4, 0x13, 0xb5, 0x17, 0x9b, 0xfd, 0x45, 0xe8, 0xd2, 0x60,
+	0xe6, 0x97, 0xbe, 0x25, 0x54, 0xd8, 0xfa, 0x2f, 0x17, 0x50, 0xde, 0x64, 0xd7, 0x06, 0x6d, 0xea,
+	0x97, 0x3a, 0x6d, 0xe1, 0x1d, 0x39, 0x8f, 0xf6, 0x4d, 0x76, 0xc5, 0xba, 0x37, 0x0c, 0x4b, 0xf2,
+	0x31, 0x3a, 0xd0, 0x59, 0xb3, 0xdb, 0xa1, 0xbc, 0xa7, 0xb1, 0x36, 0xe5, 0xc0, 0xcb, 0x80, 0x9f,
+	0x97, 0x8a, 0x7c, 0x82, 0xe4, 0x0d, 0x50, 0x06, 0x5e, 0x01, 0xfc, 0x92, 0x41, 0x2a, 0xc0, 0xab,
+	0x80, 0x5f, 0x33, 0x48, 0x15, 0x78, 0x0d, 0xf0, 0x5b, 0x06, 0xa9, 0x01, 0xaf, 0x03, 0x7e, 0xcf,
+	0x20, 0x75, 0xe0, 0xa6, 0x81, 0x3f, 0x96, 0x8a, 0xac, 0xa0, 0xd3, 0x0d, 0x62, 0xb2, 0x16, 0xed,
+	0xd3, 0x5e, 0x47, 0x67, 0xb4, 0x85, 0x9f, 0x96, 0x4a, 0xe3, 0x53, 0x42, 0x67, 0x43, 0xe1, 0x93,
+	0x7f, 0xbb, 0x6a, 0x1c, 0x6d, 0x15, 0x62, 0xc4, 0x05, 0x1b, 0xd2, 0x6d, 0xe3, 0x57, 0xf3, 0xc4,
+	0xd8, 0x0e, 0x3c, 0x22, 0x26, 0x9e, 0xea, 0xb9, 0x41, 0x52, 0xff, 0x6a, 0xa9, 0x70, 0x14, 0xfd,
+	0x31, 0xdc, 0x45, 0xf2, 0x7d, 0xc8, 0xed, 0xb6, 0x35, 0xed, 0x31, 0x57, 0x6c, 0xa7, 0x57, 0x69,
+	0x4e, 0x44, 0xd2, 0x18, 0xa7, 0x01, 0x90, 0x78, 0x94, 0xe8, 0x6b, 0xc5, 0x2d, 0xcd, 0x89, 0xac,
+	0x35, 0xb7, 0x06, 0x60, 0x25, 0xfc, 0x6e, 0x2f, 0x79, 0xf4, 0xfc, 0x27, 0x00, 0x00, 0xff, 0xff,
+	0x7c, 0x81, 0x86, 0x1b, 0x2c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/interaction_type.pb.go b/googleapis/ads/googleads/v0/enums/interaction_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..91c7d776eb8a7e3e906009952ab81cc1d788c628
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/interaction_type.pb.go
@@ -0,0 +1,109 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/interaction_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible interaction types.
+type InteractionTypeEnum_InteractionType int32
+
+const (
+	// Not specified.
+	InteractionTypeEnum_UNSPECIFIED InteractionTypeEnum_InteractionType = 0
+	// Used for return value only. Represents value unknown in this version.
+	InteractionTypeEnum_UNKNOWN InteractionTypeEnum_InteractionType = 1
+	// Calls.
+	InteractionTypeEnum_CALLS InteractionTypeEnum_InteractionType = 8000
+)
+
+var InteractionTypeEnum_InteractionType_name = map[int32]string{
+	0:    "UNSPECIFIED",
+	1:    "UNKNOWN",
+	8000: "CALLS",
+}
+var InteractionTypeEnum_InteractionType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CALLS":       8000,
+}
+
+func (x InteractionTypeEnum_InteractionType) String() string {
+	return proto.EnumName(InteractionTypeEnum_InteractionType_name, int32(x))
+}
+func (InteractionTypeEnum_InteractionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_interaction_type_e3686e1d7e48d812, []int{0, 0}
+}
+
+// Container for enum describing possible interaction types.
+type InteractionTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InteractionTypeEnum) Reset()         { *m = InteractionTypeEnum{} }
+func (m *InteractionTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*InteractionTypeEnum) ProtoMessage()    {}
+func (*InteractionTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_interaction_type_e3686e1d7e48d812, []int{0}
+}
+func (m *InteractionTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InteractionTypeEnum.Unmarshal(m, b)
+}
+func (m *InteractionTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InteractionTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *InteractionTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InteractionTypeEnum.Merge(dst, src)
+}
+func (m *InteractionTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_InteractionTypeEnum.Size(m)
+}
+func (m *InteractionTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_InteractionTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InteractionTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*InteractionTypeEnum)(nil), "google.ads.googleads.v0.enums.InteractionTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.InteractionTypeEnum_InteractionType", InteractionTypeEnum_InteractionType_name, InteractionTypeEnum_InteractionType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/interaction_type.proto", fileDescriptor_interaction_type_e3686e1d7e48d812)
+}
+
+var fileDescriptor_interaction_type_e3686e1d7e48d812 = []byte{
+	// 250 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xcc, 0xbc, 0x92, 0xd4, 0xa2, 0xc4, 0xe4, 0x92, 0xcc, 0xfc, 0xbc, 0xf8,
+	0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x52, 0xbd, 0xc4,
+	0x94, 0x62, 0x3d, 0xb8, 0x2e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x2e, 0xa5, 0x20, 0x2e, 0x61, 0x4f,
+	0x84, 0xc6, 0x90, 0xca, 0x82, 0x54, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x6b, 0x2e, 0x7e, 0x34, 0x61,
+	0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01,
+	0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x2e,
+	0x2e, 0x56, 0x67, 0x47, 0x1f, 0x9f, 0x60, 0x81, 0x03, 0x76, 0x4e, 0x47, 0x19, 0xb9, 0x14, 0x93,
+	0xf3, 0x73, 0xf5, 0xf0, 0xda, 0xec, 0x24, 0x82, 0x66, 0x41, 0x00, 0xc8, 0xb9, 0x01, 0x8c, 0x51,
+	0x4e, 0x50, 0x6d, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9,
+	0x79, 0x60, 0xcf, 0xc0, 0xbc, 0x5d, 0x90, 0x59, 0x8c, 0x23, 0x14, 0xac, 0xc1, 0xe4, 0x22, 0x26,
+	0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0xb2, 0xee, 0x10, 0xa3, 0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c,
+	0x10, 0x2b, 0xcc, 0x40, 0x0f, 0xe4, 0xc7, 0xe2, 0x53, 0x30, 0xf9, 0x18, 0xc7, 0x94, 0xe2, 0x18,
+	0xb8, 0x7c, 0x4c, 0x98, 0x41, 0x0c, 0x58, 0x3e, 0x89, 0x0d, 0x6c, 0xa9, 0x31, 0x20, 0x00, 0x00,
+	0xff, 0xff, 0x9e, 0x4d, 0x5b, 0x36, 0x79, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/job_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/job_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ad617b8d0878a462c6cac79528c1c8a0acb3a2d6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/job_placeholder_field.pb.go
@@ -0,0 +1,206 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/job_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Job placeholder fields.
+type JobPlaceholderFieldEnum_JobPlaceholderField int32
+
+const (
+	// Not specified.
+	JobPlaceholderFieldEnum_UNSPECIFIED JobPlaceholderFieldEnum_JobPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	JobPlaceholderFieldEnum_UNKNOWN JobPlaceholderFieldEnum_JobPlaceholderField = 1
+	// Data Type: STRING. Required. If only JOB_ID is specified, then it must be
+	// unique. If both JOB_ID and LOCATION_ID are specified, then the
+	// pair must be unique.
+	// ID) pair must be unique.
+	JobPlaceholderFieldEnum_JOB_ID JobPlaceholderFieldEnum_JobPlaceholderField = 2
+	// Data Type: STRING. Combination of JOB_ID and LOCATION_ID must be unique
+	// per offer.
+	JobPlaceholderFieldEnum_LOCATION_ID JobPlaceholderFieldEnum_JobPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with job title to be shown in
+	// dynamic ad.
+	JobPlaceholderFieldEnum_TITLE JobPlaceholderFieldEnum_JobPlaceholderField = 4
+	// Data Type: STRING. Job subtitle to be shown in dynamic ad.
+	JobPlaceholderFieldEnum_SUBTITLE JobPlaceholderFieldEnum_JobPlaceholderField = 5
+	// Data Type: STRING. Description of job to be shown in dynamic ad.
+	JobPlaceholderFieldEnum_DESCRIPTION JobPlaceholderFieldEnum_JobPlaceholderField = 6
+	// Data Type: URL. Image to be displayed in the ad. Highly recommended for
+	// image ads.
+	JobPlaceholderFieldEnum_IMAGE_URL JobPlaceholderFieldEnum_JobPlaceholderField = 7
+	// Data Type: STRING. Category of property used to group like items together
+	// for recommendation engine.
+	JobPlaceholderFieldEnum_CATEGORY JobPlaceholderFieldEnum_JobPlaceholderField = 8
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	JobPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS JobPlaceholderFieldEnum_JobPlaceholderField = 9
+	// Data Type: STRING. Complete property address, including postal code.
+	JobPlaceholderFieldEnum_ADDRESS JobPlaceholderFieldEnum_JobPlaceholderField = 10
+	// Data Type: STRING. Salary or salary range of job to be shown in dynamic
+	// ad.
+	JobPlaceholderFieldEnum_SALARY JobPlaceholderFieldEnum_JobPlaceholderField = 11
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific job and its location).
+	JobPlaceholderFieldEnum_FINAL_URLS JobPlaceholderFieldEnum_JobPlaceholderField = 12
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	JobPlaceholderFieldEnum_FINAL_MOBILE_URLS JobPlaceholderFieldEnum_JobPlaceholderField = 14
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	JobPlaceholderFieldEnum_TRACKING_URL JobPlaceholderFieldEnum_JobPlaceholderField = 15
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	JobPlaceholderFieldEnum_ANDROID_APP_LINK JobPlaceholderFieldEnum_JobPlaceholderField = 16
+	// Data Type: STRING_LIST. List of recommended job IDs to show together with
+	// this item.
+	JobPlaceholderFieldEnum_SIMILAR_JOB_IDS JobPlaceholderFieldEnum_JobPlaceholderField = 17
+	// Data Type: STRING. iOS app link.
+	JobPlaceholderFieldEnum_IOS_APP_LINK JobPlaceholderFieldEnum_JobPlaceholderField = 18
+	// Data Type: INT64. iOS app store ID.
+	JobPlaceholderFieldEnum_IOS_APP_STORE_ID JobPlaceholderFieldEnum_JobPlaceholderField = 19
+)
+
+var JobPlaceholderFieldEnum_JobPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "JOB_ID",
+	3:  "LOCATION_ID",
+	4:  "TITLE",
+	5:  "SUBTITLE",
+	6:  "DESCRIPTION",
+	7:  "IMAGE_URL",
+	8:  "CATEGORY",
+	9:  "CONTEXTUAL_KEYWORDS",
+	10: "ADDRESS",
+	11: "SALARY",
+	12: "FINAL_URLS",
+	14: "FINAL_MOBILE_URLS",
+	15: "TRACKING_URL",
+	16: "ANDROID_APP_LINK",
+	17: "SIMILAR_JOB_IDS",
+	18: "IOS_APP_LINK",
+	19: "IOS_APP_STORE_ID",
+}
+var JobPlaceholderFieldEnum_JobPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"JOB_ID":              2,
+	"LOCATION_ID":         3,
+	"TITLE":               4,
+	"SUBTITLE":            5,
+	"DESCRIPTION":         6,
+	"IMAGE_URL":           7,
+	"CATEGORY":            8,
+	"CONTEXTUAL_KEYWORDS": 9,
+	"ADDRESS":             10,
+	"SALARY":              11,
+	"FINAL_URLS":          12,
+	"FINAL_MOBILE_URLS":   14,
+	"TRACKING_URL":        15,
+	"ANDROID_APP_LINK":    16,
+	"SIMILAR_JOB_IDS":     17,
+	"IOS_APP_LINK":        18,
+	"IOS_APP_STORE_ID":    19,
+}
+
+func (x JobPlaceholderFieldEnum_JobPlaceholderField) String() string {
+	return proto.EnumName(JobPlaceholderFieldEnum_JobPlaceholderField_name, int32(x))
+}
+func (JobPlaceholderFieldEnum_JobPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_job_placeholder_field_11ce2f9d6d7c7d9d, []int{0, 0}
+}
+
+// Values for Job placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type JobPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *JobPlaceholderFieldEnum) Reset()         { *m = JobPlaceholderFieldEnum{} }
+func (m *JobPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*JobPlaceholderFieldEnum) ProtoMessage()    {}
+func (*JobPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_placeholder_field_11ce2f9d6d7c7d9d, []int{0}
+}
+func (m *JobPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_JobPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *JobPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_JobPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *JobPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_JobPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *JobPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_JobPlaceholderFieldEnum.Size(m)
+}
+func (m *JobPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_JobPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_JobPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*JobPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.JobPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.JobPlaceholderFieldEnum_JobPlaceholderField", JobPlaceholderFieldEnum_JobPlaceholderField_name, JobPlaceholderFieldEnum_JobPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/job_placeholder_field.proto", fileDescriptor_job_placeholder_field_11ce2f9d6d7c7d9d)
+}
+
+var fileDescriptor_job_placeholder_field_11ce2f9d6d7c7d9d = []byte{
+	// 454 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xc1, 0x6e, 0xd3, 0x40,
+	0x10, 0xa5, 0x2e, 0x4d, 0x9b, 0x49, 0x68, 0xb6, 0x1b, 0x50, 0xc5, 0xa1, 0x07, 0xfa, 0x01, 0x76,
+	0x24, 0x4e, 0x88, 0xd3, 0xda, 0xde, 0x58, 0x9b, 0x6c, 0x76, 0xad, 0x5d, 0xbb, 0x25, 0x28, 0x92,
+	0x95, 0xd4, 0xc6, 0x14, 0x39, 0xd9, 0x28, 0xa6, 0xfd, 0x20, 0x8e, 0x7c, 0x4a, 0xef, 0x7c, 0x08,
+	0x7f, 0x80, 0xd6, 0x26, 0xad, 0x84, 0x80, 0x8b, 0xf5, 0x76, 0xde, 0x7b, 0x33, 0xe3, 0x99, 0x81,
+	0x77, 0xa5, 0x31, 0x65, 0x55, 0x78, 0xcb, 0xbc, 0xf6, 0x5a, 0x68, 0xd1, 0xfd, 0xc8, 0x2b, 0x36,
+	0x77, 0xeb, 0xda, 0xfb, 0x62, 0x56, 0xd9, 0xb6, 0x5a, 0xde, 0x14, 0x9f, 0x4d, 0x95, 0x17, 0xbb,
+	0xec, 0xd3, 0x6d, 0x51, 0xe5, 0xee, 0x76, 0x67, 0xbe, 0x1a, 0x7c, 0xd1, 0xea, 0xdd, 0x65, 0x5e,
+	0xbb, 0x8f, 0x56, 0xf7, 0x7e, 0xe4, 0x36, 0xd6, 0xcb, 0x9f, 0x0e, 0x9c, 0x4f, 0xcc, 0x2a, 0x7e,
+	0x72, 0x8f, 0xad, 0x99, 0x6e, 0xee, 0xd6, 0x97, 0x3f, 0x1c, 0x18, 0xfe, 0x85, 0xc3, 0x03, 0xe8,
+	0xa5, 0x42, 0xc7, 0x34, 0x60, 0x63, 0x46, 0x43, 0xf4, 0x0c, 0xf7, 0xe0, 0x38, 0x15, 0x53, 0x21,
+	0xaf, 0x05, 0x3a, 0xc0, 0x00, 0x9d, 0x89, 0xf4, 0x33, 0x16, 0x22, 0xc7, 0x2a, 0xb9, 0x0c, 0x48,
+	0xc2, 0xa4, 0xb0, 0x81, 0x43, 0xdc, 0x85, 0xa3, 0x84, 0x25, 0x9c, 0xa2, 0xe7, 0xb8, 0x0f, 0x27,
+	0x3a, 0xf5, 0xdb, 0xd7, 0x91, 0x55, 0x86, 0x54, 0x07, 0x8a, 0xc5, 0x56, 0x8c, 0x3a, 0xf8, 0x05,
+	0x74, 0xd9, 0x8c, 0x44, 0x34, 0x4b, 0x15, 0x47, 0xc7, 0x56, 0x1d, 0x90, 0x84, 0x46, 0x52, 0xcd,
+	0xd1, 0x09, 0x3e, 0x87, 0x61, 0x20, 0x45, 0x42, 0x3f, 0x24, 0x29, 0xe1, 0xd9, 0x94, 0xce, 0xaf,
+	0xa5, 0x0a, 0x35, 0xea, 0xda, 0x4e, 0x48, 0x18, 0x2a, 0xaa, 0x35, 0x02, 0xdb, 0x89, 0x26, 0x9c,
+	0xa8, 0x39, 0xea, 0xe1, 0x53, 0x80, 0x31, 0x13, 0x84, 0xdb, 0x74, 0x1a, 0xf5, 0xf1, 0x2b, 0x38,
+	0x6b, 0xdf, 0x33, 0xe9, 0x33, 0x4e, 0xdb, 0xf0, 0x29, 0x46, 0xd0, 0x4f, 0x14, 0x09, 0xa6, 0x4c,
+	0x44, 0x4d, 0xe1, 0x01, 0x7e, 0x09, 0x88, 0x88, 0x50, 0x49, 0x16, 0x66, 0x24, 0x8e, 0x33, 0xce,
+	0xc4, 0x14, 0x21, 0x3c, 0x84, 0x81, 0x66, 0x33, 0xc6, 0x89, 0xca, 0xda, 0x9f, 0xd5, 0xe8, 0xcc,
+	0x9a, 0x99, 0xd4, 0x4f, 0x32, 0x6c, 0xcd, 0xfb, 0x88, 0x4e, 0xa4, 0xa2, 0x76, 0x08, 0x43, 0xff,
+	0xe1, 0x00, 0xde, 0xdc, 0x98, 0xb5, 0xfb, 0xdf, 0xcd, 0xf8, 0xaf, 0x27, 0x66, 0x55, 0xff, 0x39,
+	0xfb, 0xd8, 0xee, 0x34, 0x3e, 0xf8, 0xe8, 0xff, 0xf6, 0x96, 0xa6, 0x5a, 0x6e, 0x4a, 0xd7, 0xec,
+	0x4a, 0xaf, 0x2c, 0x36, 0xcd, 0xc6, 0xf7, 0x07, 0xb2, 0xbd, 0xad, 0xff, 0x71, 0x2f, 0xef, 0x9b,
+	0xef, 0x37, 0xe7, 0x30, 0x22, 0xe4, 0xbb, 0x73, 0x11, 0xb5, 0xa9, 0x48, 0x5e, 0xbb, 0x2d, 0xb4,
+	0xe8, 0x6a, 0xe4, 0xda, 0x1b, 0xa8, 0x1f, 0xf6, 0xfc, 0x82, 0xe4, 0xf5, 0xe2, 0x91, 0x5f, 0x5c,
+	0x8d, 0x16, 0x0d, 0xbf, 0xea, 0x34, 0x45, 0xdf, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x41, 0xa3,
+	0x7b, 0x35, 0xa3, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/keyword_match_type.pb.go b/googleapis/ads/googleads/v0/enums/keyword_match_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a67176f2f8f1277ae6ef984f18ce9aeca59afe04
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/keyword_match_type.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/keyword_match_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible Keyword match types.
+type KeywordMatchTypeEnum_KeywordMatchType int32
+
+const (
+	// Not specified.
+	KeywordMatchTypeEnum_UNSPECIFIED KeywordMatchTypeEnum_KeywordMatchType = 0
+	// Used for return value only. Represents value unknown in this version.
+	KeywordMatchTypeEnum_UNKNOWN KeywordMatchTypeEnum_KeywordMatchType = 1
+	// Exact match.
+	KeywordMatchTypeEnum_EXACT KeywordMatchTypeEnum_KeywordMatchType = 2
+	// Phrase match.
+	KeywordMatchTypeEnum_PHRASE KeywordMatchTypeEnum_KeywordMatchType = 3
+	// Broad match.
+	KeywordMatchTypeEnum_BROAD KeywordMatchTypeEnum_KeywordMatchType = 4
+)
+
+var KeywordMatchTypeEnum_KeywordMatchType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EXACT",
+	3: "PHRASE",
+	4: "BROAD",
+}
+var KeywordMatchTypeEnum_KeywordMatchType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EXACT":       2,
+	"PHRASE":      3,
+	"BROAD":       4,
+}
+
+func (x KeywordMatchTypeEnum_KeywordMatchType) String() string {
+	return proto.EnumName(KeywordMatchTypeEnum_KeywordMatchType_name, int32(x))
+}
+func (KeywordMatchTypeEnum_KeywordMatchType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_match_type_ee22d7efa4d15984, []int{0, 0}
+}
+
+// Message describing Keyword match types.
+type KeywordMatchTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordMatchTypeEnum) Reset()         { *m = KeywordMatchTypeEnum{} }
+func (m *KeywordMatchTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordMatchTypeEnum) ProtoMessage()    {}
+func (*KeywordMatchTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_match_type_ee22d7efa4d15984, []int{0}
+}
+func (m *KeywordMatchTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordMatchTypeEnum.Unmarshal(m, b)
+}
+func (m *KeywordMatchTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordMatchTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordMatchTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordMatchTypeEnum.Merge(dst, src)
+}
+func (m *KeywordMatchTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordMatchTypeEnum.Size(m)
+}
+func (m *KeywordMatchTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordMatchTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordMatchTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordMatchTypeEnum)(nil), "google.ads.googleads.v0.enums.KeywordMatchTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.KeywordMatchTypeEnum_KeywordMatchType", KeywordMatchTypeEnum_KeywordMatchType_name, KeywordMatchTypeEnum_KeywordMatchType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/keyword_match_type.proto", fileDescriptor_keyword_match_type_ee22d7efa4d15984)
+}
+
+var fileDescriptor_keyword_match_type_ee22d7efa4d15984 = []byte{
+	// 275 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xec, 0xd4, 0xca, 0xf2, 0xfc, 0xa2, 0x94, 0xf8, 0xdc, 0xc4, 0x92, 0xe4,
+	0x8c, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x62,
+	0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x3e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x3e, 0xa5, 0x2c, 0x2e,
+	0x11, 0x6f, 0x88, 0x56, 0x5f, 0x90, 0xce, 0x90, 0xca, 0x82, 0x54, 0xd7, 0xbc, 0xd2, 0x5c, 0xa5,
+	0x20, 0x2e, 0x01, 0x74, 0x71, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f,
+	0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70,
+	0x3f, 0x01, 0x46, 0x21, 0x4e, 0x2e, 0x56, 0xd7, 0x08, 0x47, 0xe7, 0x10, 0x01, 0x26, 0x21, 0x2e,
+	0x2e, 0xb6, 0x00, 0x8f, 0x20, 0xc7, 0x60, 0x57, 0x01, 0x66, 0x90, 0xb0, 0x53, 0x90, 0xbf, 0xa3,
+	0x8b, 0x00, 0x8b, 0xd3, 0x31, 0x46, 0x2e, 0xc5, 0xe4, 0xfc, 0x5c, 0x3d, 0xbc, 0x2e, 0x72, 0x12,
+	0x45, 0xb7, 0x37, 0x00, 0xe4, 0x8f, 0x00, 0xc6, 0x28, 0x27, 0xa8, 0xbe, 0xf4, 0xfc, 0x9c, 0xc4,
+	0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0, 0x2f, 0x61, 0x21, 0x52, 0x90,
+	0x59, 0x8c, 0x23, 0x80, 0xac, 0xc1, 0xe4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0xb2,
+	0xee, 0x10, 0xa3, 0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0xe4, 0xf7,
+	0xe2, 0x53, 0x30, 0xf9, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x7c, 0x4c, 0x98, 0x41, 0x0c, 0x58,
+	0x3e, 0x89, 0x0d, 0x6c, 0xa9, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x94, 0x89, 0x6e, 0x8a, 0x94,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/keyword_plan_competition_level.pb.go b/googleapis/ads/googleads/v0/enums/keyword_plan_competition_level.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d3dd791c28af98897880577f4ba9d81179c32895
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/keyword_plan_competition_level.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/keyword_plan_competition_level.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Competition level of a keyword.
+type KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel int32
+
+const (
+	// Not specified.
+	KeywordPlanCompetitionLevelEnum_UNSPECIFIED KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 0
+	// The value is unknown in this version.
+	KeywordPlanCompetitionLevelEnum_UNKNOWN KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 1
+	// Low competition.
+	KeywordPlanCompetitionLevelEnum_LOW KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 2
+	// Medium competition.
+	KeywordPlanCompetitionLevelEnum_MEDIUM KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 3
+	// High competition.
+	KeywordPlanCompetitionLevelEnum_HIGH KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel = 4
+)
+
+var KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LOW",
+	3: "MEDIUM",
+	4: "HIGH",
+}
+var KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"LOW":         2,
+	"MEDIUM":      3,
+	"HIGH":        4,
+}
+
+func (x KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel) String() string {
+	return proto.EnumName(KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_name, int32(x))
+}
+func (KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_competition_level_253209b650169a13, []int{0, 0}
+}
+
+// Container for enumeration of keyword competition levels. The competition
+// level indicates how competitive ad placement is for a keyword and
+// is determined by the number of advertisers bidding on that keyword relative
+// to all keywords across Google. The competition level can depend on the
+// location and Search Network targeting options you've selected.
+type KeywordPlanCompetitionLevelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanCompetitionLevelEnum) Reset()         { *m = KeywordPlanCompetitionLevelEnum{} }
+func (m *KeywordPlanCompetitionLevelEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCompetitionLevelEnum) ProtoMessage()    {}
+func (*KeywordPlanCompetitionLevelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_competition_level_253209b650169a13, []int{0}
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanCompetitionLevelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Merge(dst, src)
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCompetitionLevelEnum.Size(m)
+}
+func (m *KeywordPlanCompetitionLevelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCompetitionLevelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCompetitionLevelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanCompetitionLevelEnum)(nil), "google.ads.googleads.v0.enums.KeywordPlanCompetitionLevelEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel", KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_name, KeywordPlanCompetitionLevelEnum_KeywordPlanCompetitionLevel_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/keyword_plan_competition_level.proto", fileDescriptor_keyword_plan_competition_level_253209b650169a13)
+}
+
+var fileDescriptor_keyword_plan_competition_level_253209b650169a13 = []byte{
+	// 291 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x6a, 0x83, 0x30,
+	0x18, 0xc7, 0xa7, 0x96, 0x76, 0xa4, 0x87, 0x49, 0xae, 0xa3, 0x6c, 0xeb, 0x03, 0x44, 0x61, 0xc7,
+	0x9d, 0xb4, 0x75, 0x56, 0xda, 0x5a, 0x61, 0xd8, 0x42, 0x11, 0xc4, 0xd5, 0x10, 0x64, 0x31, 0x9f,
+	0x18, 0xeb, 0xd8, 0x61, 0x2f, 0xb3, 0xe3, 0x1e, 0x65, 0xb7, 0xbd, 0xd1, 0x50, 0xd7, 0xee, 0x34,
+	0x2f, 0xe1, 0x0f, 0xff, 0xe4, 0xf7, 0xe5, 0xfb, 0x21, 0x9b, 0x01, 0x30, 0x4e, 0x8d, 0x24, 0x95,
+	0x46, 0x17, 0x9b, 0x54, 0x9b, 0x06, 0x15, 0xc7, 0x5c, 0x1a, 0x2f, 0xf4, 0xed, 0x15, 0xca, 0x34,
+	0x2e, 0x78, 0x22, 0xe2, 0x03, 0xe4, 0x05, 0xad, 0xb2, 0x2a, 0x03, 0x11, 0x73, 0x5a, 0x53, 0x4e,
+	0x8a, 0x12, 0x2a, 0xc0, 0x93, 0xee, 0x21, 0x49, 0x52, 0x49, 0xce, 0x0c, 0x52, 0x9b, 0xa4, 0x65,
+	0x4c, 0xdf, 0xd1, 0xcd, 0xb2, 0xc3, 0x04, 0x3c, 0x11, 0xb3, 0x3f, 0xc8, 0xaa, 0x61, 0x38, 0xe2,
+	0x98, 0x4f, 0xf7, 0xe8, 0xba, 0xe7, 0x0a, 0xbe, 0x42, 0xe3, 0xd0, 0x7f, 0x0a, 0x9c, 0x99, 0xf7,
+	0xe8, 0x39, 0x73, 0xfd, 0x02, 0x8f, 0xd1, 0x28, 0xf4, 0x97, 0xfe, 0x66, 0xe7, 0xeb, 0x0a, 0x1e,
+	0x21, 0x6d, 0xb5, 0xd9, 0xe9, 0x2a, 0x46, 0x68, 0xb8, 0x76, 0xe6, 0x5e, 0xb8, 0xd6, 0x35, 0x7c,
+	0x89, 0x06, 0x0b, 0xcf, 0x5d, 0xe8, 0x03, 0xfb, 0x5b, 0x41, 0x77, 0x07, 0xc8, 0x49, 0xef, 0x27,
+	0xed, 0xdb, 0x9e, 0xf9, 0x41, 0xb3, 0x65, 0xa0, 0xec, 0x7f, 0x5d, 0x11, 0x06, 0x3c, 0x11, 0x8c,
+	0x40, 0xc9, 0x0c, 0x46, 0x45, 0xeb, 0xe0, 0xe4, 0xae, 0xc8, 0xe4, 0x3f, 0x2a, 0x1f, 0xda, 0xf3,
+	0x43, 0xd5, 0x5c, 0xcb, 0xfa, 0x54, 0x27, 0x6e, 0x87, 0xb2, 0x52, 0x49, 0xba, 0xd8, 0xa4, 0xad,
+	0x49, 0x1a, 0x1d, 0xf2, 0xeb, 0xd4, 0x47, 0x56, 0x2a, 0xa3, 0x73, 0x1f, 0x6d, 0xcd, 0xa8, 0xed,
+	0x9f, 0x87, 0xed, 0xd0, 0xfb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x98, 0xeb, 0x0f, 0xbe,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/keyword_plan_forecast_interval.pb.go b/googleapis/ads/googleads/v0/enums/keyword_plan_forecast_interval.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6b323ade5d5e5270348214eecf3577fe692aebe5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/keyword_plan_forecast_interval.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/keyword_plan_forecast_interval.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Forecast intervals.
+type KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval int32
+
+const (
+	// Not specified.
+	KeywordPlanForecastIntervalEnum_UNSPECIFIED KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 0
+	// The value is unknown in this version.
+	KeywordPlanForecastIntervalEnum_UNKNOWN KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 1
+	// The next week date range for keyword plan. The next week is based
+	// on the default locale of the user's account and is mostly SUN-SAT or
+	// MON-SUN.
+	// This can be different from next-7 days.
+	KeywordPlanForecastIntervalEnum_NEXT_WEEK KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 3
+	// The next month date range for keyword plan.
+	KeywordPlanForecastIntervalEnum_NEXT_MONTH KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 4
+	// The next quarter date range for keyword plan.
+	KeywordPlanForecastIntervalEnum_NEXT_QUARTER KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval = 5
+)
+
+var KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "NEXT_WEEK",
+	4: "NEXT_MONTH",
+	5: "NEXT_QUARTER",
+}
+var KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"NEXT_WEEK":    3,
+	"NEXT_MONTH":   4,
+	"NEXT_QUARTER": 5,
+}
+
+func (x KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval) String() string {
+	return proto.EnumName(KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_name, int32(x))
+}
+func (KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_forecast_interval_48060c037199c7ef, []int{0, 0}
+}
+
+// Container for enumeration of forecast intervals.
+type KeywordPlanForecastIntervalEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanForecastIntervalEnum) Reset()         { *m = KeywordPlanForecastIntervalEnum{} }
+func (m *KeywordPlanForecastIntervalEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanForecastIntervalEnum) ProtoMessage()    {}
+func (*KeywordPlanForecastIntervalEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_forecast_interval_48060c037199c7ef, []int{0}
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanForecastIntervalEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanForecastIntervalEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanForecastIntervalEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanForecastIntervalEnum.Merge(dst, src)
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanForecastIntervalEnum.Size(m)
+}
+func (m *KeywordPlanForecastIntervalEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanForecastIntervalEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanForecastIntervalEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanForecastIntervalEnum)(nil), "google.ads.googleads.v0.enums.KeywordPlanForecastIntervalEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval", KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_name, KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/keyword_plan_forecast_interval.proto", fileDescriptor_keyword_plan_forecast_interval_48060c037199c7ef)
+}
+
+var fileDescriptor_keyword_plan_forecast_interval_48060c037199c7ef = []byte{
+	// 303 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4b, 0x4e, 0xc3, 0x30,
+	0x14, 0x45, 0x49, 0xcb, 0x47, 0xb8, 0x7c, 0x2c, 0x4f, 0x51, 0x05, 0x74, 0x01, 0x4e, 0x24, 0x86,
+	0x8c, 0x52, 0x70, 0x4b, 0x55, 0xe1, 0x86, 0xd2, 0x0f, 0x42, 0x91, 0x22, 0xd3, 0x18, 0xab, 0xc2,
+	0xb5, 0xa3, 0x38, 0x0d, 0x62, 0x15, 0xec, 0x81, 0x21, 0x4b, 0x61, 0xc6, 0x8e, 0x50, 0x9c, 0xb4,
+	0x33, 0x32, 0x89, 0xee, 0xd3, 0x8d, 0x8f, 0x9f, 0x0f, 0xe8, 0x0a, 0xad, 0x85, 0xe4, 0x2e, 0x8b,
+	0x8d, 0x5b, 0xc6, 0x22, 0xe5, 0x9e, 0xcb, 0xd5, 0x7a, 0x65, 0xdc, 0x37, 0xfe, 0xf1, 0xae, 0xd3,
+	0x38, 0x4a, 0x24, 0x53, 0xd1, 0xab, 0x4e, 0xf9, 0x82, 0x99, 0x2c, 0x5a, 0xaa, 0x8c, 0xa7, 0x39,
+	0x93, 0x38, 0x49, 0x75, 0xa6, 0x51, 0xbb, 0x3c, 0x88, 0x59, 0x6c, 0xf0, 0x96, 0x81, 0x73, 0x0f,
+	0x5b, 0x46, 0xe7, 0xd3, 0x01, 0xe7, 0xc3, 0x92, 0x13, 0x48, 0xa6, 0x7a, 0x15, 0x65, 0x50, 0x41,
+	0x88, 0x5a, 0xaf, 0x3a, 0x12, 0x9c, 0xd5, 0xfc, 0x82, 0x4e, 0x41, 0x6b, 0x4a, 0x1f, 0x03, 0x72,
+	0x33, 0xe8, 0x0d, 0xc8, 0x2d, 0xdc, 0x41, 0x2d, 0x70, 0x30, 0xa5, 0x43, 0x3a, 0x9a, 0x53, 0xe8,
+	0xa0, 0x63, 0x70, 0x48, 0xc9, 0xd3, 0x24, 0x9a, 0x13, 0x32, 0x84, 0x4d, 0x74, 0x02, 0x80, 0x1d,
+	0xef, 0x47, 0x74, 0x72, 0x07, 0x77, 0x11, 0x04, 0x47, 0x76, 0x7e, 0x98, 0xfa, 0xe3, 0x09, 0x19,
+	0xc3, 0xbd, 0xee, 0xaf, 0x03, 0x2e, 0x17, 0x7a, 0x85, 0x6b, 0xf7, 0xee, 0x5e, 0xd4, 0x6c, 0x14,
+	0x14, 0x0f, 0x0f, 0x9c, 0xe7, 0x4a, 0x1f, 0x16, 0x5a, 0x32, 0x25, 0xb0, 0x4e, 0x85, 0x2b, 0xb8,
+	0xb2, 0x5a, 0x36, 0x3a, 0x93, 0xa5, 0xf9, 0xc7, 0xee, 0xb5, 0xfd, 0x7e, 0x35, 0x9a, 0x7d, 0xdf,
+	0xff, 0x6e, 0xb4, 0xfb, 0x25, 0xca, 0x8f, 0x0d, 0x2e, 0x63, 0x91, 0x66, 0x1e, 0x2e, 0x04, 0x99,
+	0x9f, 0x4d, 0x1f, 0xfa, 0xb1, 0x09, 0xb7, 0x7d, 0x38, 0xf3, 0x42, 0xdb, 0xbf, 0xec, 0xdb, 0x4b,
+	0xaf, 0xfe, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x3c, 0x2c, 0x01, 0xd1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/keyword_plan_network.pb.go b/googleapis/ads/googleads/v0/enums/keyword_plan_network.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4d6bf0ae8175f0d9aaa5706992f62c23980c407a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/keyword_plan_network.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/keyword_plan_network.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates keyword plan forecastable network types.
+type KeywordPlanNetworkEnum_KeywordPlanNetwork int32
+
+const (
+	// Not specified.
+	KeywordPlanNetworkEnum_UNSPECIFIED KeywordPlanNetworkEnum_KeywordPlanNetwork = 0
+	// The value is unknown in this version.
+	KeywordPlanNetworkEnum_UNKNOWN KeywordPlanNetworkEnum_KeywordPlanNetwork = 1
+	// Google Search.
+	KeywordPlanNetworkEnum_GOOGLE_SEARCH KeywordPlanNetworkEnum_KeywordPlanNetwork = 2
+	// Google Search + Search partners.
+	KeywordPlanNetworkEnum_GOOGLE_SEARCH_AND_PARTNERS KeywordPlanNetworkEnum_KeywordPlanNetwork = 3
+)
+
+var KeywordPlanNetworkEnum_KeywordPlanNetwork_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "GOOGLE_SEARCH",
+	3: "GOOGLE_SEARCH_AND_PARTNERS",
+}
+var KeywordPlanNetworkEnum_KeywordPlanNetwork_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"GOOGLE_SEARCH":              2,
+	"GOOGLE_SEARCH_AND_PARTNERS": 3,
+}
+
+func (x KeywordPlanNetworkEnum_KeywordPlanNetwork) String() string {
+	return proto.EnumName(KeywordPlanNetworkEnum_KeywordPlanNetwork_name, int32(x))
+}
+func (KeywordPlanNetworkEnum_KeywordPlanNetwork) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_network_bcfc8cc44ad88964, []int{0, 0}
+}
+
+// Container for enumeration of keyword plan forecastable network types.
+type KeywordPlanNetworkEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanNetworkEnum) Reset()         { *m = KeywordPlanNetworkEnum{} }
+func (m *KeywordPlanNetworkEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNetworkEnum) ProtoMessage()    {}
+func (*KeywordPlanNetworkEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_network_bcfc8cc44ad88964, []int{0}
+}
+func (m *KeywordPlanNetworkEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNetworkEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanNetworkEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNetworkEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanNetworkEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNetworkEnum.Merge(dst, src)
+}
+func (m *KeywordPlanNetworkEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNetworkEnum.Size(m)
+}
+func (m *KeywordPlanNetworkEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNetworkEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNetworkEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanNetworkEnum)(nil), "google.ads.googleads.v0.enums.KeywordPlanNetworkEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.KeywordPlanNetworkEnum_KeywordPlanNetwork", KeywordPlanNetworkEnum_KeywordPlanNetwork_name, KeywordPlanNetworkEnum_KeywordPlanNetwork_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/keyword_plan_network.proto", fileDescriptor_keyword_plan_network_bcfc8cc44ad88964)
+}
+
+var fileDescriptor_keyword_plan_network_bcfc8cc44ad88964 = []byte{
+	// 286 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xec, 0xd4, 0xca, 0xf2, 0xfc, 0xa2, 0x94, 0xf8, 0x82, 0x9c, 0xc4, 0xbc,
+	0xf8, 0xbc, 0xd4, 0x92, 0xf2, 0xfc, 0xa2, 0x6c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59,
+	0x88, 0x72, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x4e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x4e, 0xa5,
+	0x7a, 0x2e, 0x31, 0x6f, 0x88, 0xe6, 0x80, 0x9c, 0xc4, 0x3c, 0x3f, 0x88, 0x56, 0xd7, 0xbc, 0xd2,
+	0x5c, 0xa5, 0x54, 0x2e, 0x21, 0x4c, 0x19, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57,
+	0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f,
+	0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x41, 0x2e, 0x5e, 0x77, 0x7f, 0x7f, 0x77, 0x1f, 0xd7, 0xf8,
+	0x60, 0x57, 0xc7, 0x20, 0x67, 0x0f, 0x01, 0x26, 0x21, 0x39, 0x2e, 0x29, 0x14, 0xa1, 0x78, 0x47,
+	0x3f, 0x97, 0xf8, 0x00, 0xc7, 0xa0, 0x10, 0x3f, 0xd7, 0xa0, 0x60, 0x01, 0x66, 0xa7, 0x13, 0x8c,
+	0x5c, 0x8a, 0xc9, 0xf9, 0xb9, 0x7a, 0x78, 0x9d, 0xe9, 0x24, 0x8e, 0xe9, 0x94, 0x00, 0x90, 0xf7,
+	0x02, 0x18, 0xa3, 0x9c, 0xa0, 0x3a, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2,
+	0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x9e, 0x87, 0x05, 0x55, 0x41, 0x66, 0x31, 0x8e, 0x90, 0xb3, 0x06,
+	0x93, 0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0xc9, 0xba, 0x43, 0x8c, 0x72, 0x4c, 0x29,
+	0xd6, 0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0x3d, 0x50, 0x80, 0x14, 0x9f, 0x82, 0xc9, 0xc7, 0x38,
+	0xa6, 0x14, 0xc7, 0xc0, 0xe5, 0x63, 0xc2, 0x0c, 0x62, 0xc0, 0xf2, 0x49, 0x6c, 0x60, 0x4b, 0x8d,
+	0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x21, 0x62, 0xf1, 0x14, 0xad, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/listing_custom_attribute_index.pb.go b/googleapis/ads/googleads/v0/enums/listing_custom_attribute_index.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..56af308a4dbb293f047d34042cbee721e9f15ad9
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/listing_custom_attribute_index.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/listing_custom_attribute_index.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The index of the listing custom attribute.
+type ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex int32
+
+const (
+	// Not specified.
+	ListingCustomAttributeIndexEnum_UNSPECIFIED ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 0
+	// Used for return value only. Represents value unknown in this version.
+	ListingCustomAttributeIndexEnum_UNKNOWN ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 1
+	// First listing custom attribute.
+	ListingCustomAttributeIndexEnum_CUSTOM_ATTRIBUTE_0 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 2
+	// Second listing custom attribute.
+	ListingCustomAttributeIndexEnum_CUSTOM_ATTRIBUTE_1 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 3
+	// Third listing custom attribute.
+	ListingCustomAttributeIndexEnum_CUSTOM_ATTRIBUTE_2 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 4
+	// Fourth listing custom attribute.
+	ListingCustomAttributeIndexEnum_CUSTOM_ATTRIBUTE_3 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 5
+	// Fifth listing custom attribute.
+	ListingCustomAttributeIndexEnum_CUSTOM_ATTRIBUTE_4 ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex = 6
+)
+
+var ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CUSTOM_ATTRIBUTE_0",
+	3: "CUSTOM_ATTRIBUTE_1",
+	4: "CUSTOM_ATTRIBUTE_2",
+	5: "CUSTOM_ATTRIBUTE_3",
+	6: "CUSTOM_ATTRIBUTE_4",
+}
+var ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"CUSTOM_ATTRIBUTE_0": 2,
+	"CUSTOM_ATTRIBUTE_1": 3,
+	"CUSTOM_ATTRIBUTE_2": 4,
+	"CUSTOM_ATTRIBUTE_3": 5,
+	"CUSTOM_ATTRIBUTE_4": 6,
+}
+
+func (x ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex) String() string {
+	return proto.EnumName(ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_name, int32(x))
+}
+func (ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_listing_custom_attribute_index_238055c47db24f86, []int{0, 0}
+}
+
+// Container for enum describing the index of the listing custom attribute.
+type ListingCustomAttributeIndexEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListingCustomAttributeIndexEnum) Reset()         { *m = ListingCustomAttributeIndexEnum{} }
+func (m *ListingCustomAttributeIndexEnum) String() string { return proto.CompactTextString(m) }
+func (*ListingCustomAttributeIndexEnum) ProtoMessage()    {}
+func (*ListingCustomAttributeIndexEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_listing_custom_attribute_index_238055c47db24f86, []int{0}
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingCustomAttributeIndexEnum.Unmarshal(m, b)
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingCustomAttributeIndexEnum.Marshal(b, m, deterministic)
+}
+func (dst *ListingCustomAttributeIndexEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingCustomAttributeIndexEnum.Merge(dst, src)
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_Size() int {
+	return xxx_messageInfo_ListingCustomAttributeIndexEnum.Size(m)
+}
+func (m *ListingCustomAttributeIndexEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingCustomAttributeIndexEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingCustomAttributeIndexEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ListingCustomAttributeIndexEnum)(nil), "google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex", ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_name, ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/listing_custom_attribute_index.proto", fileDescriptor_listing_custom_attribute_index_238055c47db24f86)
+}
+
+var fileDescriptor_listing_custom_attribute_index_238055c47db24f86 = []byte{
+	// 306 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x9c, 0xcc, 0xe2, 0x92, 0xcc, 0xbc, 0xf4, 0xf8, 0xe4, 0xd2, 0xe2, 0x92,
+	0xfc, 0xdc, 0xf8, 0xc4, 0x92, 0x92, 0xa2, 0xcc, 0xa4, 0xd2, 0x92, 0xd4, 0xf8, 0xcc, 0xbc, 0x94,
+	0xd4, 0x0a, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x46, 0xbd, 0xc4, 0x94, 0x62,
+	0x3d, 0xb8, 0x19, 0x7a, 0x65, 0x06, 0x7a, 0x60, 0x33, 0x94, 0xae, 0x33, 0x72, 0xc9, 0xfb, 0x40,
+	0xcc, 0x71, 0x06, 0x1b, 0xe3, 0x08, 0x33, 0xc5, 0x13, 0x64, 0x88, 0x6b, 0x5e, 0x69, 0xae, 0xd2,
+	0x66, 0x46, 0x2e, 0x69, 0x3c, 0x6a, 0x84, 0xf8, 0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c, 0x9d,
+	0x3d, 0xdd, 0x3c, 0x5d, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd, 0xfc,
+	0xc3, 0xfd, 0x04, 0x18, 0x85, 0xc4, 0xb8, 0x84, 0x9c, 0x43, 0x83, 0x43, 0xfc, 0x7d, 0xe3, 0x1d,
+	0x43, 0x42, 0x82, 0x3c, 0x9d, 0x42, 0x43, 0x5c, 0xe3, 0x0d, 0x04, 0x98, 0xb0, 0x8a, 0x1b, 0x0a,
+	0x30, 0x63, 0x15, 0x37, 0x12, 0x60, 0xc1, 0x2a, 0x6e, 0x2c, 0xc0, 0x8a, 0x55, 0xdc, 0x44, 0x80,
+	0xcd, 0xe9, 0x22, 0x23, 0x97, 0x62, 0x72, 0x7e, 0xae, 0x1e, 0x5e, 0xff, 0x3b, 0x29, 0xe0, 0xf1,
+	0x58, 0x00, 0x28, 0x00, 0x03, 0x18, 0xa3, 0xa0, 0xd1, 0xa0, 0x97, 0x9e, 0x9f, 0x93, 0x98, 0x97,
+	0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0x0e, 0x5e, 0x58, 0xb4, 0x14, 0x64, 0x16,
+	0xe3, 0x88, 0x25, 0x6b, 0x30, 0xb9, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0xac, 0x3b,
+	0xc4, 0x28, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x03, 0x05, 0x74, 0xf1,
+	0x29, 0x98, 0x7c, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x3e, 0x26, 0xcc, 0x20, 0x06, 0x2c, 0x9f,
+	0xc4, 0x06, 0xb6, 0xd4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x05, 0xe3, 0x48, 0x19, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/listing_group_type.pb.go b/googleapis/ads/googleads/v0/enums/listing_group_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a95c33de3fdc62de6a0df869f3a1ae3099ec1c76
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/listing_group_type.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/listing_group_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of the listing group.
+type ListingGroupTypeEnum_ListingGroupType int32
+
+const (
+	// Not specified.
+	ListingGroupTypeEnum_UNSPECIFIED ListingGroupTypeEnum_ListingGroupType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ListingGroupTypeEnum_UNKNOWN ListingGroupTypeEnum_ListingGroupType = 1
+	// Subdivision of products along some listing dimension. These nodes
+	// are not used by serving to target listing entries, but is purely
+	// to define the structure of the tree.
+	ListingGroupTypeEnum_SUBDIVISION ListingGroupTypeEnum_ListingGroupType = 2
+	// Listing group unit that defines a bid.
+	ListingGroupTypeEnum_UNIT ListingGroupTypeEnum_ListingGroupType = 3
+)
+
+var ListingGroupTypeEnum_ListingGroupType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SUBDIVISION",
+	3: "UNIT",
+}
+var ListingGroupTypeEnum_ListingGroupType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"SUBDIVISION": 2,
+	"UNIT":        3,
+}
+
+func (x ListingGroupTypeEnum_ListingGroupType) String() string {
+	return proto.EnumName(ListingGroupTypeEnum_ListingGroupType_name, int32(x))
+}
+func (ListingGroupTypeEnum_ListingGroupType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_listing_group_type_2f6adbfc1adad4a7, []int{0, 0}
+}
+
+// Container for enum describing the type of the listing group.
+type ListingGroupTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListingGroupTypeEnum) Reset()         { *m = ListingGroupTypeEnum{} }
+func (m *ListingGroupTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ListingGroupTypeEnum) ProtoMessage()    {}
+func (*ListingGroupTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_listing_group_type_2f6adbfc1adad4a7, []int{0}
+}
+func (m *ListingGroupTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListingGroupTypeEnum.Unmarshal(m, b)
+}
+func (m *ListingGroupTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListingGroupTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *ListingGroupTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListingGroupTypeEnum.Merge(dst, src)
+}
+func (m *ListingGroupTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ListingGroupTypeEnum.Size(m)
+}
+func (m *ListingGroupTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListingGroupTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListingGroupTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ListingGroupTypeEnum)(nil), "google.ads.googleads.v0.enums.ListingGroupTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ListingGroupTypeEnum_ListingGroupType", ListingGroupTypeEnum_ListingGroupType_name, ListingGroupTypeEnum_ListingGroupType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/listing_group_type.proto", fileDescriptor_listing_group_type_2f6adbfc1adad4a7)
+}
+
+var fileDescriptor_listing_group_type_2f6adbfc1adad4a7 = []byte{
+	// 268 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x9c, 0xcc, 0xe2, 0x92, 0xcc, 0xbc, 0xf4, 0xf8, 0xf4, 0xa2, 0xfc, 0xd2,
+	0x82, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x62,
+	0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x3e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x3e, 0xa5, 0x64, 0x2e,
+	0x11, 0x1f, 0x88, 0x56, 0x77, 0x90, 0xce, 0x90, 0xca, 0x82, 0x54, 0xd7, 0xbc, 0xd2, 0x5c, 0x25,
+	0x6f, 0x2e, 0x01, 0x74, 0x71, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f,
+	0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70,
+	0x3f, 0x01, 0x46, 0x90, 0x6c, 0x70, 0xa8, 0x93, 0x8b, 0x67, 0x98, 0x67, 0xb0, 0xa7, 0xbf, 0x9f,
+	0x00, 0x93, 0x10, 0x07, 0x17, 0x4b, 0xa8, 0x9f, 0x67, 0x88, 0x00, 0xb3, 0xd3, 0x31, 0x46, 0x2e,
+	0xc5, 0xe4, 0xfc, 0x5c, 0x3d, 0xbc, 0x4e, 0x71, 0x12, 0x45, 0xb7, 0x30, 0x00, 0xe4, 0x81, 0x00,
+	0xc6, 0x28, 0x27, 0xa8, 0xbe, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd,
+	0xf4, 0xd4, 0x3c, 0xb0, 0xf7, 0x60, 0x41, 0x51, 0x90, 0x59, 0x8c, 0x23, 0x64, 0xac, 0xc1, 0xe4,
+	0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0xb2, 0xee, 0x10, 0xa3, 0x1c, 0x53, 0x8a, 0xf5,
+	0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0xe4, 0xe9, 0xe2, 0x53, 0x30, 0xf9, 0x18, 0xc7, 0x94,
+	0xe2, 0x18, 0xb8, 0x7c, 0x4c, 0x98, 0x41, 0x0c, 0x58, 0x3e, 0x89, 0x0d, 0x6c, 0xa9, 0x31, 0x20,
+	0x00, 0x00, 0xff, 0xff, 0x44, 0x5a, 0x2e, 0x34, 0x8d, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/local_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/local_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..478751fdbb49a9efaa41eef8360ea9f9a032d84b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/local_placeholder_field.pb.go
@@ -0,0 +1,213 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/local_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Local placeholder fields.
+type LocalPlaceholderFieldEnum_LocalPlaceholderField int32
+
+const (
+	// Not specified.
+	LocalPlaceholderFieldEnum_UNSPECIFIED LocalPlaceholderFieldEnum_LocalPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	LocalPlaceholderFieldEnum_UNKNOWN LocalPlaceholderFieldEnum_LocalPlaceholderField = 1
+	// Data Type: STRING. Required. Unique ID.
+	LocalPlaceholderFieldEnum_DEAL_ID LocalPlaceholderFieldEnum_LocalPlaceholderField = 2
+	// Data Type: STRING. Required. Main headline with local deal title to be
+	// shown in dynamic ad.
+	LocalPlaceholderFieldEnum_DEAL_NAME LocalPlaceholderFieldEnum_LocalPlaceholderField = 3
+	// Data Type: STRING. Local deal subtitle to be shown in dynamic ad.
+	LocalPlaceholderFieldEnum_SUBTITLE LocalPlaceholderFieldEnum_LocalPlaceholderField = 4
+	// Data Type: STRING. Description of local deal to be shown in dynamic ad.
+	LocalPlaceholderFieldEnum_DESCRIPTION LocalPlaceholderFieldEnum_LocalPlaceholderField = 5
+	// Data Type: STRING. Price to be shown in the ad. Highly recommended for
+	// dynamic ads. Example: "100.00 USD"
+	LocalPlaceholderFieldEnum_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 6
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	LocalPlaceholderFieldEnum_FORMATTED_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 7
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	LocalPlaceholderFieldEnum_SALE_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 8
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	LocalPlaceholderFieldEnum_FORMATTED_SALE_PRICE LocalPlaceholderFieldEnum_LocalPlaceholderField = 9
+	// Data Type: URL. Image to be displayed in the ad.
+	LocalPlaceholderFieldEnum_IMAGE_URL LocalPlaceholderFieldEnum_LocalPlaceholderField = 10
+	// Data Type: STRING. Complete property address, including postal code.
+	LocalPlaceholderFieldEnum_ADDRESS LocalPlaceholderFieldEnum_LocalPlaceholderField = 11
+	// Data Type: STRING. Category of local deal used to group like items
+	// together for recommendation engine.
+	LocalPlaceholderFieldEnum_CATEGORY LocalPlaceholderFieldEnum_LocalPlaceholderField = 12
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	LocalPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS LocalPlaceholderFieldEnum_LocalPlaceholderField = 13
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific local deal and its location).
+	LocalPlaceholderFieldEnum_FINAL_URLS LocalPlaceholderFieldEnum_LocalPlaceholderField = 14
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	LocalPlaceholderFieldEnum_FINAL_MOBILE_URLS LocalPlaceholderFieldEnum_LocalPlaceholderField = 15
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	LocalPlaceholderFieldEnum_TRACKING_URL LocalPlaceholderFieldEnum_LocalPlaceholderField = 16
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	LocalPlaceholderFieldEnum_ANDROID_APP_LINK LocalPlaceholderFieldEnum_LocalPlaceholderField = 17
+	// Data Type: STRING_LIST. List of recommended local deal IDs to show
+	// together with this item.
+	LocalPlaceholderFieldEnum_SIMILAR_DEAL_IDS LocalPlaceholderFieldEnum_LocalPlaceholderField = 18
+	// Data Type: STRING. iOS app link.
+	LocalPlaceholderFieldEnum_IOS_APP_LINK LocalPlaceholderFieldEnum_LocalPlaceholderField = 19
+	// Data Type: INT64. iOS app store ID.
+	LocalPlaceholderFieldEnum_IOS_APP_STORE_ID LocalPlaceholderFieldEnum_LocalPlaceholderField = 20
+)
+
+var LocalPlaceholderFieldEnum_LocalPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DEAL_ID",
+	3:  "DEAL_NAME",
+	4:  "SUBTITLE",
+	5:  "DESCRIPTION",
+	6:  "PRICE",
+	7:  "FORMATTED_PRICE",
+	8:  "SALE_PRICE",
+	9:  "FORMATTED_SALE_PRICE",
+	10: "IMAGE_URL",
+	11: "ADDRESS",
+	12: "CATEGORY",
+	13: "CONTEXTUAL_KEYWORDS",
+	14: "FINAL_URLS",
+	15: "FINAL_MOBILE_URLS",
+	16: "TRACKING_URL",
+	17: "ANDROID_APP_LINK",
+	18: "SIMILAR_DEAL_IDS",
+	19: "IOS_APP_LINK",
+	20: "IOS_APP_STORE_ID",
+}
+var LocalPlaceholderFieldEnum_LocalPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"DEAL_ID":              2,
+	"DEAL_NAME":            3,
+	"SUBTITLE":             4,
+	"DESCRIPTION":          5,
+	"PRICE":                6,
+	"FORMATTED_PRICE":      7,
+	"SALE_PRICE":           8,
+	"FORMATTED_SALE_PRICE": 9,
+	"IMAGE_URL":            10,
+	"ADDRESS":              11,
+	"CATEGORY":             12,
+	"CONTEXTUAL_KEYWORDS":  13,
+	"FINAL_URLS":           14,
+	"FINAL_MOBILE_URLS":    15,
+	"TRACKING_URL":         16,
+	"ANDROID_APP_LINK":     17,
+	"SIMILAR_DEAL_IDS":     18,
+	"IOS_APP_LINK":         19,
+	"IOS_APP_STORE_ID":     20,
+}
+
+func (x LocalPlaceholderFieldEnum_LocalPlaceholderField) String() string {
+	return proto.EnumName(LocalPlaceholderFieldEnum_LocalPlaceholderField_name, int32(x))
+}
+func (LocalPlaceholderFieldEnum_LocalPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_local_placeholder_field_023a7c86e9401707, []int{0, 0}
+}
+
+// Values for Local placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type LocalPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LocalPlaceholderFieldEnum) Reset()         { *m = LocalPlaceholderFieldEnum{} }
+func (m *LocalPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*LocalPlaceholderFieldEnum) ProtoMessage()    {}
+func (*LocalPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_local_placeholder_field_023a7c86e9401707, []int{0}
+}
+func (m *LocalPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocalPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *LocalPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocalPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *LocalPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocalPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *LocalPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_LocalPlaceholderFieldEnum.Size(m)
+}
+func (m *LocalPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocalPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocalPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*LocalPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.LocalPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.LocalPlaceholderFieldEnum_LocalPlaceholderField", LocalPlaceholderFieldEnum_LocalPlaceholderField_name, LocalPlaceholderFieldEnum_LocalPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/local_placeholder_field.proto", fileDescriptor_local_placeholder_field_023a7c86e9401707)
+}
+
+var fileDescriptor_local_placeholder_field_023a7c86e9401707 = []byte{
+	// 472 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4b, 0x6e, 0xdb, 0x30,
+	0x14, 0x6c, 0xec, 0xe6, 0x63, 0xda, 0x89, 0x19, 0xda, 0x41, 0x3f, 0x40, 0x16, 0xcd, 0x01, 0x24,
+	0x03, 0x5d, 0x66, 0x45, 0x89, 0xb4, 0x40, 0x98, 0x22, 0x05, 0x92, 0x4a, 0x9a, 0xc2, 0x80, 0xa0,
+	0x5a, 0xaa, 0x1a, 0x40, 0xb6, 0x0c, 0xab, 0xc9, 0x21, 0x7a, 0x8c, 0xae, 0x8a, 0x1e, 0xa5, 0xbd,
+	0x54, 0x41, 0xc9, 0x8e, 0xbb, 0x48, 0xbb, 0x21, 0xde, 0x7b, 0xf3, 0x66, 0x86, 0x20, 0x07, 0x5c,
+	0x17, 0x55, 0x55, 0x94, 0xb9, 0x9b, 0x66, 0xb5, 0xdb, 0x96, 0xb6, 0x7a, 0x9c, 0xb8, 0xf9, 0xea,
+	0x61, 0x59, 0xbb, 0x65, 0xb5, 0x48, 0xcb, 0x64, 0x5d, 0xa6, 0x8b, 0xfc, 0x4b, 0x55, 0x66, 0xf9,
+	0x26, 0xf9, 0x7c, 0x9f, 0x97, 0x99, 0xb3, 0xde, 0x54, 0x5f, 0x2b, 0x74, 0xd9, 0x32, 0x9c, 0x34,
+	0xab, 0x9d, 0x27, 0xb2, 0xf3, 0x38, 0x71, 0x1a, 0xf2, 0xd5, 0x8f, 0x2e, 0x78, 0xc3, 0xad, 0x40,
+	0xb4, 0xe7, 0x4f, 0x2d, 0x9d, 0xae, 0x1e, 0x96, 0x57, 0xdf, 0xba, 0xe0, 0xe2, 0x59, 0x14, 0x0d,
+	0x41, 0x3f, 0x16, 0x3a, 0xa2, 0x3e, 0x9b, 0x32, 0x4a, 0xe0, 0x0b, 0xd4, 0x07, 0xc7, 0xb1, 0x98,
+	0x09, 0x79, 0x2b, 0xe0, 0x81, 0x6d, 0x08, 0xc5, 0x3c, 0x61, 0x04, 0x76, 0xd0, 0x29, 0xe8, 0x35,
+	0x8d, 0xc0, 0x21, 0x85, 0x5d, 0x34, 0x00, 0x27, 0x3a, 0xf6, 0x0c, 0x33, 0x9c, 0xc2, 0x97, 0x56,
+	0x87, 0x50, 0xed, 0x2b, 0x16, 0x19, 0x26, 0x05, 0x3c, 0x44, 0x3d, 0x70, 0x18, 0x29, 0xe6, 0x53,
+	0x78, 0x84, 0x46, 0x60, 0x38, 0x95, 0x2a, 0xc4, 0xc6, 0x50, 0x92, 0xb4, 0xc3, 0x63, 0x74, 0x06,
+	0x80, 0xc6, 0x9c, 0x6e, 0xfb, 0x13, 0xf4, 0x1a, 0x8c, 0xf7, 0x4b, 0x7f, 0x21, 0x3d, 0xeb, 0xcb,
+	0x42, 0x1c, 0xd0, 0x24, 0x56, 0x1c, 0x02, 0x7b, 0x27, 0x4c, 0x88, 0xa2, 0x5a, 0xc3, 0xbe, 0xbd,
+	0x84, 0x8f, 0x0d, 0x0d, 0xa4, 0xba, 0x83, 0x03, 0xf4, 0x0a, 0x8c, 0x7c, 0x29, 0x0c, 0xfd, 0x60,
+	0x62, 0xcc, 0x93, 0x19, 0xbd, 0xbb, 0x95, 0x8a, 0x68, 0x78, 0x6a, 0xcd, 0xa6, 0x4c, 0x60, 0x6e,
+	0x25, 0x34, 0x3c, 0x43, 0x17, 0xe0, 0xbc, 0xed, 0x43, 0xe9, 0x31, 0x4e, 0xdb, 0xf1, 0x10, 0x41,
+	0x30, 0x30, 0x0a, 0xfb, 0x33, 0x26, 0x82, 0xc6, 0x0c, 0xa2, 0x31, 0x80, 0x58, 0x10, 0x25, 0x19,
+	0x49, 0x70, 0x14, 0x25, 0x9c, 0x89, 0x19, 0x3c, 0xb7, 0x53, 0xcd, 0x42, 0xc6, 0xb1, 0x4a, 0xb6,
+	0xcf, 0xa3, 0x21, 0xb2, 0x6c, 0x26, 0xf5, 0x7e, 0x6f, 0x64, 0xf7, 0x76, 0x13, 0x6d, 0xa4, 0xa2,
+	0xf6, 0x1d, 0xc7, 0xde, 0xef, 0x03, 0xf0, 0x6e, 0x51, 0x2d, 0x9d, 0xff, 0x7e, 0xa8, 0xf7, 0xf6,
+	0xd9, 0xff, 0x8a, 0x6c, 0x16, 0xa2, 0x83, 0x8f, 0xde, 0x96, 0x5c, 0x54, 0x65, 0xba, 0x2a, 0x9c,
+	0x6a, 0x53, 0xb8, 0x45, 0xbe, 0x6a, 0x92, 0xb2, 0x8b, 0xd6, 0xfa, 0xbe, 0xfe, 0x47, 0xd2, 0xae,
+	0x9b, 0xf3, 0x7b, 0xa7, 0x1b, 0x60, 0xfc, 0xb3, 0x73, 0x19, 0xb4, 0x52, 0x38, 0xab, 0x9d, 0xb6,
+	0xb4, 0xd5, 0xcd, 0xc4, 0xb1, 0xc9, 0xa9, 0x7f, 0xed, 0xf0, 0x39, 0xce, 0xea, 0xf9, 0x13, 0x3e,
+	0xbf, 0x99, 0xcc, 0x1b, 0xfc, 0xd3, 0x51, 0x63, 0xfa, 0xfe, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x06, 0xf2, 0xd4, 0x06, 0xdd, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/manager_link_status.pb.go b/googleapis/ads/googleads/v0/enums/manager_link_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9acda89c155eb8a024709946039bcd2422f39a71
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/manager_link_status.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/manager_link_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible statuses of a link.
+type ManagerLinkStatusEnum_ManagerLinkStatus int32
+
+const (
+	// Not specified.
+	ManagerLinkStatusEnum_UNSPECIFIED ManagerLinkStatusEnum_ManagerLinkStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	ManagerLinkStatusEnum_UNKNOWN ManagerLinkStatusEnum_ManagerLinkStatus = 1
+	// Indicates current in-effect relationship
+	ManagerLinkStatusEnum_ACTIVE ManagerLinkStatusEnum_ManagerLinkStatus = 2
+	// Indicates terminated relationship
+	ManagerLinkStatusEnum_INACTIVE ManagerLinkStatusEnum_ManagerLinkStatus = 3
+	// Indicates relationship has been requested by manager, but the client
+	// hasn't accepted yet.
+	ManagerLinkStatusEnum_PENDING ManagerLinkStatusEnum_ManagerLinkStatus = 4
+	// Relationship was requested by the manager, but the client has refused.
+	ManagerLinkStatusEnum_REFUSED ManagerLinkStatusEnum_ManagerLinkStatus = 5
+	// Indicates relationship has been requested by manager, but manager
+	// canceled it.
+	ManagerLinkStatusEnum_CANCELED ManagerLinkStatusEnum_ManagerLinkStatus = 6
+)
+
+var ManagerLinkStatusEnum_ManagerLinkStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ACTIVE",
+	3: "INACTIVE",
+	4: "PENDING",
+	5: "REFUSED",
+	6: "CANCELED",
+}
+var ManagerLinkStatusEnum_ManagerLinkStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ACTIVE":      2,
+	"INACTIVE":    3,
+	"PENDING":     4,
+	"REFUSED":     5,
+	"CANCELED":    6,
+}
+
+func (x ManagerLinkStatusEnum_ManagerLinkStatus) String() string {
+	return proto.EnumName(ManagerLinkStatusEnum_ManagerLinkStatus_name, int32(x))
+}
+func (ManagerLinkStatusEnum_ManagerLinkStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_manager_link_status_1264462a2bb5df34, []int{0, 0}
+}
+
+// Container for enum describing possible status of a manager and client link.
+type ManagerLinkStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManagerLinkStatusEnum) Reset()         { *m = ManagerLinkStatusEnum{} }
+func (m *ManagerLinkStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*ManagerLinkStatusEnum) ProtoMessage()    {}
+func (*ManagerLinkStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_manager_link_status_1264462a2bb5df34, []int{0}
+}
+func (m *ManagerLinkStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManagerLinkStatusEnum.Unmarshal(m, b)
+}
+func (m *ManagerLinkStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManagerLinkStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *ManagerLinkStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManagerLinkStatusEnum.Merge(dst, src)
+}
+func (m *ManagerLinkStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_ManagerLinkStatusEnum.Size(m)
+}
+func (m *ManagerLinkStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManagerLinkStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManagerLinkStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ManagerLinkStatusEnum)(nil), "google.ads.googleads.v0.enums.ManagerLinkStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ManagerLinkStatusEnum_ManagerLinkStatus", ManagerLinkStatusEnum_ManagerLinkStatus_name, ManagerLinkStatusEnum_ManagerLinkStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/manager_link_status.proto", fileDescriptor_manager_link_status_1264462a2bb5df34)
+}
+
+var fileDescriptor_manager_link_status_1264462a2bb5df34 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xdc, 0xc4, 0xbc, 0xc4, 0xf4, 0xd4, 0xa2, 0xf8, 0x9c, 0xcc, 0xbc, 0xec,
+	0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88,
+	0x6a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x46, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x46, 0xa5, 0x1e,
+	0x46, 0x2e, 0x51, 0x5f, 0x88, 0x66, 0x9f, 0xcc, 0xbc, 0xec, 0x60, 0xb0, 0x56, 0xd7, 0xbc, 0xd2,
+	0x5c, 0xa5, 0x62, 0x2e, 0x41, 0x0c, 0x09, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57,
+	0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f,
+	0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x2e, 0x2e, 0x36, 0x47, 0xe7, 0x10, 0xcf, 0x30, 0x57, 0x01,
+	0x26, 0x21, 0x1e, 0x2e, 0x0e, 0x4f, 0x3f, 0x28, 0x8f, 0x19, 0xa4, 0x2c, 0xc0, 0xd5, 0xcf, 0xc5,
+	0xd3, 0xcf, 0x5d, 0x80, 0x05, 0xc4, 0x09, 0x72, 0x75, 0x0b, 0x0d, 0x76, 0x75, 0x11, 0x60, 0x05,
+	0xa9, 0x73, 0x76, 0xf4, 0x73, 0x76, 0xf5, 0x71, 0x75, 0x11, 0x60, 0x73, 0x3a, 0xce, 0xc8, 0xa5,
+	0x98, 0x9c, 0x9f, 0xab, 0x87, 0xd7, 0xd1, 0x4e, 0x62, 0x18, 0x0e, 0x0b, 0x00, 0xf9, 0x35, 0x80,
+	0x31, 0xca, 0x09, 0xaa, 0x31, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f,
+	0x3d, 0x35, 0x0f, 0x1c, 0x12, 0xb0, 0x60, 0x2b, 0xc8, 0x2c, 0xc6, 0x11, 0x8a, 0xd6, 0x60, 0x72,
+	0x11, 0x13, 0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x59, 0x77, 0x88, 0x51, 0x8e, 0x29, 0xc5, 0x7a,
+	0x10, 0x26, 0x88, 0x15, 0x66, 0xa0, 0x07, 0x0a, 0x9d, 0xe2, 0x53, 0x30, 0xf9, 0x18, 0xc7, 0x94,
+	0xe2, 0x18, 0xb8, 0x7c, 0x4c, 0x98, 0x41, 0x0c, 0x58, 0x3e, 0x89, 0x0d, 0x6c, 0xa9, 0x31, 0x20,
+	0x00, 0x00, 0xff, 0xff, 0xa3, 0xd0, 0xba, 0x7b, 0xb9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/media_type.pb.go b/googleapis/ads/googleads/v0/enums/media_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e1a486b6bdfa68011faae62dbcdb342b95111b10
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/media_type.pb.go
@@ -0,0 +1,134 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/media_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of media.
+type MediaTypeEnum_MediaType int32
+
+const (
+	// The media type has not been specified.
+	MediaTypeEnum_UNSPECIFIED MediaTypeEnum_MediaType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	MediaTypeEnum_UNKNOWN MediaTypeEnum_MediaType = 1
+	// Static image, used for image ad.
+	MediaTypeEnum_IMAGE MediaTypeEnum_MediaType = 2
+	// Small image, used for map ad.
+	MediaTypeEnum_ICON MediaTypeEnum_MediaType = 3
+	// ZIP file, used in fields of template ads.
+	MediaTypeEnum_MEDIA_BUNDLE MediaTypeEnum_MediaType = 4
+	// Audio file.
+	MediaTypeEnum_AUDIO MediaTypeEnum_MediaType = 5
+	// Video file.
+	MediaTypeEnum_VIDEO MediaTypeEnum_MediaType = 6
+	// Animated image, such as animated GIF.
+	MediaTypeEnum_DYNAMIC_IMAGE MediaTypeEnum_MediaType = 7
+)
+
+var MediaTypeEnum_MediaType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "IMAGE",
+	3: "ICON",
+	4: "MEDIA_BUNDLE",
+	5: "AUDIO",
+	6: "VIDEO",
+	7: "DYNAMIC_IMAGE",
+}
+var MediaTypeEnum_MediaType_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"IMAGE":         2,
+	"ICON":          3,
+	"MEDIA_BUNDLE":  4,
+	"AUDIO":         5,
+	"VIDEO":         6,
+	"DYNAMIC_IMAGE": 7,
+}
+
+func (x MediaTypeEnum_MediaType) String() string {
+	return proto.EnumName(MediaTypeEnum_MediaType_name, int32(x))
+}
+func (MediaTypeEnum_MediaType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_media_type_f416f7e8a8d21052, []int{0, 0}
+}
+
+// Container for enum describing the types of media.
+type MediaTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MediaTypeEnum) Reset()         { *m = MediaTypeEnum{} }
+func (m *MediaTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*MediaTypeEnum) ProtoMessage()    {}
+func (*MediaTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_type_f416f7e8a8d21052, []int{0}
+}
+func (m *MediaTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaTypeEnum.Unmarshal(m, b)
+}
+func (m *MediaTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *MediaTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaTypeEnum.Merge(dst, src)
+}
+func (m *MediaTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_MediaTypeEnum.Size(m)
+}
+func (m *MediaTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MediaTypeEnum)(nil), "google.ads.googleads.v0.enums.MediaTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.MediaTypeEnum_MediaType", MediaTypeEnum_MediaType_name, MediaTypeEnum_MediaType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/media_type.proto", fileDescriptor_media_type_f416f7e8a8d21052)
+}
+
+var fileDescriptor_media_type_f416f7e8a8d21052 = []byte{
+	// 299 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc7, 0xed, 0xfe, 0xba, 0xcc, 0x69, 0xcc, 0x7d, 0x07, 0xf7, 0x00, 0x69, 0xc1, 0xa3, 0xa7,
+	0x74, 0x89, 0x23, 0x68, 0xd3, 0x81, 0x76, 0xa2, 0x14, 0x4a, 0xb5, 0x21, 0x0c, 0xd6, 0xa6, 0x2c,
+	0xdb, 0xa0, 0xaf, 0xe0, 0x63, 0x78, 0xf4, 0x25, 0xbc, 0xfb, 0x54, 0x92, 0xd6, 0xf5, 0xa6, 0x97,
+	0xf0, 0x21, 0xdf, 0xef, 0xef, 0xdf, 0x17, 0x60, 0xa5, 0xb5, 0xda, 0x48, 0x37, 0xcd, 0x8c, 0xdb,
+	0xa0, 0xa5, 0x83, 0xe7, 0xca, 0x62, 0x9f, 0x1b, 0x37, 0x97, 0xd9, 0x3a, 0x4d, 0x76, 0x55, 0x29,
+	0x71, 0xb9, 0xd5, 0x3b, 0x8d, 0xa6, 0x8d, 0x09, 0xa7, 0x99, 0xc1, 0xad, 0x1f, 0x1f, 0x3c, 0x5c,
+	0xfb, 0x67, 0xef, 0x0e, 0x98, 0x04, 0xb6, 0xe6, 0xb1, 0x2a, 0x25, 0x2b, 0xf6, 0xf9, 0xac, 0x02,
+	0xa3, 0xf6, 0x03, 0x5d, 0x80, 0x71, 0x24, 0x1e, 0x96, 0x6c, 0xce, 0x6f, 0x39, 0xa3, 0xf0, 0x04,
+	0x8d, 0xc1, 0x30, 0x12, 0x77, 0x22, 0x7c, 0x12, 0xd0, 0x41, 0x23, 0xd0, 0xe7, 0x01, 0x59, 0x30,
+	0xd8, 0x41, 0xa7, 0xa0, 0xc7, 0xe7, 0xa1, 0x80, 0x5d, 0x04, 0xc1, 0x59, 0xc0, 0x28, 0x27, 0x89,
+	0x1f, 0x09, 0x7a, 0xcf, 0x60, 0xcf, 0xda, 0x48, 0x44, 0x79, 0x08, 0xfb, 0x16, 0x57, 0x9c, 0xb2,
+	0x10, 0x0e, 0xd0, 0x25, 0x98, 0xd0, 0x67, 0x41, 0x02, 0x3e, 0x4f, 0x9a, 0x26, 0x43, 0xff, 0xcb,
+	0x01, 0x57, 0x6f, 0x3a, 0xc7, 0xff, 0xae, 0xec, 0x9f, 0xb7, 0xeb, 0x2d, 0xed, 0x85, 0x4b, 0xe7,
+	0xc5, 0xff, 0x2d, 0x50, 0x7a, 0x93, 0x16, 0x0a, 0xeb, 0xad, 0x72, 0x95, 0x2c, 0xea, 0xfb, 0x8f,
+	0x19, 0x95, 0x6b, 0xf3, 0x47, 0x64, 0x37, 0xf5, 0xfb, 0xd1, 0xe9, 0x2e, 0x08, 0xf9, 0xec, 0x4c,
+	0x17, 0x4d, 0x2b, 0x92, 0x19, 0xdc, 0xa0, 0xa5, 0x95, 0x87, 0x6d, 0x36, 0xe6, 0xfb, 0xa8, 0xc7,
+	0x24, 0x33, 0x71, 0xab, 0xc7, 0x2b, 0x2f, 0xae, 0xf5, 0xd7, 0x41, 0x3d, 0xf4, 0xfa, 0x27, 0x00,
+	0x00, 0xff, 0xff, 0x7b, 0x20, 0xa1, 0xf0, 0xa6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/message_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/message_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e136e8df78fea06a1699129ca1b8ba97ddce2293
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/message_placeholder_field.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/message_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Message placeholder fields.
+type MessagePlaceholderFieldEnum_MessagePlaceholderField int32
+
+const (
+	// Not specified.
+	MessagePlaceholderFieldEnum_UNSPECIFIED MessagePlaceholderFieldEnum_MessagePlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	MessagePlaceholderFieldEnum_UNKNOWN MessagePlaceholderFieldEnum_MessagePlaceholderField = 1
+	// Data Type: STRING. The name of your business.
+	MessagePlaceholderFieldEnum_BUSINESS_NAME MessagePlaceholderFieldEnum_MessagePlaceholderField = 2
+	// Data Type: STRING. Country code of phone number.
+	MessagePlaceholderFieldEnum_COUNTRY_CODE MessagePlaceholderFieldEnum_MessagePlaceholderField = 3
+	// Data Type: STRING. A phone number that's capable of sending and receiving
+	// text messages.
+	MessagePlaceholderFieldEnum_PHONE_NUMBER MessagePlaceholderFieldEnum_MessagePlaceholderField = 4
+	// Data Type: STRING. The text that will go in your click-to-message ad.
+	MessagePlaceholderFieldEnum_MESSAGE_EXTENSION_TEXT MessagePlaceholderFieldEnum_MessagePlaceholderField = 5
+	// Data Type: STRING. The message text automatically shows in people's
+	// messaging apps when they tap to send you a message.
+	MessagePlaceholderFieldEnum_MESSAGE_TEXT MessagePlaceholderFieldEnum_MessagePlaceholderField = 6
+)
+
+var MessagePlaceholderFieldEnum_MessagePlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BUSINESS_NAME",
+	3: "COUNTRY_CODE",
+	4: "PHONE_NUMBER",
+	5: "MESSAGE_EXTENSION_TEXT",
+	6: "MESSAGE_TEXT",
+}
+var MessagePlaceholderFieldEnum_MessagePlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"BUSINESS_NAME":          2,
+	"COUNTRY_CODE":           3,
+	"PHONE_NUMBER":           4,
+	"MESSAGE_EXTENSION_TEXT": 5,
+	"MESSAGE_TEXT":           6,
+}
+
+func (x MessagePlaceholderFieldEnum_MessagePlaceholderField) String() string {
+	return proto.EnumName(MessagePlaceholderFieldEnum_MessagePlaceholderField_name, int32(x))
+}
+func (MessagePlaceholderFieldEnum_MessagePlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_message_placeholder_field_4313c91f38e4b5b2, []int{0, 0}
+}
+
+// Values for Message placeholder fields.
+type MessagePlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MessagePlaceholderFieldEnum) Reset()         { *m = MessagePlaceholderFieldEnum{} }
+func (m *MessagePlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*MessagePlaceholderFieldEnum) ProtoMessage()    {}
+func (*MessagePlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_message_placeholder_field_4313c91f38e4b5b2, []int{0}
+}
+func (m *MessagePlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MessagePlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *MessagePlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MessagePlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *MessagePlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MessagePlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *MessagePlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_MessagePlaceholderFieldEnum.Size(m)
+}
+func (m *MessagePlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MessagePlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MessagePlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MessagePlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.MessagePlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.MessagePlaceholderFieldEnum_MessagePlaceholderField", MessagePlaceholderFieldEnum_MessagePlaceholderField_name, MessagePlaceholderFieldEnum_MessagePlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/message_placeholder_field.proto", fileDescriptor_message_placeholder_field_4313c91f38e4b5b2)
+}
+
+var fileDescriptor_message_placeholder_field_4313c91f38e4b5b2 = []byte{
+	// 333 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xed, 0xa6, 0x13, 0x32, 0xc5, 0xd8, 0x83, 0x82, 0xba, 0x83, 0x7b, 0x80, 0xb4, 0xe0,
+	0x51, 0x3c, 0xb4, 0x5b, 0x36, 0x8b, 0x34, 0x2d, 0x4b, 0x3b, 0xa7, 0x14, 0x42, 0x5d, 0x63, 0x1c,
+	0xb4, 0xcd, 0x58, 0xdc, 0x9e, 0xc6, 0x93, 0x47, 0x9f, 0xc1, 0x27, 0x10, 0x7c, 0x27, 0x49, 0xeb,
+	0xe6, 0x69, 0x5e, 0xc2, 0xc7, 0xff, 0x97, 0xef, 0x0b, 0xff, 0x2f, 0xe0, 0x46, 0x48, 0x29, 0x72,
+	0x6e, 0xa5, 0x99, 0xb2, 0x6a, 0xa9, 0xd5, 0xca, 0xb6, 0x78, 0xb9, 0x2c, 0x94, 0x55, 0x70, 0xa5,
+	0x52, 0xc1, 0xd9, 0x3c, 0x4f, 0xa7, 0xfc, 0x45, 0xe6, 0x19, 0x5f, 0xb0, 0xe7, 0x19, 0xcf, 0x33,
+	0x34, 0x5f, 0xc8, 0x57, 0x69, 0x76, 0x6a, 0x0f, 0x4a, 0x33, 0x85, 0x36, 0x76, 0xb4, 0xb2, 0x51,
+	0x65, 0xef, 0x7e, 0x1a, 0xe0, 0xdc, 0xaf, 0x23, 0xc2, 0xbf, 0x84, 0x81, 0x0e, 0xc0, 0xe5, 0xb2,
+	0xe8, 0xbe, 0x19, 0xe0, 0x74, 0x0b, 0x37, 0x8f, 0x40, 0x3b, 0x26, 0x34, 0xc4, 0x3d, 0x6f, 0xe0,
+	0xe1, 0x3e, 0xdc, 0x31, 0xdb, 0x60, 0x3f, 0x26, 0x77, 0x24, 0xb8, 0x27, 0xd0, 0x30, 0x8f, 0xc1,
+	0xa1, 0x1b, 0x53, 0x8f, 0x60, 0x4a, 0x19, 0x71, 0x7c, 0x0c, 0x1b, 0x26, 0x04, 0x07, 0xbd, 0x20,
+	0x26, 0xd1, 0xe8, 0x81, 0xf5, 0x82, 0x3e, 0x86, 0x4d, 0x3d, 0x09, 0x6f, 0x03, 0x82, 0x19, 0x89,
+	0x7d, 0x17, 0x8f, 0xe0, 0xae, 0x79, 0x06, 0x4e, 0x7c, 0x4c, 0xa9, 0x33, 0xc4, 0x0c, 0x4f, 0x22,
+	0x4c, 0xa8, 0x17, 0x10, 0x16, 0xe1, 0x49, 0x04, 0xf7, 0xf4, 0xed, 0x35, 0xab, 0x26, 0x2d, 0xf7,
+	0xdb, 0x00, 0x97, 0x53, 0x59, 0xa0, 0x7f, 0x97, 0x74, 0x2f, 0xb6, 0x6c, 0x10, 0xea, 0x86, 0x42,
+	0xe3, 0xd1, 0xfd, 0xb5, 0x0b, 0x99, 0xa7, 0xa5, 0x40, 0x72, 0x21, 0x2c, 0xc1, 0xcb, 0xaa, 0xbf,
+	0x75, 0xe5, 0xf3, 0x99, 0xda, 0xf2, 0x03, 0xd7, 0xd5, 0xf9, 0xde, 0x68, 0x0e, 0x1d, 0xe7, 0xa3,
+	0xd1, 0x19, 0xd6, 0x51, 0x4e, 0xa6, 0x50, 0x2d, 0xb5, 0x1a, 0xdb, 0x48, 0xb7, 0xa9, 0xbe, 0xd6,
+	0x3c, 0x71, 0x32, 0x95, 0x6c, 0x78, 0x32, 0xb6, 0x93, 0x8a, 0x3f, 0xb5, 0xaa, 0x47, 0xaf, 0x7e,
+	0x02, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x09, 0x2c, 0x49, 0xf5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/mime_type.pb.go b/googleapis/ads/googleads/v0/enums/mime_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e63e18bb03ef947e1c7e1cb4a11540e2d6c7909b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/mime_type.pb.go
@@ -0,0 +1,162 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/mime_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The mime type
+type MimeTypeEnum_MimeType int32
+
+const (
+	// The mime type has not been specified.
+	MimeTypeEnum_UNSPECIFIED MimeTypeEnum_MimeType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	MimeTypeEnum_UNKNOWN MimeTypeEnum_MimeType = 1
+	// MIME type of image/jpeg.
+	MimeTypeEnum_IMAGE_JPEG MimeTypeEnum_MimeType = 2
+	// MIME type of image/gif.
+	MimeTypeEnum_IMAGE_GIF MimeTypeEnum_MimeType = 3
+	// MIME type of image/png.
+	MimeTypeEnum_IMAGE_PNG MimeTypeEnum_MimeType = 4
+	// MIME type of application/x-shockwave-flash.
+	MimeTypeEnum_FLASH MimeTypeEnum_MimeType = 5
+	// MIME type of text/html.
+	MimeTypeEnum_TEXT_HTML MimeTypeEnum_MimeType = 6
+	// MIME type of application/pdf.
+	MimeTypeEnum_PDF MimeTypeEnum_MimeType = 7
+	// MIME type of application/msword.
+	MimeTypeEnum_MSWORD MimeTypeEnum_MimeType = 8
+	// MIME type of application/vnd.ms-excel.
+	MimeTypeEnum_MSEXCEL MimeTypeEnum_MimeType = 9
+	// MIME type of application/rtf.
+	MimeTypeEnum_RTF MimeTypeEnum_MimeType = 10
+	// MIME type of audio/wav.
+	MimeTypeEnum_AUDIO_WAV MimeTypeEnum_MimeType = 11
+	// MIME type of audio/mp3.
+	MimeTypeEnum_AUDIO_MP3 MimeTypeEnum_MimeType = 12
+	// MIME type of application/x-html5-ad-zip.
+	MimeTypeEnum_HTML5_AD_ZIP MimeTypeEnum_MimeType = 13
+)
+
+var MimeTypeEnum_MimeType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "IMAGE_JPEG",
+	3:  "IMAGE_GIF",
+	4:  "IMAGE_PNG",
+	5:  "FLASH",
+	6:  "TEXT_HTML",
+	7:  "PDF",
+	8:  "MSWORD",
+	9:  "MSEXCEL",
+	10: "RTF",
+	11: "AUDIO_WAV",
+	12: "AUDIO_MP3",
+	13: "HTML5_AD_ZIP",
+}
+var MimeTypeEnum_MimeType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"IMAGE_JPEG":   2,
+	"IMAGE_GIF":    3,
+	"IMAGE_PNG":    4,
+	"FLASH":        5,
+	"TEXT_HTML":    6,
+	"PDF":          7,
+	"MSWORD":       8,
+	"MSEXCEL":      9,
+	"RTF":          10,
+	"AUDIO_WAV":    11,
+	"AUDIO_MP3":    12,
+	"HTML5_AD_ZIP": 13,
+}
+
+func (x MimeTypeEnum_MimeType) String() string {
+	return proto.EnumName(MimeTypeEnum_MimeType_name, int32(x))
+}
+func (MimeTypeEnum_MimeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_mime_type_488ab8ea3bec433a, []int{0, 0}
+}
+
+// Container for enum describing the mime types.
+type MimeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MimeTypeEnum) Reset()         { *m = MimeTypeEnum{} }
+func (m *MimeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*MimeTypeEnum) ProtoMessage()    {}
+func (*MimeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_mime_type_488ab8ea3bec433a, []int{0}
+}
+func (m *MimeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MimeTypeEnum.Unmarshal(m, b)
+}
+func (m *MimeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MimeTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *MimeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MimeTypeEnum.Merge(dst, src)
+}
+func (m *MimeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_MimeTypeEnum.Size(m)
+}
+func (m *MimeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MimeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MimeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MimeTypeEnum)(nil), "google.ads.googleads.v0.enums.MimeTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.MimeTypeEnum_MimeType", MimeTypeEnum_MimeType_name, MimeTypeEnum_MimeType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/mime_type.proto", fileDescriptor_mime_type_488ab8ea3bec433a)
+}
+
+var fileDescriptor_mime_type_488ab8ea3bec433a = []byte{
+	// 356 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xcd, 0x6e, 0xaa, 0x40,
+	0x1c, 0xc5, 0x2f, 0x7a, 0xfd, 0x1a, 0xf5, 0xde, 0x7f, 0x66, 0xef, 0xa2, 0xee, 0x3b, 0x90, 0x98,
+	0xae, 0xba, 0x1a, 0x65, 0x40, 0x5a, 0xc1, 0x89, 0xe0, 0x47, 0x0c, 0x09, 0xb1, 0x85, 0x10, 0x13,
+	0xf9, 0x88, 0xa8, 0x89, 0xaf, 0xd3, 0x65, 0x1f, 0xa2, 0x0f, 0xd0, 0xbe, 0x42, 0x1f, 0xa6, 0x19,
+	0x28, 0xba, 0x6a, 0x37, 0xe4, 0x1c, 0xce, 0x99, 0xff, 0x3f, 0xf3, 0x1b, 0x74, 0x1b, 0x26, 0x49,
+	0xb8, 0x0b, 0xe4, 0x8d, 0x9f, 0xc9, 0x85, 0x14, 0xea, 0xa4, 0xc8, 0x41, 0x7c, 0x8c, 0x32, 0x39,
+	0xda, 0x46, 0x81, 0x77, 0x38, 0xa7, 0x01, 0x49, 0xf7, 0xc9, 0x21, 0xc1, 0xbd, 0xa2, 0x43, 0x36,
+	0x7e, 0x46, 0x2e, 0x75, 0x72, 0x52, 0x48, 0x5e, 0xef, 0x7f, 0x4a, 0xa8, 0x63, 0x6e, 0xa3, 0xc0,
+	0x39, 0xa7, 0x01, 0x8b, 0x8f, 0x51, 0xff, 0x43, 0x42, 0xcd, 0xf2, 0x07, 0xfe, 0x8f, 0xda, 0x73,
+	0xcb, 0xe6, 0x6c, 0x64, 0x68, 0x06, 0x53, 0xe1, 0x0f, 0x6e, 0xa3, 0xc6, 0xdc, 0x7a, 0xb4, 0xa6,
+	0x4b, 0x0b, 0x24, 0xfc, 0x0f, 0x21, 0xc3, 0xa4, 0x3a, 0xf3, 0x1e, 0x38, 0xd3, 0xa1, 0x82, 0xbb,
+	0xa8, 0x55, 0x78, 0xdd, 0xd0, 0xa0, 0x7a, 0xb5, 0xdc, 0xd2, 0xe1, 0x2f, 0x6e, 0xa1, 0x9a, 0x36,
+	0xa1, 0xf6, 0x18, 0x6a, 0x22, 0x71, 0xd8, 0xca, 0xf1, 0xc6, 0x8e, 0x39, 0x81, 0x3a, 0x6e, 0xa0,
+	0x2a, 0x57, 0x35, 0x68, 0x60, 0x84, 0xea, 0xa6, 0xbd, 0x9c, 0xce, 0x54, 0x68, 0x8a, 0x4d, 0xa6,
+	0xcd, 0x56, 0x23, 0x36, 0x81, 0x96, 0x68, 0xcc, 0x1c, 0x0d, 0x90, 0x38, 0x49, 0xe7, 0xaa, 0x31,
+	0xf5, 0x96, 0x74, 0x01, 0xed, 0xab, 0x35, 0xf9, 0x00, 0x3a, 0x18, 0x50, 0x47, 0x8c, 0xbc, 0xf3,
+	0xa8, 0xea, 0xad, 0x0d, 0x0e, 0xdd, 0xe1, 0x9b, 0x84, 0x6e, 0x9e, 0x93, 0x88, 0xfc, 0x0a, 0x61,
+	0xd8, 0x2d, 0x2f, 0xcc, 0x05, 0x32, 0x2e, 0xad, 0x87, 0xdf, 0xfd, 0x30, 0xd9, 0x6d, 0xe2, 0x90,
+	0x24, 0xfb, 0x50, 0x0e, 0x83, 0x38, 0x07, 0x5a, 0x32, 0x4f, 0xb7, 0xd9, 0x0f, 0x4f, 0x70, 0x9f,
+	0x7f, 0x5f, 0x2a, 0x55, 0x9d, 0xd2, 0xd7, 0x4a, 0x4f, 0x2f, 0x46, 0x51, 0x3f, 0x23, 0x85, 0x14,
+	0x6a, 0xa1, 0x10, 0x41, 0x3b, 0x7b, 0x2f, 0x73, 0x97, 0xfa, 0x99, 0x7b, 0xc9, 0xdd, 0x85, 0xe2,
+	0xe6, 0xf9, 0x53, 0x3d, 0x5f, 0x3a, 0xf8, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x64, 0xde, 0xc3,
+	0xf6, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/minute_of_hour.pb.go b/googleapis/ads/googleads/v0/enums/minute_of_hour.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d46d2fd03853b748d7fabc0dfe1694743e1e6c0c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/minute_of_hour.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/minute_of_hour.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates of quarter-hours. E.g. "FIFTEEN"
+type MinuteOfHourEnum_MinuteOfHour int32
+
+const (
+	// Not specified.
+	MinuteOfHourEnum_UNSPECIFIED MinuteOfHourEnum_MinuteOfHour = 0
+	// The value is unknown in this version.
+	MinuteOfHourEnum_UNKNOWN MinuteOfHourEnum_MinuteOfHour = 1
+	// Zero minutes past the hour.
+	MinuteOfHourEnum_ZERO MinuteOfHourEnum_MinuteOfHour = 2
+	// Fifteen minutes past the hour.
+	MinuteOfHourEnum_FIFTEEN MinuteOfHourEnum_MinuteOfHour = 3
+	// Thirty minutes past the hour.
+	MinuteOfHourEnum_THIRTY MinuteOfHourEnum_MinuteOfHour = 4
+	// Forty-five minutes past the hour.
+	MinuteOfHourEnum_FORTY_FIVE MinuteOfHourEnum_MinuteOfHour = 5
+)
+
+var MinuteOfHourEnum_MinuteOfHour_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ZERO",
+	3: "FIFTEEN",
+	4: "THIRTY",
+	5: "FORTY_FIVE",
+}
+var MinuteOfHourEnum_MinuteOfHour_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ZERO":        2,
+	"FIFTEEN":     3,
+	"THIRTY":      4,
+	"FORTY_FIVE":  5,
+}
+
+func (x MinuteOfHourEnum_MinuteOfHour) String() string {
+	return proto.EnumName(MinuteOfHourEnum_MinuteOfHour_name, int32(x))
+}
+func (MinuteOfHourEnum_MinuteOfHour) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_minute_of_hour_498f12470e9a0321, []int{0, 0}
+}
+
+// Container for enumeration of quarter-hours.
+type MinuteOfHourEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MinuteOfHourEnum) Reset()         { *m = MinuteOfHourEnum{} }
+func (m *MinuteOfHourEnum) String() string { return proto.CompactTextString(m) }
+func (*MinuteOfHourEnum) ProtoMessage()    {}
+func (*MinuteOfHourEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_minute_of_hour_498f12470e9a0321, []int{0}
+}
+func (m *MinuteOfHourEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MinuteOfHourEnum.Unmarshal(m, b)
+}
+func (m *MinuteOfHourEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MinuteOfHourEnum.Marshal(b, m, deterministic)
+}
+func (dst *MinuteOfHourEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MinuteOfHourEnum.Merge(dst, src)
+}
+func (m *MinuteOfHourEnum) XXX_Size() int {
+	return xxx_messageInfo_MinuteOfHourEnum.Size(m)
+}
+func (m *MinuteOfHourEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MinuteOfHourEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MinuteOfHourEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MinuteOfHourEnum)(nil), "google.ads.googleads.v0.enums.MinuteOfHourEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.MinuteOfHourEnum_MinuteOfHour", MinuteOfHourEnum_MinuteOfHour_name, MinuteOfHourEnum_MinuteOfHour_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/minute_of_hour.proto", fileDescriptor_minute_of_hour_498f12470e9a0321)
+}
+
+var fileDescriptor_minute_of_hour_498f12470e9a0321 = []byte{
+	// 287 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0xb3, 0x40,
+	0x14, 0x85, 0x7f, 0x68, 0xff, 0x6a, 0x6e, 0x8d, 0x8e, 0xb3, 0xef, 0xc2, 0x3e, 0xc0, 0x40, 0x74,
+	0xe9, 0x0a, 0x74, 0x68, 0x89, 0x11, 0x08, 0x52, 0x4c, 0x1b, 0x12, 0x82, 0x42, 0xc7, 0x26, 0x85,
+	0xdb, 0x30, 0xa5, 0x0f, 0xe4, 0xd2, 0xc7, 0x70, 0xe9, 0x53, 0x19, 0x06, 0xdb, 0x74, 0xa3, 0x9b,
+	0xc9, 0xc9, 0x3d, 0xf3, 0xcd, 0xdc, 0x73, 0xe0, 0x5a, 0x20, 0x8a, 0x75, 0x61, 0x64, 0xb9, 0x34,
+	0x3a, 0xd9, 0xaa, 0x9d, 0x69, 0x14, 0x55, 0x53, 0x4a, 0xa3, 0x5c, 0x55, 0xcd, 0xb6, 0x48, 0x71,
+	0x99, 0xbe, 0x61, 0x53, 0xb3, 0x4d, 0x8d, 0x5b, 0xa4, 0xa3, 0xee, 0x22, 0xcb, 0x72, 0xc9, 0x0e,
+	0x0c, 0xdb, 0x99, 0x4c, 0x31, 0x63, 0x09, 0xe4, 0x51, 0x61, 0xfe, 0x72, 0x8a, 0x4d, 0xcd, 0xab,
+	0xa6, 0x1c, 0xa7, 0x70, 0x76, 0x3c, 0xa3, 0x17, 0x30, 0x9c, 0x79, 0x4f, 0x01, 0xbf, 0x73, 0x1d,
+	0x97, 0xdf, 0x93, 0x7f, 0x74, 0x08, 0x27, 0x33, 0xef, 0xc1, 0xf3, 0x9f, 0x3d, 0xa2, 0xd1, 0x53,
+	0xe8, 0x2f, 0x78, 0xe8, 0x13, 0xbd, 0x1d, 0x3b, 0xae, 0x13, 0x71, 0xee, 0x91, 0x1e, 0x05, 0x18,
+	0x44, 0x53, 0x37, 0x8c, 0xe6, 0xa4, 0x4f, 0xcf, 0x01, 0x1c, 0x3f, 0x8c, 0xe6, 0xa9, 0xe3, 0xc6,
+	0x9c, 0xfc, 0xb7, 0x3f, 0x35, 0xb8, 0x7a, 0xc5, 0x92, 0xfd, 0xb9, 0x9a, 0x7d, 0x79, 0xbc, 0x44,
+	0xd0, 0x86, 0x09, 0xb4, 0x85, 0xfd, 0xc3, 0x08, 0x5c, 0x67, 0x95, 0x60, 0x58, 0x0b, 0x43, 0x14,
+	0x95, 0x8a, 0xba, 0xaf, 0x64, 0xb3, 0x92, 0xbf, 0x34, 0x74, 0xab, 0xce, 0x77, 0xbd, 0x37, 0xb1,
+	0xac, 0x0f, 0x7d, 0x34, 0xe9, 0x9e, 0xb2, 0x72, 0xc9, 0x3a, 0xd9, 0xaa, 0xd8, 0x64, 0x6d, 0x09,
+	0xf2, 0x6b, 0xef, 0x27, 0x56, 0x2e, 0x93, 0x83, 0x9f, 0xc4, 0x66, 0xa2, 0xfc, 0x97, 0x81, 0xfa,
+	0xf4, 0xe6, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x96, 0x97, 0x89, 0x95, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/month_of_year.pb.go b/googleapis/ads/googleads/v0/enums/month_of_year.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1b7a71ec95eff7d6f75041ccdbac4536c3ec46d4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/month_of_year.pb.go
@@ -0,0 +1,159 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/month_of_year.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates months of the year, e.g., "January".
+type MonthOfYearEnum_MonthOfYear int32
+
+const (
+	// Not specified.
+	MonthOfYearEnum_UNSPECIFIED MonthOfYearEnum_MonthOfYear = 0
+	// The value is unknown in this version.
+	MonthOfYearEnum_UNKNOWN MonthOfYearEnum_MonthOfYear = 1
+	// January.
+	MonthOfYearEnum_JANUARY MonthOfYearEnum_MonthOfYear = 2
+	// February.
+	MonthOfYearEnum_FEBRUARY MonthOfYearEnum_MonthOfYear = 3
+	// March.
+	MonthOfYearEnum_MARCH MonthOfYearEnum_MonthOfYear = 4
+	// April.
+	MonthOfYearEnum_APRIL MonthOfYearEnum_MonthOfYear = 5
+	// May.
+	MonthOfYearEnum_MAY MonthOfYearEnum_MonthOfYear = 6
+	// June.
+	MonthOfYearEnum_JUNE MonthOfYearEnum_MonthOfYear = 7
+	// July.
+	MonthOfYearEnum_JULY MonthOfYearEnum_MonthOfYear = 8
+	// August.
+	MonthOfYearEnum_AUGUST MonthOfYearEnum_MonthOfYear = 9
+	// September.
+	MonthOfYearEnum_SEPTEMBER MonthOfYearEnum_MonthOfYear = 10
+	// October.
+	MonthOfYearEnum_OCTOBER MonthOfYearEnum_MonthOfYear = 11
+	// November.
+	MonthOfYearEnum_NOVEMBER MonthOfYearEnum_MonthOfYear = 12
+	// December.
+	MonthOfYearEnum_DECEMBER MonthOfYearEnum_MonthOfYear = 13
+)
+
+var MonthOfYearEnum_MonthOfYear_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "JANUARY",
+	3:  "FEBRUARY",
+	4:  "MARCH",
+	5:  "APRIL",
+	6:  "MAY",
+	7:  "JUNE",
+	8:  "JULY",
+	9:  "AUGUST",
+	10: "SEPTEMBER",
+	11: "OCTOBER",
+	12: "NOVEMBER",
+	13: "DECEMBER",
+}
+var MonthOfYearEnum_MonthOfYear_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"JANUARY":     2,
+	"FEBRUARY":    3,
+	"MARCH":       4,
+	"APRIL":       5,
+	"MAY":         6,
+	"JUNE":        7,
+	"JULY":        8,
+	"AUGUST":      9,
+	"SEPTEMBER":   10,
+	"OCTOBER":     11,
+	"NOVEMBER":    12,
+	"DECEMBER":    13,
+}
+
+func (x MonthOfYearEnum_MonthOfYear) String() string {
+	return proto.EnumName(MonthOfYearEnum_MonthOfYear_name, int32(x))
+}
+func (MonthOfYearEnum_MonthOfYear) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_month_of_year_0ecbc5ae6aea17e4, []int{0, 0}
+}
+
+// Container for enumeration of months of the year, e.g., "January".
+type MonthOfYearEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MonthOfYearEnum) Reset()         { *m = MonthOfYearEnum{} }
+func (m *MonthOfYearEnum) String() string { return proto.CompactTextString(m) }
+func (*MonthOfYearEnum) ProtoMessage()    {}
+func (*MonthOfYearEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_month_of_year_0ecbc5ae6aea17e4, []int{0}
+}
+func (m *MonthOfYearEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MonthOfYearEnum.Unmarshal(m, b)
+}
+func (m *MonthOfYearEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MonthOfYearEnum.Marshal(b, m, deterministic)
+}
+func (dst *MonthOfYearEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MonthOfYearEnum.Merge(dst, src)
+}
+func (m *MonthOfYearEnum) XXX_Size() int {
+	return xxx_messageInfo_MonthOfYearEnum.Size(m)
+}
+func (m *MonthOfYearEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MonthOfYearEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MonthOfYearEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MonthOfYearEnum)(nil), "google.ads.googleads.v0.enums.MonthOfYearEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.MonthOfYearEnum_MonthOfYear", MonthOfYearEnum_MonthOfYear_name, MonthOfYearEnum_MonthOfYear_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/month_of_year.proto", fileDescriptor_month_of_year_0ecbc5ae6aea17e4)
+}
+
+var fileDescriptor_month_of_year_0ecbc5ae6aea17e4 = []byte{
+	// 344 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcd, 0x4e, 0xc2, 0x40,
+	0x14, 0x85, 0x2d, 0xff, 0xdc, 0x42, 0x98, 0xcc, 0x9e, 0x85, 0x3c, 0xc0, 0xb4, 0xc6, 0xa5, 0xab,
+	0x69, 0x19, 0x10, 0xa4, 0x3f, 0x29, 0x14, 0x53, 0xd3, 0x84, 0x54, 0x5b, 0xaa, 0x09, 0xed, 0x90,
+	0x16, 0x48, 0x7c, 0x1d, 0x97, 0xbe, 0x83, 0x0b, 0xb7, 0xee, 0x7c, 0x23, 0x33, 0xad, 0x10, 0x36,
+	0xba, 0x99, 0x7c, 0x67, 0xce, 0x9c, 0xb9, 0xb9, 0x07, 0xae, 0x62, 0xce, 0xe3, 0x4d, 0xa4, 0x04,
+	0x61, 0xae, 0x94, 0x28, 0xe8, 0xa0, 0x2a, 0x51, 0xba, 0x4f, 0x72, 0x25, 0xe1, 0xe9, 0xee, 0x79,
+	0xc5, 0xd7, 0xab, 0xd7, 0x28, 0xc8, 0xc8, 0x36, 0xe3, 0x3b, 0x8e, 0xfb, 0xe5, 0x3b, 0x12, 0x84,
+	0x39, 0x39, 0x45, 0xc8, 0x41, 0x25, 0x45, 0x64, 0xf0, 0x2d, 0x41, 0xcf, 0x10, 0x31, 0x6b, 0xed,
+	0x45, 0x41, 0xc6, 0xd2, 0x7d, 0x32, 0xf8, 0x90, 0x40, 0x3e, 0xbb, 0xc3, 0x3d, 0x90, 0x5d, 0x73,
+	0x6e, 0x33, 0x7d, 0x32, 0x9a, 0xb0, 0x21, 0xba, 0xc0, 0x32, 0x34, 0x5d, 0xf3, 0xce, 0xb4, 0xee,
+	0x4d, 0x24, 0x09, 0x31, 0xa5, 0xa6, 0x4b, 0x1d, 0x0f, 0x55, 0x70, 0x07, 0x5a, 0x23, 0xa6, 0x39,
+	0x85, 0xaa, 0xe2, 0x36, 0xd4, 0x0d, 0xea, 0xe8, 0xb7, 0xa8, 0x26, 0x90, 0xda, 0xce, 0x64, 0x86,
+	0xea, 0xb8, 0x09, 0x55, 0x83, 0x7a, 0xa8, 0x81, 0x5b, 0x50, 0x9b, 0xba, 0x26, 0x43, 0xcd, 0x92,
+	0x66, 0x1e, 0x6a, 0x61, 0x80, 0x06, 0x75, 0xc7, 0xee, 0x7c, 0x81, 0xda, 0xb8, 0x0b, 0xed, 0x39,
+	0xb3, 0x17, 0xcc, 0xd0, 0x98, 0x83, 0x40, 0x0c, 0xb2, 0xf4, 0x85, 0x25, 0x84, 0x2c, 0x06, 0x99,
+	0xd6, 0xb2, 0xb4, 0x3a, 0x42, 0x0d, 0x99, 0x5e, 0xaa, 0xae, 0xf6, 0x29, 0xc1, 0xe5, 0x13, 0x4f,
+	0xc8, 0xbf, 0x9b, 0x6b, 0xe8, 0x6c, 0x45, 0x5b, 0x54, 0x65, 0x4b, 0x0f, 0xda, 0x6f, 0x24, 0xe6,
+	0x9b, 0x20, 0x8d, 0x09, 0xcf, 0x62, 0x25, 0x8e, 0xd2, 0xa2, 0xc8, 0x63, 0xdf, 0xdb, 0x97, 0xfc,
+	0x8f, 0xfa, 0x6f, 0x8a, 0xf3, 0xad, 0x52, 0x1d, 0x53, 0xfa, 0x5e, 0xe9, 0x8f, 0xcb, 0xaf, 0x68,
+	0x98, 0x93, 0x12, 0x05, 0x2d, 0x55, 0x22, 0x2a, 0xce, 0xbf, 0x8e, 0xbe, 0x4f, 0xc3, 0xdc, 0x3f,
+	0xf9, 0xfe, 0x52, 0xf5, 0x0b, 0xff, 0xb1, 0x51, 0x0c, 0xbd, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff,
+	0xce, 0x84, 0x46, 0xe2, 0xf2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/page_one_promoted_strategy_goal.pb.go b/googleapis/ads/googleads/v0/enums/page_one_promoted_strategy_goal.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..63ea9cfd74c153b04096df824501d9e8776423e3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/page_one_promoted_strategy_goal.pb.go
@@ -0,0 +1,117 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/page_one_promoted_strategy_goal.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible strategy goals.
+type PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal int32
+
+const (
+	// Not specified.
+	PageOnePromotedStrategyGoalEnum_UNSPECIFIED PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal = 0
+	// Used for return value only. Represents value unknown in this version.
+	PageOnePromotedStrategyGoalEnum_UNKNOWN PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal = 1
+	// First page on google.com.
+	PageOnePromotedStrategyGoalEnum_FIRST_PAGE PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal = 2
+	// Top slots of the first page on google.com.
+	PageOnePromotedStrategyGoalEnum_FIRST_PAGE_PROMOTED PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal = 3
+)
+
+var PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FIRST_PAGE",
+	3: "FIRST_PAGE_PROMOTED",
+}
+var PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"FIRST_PAGE":          2,
+	"FIRST_PAGE_PROMOTED": 3,
+}
+
+func (x PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal) String() string {
+	return proto.EnumName(PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal_name, int32(x))
+}
+func (PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_page_one_promoted_strategy_goal_9679274d22e7547d, []int{0, 0}
+}
+
+// Container for enum describing possible strategy goals: where impressions are
+// desired to be shown on search result pages.
+type PageOnePromotedStrategyGoalEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PageOnePromotedStrategyGoalEnum) Reset()         { *m = PageOnePromotedStrategyGoalEnum{} }
+func (m *PageOnePromotedStrategyGoalEnum) String() string { return proto.CompactTextString(m) }
+func (*PageOnePromotedStrategyGoalEnum) ProtoMessage()    {}
+func (*PageOnePromotedStrategyGoalEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_page_one_promoted_strategy_goal_9679274d22e7547d, []int{0}
+}
+func (m *PageOnePromotedStrategyGoalEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PageOnePromotedStrategyGoalEnum.Unmarshal(m, b)
+}
+func (m *PageOnePromotedStrategyGoalEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PageOnePromotedStrategyGoalEnum.Marshal(b, m, deterministic)
+}
+func (dst *PageOnePromotedStrategyGoalEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PageOnePromotedStrategyGoalEnum.Merge(dst, src)
+}
+func (m *PageOnePromotedStrategyGoalEnum) XXX_Size() int {
+	return xxx_messageInfo_PageOnePromotedStrategyGoalEnum.Size(m)
+}
+func (m *PageOnePromotedStrategyGoalEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PageOnePromotedStrategyGoalEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PageOnePromotedStrategyGoalEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PageOnePromotedStrategyGoalEnum)(nil), "google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal", PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal_name, PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/page_one_promoted_strategy_goal.proto", fileDescriptor_page_one_promoted_strategy_goal_9679274d22e7547d)
+}
+
+var fileDescriptor_page_one_promoted_strategy_goal_9679274d22e7547d = []byte{
+	// 295 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc7, 0x6d, 0x07, 0x0a, 0x19, 0x68, 0xa9, 0x07, 0x0f, 0x32, 0xd4, 0x3d, 0x40, 0x5a, 0xf0,
+	0xe8, 0xa9, 0xdd, 0xba, 0x52, 0xc4, 0x36, 0xac, 0xdb, 0x04, 0x29, 0x84, 0x68, 0x42, 0x10, 0xda,
+	0xfc, 0x4a, 0xd3, 0x0d, 0x7c, 0x02, 0xdf, 0xc3, 0xa3, 0x8f, 0xe2, 0xcd, 0x37, 0x92, 0xfe, 0xd9,
+	0x3c, 0xad, 0x97, 0xf0, 0x0d, 0xdf, 0xe4, 0x93, 0x5f, 0x3e, 0x68, 0x26, 0x01, 0x64, 0x2e, 0x1c,
+	0xc6, 0xb5, 0xd3, 0xc5, 0x26, 0xed, 0x5c, 0x47, 0xa8, 0x6d, 0xa1, 0x9d, 0x92, 0x49, 0x41, 0x41,
+	0x09, 0x5a, 0x56, 0x50, 0x40, 0x2d, 0x38, 0xd5, 0x75, 0xc5, 0x6a, 0x21, 0x3f, 0xa8, 0x04, 0x96,
+	0xe3, 0xb2, 0x82, 0x1a, 0xec, 0x49, 0x77, 0x13, 0x33, 0xae, 0xf1, 0x01, 0x82, 0x77, 0x2e, 0x6e,
+	0x21, 0xd3, 0x4f, 0x03, 0xdd, 0x10, 0x26, 0x45, 0xa2, 0x04, 0xe9, 0x31, 0x69, 0x4f, 0x09, 0x81,
+	0xe5, 0x81, 0xda, 0x16, 0x53, 0x8e, 0xae, 0x07, 0x8e, 0xd8, 0x17, 0x68, 0xbc, 0x8e, 0x53, 0x12,
+	0xcc, 0xa2, 0x45, 0x14, 0xcc, 0xad, 0x13, 0x7b, 0x8c, 0xce, 0xd6, 0xf1, 0x63, 0x9c, 0x3c, 0xc7,
+	0x96, 0x61, 0x9f, 0x23, 0xb4, 0x88, 0x96, 0xe9, 0x8a, 0x12, 0x2f, 0x0c, 0x2c, 0xd3, 0xbe, 0x42,
+	0x97, 0xff, 0x7b, 0x4a, 0x96, 0xc9, 0x53, 0xb2, 0x0a, 0xe6, 0xd6, 0xc8, 0xff, 0x35, 0xd0, 0xdd,
+	0x1b, 0x14, 0x78, 0x70, 0x5e, 0xff, 0x76, 0x60, 0x12, 0xd2, 0x7c, 0x98, 0x18, 0x2f, 0x7e, 0x8f,
+	0x90, 0x90, 0x33, 0x25, 0x31, 0x54, 0xd2, 0x91, 0x42, 0xb5, 0x3a, 0xf6, 0x1e, 0xcb, 0x77, 0x7d,
+	0x44, 0xeb, 0x43, 0xbb, 0x7e, 0x99, 0xa3, 0xd0, 0xf3, 0xbe, 0xcd, 0x49, 0xd8, 0xa1, 0x3c, 0xae,
+	0x71, 0x17, 0x9b, 0xb4, 0x71, 0x71, 0x23, 0x46, 0xff, 0xec, 0xfb, 0xcc, 0xe3, 0x3a, 0x3b, 0xf4,
+	0xd9, 0xc6, 0xcd, 0xda, 0xfe, 0xf5, 0xb4, 0x7d, 0xf4, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x95,
+	0x7d, 0x22, 0x31, 0xca, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/parental_status_type.pb.go b/googleapis/ads/googleads/v0/enums/parental_status_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..240e7b2bc1258ef0fa33c1e35e96e292ed670b90
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/parental_status_type.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/parental_status_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of parental statuses (e.g. not a parent).
+type ParentalStatusTypeEnum_ParentalStatusType int32
+
+const (
+	// Not specified.
+	ParentalStatusTypeEnum_UNSPECIFIED ParentalStatusTypeEnum_ParentalStatusType = 0
+	// Used for return value only. Represents value unknown in this version.
+	ParentalStatusTypeEnum_UNKNOWN ParentalStatusTypeEnum_ParentalStatusType = 1
+	// Parent.
+	ParentalStatusTypeEnum_PARENT ParentalStatusTypeEnum_ParentalStatusType = 300
+	// Not a parent.
+	ParentalStatusTypeEnum_NOT_A_PARENT ParentalStatusTypeEnum_ParentalStatusType = 301
+	// Undetermined parental status.
+	ParentalStatusTypeEnum_UNDETERMINED ParentalStatusTypeEnum_ParentalStatusType = 302
+)
+
+var ParentalStatusTypeEnum_ParentalStatusType_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	300: "PARENT",
+	301: "NOT_A_PARENT",
+	302: "UNDETERMINED",
+}
+var ParentalStatusTypeEnum_ParentalStatusType_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"PARENT":       300,
+	"NOT_A_PARENT": 301,
+	"UNDETERMINED": 302,
+}
+
+func (x ParentalStatusTypeEnum_ParentalStatusType) String() string {
+	return proto.EnumName(ParentalStatusTypeEnum_ParentalStatusType_name, int32(x))
+}
+func (ParentalStatusTypeEnum_ParentalStatusType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_parental_status_type_345646dd1d155058, []int{0, 0}
+}
+
+// Container for enum describing the type of demographic parental statuses.
+type ParentalStatusTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ParentalStatusTypeEnum) Reset()         { *m = ParentalStatusTypeEnum{} }
+func (m *ParentalStatusTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*ParentalStatusTypeEnum) ProtoMessage()    {}
+func (*ParentalStatusTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_parental_status_type_345646dd1d155058, []int{0}
+}
+func (m *ParentalStatusTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParentalStatusTypeEnum.Unmarshal(m, b)
+}
+func (m *ParentalStatusTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParentalStatusTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *ParentalStatusTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParentalStatusTypeEnum.Merge(dst, src)
+}
+func (m *ParentalStatusTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_ParentalStatusTypeEnum.Size(m)
+}
+func (m *ParentalStatusTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParentalStatusTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParentalStatusTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ParentalStatusTypeEnum)(nil), "google.ads.googleads.v0.enums.ParentalStatusTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ParentalStatusTypeEnum_ParentalStatusType", ParentalStatusTypeEnum_ParentalStatusType_name, ParentalStatusTypeEnum_ParentalStatusType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/parental_status_type.proto", fileDescriptor_parental_status_type_345646dd1d155058)
+}
+
+var fileDescriptor_parental_status_type_345646dd1d155058 = []byte{
+	// 289 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x82, 0xc4, 0xa2, 0xd4, 0xbc, 0x92, 0xc4, 0x9c, 0xf8, 0xe2, 0x92, 0xc4,
+	0x92, 0xd2, 0xe2, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59,
+	0x88, 0x72, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x4e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x4e, 0xa5,
+	0x7a, 0x2e, 0xb1, 0x00, 0xa8, 0xe6, 0x60, 0xb0, 0xde, 0x90, 0xca, 0x82, 0x54, 0xd7, 0xbc, 0xd2,
+	0x5c, 0xa5, 0x54, 0x2e, 0x21, 0x4c, 0x19, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57,
+	0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f,
+	0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x6e, 0x2e, 0xb6, 0x00, 0xc7, 0x20, 0x57, 0xbf, 0x10, 0x81,
+	0x35, 0x4c, 0x42, 0x82, 0x5c, 0x3c, 0x7e, 0xfe, 0x21, 0xf1, 0x8e, 0xf1, 0x50, 0xa1, 0xb5, 0x60,
+	0xa1, 0x50, 0x3f, 0x17, 0xd7, 0x10, 0xd7, 0x20, 0x5f, 0x4f, 0x3f, 0x57, 0x17, 0x81, 0x75, 0x4c,
+	0x4e, 0x27, 0x18, 0xb9, 0x14, 0x93, 0xf3, 0x73, 0xf5, 0xf0, 0x3a, 0xd3, 0x49, 0x1c, 0xd3, 0x29,
+	0x01, 0x20, 0xef, 0x05, 0x30, 0x46, 0x39, 0x41, 0x75, 0xa6, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb,
+	0xe5, 0x17, 0xa5, 0xeb, 0xa7, 0xa7, 0xe6, 0x81, 0x3d, 0x0f, 0x0b, 0xaa, 0x82, 0xcc, 0x62, 0x1c,
+	0x21, 0x67, 0x0d, 0x26, 0x17, 0x31, 0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x92, 0x75, 0x87, 0x18,
+	0xe5, 0x98, 0x52, 0xac, 0x07, 0x61, 0x82, 0x58, 0x61, 0x06, 0x7a, 0xa0, 0x00, 0x29, 0x3e, 0x05,
+	0x93, 0x8f, 0x71, 0x4c, 0x29, 0x8e, 0x81, 0xcb, 0xc7, 0x84, 0x19, 0xc4, 0x80, 0xe5, 0x93, 0xd8,
+	0xc0, 0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x60, 0xad, 0x5c, 0x54, 0xad, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/placeholder_type.pb.go b/googleapis/ads/googleads/v0/enums/placeholder_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d50889d8752d192c5d528b3226d56a89013d24f5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/placeholder_type.pb.go
@@ -0,0 +1,194 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/placeholder_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible placeholder types for a feed mapping.
+type PlaceholderTypeEnum_PlaceholderType int32
+
+const (
+	// Not specified.
+	PlaceholderTypeEnum_UNSPECIFIED PlaceholderTypeEnum_PlaceholderType = 0
+	// Used for return value only. Represents value unknown in this version.
+	PlaceholderTypeEnum_UNKNOWN PlaceholderTypeEnum_PlaceholderType = 1
+	// Sitelink.
+	PlaceholderTypeEnum_SITELINK PlaceholderTypeEnum_PlaceholderType = 2
+	// Call.
+	PlaceholderTypeEnum_CALL PlaceholderTypeEnum_PlaceholderType = 3
+	// App.
+	PlaceholderTypeEnum_APP PlaceholderTypeEnum_PlaceholderType = 4
+	// Location.
+	PlaceholderTypeEnum_LOCATION PlaceholderTypeEnum_PlaceholderType = 5
+	// Affiliate location.
+	PlaceholderTypeEnum_AFFILIATE_LOCATION PlaceholderTypeEnum_PlaceholderType = 6
+	// Callout.
+	PlaceholderTypeEnum_CALLOUT PlaceholderTypeEnum_PlaceholderType = 7
+	// Structured snippet.
+	PlaceholderTypeEnum_STRUCTURED_SNIPPET PlaceholderTypeEnum_PlaceholderType = 8
+	// Message.
+	PlaceholderTypeEnum_MESSAGE PlaceholderTypeEnum_PlaceholderType = 9
+	// Price.
+	PlaceholderTypeEnum_PRICE PlaceholderTypeEnum_PlaceholderType = 10
+	// Promotion.
+	PlaceholderTypeEnum_PROMOTION PlaceholderTypeEnum_PlaceholderType = 11
+	// Ad customizer.
+	PlaceholderTypeEnum_AD_CUSTOMIZER PlaceholderTypeEnum_PlaceholderType = 12
+	// Dynamic education.
+	PlaceholderTypeEnum_DYNAMIC_EDUCATION PlaceholderTypeEnum_PlaceholderType = 13
+	// Dynamic flights.
+	PlaceholderTypeEnum_DYNAMIC_FLIGHT PlaceholderTypeEnum_PlaceholderType = 14
+	// Dynamic custom.
+	PlaceholderTypeEnum_DYNAMIC_CUSTOM PlaceholderTypeEnum_PlaceholderType = 15
+	// Dynamic hotels.
+	PlaceholderTypeEnum_DYNAMIC_HOTEL PlaceholderTypeEnum_PlaceholderType = 16
+	// Dynamic real estate.
+	PlaceholderTypeEnum_DYNAMIC_REAL_ESTATE PlaceholderTypeEnum_PlaceholderType = 17
+	// Dynamic travel.
+	PlaceholderTypeEnum_DYNAMIC_TRAVEL PlaceholderTypeEnum_PlaceholderType = 18
+	// Dynamic local.
+	PlaceholderTypeEnum_DYNAMIC_LOCAL PlaceholderTypeEnum_PlaceholderType = 19
+	// Dynamic jobs.
+	PlaceholderTypeEnum_DYNAMIC_JOB PlaceholderTypeEnum_PlaceholderType = 20
+)
+
+var PlaceholderTypeEnum_PlaceholderType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "SITELINK",
+	3:  "CALL",
+	4:  "APP",
+	5:  "LOCATION",
+	6:  "AFFILIATE_LOCATION",
+	7:  "CALLOUT",
+	8:  "STRUCTURED_SNIPPET",
+	9:  "MESSAGE",
+	10: "PRICE",
+	11: "PROMOTION",
+	12: "AD_CUSTOMIZER",
+	13: "DYNAMIC_EDUCATION",
+	14: "DYNAMIC_FLIGHT",
+	15: "DYNAMIC_CUSTOM",
+	16: "DYNAMIC_HOTEL",
+	17: "DYNAMIC_REAL_ESTATE",
+	18: "DYNAMIC_TRAVEL",
+	19: "DYNAMIC_LOCAL",
+	20: "DYNAMIC_JOB",
+}
+var PlaceholderTypeEnum_PlaceholderType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"SITELINK":            2,
+	"CALL":                3,
+	"APP":                 4,
+	"LOCATION":            5,
+	"AFFILIATE_LOCATION":  6,
+	"CALLOUT":             7,
+	"STRUCTURED_SNIPPET":  8,
+	"MESSAGE":             9,
+	"PRICE":               10,
+	"PROMOTION":           11,
+	"AD_CUSTOMIZER":       12,
+	"DYNAMIC_EDUCATION":   13,
+	"DYNAMIC_FLIGHT":      14,
+	"DYNAMIC_CUSTOM":      15,
+	"DYNAMIC_HOTEL":       16,
+	"DYNAMIC_REAL_ESTATE": 17,
+	"DYNAMIC_TRAVEL":      18,
+	"DYNAMIC_LOCAL":       19,
+	"DYNAMIC_JOB":         20,
+}
+
+func (x PlaceholderTypeEnum_PlaceholderType) String() string {
+	return proto.EnumName(PlaceholderTypeEnum_PlaceholderType_name, int32(x))
+}
+func (PlaceholderTypeEnum_PlaceholderType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_placeholder_type_816ab67b31ba6b71, []int{0, 0}
+}
+
+// Container for enum describing possible placeholder types for a feed mapping.
+type PlaceholderTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PlaceholderTypeEnum) Reset()         { *m = PlaceholderTypeEnum{} }
+func (m *PlaceholderTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PlaceholderTypeEnum) ProtoMessage()    {}
+func (*PlaceholderTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_placeholder_type_816ab67b31ba6b71, []int{0}
+}
+func (m *PlaceholderTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PlaceholderTypeEnum.Unmarshal(m, b)
+}
+func (m *PlaceholderTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PlaceholderTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *PlaceholderTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PlaceholderTypeEnum.Merge(dst, src)
+}
+func (m *PlaceholderTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PlaceholderTypeEnum.Size(m)
+}
+func (m *PlaceholderTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PlaceholderTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PlaceholderTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PlaceholderTypeEnum)(nil), "google.ads.googleads.v0.enums.PlaceholderTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PlaceholderTypeEnum_PlaceholderType", PlaceholderTypeEnum_PlaceholderType_name, PlaceholderTypeEnum_PlaceholderType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/placeholder_type.proto", fileDescriptor_placeholder_type_816ab67b31ba6b71)
+}
+
+var fileDescriptor_placeholder_type_816ab67b31ba6b71 = []byte{
+	// 451 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xc1, 0x6e, 0xda, 0x40,
+	0x14, 0x2c, 0x90, 0x04, 0x58, 0x42, 0x78, 0x2c, 0x69, 0x7b, 0xca, 0xa1, 0xf9, 0x00, 0x1b, 0xa9,
+	0xbd, 0xf5, 0xb4, 0xd8, 0x0f, 0xb2, 0xcd, 0xe2, 0x5d, 0xd9, 0x6b, 0xaa, 0x46, 0x48, 0x16, 0x8d,
+	0x2d, 0xb7, 0x12, 0x60, 0x0b, 0x27, 0x91, 0xf2, 0x17, 0xfd, 0x86, 0x1e, 0xfb, 0x1f, 0xbd, 0xf4,
+	0x8b, 0x7a, 0xac, 0xd6, 0x8e, 0x29, 0x8a, 0xd4, 0x5e, 0xac, 0xd1, 0xbc, 0x99, 0x79, 0xf2, 0xbe,
+	0x21, 0xef, 0xd2, 0x2c, 0x4b, 0xd7, 0x89, 0xbd, 0x8a, 0x0b, 0xbb, 0x82, 0x06, 0x3d, 0x8c, 0xed,
+	0x64, 0x7b, 0xbf, 0x29, 0xec, 0x7c, 0xbd, 0xba, 0x4d, 0xbe, 0x64, 0xeb, 0x38, 0xd9, 0x45, 0x77,
+	0x8f, 0x79, 0x62, 0xe5, 0xbb, 0xec, 0x2e, 0xa3, 0x17, 0x95, 0xd4, 0x5a, 0xc5, 0x85, 0xb5, 0x77,
+	0x59, 0x0f, 0x63, 0xab, 0x74, 0x5d, 0x7e, 0x6b, 0x91, 0x91, 0xfa, 0xeb, 0xd4, 0x8f, 0x79, 0x82,
+	0xdb, 0xfb, 0xcd, 0xe5, 0xef, 0x26, 0x19, 0x3c, 0xe3, 0xe9, 0x80, 0xf4, 0x42, 0x2f, 0x50, 0xe8,
+	0xf0, 0x29, 0x47, 0x17, 0x5e, 0xd0, 0x1e, 0x69, 0x87, 0xde, 0xb5, 0x27, 0x3f, 0x7a, 0xd0, 0xa0,
+	0xa7, 0xa4, 0x13, 0x70, 0x8d, 0x82, 0x7b, 0xd7, 0xd0, 0xa4, 0x1d, 0x72, 0xe4, 0x30, 0x21, 0xa0,
+	0x45, 0xdb, 0xa4, 0xc5, 0x94, 0x82, 0x23, 0x23, 0x10, 0xd2, 0x61, 0x9a, 0x4b, 0x0f, 0x8e, 0xe9,
+	0x2b, 0x42, 0xd9, 0x74, 0xca, 0x05, 0x67, 0x1a, 0xa3, 0x3d, 0x7f, 0x62, 0x32, 0x8d, 0x51, 0x86,
+	0x1a, 0xda, 0x46, 0x14, 0x68, 0x3f, 0x74, 0x74, 0xe8, 0xa3, 0x1b, 0x05, 0x1e, 0x57, 0x0a, 0x35,
+	0x74, 0x8c, 0x68, 0x8e, 0x41, 0xc0, 0x66, 0x08, 0x5d, 0xda, 0x25, 0xc7, 0xca, 0xe7, 0x0e, 0x02,
+	0xa1, 0x7d, 0xd2, 0x55, 0xbe, 0x9c, 0xcb, 0x32, 0xab, 0x47, 0x87, 0xa4, 0xcf, 0xdc, 0xc8, 0x09,
+	0x03, 0x2d, 0xe7, 0xfc, 0x06, 0x7d, 0x38, 0xa5, 0x2f, 0xc9, 0xd0, 0xfd, 0xe4, 0xb1, 0x39, 0x77,
+	0x22, 0x74, 0xc3, 0xa7, 0xad, 0x7d, 0x4a, 0xc9, 0x59, 0x4d, 0x4f, 0x05, 0x9f, 0x5d, 0x69, 0x38,
+	0x3b, 0xe4, 0xaa, 0x08, 0x18, 0x98, 0xc4, 0x9a, 0xbb, 0x92, 0x1a, 0x05, 0x00, 0x7d, 0x4d, 0x46,
+	0x35, 0xe5, 0x23, 0x13, 0x11, 0x06, 0x9a, 0x69, 0x84, 0xe1, 0xa1, 0x5f, 0xfb, 0x6c, 0x81, 0x02,
+	0xe8, 0xa1, 0xdf, 0xfc, 0xb3, 0x80, 0x91, 0x79, 0xd5, 0x9a, 0xfa, 0x20, 0x27, 0x70, 0x3e, 0xf9,
+	0xd9, 0x20, 0x6f, 0x6e, 0xb3, 0x8d, 0xf5, 0xdf, 0xc3, 0x4d, 0xce, 0x9f, 0x5d, 0x47, 0x99, 0x6b,
+	0xab, 0xc6, 0xcd, 0xe4, 0xc9, 0x96, 0x66, 0xeb, 0xd5, 0x36, 0xb5, 0xb2, 0x5d, 0x6a, 0xa7, 0xc9,
+	0xb6, 0xec, 0x42, 0xdd, 0x9a, 0xfc, 0x6b, 0xf1, 0x8f, 0x12, 0xbd, 0x2f, 0xbf, 0xdf, 0x9b, 0xad,
+	0x19, 0x63, 0x3f, 0x9a, 0x17, 0xb3, 0x2a, 0x8a, 0xc5, 0x85, 0x55, 0x41, 0x83, 0x16, 0x63, 0xcb,
+	0x34, 0xa4, 0xf8, 0x55, 0xcf, 0x97, 0x2c, 0x2e, 0x96, 0xfb, 0xf9, 0x72, 0x31, 0x5e, 0x96, 0xf3,
+	0xcf, 0x27, 0xe5, 0xd2, 0xb7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x1f, 0xd3, 0x86, 0x87, 0xb8,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/policy_approval_status.pb.go b/googleapis/ads/googleads/v0/enums/policy_approval_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7e3455130e8117630566d4eba5bdf0caae799170
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/policy_approval_status.pb.go
@@ -0,0 +1,130 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/policy_approval_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible policy approval statuses. When there are several approval
+// statuses available the most severe one will be used. The order of severity
+// is DISAPPROVED, AREA_OF_INTEREST_ONLY, APPROVED_LIMITED and APPROVED.
+type PolicyApprovalStatusEnum_PolicyApprovalStatus int32
+
+const (
+	// No value has been specified.
+	PolicyApprovalStatusEnum_UNSPECIFIED PolicyApprovalStatusEnum_PolicyApprovalStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyApprovalStatusEnum_UNKNOWN PolicyApprovalStatusEnum_PolicyApprovalStatus = 1
+	// Will not serve.
+	PolicyApprovalStatusEnum_DISAPPROVED PolicyApprovalStatusEnum_PolicyApprovalStatus = 2
+	// Serves with restrictions.
+	PolicyApprovalStatusEnum_APPROVED_LIMITED PolicyApprovalStatusEnum_PolicyApprovalStatus = 3
+	// Serves without restrictions.
+	PolicyApprovalStatusEnum_APPROVED PolicyApprovalStatusEnum_PolicyApprovalStatus = 4
+	// Will not serve in targeted countries, but may serve for users who are
+	// searching for information about the targeted countries.
+	PolicyApprovalStatusEnum_AREA_OF_INTEREST_ONLY PolicyApprovalStatusEnum_PolicyApprovalStatus = 5
+)
+
+var PolicyApprovalStatusEnum_PolicyApprovalStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DISAPPROVED",
+	3: "APPROVED_LIMITED",
+	4: "APPROVED",
+	5: "AREA_OF_INTEREST_ONLY",
+}
+var PolicyApprovalStatusEnum_PolicyApprovalStatus_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"DISAPPROVED":           2,
+	"APPROVED_LIMITED":      3,
+	"APPROVED":              4,
+	"AREA_OF_INTEREST_ONLY": 5,
+}
+
+func (x PolicyApprovalStatusEnum_PolicyApprovalStatus) String() string {
+	return proto.EnumName(PolicyApprovalStatusEnum_PolicyApprovalStatus_name, int32(x))
+}
+func (PolicyApprovalStatusEnum_PolicyApprovalStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_policy_approval_status_2ba8a47eda115be6, []int{0, 0}
+}
+
+// Container for enum describing possible policy approval statuses.
+type PolicyApprovalStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyApprovalStatusEnum) Reset()         { *m = PolicyApprovalStatusEnum{} }
+func (m *PolicyApprovalStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyApprovalStatusEnum) ProtoMessage()    {}
+func (*PolicyApprovalStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_approval_status_2ba8a47eda115be6, []int{0}
+}
+func (m *PolicyApprovalStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyApprovalStatusEnum.Unmarshal(m, b)
+}
+func (m *PolicyApprovalStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyApprovalStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *PolicyApprovalStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyApprovalStatusEnum.Merge(dst, src)
+}
+func (m *PolicyApprovalStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyApprovalStatusEnum.Size(m)
+}
+func (m *PolicyApprovalStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyApprovalStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyApprovalStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PolicyApprovalStatusEnum)(nil), "google.ads.googleads.v0.enums.PolicyApprovalStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus", PolicyApprovalStatusEnum_PolicyApprovalStatus_name, PolicyApprovalStatusEnum_PolicyApprovalStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/policy_approval_status.proto", fileDescriptor_policy_approval_status_2ba8a47eda115be6)
+}
+
+var fileDescriptor_policy_approval_status_2ba8a47eda115be6 = []byte{
+	// 311 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x6b, 0xf2, 0x30,
+	0x1c, 0xc7, 0x9f, 0xea, 0xb3, 0x3f, 0xc4, 0xc1, 0x42, 0x70, 0x30, 0x0f, 0x1e, 0xe6, 0x0b, 0x48,
+	0x0b, 0xbb, 0x6d, 0xa7, 0xb8, 0x46, 0x09, 0x73, 0x69, 0xb0, 0xea, 0xd8, 0x28, 0x84, 0xcc, 0x4a,
+	0x10, 0x6a, 0x53, 0x8c, 0x0a, 0xbb, 0xef, 0x8d, 0x6c, 0xc7, 0xbd, 0x14, 0x5f, 0xd5, 0x68, 0xaa,
+	0x9e, 0xdc, 0x2e, 0xe1, 0x1b, 0xbe, 0xf9, 0x24, 0xf9, 0x7d, 0xc0, 0x9d, 0x36, 0x46, 0x67, 0x33,
+	0x5f, 0xa5, 0xd6, 0xaf, 0x62, 0x99, 0x36, 0x81, 0x3f, 0xcb, 0xd7, 0x0b, 0xeb, 0x17, 0x26, 0x9b,
+	0x4f, 0xdf, 0xa5, 0x2a, 0x8a, 0xa5, 0xd9, 0xa8, 0x4c, 0xda, 0x95, 0x5a, 0xad, 0x2d, 0x2e, 0x96,
+	0x66, 0x65, 0x50, 0xbb, 0x02, 0xb0, 0x4a, 0x2d, 0x3e, 0xb0, 0x78, 0x13, 0x60, 0xc7, 0x76, 0x3e,
+	0x3d, 0x70, 0x2d, 0x1c, 0x4f, 0x76, 0x78, 0xec, 0x68, 0x9a, 0xaf, 0x17, 0x9d, 0x0f, 0x0f, 0x34,
+	0x8f, 0x95, 0xe8, 0x12, 0x34, 0xc6, 0x3c, 0x16, 0xf4, 0x81, 0xf5, 0x18, 0x0d, 0xe1, 0x3f, 0xd4,
+	0x00, 0x67, 0x63, 0xfe, 0xc8, 0xa3, 0x67, 0x0e, 0xbd, 0xb2, 0x0d, 0x59, 0x4c, 0x84, 0x18, 0x46,
+	0x13, 0x1a, 0xc2, 0x1a, 0x6a, 0x02, 0xb8, 0xdf, 0xc9, 0x01, 0x7b, 0x62, 0x23, 0x1a, 0xc2, 0x3a,
+	0xba, 0x00, 0xe7, 0x87, 0x33, 0xff, 0x51, 0x0b, 0x5c, 0x91, 0x21, 0x25, 0x32, 0xea, 0x49, 0xc6,
+	0x47, 0x74, 0x48, 0xe3, 0x91, 0x8c, 0xf8, 0xe0, 0x05, 0x9e, 0x74, 0xb7, 0x1e, 0xb8, 0x99, 0x9a,
+	0x05, 0xfe, 0x73, 0x92, 0x6e, 0xeb, 0xd8, 0x4f, 0x45, 0xe9, 0x40, 0x78, 0xaf, 0xdd, 0x1d, 0xab,
+	0x4d, 0xa6, 0x72, 0x8d, 0xcd, 0x52, 0xfb, 0x7a, 0x96, 0x3b, 0x43, 0x7b, 0xa3, 0xc5, 0xdc, 0xfe,
+	0x22, 0xf8, 0xde, 0xad, 0x5f, 0xb5, 0x7a, 0x9f, 0x90, 0xef, 0x5a, 0xbb, 0x5f, 0x5d, 0x45, 0x52,
+	0x8b, 0xab, 0x58, 0xa6, 0x49, 0x80, 0x4b, 0x65, 0x76, 0xbb, 0xef, 0x13, 0x92, 0xda, 0xe4, 0xd0,
+	0x27, 0x93, 0x20, 0x71, 0xfd, 0xdb, 0xa9, 0x7b, 0xf4, 0xf6, 0x27, 0x00, 0x00, 0xff, 0xff, 0x3a,
+	0x71, 0xbe, 0xc1, 0xd4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/policy_review_status.pb.go b/googleapis/ads/googleads/v0/enums/policy_review_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6f67337c0d4482c6b0ae00d0e13155b9a7f0c4cb
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/policy_review_status.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/policy_review_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible policy review statuses.
+type PolicyReviewStatusEnum_PolicyReviewStatus int32
+
+const (
+	// No value has been specified.
+	PolicyReviewStatusEnum_UNSPECIFIED PolicyReviewStatusEnum_PolicyReviewStatus = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyReviewStatusEnum_UNKNOWN PolicyReviewStatusEnum_PolicyReviewStatus = 1
+	// Currently under review.
+	PolicyReviewStatusEnum_REVIEW_IN_PROGRESS PolicyReviewStatusEnum_PolicyReviewStatus = 2
+	// Primary review complete. Other reviews may be continuing.
+	PolicyReviewStatusEnum_REVIEWED PolicyReviewStatusEnum_PolicyReviewStatus = 3
+	// The resource has been resubmitted for approval or its policy decision has
+	// been appealed.
+	PolicyReviewStatusEnum_UNDER_APPEAL PolicyReviewStatusEnum_PolicyReviewStatus = 4
+)
+
+var PolicyReviewStatusEnum_PolicyReviewStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REVIEW_IN_PROGRESS",
+	3: "REVIEWED",
+	4: "UNDER_APPEAL",
+}
+var PolicyReviewStatusEnum_PolicyReviewStatus_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"REVIEW_IN_PROGRESS": 2,
+	"REVIEWED":           3,
+	"UNDER_APPEAL":       4,
+}
+
+func (x PolicyReviewStatusEnum_PolicyReviewStatus) String() string {
+	return proto.EnumName(PolicyReviewStatusEnum_PolicyReviewStatus_name, int32(x))
+}
+func (PolicyReviewStatusEnum_PolicyReviewStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_policy_review_status_bda03f767fc6a7da, []int{0, 0}
+}
+
+// Container for enum describing possible policy review statuses.
+type PolicyReviewStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyReviewStatusEnum) Reset()         { *m = PolicyReviewStatusEnum{} }
+func (m *PolicyReviewStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyReviewStatusEnum) ProtoMessage()    {}
+func (*PolicyReviewStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_review_status_bda03f767fc6a7da, []int{0}
+}
+func (m *PolicyReviewStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyReviewStatusEnum.Unmarshal(m, b)
+}
+func (m *PolicyReviewStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyReviewStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *PolicyReviewStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyReviewStatusEnum.Merge(dst, src)
+}
+func (m *PolicyReviewStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyReviewStatusEnum.Size(m)
+}
+func (m *PolicyReviewStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyReviewStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyReviewStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PolicyReviewStatusEnum)(nil), "google.ads.googleads.v0.enums.PolicyReviewStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PolicyReviewStatusEnum_PolicyReviewStatus", PolicyReviewStatusEnum_PolicyReviewStatus_name, PolicyReviewStatusEnum_PolicyReviewStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/policy_review_status.proto", fileDescriptor_policy_review_status_bda03f767fc6a7da)
+}
+
+var fileDescriptor_policy_review_status_bda03f767fc6a7da = []byte{
+	// 297 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xfb, 0x30,
+	0x1c, 0xc7, 0xff, 0xdd, 0xfe, 0xa8, 0x64, 0x03, 0x43, 0x0e, 0xf3, 0xb4, 0x83, 0x7b, 0x80, 0xb4,
+	0xe0, 0x45, 0xf0, 0x94, 0xd9, 0x58, 0x8a, 0x92, 0x85, 0x96, 0x76, 0x20, 0x85, 0x52, 0xd7, 0x12,
+	0x2a, 0x6d, 0x53, 0x9a, 0xb6, 0xe2, 0xdd, 0x27, 0xf1, 0xe8, 0x93, 0x88, 0x4f, 0x25, 0x4d, 0xdd,
+	0x2e, 0x43, 0x2f, 0xe1, 0x4b, 0xbe, 0xf9, 0x24, 0xbf, 0x7c, 0xc0, 0xb5, 0x90, 0x52, 0x14, 0x99,
+	0x99, 0xa4, 0xca, 0x1c, 0xe3, 0x90, 0x7a, 0xcb, 0xcc, 0xaa, 0xae, 0x54, 0x66, 0x2d, 0x8b, 0x7c,
+	0xf7, 0x1a, 0x37, 0x59, 0x9f, 0x67, 0x2f, 0xb1, 0x6a, 0x93, 0xb6, 0x53, 0xb8, 0x6e, 0x64, 0x2b,
+	0xd1, 0x72, 0x3c, 0x8e, 0x93, 0x54, 0xe1, 0x03, 0x89, 0x7b, 0x0b, 0x6b, 0x72, 0xf5, 0x66, 0x80,
+	0x05, 0xd7, 0xb4, 0xa7, 0x61, 0x5f, 0xb3, 0xb4, 0xea, 0xca, 0xd5, 0x33, 0x40, 0xc7, 0x0d, 0x3a,
+	0x07, 0xb3, 0x80, 0xf9, 0x9c, 0xde, 0xba, 0x77, 0x2e, 0xb5, 0xe1, 0x3f, 0x34, 0x03, 0xa7, 0x01,
+	0xbb, 0x67, 0x9b, 0x2d, 0x83, 0x06, 0x5a, 0x00, 0xe4, 0xd1, 0xd0, 0xa5, 0xdb, 0xd8, 0x65, 0x31,
+	0xf7, 0x36, 0x8e, 0x47, 0x7d, 0x1f, 0x4e, 0xd0, 0x1c, 0x9c, 0x8d, 0xfb, 0xd4, 0x86, 0x53, 0x04,
+	0xc1, 0x3c, 0x60, 0x36, 0xf5, 0x62, 0xc2, 0x39, 0x25, 0x0f, 0xf0, 0xff, 0xfa, 0xd3, 0x00, 0x97,
+	0x3b, 0x59, 0xe2, 0x3f, 0x87, 0x5d, 0x5f, 0x1c, 0xcf, 0xc3, 0x87, 0x4f, 0x72, 0xe3, 0x71, 0xfd,
+	0x43, 0x0a, 0x59, 0x24, 0x95, 0xc0, 0xb2, 0x11, 0xa6, 0xc8, 0x2a, 0xad, 0x60, 0x2f, 0xac, 0xce,
+	0xd5, 0x2f, 0xfe, 0x6e, 0xf4, 0xfa, 0x3e, 0x99, 0x3a, 0x84, 0x7c, 0x4c, 0x96, 0xce, 0x78, 0x15,
+	0x49, 0x15, 0x1e, 0xe3, 0x90, 0x42, 0x0b, 0x0f, 0x56, 0xd4, 0xd7, 0xbe, 0x8f, 0x48, 0xaa, 0xa2,
+	0x43, 0x1f, 0x85, 0x56, 0xa4, 0xfb, 0xa7, 0x13, 0xfd, 0xe8, 0xd5, 0x77, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0xaa, 0xe0, 0x6f, 0x5b, 0xb3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/policy_topic_entry_type.pb.go b/googleapis/ads/googleads/v0/enums/policy_topic_entry_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0c34069d3e4c857e15c1ee1632815a97941abb83
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/policy_topic_entry_type.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/policy_topic_entry_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible policy topic entry types.
+type PolicyTopicEntryTypeEnum_PolicyTopicEntryType int32
+
+const (
+	// No value has been specified.
+	PolicyTopicEntryTypeEnum_UNSPECIFIED PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyTopicEntryTypeEnum_UNKNOWN PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 1
+	// The resource will not be served.
+	PolicyTopicEntryTypeEnum_PROHIBITED PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 2
+	// The resource will not be served under some circumstances.
+	PolicyTopicEntryTypeEnum_LIMITED PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 4
+	// May be of interest, but does not limit how the resource is served.
+	PolicyTopicEntryTypeEnum_DESCRIPTIVE PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 5
+	// Could increase coverage beyond normal.
+	PolicyTopicEntryTypeEnum_BROADENING PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 6
+	// Constrained for all targeted countries, but may serve in other countries
+	// through area of interest.
+	PolicyTopicEntryTypeEnum_AREA_OF_INTEREST_ONLY PolicyTopicEntryTypeEnum_PolicyTopicEntryType = 7
+)
+
+var PolicyTopicEntryTypeEnum_PolicyTopicEntryType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PROHIBITED",
+	4: "LIMITED",
+	5: "DESCRIPTIVE",
+	6: "BROADENING",
+	7: "AREA_OF_INTEREST_ONLY",
+}
+var PolicyTopicEntryTypeEnum_PolicyTopicEntryType_value = map[string]int32{
+	"UNSPECIFIED":           0,
+	"UNKNOWN":               1,
+	"PROHIBITED":            2,
+	"LIMITED":               4,
+	"DESCRIPTIVE":           5,
+	"BROADENING":            6,
+	"AREA_OF_INTEREST_ONLY": 7,
+}
+
+func (x PolicyTopicEntryTypeEnum_PolicyTopicEntryType) String() string {
+	return proto.EnumName(PolicyTopicEntryTypeEnum_PolicyTopicEntryType_name, int32(x))
+}
+func (PolicyTopicEntryTypeEnum_PolicyTopicEntryType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_policy_topic_entry_type_52b04dc0fc027921, []int{0, 0}
+}
+
+// Container for enum describing possible policy topic entry types.
+type PolicyTopicEntryTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicEntryTypeEnum) Reset()         { *m = PolicyTopicEntryTypeEnum{} }
+func (m *PolicyTopicEntryTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyTopicEntryTypeEnum) ProtoMessage()    {}
+func (*PolicyTopicEntryTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_topic_entry_type_52b04dc0fc027921, []int{0}
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEntryTypeEnum.Unmarshal(m, b)
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEntryTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEntryTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEntryTypeEnum.Merge(dst, src)
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEntryTypeEnum.Size(m)
+}
+func (m *PolicyTopicEntryTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEntryTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEntryTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PolicyTopicEntryTypeEnum)(nil), "google.ads.googleads.v0.enums.PolicyTopicEntryTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PolicyTopicEntryTypeEnum_PolicyTopicEntryType", PolicyTopicEntryTypeEnum_PolicyTopicEntryType_name, PolicyTopicEntryTypeEnum_PolicyTopicEntryType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/policy_topic_entry_type.proto", fileDescriptor_policy_topic_entry_type_52b04dc0fc027921)
+}
+
+var fileDescriptor_policy_topic_entry_type_52b04dc0fc027921 = []byte{
+	// 324 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x6a, 0xc2, 0x30,
+	0x1c, 0xc6, 0x57, 0xb7, 0x29, 0x44, 0xd8, 0x4a, 0xd9, 0x60, 0x1e, 0x3c, 0xcc, 0x07, 0x48, 0x0b,
+	0x3b, 0x7a, 0x4a, 0x6d, 0x74, 0x61, 0x2e, 0x2d, 0xb5, 0x3a, 0x36, 0x0a, 0xc5, 0xd9, 0x10, 0x04,
+	0x6d, 0x82, 0xa9, 0x42, 0x1f, 0x62, 0x2f, 0xb1, 0xa3, 0x8f, 0xe2, 0x53, 0x8d, 0xa4, 0xd3, 0x93,
+	0xdb, 0x25, 0x7c, 0xe1, 0xcb, 0xef, 0x9f, 0xe4, 0x07, 0xfa, 0x5c, 0x08, 0xbe, 0x62, 0xee, 0x3c,
+	0x57, 0x6e, 0x1d, 0x75, 0xda, 0x79, 0x2e, 0x2b, 0xb6, 0x6b, 0xe5, 0x4a, 0xb1, 0x5a, 0x2e, 0xaa,
+	0xac, 0x14, 0x72, 0xb9, 0xc8, 0x58, 0x51, 0x6e, 0xaa, 0xac, 0xac, 0x24, 0x83, 0x72, 0x23, 0x4a,
+	0xe1, 0x74, 0x6b, 0x02, 0xce, 0x73, 0x05, 0x4f, 0x30, 0xdc, 0x79, 0xd0, 0xc0, 0xbd, 0xbd, 0x05,
+	0x1e, 0x22, 0x33, 0x20, 0xd1, 0x3c, 0xd6, 0x78, 0x52, 0x49, 0x86, 0x8b, 0xed, 0xba, 0xf7, 0x65,
+	0x81, 0xbb, 0x73, 0xa5, 0x73, 0x0b, 0xda, 0x53, 0x3a, 0x89, 0xf0, 0x80, 0x0c, 0x09, 0x0e, 0xec,
+	0x0b, 0xa7, 0x0d, 0x5a, 0x53, 0xfa, 0x42, 0xc3, 0x37, 0x6a, 0x5b, 0xce, 0x0d, 0x00, 0x51, 0x1c,
+	0x3e, 0x13, 0x9f, 0x24, 0x38, 0xb0, 0x1b, 0xba, 0x1c, 0x93, 0x57, 0xb3, 0xb9, 0xd2, 0x68, 0x80,
+	0x27, 0x83, 0x98, 0x44, 0x09, 0x99, 0x61, 0xfb, 0x5a, 0x9f, 0xf6, 0xe3, 0x10, 0x05, 0x98, 0x12,
+	0x3a, 0xb2, 0x9b, 0x4e, 0x07, 0xdc, 0xa3, 0x18, 0xa3, 0x2c, 0x1c, 0x66, 0x84, 0x26, 0x38, 0xc6,
+	0x93, 0x24, 0x0b, 0xe9, 0xf8, 0xdd, 0x6e, 0xf9, 0x07, 0x0b, 0x3c, 0x2e, 0xc4, 0x1a, 0xfe, 0xfb,
+	0x25, 0xbf, 0x73, 0xee, 0xc9, 0x91, 0x96, 0x11, 0x59, 0x1f, 0xfe, 0x2f, 0xcb, 0xc5, 0x6a, 0x5e,
+	0x70, 0x28, 0x36, 0xdc, 0xe5, 0xac, 0x30, 0xaa, 0x8e, 0x6e, 0xe5, 0x52, 0xfd, 0xa1, 0xba, 0x6f,
+	0xd6, 0xef, 0xc6, 0xe5, 0x08, 0xa1, 0x7d, 0xa3, 0x3b, 0xaa, 0x47, 0xa1, 0x5c, 0xc1, 0x3a, 0xea,
+	0x34, 0xf3, 0xa0, 0x76, 0xa7, 0x0e, 0xc7, 0x3e, 0x45, 0xb9, 0x4a, 0x4f, 0x7d, 0x3a, 0xf3, 0x52,
+	0xd3, 0x7f, 0x36, 0xcd, 0xa5, 0x4f, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x35, 0x02, 0xfc, 0x7f,
+	0xde, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/policy_topic_evidence_destination_mismatch_url_type.pb.go b/googleapis/ads/googleads/v0/enums/policy_topic_evidence_destination_mismatch_url_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..66c539f9315dbe4ee6d6ffaa14e6a70c4331c179
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/policy_topic_evidence_destination_mismatch_url_type.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/policy_topic_evidence_destination_mismatch_url_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible policy topic evidence destination mismatch url types.
+type PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType int32
+
+const (
+	// No value has been specified.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_UNSPECIFIED PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 0
+	// The received value is not known in this version.
+	//
+	// This is a response-only value.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_UNKNOWN PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 1
+	// The display url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_DISPLAY_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 2
+	// The final url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_FINAL_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 3
+	// The final mobile url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_FINAL_MOBILE_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 4
+	// The tracking url template, with substituted desktop url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_TRACKING_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 5
+	// The tracking url template, with substituted mobile url.
+	PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_MOBILE_TRACKING_URL PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType = 6
+)
+
+var PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DISPLAY_URL",
+	3: "FINAL_URL",
+	4: "FINAL_MOBILE_URL",
+	5: "TRACKING_URL",
+	6: "MOBILE_TRACKING_URL",
+}
+var PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"DISPLAY_URL":         2,
+	"FINAL_URL":           3,
+	"FINAL_MOBILE_URL":    4,
+	"TRACKING_URL":        5,
+	"MOBILE_TRACKING_URL": 6,
+}
+
+func (x PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType) String() string {
+	return proto.EnumName(PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_name, int32(x))
+}
+func (PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_policy_topic_evidence_destination_mismatch_url_type_d09c4b0e366cf65b, []int{0, 0}
+}
+
+// Container for enum describing possible policy topic evidence destination
+// mismatch url types.
+type PolicyTopicEvidenceDestinationMismatchUrlTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) Reset() {
+	*m = PolicyTopicEvidenceDestinationMismatchUrlTypeEnum{}
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) String() string {
+	return proto.CompactTextString(m)
+}
+func (*PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) ProtoMessage() {}
+func (*PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_topic_evidence_destination_mismatch_url_type_d09c4b0e366cf65b, []int{0}
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Unmarshal(m, b)
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Merge(dst, src)
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.Size(m)
+}
+func (m *PolicyTopicEvidenceDestinationMismatchUrlTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyTopicEvidenceDestinationMismatchUrlTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PolicyTopicEvidenceDestinationMismatchUrlTypeEnum)(nil), "google.ads.googleads.v0.enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType", PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_name, PolicyTopicEvidenceDestinationMismatchUrlTypeEnum_PolicyTopicEvidenceDestinationMismatchUrlType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/policy_topic_evidence_destination_mismatch_url_type.proto", fileDescriptor_policy_topic_evidence_destination_mismatch_url_type_d09c4b0e366cf65b)
+}
+
+var fileDescriptor_policy_topic_evidence_destination_mismatch_url_type_d09c4b0e366cf65b = []byte{
+	// 351 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xc1, 0x4e, 0x83, 0x30,
+	0x18, 0xc7, 0x65, 0xd3, 0x19, 0x3b, 0x8d, 0x04, 0x4d, 0x3c, 0xed, 0xe0, 0xee, 0x16, 0xd4, 0xa3,
+	0x27, 0xd8, 0xd8, 0x42, 0xc6, 0x18, 0xd9, 0xc6, 0x16, 0x0d, 0x49, 0x83, 0xd0, 0x60, 0x13, 0x68,
+	0x09, 0x65, 0x4b, 0xf6, 0x3a, 0x1e, 0x3d, 0xf8, 0x20, 0xbe, 0x86, 0x3e, 0x88, 0xa1, 0xb0, 0x19,
+	0x0f, 0x9a, 0xec, 0xd2, 0xfc, 0xbf, 0xef, 0xdf, 0xfe, 0x9a, 0xef, 0xff, 0x81, 0x65, 0xcc, 0x58,
+	0x9c, 0x60, 0x35, 0x88, 0xb8, 0x5a, 0xc9, 0x52, 0xad, 0x35, 0x15, 0xd3, 0x55, 0xca, 0xd5, 0x8c,
+	0x25, 0x24, 0xdc, 0xa0, 0x82, 0x65, 0x24, 0x44, 0x78, 0x4d, 0x22, 0x4c, 0x43, 0x8c, 0x22, 0xcc,
+	0x0b, 0x42, 0x83, 0x82, 0x30, 0x8a, 0x52, 0xc2, 0xd3, 0xa0, 0x08, 0x5f, 0xd0, 0x2a, 0x4f, 0x50,
+	0xb1, 0xc9, 0x30, 0xcc, 0x72, 0x56, 0x30, 0xa5, 0x53, 0xd1, 0x60, 0x10, 0x71, 0xb8, 0x03, 0xc3,
+	0xb5, 0x06, 0x05, 0xb8, 0xfb, 0x25, 0x81, 0x5b, 0x57, 0xc0, 0xe7, 0x25, 0xdb, 0xac, 0xd1, 0xfd,
+	0x1f, 0xf2, 0xb8, 0x06, 0x7b, 0x79, 0x32, 0xdf, 0x64, 0xd8, 0xa4, 0xab, 0xb4, 0xfb, 0x2e, 0x81,
+	0x9b, 0xbd, 0x5e, 0x29, 0xe7, 0xa0, 0xed, 0x39, 0x33, 0xd7, 0xec, 0x59, 0x03, 0xcb, 0xec, 0xcb,
+	0x07, 0x4a, 0x1b, 0x1c, 0x7b, 0xce, 0xc8, 0x99, 0x2c, 0x1d, 0x59, 0x2a, 0xdd, 0xbe, 0x35, 0x73,
+	0x6d, 0xfd, 0x11, 0x79, 0x53, 0x5b, 0x6e, 0x28, 0x67, 0xe0, 0x64, 0x60, 0x39, 0xba, 0x2d, 0xca,
+	0xa6, 0x72, 0x09, 0xe4, 0xaa, 0x1c, 0x4f, 0x0c, 0xcb, 0x36, 0x45, 0xf7, 0x50, 0x91, 0xc1, 0xe9,
+	0x7c, 0xaa, 0xf7, 0x46, 0x96, 0x33, 0x14, 0x9d, 0x23, 0xe5, 0x0a, 0x5c, 0xd4, 0x37, 0x7e, 0x19,
+	0x2d, 0xe3, 0x53, 0x02, 0xd7, 0x21, 0x4b, 0xe1, 0xbf, 0x61, 0x18, 0x77, 0x7b, 0xcd, 0xe4, 0x96,
+	0xf9, 0xba, 0xd2, 0x93, 0x51, 0x43, 0x63, 0x96, 0x04, 0x34, 0x86, 0x2c, 0x8f, 0xd5, 0x18, 0x53,
+	0x91, 0xfe, 0x76, 0x95, 0x19, 0xe1, 0x7f, 0x6c, 0xf6, 0x41, 0x9c, 0xaf, 0x8d, 0xe6, 0x50, 0xd7,
+	0xdf, 0x1a, 0x9d, 0x61, 0x85, 0xd2, 0x23, 0x0e, 0x2b, 0x59, 0xaa, 0x85, 0x06, 0xcb, 0xd4, 0xf9,
+	0xc7, 0xd6, 0xf7, 0xf5, 0x88, 0xfb, 0x3b, 0xdf, 0x5f, 0x68, 0xbe, 0xf0, 0x9f, 0x5b, 0xe2, 0xd3,
+	0xfb, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x46, 0x2f, 0x08, 0x4d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/preferred_content_type.pb.go b/googleapis/ads/googleads/v0/enums/preferred_content_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..733c5836b422a61bc0abf2fbcde696abf34fa15c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/preferred_content_type.pb.go
@@ -0,0 +1,111 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/preferred_content_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates preferred content criterion type.
+type PreferredContentTypeEnum_PreferredContentType int32
+
+const (
+	// Not specified.
+	PreferredContentTypeEnum_UNSPECIFIED PreferredContentTypeEnum_PreferredContentType = 0
+	// The value is unknown in this version.
+	PreferredContentTypeEnum_UNKNOWN PreferredContentTypeEnum_PreferredContentType = 1
+	// Represents top content on YouTube.
+	PreferredContentTypeEnum_YOUTUBE_TOP_CONTENT PreferredContentTypeEnum_PreferredContentType = 400
+)
+
+var PreferredContentTypeEnum_PreferredContentType_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	400: "YOUTUBE_TOP_CONTENT",
+}
+var PreferredContentTypeEnum_PreferredContentType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"YOUTUBE_TOP_CONTENT": 400,
+}
+
+func (x PreferredContentTypeEnum_PreferredContentType) String() string {
+	return proto.EnumName(PreferredContentTypeEnum_PreferredContentType_name, int32(x))
+}
+func (PreferredContentTypeEnum_PreferredContentType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_preferred_content_type_153c6f2bd55c50c3, []int{0, 0}
+}
+
+// Container for enumeration of preferred content criterion type.
+type PreferredContentTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PreferredContentTypeEnum) Reset()         { *m = PreferredContentTypeEnum{} }
+func (m *PreferredContentTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*PreferredContentTypeEnum) ProtoMessage()    {}
+func (*PreferredContentTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_preferred_content_type_153c6f2bd55c50c3, []int{0}
+}
+func (m *PreferredContentTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PreferredContentTypeEnum.Unmarshal(m, b)
+}
+func (m *PreferredContentTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PreferredContentTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *PreferredContentTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PreferredContentTypeEnum.Merge(dst, src)
+}
+func (m *PreferredContentTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_PreferredContentTypeEnum.Size(m)
+}
+func (m *PreferredContentTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PreferredContentTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PreferredContentTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PreferredContentTypeEnum)(nil), "google.ads.googleads.v0.enums.PreferredContentTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PreferredContentTypeEnum_PreferredContentType", PreferredContentTypeEnum_PreferredContentType_name, PreferredContentTypeEnum_PreferredContentType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/preferred_content_type.proto", fileDescriptor_preferred_content_type_153c6f2bd55c50c3)
+}
+
+var fileDescriptor_preferred_content_type_153c6f2bd55c50c3 = []byte{
+	// 274 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x82, 0xa2, 0xd4, 0xb4, 0xd4, 0xa2, 0xa2, 0xd4, 0x94, 0xf8, 0xe4, 0xfc,
+	0xbc, 0x92, 0xd4, 0xbc, 0x92, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c,
+	0x21, 0x59, 0x88, 0x06, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x5e, 0xbd, 0x32, 0x03, 0x3d, 0xb0,
+	0x5e, 0xa5, 0x2c, 0x2e, 0x89, 0x00, 0x98, 0x76, 0x67, 0x88, 0xee, 0x90, 0xca, 0x82, 0x54, 0xd7,
+	0xbc, 0xd2, 0x5c, 0x25, 0x3f, 0x2e, 0x11, 0x6c, 0x72, 0x42, 0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1,
+	0x01, 0xae, 0xce, 0x9e, 0x6e, 0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e,
+	0xde, 0x7e, 0xfe, 0xe1, 0x7e, 0x02, 0x8c, 0x42, 0x12, 0x5c, 0xc2, 0x91, 0xfe, 0xa1, 0x21, 0xa1,
+	0x4e, 0xae, 0xf1, 0x21, 0xfe, 0x01, 0xf1, 0xce, 0xfe, 0x7e, 0x21, 0xae, 0x7e, 0x21, 0x02, 0x13,
+	0x98, 0x9d, 0x4e, 0x31, 0x72, 0x29, 0x26, 0xe7, 0xe7, 0xea, 0xe1, 0x75, 0x91, 0x93, 0x24, 0x36,
+	0x3b, 0x03, 0x40, 0x7e, 0x09, 0x60, 0x8c, 0x72, 0x82, 0xea, 0x4d, 0xcf, 0xcf, 0x49, 0xcc, 0x4b,
+	0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0xfb, 0x14, 0x16, 0x32, 0x05, 0x99, 0xc5,
+	0x38, 0x02, 0xca, 0x1a, 0x4c, 0x2e, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24, 0xeb, 0x0e,
+	0x31, 0xca, 0x31, 0xa5, 0x58, 0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x40, 0x7e, 0x2f, 0x3e,
+	0x05, 0x93, 0x8f, 0x71, 0x4c, 0x29, 0x8e, 0x81, 0xcb, 0xc7, 0x84, 0x19, 0xc4, 0x80, 0xe5, 0x93,
+	0xd8, 0xc0, 0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc9, 0xfb, 0x86, 0xdb, 0x9c, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/price_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/price_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..cd40c6d0309c80ecf068bf9f6aab63b936410373
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/price_placeholder_field.pb.go
@@ -0,0 +1,382 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/price_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Price placeholder fields.
+type PricePlaceholderFieldEnum_PricePlaceholderField int32
+
+const (
+	// Not specified.
+	PricePlaceholderFieldEnum_UNSPECIFIED PricePlaceholderFieldEnum_PricePlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	PricePlaceholderFieldEnum_UNKNOWN PricePlaceholderFieldEnum_PricePlaceholderField = 1
+	// Data Type: STRING. The type of your price feed. Must match one of the
+	// predefined price feed type exactly.
+	PricePlaceholderFieldEnum_TYPE PricePlaceholderFieldEnum_PricePlaceholderField = 2
+	// Data Type: STRING. The qualifier of each price. Must match one of the
+	// predefined price qualifiers exactly.
+	PricePlaceholderFieldEnum_PRICE_QUALIFIER PricePlaceholderFieldEnum_PricePlaceholderField = 3
+	// Data Type: URL. Tracking template for the price feed when using Upgraded
+	// URLs.
+	PricePlaceholderFieldEnum_TRACKING_TEMPLATE PricePlaceholderFieldEnum_PricePlaceholderField = 4
+	// Data Type: STRING. Language of the price feed. Must match one of the
+	// available available locale codes exactly.
+	PricePlaceholderFieldEnum_LANGUAGE PricePlaceholderFieldEnum_PricePlaceholderField = 5
+	// Data Type: STRING. Final URL suffix for the price feed when using
+	// parallel tracking.
+	PricePlaceholderFieldEnum_FINAL_URL_SUFFIX PricePlaceholderFieldEnum_PricePlaceholderField = 6
+	// Data Type: STRING. The header of item 1 of the table.
+	PricePlaceholderFieldEnum_ITEM_1_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 100
+	// Data Type: STRING. The description of item 1 of the table.
+	PricePlaceholderFieldEnum_ITEM_1_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 101
+	// Data Type: PRICE. The price (money with currency) of item 1 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_1_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 102
+	// Data Type: STRING. The price unit of item 1 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_1_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 103
+	// Data Type: URL_LIST. The final URLs of item 1 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_1_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 104
+	// Data Type: URL_LIST. The final mobile URLs of item 1 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_1_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 105
+	// Data Type: STRING. The header of item 2 of the table.
+	PricePlaceholderFieldEnum_ITEM_2_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 200
+	// Data Type: STRING. The description of item 2 of the table.
+	PricePlaceholderFieldEnum_ITEM_2_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 201
+	// Data Type: PRICE. The price (money with currency) of item 2 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_2_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 202
+	// Data Type: STRING. The price unit of item 2 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_2_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 203
+	// Data Type: URL_LIST. The final URLs of item 2 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_2_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 204
+	// Data Type: URL_LIST. The final mobile URLs of item 2 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_2_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 205
+	// Data Type: STRING. The header of item 3 of the table.
+	PricePlaceholderFieldEnum_ITEM_3_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 300
+	// Data Type: STRING. The description of item 3 of the table.
+	PricePlaceholderFieldEnum_ITEM_3_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 301
+	// Data Type: PRICE. The price (money with currency) of item 3 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_3_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 302
+	// Data Type: STRING. The price unit of item 3 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_3_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 303
+	// Data Type: URL_LIST. The final URLs of item 3 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_3_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 304
+	// Data Type: URL_LIST. The final mobile URLs of item 3 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_3_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 305
+	// Data Type: STRING. The header of item 4 of the table.
+	PricePlaceholderFieldEnum_ITEM_4_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 400
+	// Data Type: STRING. The description of item 4 of the table.
+	PricePlaceholderFieldEnum_ITEM_4_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 401
+	// Data Type: PRICE. The price (money with currency) of item 4 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_4_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 402
+	// Data Type: STRING. The price unit of item 4 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_4_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 403
+	// Data Type: URL_LIST. The final URLs of item 4 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_4_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 404
+	// Data Type: URL_LIST. The final mobile URLs of item 4 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_4_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 405
+	// Data Type: STRING. The header of item 5 of the table.
+	PricePlaceholderFieldEnum_ITEM_5_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 500
+	// Data Type: STRING. The description of item 5 of the table.
+	PricePlaceholderFieldEnum_ITEM_5_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 501
+	// Data Type: PRICE. The price (money with currency) of item 5 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_5_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 502
+	// Data Type: STRING. The price unit of item 5 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_5_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 503
+	// Data Type: URL_LIST. The final URLs of item 5 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_5_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 504
+	// Data Type: URL_LIST. The final mobile URLs of item 5 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_5_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 505
+	// Data Type: STRING. The header of item 6 of the table.
+	PricePlaceholderFieldEnum_ITEM_6_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 600
+	// Data Type: STRING. The description of item 6 of the table.
+	PricePlaceholderFieldEnum_ITEM_6_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 601
+	// Data Type: PRICE. The price (money with currency) of item 6 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_6_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 602
+	// Data Type: STRING. The price unit of item 6 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_6_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 603
+	// Data Type: URL_LIST. The final URLs of item 6 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_6_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 604
+	// Data Type: URL_LIST. The final mobile URLs of item 6 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_6_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 605
+	// Data Type: STRING. The header of item 7 of the table.
+	PricePlaceholderFieldEnum_ITEM_7_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 700
+	// Data Type: STRING. The description of item 7 of the table.
+	PricePlaceholderFieldEnum_ITEM_7_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 701
+	// Data Type: PRICE. The price (money with currency) of item 7 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_7_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 702
+	// Data Type: STRING. The price unit of item 7 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_7_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 703
+	// Data Type: URL_LIST. The final URLs of item 7 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_7_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 704
+	// Data Type: URL_LIST. The final mobile URLs of item 7 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_7_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 705
+	// Data Type: STRING. The header of item 8 of the table.
+	PricePlaceholderFieldEnum_ITEM_8_HEADER PricePlaceholderFieldEnum_PricePlaceholderField = 800
+	// Data Type: STRING. The description of item 8 of the table.
+	PricePlaceholderFieldEnum_ITEM_8_DESCRIPTION PricePlaceholderFieldEnum_PricePlaceholderField = 801
+	// Data Type: PRICE. The price (money with currency) of item 8 of the table,
+	// e.g., 30 USD. The currency must match one of the available currencies.
+	PricePlaceholderFieldEnum_ITEM_8_PRICE PricePlaceholderFieldEnum_PricePlaceholderField = 802
+	// Data Type: STRING. The price unit of item 8 of the table. Must match one
+	// of the predefined price units.
+	PricePlaceholderFieldEnum_ITEM_8_UNIT PricePlaceholderFieldEnum_PricePlaceholderField = 803
+	// Data Type: URL_LIST. The final URLs of item 8 of the table when using
+	// Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_8_FINAL_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 804
+	// Data Type: URL_LIST. The final mobile URLs of item 8 of the table when
+	// using Upgraded URLs.
+	PricePlaceholderFieldEnum_ITEM_8_FINAL_MOBILE_URLS PricePlaceholderFieldEnum_PricePlaceholderField = 805
+)
+
+var PricePlaceholderFieldEnum_PricePlaceholderField_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	2:   "TYPE",
+	3:   "PRICE_QUALIFIER",
+	4:   "TRACKING_TEMPLATE",
+	5:   "LANGUAGE",
+	6:   "FINAL_URL_SUFFIX",
+	100: "ITEM_1_HEADER",
+	101: "ITEM_1_DESCRIPTION",
+	102: "ITEM_1_PRICE",
+	103: "ITEM_1_UNIT",
+	104: "ITEM_1_FINAL_URLS",
+	105: "ITEM_1_FINAL_MOBILE_URLS",
+	200: "ITEM_2_HEADER",
+	201: "ITEM_2_DESCRIPTION",
+	202: "ITEM_2_PRICE",
+	203: "ITEM_2_UNIT",
+	204: "ITEM_2_FINAL_URLS",
+	205: "ITEM_2_FINAL_MOBILE_URLS",
+	300: "ITEM_3_HEADER",
+	301: "ITEM_3_DESCRIPTION",
+	302: "ITEM_3_PRICE",
+	303: "ITEM_3_UNIT",
+	304: "ITEM_3_FINAL_URLS",
+	305: "ITEM_3_FINAL_MOBILE_URLS",
+	400: "ITEM_4_HEADER",
+	401: "ITEM_4_DESCRIPTION",
+	402: "ITEM_4_PRICE",
+	403: "ITEM_4_UNIT",
+	404: "ITEM_4_FINAL_URLS",
+	405: "ITEM_4_FINAL_MOBILE_URLS",
+	500: "ITEM_5_HEADER",
+	501: "ITEM_5_DESCRIPTION",
+	502: "ITEM_5_PRICE",
+	503: "ITEM_5_UNIT",
+	504: "ITEM_5_FINAL_URLS",
+	505: "ITEM_5_FINAL_MOBILE_URLS",
+	600: "ITEM_6_HEADER",
+	601: "ITEM_6_DESCRIPTION",
+	602: "ITEM_6_PRICE",
+	603: "ITEM_6_UNIT",
+	604: "ITEM_6_FINAL_URLS",
+	605: "ITEM_6_FINAL_MOBILE_URLS",
+	700: "ITEM_7_HEADER",
+	701: "ITEM_7_DESCRIPTION",
+	702: "ITEM_7_PRICE",
+	703: "ITEM_7_UNIT",
+	704: "ITEM_7_FINAL_URLS",
+	705: "ITEM_7_FINAL_MOBILE_URLS",
+	800: "ITEM_8_HEADER",
+	801: "ITEM_8_DESCRIPTION",
+	802: "ITEM_8_PRICE",
+	803: "ITEM_8_UNIT",
+	804: "ITEM_8_FINAL_URLS",
+	805: "ITEM_8_FINAL_MOBILE_URLS",
+}
+var PricePlaceholderFieldEnum_PricePlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"TYPE":                     2,
+	"PRICE_QUALIFIER":          3,
+	"TRACKING_TEMPLATE":        4,
+	"LANGUAGE":                 5,
+	"FINAL_URL_SUFFIX":         6,
+	"ITEM_1_HEADER":            100,
+	"ITEM_1_DESCRIPTION":       101,
+	"ITEM_1_PRICE":             102,
+	"ITEM_1_UNIT":              103,
+	"ITEM_1_FINAL_URLS":        104,
+	"ITEM_1_FINAL_MOBILE_URLS": 105,
+	"ITEM_2_HEADER":            200,
+	"ITEM_2_DESCRIPTION":       201,
+	"ITEM_2_PRICE":             202,
+	"ITEM_2_UNIT":              203,
+	"ITEM_2_FINAL_URLS":        204,
+	"ITEM_2_FINAL_MOBILE_URLS": 205,
+	"ITEM_3_HEADER":            300,
+	"ITEM_3_DESCRIPTION":       301,
+	"ITEM_3_PRICE":             302,
+	"ITEM_3_UNIT":              303,
+	"ITEM_3_FINAL_URLS":        304,
+	"ITEM_3_FINAL_MOBILE_URLS": 305,
+	"ITEM_4_HEADER":            400,
+	"ITEM_4_DESCRIPTION":       401,
+	"ITEM_4_PRICE":             402,
+	"ITEM_4_UNIT":              403,
+	"ITEM_4_FINAL_URLS":        404,
+	"ITEM_4_FINAL_MOBILE_URLS": 405,
+	"ITEM_5_HEADER":            500,
+	"ITEM_5_DESCRIPTION":       501,
+	"ITEM_5_PRICE":             502,
+	"ITEM_5_UNIT":              503,
+	"ITEM_5_FINAL_URLS":        504,
+	"ITEM_5_FINAL_MOBILE_URLS": 505,
+	"ITEM_6_HEADER":            600,
+	"ITEM_6_DESCRIPTION":       601,
+	"ITEM_6_PRICE":             602,
+	"ITEM_6_UNIT":              603,
+	"ITEM_6_FINAL_URLS":        604,
+	"ITEM_6_FINAL_MOBILE_URLS": 605,
+	"ITEM_7_HEADER":            700,
+	"ITEM_7_DESCRIPTION":       701,
+	"ITEM_7_PRICE":             702,
+	"ITEM_7_UNIT":              703,
+	"ITEM_7_FINAL_URLS":        704,
+	"ITEM_7_FINAL_MOBILE_URLS": 705,
+	"ITEM_8_HEADER":            800,
+	"ITEM_8_DESCRIPTION":       801,
+	"ITEM_8_PRICE":             802,
+	"ITEM_8_UNIT":              803,
+	"ITEM_8_FINAL_URLS":        804,
+	"ITEM_8_FINAL_MOBILE_URLS": 805,
+}
+
+func (x PricePlaceholderFieldEnum_PricePlaceholderField) String() string {
+	return proto.EnumName(PricePlaceholderFieldEnum_PricePlaceholderField_name, int32(x))
+}
+func (PricePlaceholderFieldEnum_PricePlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_price_placeholder_field_d206949894631163, []int{0, 0}
+}
+
+// Values for Price placeholder fields.
+type PricePlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PricePlaceholderFieldEnum) Reset()         { *m = PricePlaceholderFieldEnum{} }
+func (m *PricePlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*PricePlaceholderFieldEnum) ProtoMessage()    {}
+func (*PricePlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_price_placeholder_field_d206949894631163, []int{0}
+}
+func (m *PricePlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PricePlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *PricePlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PricePlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *PricePlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PricePlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *PricePlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_PricePlaceholderFieldEnum.Size(m)
+}
+func (m *PricePlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PricePlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PricePlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PricePlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.PricePlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PricePlaceholderFieldEnum_PricePlaceholderField", PricePlaceholderFieldEnum_PricePlaceholderField_name, PricePlaceholderFieldEnum_PricePlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/price_placeholder_field.proto", fileDescriptor_price_placeholder_field_d206949894631163)
+}
+
+var fileDescriptor_price_placeholder_field_d206949894631163 = []byte{
+	// 692 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xd4, 0x49, 0x6f, 0xd3, 0x5a,
+	0x14, 0x07, 0xf0, 0xe7, 0x21, 0x7e, 0xed, 0x6d, 0x9f, 0x7a, 0x7b, 0xdf, 0x6b, 0x1f, 0x20, 0xba,
+	0xa0, 0x1f, 0xc0, 0x09, 0x99, 0xa5, 0xae, 0x9c, 0xd4, 0x09, 0x56, 0x53, 0xd7, 0x24, 0x71, 0x19,
+	0x14, 0xc9, 0x0a, 0xb5, 0xeb, 0x46, 0x4a, 0xe3, 0x28, 0xa6, 0xfd, 0x1c, 0x8c, 0x7b, 0x28, 0xb0,
+	0x41, 0x8c, 0x7b, 0xc6, 0x1d, 0xb4, 0xb0, 0x60, 0xc7, 0xf8, 0x19, 0xd8, 0x30, 0xee, 0x90, 0xe3,
+	0xeb, 0x63, 0x5b, 0x32, 0x6c, 0xa2, 0xa3, 0x73, 0xf2, 0xf7, 0xfd, 0xad, 0xfe, 0x68, 0xc9, 0x76,
+	0x1c, 0xbb, 0x6f, 0xa5, 0xbb, 0xa6, 0x9b, 0xf6, 0x47, 0x6f, 0xda, 0xcd, 0xa4, 0xad, 0xc1, 0xce,
+	0xb6, 0x9b, 0x1e, 0x8e, 0x7a, 0x1b, 0x96, 0x31, 0xec, 0x77, 0x37, 0xac, 0x2d, 0xa7, 0x6f, 0x5a,
+	0x23, 0x63, 0xb3, 0x67, 0xf5, 0x4d, 0x71, 0x38, 0x72, 0xce, 0x3b, 0x64, 0xc1, 0x4f, 0x88, 0x5d,
+	0xd3, 0x15, 0x21, 0x2c, 0xee, 0x66, 0xc4, 0x71, 0x78, 0xf1, 0xf3, 0x24, 0x3a, 0xac, 0x79, 0x1f,
+	0xd0, 0xc2, 0x7c, 0xcd, 0x8b, 0xcb, 0x83, 0x9d, 0xed, 0xc5, 0x37, 0x93, 0x68, 0x2e, 0xf1, 0x4a,
+	0x66, 0xd0, 0x94, 0xae, 0xb6, 0x34, 0xb9, 0xaa, 0xd4, 0x14, 0x79, 0x19, 0xff, 0x45, 0xa6, 0xd0,
+	0xdf, 0xba, 0xba, 0xa2, 0xae, 0x9d, 0x52, 0x31, 0x43, 0x26, 0x10, 0xdf, 0x3e, 0xa3, 0xc9, 0x98,
+	0x25, 0xff, 0xa2, 0x19, 0xad, 0xa9, 0x54, 0x65, 0xe3, 0xa4, 0x2e, 0x35, 0xbc, 0xff, 0x36, 0x31,
+	0x47, 0xe6, 0xd0, 0x6c, 0xbb, 0x29, 0x55, 0x57, 0x14, 0xb5, 0x6e, 0xb4, 0xe5, 0x55, 0xad, 0x21,
+	0xb5, 0x65, 0xcc, 0x93, 0x69, 0x34, 0xd1, 0x90, 0xd4, 0xba, 0x2e, 0xd5, 0x65, 0x9c, 0x22, 0xff,
+	0x21, 0x5c, 0x53, 0x54, 0xa9, 0x61, 0xe8, 0xcd, 0x86, 0xd1, 0xd2, 0x6b, 0x35, 0xe5, 0x34, 0x16,
+	0xc8, 0x2c, 0xfa, 0x47, 0x69, 0xcb, 0xab, 0xc6, 0x71, 0xe3, 0x84, 0x2c, 0x2d, 0xcb, 0x4d, 0x6c,
+	0x92, 0x79, 0x44, 0xe8, 0x6a, 0x59, 0x6e, 0x55, 0x9b, 0x8a, 0xd6, 0x56, 0xd6, 0x54, 0x6c, 0x11,
+	0x8c, 0xa6, 0xe9, 0x7e, 0x2c, 0xc0, 0x9b, 0x1e, 0x9a, 0x6e, 0x74, 0x55, 0x69, 0x63, 0xdb, 0x83,
+	0xd0, 0x05, 0x3c, 0xd5, 0xc2, 0x5b, 0xe4, 0x28, 0x3a, 0x14, 0x5b, 0xaf, 0xae, 0x55, 0x94, 0x86,
+	0xec, 0x5f, 0x7b, 0x84, 0x50, 0x42, 0x36, 0x20, 0xbc, 0x60, 0xc8, 0xff, 0xd4, 0x90, 0x8d, 0x19,
+	0x5e, 0x32, 0x64, 0x96, 0x22, 0xb2, 0x14, 0xb1, 0xcf, 0x10, 0x4c, 0x15, 0x59, 0x5f, 0x71, 0xc0,
+	0x90, 0x79, 0xca, 0xc8, 0x46, 0x19, 0xaf, 0x18, 0xb2, 0x40, 0x1d, 0xd9, 0x04, 0xc7, 0x6b, 0x06,
+	0x20, 0xb9, 0x00, 0x72, 0x87, 0x05, 0x48, 0x2e, 0x06, 0xb9, 0xcb, 0x02, 0x24, 0x47, 0x21, 0xf7,
+	0x58, 0x80, 0xe4, 0x7c, 0xc8, 0x7d, 0x16, 0x20, 0xb9, 0x28, 0xe4, 0x01, 0x0b, 0x90, 0x5c, 0x02,
+	0xe4, 0x21, 0x0b, 0x90, 0x7c, 0x00, 0xb9, 0xc0, 0x01, 0x24, 0x1f, 0x83, 0x5c, 0xe4, 0x00, 0x92,
+	0xa7, 0x90, 0x4b, 0x1c, 0x40, 0xf2, 0x3e, 0xe4, 0x32, 0x07, 0x90, 0x7c, 0x14, 0x72, 0x85, 0x03,
+	0x48, 0x3e, 0x01, 0x72, 0x95, 0x03, 0x48, 0x21, 0x80, 0x7c, 0x09, 0x21, 0x85, 0x18, 0xe4, 0x6b,
+	0x08, 0x29, 0x50, 0xc8, 0xb7, 0x10, 0x52, 0xf0, 0x21, 0xdf, 0x43, 0x48, 0x21, 0x0a, 0xf9, 0x11,
+	0x42, 0x0a, 0x09, 0x90, 0x9f, 0x21, 0xa4, 0x18, 0x40, 0xde, 0xf2, 0x00, 0x29, 0xc6, 0x20, 0xef,
+	0x78, 0x80, 0x14, 0x29, 0xe4, 0x3d, 0x0f, 0x90, 0xa2, 0x0f, 0xf9, 0xc0, 0x03, 0xa4, 0x18, 0x85,
+	0x7c, 0xe4, 0x01, 0x52, 0x4c, 0x80, 0x7c, 0xe2, 0x01, 0x52, 0x0a, 0x20, 0x8f, 0x52, 0x00, 0x29,
+	0xc5, 0x20, 0x8f, 0x53, 0x00, 0x29, 0x51, 0xc8, 0x93, 0x14, 0x40, 0x4a, 0x3e, 0xe4, 0x69, 0x0a,
+	0x20, 0xa5, 0x28, 0xe4, 0x59, 0x0a, 0x20, 0xa5, 0x04, 0xc8, 0xf3, 0x14, 0x40, 0xca, 0x01, 0xe4,
+	0x9a, 0x00, 0x90, 0x72, 0x0c, 0x72, 0x5d, 0x00, 0x48, 0x99, 0x42, 0xf6, 0x04, 0x80, 0x94, 0x7d,
+	0xc8, 0x0d, 0x01, 0x20, 0xe5, 0x28, 0xe4, 0xa6, 0x00, 0x90, 0x72, 0x02, 0xe4, 0x96, 0x50, 0x39,
+	0x60, 0xd0, 0xb1, 0x0d, 0x67, 0x5b, 0xfc, 0x63, 0x2f, 0x56, 0x8e, 0x24, 0xd6, 0x9e, 0xe6, 0x55,
+	0xaa, 0xc6, 0x9c, 0xad, 0xd0, 0xb0, 0xed, 0xf4, 0xbb, 0x03, 0x5b, 0x74, 0x46, 0x76, 0xda, 0xb6,
+	0x06, 0xe3, 0xc2, 0x0d, 0x1a, 0x7a, 0xd8, 0x73, 0x7f, 0x53, 0xd8, 0x4b, 0xe3, 0xdf, 0x3d, 0x96,
+	0xab, 0x4b, 0xd2, 0x6d, 0x76, 0xa1, 0xee, 0x7f, 0x4a, 0x32, 0x5d, 0xd1, 0x1f, 0xbd, 0x69, 0x3d,
+	0x23, 0x7a, 0x05, 0xec, 0xee, 0x07, 0xf7, 0x8e, 0x64, 0xba, 0x1d, 0xb8, 0x77, 0xd6, 0x33, 0x9d,
+	0xf1, 0xfd, 0x9c, 0x30, 0x7e, 0x34, 0xf7, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x4a, 0x19, 0xe7,
+	0x24, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/product_channel.pb.go b/googleapis/ads/googleads/v0/enums/product_channel.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..01939e553b02a1d70342463580adde469246c00f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/product_channel.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/product_channel.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing the locality of a product offer.
+type ProductChannelEnum_ProductChannel int32
+
+const (
+	// Not specified.
+	ProductChannelEnum_UNSPECIFIED ProductChannelEnum_ProductChannel = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductChannelEnum_UNKNOWN ProductChannelEnum_ProductChannel = 1
+	// The item is sold online.
+	ProductChannelEnum_ONLINE ProductChannelEnum_ProductChannel = 2
+	// The item is sold in local stores.
+	ProductChannelEnum_LOCAL ProductChannelEnum_ProductChannel = 3
+)
+
+var ProductChannelEnum_ProductChannel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ONLINE",
+	3: "LOCAL",
+}
+var ProductChannelEnum_ProductChannel_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ONLINE":      2,
+	"LOCAL":       3,
+}
+
+func (x ProductChannelEnum_ProductChannel) String() string {
+	return proto.EnumName(ProductChannelEnum_ProductChannel_name, int32(x))
+}
+func (ProductChannelEnum_ProductChannel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_product_channel_81186d77dbd458b5, []int{0, 0}
+}
+
+// Locality of a product offer.
+type ProductChannelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductChannelEnum) Reset()         { *m = ProductChannelEnum{} }
+func (m *ProductChannelEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelEnum) ProtoMessage()    {}
+func (*ProductChannelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_product_channel_81186d77dbd458b5, []int{0}
+}
+func (m *ProductChannelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelEnum.Unmarshal(m, b)
+}
+func (m *ProductChannelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelEnum.Marshal(b, m, deterministic)
+}
+func (dst *ProductChannelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelEnum.Merge(dst, src)
+}
+func (m *ProductChannelEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelEnum.Size(m)
+}
+func (m *ProductChannelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ProductChannelEnum)(nil), "google.ads.googleads.v0.enums.ProductChannelEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ProductChannelEnum_ProductChannel", ProductChannelEnum_ProductChannel_name, ProductChannelEnum_ProductChannel_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/product_channel.proto", fileDescriptor_product_channel_81186d77dbd458b5)
+}
+
+var fileDescriptor_product_channel_81186d77dbd458b5 = []byte{
+	// 259 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x82, 0xa2, 0xfc, 0x94, 0xd2, 0xe4, 0x92, 0xf8, 0xe4, 0x8c, 0xc4, 0xbc,
+	0xbc, 0xd4, 0x1c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x4a, 0xbd, 0xc4, 0x94,
+	0x62, 0x3d, 0xb8, 0x26, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x26, 0xa5, 0x68, 0x2e, 0xa1, 0x00, 0x88,
+	0x3e, 0x67, 0x88, 0x36, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x57, 0x2e, 0x3e, 0x54, 0x51, 0x21, 0x7e,
+	0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21,
+	0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x2e, 0x2e, 0x36,
+	0x7f, 0x3f, 0x1f, 0x4f, 0x3f, 0x57, 0x01, 0x26, 0x21, 0x4e, 0x2e, 0x56, 0x1f, 0x7f, 0x67, 0x47,
+	0x1f, 0x01, 0x66, 0xa7, 0x23, 0x8c, 0x5c, 0x8a, 0xc9, 0xf9, 0xb9, 0x7a, 0x78, 0x9d, 0xe0, 0x24,
+	0x8c, 0x6a, 0x55, 0x00, 0xc8, 0xd9, 0x01, 0x8c, 0x51, 0x4e, 0x50, 0x5d, 0xe9, 0xf9, 0x39, 0x89,
+	0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79, 0x60, 0x4f, 0xc1, 0x7c, 0x5f, 0x90,
+	0x59, 0x8c, 0x23, 0x30, 0xac, 0xc1, 0xe4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0xb2,
+	0xee, 0x10, 0xa3, 0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0xe4, 0xd9,
+	0xe2, 0x53, 0x30, 0xf9, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x7c, 0x4c, 0x98, 0x41, 0x0c, 0x58,
+	0x3e, 0x89, 0x0d, 0x6c, 0xa9, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x47, 0xf7, 0x35, 0x74, 0x80,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/product_channel_exclusivity.pb.go b/googleapis/ads/googleads/v0/enums/product_channel_exclusivity.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..095db05d23cf43ce661bb024e5d127048440f110
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/product_channel_exclusivity.pb.go
@@ -0,0 +1,117 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/product_channel_exclusivity.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing the availability of a product offer.
+type ProductChannelExclusivityEnum_ProductChannelExclusivity int32
+
+const (
+	// Not specified.
+	ProductChannelExclusivityEnum_UNSPECIFIED ProductChannelExclusivityEnum_ProductChannelExclusivity = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductChannelExclusivityEnum_UNKNOWN ProductChannelExclusivityEnum_ProductChannelExclusivity = 1
+	// The item is sold through one channel only, either local stores or online
+	// as indicated by its ProductChannel.
+	ProductChannelExclusivityEnum_SINGLE_CHANNEL ProductChannelExclusivityEnum_ProductChannelExclusivity = 2
+	// The item is matched to its online or local stores counterpart, indicating
+	// it is available for purchase in both ShoppingProductChannels.
+	ProductChannelExclusivityEnum_MULTI_CHANNEL ProductChannelExclusivityEnum_ProductChannelExclusivity = 3
+)
+
+var ProductChannelExclusivityEnum_ProductChannelExclusivity_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SINGLE_CHANNEL",
+	3: "MULTI_CHANNEL",
+}
+var ProductChannelExclusivityEnum_ProductChannelExclusivity_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"SINGLE_CHANNEL": 2,
+	"MULTI_CHANNEL":  3,
+}
+
+func (x ProductChannelExclusivityEnum_ProductChannelExclusivity) String() string {
+	return proto.EnumName(ProductChannelExclusivityEnum_ProductChannelExclusivity_name, int32(x))
+}
+func (ProductChannelExclusivityEnum_ProductChannelExclusivity) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_product_channel_exclusivity_8ac2b04352a1c000, []int{0, 0}
+}
+
+// Availability of a product offer.
+type ProductChannelExclusivityEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductChannelExclusivityEnum) Reset()         { *m = ProductChannelExclusivityEnum{} }
+func (m *ProductChannelExclusivityEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductChannelExclusivityEnum) ProtoMessage()    {}
+func (*ProductChannelExclusivityEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_product_channel_exclusivity_8ac2b04352a1c000, []int{0}
+}
+func (m *ProductChannelExclusivityEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductChannelExclusivityEnum.Unmarshal(m, b)
+}
+func (m *ProductChannelExclusivityEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductChannelExclusivityEnum.Marshal(b, m, deterministic)
+}
+func (dst *ProductChannelExclusivityEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductChannelExclusivityEnum.Merge(dst, src)
+}
+func (m *ProductChannelExclusivityEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductChannelExclusivityEnum.Size(m)
+}
+func (m *ProductChannelExclusivityEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductChannelExclusivityEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductChannelExclusivityEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ProductChannelExclusivityEnum)(nil), "google.ads.googleads.v0.enums.ProductChannelExclusivityEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ProductChannelExclusivityEnum_ProductChannelExclusivity", ProductChannelExclusivityEnum_ProductChannelExclusivity_name, ProductChannelExclusivityEnum_ProductChannelExclusivity_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/product_channel_exclusivity.proto", fileDescriptor_product_channel_exclusivity_8ac2b04352a1c000)
+}
+
+var fileDescriptor_product_channel_exclusivity_8ac2b04352a1c000 = []byte{
+	// 286 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x82, 0xa2, 0xfc, 0x94, 0xd2, 0xe4, 0x92, 0xf8, 0xe4, 0x8c, 0xc4, 0xbc,
+	0xbc, 0xd4, 0x9c, 0xf8, 0xd4, 0x8a, 0xe4, 0x9c, 0xd2, 0xe2, 0xcc, 0xb2, 0xcc, 0x92, 0x4a, 0xbd,
+	0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x2e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x01,
+	0x7a, 0x65, 0x06, 0x7a, 0x60, 0x03, 0x94, 0x1a, 0x19, 0xb9, 0x64, 0x03, 0x20, 0x86, 0x38, 0x43,
+	0xcc, 0x70, 0x45, 0x18, 0xe1, 0x9a, 0x57, 0x9a, 0xab, 0x94, 0xc0, 0x25, 0x89, 0x53, 0x81, 0x10,
+	0x3f, 0x17, 0x77, 0xa8, 0x5f, 0x70, 0x80, 0xab, 0xb3, 0xa7, 0x9b, 0xa7, 0xab, 0x8b, 0x00, 0x83,
+	0x10, 0x37, 0x17, 0x7b, 0xa8, 0x9f, 0xb7, 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0xa3, 0x90, 0x10, 0x17,
+	0x5f, 0xb0, 0xa7, 0x9f, 0xbb, 0x8f, 0x6b, 0xbc, 0xb3, 0x87, 0xa3, 0x9f, 0x9f, 0xab, 0x8f, 0x00,
+	0x93, 0x90, 0x20, 0x17, 0xaf, 0x6f, 0xa8, 0x4f, 0x88, 0x27, 0x5c, 0x88, 0xd9, 0xe9, 0x3c, 0x23,
+	0x97, 0x62, 0x72, 0x7e, 0xae, 0x1e, 0x5e, 0x97, 0x3a, 0xc9, 0xe1, 0x74, 0x45, 0x00, 0xc8, 0xa3,
+	0x01, 0x8c, 0x51, 0x4e, 0x50, 0x03, 0xd2, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2,
+	0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0xc1, 0x00, 0x0b, 0xbb, 0x82, 0xcc, 0x62, 0x1c, 0x41, 0x69, 0x0d,
+	0x26, 0x17, 0x31, 0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x92, 0x75, 0x87, 0x18, 0xe5, 0x98, 0x52,
+	0xac, 0x07, 0x61, 0x82, 0x58, 0x61, 0x06, 0x7a, 0xa0, 0x20, 0x29, 0x3e, 0x05, 0x93, 0x8f, 0x71,
+	0x4c, 0x29, 0x8e, 0x81, 0xcb, 0xc7, 0x84, 0x19, 0xc4, 0x80, 0xe5, 0x93, 0xd8, 0xc0, 0x96, 0x1a,
+	0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xf1, 0xef, 0x78, 0xbe, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/product_condition.pb.go b/googleapis/ads/googleads/v0/enums/product_condition.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..adebe3ff6cc5cebc58ea1243708e9149a05032ac
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/product_condition.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/product_condition.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing the condition of a product offer.
+type ProductConditionEnum_ProductCondition int32
+
+const (
+	// Not specified.
+	ProductConditionEnum_UNSPECIFIED ProductConditionEnum_ProductCondition = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductConditionEnum_UNKNOWN ProductConditionEnum_ProductCondition = 1
+	// The product condition is new.
+	ProductConditionEnum_NEW ProductConditionEnum_ProductCondition = 3
+	// The product condition is refurbished.
+	ProductConditionEnum_REFURBISHED ProductConditionEnum_ProductCondition = 4
+	// The product condition is used.
+	ProductConditionEnum_USED ProductConditionEnum_ProductCondition = 5
+)
+
+var ProductConditionEnum_ProductCondition_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "NEW",
+	4: "REFURBISHED",
+	5: "USED",
+}
+var ProductConditionEnum_ProductCondition_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"NEW":         3,
+	"REFURBISHED": 4,
+	"USED":        5,
+}
+
+func (x ProductConditionEnum_ProductCondition) String() string {
+	return proto.EnumName(ProductConditionEnum_ProductCondition_name, int32(x))
+}
+func (ProductConditionEnum_ProductCondition) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_product_condition_929fee96e58b4c70, []int{0, 0}
+}
+
+// Condition of a product offer.
+type ProductConditionEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductConditionEnum) Reset()         { *m = ProductConditionEnum{} }
+func (m *ProductConditionEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductConditionEnum) ProtoMessage()    {}
+func (*ProductConditionEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_product_condition_929fee96e58b4c70, []int{0}
+}
+func (m *ProductConditionEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductConditionEnum.Unmarshal(m, b)
+}
+func (m *ProductConditionEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductConditionEnum.Marshal(b, m, deterministic)
+}
+func (dst *ProductConditionEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductConditionEnum.Merge(dst, src)
+}
+func (m *ProductConditionEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductConditionEnum.Size(m)
+}
+func (m *ProductConditionEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductConditionEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductConditionEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ProductConditionEnum)(nil), "google.ads.googleads.v0.enums.ProductConditionEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ProductConditionEnum_ProductCondition", ProductConditionEnum_ProductCondition_name, ProductConditionEnum_ProductCondition_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/product_condition.proto", fileDescriptor_product_condition_929fee96e58b4c70)
+}
+
+var fileDescriptor_product_condition_929fee96e58b4c70 = []byte{
+	// 273 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x82, 0xa2, 0xfc, 0x94, 0xd2, 0xe4, 0x92, 0xf8, 0xe4, 0xfc, 0xbc, 0x94,
+	0xcc, 0x92, 0xcc, 0xfc, 0x3c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x5a, 0xbd,
+	0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x36, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x36, 0xa5, 0x1c, 0x2e, 0x91,
+	0x00, 0x88, 0x4e, 0x67, 0x98, 0x46, 0xd7, 0xbc, 0xd2, 0x5c, 0xa5, 0x10, 0x2e, 0x01, 0x74, 0x71,
+	0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01,
+	0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46, 0x21, 0x76,
+	0x2e, 0x66, 0x3f, 0xd7, 0x70, 0x01, 0x66, 0x90, 0xb2, 0x20, 0x57, 0xb7, 0xd0, 0x20, 0x27, 0xcf,
+	0x60, 0x0f, 0x57, 0x17, 0x01, 0x16, 0x21, 0x0e, 0x2e, 0x96, 0xd0, 0x60, 0x57, 0x17, 0x01, 0x56,
+	0xa7, 0x63, 0x8c, 0x5c, 0x8a, 0xc9, 0xf9, 0xb9, 0x7a, 0x78, 0xdd, 0xe4, 0x24, 0x8a, 0x6e, 0x73,
+	0x00, 0xc8, 0x27, 0x01, 0x8c, 0x51, 0x4e, 0x50, 0x7d, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a,
+	0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79, 0x60, 0x7f, 0xc2, 0x82, 0xa4, 0x20, 0xb3, 0x18, 0x47,
+	0x08, 0x59, 0x83, 0xc9, 0x45, 0x4c, 0xcc, 0xee, 0x8e, 0x8e, 0xab, 0x98, 0x64, 0xdd, 0x21, 0x46,
+	0x39, 0xa6, 0x14, 0xeb, 0x41, 0x98, 0x20, 0x56, 0x98, 0x81, 0x1e, 0xc8, 0xf7, 0xc5, 0xa7, 0x60,
+	0xf2, 0x31, 0x8e, 0x29, 0xc5, 0x31, 0x70, 0xf9, 0x98, 0x30, 0x83, 0x18, 0xb0, 0x7c, 0x12, 0x1b,
+	0xd8, 0x52, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xa4, 0xf5, 0x40, 0x95, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/product_type_level.pb.go b/googleapis/ads/googleads/v0/enums/product_type_level.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9f61214e94e67d26a3c5f6297970a9f35022faf0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/product_type_level.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/product_type_level.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing the level of the type of a product offer.
+type ProductTypeLevelEnum_ProductTypeLevel int32
+
+const (
+	// Not specified.
+	ProductTypeLevelEnum_UNSPECIFIED ProductTypeLevelEnum_ProductTypeLevel = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProductTypeLevelEnum_UNKNOWN ProductTypeLevelEnum_ProductTypeLevel = 1
+	// Level 1.
+	ProductTypeLevelEnum_PRODUCT_TYPE_L1 ProductTypeLevelEnum_ProductTypeLevel = 2
+	// Level 2.
+	ProductTypeLevelEnum_PRODUCT_TYPE_L2 ProductTypeLevelEnum_ProductTypeLevel = 3
+	// Level 3.
+	ProductTypeLevelEnum_PRODUCT_TYPE_L3 ProductTypeLevelEnum_ProductTypeLevel = 4
+	// Level 4.
+	ProductTypeLevelEnum_PRODUCT_TYPE_L4 ProductTypeLevelEnum_ProductTypeLevel = 5
+	// Level 5.
+	ProductTypeLevelEnum_PRODUCT_TYPE_L5 ProductTypeLevelEnum_ProductTypeLevel = 6
+)
+
+var ProductTypeLevelEnum_ProductTypeLevel_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "PRODUCT_TYPE_L1",
+	3: "PRODUCT_TYPE_L2",
+	4: "PRODUCT_TYPE_L3",
+	5: "PRODUCT_TYPE_L4",
+	6: "PRODUCT_TYPE_L5",
+}
+var ProductTypeLevelEnum_ProductTypeLevel_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"PRODUCT_TYPE_L1": 2,
+	"PRODUCT_TYPE_L2": 3,
+	"PRODUCT_TYPE_L3": 4,
+	"PRODUCT_TYPE_L4": 5,
+	"PRODUCT_TYPE_L5": 6,
+}
+
+func (x ProductTypeLevelEnum_ProductTypeLevel) String() string {
+	return proto.EnumName(ProductTypeLevelEnum_ProductTypeLevel_name, int32(x))
+}
+func (ProductTypeLevelEnum_ProductTypeLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_product_type_level_e9b6c5214d538040, []int{0, 0}
+}
+
+// Level of the type of a product offer.
+type ProductTypeLevelEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductTypeLevelEnum) Reset()         { *m = ProductTypeLevelEnum{} }
+func (m *ProductTypeLevelEnum) String() string { return proto.CompactTextString(m) }
+func (*ProductTypeLevelEnum) ProtoMessage()    {}
+func (*ProductTypeLevelEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_product_type_level_e9b6c5214d538040, []int{0}
+}
+func (m *ProductTypeLevelEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductTypeLevelEnum.Unmarshal(m, b)
+}
+func (m *ProductTypeLevelEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductTypeLevelEnum.Marshal(b, m, deterministic)
+}
+func (dst *ProductTypeLevelEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductTypeLevelEnum.Merge(dst, src)
+}
+func (m *ProductTypeLevelEnum) XXX_Size() int {
+	return xxx_messageInfo_ProductTypeLevelEnum.Size(m)
+}
+func (m *ProductTypeLevelEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductTypeLevelEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductTypeLevelEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ProductTypeLevelEnum)(nil), "google.ads.googleads.v0.enums.ProductTypeLevelEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ProductTypeLevelEnum_ProductTypeLevel", ProductTypeLevelEnum_ProductTypeLevel_name, ProductTypeLevelEnum_ProductTypeLevel_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/product_type_level.proto", fileDescriptor_product_type_level_e9b6c5214d538040)
+}
+
+var fileDescriptor_product_type_level_e9b6c5214d538040 = []byte{
+	// 287 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x82, 0xa2, 0xfc, 0x94, 0xd2, 0xe4, 0x92, 0xf8, 0x92, 0xca, 0x82, 0xd4,
+	0xf8, 0x9c, 0xd4, 0xb2, 0xd4, 0x1c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x62,
+	0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x3e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x3e, 0xa5, 0x4d, 0x8c,
+	0x5c, 0x22, 0x01, 0x10, 0xbd, 0x21, 0x95, 0x05, 0xa9, 0x3e, 0x20, 0x9d, 0xae, 0x79, 0xa5, 0xb9,
+	0x4a, 0x33, 0x19, 0xb9, 0x04, 0xd0, 0x25, 0x84, 0xf8, 0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c,
+	0x9d, 0x3d, 0xdd, 0x3c, 0x5d, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd,
+	0xfc, 0xc3, 0xfd, 0x04, 0x18, 0x85, 0x84, 0xb9, 0xf8, 0x03, 0x82, 0xfc, 0x5d, 0x42, 0x9d, 0x43,
+	0xe2, 0x43, 0x22, 0x03, 0x5c, 0xe3, 0x7d, 0x0c, 0x05, 0x98, 0x30, 0x05, 0x8d, 0x04, 0x98, 0x31,
+	0x05, 0x8d, 0x05, 0x58, 0x30, 0x05, 0x4d, 0x04, 0x58, 0x31, 0x05, 0x4d, 0x05, 0xd8, 0x9c, 0x8e,
+	0x31, 0x72, 0x29, 0x26, 0xe7, 0xe7, 0xea, 0xe1, 0xf5, 0x9a, 0x93, 0x28, 0xba, 0xf3, 0x03, 0x40,
+	0x01, 0x12, 0xc0, 0x18, 0xe5, 0x04, 0xd5, 0x97, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f,
+	0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0x0e, 0x2e, 0x58, 0xd0, 0x16, 0x64, 0x16, 0xe3, 0x08, 0x69,
+	0x6b, 0x30, 0xb9, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0xac, 0x3b, 0xc4, 0x28, 0xc7,
+	0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x03, 0x85, 0x61, 0xf1, 0x29, 0x98, 0x7c,
+	0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x3e, 0x26, 0xcc, 0x20, 0x06, 0x2c, 0x9f, 0xc4, 0x06, 0xb6,
+	0xd4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xae, 0x5a, 0x72, 0x1e, 0xdd, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/promotion_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/promotion_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0b67b6c470804f6745b4e00913a5e72f321c2389
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/promotion_placeholder_field.pb.go
@@ -0,0 +1,182 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/promotion_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Promotion placeholder fields.
+type PromotionPlaceholderFieldEnum_PromotionPlaceholderField int32
+
+const (
+	// Not specified.
+	PromotionPlaceholderFieldEnum_UNSPECIFIED PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	PromotionPlaceholderFieldEnum_UNKNOWN PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 1
+	// Data Type: STRING. The text that appears on the ad when the extension is
+	// shown.
+	PromotionPlaceholderFieldEnum_PROMOTION_TARGET PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 2
+	// Data Type: STRING. Allows you to add "up to" phrase to the promotion,
+	// in case you have variable promotion rates.
+	PromotionPlaceholderFieldEnum_DISCOUNT_MODIFIER PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 3
+	// Data Type: INT64. Takes a value in micros, where 1 million micros
+	// represents 1%, and is shown as a percentage when rendered.
+	PromotionPlaceholderFieldEnum_PERCENT_OFF PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 4
+	// Data Type: PRICE. Requires a currency and an amount of money.
+	PromotionPlaceholderFieldEnum_MONEY_AMOUNT_OFF PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 5
+	// Data Type: STRING. A string that the user enters to get the discount.
+	PromotionPlaceholderFieldEnum_PROMOTION_CODE PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 6
+	// Data Type: PRICE. A minimum spend before the user qualifies for the
+	// promotion.
+	PromotionPlaceholderFieldEnum_ORDERS_OVER_AMOUNT PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 7
+	// Data Type: DATE. The start date of the promotion.
+	PromotionPlaceholderFieldEnum_PROMOTION_START PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 8
+	// Data Type: DATE. The end date of the promotion.
+	PromotionPlaceholderFieldEnum_PROMOTION_END PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 9
+	// Data Type: STRING. Describes the associated event for the promotion using
+	// one of the PromotionExtensionOccasion enum values, for example NEW_YEARS.
+	PromotionPlaceholderFieldEnum_OCCASION PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 10
+	// Data Type: URL_LIST. Final URLs to be used in the ad when using Upgraded
+	// URLs.
+	PromotionPlaceholderFieldEnum_FINAL_URLS PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 11
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	PromotionPlaceholderFieldEnum_FINAL_MOBILE_URLS PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 12
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	PromotionPlaceholderFieldEnum_TRACKING_URL PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 13
+	// Data Type: STRING. A string represented by a language code for the
+	// promotion.
+	PromotionPlaceholderFieldEnum_LANGUAGE PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 14
+	// Data Type: STRING. Final URL suffix for the ad when using parallel
+	// tracking.
+	PromotionPlaceholderFieldEnum_FINAL_URL_SUFFIX PromotionPlaceholderFieldEnum_PromotionPlaceholderField = 15
+)
+
+var PromotionPlaceholderFieldEnum_PromotionPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "PROMOTION_TARGET",
+	3:  "DISCOUNT_MODIFIER",
+	4:  "PERCENT_OFF",
+	5:  "MONEY_AMOUNT_OFF",
+	6:  "PROMOTION_CODE",
+	7:  "ORDERS_OVER_AMOUNT",
+	8:  "PROMOTION_START",
+	9:  "PROMOTION_END",
+	10: "OCCASION",
+	11: "FINAL_URLS",
+	12: "FINAL_MOBILE_URLS",
+	13: "TRACKING_URL",
+	14: "LANGUAGE",
+	15: "FINAL_URL_SUFFIX",
+}
+var PromotionPlaceholderFieldEnum_PromotionPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"PROMOTION_TARGET":   2,
+	"DISCOUNT_MODIFIER":  3,
+	"PERCENT_OFF":        4,
+	"MONEY_AMOUNT_OFF":   5,
+	"PROMOTION_CODE":     6,
+	"ORDERS_OVER_AMOUNT": 7,
+	"PROMOTION_START":    8,
+	"PROMOTION_END":      9,
+	"OCCASION":           10,
+	"FINAL_URLS":         11,
+	"FINAL_MOBILE_URLS":  12,
+	"TRACKING_URL":       13,
+	"LANGUAGE":           14,
+	"FINAL_URL_SUFFIX":   15,
+}
+
+func (x PromotionPlaceholderFieldEnum_PromotionPlaceholderField) String() string {
+	return proto.EnumName(PromotionPlaceholderFieldEnum_PromotionPlaceholderField_name, int32(x))
+}
+func (PromotionPlaceholderFieldEnum_PromotionPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_promotion_placeholder_field_6a43d446aaa76383, []int{0, 0}
+}
+
+// Values for Promotion placeholder fields.
+type PromotionPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PromotionPlaceholderFieldEnum) Reset()         { *m = PromotionPlaceholderFieldEnum{} }
+func (m *PromotionPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*PromotionPlaceholderFieldEnum) ProtoMessage()    {}
+func (*PromotionPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_promotion_placeholder_field_6a43d446aaa76383, []int{0}
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PromotionPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PromotionPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *PromotionPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PromotionPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_PromotionPlaceholderFieldEnum.Size(m)
+}
+func (m *PromotionPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PromotionPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PromotionPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PromotionPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.PromotionPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField", PromotionPlaceholderFieldEnum_PromotionPlaceholderField_name, PromotionPlaceholderFieldEnum_PromotionPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/promotion_placeholder_field.proto", fileDescriptor_promotion_placeholder_field_6a43d446aaa76383)
+}
+
+var fileDescriptor_promotion_placeholder_field_6a43d446aaa76383 = []byte{
+	// 438 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xdf, 0x6e, 0x9b, 0x30,
+	0x18, 0xc5, 0x17, 0xba, 0xb5, 0xdd, 0x97, 0x34, 0x71, 0xbd, 0x3f, 0xd2, 0x2e, 0x32, 0x69, 0x7d,
+	0x00, 0x13, 0x69, 0x97, 0xbb, 0x98, 0x1c, 0x30, 0xc8, 0x6a, 0xb0, 0x91, 0x81, 0xec, 0x8f, 0x22,
+	0x59, 0x59, 0x61, 0x2c, 0x12, 0xc1, 0x51, 0x68, 0xfb, 0x40, 0xbb, 0xdc, 0xa3, 0x4c, 0x93, 0xf6,
+	0x26, 0x7b, 0x86, 0xc9, 0xd0, 0x24, 0x57, 0xe9, 0x0d, 0x3a, 0x9c, 0xef, 0x7c, 0x3f, 0x2c, 0x8e,
+	0xe1, 0x63, 0x69, 0x4c, 0x59, 0x15, 0xee, 0x32, 0x6f, 0xdc, 0x4e, 0x5a, 0x75, 0x3f, 0x71, 0x8b,
+	0xfa, 0x6e, 0xdd, 0xb8, 0x9b, 0xad, 0x59, 0x9b, 0xdb, 0x95, 0xa9, 0xf5, 0xa6, 0x5a, 0xde, 0x14,
+	0x3f, 0x4c, 0x95, 0x17, 0x5b, 0xfd, 0x7d, 0x55, 0x54, 0x39, 0xd9, 0x6c, 0xcd, 0xad, 0xc1, 0xe3,
+	0x6e, 0x8b, 0x2c, 0xf3, 0x86, 0xec, 0x01, 0xe4, 0x7e, 0x42, 0x5a, 0xc0, 0xd5, 0x3f, 0x07, 0xc6,
+	0xf1, 0x0e, 0x12, 0x1f, 0x18, 0x81, 0x45, 0xb0, 0xfa, 0x6e, 0x7d, 0xf5, 0xc7, 0x81, 0x37, 0x47,
+	0x13, 0x78, 0x04, 0xfd, 0x4c, 0x24, 0x31, 0xf3, 0x78, 0xc0, 0x99, 0x8f, 0x9e, 0xe0, 0x3e, 0x9c,
+	0x65, 0xe2, 0x5a, 0xc8, 0x4f, 0x02, 0xf5, 0xf0, 0x4b, 0x40, 0xb1, 0x92, 0x91, 0x4c, 0xb9, 0x14,
+	0x3a, 0xa5, 0x2a, 0x64, 0x29, 0x72, 0xf0, 0x2b, 0xb8, 0xf4, 0x79, 0xe2, 0xc9, 0x4c, 0xa4, 0x3a,
+	0x92, 0xbe, 0xdd, 0x54, 0xe8, 0xc4, 0xa2, 0x62, 0xa6, 0x3c, 0x26, 0x52, 0x2d, 0x83, 0x00, 0x3d,
+	0xb5, 0xdb, 0x91, 0x14, 0xec, 0x8b, 0xa6, 0x51, 0x9b, 0xb5, 0xee, 0x33, 0x8c, 0x61, 0x78, 0x60,
+	0x7a, 0xd2, 0x67, 0xe8, 0x14, 0xbf, 0x06, 0x2c, 0x95, 0xcf, 0x54, 0xa2, 0xe5, 0x9c, 0xa9, 0x87,
+	0x3c, 0x3a, 0xc3, 0x2f, 0x60, 0x74, 0xc8, 0x26, 0x29, 0x55, 0x29, 0x3a, 0xc7, 0x97, 0x70, 0x71,
+	0x30, 0x99, 0xf0, 0xd1, 0x73, 0x3c, 0x80, 0x73, 0xe9, 0x79, 0x34, 0xe1, 0x52, 0x20, 0xc0, 0x43,
+	0x80, 0x80, 0x0b, 0x3a, 0xd3, 0x99, 0x9a, 0x25, 0xa8, 0x6f, 0xcf, 0xdb, 0xbd, 0x47, 0x72, 0xca,
+	0x67, 0xac, 0xb3, 0x07, 0x18, 0xc1, 0x20, 0x55, 0xd4, 0xbb, 0xe6, 0x22, 0xb4, 0x16, 0xba, 0xb0,
+	0x98, 0x19, 0x15, 0x61, 0x46, 0x43, 0x86, 0x86, 0xf6, 0xf8, 0x7b, 0x8c, 0x4e, 0xb2, 0x20, 0xe0,
+	0x9f, 0xd1, 0x68, 0xfa, 0xb7, 0x07, 0xef, 0x6e, 0xcc, 0x9a, 0x3c, 0x5a, 0xcb, 0xf4, 0xed, 0xd1,
+	0x3f, 0x1e, 0xdb, 0x56, 0xe3, 0xde, 0xd7, 0xe9, 0x03, 0xa0, 0x34, 0xd5, 0xb2, 0x2e, 0x89, 0xd9,
+	0x96, 0x6e, 0x59, 0xd4, 0x6d, 0xe7, 0xbb, 0x8b, 0xb2, 0x59, 0x35, 0x47, 0xee, 0xcd, 0x87, 0xf6,
+	0xf9, 0xd3, 0x39, 0x09, 0x29, 0xfd, 0xe5, 0x8c, 0xc3, 0x0e, 0x45, 0xf3, 0x86, 0x74, 0xd2, 0xaa,
+	0xf9, 0x84, 0xd8, 0xfe, 0x9b, 0xdf, 0xbb, 0xf9, 0x82, 0xe6, 0xcd, 0x62, 0x3f, 0x5f, 0xcc, 0x27,
+	0x8b, 0x76, 0xfe, 0xed, 0xb4, 0xfd, 0xe8, 0xfb, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2b, 0xb1,
+	0x0f, 0xf2, 0xab, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/proximity_radius_units.pb.go b/googleapis/ads/googleads/v0/enums/proximity_radius_units.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e4e121613abd64c5ea94922efbe42774b8b29738
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/proximity_radius_units.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/proximity_radius_units.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The unit of radius distance in proximity (e.g. MILES)
+type ProximityRadiusUnitsEnum_ProximityRadiusUnits int32
+
+const (
+	// Not specified.
+	ProximityRadiusUnitsEnum_UNSPECIFIED ProximityRadiusUnitsEnum_ProximityRadiusUnits = 0
+	// Used for return value only. Represents value unknown in this version.
+	ProximityRadiusUnitsEnum_UNKNOWN ProximityRadiusUnitsEnum_ProximityRadiusUnits = 1
+	// Miles
+	ProximityRadiusUnitsEnum_MILES ProximityRadiusUnitsEnum_ProximityRadiusUnits = 2
+	// Kilometers
+	ProximityRadiusUnitsEnum_KILOMETERS ProximityRadiusUnitsEnum_ProximityRadiusUnits = 3
+)
+
+var ProximityRadiusUnitsEnum_ProximityRadiusUnits_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "MILES",
+	3: "KILOMETERS",
+}
+var ProximityRadiusUnitsEnum_ProximityRadiusUnits_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"MILES":       2,
+	"KILOMETERS":  3,
+}
+
+func (x ProximityRadiusUnitsEnum_ProximityRadiusUnits) String() string {
+	return proto.EnumName(ProximityRadiusUnitsEnum_ProximityRadiusUnits_name, int32(x))
+}
+func (ProximityRadiusUnitsEnum_ProximityRadiusUnits) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_proximity_radius_units_5dd96de9f46de87e, []int{0, 0}
+}
+
+// Container for enum describing unit of radius in proximity.
+type ProximityRadiusUnitsEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProximityRadiusUnitsEnum) Reset()         { *m = ProximityRadiusUnitsEnum{} }
+func (m *ProximityRadiusUnitsEnum) String() string { return proto.CompactTextString(m) }
+func (*ProximityRadiusUnitsEnum) ProtoMessage()    {}
+func (*ProximityRadiusUnitsEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_proximity_radius_units_5dd96de9f46de87e, []int{0}
+}
+func (m *ProximityRadiusUnitsEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProximityRadiusUnitsEnum.Unmarshal(m, b)
+}
+func (m *ProximityRadiusUnitsEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProximityRadiusUnitsEnum.Marshal(b, m, deterministic)
+}
+func (dst *ProximityRadiusUnitsEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProximityRadiusUnitsEnum.Merge(dst, src)
+}
+func (m *ProximityRadiusUnitsEnum) XXX_Size() int {
+	return xxx_messageInfo_ProximityRadiusUnitsEnum.Size(m)
+}
+func (m *ProximityRadiusUnitsEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProximityRadiusUnitsEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProximityRadiusUnitsEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ProximityRadiusUnitsEnum)(nil), "google.ads.googleads.v0.enums.ProximityRadiusUnitsEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.ProximityRadiusUnitsEnum_ProximityRadiusUnits", ProximityRadiusUnitsEnum_ProximityRadiusUnits_name, ProximityRadiusUnitsEnum_ProximityRadiusUnits_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/proximity_radius_units.proto", fileDescriptor_proximity_radius_units_5dd96de9f46de87e)
+}
+
+var fileDescriptor_proximity_radius_units_5dd96de9f46de87e = []byte{
+	// 274 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x82, 0xa2, 0xfc, 0x8a, 0xcc, 0xdc, 0xcc, 0x92, 0xca, 0xf8, 0xa2, 0xc4,
+	0x94, 0xcc, 0xd2, 0xe2, 0xf8, 0xd2, 0xbc, 0xcc, 0x92, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c,
+	0x21, 0x59, 0x88, 0x06, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x5e, 0xbd, 0x32, 0x03, 0x3d, 0xb0,
+	0x5e, 0xa5, 0x6c, 0x2e, 0x89, 0x00, 0x98, 0xf6, 0x20, 0xb0, 0xee, 0x50, 0x90, 0x66, 0xd7, 0xbc,
+	0xd2, 0x5c, 0x25, 0x7f, 0x2e, 0x11, 0x6c, 0x72, 0x42, 0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1, 0x01,
+	0xae, 0xce, 0x9e, 0x6e, 0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e, 0xde,
+	0x7e, 0xfe, 0xe1, 0x7e, 0x02, 0x8c, 0x42, 0x9c, 0x5c, 0xac, 0xbe, 0x9e, 0x3e, 0xae, 0xc1, 0x02,
+	0x4c, 0x42, 0x7c, 0x5c, 0x5c, 0xde, 0x9e, 0x3e, 0xfe, 0xbe, 0xae, 0x21, 0xae, 0x41, 0xc1, 0x02,
+	0xcc, 0x4e, 0xa7, 0x18, 0xb9, 0x14, 0x93, 0xf3, 0x73, 0xf5, 0xf0, 0x3a, 0xc9, 0x49, 0x12, 0x9b,
+	0xa5, 0x01, 0x20, 0xcf, 0x04, 0x30, 0x46, 0x39, 0x41, 0xf5, 0xa6, 0xe7, 0xe7, 0x24, 0xe6, 0xa5,
+	0xeb, 0xe5, 0x17, 0xa5, 0xeb, 0xa7, 0xa7, 0xe6, 0x81, 0xbd, 0x0a, 0x0b, 0x9a, 0x82, 0xcc, 0x62,
+	0x1c, 0x21, 0x65, 0x0d, 0x26, 0x17, 0x31, 0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x92, 0x75, 0x87,
+	0x18, 0xe5, 0x98, 0x52, 0xac, 0x07, 0x61, 0x82, 0x58, 0x61, 0x06, 0x7a, 0x20, 0xcf, 0x17, 0x9f,
+	0x82, 0xc9, 0xc7, 0x38, 0xa6, 0x14, 0xc7, 0xc0, 0xe5, 0x63, 0xc2, 0x0c, 0x62, 0xc0, 0xf2, 0x49,
+	0x6c, 0x60, 0x4b, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x05, 0xa6, 0x15, 0x88, 0x9d, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/quality_score_bucket.pb.go b/googleapis/ads/googleads/v0/enums/quality_score_bucket.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4b1330ef47912a81f0e5ed90454e838e6cf8b5a7
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/quality_score_bucket.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/quality_score_bucket.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum listing the possible quality score buckets.
+type QualityScoreBucketEnum_QualityScoreBucket int32
+
+const (
+	// Not specified.
+	QualityScoreBucketEnum_UNSPECIFIED QualityScoreBucketEnum_QualityScoreBucket = 0
+	// Used for return value only. Represents value unknown in this version.
+	QualityScoreBucketEnum_UNKNOWN QualityScoreBucketEnum_QualityScoreBucket = 1
+	// Quality of the creative is below average.
+	QualityScoreBucketEnum_BELOW_AVERAGE QualityScoreBucketEnum_QualityScoreBucket = 2
+	// Quality of the creative is average.
+	QualityScoreBucketEnum_AVERAGE QualityScoreBucketEnum_QualityScoreBucket = 3
+	// Quality of the creative is above average.
+	QualityScoreBucketEnum_ABOVE_AVERAGE QualityScoreBucketEnum_QualityScoreBucket = 4
+)
+
+var QualityScoreBucketEnum_QualityScoreBucket_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BELOW_AVERAGE",
+	3: "AVERAGE",
+	4: "ABOVE_AVERAGE",
+}
+var QualityScoreBucketEnum_QualityScoreBucket_value = map[string]int32{
+	"UNSPECIFIED":   0,
+	"UNKNOWN":       1,
+	"BELOW_AVERAGE": 2,
+	"AVERAGE":       3,
+	"ABOVE_AVERAGE": 4,
+}
+
+func (x QualityScoreBucketEnum_QualityScoreBucket) String() string {
+	return proto.EnumName(QualityScoreBucketEnum_QualityScoreBucket_name, int32(x))
+}
+func (QualityScoreBucketEnum_QualityScoreBucket) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_quality_score_bucket_4a13fc1ac760516e, []int{0, 0}
+}
+
+// The relative performance compared to other advertisers.
+type QualityScoreBucketEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *QualityScoreBucketEnum) Reset()         { *m = QualityScoreBucketEnum{} }
+func (m *QualityScoreBucketEnum) String() string { return proto.CompactTextString(m) }
+func (*QualityScoreBucketEnum) ProtoMessage()    {}
+func (*QualityScoreBucketEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_quality_score_bucket_4a13fc1ac760516e, []int{0}
+}
+func (m *QualityScoreBucketEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_QualityScoreBucketEnum.Unmarshal(m, b)
+}
+func (m *QualityScoreBucketEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_QualityScoreBucketEnum.Marshal(b, m, deterministic)
+}
+func (dst *QualityScoreBucketEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QualityScoreBucketEnum.Merge(dst, src)
+}
+func (m *QualityScoreBucketEnum) XXX_Size() int {
+	return xxx_messageInfo_QualityScoreBucketEnum.Size(m)
+}
+func (m *QualityScoreBucketEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_QualityScoreBucketEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QualityScoreBucketEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*QualityScoreBucketEnum)(nil), "google.ads.googleads.v0.enums.QualityScoreBucketEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.QualityScoreBucketEnum_QualityScoreBucket", QualityScoreBucketEnum_QualityScoreBucket_name, QualityScoreBucketEnum_QualityScoreBucket_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/quality_score_bucket.proto", fileDescriptor_quality_score_bucket_4a13fc1ac760516e)
+}
+
+var fileDescriptor_quality_score_bucket_4a13fc1ac760516e = []byte{
+	// 278 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xc2, 0xd2, 0xc4, 0x9c, 0xcc, 0x92, 0xca, 0xf8, 0xe2, 0xe4, 0xfc, 0xa2,
+	0xd4, 0xf8, 0xa4, 0xd2, 0xe4, 0xec, 0xd4, 0x12, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59,
+	0x88, 0x72, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x4e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x4e, 0xa5,
+	0x7a, 0x2e, 0xb1, 0x40, 0x88, 0xe6, 0x60, 0x90, 0x5e, 0x27, 0xb0, 0x56, 0xd7, 0xbc, 0xd2, 0x5c,
+	0xa5, 0x54, 0x2e, 0x21, 0x4c, 0x19, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67,
+	0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff,
+	0x70, 0x3f, 0x01, 0x46, 0x21, 0x41, 0x2e, 0x5e, 0x27, 0x57, 0x1f, 0xff, 0xf0, 0x78, 0xc7, 0x30,
+	0xd7, 0x20, 0x47, 0x77, 0x57, 0x01, 0x26, 0x90, 0x3c, 0x8c, 0xc3, 0x0c, 0x92, 0x77, 0x74, 0xf2,
+	0x0f, 0x73, 0x85, 0xcb, 0xb3, 0x38, 0x9d, 0x60, 0xe4, 0x52, 0x4c, 0xce, 0xcf, 0xd5, 0xc3, 0xeb,
+	0x4c, 0x27, 0x71, 0x4c, 0xa7, 0x04, 0x80, 0xbc, 0x17, 0xc0, 0x18, 0xe5, 0x04, 0xd5, 0x99, 0x9e,
+	0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0xf6, 0x3c, 0x2c,
+	0xa8, 0x0a, 0x32, 0x8b, 0x71, 0x84, 0x9c, 0x35, 0x98, 0x5c, 0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8,
+	0x8a, 0x49, 0xd6, 0x1d, 0x62, 0x94, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85, 0x19, 0xe8,
+	0x81, 0x02, 0xa4, 0xf8, 0x14, 0x4c, 0x3e, 0xc6, 0x31, 0xa5, 0x38, 0x06, 0x2e, 0x1f, 0x13, 0x66,
+	0x10, 0x03, 0x96, 0x4f, 0x62, 0x03, 0x5b, 0x6a, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x20,
+	0x20, 0x4c, 0xad, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/real_estate_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/real_estate_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4504de9fd8e8f5afd46c5baad3ad97fc16d45c6b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/real_estate_placeholder_field.pb.go
@@ -0,0 +1,208 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/real_estate_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Real Estate placeholder fields.
+type RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField int32
+
+const (
+	// Not specified.
+	RealEstatePlaceholderFieldEnum_UNSPECIFIED RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	RealEstatePlaceholderFieldEnum_UNKNOWN RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 1
+	// Data Type: STRING. Unique ID.
+	RealEstatePlaceholderFieldEnum_LISTING_ID RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 2
+	// Data Type: STRING. Main headline with listing name to be shown in dynamic
+	// ad.
+	RealEstatePlaceholderFieldEnum_LISTING_NAME RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 3
+	// Data Type: STRING. City name to be shown in dynamic ad.
+	RealEstatePlaceholderFieldEnum_CITY_NAME RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 4
+	// Data Type: STRING. Description of listing to be shown in dynamic ad.
+	RealEstatePlaceholderFieldEnum_DESCRIPTION RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 5
+	// Data Type: STRING. Complete listing address, including postal code.
+	RealEstatePlaceholderFieldEnum_ADDRESS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad.
+	// Example: "100.00 USD"
+	RealEstatePlaceholderFieldEnum_PRICE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	RealEstatePlaceholderFieldEnum_FORMATTED_PRICE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 8
+	// Data Type: URL. Image to be displayed in the ad.
+	RealEstatePlaceholderFieldEnum_IMAGE_URL RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 9
+	// Data Type: STRING. Type of property (house, condo, apartment, etc.) used
+	// to group like items together for recommendation engine.
+	RealEstatePlaceholderFieldEnum_PROPERTY_TYPE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 10
+	// Data Type: STRING. Type of listing (resale, rental, foreclosure, etc.)
+	// used to group like items together for recommendation engine.
+	RealEstatePlaceholderFieldEnum_LISTING_TYPE RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 11
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	RealEstatePlaceholderFieldEnum_CONTEXTUAL_KEYWORDS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 12
+	// Data Type: URL_LIST. Final URLs to be used in ad when using Upgraded
+	// URLs; the more specific the better (e.g. the individual URL of a specific
+	// listing and its location).
+	RealEstatePlaceholderFieldEnum_FINAL_URLS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 13
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	RealEstatePlaceholderFieldEnum_FINAL_MOBILE_URLS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 14
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	RealEstatePlaceholderFieldEnum_TRACKING_URL RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 15
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	RealEstatePlaceholderFieldEnum_ANDROID_APP_LINK RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 16
+	// Data Type: STRING_LIST. List of recommended listing IDs to show together
+	// with this item.
+	RealEstatePlaceholderFieldEnum_SIMILAR_LISTING_IDS RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 17
+	// Data Type: STRING. iOS app link.
+	RealEstatePlaceholderFieldEnum_IOS_APP_LINK RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 18
+	// Data Type: INT64. iOS app store ID.
+	RealEstatePlaceholderFieldEnum_IOS_APP_STORE_ID RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField = 19
+)
+
+var RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "LISTING_ID",
+	3:  "LISTING_NAME",
+	4:  "CITY_NAME",
+	5:  "DESCRIPTION",
+	6:  "ADDRESS",
+	7:  "PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "IMAGE_URL",
+	10: "PROPERTY_TYPE",
+	11: "LISTING_TYPE",
+	12: "CONTEXTUAL_KEYWORDS",
+	13: "FINAL_URLS",
+	14: "FINAL_MOBILE_URLS",
+	15: "TRACKING_URL",
+	16: "ANDROID_APP_LINK",
+	17: "SIMILAR_LISTING_IDS",
+	18: "IOS_APP_LINK",
+	19: "IOS_APP_STORE_ID",
+}
+var RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"LISTING_ID":          2,
+	"LISTING_NAME":        3,
+	"CITY_NAME":           4,
+	"DESCRIPTION":         5,
+	"ADDRESS":             6,
+	"PRICE":               7,
+	"FORMATTED_PRICE":     8,
+	"IMAGE_URL":           9,
+	"PROPERTY_TYPE":       10,
+	"LISTING_TYPE":        11,
+	"CONTEXTUAL_KEYWORDS": 12,
+	"FINAL_URLS":          13,
+	"FINAL_MOBILE_URLS":   14,
+	"TRACKING_URL":        15,
+	"ANDROID_APP_LINK":    16,
+	"SIMILAR_LISTING_IDS": 17,
+	"IOS_APP_LINK":        18,
+	"IOS_APP_STORE_ID":    19,
+}
+
+func (x RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField) String() string {
+	return proto.EnumName(RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_name, int32(x))
+}
+func (RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_real_estate_placeholder_field_e43e61bd7be00afd, []int{0, 0}
+}
+
+// Values for Real Estate placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type RealEstatePlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RealEstatePlaceholderFieldEnum) Reset()         { *m = RealEstatePlaceholderFieldEnum{} }
+func (m *RealEstatePlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*RealEstatePlaceholderFieldEnum) ProtoMessage()    {}
+func (*RealEstatePlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_real_estate_placeholder_field_e43e61bd7be00afd, []int{0}
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RealEstatePlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RealEstatePlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *RealEstatePlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RealEstatePlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_RealEstatePlaceholderFieldEnum.Size(m)
+}
+func (m *RealEstatePlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RealEstatePlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RealEstatePlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*RealEstatePlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.RealEstatePlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField", RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_name, RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/real_estate_placeholder_field.proto", fileDescriptor_real_estate_placeholder_field_e43e61bd7be00afd)
+}
+
+var fileDescriptor_real_estate_placeholder_field_e43e61bd7be00afd = []byte{
+	// 472 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x6e, 0xd3, 0x30,
+	0x14, 0x86, 0x69, 0xcb, 0x36, 0xea, 0xae, 0xab, 0xeb, 0x82, 0x90, 0x90, 0x06, 0x62, 0x0f, 0x90,
+	0x56, 0xe2, 0x92, 0x2b, 0x37, 0x76, 0x2b, 0xab, 0x89, 0x6d, 0xd9, 0xee, 0x46, 0x51, 0x25, 0x2b,
+	0x2c, 0x26, 0x4c, 0x4a, 0x9b, 0xaa, 0xe9, 0xf6, 0x08, 0x3c, 0x08, 0x77, 0xf0, 0x28, 0x5c, 0xf1,
+	0x48, 0xc8, 0x09, 0x5d, 0xb9, 0xe9, 0x6e, 0xa2, 0xff, 0xfc, 0xc7, 0xf9, 0x8e, 0xe5, 0xf3, 0x03,
+	0x9c, 0x15, 0x45, 0x96, 0xbb, 0x61, 0x92, 0x96, 0xc3, 0x5a, 0x7a, 0xf5, 0x30, 0x1a, 0xba, 0xf5,
+	0xfd, 0xaa, 0x1c, 0x6e, 0x5d, 0x92, 0x5b, 0x57, 0xee, 0x92, 0x9d, 0xb3, 0x9b, 0x3c, 0xb9, 0x75,
+	0xdf, 0x8a, 0x3c, 0x75, 0x5b, 0xfb, 0xf5, 0xce, 0xe5, 0x69, 0xb0, 0xd9, 0x16, 0xbb, 0x02, 0x5d,
+	0xd6, 0xff, 0x05, 0x49, 0x5a, 0x06, 0x8f, 0x88, 0xe0, 0x61, 0x14, 0x54, 0x88, 0xab, 0x9f, 0x2d,
+	0xf0, 0x56, 0xb9, 0x24, 0xa7, 0x15, 0x45, 0x1e, 0x20, 0x13, 0xcf, 0xa0, 0xeb, 0xfb, 0xd5, 0xd5,
+	0xf7, 0x16, 0x78, 0x73, 0xfc, 0x08, 0xea, 0x81, 0xce, 0x9c, 0x6b, 0x49, 0x43, 0x36, 0x61, 0x94,
+	0xc0, 0x67, 0xa8, 0x03, 0xce, 0xe6, 0x7c, 0xc6, 0xc5, 0x0d, 0x87, 0x0d, 0x74, 0x01, 0x40, 0xc4,
+	0xb4, 0x61, 0x7c, 0x6a, 0x19, 0x81, 0x4d, 0x04, 0xc1, 0xf9, 0xbe, 0xe6, 0x38, 0xa6, 0xb0, 0x85,
+	0xba, 0xa0, 0x1d, 0x32, 0xb3, 0xa8, 0xcb, 0xe7, 0x1e, 0x47, 0xa8, 0x0e, 0x15, 0x93, 0x86, 0x09,
+	0x0e, 0x4f, 0x3c, 0x0e, 0x13, 0xa2, 0xa8, 0xd6, 0xf0, 0x14, 0xb5, 0xc1, 0x89, 0x54, 0x2c, 0xa4,
+	0xf0, 0x0c, 0x0d, 0x40, 0x6f, 0x22, 0x54, 0x8c, 0x8d, 0xa1, 0xc4, 0xd6, 0xe6, 0x0b, 0x0f, 0x63,
+	0x31, 0x9e, 0x52, 0x3b, 0x57, 0x11, 0x6c, 0xa3, 0x3e, 0xe8, 0x4a, 0x25, 0x24, 0x55, 0x66, 0x61,
+	0xcd, 0x42, 0x52, 0x08, 0xfe, 0xbf, 0x40, 0xe5, 0x74, 0xd0, 0x6b, 0x30, 0x08, 0x05, 0x37, 0xf4,
+	0x93, 0x99, 0xe3, 0xc8, 0xce, 0xe8, 0xe2, 0x46, 0x28, 0xa2, 0xe1, 0xb9, 0xbf, 0xfb, 0x84, 0x71,
+	0x1c, 0x79, 0x98, 0x86, 0x5d, 0xf4, 0x0a, 0xf4, 0xeb, 0x3a, 0x16, 0x63, 0x16, 0xd1, 0xda, 0xbe,
+	0xf0, 0x44, 0xa3, 0x70, 0x38, 0xf3, 0x48, 0x3f, 0xb6, 0x87, 0x5e, 0x02, 0x88, 0x39, 0x51, 0x82,
+	0x11, 0x8b, 0xa5, 0xb4, 0x11, 0xe3, 0x33, 0x08, 0xfd, 0x1c, 0xcd, 0x62, 0x16, 0x61, 0x65, 0x0f,
+	0x4f, 0xa2, 0x61, 0xdf, 0x03, 0x98, 0xd0, 0x87, 0xa3, 0xc8, 0x03, 0xf6, 0x8e, 0x36, 0x42, 0x51,
+	0xff, 0x76, 0x83, 0xf1, 0x9f, 0x06, 0x78, 0x7f, 0x5b, 0xac, 0x82, 0x27, 0x37, 0x3a, 0x7e, 0x77,
+	0x7c, 0x57, 0xd2, 0x27, 0x42, 0x36, 0x3e, 0x8f, 0xff, 0x11, 0xb2, 0x22, 0x4f, 0xd6, 0x59, 0x50,
+	0x6c, 0xb3, 0x61, 0xe6, 0xd6, 0x55, 0x5e, 0xf6, 0x31, 0xdb, 0xdc, 0x95, 0x47, 0x52, 0xf7, 0xb1,
+	0xfa, 0xfe, 0x68, 0xb6, 0xa6, 0x18, 0xff, 0x6a, 0x5e, 0x4e, 0x6b, 0x14, 0x4e, 0xcb, 0xa0, 0x96,
+	0x5e, 0x5d, 0x8f, 0x02, 0x1f, 0x9d, 0xf2, 0xf7, 0xbe, 0xbf, 0xc4, 0x69, 0xb9, 0x7c, 0xec, 0x2f,
+	0xaf, 0x47, 0xcb, 0xaa, 0xff, 0xe5, 0xb4, 0x1a, 0xfa, 0xe1, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x03, 0xff, 0x7e, 0x7c, 0xe9, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/recommendation_type.pb.go b/googleapis/ads/googleads/v0/enums/recommendation_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..668e7b5c91a9311f9c8d3be563caedd42d3ac3dd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/recommendation_type.pb.go
@@ -0,0 +1,154 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/recommendation_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Types of recommendations.
+type RecommendationTypeEnum_RecommendationType int32
+
+const (
+	// Not specified.
+	RecommendationTypeEnum_UNSPECIFIED RecommendationTypeEnum_RecommendationType = 0
+	// Used for return value only. Represents value unknown in this version.
+	RecommendationTypeEnum_UNKNOWN RecommendationTypeEnum_RecommendationType = 1
+	// Budget recommendation for budget constrained campaigns.
+	RecommendationTypeEnum_CAMPAIGN_BUDGET RecommendationTypeEnum_RecommendationType = 2
+	// Keyword recommendation.
+	RecommendationTypeEnum_KEYWORD RecommendationTypeEnum_RecommendationType = 3
+	// Recommendation to add a new text ad.
+	RecommendationTypeEnum_TEXT_AD RecommendationTypeEnum_RecommendationType = 4
+	// Recommendation to update a campaign to use a Target CPA bidding strategy.
+	RecommendationTypeEnum_TARGET_CPA_OPT_IN RecommendationTypeEnum_RecommendationType = 5
+	// Recommendation to update a campaign to use the Maximize Conversions
+	// bidding strategy.
+	RecommendationTypeEnum_MAXIMIZE_CONVERSIONS_OPT_IN RecommendationTypeEnum_RecommendationType = 6
+	// Recommendation to enable Enhanced Cost Per Click for a campaign.
+	RecommendationTypeEnum_ENHANCED_CPC_OPT_IN RecommendationTypeEnum_RecommendationType = 7
+	// Recommendation to start showing your campaign's ads on Google Search
+	// Partners Websites.
+	RecommendationTypeEnum_SEARCH_PARTNERS_OPT_IN RecommendationTypeEnum_RecommendationType = 8
+	// Recommendation to update a campaign to use a Maximize Clicks bidding
+	// strategy.
+	RecommendationTypeEnum_MAXIMIZE_CLICKS_OPT_IN RecommendationTypeEnum_RecommendationType = 9
+	// Recommendation to start using the "Optimize" ad rotation setting for the
+	// given ad group.
+	RecommendationTypeEnum_OPTIMIZE_AD_ROTATION RecommendationTypeEnum_RecommendationType = 10
+)
+
+var RecommendationTypeEnum_RecommendationType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CAMPAIGN_BUDGET",
+	3:  "KEYWORD",
+	4:  "TEXT_AD",
+	5:  "TARGET_CPA_OPT_IN",
+	6:  "MAXIMIZE_CONVERSIONS_OPT_IN",
+	7:  "ENHANCED_CPC_OPT_IN",
+	8:  "SEARCH_PARTNERS_OPT_IN",
+	9:  "MAXIMIZE_CLICKS_OPT_IN",
+	10: "OPTIMIZE_AD_ROTATION",
+}
+var RecommendationTypeEnum_RecommendationType_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"CAMPAIGN_BUDGET":             2,
+	"KEYWORD":                     3,
+	"TEXT_AD":                     4,
+	"TARGET_CPA_OPT_IN":           5,
+	"MAXIMIZE_CONVERSIONS_OPT_IN": 6,
+	"ENHANCED_CPC_OPT_IN":         7,
+	"SEARCH_PARTNERS_OPT_IN":      8,
+	"MAXIMIZE_CLICKS_OPT_IN":      9,
+	"OPTIMIZE_AD_ROTATION":        10,
+}
+
+func (x RecommendationTypeEnum_RecommendationType) String() string {
+	return proto.EnumName(RecommendationTypeEnum_RecommendationType_name, int32(x))
+}
+func (RecommendationTypeEnum_RecommendationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_type_7c3269b466303113, []int{0, 0}
+}
+
+// Container for enum describing types of recommendations.
+type RecommendationTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RecommendationTypeEnum) Reset()         { *m = RecommendationTypeEnum{} }
+func (m *RecommendationTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*RecommendationTypeEnum) ProtoMessage()    {}
+func (*RecommendationTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_type_7c3269b466303113, []int{0}
+}
+func (m *RecommendationTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RecommendationTypeEnum.Unmarshal(m, b)
+}
+func (m *RecommendationTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RecommendationTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *RecommendationTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RecommendationTypeEnum.Merge(dst, src)
+}
+func (m *RecommendationTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_RecommendationTypeEnum.Size(m)
+}
+func (m *RecommendationTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RecommendationTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RecommendationTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*RecommendationTypeEnum)(nil), "google.ads.googleads.v0.enums.RecommendationTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.RecommendationTypeEnum_RecommendationType", RecommendationTypeEnum_RecommendationType_name, RecommendationTypeEnum_RecommendationType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/recommendation_type.proto", fileDescriptor_recommendation_type_7c3269b466303113)
+}
+
+var fileDescriptor_recommendation_type_7c3269b466303113 = []byte{
+	// 392 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x6b, 0xd4, 0x40,
+	0x1c, 0xc5, 0xdd, 0x54, 0x5b, 0x9d, 0x1e, 0x1a, 0xa7, 0xda, 0x8a, 0x52, 0xc4, 0x7e, 0x80, 0x49,
+	0xc0, 0x83, 0x07, 0x4f, 0x93, 0xc9, 0x98, 0x0e, 0xeb, 0xce, 0x0c, 0x93, 0xd9, 0x6d, 0x2d, 0x81,
+	0x21, 0x36, 0x21, 0x14, 0x36, 0x99, 0xb0, 0xd9, 0x5d, 0xd8, 0xbb, 0xdf, 0x43, 0xf0, 0xe8, 0x27,
+	0x11, 0x3f, 0x95, 0x24, 0x31, 0x11, 0x59, 0xf4, 0x12, 0x5e, 0xf8, 0xbd, 0xf7, 0x1f, 0x78, 0x0f,
+	0xbc, 0x2b, 0xac, 0x2d, 0x96, 0xb9, 0x97, 0x66, 0x8d, 0xd7, 0xcb, 0x56, 0x6d, 0x7d, 0x2f, 0xaf,
+	0x36, 0x65, 0xe3, 0xad, 0xf2, 0x3b, 0x5b, 0x96, 0x79, 0x95, 0xa5, 0xeb, 0x7b, 0x5b, 0x99, 0xf5,
+	0xae, 0xce, 0x51, 0xbd, 0xb2, 0x6b, 0x0b, 0x2f, 0x7a, 0x37, 0x4a, 0xb3, 0x06, 0x8d, 0x41, 0xb4,
+	0xf5, 0x51, 0x17, 0xbc, 0xfc, 0xea, 0x80, 0x33, 0xf5, 0x57, 0x58, 0xef, 0xea, 0x9c, 0x56, 0x9b,
+	0xf2, 0xf2, 0x8b, 0x03, 0xe0, 0x3e, 0x82, 0x27, 0xe0, 0x78, 0xce, 0x63, 0x49, 0x09, 0xfb, 0xc0,
+	0x68, 0xe8, 0x3e, 0x80, 0xc7, 0xe0, 0x68, 0xce, 0xa7, 0x5c, 0x5c, 0x73, 0x77, 0x02, 0x4f, 0xc1,
+	0x09, 0xc1, 0x33, 0x89, 0x59, 0xc4, 0x4d, 0x30, 0x0f, 0x23, 0xaa, 0x5d, 0xa7, 0x75, 0x4c, 0xe9,
+	0xa7, 0x6b, 0xa1, 0x42, 0xf7, 0xa0, 0xfd, 0xd1, 0xf4, 0x46, 0x1b, 0x1c, 0xba, 0x0f, 0xe1, 0x73,
+	0xf0, 0x54, 0x63, 0x15, 0x51, 0x6d, 0x88, 0xc4, 0x46, 0x48, 0x6d, 0x18, 0x77, 0x1f, 0xc1, 0xd7,
+	0xe0, 0xd5, 0x0c, 0xdf, 0xb0, 0x19, 0xbb, 0xa5, 0x86, 0x08, 0xbe, 0xa0, 0x2a, 0x66, 0x82, 0xc7,
+	0x83, 0xe1, 0x10, 0x9e, 0x83, 0x53, 0xca, 0xaf, 0x30, 0x27, 0x34, 0x34, 0x44, 0x92, 0x01, 0x1c,
+	0xc1, 0x97, 0xe0, 0x2c, 0xa6, 0x58, 0x91, 0x2b, 0x23, 0xb1, 0xd2, 0x9c, 0xaa, 0x31, 0xf4, 0xb8,
+	0x65, 0x7f, 0xae, 0x7e, 0x64, 0x64, 0x3a, 0xb2, 0x27, 0xf0, 0x05, 0x78, 0x26, 0xa4, 0xee, 0x19,
+	0x0e, 0x8d, 0x12, 0x1a, 0x6b, 0x26, 0xb8, 0x0b, 0x82, 0x1f, 0x13, 0xf0, 0xe6, 0xce, 0x96, 0xe8,
+	0xbf, 0x3d, 0x06, 0xe7, 0xfb, 0x4d, 0xc9, 0xb6, 0x7f, 0x39, 0xb9, 0x0d, 0x7e, 0x27, 0x0b, 0xbb,
+	0x4c, 0xab, 0x02, 0xd9, 0x55, 0xe1, 0x15, 0x79, 0xd5, 0xad, 0x33, 0x4c, 0x59, 0xdf, 0x37, 0xff,
+	0x58, 0xf6, 0x7d, 0xf7, 0xfd, 0xe6, 0x1c, 0x44, 0x18, 0x7f, 0x77, 0x2e, 0xa2, 0xfe, 0x14, 0xce,
+	0x1a, 0xd4, 0xcb, 0x56, 0x2d, 0x7c, 0xd4, 0x0e, 0xd6, 0xfc, 0x1c, 0x78, 0x82, 0xb3, 0x26, 0x19,
+	0x79, 0xb2, 0xf0, 0x93, 0x8e, 0x7f, 0x3e, 0xec, 0x1e, 0x7d, 0xfb, 0x2b, 0x00, 0x00, 0xff, 0xff,
+	0x47, 0x43, 0x4a, 0x0d, 0x4d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/search_term_match_type.pb.go b/googleapis/ads/googleads/v0/enums/search_term_match_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3ff0fee9ba1a3d9c6eebdda5b7766437754d0794
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/search_term_match_type.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/search_term_match_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible match types for a keyword triggering an ad, including variants.
+type SearchTermMatchTypeEnum_SearchTermMatchType int32
+
+const (
+	// Not specified.
+	SearchTermMatchTypeEnum_UNSPECIFIED SearchTermMatchTypeEnum_SearchTermMatchType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SearchTermMatchTypeEnum_UNKNOWN SearchTermMatchTypeEnum_SearchTermMatchType = 1
+	// Broad match.
+	SearchTermMatchTypeEnum_BROAD SearchTermMatchTypeEnum_SearchTermMatchType = 2
+	// Exact match.
+	SearchTermMatchTypeEnum_EXACT SearchTermMatchTypeEnum_SearchTermMatchType = 3
+	// Phrase match.
+	SearchTermMatchTypeEnum_PHRASE SearchTermMatchTypeEnum_SearchTermMatchType = 4
+	// Exact match (close variant).
+	SearchTermMatchTypeEnum_NEAR_EXACT SearchTermMatchTypeEnum_SearchTermMatchType = 5
+	// Phrase match (close variant).
+	SearchTermMatchTypeEnum_NEAR_PHRASE SearchTermMatchTypeEnum_SearchTermMatchType = 6
+)
+
+var SearchTermMatchTypeEnum_SearchTermMatchType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "BROAD",
+	3: "EXACT",
+	4: "PHRASE",
+	5: "NEAR_EXACT",
+	6: "NEAR_PHRASE",
+}
+var SearchTermMatchTypeEnum_SearchTermMatchType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"BROAD":       2,
+	"EXACT":       3,
+	"PHRASE":      4,
+	"NEAR_EXACT":  5,
+	"NEAR_PHRASE": 6,
+}
+
+func (x SearchTermMatchTypeEnum_SearchTermMatchType) String() string {
+	return proto.EnumName(SearchTermMatchTypeEnum_SearchTermMatchType_name, int32(x))
+}
+func (SearchTermMatchTypeEnum_SearchTermMatchType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_search_term_match_type_e09c4b2680f9d005, []int{0, 0}
+}
+
+// Container for enum describing match types for a keyword triggering an ad.
+type SearchTermMatchTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchTermMatchTypeEnum) Reset()         { *m = SearchTermMatchTypeEnum{} }
+func (m *SearchTermMatchTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SearchTermMatchTypeEnum) ProtoMessage()    {}
+func (*SearchTermMatchTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_search_term_match_type_e09c4b2680f9d005, []int{0}
+}
+func (m *SearchTermMatchTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchTermMatchTypeEnum.Unmarshal(m, b)
+}
+func (m *SearchTermMatchTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchTermMatchTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *SearchTermMatchTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchTermMatchTypeEnum.Merge(dst, src)
+}
+func (m *SearchTermMatchTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SearchTermMatchTypeEnum.Size(m)
+}
+func (m *SearchTermMatchTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchTermMatchTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchTermMatchTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SearchTermMatchTypeEnum)(nil), "google.ads.googleads.v0.enums.SearchTermMatchTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.SearchTermMatchTypeEnum_SearchTermMatchType", SearchTermMatchTypeEnum_SearchTermMatchType_name, SearchTermMatchTypeEnum_SearchTermMatchType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/search_term_match_type.proto", fileDescriptor_search_term_match_type_e09c4b2680f9d005)
+}
+
+var fileDescriptor_search_term_match_type_e09c4b2680f9d005 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0x83, 0x30,
+	0x18, 0xc7, 0x85, 0x39, 0x8c, 0x5d, 0xa2, 0xa4, 0x1e, 0xf4, 0xb2, 0x83, 0x7b, 0x80, 0x42, 0xe2,
+	0x4d, 0x4f, 0x65, 0xab, 0x73, 0x31, 0x32, 0x02, 0x6c, 0x1a, 0x43, 0x42, 0x70, 0x34, 0xd5, 0x64,
+	0xa5, 0x84, 0x32, 0x92, 0x3d, 0x86, 0xaf, 0xe0, 0xd1, 0x37, 0xd1, 0xa7, 0x32, 0x2d, 0xdb, 0x4e,
+	0x73, 0x17, 0xf2, 0x23, 0xff, 0xfe, 0xbe, 0x7e, 0xfd, 0x83, 0x5b, 0x26, 0x04, 0x5b, 0x52, 0x27,
+	0xcb, 0xa5, 0xd3, 0xa2, 0xa2, 0xc6, 0x75, 0x68, 0xb1, 0xe2, 0xd2, 0x91, 0x34, 0xab, 0x16, 0xef,
+	0x69, 0x4d, 0x2b, 0x9e, 0xf2, 0xac, 0x56, 0xb8, 0x2e, 0x29, 0x2a, 0x2b, 0x51, 0x0b, 0xd8, 0x6f,
+	0x05, 0x94, 0xe5, 0x12, 0xed, 0x5c, 0xd4, 0xb8, 0x48, 0xbb, 0x83, 0x4f, 0x03, 0x5c, 0x46, 0xda,
+	0x8f, 0x69, 0xc5, 0x9f, 0x94, 0x1d, 0xaf, 0x4b, 0x4a, 0x8a, 0x15, 0x1f, 0x34, 0xe0, 0x62, 0x4f,
+	0x04, 0xcf, 0x41, 0x6f, 0xe6, 0x47, 0x01, 0x19, 0x4e, 0xee, 0x27, 0x64, 0x64, 0x1f, 0xc1, 0x1e,
+	0x38, 0x99, 0xf9, 0x8f, 0xfe, 0xf4, 0xd9, 0xb7, 0x0d, 0x78, 0x0a, 0xba, 0x5e, 0x38, 0xc5, 0x23,
+	0xdb, 0x54, 0x48, 0x5e, 0xf0, 0x30, 0xb6, 0x3b, 0x10, 0x00, 0x2b, 0x78, 0x08, 0x71, 0x44, 0xec,
+	0x63, 0x78, 0x06, 0x80, 0x4f, 0x70, 0x98, 0xb6, 0x59, 0x57, 0xcd, 0xd3, 0xff, 0x9b, 0x03, 0x96,
+	0xf7, 0x63, 0x80, 0xeb, 0x85, 0xe0, 0xe8, 0xe0, 0xe6, 0xde, 0xd5, 0x9e, 0xdd, 0x02, 0xf5, 0xe4,
+	0xc0, 0x78, 0xf5, 0x36, 0x2a, 0x13, 0xcb, 0xac, 0x60, 0x48, 0x54, 0xcc, 0x61, 0xb4, 0xd0, 0x85,
+	0x6c, 0x0b, 0x2c, 0x3f, 0xe4, 0x3f, 0x7d, 0xde, 0xe9, 0xef, 0x97, 0xd9, 0x19, 0x63, 0xfc, 0x6d,
+	0xf6, 0xc7, 0xed, 0x28, 0x9c, 0x4b, 0xd4, 0xa2, 0xa2, 0xb9, 0x8b, 0x54, 0x45, 0xf2, 0x77, 0x9b,
+	0x27, 0x38, 0x97, 0xc9, 0x2e, 0x4f, 0xe6, 0x6e, 0xa2, 0xf3, 0x37, 0x4b, 0x5f, 0x7a, 0xf3, 0x17,
+	0x00, 0x00, 0xff, 0xff, 0xe3, 0x18, 0x85, 0xc8, 0xc3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/search_term_targeting_status.pb.go b/googleapis/ads/googleads/v0/enums/search_term_targeting_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..cba3a15b6087cbc07309a03e08920c7b99516ce3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/search_term_targeting_status.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/search_term_targeting_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Indicates whether the search term is one of your targeted or excluded
+// keywords.
+type SearchTermTargetingStatusEnum_SearchTermTargetingStatus int32
+
+const (
+	// Not specified.
+	SearchTermTargetingStatusEnum_UNSPECIFIED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	SearchTermTargetingStatusEnum_UNKNOWN SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 1
+	// Search term is added to targeted keywords.
+	SearchTermTargetingStatusEnum_ADDED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 2
+	// Search term matches a negative keyword.
+	SearchTermTargetingStatusEnum_EXCLUDED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 3
+	// Search term has been both added and excluded.
+	SearchTermTargetingStatusEnum_ADDED_EXCLUDED SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 4
+	// Search term is neither targeted nor excluded.
+	SearchTermTargetingStatusEnum_NONE SearchTermTargetingStatusEnum_SearchTermTargetingStatus = 5
+)
+
+var SearchTermTargetingStatusEnum_SearchTermTargetingStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADDED",
+	3: "EXCLUDED",
+	4: "ADDED_EXCLUDED",
+	5: "NONE",
+}
+var SearchTermTargetingStatusEnum_SearchTermTargetingStatus_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"ADDED":          2,
+	"EXCLUDED":       3,
+	"ADDED_EXCLUDED": 4,
+	"NONE":           5,
+}
+
+func (x SearchTermTargetingStatusEnum_SearchTermTargetingStatus) String() string {
+	return proto.EnumName(SearchTermTargetingStatusEnum_SearchTermTargetingStatus_name, int32(x))
+}
+func (SearchTermTargetingStatusEnum_SearchTermTargetingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_search_term_targeting_status_1ae39de7a4166d06, []int{0, 0}
+}
+
+// Container for enum indicating whether a search term is one of your targeted
+// or excluded keywords.
+type SearchTermTargetingStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchTermTargetingStatusEnum) Reset()         { *m = SearchTermTargetingStatusEnum{} }
+func (m *SearchTermTargetingStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*SearchTermTargetingStatusEnum) ProtoMessage()    {}
+func (*SearchTermTargetingStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_search_term_targeting_status_1ae39de7a4166d06, []int{0}
+}
+func (m *SearchTermTargetingStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchTermTargetingStatusEnum.Unmarshal(m, b)
+}
+func (m *SearchTermTargetingStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchTermTargetingStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *SearchTermTargetingStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchTermTargetingStatusEnum.Merge(dst, src)
+}
+func (m *SearchTermTargetingStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_SearchTermTargetingStatusEnum.Size(m)
+}
+func (m *SearchTermTargetingStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchTermTargetingStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchTermTargetingStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SearchTermTargetingStatusEnum)(nil), "google.ads.googleads.v0.enums.SearchTermTargetingStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus", SearchTermTargetingStatusEnum_SearchTermTargetingStatus_name, SearchTermTargetingStatusEnum_SearchTermTargetingStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/search_term_targeting_status.proto", fileDescriptor_search_term_targeting_status_1ae39de7a4166d06)
+}
+
+var fileDescriptor_search_term_targeting_status_1ae39de7a4166d06 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4e, 0xbb, 0x30,
+	0x1c, 0xc5, 0x7f, 0xec, 0xcf, 0xcf, 0xd9, 0x19, 0x25, 0xbd, 0xf3, 0x62, 0x26, 0xee, 0x01, 0x0a,
+	0x89, 0x97, 0xde, 0x08, 0xa3, 0x2e, 0x8b, 0xa6, 0x23, 0x61, 0x4c, 0x63, 0x48, 0x48, 0x1d, 0x4d,
+	0x5d, 0x32, 0x28, 0x69, 0xcb, 0xde, 0xc3, 0x57, 0xf0, 0xd2, 0x47, 0xf1, 0xc6, 0x57, 0x32, 0x14,
+	0xe1, 0x0e, 0x6f, 0x9a, 0xd3, 0x9e, 0xf6, 0xd3, 0xf3, 0x3d, 0xe0, 0x8e, 0x0b, 0xc1, 0x0f, 0xcc,
+	0xa1, 0x99, 0x72, 0x1a, 0x59, 0xab, 0xa3, 0xeb, 0xb0, 0xa2, 0xca, 0x95, 0xa3, 0x18, 0x95, 0xbb,
+	0xb7, 0x54, 0x33, 0x99, 0xa7, 0x9a, 0x4a, 0xce, 0xf4, 0xbe, 0xe0, 0xa9, 0xd2, 0x54, 0x57, 0x0a,
+	0x95, 0x52, 0x68, 0x01, 0x67, 0xcd, 0x33, 0x44, 0x33, 0x85, 0x3a, 0x02, 0x3a, 0xba, 0xc8, 0x10,
+	0xe6, 0xef, 0x16, 0x98, 0x45, 0x86, 0xb2, 0x61, 0x32, 0xdf, 0xb4, 0x8c, 0xc8, 0x20, 0x70, 0x51,
+	0xe5, 0xf3, 0x12, 0x5c, 0xf6, 0x5e, 0x80, 0x17, 0x60, 0x1a, 0x93, 0x28, 0xc4, 0x8b, 0xd5, 0xfd,
+	0x0a, 0x07, 0xf6, 0x3f, 0x38, 0x05, 0x27, 0x31, 0x79, 0x20, 0xeb, 0x27, 0x62, 0x5b, 0xf0, 0x14,
+	0x8c, 0xbd, 0x20, 0xc0, 0x81, 0x3d, 0x80, 0x67, 0x60, 0x82, 0x9f, 0x17, 0x8f, 0x71, 0xbd, 0x1b,
+	0x42, 0x08, 0xce, 0x8d, 0x91, 0x76, 0x67, 0x23, 0x38, 0x01, 0x23, 0xb2, 0x26, 0xd8, 0x1e, 0xfb,
+	0xdf, 0x16, 0xb8, 0xde, 0x89, 0x1c, 0xfd, 0x99, 0xdc, 0xbf, 0xea, 0x4d, 0x15, 0xd6, 0x83, 0x87,
+	0xd6, 0x8b, 0xff, 0x0b, 0xe0, 0xe2, 0x40, 0x0b, 0x8e, 0x84, 0xe4, 0x0e, 0x67, 0x85, 0xa9, 0xa5,
+	0x2d, 0xb3, 0xdc, 0xab, 0x9e, 0x6e, 0x6f, 0xcd, 0xfa, 0x31, 0x18, 0x2e, 0x3d, 0xef, 0x73, 0x30,
+	0x5b, 0x36, 0x28, 0x2f, 0x53, 0xa8, 0x91, 0xb5, 0xda, 0xba, 0xa8, 0xae, 0x48, 0x7d, 0xb5, 0x7e,
+	0xe2, 0x65, 0x2a, 0xe9, 0xfc, 0x64, 0xeb, 0x26, 0xc6, 0x7f, 0xfd, 0x6f, 0x3e, 0xbd, 0xf9, 0x09,
+	0x00, 0x00, 0xff, 0xff, 0x67, 0x8b, 0xe4, 0x66, 0xcf, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/shared_set_status.pb.go b/googleapis/ads/googleads/v0/enums/shared_set_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5f774ba95bf04f0c45a4df77c9be5b05a7495f11
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/shared_set_status.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/shared_set_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum listing the possible shared set statuses.
+type SharedSetStatusEnum_SharedSetStatus int32
+
+const (
+	// Not specified.
+	SharedSetStatusEnum_UNSPECIFIED SharedSetStatusEnum_SharedSetStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	SharedSetStatusEnum_UNKNOWN SharedSetStatusEnum_SharedSetStatus = 1
+	// The shared set is enabled.
+	SharedSetStatusEnum_ENABLED SharedSetStatusEnum_SharedSetStatus = 2
+	// The shared set is removed and can no longer be used.
+	SharedSetStatusEnum_REMOVED SharedSetStatusEnum_SharedSetStatus = 3
+)
+
+var SharedSetStatusEnum_SharedSetStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "REMOVED",
+}
+var SharedSetStatusEnum_SharedSetStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"REMOVED":     3,
+}
+
+func (x SharedSetStatusEnum_SharedSetStatus) String() string {
+	return proto.EnumName(SharedSetStatusEnum_SharedSetStatus_name, int32(x))
+}
+func (SharedSetStatusEnum_SharedSetStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_status_11341c2190eea701, []int{0, 0}
+}
+
+// Container for enum describing types of shared set statuses.
+type SharedSetStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedSetStatusEnum) Reset()         { *m = SharedSetStatusEnum{} }
+func (m *SharedSetStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedSetStatusEnum) ProtoMessage()    {}
+func (*SharedSetStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_status_11341c2190eea701, []int{0}
+}
+func (m *SharedSetStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetStatusEnum.Unmarshal(m, b)
+}
+func (m *SharedSetStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *SharedSetStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetStatusEnum.Merge(dst, src)
+}
+func (m *SharedSetStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedSetStatusEnum.Size(m)
+}
+func (m *SharedSetStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SharedSetStatusEnum)(nil), "google.ads.googleads.v0.enums.SharedSetStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.SharedSetStatusEnum_SharedSetStatus", SharedSetStatusEnum_SharedSetStatus_name, SharedSetStatusEnum_SharedSetStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/shared_set_status.proto", fileDescriptor_shared_set_status_11341c2190eea701)
+}
+
+var fileDescriptor_shared_set_status_11341c2190eea701 = []byte{
+	// 263 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe2, 0x8c, 0xc4, 0xa2, 0xd4, 0x94, 0xf8, 0xe2, 0xd4, 0x92, 0xf8, 0xe2,
+	0x92, 0xc4, 0x92, 0xd2, 0x62, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x5a, 0xbd,
+	0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x36, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x36, 0xa5, 0x04, 0x2e, 0xe1,
+	0x60, 0xb0, 0xce, 0xe0, 0xd4, 0x92, 0x60, 0xb0, 0x3e, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x4f, 0x2e,
+	0x7e, 0x34, 0x61, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f,
+	0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01,
+	0x46, 0x10, 0xc7, 0xd5, 0xcf, 0xd1, 0xc9, 0xc7, 0xd5, 0x45, 0x80, 0x09, 0xc4, 0x09, 0x72, 0xf5,
+	0xf5, 0x0f, 0x73, 0x75, 0x11, 0x60, 0x76, 0x3a, 0xca, 0xc8, 0xa5, 0x98, 0x9c, 0x9f, 0xab, 0x87,
+	0xd7, 0x1d, 0x4e, 0x22, 0x68, 0xd6, 0x05, 0x80, 0x1c, 0x1f, 0xc0, 0x18, 0xe5, 0x04, 0xd5, 0x96,
+	0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0xf6, 0x1a,
+	0x2c, 0x14, 0x0a, 0x32, 0x8b, 0x71, 0x04, 0x8a, 0x35, 0x98, 0x5c, 0xc4, 0xc4, 0xec, 0xee, 0xe8,
+	0xb8, 0x8a, 0x49, 0xd6, 0x1d, 0x62, 0x94, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85, 0x19,
+	0xe8, 0x81, 0x7c, 0x5c, 0x7c, 0x0a, 0x26, 0x1f, 0xe3, 0x98, 0x52, 0x1c, 0x03, 0x97, 0x8f, 0x09,
+	0x33, 0x88, 0x01, 0xcb, 0x27, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x74,
+	0x72, 0x4c, 0x3e, 0x88, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/shared_set_type.pb.go b/googleapis/ads/googleads/v0/enums/shared_set_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..58dff42e0d5b3d95c0cffc43dadc2a631483b3ba
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/shared_set_type.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/shared_set_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum listing the possible shared set types.
+type SharedSetTypeEnum_SharedSetType int32
+
+const (
+	// Not specified.
+	SharedSetTypeEnum_UNSPECIFIED SharedSetTypeEnum_SharedSetType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SharedSetTypeEnum_UNKNOWN SharedSetTypeEnum_SharedSetType = 1
+	// A set of keywords that can be excluded from targeting.
+	SharedSetTypeEnum_NEGATIVE_KEYWORDS SharedSetTypeEnum_SharedSetType = 2
+	// A set of placements that can be excluded from targeting.
+	SharedSetTypeEnum_NEGATIVE_PLACEMENTS SharedSetTypeEnum_SharedSetType = 3
+)
+
+var SharedSetTypeEnum_SharedSetType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NEGATIVE_KEYWORDS",
+	3: "NEGATIVE_PLACEMENTS",
+}
+var SharedSetTypeEnum_SharedSetType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"NEGATIVE_KEYWORDS":   2,
+	"NEGATIVE_PLACEMENTS": 3,
+}
+
+func (x SharedSetTypeEnum_SharedSetType) String() string {
+	return proto.EnumName(SharedSetTypeEnum_SharedSetType_name, int32(x))
+}
+func (SharedSetTypeEnum_SharedSetType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_type_2742d987288196bb, []int{0, 0}
+}
+
+// Container for enum describing types of shared sets.
+type SharedSetTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedSetTypeEnum) Reset()         { *m = SharedSetTypeEnum{} }
+func (m *SharedSetTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedSetTypeEnum) ProtoMessage()    {}
+func (*SharedSetTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_type_2742d987288196bb, []int{0}
+}
+func (m *SharedSetTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetTypeEnum.Unmarshal(m, b)
+}
+func (m *SharedSetTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *SharedSetTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetTypeEnum.Merge(dst, src)
+}
+func (m *SharedSetTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedSetTypeEnum.Size(m)
+}
+func (m *SharedSetTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SharedSetTypeEnum)(nil), "google.ads.googleads.v0.enums.SharedSetTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.SharedSetTypeEnum_SharedSetType", SharedSetTypeEnum_SharedSetType_name, SharedSetTypeEnum_SharedSetType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/shared_set_type.proto", fileDescriptor_shared_set_type_2742d987288196bb)
+}
+
+var fileDescriptor_shared_set_type_2742d987288196bb = []byte{
+	// 282 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe2, 0x8c, 0xc4, 0xa2, 0xd4, 0x94, 0xf8, 0xe2, 0xd4, 0x92, 0xf8, 0x92,
+	0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x4a, 0xbd, 0xc4, 0x94,
+	0x62, 0x3d, 0xb8, 0x26, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x26, 0xa5, 0x22, 0x2e, 0xc1, 0x60, 0xb0,
+	0xbe, 0xe0, 0xd4, 0x92, 0x90, 0xca, 0x82, 0x54, 0xd7, 0xbc, 0xd2, 0x5c, 0xa5, 0x58, 0x2e, 0x5e,
+	0x14, 0x41, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67, 0x4f, 0x37, 0x4f, 0x57,
+	0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff, 0x70, 0x3f, 0x01, 0x46,
+	0x21, 0x51, 0x2e, 0x41, 0x3f, 0x57, 0x77, 0xc7, 0x10, 0xcf, 0x30, 0xd7, 0x78, 0x6f, 0xd7, 0xc8,
+	0x70, 0xff, 0x20, 0x97, 0x60, 0x01, 0x26, 0x21, 0x71, 0x2e, 0x61, 0xb8, 0x70, 0x80, 0x8f, 0xa3,
+	0xb3, 0xab, 0xaf, 0xab, 0x5f, 0x48, 0xb0, 0x00, 0xb3, 0xd3, 0x61, 0x46, 0x2e, 0xc5, 0xe4, 0xfc,
+	0x5c, 0x3d, 0xbc, 0x2e, 0x73, 0x12, 0x42, 0x71, 0x42, 0x00, 0xc8, 0x33, 0x01, 0x8c, 0x51, 0x4e,
+	0x50, 0x4d, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79,
+	0x60, 0xaf, 0xc2, 0xc2, 0xa4, 0x20, 0xb3, 0x18, 0x47, 0x10, 0x59, 0x83, 0xc9, 0x45, 0x4c, 0xcc,
+	0xee, 0x8e, 0x8e, 0xab, 0x98, 0x64, 0xdd, 0x21, 0x46, 0x39, 0xa6, 0x14, 0xeb, 0x41, 0x98, 0x20,
+	0x56, 0x98, 0x81, 0x1e, 0x28, 0x0c, 0x8a, 0x4f, 0xc1, 0xe4, 0x63, 0x1c, 0x53, 0x8a, 0x63, 0xe0,
+	0xf2, 0x31, 0x61, 0x06, 0x31, 0x60, 0xf9, 0x24, 0x36, 0xb0, 0xa5, 0xc6, 0x80, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x31, 0xeb, 0x1d, 0x88, 0x96, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/sitelink_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/sitelink_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b334ea6bfeb2955e353df9b2396f292a9cffeb7f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/sitelink_placeholder_field.pb.go
@@ -0,0 +1,143 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/sitelink_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Sitelink placeholder fields.
+type SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField int32
+
+const (
+	// Not specified.
+	SitelinkPlaceholderFieldEnum_UNSPECIFIED SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	SitelinkPlaceholderFieldEnum_UNKNOWN SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 1
+	// Data Type: STRING. The link text for your sitelink.
+	SitelinkPlaceholderFieldEnum_TEXT SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 2
+	// Data Type: STRING. First line of the sitelink description.
+	SitelinkPlaceholderFieldEnum_LINE_1 SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 3
+	// Data Type: STRING. Second line of the sitelink description.
+	SitelinkPlaceholderFieldEnum_LINE_2 SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 4
+	// Data Type: URL_LIST. Final URLs for the sitelink when using Upgraded
+	// URLs.
+	SitelinkPlaceholderFieldEnum_FINAL_URLS SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 5
+	// Data Type: URL_LIST. Final Mobile URLs for the sitelink when using
+	// Upgraded URLs.
+	SitelinkPlaceholderFieldEnum_FINAL_MOBILE_URLS SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 6
+	// Data Type: URL. Tracking template for the sitelink when using Upgraded
+	// URLs.
+	SitelinkPlaceholderFieldEnum_TRACKING_URL SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 7
+	// Data Type: STRING. Final URL suffix for sitelink when using parallel
+	// tracking.
+	SitelinkPlaceholderFieldEnum_FINAL_URL_SUFFIX SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField = 8
+)
+
+var SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "TEXT",
+	3: "LINE_1",
+	4: "LINE_2",
+	5: "FINAL_URLS",
+	6: "FINAL_MOBILE_URLS",
+	7: "TRACKING_URL",
+	8: "FINAL_URL_SUFFIX",
+}
+var SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"TEXT":              2,
+	"LINE_1":            3,
+	"LINE_2":            4,
+	"FINAL_URLS":        5,
+	"FINAL_MOBILE_URLS": 6,
+	"TRACKING_URL":      7,
+	"FINAL_URL_SUFFIX":  8,
+}
+
+func (x SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField) String() string {
+	return proto.EnumName(SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_name, int32(x))
+}
+func (SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_sitelink_placeholder_field_1dbac5ed08bf4cb2, []int{0, 0}
+}
+
+// Values for Sitelink placeholder fields.
+type SitelinkPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SitelinkPlaceholderFieldEnum) Reset()         { *m = SitelinkPlaceholderFieldEnum{} }
+func (m *SitelinkPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*SitelinkPlaceholderFieldEnum) ProtoMessage()    {}
+func (*SitelinkPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_sitelink_placeholder_field_1dbac5ed08bf4cb2, []int{0}
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SitelinkPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SitelinkPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *SitelinkPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SitelinkPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_SitelinkPlaceholderFieldEnum.Size(m)
+}
+func (m *SitelinkPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SitelinkPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SitelinkPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SitelinkPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.SitelinkPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField", SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_name, SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/sitelink_placeholder_field.proto", fileDescriptor_sitelink_placeholder_field_1dbac5ed08bf4cb2)
+}
+
+var fileDescriptor_sitelink_placeholder_field_1dbac5ed08bf4cb2 = []byte{
+	// 339 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4e, 0xea, 0x40,
+	0x14, 0x86, 0x6f, 0x81, 0x0b, 0xe4, 0x70, 0x73, 0xef, 0xdc, 0x89, 0x26, 0x2e, 0x64, 0x21, 0x0f,
+	0x30, 0xad, 0xba, 0x34, 0x31, 0x69, 0xb1, 0x25, 0x13, 0xea, 0xd0, 0x50, 0x8a, 0xc4, 0x34, 0x69,
+	0x2a, 0x1d, 0x6b, 0x63, 0xe9, 0x10, 0x06, 0x78, 0x20, 0x77, 0xfa, 0x28, 0x2c, 0x7c, 0x26, 0xd3,
+	0x16, 0xea, 0x0a, 0x37, 0x93, 0x7f, 0xce, 0x99, 0xef, 0x9f, 0x9c, 0xff, 0xc0, 0x6d, 0x2c, 0x44,
+	0x9c, 0x72, 0x35, 0x8c, 0xa4, 0x5a, 0xca, 0x5c, 0x6d, 0x35, 0x95, 0x67, 0x9b, 0x85, 0x54, 0x65,
+	0xb2, 0xe6, 0x69, 0x92, 0xbd, 0x06, 0xcb, 0x34, 0x9c, 0xf3, 0x17, 0x91, 0x46, 0x7c, 0x15, 0x3c,
+	0x27, 0x3c, 0x8d, 0xc8, 0x72, 0x25, 0xd6, 0x02, 0x77, 0x4b, 0x88, 0x84, 0x91, 0x24, 0x15, 0x4f,
+	0xb6, 0x1a, 0x29, 0xf8, 0xde, 0x4e, 0x81, 0x73, 0x77, 0xef, 0xe1, 0x7c, 0x5b, 0x58, 0xb9, 0x83,
+	0x99, 0x6d, 0x16, 0xbd, 0x77, 0x05, 0xce, 0x8e, 0x3d, 0xc0, 0xff, 0xa0, 0xe3, 0x31, 0xd7, 0x31,
+	0xfb, 0xd4, 0xa2, 0xe6, 0x1d, 0xfa, 0x85, 0x3b, 0xd0, 0xf2, 0xd8, 0x90, 0x8d, 0x1e, 0x18, 0x52,
+	0x70, 0x1b, 0x1a, 0x13, 0x73, 0x36, 0x41, 0x35, 0x0c, 0xd0, 0xb4, 0x29, 0x33, 0x83, 0x4b, 0x54,
+	0xaf, 0xf4, 0x15, 0x6a, 0xe0, 0xbf, 0x00, 0x16, 0x65, 0xba, 0x1d, 0x78, 0x63, 0xdb, 0x45, 0xbf,
+	0xf1, 0x29, 0xfc, 0x2f, 0xef, 0xf7, 0x23, 0x83, 0xda, 0x66, 0x59, 0x6e, 0x62, 0x04, 0x7f, 0x26,
+	0x63, 0xbd, 0x3f, 0xa4, 0x6c, 0x90, 0x97, 0x50, 0x0b, 0x9f, 0x00, 0xaa, 0xc0, 0xc0, 0xf5, 0x2c,
+	0x8b, 0xce, 0x50, 0xdb, 0xf8, 0x54, 0xe0, 0x62, 0x2e, 0x16, 0xe4, 0xc7, 0x91, 0x8d, 0xee, 0xb1,
+	0x71, 0x9c, 0x3c, 0x30, 0x47, 0x79, 0x34, 0xf6, 0x7c, 0x2c, 0xd2, 0x30, 0x8b, 0x89, 0x58, 0xc5,
+	0x6a, 0xcc, 0xb3, 0x22, 0xce, 0xc3, 0x0a, 0x96, 0x89, 0x3c, 0xb2, 0x91, 0x9b, 0xe2, 0x7c, 0xab,
+	0xd5, 0x07, 0xba, 0xfe, 0x51, 0xeb, 0x0e, 0x4a, 0x2b, 0x3d, 0x92, 0xa4, 0x94, 0xb9, 0x9a, 0x6a,
+	0x24, 0xcf, 0x56, 0xee, 0x0e, 0x7d, 0x5f, 0x8f, 0xa4, 0x5f, 0xf5, 0xfd, 0xa9, 0xe6, 0x17, 0xfd,
+	0xa7, 0x66, 0xf1, 0xe9, 0xf5, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xa3, 0x37, 0xa7, 0x05,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/slot.pb.go b/googleapis/ads/googleads/v0/enums/slot.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8f83c0bd2c1e505399757accd793cbfc0e11e66d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/slot.pb.go
@@ -0,0 +1,137 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/slot.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enumerates possible positions of the Ad.
+type SlotEnum_Slot int32
+
+const (
+	// Not specified.
+	SlotEnum_UNSPECIFIED SlotEnum_Slot = 0
+	// The value is unknown in this version.
+	SlotEnum_UNKNOWN SlotEnum_Slot = 1
+	// Google search: Side.
+	SlotEnum_SEARCH_SIDE SlotEnum_Slot = 2
+	// Google search: Top.
+	SlotEnum_SEARCH_TOP SlotEnum_Slot = 3
+	// Google search: Other.
+	SlotEnum_SEARCH_OTHER SlotEnum_Slot = 4
+	// Google Display Network.
+	SlotEnum_CONTENT SlotEnum_Slot = 5
+	// Search partners: Top.
+	SlotEnum_SEARCH_PARTNER_TOP SlotEnum_Slot = 6
+	// Search partners: Other.
+	SlotEnum_SEARCH_PARTNER_OTHER SlotEnum_Slot = 7
+	// Cross-network.
+	SlotEnum_MIXED SlotEnum_Slot = 8
+)
+
+var SlotEnum_Slot_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SEARCH_SIDE",
+	3: "SEARCH_TOP",
+	4: "SEARCH_OTHER",
+	5: "CONTENT",
+	6: "SEARCH_PARTNER_TOP",
+	7: "SEARCH_PARTNER_OTHER",
+	8: "MIXED",
+}
+var SlotEnum_Slot_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"SEARCH_SIDE":          2,
+	"SEARCH_TOP":           3,
+	"SEARCH_OTHER":         4,
+	"CONTENT":              5,
+	"SEARCH_PARTNER_TOP":   6,
+	"SEARCH_PARTNER_OTHER": 7,
+	"MIXED":                8,
+}
+
+func (x SlotEnum_Slot) String() string {
+	return proto.EnumName(SlotEnum_Slot_name, int32(x))
+}
+func (SlotEnum_Slot) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_slot_595ff7b86bb21b12, []int{0, 0}
+}
+
+// Container for enumeration of possible positions of the Ad.
+type SlotEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SlotEnum) Reset()         { *m = SlotEnum{} }
+func (m *SlotEnum) String() string { return proto.CompactTextString(m) }
+func (*SlotEnum) ProtoMessage()    {}
+func (*SlotEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_slot_595ff7b86bb21b12, []int{0}
+}
+func (m *SlotEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SlotEnum.Unmarshal(m, b)
+}
+func (m *SlotEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SlotEnum.Marshal(b, m, deterministic)
+}
+func (dst *SlotEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SlotEnum.Merge(dst, src)
+}
+func (m *SlotEnum) XXX_Size() int {
+	return xxx_messageInfo_SlotEnum.Size(m)
+}
+func (m *SlotEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SlotEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SlotEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SlotEnum)(nil), "google.ads.googleads.v0.enums.SlotEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.SlotEnum_Slot", SlotEnum_Slot_name, SlotEnum_Slot_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/slot.proto", fileDescriptor_slot_595ff7b86bb21b12)
+}
+
+var fileDescriptor_slot_595ff7b86bb21b12 = []byte{
+	// 310 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xf3, 0x40,
+	0x14, 0xc5, 0xbf, 0xf4, 0x7f, 0x6f, 0x3f, 0x74, 0x18, 0x44, 0xdc, 0x74, 0x61, 0x57, 0xae, 0x26,
+	0x01, 0x97, 0xae, 0xa6, 0xed, 0xd8, 0x06, 0x71, 0x12, 0x92, 0xb4, 0x8a, 0x04, 0xa4, 0x9a, 0x30,
+	0x08, 0x49, 0xa6, 0x74, 0xd2, 0xbe, 0x8f, 0x2e, 0x5d, 0xf8, 0x00, 0x3e, 0x82, 0x4f, 0x25, 0x33,
+	0x49, 0xbb, 0x10, 0x74, 0x13, 0xce, 0xbd, 0xbf, 0x73, 0x32, 0xdc, 0x03, 0x17, 0x42, 0x4a, 0x91,
+	0xa5, 0xf6, 0x2a, 0x51, 0x76, 0x25, 0xb5, 0xda, 0x39, 0x76, 0x5a, 0x6c, 0x73, 0x65, 0xab, 0x4c,
+	0x96, 0x64, 0xbd, 0x91, 0xa5, 0xc4, 0xc3, 0x0a, 0x93, 0x55, 0xa2, 0xc8, 0xc1, 0x49, 0x76, 0x0e,
+	0x31, 0xce, 0xd1, 0x87, 0x05, 0xbd, 0x30, 0x93, 0x25, 0x2b, 0xb6, 0xf9, 0xe8, 0xd5, 0x82, 0x96,
+	0x1e, 0xf0, 0x31, 0x0c, 0x16, 0x3c, 0xf4, 0xd9, 0xc4, 0xbd, 0x76, 0xd9, 0x14, 0xfd, 0xc3, 0x03,
+	0xe8, 0x2e, 0xf8, 0x0d, 0xf7, 0xee, 0x38, 0xb2, 0x34, 0x0d, 0x19, 0x0d, 0x26, 0xf3, 0xc7, 0xd0,
+	0x9d, 0x32, 0xd4, 0xc0, 0x47, 0x00, 0xf5, 0x22, 0xf2, 0x7c, 0xd4, 0xc4, 0x08, 0xfe, 0xd7, 0xb3,
+	0x17, 0xcd, 0x59, 0x80, 0x5a, 0x3a, 0x3f, 0xf1, 0x78, 0xc4, 0x78, 0x84, 0xda, 0xf8, 0x14, 0x70,
+	0x8d, 0x7d, 0x1a, 0x44, 0x9c, 0x05, 0x26, 0xd6, 0xc1, 0x67, 0x70, 0xf2, 0x63, 0x5f, 0xc5, 0xbb,
+	0xb8, 0x0f, 0xed, 0x5b, 0xf7, 0x9e, 0x4d, 0x51, 0x6f, 0xfc, 0x69, 0xc1, 0xf9, 0xb3, 0xcc, 0xc9,
+	0x9f, 0x67, 0x8d, 0xfb, 0xfa, 0x0c, 0x5f, 0x17, 0xe0, 0x5b, 0x0f, 0xe3, 0xda, 0x2b, 0x64, 0xb6,
+	0x2a, 0x04, 0x91, 0x1b, 0x61, 0x8b, 0xb4, 0x30, 0xf5, 0xec, 0xcb, 0x5b, 0xbf, 0xa8, 0x5f, 0xba,
+	0xbc, 0x32, 0xdf, 0xb7, 0x46, 0x73, 0x46, 0xe9, 0x7b, 0x63, 0x38, 0xab, 0x7e, 0x45, 0x13, 0x45,
+	0x2a, 0xa9, 0xd5, 0xd2, 0x21, 0xba, 0x3f, 0xf5, 0xb5, 0xe7, 0x31, 0x4d, 0x54, 0x7c, 0xe0, 0xf1,
+	0xd2, 0x89, 0x0d, 0x7f, 0xea, 0x98, 0x47, 0x2f, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x68, 0x82,
+	0x7a, 0x46, 0xbf, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/spending_limit_type.pb.go b/googleapis/ads/googleads/v0/enums/spending_limit_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3ec63f02fb60ed4c39b6d7c028344d40e2c7212c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/spending_limit_type.pb.go
@@ -0,0 +1,111 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/spending_limit_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible spending limit types used by certain resources as an
+// alternative to absolute money values in micros.
+type SpendingLimitTypeEnum_SpendingLimitType int32
+
+const (
+	// Not specified.
+	SpendingLimitTypeEnum_UNSPECIFIED SpendingLimitTypeEnum_SpendingLimitType = 0
+	// Used for return value only. Represents value unknown in this version.
+	SpendingLimitTypeEnum_UNKNOWN SpendingLimitTypeEnum_SpendingLimitType = 1
+	// Infinite, indicates unlimited spending power.
+	SpendingLimitTypeEnum_INFINITE SpendingLimitTypeEnum_SpendingLimitType = 2
+)
+
+var SpendingLimitTypeEnum_SpendingLimitType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INFINITE",
+}
+var SpendingLimitTypeEnum_SpendingLimitType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"INFINITE":    2,
+}
+
+func (x SpendingLimitTypeEnum_SpendingLimitType) String() string {
+	return proto.EnumName(SpendingLimitTypeEnum_SpendingLimitType_name, int32(x))
+}
+func (SpendingLimitTypeEnum_SpendingLimitType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_spending_limit_type_5f13fab4ccb8ebff, []int{0, 0}
+}
+
+// Message describing spending limit types.
+type SpendingLimitTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SpendingLimitTypeEnum) Reset()         { *m = SpendingLimitTypeEnum{} }
+func (m *SpendingLimitTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*SpendingLimitTypeEnum) ProtoMessage()    {}
+func (*SpendingLimitTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_spending_limit_type_5f13fab4ccb8ebff, []int{0}
+}
+func (m *SpendingLimitTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SpendingLimitTypeEnum.Unmarshal(m, b)
+}
+func (m *SpendingLimitTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SpendingLimitTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *SpendingLimitTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SpendingLimitTypeEnum.Merge(dst, src)
+}
+func (m *SpendingLimitTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_SpendingLimitTypeEnum.Size(m)
+}
+func (m *SpendingLimitTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SpendingLimitTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SpendingLimitTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SpendingLimitTypeEnum)(nil), "google.ads.googleads.v0.enums.SpendingLimitTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.SpendingLimitTypeEnum_SpendingLimitType", SpendingLimitTypeEnum_SpendingLimitType_name, SpendingLimitTypeEnum_SpendingLimitType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/spending_limit_type.proto", fileDescriptor_spending_limit_type_5f13fab4ccb8ebff)
+}
+
+var fileDescriptor_spending_limit_type_5f13fab4ccb8ebff = []byte{
+	// 258 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xe2, 0x82, 0xd4, 0xbc, 0x94, 0xcc, 0xbc, 0xf4, 0xf8, 0x9c, 0xcc, 0xdc,
+	0xcc, 0x92, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88,
+	0x6a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x46, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x46, 0xa5, 0x08,
+	0x2e, 0xd1, 0x60, 0xa8, 0x5e, 0x1f, 0x90, 0xd6, 0x90, 0xca, 0x82, 0x54, 0xd7, 0xbc, 0xd2, 0x5c,
+	0x25, 0x7b, 0x2e, 0x41, 0x0c, 0x09, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67,
+	0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff,
+	0x70, 0x3f, 0x01, 0x46, 0x21, 0x1e, 0x2e, 0x0e, 0x4f, 0x3f, 0x37, 0x4f, 0x3f, 0xcf, 0x10, 0x57,
+	0x01, 0x26, 0xa7, 0xe3, 0x8c, 0x5c, 0x8a, 0xc9, 0xf9, 0xb9, 0x7a, 0x78, 0xed, 0x77, 0x12, 0xc3,
+	0xb0, 0x24, 0x00, 0xe4, 0xec, 0x00, 0xc6, 0x28, 0x27, 0xa8, 0xc6, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc,
+	0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0, 0xa7, 0x60, 0x21, 0x50, 0x90, 0x59,
+	0x8c, 0x23, 0x40, 0xac, 0xc1, 0xe4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0xb2, 0xee,
+	0x10, 0xa3, 0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0xe4, 0xd3, 0xe2,
+	0x53, 0x30, 0xf9, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x7c, 0x4c, 0x98, 0x41, 0x0c, 0x58, 0x3e,
+	0x89, 0x0d, 0x6c, 0xa9, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x86, 0x41, 0xe0, 0xb2, 0x84, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/structured_snippet_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/structured_snippet_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..bb34b96866ece0408c15a7cb0276dcb70dc1a744
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/structured_snippet_placeholder_field.pb.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/structured_snippet_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Structured Snippet placeholder fields.
+type StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField int32
+
+const (
+	// Not specified.
+	StructuredSnippetPlaceholderFieldEnum_UNSPECIFIED StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	StructuredSnippetPlaceholderFieldEnum_UNKNOWN StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 1
+	// Data Type: STRING. The category of snippet of your products/services.
+	// Must match one of the predefined structured snippets headers exactly.
+	// See
+	// https://developers.google.com/adwords/api
+	// /docs/appendix/structured-snippet-headers
+	StructuredSnippetPlaceholderFieldEnum_HEADER StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 2
+	// Data Type: STRING_LIST. Text values that describe your products/services.
+	// All text must be family safe. Special or non-ASCII characters are not
+	// permitted. A snippet can be at most 25 characters.
+	StructuredSnippetPlaceholderFieldEnum_SNIPPETS StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField = 3
+)
+
+var StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "HEADER",
+	3: "SNIPPETS",
+}
+var StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"HEADER":      2,
+	"SNIPPETS":    3,
+}
+
+func (x StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField) String() string {
+	return proto.EnumName(StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_name, int32(x))
+}
+func (StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_structured_snippet_placeholder_field_83f6792b7ed6205b, []int{0, 0}
+}
+
+// Values for Structured Snippet placeholder fields.
+type StructuredSnippetPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StructuredSnippetPlaceholderFieldEnum) Reset()         { *m = StructuredSnippetPlaceholderFieldEnum{} }
+func (m *StructuredSnippetPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*StructuredSnippetPlaceholderFieldEnum) ProtoMessage()    {}
+func (*StructuredSnippetPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_structured_snippet_placeholder_field_83f6792b7ed6205b, []int{0}
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *StructuredSnippetPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.Size(m)
+}
+func (m *StructuredSnippetPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StructuredSnippetPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*StructuredSnippetPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.StructuredSnippetPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField", StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_name, StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/structured_snippet_placeholder_field.proto", fileDescriptor_structured_snippet_placeholder_field_83f6792b7ed6205b)
+}
+
+var fileDescriptor_structured_snippet_placeholder_field_83f6792b7ed6205b = []byte{
+	// 291 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0x6d, 0x07, 0x53, 0x32, 0xc1, 0xd2, 0xfb, 0x0e, 0x1b, 0xe8, 0x31, 0x2d, 0x78, 0xf4,
+	0xd4, 0xba, 0x6c, 0x2b, 0x42, 0x0d, 0xd6, 0x4d, 0xd0, 0x42, 0xa9, 0x4d, 0x8c, 0x85, 0xb6, 0x29,
+	0x49, 0xbb, 0x27, 0xf0, 0x49, 0x3c, 0xfa, 0x28, 0xbe, 0x80, 0xaf, 0x23, 0x49, 0x5c, 0x3d, 0xe9,
+	0x2e, 0xe1, 0x0f, 0xff, 0xe4, 0x97, 0xef, 0xfb, 0x81, 0x35, 0xe3, 0x9c, 0x55, 0xd4, 0xcb, 0x89,
+	0xf4, 0x4c, 0x54, 0x69, 0xe7, 0x7b, 0xb4, 0xe9, 0x6b, 0xe9, 0xc9, 0x4e, 0xf4, 0x45, 0xd7, 0x0b,
+	0x4a, 0x32, 0xd9, 0x94, 0x6d, 0x4b, 0xbb, 0xac, 0xad, 0xf2, 0x82, 0xbe, 0xf2, 0x8a, 0x50, 0x91,
+	0xbd, 0x94, 0xb4, 0x22, 0xb0, 0x15, 0xbc, 0xe3, 0xee, 0xd4, 0x3c, 0x87, 0x39, 0x91, 0x70, 0x20,
+	0xc1, 0x9d, 0x0f, 0x35, 0x69, 0xfe, 0x66, 0x81, 0xf3, 0x64, 0xa0, 0x25, 0x06, 0x86, 0x7f, 0x59,
+	0x4b, 0x85, 0x42, 0x4d, 0x5f, 0xcf, 0x9f, 0xc0, 0xec, 0xe0, 0x45, 0xf7, 0x0c, 0x4c, 0x36, 0x71,
+	0x82, 0xd1, 0x75, 0xb4, 0x8c, 0xd0, 0xc2, 0x39, 0x72, 0x27, 0xe0, 0x78, 0x13, 0xdf, 0xc4, 0xb7,
+	0x0f, 0xb1, 0x63, 0xb9, 0x00, 0x8c, 0xd7, 0x28, 0x58, 0xa0, 0x3b, 0xc7, 0x76, 0x4f, 0xc1, 0x49,
+	0x12, 0x47, 0x18, 0xa3, 0xfb, 0xc4, 0x19, 0x85, 0x5f, 0x16, 0x98, 0x15, 0xbc, 0x86, 0xff, 0x0e,
+	0x1b, 0x5e, 0x1c, 0x1c, 0x00, 0xab, 0x9d, 0xb1, 0xf5, 0x18, 0xfe, 0x80, 0x18, 0xaf, 0xf2, 0x86,
+	0x41, 0x2e, 0x98, 0xc7, 0x68, 0xa3, 0x8d, 0xec, 0x7d, 0xb6, 0xa5, 0xfc, 0x43, 0xef, 0x95, 0x3e,
+	0xdf, 0xed, 0xd1, 0x2a, 0x08, 0x3e, 0xec, 0xe9, 0xca, 0xa0, 0x02, 0x22, 0xa1, 0x89, 0x2a, 0x6d,
+	0x7d, 0xa8, 0xac, 0xc8, 0xcf, 0x7d, 0x9f, 0x06, 0x44, 0xa6, 0x43, 0x9f, 0x6e, 0xfd, 0x54, 0xf7,
+	0xcf, 0x63, 0xfd, 0xe9, 0xe5, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, 0xa3, 0x08, 0x30, 0xd2,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal.pb.go b/googleapis/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..cb71fbf2d768ae7000d62571ebaed78c551d255b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Goal of TargetCpaOptIn recommendation.
+type TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal int32
+
+const (
+	// Not specified.
+	TargetCpaOptInRecommendationGoalEnum_UNSPECIFIED TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 0
+	// Used for return value only. Represents value unknown in this version.
+	TargetCpaOptInRecommendationGoalEnum_UNKNOWN TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 1
+	// Recommendation to set Target CPA to maintain the same cost.
+	TargetCpaOptInRecommendationGoalEnum_SAME_COST TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 2
+	// Recommendation to set Target CPA to maintain the same conversions.
+	TargetCpaOptInRecommendationGoalEnum_SAME_CONVERSIONS TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 3
+	// Recommendation to set Target CPA to maintain the same CPA.
+	TargetCpaOptInRecommendationGoalEnum_SAME_CPA TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 4
+	// Recommendation to set Target CPA to a value that is as close as possible
+	// to, yet lower than, the actual CPA (computed for past 28 days).
+	TargetCpaOptInRecommendationGoalEnum_CLOSEST_CPA TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal = 5
+)
+
+var TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SAME_COST",
+	3: "SAME_CONVERSIONS",
+	4: "SAME_CPA",
+	5: "CLOSEST_CPA",
+}
+var TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"SAME_COST":        2,
+	"SAME_CONVERSIONS": 3,
+	"SAME_CPA":         4,
+	"CLOSEST_CPA":      5,
+}
+
+func (x TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal) String() string {
+	return proto.EnumName(TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_name, int32(x))
+}
+func (TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_target_cpa_opt_in_recommendation_goal_ca9ee4bf5aa58147, []int{0, 0}
+}
+
+// Container for enum describing goals for TargetCpaOptIn recommendation.
+type TargetCpaOptInRecommendationGoalEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TargetCpaOptInRecommendationGoalEnum) Reset()         { *m = TargetCpaOptInRecommendationGoalEnum{} }
+func (m *TargetCpaOptInRecommendationGoalEnum) String() string { return proto.CompactTextString(m) }
+func (*TargetCpaOptInRecommendationGoalEnum) ProtoMessage()    {}
+func (*TargetCpaOptInRecommendationGoalEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_target_cpa_opt_in_recommendation_goal_ca9ee4bf5aa58147, []int{0}
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Unmarshal(m, b)
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Marshal(b, m, deterministic)
+}
+func (dst *TargetCpaOptInRecommendationGoalEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Merge(dst, src)
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_Size() int {
+	return xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.Size(m)
+}
+func (m *TargetCpaOptInRecommendationGoalEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetCpaOptInRecommendationGoalEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*TargetCpaOptInRecommendationGoalEnum)(nil), "google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal", TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_name, TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal.proto", fileDescriptor_target_cpa_opt_in_recommendation_goal_ca9ee4bf5aa58147)
+}
+
+var fileDescriptor_target_cpa_opt_in_recommendation_goal_ca9ee4bf5aa58147 = []byte{
+	// 323 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xdf, 0x4a, 0xfb, 0x30,
+	0x1c, 0xc5, 0x7f, 0xdd, 0x7e, 0xfe, 0xcb, 0x14, 0x4b, 0xf1, 0x76, 0xa0, 0x43, 0x6f, 0xd3, 0x82,
+	0x97, 0x5e, 0x75, 0xb5, 0x8e, 0xa2, 0xb6, 0x65, 0xd9, 0x26, 0x48, 0xa1, 0xc4, 0x35, 0x84, 0x41,
+	0x9b, 0x6f, 0x68, 0xb2, 0x3d, 0x81, 0x4f, 0xe2, 0xa5, 0xe0, 0x8b, 0xf8, 0x00, 0x3e, 0x8f, 0x34,
+	0xdd, 0x06, 0x5e, 0xe8, 0x6e, 0xc2, 0xc9, 0x39, 0xc9, 0x27, 0xc9, 0x09, 0x8a, 0x38, 0x00, 0x2f,
+	0x99, 0x4b, 0x0b, 0xe5, 0xb6, 0xb2, 0x51, 0x2b, 0xcf, 0x65, 0x62, 0x59, 0x29, 0x57, 0xd3, 0x9a,
+	0x33, 0x9d, 0xcf, 0x25, 0xcd, 0x41, 0xea, 0x7c, 0x21, 0xf2, 0x9a, 0xcd, 0xa1, 0xaa, 0x98, 0x28,
+	0xa8, 0x5e, 0x80, 0xc8, 0x39, 0xd0, 0x12, 0xcb, 0x1a, 0x34, 0x38, 0xfd, 0x76, 0x3f, 0xa6, 0x85,
+	0xc2, 0x5b, 0x14, 0x5e, 0x79, 0xd8, 0xa0, 0x06, 0x1f, 0x16, 0xba, 0x9c, 0x18, 0x5c, 0x20, 0x69,
+	0x22, 0x75, 0x24, 0xc6, 0x3f, 0x50, 0x23, 0xa0, 0x65, 0x28, 0x96, 0xd5, 0xe0, 0xd5, 0x42, 0xe7,
+	0xbb, 0x16, 0x3a, 0xa7, 0xa8, 0x37, 0x8d, 0x49, 0x1a, 0x06, 0xd1, 0x5d, 0x14, 0xde, 0xda, 0xff,
+	0x9c, 0x1e, 0x3a, 0x98, 0xc6, 0xf7, 0x71, 0xf2, 0x14, 0xdb, 0x96, 0x73, 0x82, 0x8e, 0x88, 0xff,
+	0x18, 0xe6, 0x41, 0x42, 0x26, 0x76, 0xc7, 0x39, 0x43, 0xf6, 0x7a, 0x1a, 0xcf, 0xc2, 0x31, 0x89,
+	0x92, 0x98, 0xd8, 0x5d, 0xe7, 0x18, 0x1d, 0xb6, 0x6e, 0xea, 0xdb, 0xff, 0x1b, 0x60, 0xf0, 0x90,
+	0x90, 0x90, 0x4c, 0x8c, 0xb1, 0x37, 0xfc, 0xb2, 0xd0, 0xc5, 0x1c, 0x2a, 0xfc, 0xe7, 0xab, 0x86,
+	0x57, 0xbb, 0x6e, 0x9a, 0x36, 0xdd, 0xa4, 0xd6, 0xf3, 0x70, 0xcd, 0xe1, 0x50, 0x52, 0xc1, 0x31,
+	0xd4, 0xdc, 0xe5, 0x4c, 0x98, 0xe6, 0x36, 0xc5, 0xcb, 0x85, 0xfa, 0xe5, 0x1f, 0x6e, 0xcc, 0xf8,
+	0xd6, 0xe9, 0x8e, 0x7c, 0xff, 0xbd, 0xd3, 0x1f, 0xb5, 0x28, 0xbf, 0x50, 0xb8, 0x95, 0x8d, 0x9a,
+	0x79, 0xb8, 0xa9, 0x4f, 0x7d, 0x6e, 0xf2, 0xcc, 0x2f, 0x54, 0xb6, 0xcd, 0xb3, 0x99, 0x97, 0x99,
+	0xfc, 0x65, 0xdf, 0x1c, 0x7a, 0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xb8, 0x78, 0x0d, 0xfb,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/targeting_dimension.pb.go b/googleapis/ads/googleads/v0/enums/targeting_dimension.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..53ba2141bf65b14a5fa4317ed2774a3ad16da1b9
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/targeting_dimension.pb.go
@@ -0,0 +1,149 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/targeting_dimension.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible targeting dimensions.
+type TargetingDimensionEnum_TargetingDimension int32
+
+const (
+	// Not specified.
+	TargetingDimensionEnum_UNSPECIFIED TargetingDimensionEnum_TargetingDimension = 0
+	// Used for return value only. Represents value unknown in this version.
+	TargetingDimensionEnum_UNKNOWN TargetingDimensionEnum_TargetingDimension = 1
+	// Keyword criteria, e.g. 'mars cruise'. KEYWORD may be used as a custom bid
+	// dimension. Keywords are always a targeting dimension, so may not be set
+	// as a target "ALL" dimension with TargetRestriction.
+	TargetingDimensionEnum_KEYWORD TargetingDimensionEnum_TargetingDimension = 2
+	// Audience criteria, which include user list, user interest, custom
+	// affinity,  and custom in market.
+	TargetingDimensionEnum_AUDIENCE TargetingDimensionEnum_TargetingDimension = 3
+	// Topic criteria for targeting categories of content, e.g.
+	// 'category::Animals>Pets' Used for Display and Video targeting.
+	TargetingDimensionEnum_TOPIC TargetingDimensionEnum_TargetingDimension = 4
+	// Criteria for targeting gender.
+	TargetingDimensionEnum_GENDER TargetingDimensionEnum_TargetingDimension = 5
+	// Criteria for targeting age ranges.
+	TargetingDimensionEnum_AGE_RANGE TargetingDimensionEnum_TargetingDimension = 6
+	// Placement criteria, which include websites like 'www.flowers4sale.com',
+	// as well as mobile applications, mobile app categories, YouTube videos,
+	// and YouTube channels.
+	TargetingDimensionEnum_PLACEMENT TargetingDimensionEnum_TargetingDimension = 7
+	// Criteria for parental status targeting.
+	TargetingDimensionEnum_PARENTAL_STATUS TargetingDimensionEnum_TargetingDimension = 8
+	// Criteria for income range targeting.
+	TargetingDimensionEnum_INCOME_RANGE TargetingDimensionEnum_TargetingDimension = 9
+)
+
+var TargetingDimensionEnum_TargetingDimension_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "KEYWORD",
+	3: "AUDIENCE",
+	4: "TOPIC",
+	5: "GENDER",
+	6: "AGE_RANGE",
+	7: "PLACEMENT",
+	8: "PARENTAL_STATUS",
+	9: "INCOME_RANGE",
+}
+var TargetingDimensionEnum_TargetingDimension_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"KEYWORD":         2,
+	"AUDIENCE":        3,
+	"TOPIC":           4,
+	"GENDER":          5,
+	"AGE_RANGE":       6,
+	"PLACEMENT":       7,
+	"PARENTAL_STATUS": 8,
+	"INCOME_RANGE":    9,
+}
+
+func (x TargetingDimensionEnum_TargetingDimension) String() string {
+	return proto.EnumName(TargetingDimensionEnum_TargetingDimension_name, int32(x))
+}
+func (TargetingDimensionEnum_TargetingDimension) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_targeting_dimension_91506e51c2bbdcdf, []int{0, 0}
+}
+
+// The dimensions that can be targeted.
+type TargetingDimensionEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TargetingDimensionEnum) Reset()         { *m = TargetingDimensionEnum{} }
+func (m *TargetingDimensionEnum) String() string { return proto.CompactTextString(m) }
+func (*TargetingDimensionEnum) ProtoMessage()    {}
+func (*TargetingDimensionEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_targeting_dimension_91506e51c2bbdcdf, []int{0}
+}
+func (m *TargetingDimensionEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TargetingDimensionEnum.Unmarshal(m, b)
+}
+func (m *TargetingDimensionEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TargetingDimensionEnum.Marshal(b, m, deterministic)
+}
+func (dst *TargetingDimensionEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TargetingDimensionEnum.Merge(dst, src)
+}
+func (m *TargetingDimensionEnum) XXX_Size() int {
+	return xxx_messageInfo_TargetingDimensionEnum.Size(m)
+}
+func (m *TargetingDimensionEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TargetingDimensionEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TargetingDimensionEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*TargetingDimensionEnum)(nil), "google.ads.googleads.v0.enums.TargetingDimensionEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.TargetingDimensionEnum_TargetingDimension", TargetingDimensionEnum_TargetingDimension_name, TargetingDimensionEnum_TargetingDimension_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/targeting_dimension.proto", fileDescriptor_targeting_dimension_91506e51c2bbdcdf)
+}
+
+var fileDescriptor_targeting_dimension_91506e51c2bbdcdf = []byte{
+	// 339 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x6b, 0xf2, 0x30,
+	0x1c, 0xc7, 0x9f, 0xea, 0xe3, 0xbf, 0xe8, 0x30, 0x64, 0xb0, 0x9d, 0x3c, 0xcc, 0x17, 0x90, 0x16,
+	0x76, 0xd8, 0x61, 0xa7, 0xd8, 0x66, 0xa5, 0xa8, 0x69, 0xa9, 0xad, 0xb2, 0x51, 0x90, 0x6e, 0x2d,
+	0xa1, 0x60, 0x13, 0x31, 0xea, 0x0b, 0xda, 0x6d, 0x7b, 0x1d, 0x3b, 0x8c, 0xbd, 0xaa, 0xd1, 0x76,
+	0xf5, 0x22, 0xdb, 0x25, 0x7c, 0x7f, 0x7c, 0xf3, 0x49, 0xf8, 0x7d, 0xc0, 0x1d, 0x97, 0x92, 0x6f,
+	0x52, 0x3d, 0x4e, 0x94, 0x5e, 0xc5, 0x22, 0x1d, 0x0d, 0x3d, 0x15, 0x87, 0x5c, 0xe9, 0xfb, 0x78,
+	0xc7, 0xd3, 0x7d, 0x26, 0xf8, 0x3a, 0xc9, 0xf2, 0x54, 0xa8, 0x4c, 0x0a, 0xbc, 0xdd, 0xc9, 0xbd,
+	0x44, 0xa3, 0xea, 0x36, 0x8e, 0x13, 0x85, 0x4f, 0x20, 0x3e, 0x1a, 0xb8, 0x04, 0xc7, 0x1f, 0x1a,
+	0xb8, 0x0a, 0x6a, 0xd8, 0xaa, 0x59, 0x2a, 0x0e, 0xf9, 0xf8, 0x4d, 0x03, 0xe8, 0xbc, 0x42, 0x43,
+	0xd0, 0x0f, 0xd9, 0xc2, 0xa3, 0xa6, 0xf3, 0xe0, 0x50, 0x0b, 0xfe, 0x43, 0x7d, 0xd0, 0x09, 0xd9,
+	0x94, 0xb9, 0x2b, 0x06, 0xb5, 0x62, 0x98, 0xd2, 0xc7, 0x95, 0xeb, 0x5b, 0xb0, 0x81, 0x06, 0xa0,
+	0x4b, 0x42, 0xcb, 0xa1, 0xcc, 0xa4, 0xb0, 0x89, 0x7a, 0xa0, 0x15, 0xb8, 0x9e, 0x63, 0xc2, 0xff,
+	0x08, 0x80, 0xb6, 0x4d, 0x99, 0x45, 0x7d, 0xd8, 0x42, 0x17, 0xa0, 0x47, 0x6c, 0xba, 0xf6, 0x09,
+	0xb3, 0x29, 0x6c, 0x17, 0xa3, 0x37, 0x23, 0x26, 0x9d, 0x53, 0x16, 0xc0, 0x0e, 0xba, 0x04, 0x43,
+	0x8f, 0xf8, 0x94, 0x05, 0x64, 0xb6, 0x5e, 0x04, 0x24, 0x08, 0x17, 0xb0, 0x8b, 0x20, 0x18, 0x38,
+	0xcc, 0x74, 0xe7, 0x35, 0xd5, 0x9b, 0x7c, 0x6a, 0xe0, 0xe6, 0x45, 0xe6, 0xf8, 0xcf, 0x65, 0x27,
+	0xd7, 0xe7, 0xeb, 0x78, 0x85, 0x24, 0x4f, 0x7b, 0x9a, 0xfc, 0x90, 0x5c, 0x6e, 0x62, 0xc1, 0xb1,
+	0xdc, 0x71, 0x9d, 0xa7, 0xa2, 0x54, 0x58, 0xfb, 0xde, 0x66, 0xea, 0x17, 0xfd, 0xf7, 0xe5, 0xf9,
+	0xda, 0x68, 0xda, 0x84, 0xbc, 0x37, 0x46, 0x76, 0xf5, 0x14, 0x49, 0x14, 0xae, 0x62, 0x91, 0x96,
+	0x06, 0x2e, 0xac, 0xaa, 0xaf, 0xba, 0x8f, 0x48, 0xa2, 0xa2, 0x53, 0x1f, 0x2d, 0x8d, 0xa8, 0xec,
+	0x9f, 0xdb, 0xe5, 0xa7, 0xb7, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x09, 0x9d, 0xce, 0xbf, 0xf2,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/time_type.pb.go b/googleapis/ads/googleads/v0/enums/time_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0c59e79027ad29dc012160272d49387b9ec72747
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/time_type.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/time_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The possible time types used by certain resources as an alternative to
+// absolute timestamps.
+type TimeTypeEnum_TimeType int32
+
+const (
+	// Not specified.
+	TimeTypeEnum_UNSPECIFIED TimeTypeEnum_TimeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	TimeTypeEnum_UNKNOWN TimeTypeEnum_TimeType = 1
+	// As soon as possible.
+	TimeTypeEnum_NOW TimeTypeEnum_TimeType = 2
+	// An infinite point in the future.
+	TimeTypeEnum_FOREVER TimeTypeEnum_TimeType = 3
+)
+
+var TimeTypeEnum_TimeType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NOW",
+	3: "FOREVER",
+}
+var TimeTypeEnum_TimeType_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"NOW":         2,
+	"FOREVER":     3,
+}
+
+func (x TimeTypeEnum_TimeType) String() string {
+	return proto.EnumName(TimeTypeEnum_TimeType_name, int32(x))
+}
+func (TimeTypeEnum_TimeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_time_type_5fcdbdb55d070640, []int{0, 0}
+}
+
+// Message describing time types.
+type TimeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TimeTypeEnum) Reset()         { *m = TimeTypeEnum{} }
+func (m *TimeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*TimeTypeEnum) ProtoMessage()    {}
+func (*TimeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_time_type_5fcdbdb55d070640, []int{0}
+}
+func (m *TimeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TimeTypeEnum.Unmarshal(m, b)
+}
+func (m *TimeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TimeTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *TimeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TimeTypeEnum.Merge(dst, src)
+}
+func (m *TimeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_TimeTypeEnum.Size(m)
+}
+func (m *TimeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TimeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TimeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*TimeTypeEnum)(nil), "google.ads.googleads.v0.enums.TimeTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.TimeTypeEnum_TimeType", TimeTypeEnum_TimeType_name, TimeTypeEnum_TimeType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/time_type.proto", fileDescriptor_time_type_5fcdbdb55d070640)
+}
+
+var fileDescriptor_time_type_5fcdbdb55d070640 = []byte{
+	// 252 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x92, 0xcc, 0xdc, 0xd4, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2,
+	0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x1a, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x72, 0xbd, 0x32,
+	0x03, 0x3d, 0xb0, 0x72, 0x25, 0x3f, 0x2e, 0x9e, 0x90, 0xcc, 0xdc, 0xd4, 0x90, 0xca, 0x82, 0x54,
+	0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x3b, 0x2e, 0x0e, 0x18, 0x5f, 0x88, 0x9f, 0x8b, 0x3b, 0xd4, 0x2f,
+	0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3, 0xd5, 0x45, 0x80, 0x41, 0x88, 0x9b, 0x8b, 0x3d, 0xd4,
+	0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80, 0x51, 0x88, 0x9d, 0x8b, 0xd9, 0xcf, 0x3f, 0x5c, 0x80,
+	0x09, 0x24, 0xea, 0xe6, 0x1f, 0xe4, 0x1a, 0xe6, 0x1a, 0x24, 0xc0, 0xec, 0xb4, 0x8f, 0x91, 0x4b,
+	0x31, 0x39, 0x3f, 0x57, 0x0f, 0xaf, 0xad, 0x4e, 0xbc, 0x30, 0x3b, 0x02, 0x40, 0x6e, 0x0c, 0x60,
+	0x8c, 0x72, 0x82, 0xaa, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f,
+	0x4f, 0xcd, 0x03, 0xfb, 0x00, 0xe6, 0xc9, 0x82, 0xcc, 0x62, 0x1c, 0x7e, 0xb6, 0x06, 0x93, 0x8b,
+	0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0xc9, 0xba, 0x43, 0x8c, 0x72, 0x4c, 0x29, 0xd6, 0x83,
+	0x30, 0x41, 0xac, 0x30, 0x03, 0x3d, 0x90, 0xff, 0x8a, 0x4f, 0xc1, 0xe4, 0x63, 0x1c, 0x53, 0x8a,
+	0x63, 0xe0, 0xf2, 0x31, 0x61, 0x06, 0x31, 0x60, 0xf9, 0x24, 0x36, 0xb0, 0xa5, 0xc6, 0x80, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0xb3, 0xaf, 0x4d, 0x2b, 0x67, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/tracking_code_page_format.pb.go b/googleapis/ads/googleads/v0/enums/tracking_code_page_format.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3318cc3bcf681429e4e55bb1edeee694efdaf2f2
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/tracking_code_page_format.pb.go
@@ -0,0 +1,117 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/tracking_code_page_format.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The format of the web page where the tracking tag and snippet will be
+// installed.
+type TrackingCodePageFormatEnum_TrackingCodePageFormat int32
+
+const (
+	// Not specified.
+	TrackingCodePageFormatEnum_UNSPECIFIED TrackingCodePageFormatEnum_TrackingCodePageFormat = 0
+	// Used for return value only. Represents value unknown in this version.
+	TrackingCodePageFormatEnum_UNKNOWN TrackingCodePageFormatEnum_TrackingCodePageFormat = 1
+	// Standard HTML page format.
+	TrackingCodePageFormatEnum_HTML TrackingCodePageFormatEnum_TrackingCodePageFormat = 2
+	// Google AMP page format.
+	TrackingCodePageFormatEnum_AMP TrackingCodePageFormatEnum_TrackingCodePageFormat = 3
+)
+
+var TrackingCodePageFormatEnum_TrackingCodePageFormat_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "HTML",
+	3: "AMP",
+}
+var TrackingCodePageFormatEnum_TrackingCodePageFormat_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"HTML":        2,
+	"AMP":         3,
+}
+
+func (x TrackingCodePageFormatEnum_TrackingCodePageFormat) String() string {
+	return proto.EnumName(TrackingCodePageFormatEnum_TrackingCodePageFormat_name, int32(x))
+}
+func (TrackingCodePageFormatEnum_TrackingCodePageFormat) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_tracking_code_page_format_dedd59df73042aa1, []int{0, 0}
+}
+
+// Container for enum describing the format of the web page where the tracking
+// tag and snippet will be installed.
+type TrackingCodePageFormatEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TrackingCodePageFormatEnum) Reset()         { *m = TrackingCodePageFormatEnum{} }
+func (m *TrackingCodePageFormatEnum) String() string { return proto.CompactTextString(m) }
+func (*TrackingCodePageFormatEnum) ProtoMessage()    {}
+func (*TrackingCodePageFormatEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_tracking_code_page_format_dedd59df73042aa1, []int{0}
+}
+func (m *TrackingCodePageFormatEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TrackingCodePageFormatEnum.Unmarshal(m, b)
+}
+func (m *TrackingCodePageFormatEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TrackingCodePageFormatEnum.Marshal(b, m, deterministic)
+}
+func (dst *TrackingCodePageFormatEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TrackingCodePageFormatEnum.Merge(dst, src)
+}
+func (m *TrackingCodePageFormatEnum) XXX_Size() int {
+	return xxx_messageInfo_TrackingCodePageFormatEnum.Size(m)
+}
+func (m *TrackingCodePageFormatEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TrackingCodePageFormatEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TrackingCodePageFormatEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*TrackingCodePageFormatEnum)(nil), "google.ads.googleads.v0.enums.TrackingCodePageFormatEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.TrackingCodePageFormatEnum_TrackingCodePageFormat", TrackingCodePageFormatEnum_TrackingCodePageFormat_name, TrackingCodePageFormatEnum_TrackingCodePageFormat_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/tracking_code_page_format.proto", fileDescriptor_tracking_code_page_format_dedd59df73042aa1)
+}
+
+var fileDescriptor_tracking_code_page_format_dedd59df73042aa1 = []byte{
+	// 274 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x92, 0xa2, 0xc4, 0xe4, 0xec, 0xcc, 0xbc, 0xf4, 0xf8, 0xe4, 0xfc, 0x94,
+	0xd4, 0xf8, 0x82, 0xc4, 0xf4, 0xd4, 0xf8, 0xb4, 0xfc, 0xa2, 0xdc, 0xc4, 0x12, 0xbd, 0x82, 0xa2,
+	0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x1e, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x76, 0xbd, 0x32,
+	0x03, 0x3d, 0xb0, 0x76, 0xa5, 0x74, 0x2e, 0xa9, 0x10, 0xa8, 0x09, 0xce, 0xf9, 0x29, 0xa9, 0x01,
+	0x89, 0xe9, 0xa9, 0x6e, 0x60, 0xed, 0xae, 0x79, 0xa5, 0xb9, 0x4a, 0x9e, 0x5c, 0x62, 0xd8, 0x65,
+	0x85, 0xf8, 0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c, 0x9d, 0x3d, 0xdd, 0x3c, 0x5d, 0x5d, 0x04,
+	0x18, 0x84, 0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd, 0xfc, 0xc3, 0xfd, 0x04, 0x18, 0x85, 0x38,
+	0xb8, 0x58, 0x3c, 0x42, 0x7c, 0x7d, 0x04, 0x98, 0x84, 0xd8, 0xb9, 0x98, 0x1d, 0x7d, 0x03, 0x04,
+	0x98, 0x9d, 0xce, 0x30, 0x72, 0x29, 0x26, 0xe7, 0xe7, 0xea, 0xe1, 0x75, 0x8e, 0x93, 0x34, 0x76,
+	0xeb, 0x02, 0x40, 0x5e, 0x09, 0x60, 0x8c, 0x72, 0x82, 0xea, 0x4e, 0xcf, 0xcf, 0x49, 0xcc, 0x4b,
+	0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0x7b, 0x14, 0x16, 0x36, 0x05, 0x99, 0xc5,
+	0x38, 0x82, 0xca, 0x1a, 0x4c, 0x2e, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24, 0xeb, 0x0e,
+	0x31, 0xca, 0x31, 0xa5, 0x58, 0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x40, 0x1e, 0x2f, 0x3e,
+	0x05, 0x93, 0x8f, 0x71, 0x4c, 0x29, 0x8e, 0x81, 0xcb, 0xc7, 0x84, 0x19, 0xc4, 0x80, 0xe5, 0x93,
+	0xd8, 0xc0, 0x96, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x49, 0x08, 0x44, 0x9e, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/tracking_code_type.pb.go b/googleapis/ads/googleads/v0/enums/tracking_code_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3d50aee66f619f481a3685f1833bb111f15dc224
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/tracking_code_type.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/tracking_code_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The type of the generated tag snippets for tracking conversions.
+type TrackingCodeTypeEnum_TrackingCodeType int32
+
+const (
+	// Not specified.
+	TrackingCodeTypeEnum_UNSPECIFIED TrackingCodeTypeEnum_TrackingCodeType = 0
+	// Used for return value only. Represents value unknown in this version.
+	TrackingCodeTypeEnum_UNKNOWN TrackingCodeTypeEnum_TrackingCodeType = 1
+	// The snippet that is fired as a result of a website page loading.
+	TrackingCodeTypeEnum_WEBPAGE TrackingCodeTypeEnum_TrackingCodeType = 2
+	// The snippet contains a JavaScript function which fires the tag. This
+	// function is typically called from an onClick handler added to a link or
+	// button element on the page.
+	TrackingCodeTypeEnum_WEBPAGE_ONCLICK TrackingCodeTypeEnum_TrackingCodeType = 3
+	// For embedding on a mobile webpage. The snippet contains a JavaScript
+	// function which fires the tag.
+	TrackingCodeTypeEnum_CLICK_TO_CALL TrackingCodeTypeEnum_TrackingCodeType = 4
+)
+
+var TrackingCodeTypeEnum_TrackingCodeType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "WEBPAGE",
+	3: "WEBPAGE_ONCLICK",
+	4: "CLICK_TO_CALL",
+}
+var TrackingCodeTypeEnum_TrackingCodeType_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"WEBPAGE":         2,
+	"WEBPAGE_ONCLICK": 3,
+	"CLICK_TO_CALL":   4,
+}
+
+func (x TrackingCodeTypeEnum_TrackingCodeType) String() string {
+	return proto.EnumName(TrackingCodeTypeEnum_TrackingCodeType_name, int32(x))
+}
+func (TrackingCodeTypeEnum_TrackingCodeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_tracking_code_type_637cc16341c8b183, []int{0, 0}
+}
+
+// Container for enum describing the type of the generated tag snippets for
+// tracking conversions.
+type TrackingCodeTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TrackingCodeTypeEnum) Reset()         { *m = TrackingCodeTypeEnum{} }
+func (m *TrackingCodeTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*TrackingCodeTypeEnum) ProtoMessage()    {}
+func (*TrackingCodeTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_tracking_code_type_637cc16341c8b183, []int{0}
+}
+func (m *TrackingCodeTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TrackingCodeTypeEnum.Unmarshal(m, b)
+}
+func (m *TrackingCodeTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TrackingCodeTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *TrackingCodeTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TrackingCodeTypeEnum.Merge(dst, src)
+}
+func (m *TrackingCodeTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_TrackingCodeTypeEnum.Size(m)
+}
+func (m *TrackingCodeTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TrackingCodeTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TrackingCodeTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*TrackingCodeTypeEnum)(nil), "google.ads.googleads.v0.enums.TrackingCodeTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.TrackingCodeTypeEnum_TrackingCodeType", TrackingCodeTypeEnum_TrackingCodeType_name, TrackingCodeTypeEnum_TrackingCodeType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/tracking_code_type.proto", fileDescriptor_tracking_code_type_637cc16341c8b183)
+}
+
+var fileDescriptor_tracking_code_type_637cc16341c8b183 = []byte{
+	// 287 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0x92, 0xa2, 0xc4, 0xe4, 0xec, 0xcc, 0xbc, 0xf4, 0xf8, 0xe4, 0xfc, 0x94,
+	0xd4, 0xf8, 0x92, 0xca, 0x82, 0x54, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x59, 0x88, 0x62,
+	0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x3e, 0xbd, 0x32, 0x03, 0x3d, 0xb0, 0x3e, 0xa5, 0x5a, 0x2e,
+	0x91, 0x10, 0xa8, 0x56, 0xe7, 0xfc, 0x94, 0xd4, 0x90, 0xca, 0x82, 0x54, 0xd7, 0xbc, 0xd2, 0x5c,
+	0xa5, 0x54, 0x2e, 0x01, 0x74, 0x71, 0x21, 0x7e, 0x2e, 0xee, 0x50, 0xbf, 0xe0, 0x00, 0x57, 0x67,
+	0x4f, 0x37, 0x4f, 0x57, 0x17, 0x01, 0x06, 0x21, 0x6e, 0x2e, 0xf6, 0x50, 0x3f, 0x6f, 0x3f, 0xff,
+	0x70, 0x3f, 0x01, 0x46, 0x10, 0x27, 0xdc, 0xd5, 0x29, 0xc0, 0xd1, 0xdd, 0x55, 0x80, 0x49, 0x48,
+	0x98, 0x8b, 0x1f, 0xca, 0x89, 0xf7, 0xf7, 0x73, 0xf6, 0xf1, 0x74, 0xf6, 0x16, 0x60, 0x16, 0x12,
+	0xe4, 0xe2, 0x05, 0x33, 0xe3, 0x43, 0xfc, 0xe3, 0x9d, 0x1d, 0x7d, 0x7c, 0x04, 0x58, 0x9c, 0x8e,
+	0x31, 0x72, 0x29, 0x26, 0xe7, 0xe7, 0xea, 0xe1, 0x75, 0xa4, 0x93, 0x28, 0xba, 0x53, 0x02, 0x40,
+	0x5e, 0x0b, 0x60, 0x8c, 0x72, 0x82, 0xea, 0x4b, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0xcb, 0x2f,
+	0x4a, 0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0x7b, 0x1c, 0x16, 0x48, 0x05, 0x99, 0xc5, 0x38, 0xc2, 0xcc,
+	0x1a, 0x4c, 0x2e, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0x24, 0xeb, 0x0e, 0x31, 0xca, 0x31,
+	0xa5, 0x58, 0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x40, 0xc1, 0x51, 0x7c, 0x0a, 0x26, 0x1f,
+	0xe3, 0x98, 0x52, 0x1c, 0x03, 0x97, 0x8f, 0x09, 0x33, 0x88, 0x01, 0xcb, 0x27, 0xb1, 0x81, 0x2d,
+	0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x3a, 0x69, 0xa9, 0xa7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/travel_placeholder_field.pb.go b/googleapis/ads/googleads/v0/enums/travel_placeholder_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b226f88f2cccc7747f81f933d3385737aede5e49
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/travel_placeholder_field.pb.go
@@ -0,0 +1,224 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/travel_placeholder_field.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Possible values for Travel placeholder fields.
+type TravelPlaceholderFieldEnum_TravelPlaceholderField int32
+
+const (
+	// Not specified.
+	TravelPlaceholderFieldEnum_UNSPECIFIED TravelPlaceholderFieldEnum_TravelPlaceholderField = 0
+	// Used for return value only. Represents value unknown in this version.
+	TravelPlaceholderFieldEnum_UNKNOWN TravelPlaceholderFieldEnum_TravelPlaceholderField = 1
+	// Data Type: STRING. Required. Destination id. Example: PAR, LON.
+	// For feed items that only have destination id, destination id must be a
+	// unique key. For feed items that have both destination id and origin id,
+	// then the combination must be a unique key.
+	TravelPlaceholderFieldEnum_DESTINATION_ID TravelPlaceholderFieldEnum_TravelPlaceholderField = 2
+	// Data Type: STRING. Origin id. Example: PAR, LON.
+	// Combination of DESTINATION_ID and ORIGIN_ID must be
+	// unique per offer.
+	TravelPlaceholderFieldEnum_ORIGIN_ID TravelPlaceholderFieldEnum_TravelPlaceholderField = 3
+	// Data Type: STRING. Required. Main headline with name to be shown in
+	// dynamic ad.
+	TravelPlaceholderFieldEnum_TITLE TravelPlaceholderFieldEnum_TravelPlaceholderField = 4
+	// Data Type: STRING. The destination name. Shorter names are recommended.
+	TravelPlaceholderFieldEnum_DESTINATION_NAME TravelPlaceholderFieldEnum_TravelPlaceholderField = 5
+	// Data Type: STRING. Origin name. Shorter names are recommended.
+	TravelPlaceholderFieldEnum_ORIGIN_NAME TravelPlaceholderFieldEnum_TravelPlaceholderField = 6
+	// Data Type: STRING. Price to be shown in the ad. Highly recommended for
+	// dynamic ads.
+	// Example: "100.00 USD"
+	TravelPlaceholderFieldEnum_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 7
+	// Data Type: STRING. Formatted price to be shown in the ad.
+	// Example: "Starting at $100.00 USD", "$80 - $100"
+	TravelPlaceholderFieldEnum_FORMATTED_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 8
+	// Data Type: STRING. Sale price to be shown in the ad.
+	// Example: "80.00 USD"
+	TravelPlaceholderFieldEnum_SALE_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 9
+	// Data Type: STRING. Formatted sale price to be shown in the ad.
+	// Example: "On sale for $80.00", "$60 - $80"
+	TravelPlaceholderFieldEnum_FORMATTED_SALE_PRICE TravelPlaceholderFieldEnum_TravelPlaceholderField = 10
+	// Data Type: URL. Image to be displayed in the ad.
+	TravelPlaceholderFieldEnum_IMAGE_URL TravelPlaceholderFieldEnum_TravelPlaceholderField = 11
+	// Data Type: STRING. Category of travel offer used to group like items
+	// together for recommendation engine.
+	TravelPlaceholderFieldEnum_CATEGORY TravelPlaceholderFieldEnum_TravelPlaceholderField = 12
+	// Data Type: STRING_LIST. Keywords used for product retrieval.
+	TravelPlaceholderFieldEnum_CONTEXTUAL_KEYWORDS TravelPlaceholderFieldEnum_TravelPlaceholderField = 13
+	// Data Type: STRING. Address of travel offer, including postal code.
+	TravelPlaceholderFieldEnum_DESTINATION_ADDRESS TravelPlaceholderFieldEnum_TravelPlaceholderField = 14
+	// Data Type: URL_LIST. Required. Final URLs to be used in ad, when using
+	// Upgraded URLs; the more specific the better (e.g. the individual URL of a
+	// specific travel offer and its location).
+	TravelPlaceholderFieldEnum_FINAL_URL TravelPlaceholderFieldEnum_TravelPlaceholderField = 15
+	// Data Type: URL_LIST. Final mobile URLs for the ad when using Upgraded
+	// URLs.
+	TravelPlaceholderFieldEnum_FINAL_MOBILE_URLS TravelPlaceholderFieldEnum_TravelPlaceholderField = 16
+	// Data Type: URL. Tracking template for the ad when using Upgraded URLs.
+	TravelPlaceholderFieldEnum_TRACKING_URL TravelPlaceholderFieldEnum_TravelPlaceholderField = 17
+	// Data Type: STRING. Android app link. Must be formatted as:
+	// android-app://{package_id}/{scheme}/{host_path}.
+	// The components are defined as follows:
+	// package_id: app ID as specified in Google Play.
+	// scheme: the scheme to pass to the application. Can be HTTP, or a custom
+	//   scheme.
+	// host_path: identifies the specific content within your application.
+	TravelPlaceholderFieldEnum_ANDROID_APP_LINK TravelPlaceholderFieldEnum_TravelPlaceholderField = 18
+	// Data Type: STRING_LIST. List of recommended destination IDs to show
+	// together with this item.
+	TravelPlaceholderFieldEnum_SIMILAR_DESTINATION_IDS TravelPlaceholderFieldEnum_TravelPlaceholderField = 19
+	// Data Type: STRING. iOS app link.
+	TravelPlaceholderFieldEnum_IOS_APP_LINK TravelPlaceholderFieldEnum_TravelPlaceholderField = 20
+	// Data Type: INT64. iOS app store ID.
+	TravelPlaceholderFieldEnum_IOS_APP_STORE_ID TravelPlaceholderFieldEnum_TravelPlaceholderField = 21
+)
+
+var TravelPlaceholderFieldEnum_TravelPlaceholderField_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DESTINATION_ID",
+	3:  "ORIGIN_ID",
+	4:  "TITLE",
+	5:  "DESTINATION_NAME",
+	6:  "ORIGIN_NAME",
+	7:  "PRICE",
+	8:  "FORMATTED_PRICE",
+	9:  "SALE_PRICE",
+	10: "FORMATTED_SALE_PRICE",
+	11: "IMAGE_URL",
+	12: "CATEGORY",
+	13: "CONTEXTUAL_KEYWORDS",
+	14: "DESTINATION_ADDRESS",
+	15: "FINAL_URL",
+	16: "FINAL_MOBILE_URLS",
+	17: "TRACKING_URL",
+	18: "ANDROID_APP_LINK",
+	19: "SIMILAR_DESTINATION_IDS",
+	20: "IOS_APP_LINK",
+	21: "IOS_APP_STORE_ID",
+}
+var TravelPlaceholderFieldEnum_TravelPlaceholderField_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"DESTINATION_ID":          2,
+	"ORIGIN_ID":               3,
+	"TITLE":                   4,
+	"DESTINATION_NAME":        5,
+	"ORIGIN_NAME":             6,
+	"PRICE":                   7,
+	"FORMATTED_PRICE":         8,
+	"SALE_PRICE":              9,
+	"FORMATTED_SALE_PRICE":    10,
+	"IMAGE_URL":               11,
+	"CATEGORY":                12,
+	"CONTEXTUAL_KEYWORDS":     13,
+	"DESTINATION_ADDRESS":     14,
+	"FINAL_URL":               15,
+	"FINAL_MOBILE_URLS":       16,
+	"TRACKING_URL":            17,
+	"ANDROID_APP_LINK":        18,
+	"SIMILAR_DESTINATION_IDS": 19,
+	"IOS_APP_LINK":            20,
+	"IOS_APP_STORE_ID":        21,
+}
+
+func (x TravelPlaceholderFieldEnum_TravelPlaceholderField) String() string {
+	return proto.EnumName(TravelPlaceholderFieldEnum_TravelPlaceholderField_name, int32(x))
+}
+func (TravelPlaceholderFieldEnum_TravelPlaceholderField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_travel_placeholder_field_dcb19d408bed3d7c, []int{0, 0}
+}
+
+// Values for Travel placeholder fields.
+// For more information about dynamic remarketing feeds, see
+// https://support.google.com/google-ads/answer/6053288.
+type TravelPlaceholderFieldEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TravelPlaceholderFieldEnum) Reset()         { *m = TravelPlaceholderFieldEnum{} }
+func (m *TravelPlaceholderFieldEnum) String() string { return proto.CompactTextString(m) }
+func (*TravelPlaceholderFieldEnum) ProtoMessage()    {}
+func (*TravelPlaceholderFieldEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_travel_placeholder_field_dcb19d408bed3d7c, []int{0}
+}
+func (m *TravelPlaceholderFieldEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TravelPlaceholderFieldEnum.Unmarshal(m, b)
+}
+func (m *TravelPlaceholderFieldEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TravelPlaceholderFieldEnum.Marshal(b, m, deterministic)
+}
+func (dst *TravelPlaceholderFieldEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TravelPlaceholderFieldEnum.Merge(dst, src)
+}
+func (m *TravelPlaceholderFieldEnum) XXX_Size() int {
+	return xxx_messageInfo_TravelPlaceholderFieldEnum.Size(m)
+}
+func (m *TravelPlaceholderFieldEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_TravelPlaceholderFieldEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TravelPlaceholderFieldEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*TravelPlaceholderFieldEnum)(nil), "google.ads.googleads.v0.enums.TravelPlaceholderFieldEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.TravelPlaceholderFieldEnum_TravelPlaceholderField", TravelPlaceholderFieldEnum_TravelPlaceholderField_name, TravelPlaceholderFieldEnum_TravelPlaceholderField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/travel_placeholder_field.proto", fileDescriptor_travel_placeholder_field_dcb19d408bed3d7c)
+}
+
+var fileDescriptor_travel_placeholder_field_dcb19d408bed3d7c = []byte{
+	// 484 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdd, 0x6e, 0xda, 0x30,
+	0x14, 0x1e, 0xb0, 0xfe, 0x70, 0xa0, 0xe0, 0x1a, 0xba, 0x4e, 0xab, 0x7a, 0xb1, 0x3e, 0x40, 0x40,
+	0xda, 0xe5, 0x76, 0x63, 0x88, 0x89, 0x2c, 0x82, 0x1d, 0xd9, 0xa6, 0x5d, 0x27, 0xa4, 0x28, 0x6b,
+	0xb2, 0xac, 0x52, 0x20, 0x88, 0xb4, 0x3c, 0xd0, 0x2e, 0xf7, 0x02, 0x7b, 0x87, 0x69, 0xd7, 0x7b,
+	0x9e, 0xc9, 0x0e, 0x14, 0x26, 0x75, 0xbb, 0x89, 0xce, 0x39, 0xdf, 0xcf, 0x71, 0xec, 0x0f, 0x3e,
+	0xa4, 0x79, 0x9e, 0x66, 0x49, 0x2f, 0x8a, 0x8b, 0x5e, 0x59, 0x9a, 0x6a, 0xdd, 0xef, 0x25, 0x8b,
+	0xc7, 0x79, 0xd1, 0x7b, 0x58, 0x45, 0xeb, 0x24, 0x0b, 0x97, 0x59, 0x74, 0x97, 0x7c, 0xcd, 0xb3,
+	0x38, 0x59, 0x85, 0x5f, 0xee, 0x93, 0x2c, 0x76, 0x96, 0xab, 0xfc, 0x21, 0xc7, 0x97, 0xa5, 0xc4,
+	0x89, 0xe2, 0xc2, 0x79, 0x52, 0x3b, 0xeb, 0xbe, 0x63, 0xd5, 0x57, 0xbf, 0x6b, 0xf0, 0x46, 0x5b,
+	0x87, 0x60, 0x67, 0x30, 0x32, 0x7a, 0xba, 0x78, 0x9c, 0x5f, 0xfd, 0xa8, 0xc1, 0xab, 0xe7, 0x61,
+	0xdc, 0x86, 0xc6, 0x94, 0xab, 0x80, 0x0e, 0xd9, 0x88, 0x51, 0x17, 0xbd, 0xc0, 0x0d, 0x38, 0x9a,
+	0xf2, 0x31, 0x17, 0x37, 0x1c, 0x55, 0x30, 0x86, 0x96, 0x4b, 0x95, 0x66, 0x9c, 0x68, 0x26, 0x78,
+	0xc8, 0x5c, 0x54, 0xc5, 0x27, 0x50, 0x17, 0x92, 0x79, 0xcc, 0xb6, 0x35, 0x5c, 0x87, 0x03, 0xcd,
+	0xb4, 0x4f, 0xd1, 0x4b, 0xdc, 0x05, 0xb4, 0xcf, 0xe6, 0x64, 0x42, 0xd1, 0x81, 0xd9, 0xb0, 0xe1,
+	0xdb, 0xc1, 0xa1, 0x51, 0x04, 0x92, 0x0d, 0x29, 0x3a, 0xc2, 0x1d, 0x68, 0x8f, 0x84, 0x9c, 0x10,
+	0xad, 0xa9, 0x1b, 0x96, 0xc3, 0x63, 0xdc, 0x02, 0x50, 0xc4, 0xa7, 0x9b, 0xbe, 0x8e, 0x5f, 0x43,
+	0x77, 0x47, 0xda, 0x43, 0xc0, 0x1c, 0x85, 0x4d, 0x88, 0x47, 0xc3, 0xa9, 0xf4, 0x51, 0x03, 0x37,
+	0xe1, 0x78, 0x48, 0x34, 0xf5, 0x84, 0xbc, 0x45, 0x4d, 0x7c, 0x0e, 0x9d, 0xa1, 0xe0, 0x9a, 0x7e,
+	0xd4, 0x53, 0xe2, 0x87, 0x63, 0x7a, 0x7b, 0x23, 0xa4, 0xab, 0xd0, 0x89, 0x01, 0xf6, 0x8f, 0x49,
+	0x5c, 0x57, 0x52, 0xa5, 0x50, 0xcb, 0xd8, 0x8d, 0x18, 0x27, 0xbe, 0xb5, 0x6b, 0xe3, 0x33, 0x38,
+	0x2d, 0xdb, 0x89, 0x18, 0x30, 0xdf, 0x2e, 0x51, 0x08, 0x61, 0x04, 0x4d, 0x2d, 0xc9, 0x70, 0xcc,
+	0xb8, 0x67, 0x89, 0xa7, 0xe6, 0xbf, 0x09, 0x77, 0xa5, 0x60, 0x6e, 0x48, 0x82, 0x20, 0xf4, 0x19,
+	0x1f, 0x23, 0x8c, 0x2f, 0xe0, 0x5c, 0xb1, 0x09, 0xf3, 0x89, 0x0c, 0xff, 0xbe, 0x43, 0x85, 0x3a,
+	0xc6, 0x84, 0x09, 0xb5, 0xa3, 0x77, 0x8d, 0xc9, 0x76, 0xa2, 0xb4, 0x90, 0xd4, 0xdc, 0xee, 0xd9,
+	0xe0, 0x57, 0x05, 0xde, 0xde, 0xe5, 0x73, 0xe7, 0xbf, 0xcf, 0x3f, 0xb8, 0x78, 0xfe, 0x71, 0x03,
+	0x13, 0x9d, 0xa0, 0xf2, 0x69, 0xb0, 0x51, 0xa7, 0x79, 0x16, 0x2d, 0x52, 0x27, 0x5f, 0xa5, 0xbd,
+	0x34, 0x59, 0xd8, 0x60, 0x6d, 0xa3, 0xb8, 0xbc, 0x2f, 0xfe, 0x91, 0xcc, 0xf7, 0xf6, 0xfb, 0xad,
+	0x5a, 0xf3, 0x08, 0xf9, 0x5e, 0xbd, 0xf4, 0x4a, 0x2b, 0x12, 0x17, 0x4e, 0x59, 0x9a, 0xea, 0xba,
+	0xef, 0x98, 0x9c, 0x15, 0x3f, 0xb7, 0xf8, 0x8c, 0xc4, 0xc5, 0xec, 0x09, 0x9f, 0x5d, 0xf7, 0x67,
+	0x16, 0xff, 0x7c, 0x68, 0x97, 0xbe, 0xfb, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb6, 0xb8, 0x9c, 0x9b,
+	0x0d, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/user_interest_taxonomy_type.pb.go b/googleapis/ads/googleads/v0/enums/user_interest_taxonomy_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..fef0facfd79e98a400bb8244ab5f28cb48bb204d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/user_interest_taxonomy_type.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/user_interest_taxonomy_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum containing the possible UserInterestTaxonomyTypes.
+type UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType int32
+
+const (
+	// Not specified.
+	UserInterestTaxonomyTypeEnum_UNSPECIFIED UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserInterestTaxonomyTypeEnum_UNKNOWN UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 1
+	// The affinity for this user interest.
+	UserInterestTaxonomyTypeEnum_AFFINITY UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 2
+	// The market for this user interest.
+	UserInterestTaxonomyTypeEnum_IN_MARKET UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 3
+	// Users known to have installed applications in the specified categories.
+	UserInterestTaxonomyTypeEnum_MOBILE_APP_INSTALL_USER UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 4
+	// The geographical location of the interest-based vertical.
+	UserInterestTaxonomyTypeEnum_VERTICAL_GEO UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 5
+	// User interest criteria for new smart phone users.
+	UserInterestTaxonomyTypeEnum_NEW_SMART_PHONE_USER UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType = 6
+)
+
+var UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AFFINITY",
+	3: "IN_MARKET",
+	4: "MOBILE_APP_INSTALL_USER",
+	5: "VERTICAL_GEO",
+	6: "NEW_SMART_PHONE_USER",
+}
+var UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"AFFINITY":                2,
+	"IN_MARKET":               3,
+	"MOBILE_APP_INSTALL_USER": 4,
+	"VERTICAL_GEO":            5,
+	"NEW_SMART_PHONE_USER":    6,
+}
+
+func (x UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType) String() string {
+	return proto.EnumName(UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_name, int32(x))
+}
+func (UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_interest_taxonomy_type_c8f56b49ce1dcc23, []int{0, 0}
+}
+
+// Message describing a UserInterestTaxonomyType.
+type UserInterestTaxonomyTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserInterestTaxonomyTypeEnum) Reset()         { *m = UserInterestTaxonomyTypeEnum{} }
+func (m *UserInterestTaxonomyTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserInterestTaxonomyTypeEnum) ProtoMessage()    {}
+func (*UserInterestTaxonomyTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_interest_taxonomy_type_c8f56b49ce1dcc23, []int{0}
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInterestTaxonomyTypeEnum.Unmarshal(m, b)
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInterestTaxonomyTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserInterestTaxonomyTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInterestTaxonomyTypeEnum.Merge(dst, src)
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserInterestTaxonomyTypeEnum.Size(m)
+}
+func (m *UserInterestTaxonomyTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInterestTaxonomyTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInterestTaxonomyTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserInterestTaxonomyTypeEnum)(nil), "google.ads.googleads.v0.enums.UserInterestTaxonomyTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType", UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_name, UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/user_interest_taxonomy_type.proto", fileDescriptor_user_interest_taxonomy_type_c8f56b49ce1dcc23)
+}
+
+var fileDescriptor_user_interest_taxonomy_type_c8f56b49ce1dcc23 = []byte{
+	// 352 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x6b, 0xdb, 0x30,
+	0x18, 0xc6, 0xe7, 0x64, 0xcb, 0x36, 0x25, 0x63, 0x46, 0x0c, 0x16, 0xd8, 0x72, 0x58, 0x3e, 0x80,
+	0x6c, 0xd8, 0xb1, 0x87, 0x22, 0xa7, 0x4a, 0x2a, 0xe2, 0xc8, 0xc6, 0x7f, 0x12, 0x5a, 0x0c, 0xc2,
+	0xad, 0x85, 0x09, 0xc4, 0x96, 0xb1, 0x9c, 0xd0, 0x7c, 0x99, 0x1e, 0x7a, 0xec, 0x97, 0xe8, 0xbd,
+	0x87, 0x7e, 0xa6, 0x62, 0x3b, 0xc9, 0x2d, 0xbd, 0x88, 0x07, 0x9e, 0xf7, 0xfd, 0x89, 0xe7, 0x79,
+	0xc1, 0x65, 0x2a, 0x65, 0xba, 0x11, 0x46, 0x9c, 0x28, 0xa3, 0x95, 0xb5, 0xda, 0x99, 0x86, 0xc8,
+	0xb7, 0x99, 0x32, 0xb6, 0x4a, 0x94, 0x7c, 0x9d, 0x57, 0xa2, 0x14, 0xaa, 0xe2, 0x55, 0xfc, 0x20,
+	0x73, 0x99, 0xed, 0x79, 0xb5, 0x2f, 0x04, 0x2a, 0x4a, 0x59, 0x49, 0x38, 0x6a, 0xb7, 0x50, 0x9c,
+	0x28, 0x74, 0x02, 0xa0, 0x9d, 0x89, 0x1a, 0xc0, 0xf8, 0x45, 0x03, 0x7f, 0x43, 0x25, 0x4a, 0x7a,
+	0x60, 0x04, 0x07, 0x44, 0xb0, 0x2f, 0x04, 0xc9, 0xb7, 0xd9, 0xf8, 0x51, 0x03, 0xc3, 0x73, 0x03,
+	0xf0, 0x27, 0xe8, 0x87, 0xcc, 0x77, 0xc9, 0x84, 0x4e, 0x29, 0xb9, 0xd2, 0x3f, 0xc1, 0x3e, 0xf8,
+	0x1a, 0xb2, 0x39, 0x73, 0x56, 0x4c, 0xd7, 0xe0, 0x00, 0x7c, 0xc3, 0xd3, 0x29, 0x65, 0x34, 0xb8,
+	0xd1, 0x3b, 0xf0, 0x07, 0xf8, 0x4e, 0x19, 0x5f, 0x60, 0x6f, 0x4e, 0x02, 0xbd, 0x0b, 0xff, 0x80,
+	0xdf, 0x0b, 0xc7, 0xa2, 0x36, 0xe1, 0xd8, 0x75, 0x39, 0x65, 0x7e, 0x80, 0x6d, 0x9b, 0x87, 0x3e,
+	0xf1, 0xf4, 0xcf, 0x50, 0x07, 0x83, 0x25, 0xf1, 0x02, 0x3a, 0xc1, 0x36, 0x9f, 0x11, 0x47, 0xff,
+	0x02, 0x87, 0xe0, 0x17, 0x23, 0x2b, 0xee, 0x2f, 0xb0, 0x17, 0x70, 0xf7, 0xda, 0x61, 0xa4, 0x9d,
+	0xed, 0x59, 0x6f, 0x1a, 0xf8, 0x77, 0x2f, 0x33, 0xf4, 0x61, 0x4e, 0x6b, 0x74, 0x2e, 0x83, 0x5b,
+	0xb7, 0xe4, 0x6a, 0xb7, 0xd6, 0x61, 0x3f, 0x95, 0x9b, 0x38, 0x4f, 0x91, 0x2c, 0x53, 0x23, 0x15,
+	0x79, 0xd3, 0xe1, 0xb1, 0xf8, 0x62, 0xad, 0xce, 0xdc, 0xe1, 0xa2, 0x79, 0x9f, 0x3a, 0xdd, 0x19,
+	0xc6, 0xcf, 0x9d, 0xd1, 0xac, 0x45, 0xe1, 0x44, 0xa1, 0x56, 0xd6, 0x6a, 0x69, 0xa2, 0xba, 0x50,
+	0xf5, 0x7a, 0xf4, 0x23, 0x9c, 0xa8, 0xe8, 0xe4, 0x47, 0x4b, 0x33, 0x6a, 0xfc, 0xbb, 0x5e, 0xf3,
+	0xe9, 0xff, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x48, 0x44, 0x81, 0xfb, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/user_list_access_status.pb.go b/googleapis/ads/googleads/v0/enums/user_list_access_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d98958c7b8df9550c07b279dc6fccb2870d29e50
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/user_list_access_status.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/user_list_access_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum containing possible user list access statuses.
+type UserListAccessStatusEnum_UserListAccessStatus int32
+
+const (
+	// Not specified.
+	UserListAccessStatusEnum_UNSPECIFIED UserListAccessStatusEnum_UserListAccessStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListAccessStatusEnum_UNKNOWN UserListAccessStatusEnum_UserListAccessStatus = 1
+	// The access is enabled.
+	UserListAccessStatusEnum_ENABLED UserListAccessStatusEnum_UserListAccessStatus = 2
+	// The access is disabled.
+	UserListAccessStatusEnum_DISABLED UserListAccessStatusEnum_UserListAccessStatus = 3
+)
+
+var UserListAccessStatusEnum_UserListAccessStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ENABLED",
+	3: "DISABLED",
+}
+var UserListAccessStatusEnum_UserListAccessStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ENABLED":     2,
+	"DISABLED":    3,
+}
+
+func (x UserListAccessStatusEnum_UserListAccessStatus) String() string {
+	return proto.EnumName(UserListAccessStatusEnum_UserListAccessStatus_name, int32(x))
+}
+func (UserListAccessStatusEnum_UserListAccessStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_access_status_fec1189b245b8f63, []int{0, 0}
+}
+
+// Indicates if this client still has access to the list.
+type UserListAccessStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListAccessStatusEnum) Reset()         { *m = UserListAccessStatusEnum{} }
+func (m *UserListAccessStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListAccessStatusEnum) ProtoMessage()    {}
+func (*UserListAccessStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_access_status_fec1189b245b8f63, []int{0}
+}
+func (m *UserListAccessStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListAccessStatusEnum.Unmarshal(m, b)
+}
+func (m *UserListAccessStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListAccessStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserListAccessStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListAccessStatusEnum.Merge(dst, src)
+}
+func (m *UserListAccessStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListAccessStatusEnum.Size(m)
+}
+func (m *UserListAccessStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListAccessStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListAccessStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserListAccessStatusEnum)(nil), "google.ads.googleads.v0.enums.UserListAccessStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.UserListAccessStatusEnum_UserListAccessStatus", UserListAccessStatusEnum_UserListAccessStatus_name, UserListAccessStatusEnum_UserListAccessStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/user_list_access_status.proto", fileDescriptor_user_list_access_status_fec1189b245b8f63)
+}
+
+var fileDescriptor_user_list_access_status_fec1189b245b8f63 = []byte{
+	// 272 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0x86, 0x5d, 0x07, 0x2a, 0x99, 0x60, 0x29, 0x1e, 0xf4, 0xb0, 0x83, 0xfb, 0x01, 0x69, 0xc1,
+	0xe3, 0x4e, 0xa9, 0xad, 0xa3, 0x38, 0xb2, 0x42, 0xe9, 0x04, 0x29, 0x94, 0xd8, 0x86, 0x50, 0x6c,
+	0x9b, 0xd1, 0x2f, 0xdd, 0x0f, 0xf2, 0xe8, 0x4f, 0xd9, 0xaf, 0x92, 0x24, 0x6e, 0xa7, 0xe9, 0x25,
+	0xbc, 0x1f, 0x2f, 0x4f, 0xbe, 0xef, 0x7d, 0xd1, 0x52, 0x48, 0x29, 0x5a, 0xee, 0xb3, 0x1a, 0x7c,
+	0x2b, 0xb5, 0xda, 0x07, 0x3e, 0xef, 0xc7, 0x0e, 0xfc, 0x11, 0xf8, 0x50, 0xb6, 0x0d, 0xa8, 0x92,
+	0x55, 0x15, 0x07, 0x28, 0x41, 0x31, 0x35, 0x02, 0xde, 0x0d, 0x52, 0x49, 0x6f, 0x6e, 0x09, 0xcc,
+	0x6a, 0xc0, 0x27, 0x18, 0xef, 0x03, 0x6c, 0xe0, 0xc5, 0x27, 0xba, 0xcf, 0x81, 0x0f, 0xeb, 0x06,
+	0x14, 0x31, 0x74, 0x66, 0xe0, 0xb8, 0x1f, 0xbb, 0xc5, 0x06, 0xdd, 0x9d, 0xf3, 0xbc, 0x5b, 0x34,
+	0xcb, 0x69, 0x96, 0xc6, 0xcf, 0xc9, 0x4b, 0x12, 0x47, 0xee, 0x85, 0x37, 0x43, 0x57, 0x39, 0x7d,
+	0xa5, 0x9b, 0x37, 0xea, 0x4e, 0xf4, 0x10, 0x53, 0x12, 0xae, 0xe3, 0xc8, 0x75, 0xbc, 0x1b, 0x74,
+	0x1d, 0x25, 0x99, 0x9d, 0xa6, 0xe1, 0x61, 0x82, 0x1e, 0x2b, 0xd9, 0xe1, 0x7f, 0x4f, 0x0a, 0x1f,
+	0xce, 0x2d, 0x4d, 0x75, 0x98, 0x74, 0xf2, 0x1e, 0xfe, 0xb2, 0x42, 0xb6, 0xac, 0x17, 0x58, 0x0e,
+	0xc2, 0x17, 0xbc, 0x37, 0x51, 0x8f, 0xdd, 0xec, 0x1a, 0xf8, 0xa3, 0xaa, 0xa5, 0x79, 0xbf, 0x9c,
+	0xe9, 0x8a, 0x90, 0x6f, 0x67, 0xbe, 0xb2, 0x5f, 0x91, 0x1a, 0xb0, 0x95, 0x5a, 0x6d, 0x03, 0xac,
+	0xc3, 0xc3, 0xe1, 0xe8, 0x17, 0xa4, 0x86, 0xe2, 0xe4, 0x17, 0xdb, 0xa0, 0x30, 0xfe, 0xc7, 0xa5,
+	0x59, 0xfa, 0xf4, 0x13, 0x00, 0x00, 0xff, 0xff, 0xba, 0x89, 0xe1, 0xa8, 0x9e, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/user_list_closing_reason.pb.go b/googleapis/ads/googleads/v0/enums/user_list_closing_reason.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..91f0e83ebf36031139c269b8e183d364417d05c2
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/user_list_closing_reason.pb.go
@@ -0,0 +1,111 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/user_list_closing_reason.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible user list closing reasons.
+type UserListClosingReasonEnum_UserListClosingReason int32
+
+const (
+	// Not specified.
+	UserListClosingReasonEnum_UNSPECIFIED UserListClosingReasonEnum_UserListClosingReason = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListClosingReasonEnum_UNKNOWN UserListClosingReasonEnum_UserListClosingReason = 1
+	// The userlist was closed because of not being used for over one year.
+	UserListClosingReasonEnum_UNUSED UserListClosingReasonEnum_UserListClosingReason = 2
+)
+
+var UserListClosingReasonEnum_UserListClosingReason_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNUSED",
+}
+var UserListClosingReasonEnum_UserListClosingReason_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"UNUSED":      2,
+}
+
+func (x UserListClosingReasonEnum_UserListClosingReason) String() string {
+	return proto.EnumName(UserListClosingReasonEnum_UserListClosingReason_name, int32(x))
+}
+func (UserListClosingReasonEnum_UserListClosingReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_closing_reason_42ba988910729065, []int{0, 0}
+}
+
+// Indicates the reason why the userlist was closed.
+// This enum is only used when a list is auto-closed by the system.
+type UserListClosingReasonEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListClosingReasonEnum) Reset()         { *m = UserListClosingReasonEnum{} }
+func (m *UserListClosingReasonEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListClosingReasonEnum) ProtoMessage()    {}
+func (*UserListClosingReasonEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_closing_reason_42ba988910729065, []int{0}
+}
+func (m *UserListClosingReasonEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListClosingReasonEnum.Unmarshal(m, b)
+}
+func (m *UserListClosingReasonEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListClosingReasonEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserListClosingReasonEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListClosingReasonEnum.Merge(dst, src)
+}
+func (m *UserListClosingReasonEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListClosingReasonEnum.Size(m)
+}
+func (m *UserListClosingReasonEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListClosingReasonEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListClosingReasonEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserListClosingReasonEnum)(nil), "google.ads.googleads.v0.enums.UserListClosingReasonEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.UserListClosingReasonEnum_UserListClosingReason", UserListClosingReasonEnum_UserListClosingReason_name, UserListClosingReasonEnum_UserListClosingReason_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/user_list_closing_reason.proto", fileDescriptor_user_list_closing_reason_42ba988910729065)
+}
+
+var fileDescriptor_user_list_closing_reason_42ba988910729065 = []byte{
+	// 266 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xbc,
+	0xd2, 0xdc, 0x62, 0xfd, 0xd2, 0xe2, 0xd4, 0xa2, 0xf8, 0x9c, 0xcc, 0xe2, 0x92, 0xf8, 0xe4, 0x9c,
+	0xfc, 0xe2, 0xcc, 0xbc, 0xf4, 0xf8, 0xa2, 0xd4, 0xc4, 0xe2, 0xfc, 0x3c, 0xbd, 0x82, 0xa2, 0xfc,
+	0x92, 0x7c, 0x21, 0x59, 0x88, 0x16, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x6e, 0xbd, 0x32, 0x03,
+	0x3d, 0xb0, 0x6e, 0xa5, 0x38, 0x2e, 0xc9, 0xd0, 0xe2, 0xd4, 0x22, 0x9f, 0xcc, 0xe2, 0x12, 0x67,
+	0x88, 0xf6, 0x20, 0xb0, 0x6e, 0xd7, 0xbc, 0xd2, 0x5c, 0x25, 0x47, 0x2e, 0x51, 0xac, 0x92, 0x42,
+	0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1, 0x01, 0xae, 0xce, 0x9e, 0x6e, 0x9e, 0xae, 0x2e, 0x02, 0x0c,
+	0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e, 0xde, 0x7e, 0xfe, 0xe1, 0x7e, 0x02, 0x8c, 0x42, 0x5c, 0x5c,
+	0x6c, 0xa1, 0x7e, 0xa1, 0xc1, 0xae, 0x2e, 0x02, 0x4c, 0x4e, 0xa7, 0x19, 0xb9, 0x14, 0x93, 0xf3,
+	0x73, 0xf5, 0xf0, 0xba, 0xc2, 0x49, 0x0a, 0xab, 0x35, 0x01, 0x20, 0x0f, 0x04, 0x30, 0x46, 0x39,
+	0x41, 0x35, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0xe5, 0x17, 0xa5, 0xeb, 0xa7, 0xa7, 0xe6,
+	0x81, 0xbd, 0x07, 0x0b, 0x90, 0x82, 0xcc, 0x62, 0x1c, 0xe1, 0x63, 0x0d, 0x26, 0x17, 0x31, 0x31,
+	0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x92, 0x75, 0x87, 0x18, 0xe5, 0x98, 0x52, 0xac, 0x07, 0x61, 0x82,
+	0x58, 0x61, 0x06, 0x7a, 0x20, 0xff, 0x16, 0x9f, 0x82, 0xc9, 0xc7, 0x38, 0xa6, 0x14, 0xc7, 0xc0,
+	0xe5, 0x63, 0xc2, 0x0c, 0x62, 0xc0, 0xf2, 0x49, 0x6c, 0x60, 0x4b, 0x8d, 0x01, 0x01, 0x00, 0x00,
+	0xff, 0xff, 0xea, 0x1d, 0x66, 0x86, 0x93, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/user_list_crm_data_source_type.pb.go b/googleapis/ads/googleads/v0/enums/user_list_crm_data_source_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..26707118e513d236c4a47bfc3e088e79b3d4879f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/user_list_crm_data_source_type.pb.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/user_list_crm_data_source_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible user list crm data source type.
+type UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType int32
+
+const (
+	// Not specified.
+	UserListCrmDataSourceTypeEnum_UNSPECIFIED UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListCrmDataSourceTypeEnum_UNKNOWN UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 1
+	// The uploaded data is first party data.
+	UserListCrmDataSourceTypeEnum_FIRST_PARTY UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 2
+	// The uploaded data is from a third party credit bureau.
+	UserListCrmDataSourceTypeEnum_THIRD_PARTY_CREDIT_BUREAU UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 3
+	// The uploaded data is from a third party voter file.
+	UserListCrmDataSourceTypeEnum_THIRD_PARTY_VOTER_FILE UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType = 4
+)
+
+var UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FIRST_PARTY",
+	3: "THIRD_PARTY_CREDIT_BUREAU",
+	4: "THIRD_PARTY_VOTER_FILE",
+}
+var UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"FIRST_PARTY":               2,
+	"THIRD_PARTY_CREDIT_BUREAU": 3,
+	"THIRD_PARTY_VOTER_FILE":    4,
+}
+
+func (x UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType) String() string {
+	return proto.EnumName(UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_name, int32(x))
+}
+func (UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_crm_data_source_type_207bd7e19482b37d, []int{0, 0}
+}
+
+// Indicates source of Crm upload data.
+type UserListCrmDataSourceTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListCrmDataSourceTypeEnum) Reset()         { *m = UserListCrmDataSourceTypeEnum{} }
+func (m *UserListCrmDataSourceTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListCrmDataSourceTypeEnum) ProtoMessage()    {}
+func (*UserListCrmDataSourceTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_crm_data_source_type_207bd7e19482b37d, []int{0}
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListCrmDataSourceTypeEnum.Unmarshal(m, b)
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListCrmDataSourceTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserListCrmDataSourceTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListCrmDataSourceTypeEnum.Merge(dst, src)
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListCrmDataSourceTypeEnum.Size(m)
+}
+func (m *UserListCrmDataSourceTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListCrmDataSourceTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListCrmDataSourceTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserListCrmDataSourceTypeEnum)(nil), "google.ads.googleads.v0.enums.UserListCrmDataSourceTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType", UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_name, UserListCrmDataSourceTypeEnum_UserListCrmDataSourceType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/user_list_crm_data_source_type.proto", fileDescriptor_user_list_crm_data_source_type_207bd7e19482b37d)
+}
+
+var fileDescriptor_user_list_crm_data_source_type_207bd7e19482b37d = []byte{
+	// 325 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x6a, 0xbb, 0x30,
+	0x1c, 0xc7, 0xff, 0xb6, 0x7f, 0x36, 0x48, 0x0f, 0x13, 0x0f, 0x83, 0x0e, 0x1c, 0xac, 0x0f, 0x10,
+	0x85, 0x1d, 0x77, 0xd2, 0x9a, 0x76, 0xb2, 0x62, 0xc5, 0x6a, 0xc7, 0x86, 0x10, 0xb2, 0x1a, 0xa4,
+	0x50, 0x8d, 0xe4, 0xa7, 0x85, 0x3e, 0xc0, 0x5e, 0x64, 0x97, 0xc1, 0x1e, 0x65, 0x97, 0xbd, 0xd2,
+	0x30, 0xae, 0x65, 0x17, 0x77, 0x09, 0x5f, 0xf2, 0x49, 0xbe, 0xc9, 0xef, 0x83, 0xdc, 0x5c, 0x88,
+	0x7c, 0xc7, 0x2d, 0x96, 0x81, 0xd5, 0xc5, 0x36, 0xed, 0x6d, 0x8b, 0x97, 0x4d, 0x01, 0x56, 0x03,
+	0x5c, 0xd2, 0xdd, 0x16, 0x6a, 0xba, 0x91, 0x05, 0xcd, 0x58, 0xcd, 0x28, 0x88, 0x46, 0x6e, 0x38,
+	0xad, 0x0f, 0x15, 0xc7, 0x95, 0x14, 0xb5, 0x30, 0xcc, 0xee, 0x22, 0x66, 0x19, 0xe0, 0x53, 0x07,
+	0xde, 0xdb, 0x58, 0x75, 0x4c, 0xde, 0x35, 0x64, 0x26, 0xc0, 0xe5, 0x62, 0x0b, 0xf5, 0x54, 0x16,
+	0x1e, 0xab, 0xd9, 0x4a, 0x75, 0xc4, 0x87, 0x8a, 0x93, 0xb2, 0x29, 0x26, 0xaf, 0x1a, 0x1a, 0xf7,
+	0x9e, 0x30, 0x2e, 0xd0, 0x28, 0x09, 0x56, 0x21, 0x99, 0xfa, 0x33, 0x9f, 0x78, 0xfa, 0x3f, 0x63,
+	0x84, 0xce, 0x93, 0xe0, 0x21, 0x58, 0x3e, 0x06, 0xba, 0xd6, 0xd2, 0x99, 0x1f, 0xad, 0x62, 0x1a,
+	0x3a, 0x51, 0xfc, 0xa4, 0x0f, 0x0c, 0x13, 0x8d, 0xe3, 0x7b, 0x3f, 0xf2, 0xba, 0x0d, 0x3a, 0x8d,
+	0x88, 0xe7, 0xc7, 0xd4, 0x4d, 0x22, 0xe2, 0x24, 0xfa, 0xd0, 0xb8, 0x42, 0x97, 0xbf, 0xf1, 0x7a,
+	0x19, 0x93, 0x88, 0xce, 0xfc, 0x05, 0xd1, 0xff, 0xbb, 0x5f, 0x1a, 0xba, 0xd9, 0x88, 0x02, 0xff,
+	0x39, 0x8f, 0x7b, 0xdd, 0xfb, 0xd5, 0xb0, 0xd5, 0x11, 0x6a, 0xcf, 0x3f, 0x52, 0x71, 0x2e, 0x76,
+	0xac, 0xcc, 0xb1, 0x90, 0xb9, 0x95, 0xf3, 0x52, 0xc9, 0x3a, 0x4a, 0xae, 0xb6, 0xd0, 0xe3, 0xfc,
+	0x4e, 0xad, 0x6f, 0x83, 0xe1, 0xdc, 0x71, 0x3e, 0x06, 0xe6, 0xbc, 0xab, 0x72, 0x32, 0xc0, 0x5d,
+	0x6c, 0xd3, 0xda, 0xc6, 0xad, 0x38, 0xf8, 0x3c, 0xf2, 0xd4, 0xc9, 0x20, 0x3d, 0xf1, 0x74, 0x6d,
+	0xa7, 0x8a, 0xbf, 0x9c, 0xa9, 0x47, 0x6f, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc2, 0xab, 0x98,
+	0x86, 0xe7, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/user_list_membership_status.pb.go b/googleapis/ads/googleads/v0/enums/user_list_membership_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..eeb4a9efc1dc7ced036f30efe08b36b41e475b74
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/user_list_membership_status.pb.go
@@ -0,0 +1,117 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/user_list_membership_status.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum containing possible user list membership statuses.
+type UserListMembershipStatusEnum_UserListMembershipStatus int32
+
+const (
+	// Not specified.
+	UserListMembershipStatusEnum_UNSPECIFIED UserListMembershipStatusEnum_UserListMembershipStatus = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListMembershipStatusEnum_UNKNOWN UserListMembershipStatusEnum_UserListMembershipStatus = 1
+	// Open status - List is accruing members and can be targeted to.
+	UserListMembershipStatusEnum_OPEN UserListMembershipStatusEnum_UserListMembershipStatus = 2
+	// Closed status - No new members being added. Cannot be used for targeting.
+	UserListMembershipStatusEnum_CLOSED UserListMembershipStatusEnum_UserListMembershipStatus = 3
+)
+
+var UserListMembershipStatusEnum_UserListMembershipStatus_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPEN",
+	3: "CLOSED",
+}
+var UserListMembershipStatusEnum_UserListMembershipStatus_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"OPEN":        2,
+	"CLOSED":      3,
+}
+
+func (x UserListMembershipStatusEnum_UserListMembershipStatus) String() string {
+	return proto.EnumName(UserListMembershipStatusEnum_UserListMembershipStatus_name, int32(x))
+}
+func (UserListMembershipStatusEnum_UserListMembershipStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_membership_status_d983670b77875dec, []int{0, 0}
+}
+
+// Membership status of this user list. Indicates whether a user list is open
+// or active. Only open user lists can accumulate more users and can be used for
+// targeting.
+type UserListMembershipStatusEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListMembershipStatusEnum) Reset()         { *m = UserListMembershipStatusEnum{} }
+func (m *UserListMembershipStatusEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListMembershipStatusEnum) ProtoMessage()    {}
+func (*UserListMembershipStatusEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_membership_status_d983670b77875dec, []int{0}
+}
+func (m *UserListMembershipStatusEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListMembershipStatusEnum.Unmarshal(m, b)
+}
+func (m *UserListMembershipStatusEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListMembershipStatusEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserListMembershipStatusEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListMembershipStatusEnum.Merge(dst, src)
+}
+func (m *UserListMembershipStatusEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListMembershipStatusEnum.Size(m)
+}
+func (m *UserListMembershipStatusEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListMembershipStatusEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListMembershipStatusEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserListMembershipStatusEnum)(nil), "google.ads.googleads.v0.enums.UserListMembershipStatusEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.UserListMembershipStatusEnum_UserListMembershipStatus", UserListMembershipStatusEnum_UserListMembershipStatus_name, UserListMembershipStatusEnum_UserListMembershipStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/user_list_membership_status.proto", fileDescriptor_user_list_membership_status_d983670b77875dec)
+}
+
+var fileDescriptor_user_list_membership_status_d983670b77875dec = []byte{
+	// 277 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x6a, 0x83, 0x30,
+	0x18, 0xc7, 0xa7, 0x1d, 0xdd, 0x48, 0x0f, 0x13, 0x4f, 0x3b, 0xcc, 0xc3, 0xfa, 0x00, 0x51, 0xd8,
+	0x71, 0x87, 0xa1, 0xad, 0x2b, 0x65, 0x5d, 0x14, 0xc4, 0x0e, 0x86, 0x20, 0x76, 0x86, 0x4c, 0xd0,
+	0x44, 0xf2, 0xc5, 0x3e, 0xd0, 0x8e, 0x7b, 0x94, 0x1d, 0xf6, 0x4c, 0xc3, 0xb8, 0x7a, 0xb3, 0x97,
+	0xf0, 0x87, 0x1f, 0xdf, 0xef, 0xcb, 0xff, 0x43, 0x4f, 0x4c, 0x08, 0x56, 0x53, 0xb7, 0x28, 0xc1,
+	0x1d, 0x62, 0x9f, 0x8e, 0x9e, 0x4b, 0x79, 0xd7, 0x80, 0xdb, 0x01, 0x95, 0x79, 0x5d, 0x81, 0xca,
+	0x1b, 0xda, 0x1c, 0xa8, 0x84, 0xcf, 0xaa, 0xcd, 0x41, 0x15, 0xaa, 0x03, 0xdc, 0x4a, 0xa1, 0x84,
+	0xed, 0x0c, 0x53, 0xb8, 0x28, 0x01, 0x8f, 0x02, 0x7c, 0xf4, 0xb0, 0x16, 0x2c, 0x39, 0xba, 0x4b,
+	0x81, 0xca, 0x5d, 0x05, 0xea, 0x75, 0x34, 0x24, 0x5a, 0x10, 0xf2, 0xae, 0x59, 0x12, 0x74, 0x3b,
+	0xc5, 0xed, 0x1b, 0xb4, 0x48, 0x49, 0x12, 0x87, 0xab, 0xed, 0xf3, 0x36, 0x5c, 0x5b, 0x17, 0xf6,
+	0x02, 0x5d, 0xa5, 0xe4, 0x85, 0x44, 0x6f, 0xc4, 0x32, 0xec, 0x6b, 0x74, 0x19, 0xc5, 0x21, 0xb1,
+	0x4c, 0x1b, 0xa1, 0xf9, 0x6a, 0x17, 0x25, 0xe1, 0xda, 0x9a, 0x05, 0xbf, 0x06, 0xba, 0xff, 0x10,
+	0x0d, 0x3e, 0xfb, 0xab, 0xc0, 0x99, 0xda, 0x19, 0xf7, 0x9d, 0x62, 0xe3, 0x3d, 0xf8, 0x9f, 0x67,
+	0xa2, 0x2e, 0x38, 0xc3, 0x42, 0x32, 0x97, 0x51, 0xae, 0x1b, 0x9f, 0xce, 0xd4, 0x56, 0x30, 0x71,
+	0xb5, 0x47, 0xfd, 0x7e, 0x99, 0xb3, 0x8d, 0xef, 0x7f, 0x9b, 0xce, 0x66, 0x50, 0xf9, 0x25, 0xe0,
+	0x21, 0xf6, 0x69, 0xef, 0xe1, 0xbe, 0x3f, 0xfc, 0x9c, 0x78, 0xe6, 0x97, 0x90, 0x8d, 0x3c, 0xdb,
+	0x7b, 0x99, 0xe6, 0x87, 0xb9, 0x5e, 0xfa, 0xf0, 0x17, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x02, 0x88,
+	0xc1, 0xa9, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/user_list_size_range.pb.go b/googleapis/ads/googleads/v0/enums/user_list_size_range.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8bbe2b0019c3b55655d11d1d228bb933f9b19091
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/user_list_size_range.pb.go
@@ -0,0 +1,183 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/user_list_size_range.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum containing possible user list size ranges.
+type UserListSizeRangeEnum_UserListSizeRange int32
+
+const (
+	// Not specified.
+	UserListSizeRangeEnum_UNSPECIFIED UserListSizeRangeEnum_UserListSizeRange = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListSizeRangeEnum_UNKNOWN UserListSizeRangeEnum_UserListSizeRange = 1
+	// User list has less than 500 users.
+	UserListSizeRangeEnum_LESS_THAN_FIVE_HUNDRED UserListSizeRangeEnum_UserListSizeRange = 2
+	// User list has number of users in range of 500 to 1000.
+	UserListSizeRangeEnum_LESS_THAN_ONE_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 3
+	// User list has number of users in range of 1000 to 10000.
+	UserListSizeRangeEnum_ONE_THOUSAND_TO_TEN_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 4
+	// User list has number of users in range of 10000 to 50000.
+	UserListSizeRangeEnum_TEN_THOUSAND_TO_FIFTY_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 5
+	// User list has number of users in range of 50000 to 100000.
+	UserListSizeRangeEnum_FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 6
+	// User list has number of users in range of 100000 to 300000.
+	UserListSizeRangeEnum_ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 7
+	// User list has number of users in range of 300000 to 500000.
+	UserListSizeRangeEnum_THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND UserListSizeRangeEnum_UserListSizeRange = 8
+	// User list has number of users in range of 500000 to 1 million.
+	UserListSizeRangeEnum_FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION UserListSizeRangeEnum_UserListSizeRange = 9
+	// User list has number of users in range of 1 to 2 millions.
+	UserListSizeRangeEnum_ONE_MILLION_TO_TWO_MILLION UserListSizeRangeEnum_UserListSizeRange = 10
+	// User list has number of users in range of 2 to 3 millions.
+	UserListSizeRangeEnum_TWO_MILLION_TO_THREE_MILLION UserListSizeRangeEnum_UserListSizeRange = 11
+	// User list has number of users in range of 3 to 5 millions.
+	UserListSizeRangeEnum_THREE_MILLION_TO_FIVE_MILLION UserListSizeRangeEnum_UserListSizeRange = 12
+	// User list has number of users in range of 5 to 10 millions.
+	UserListSizeRangeEnum_FIVE_MILLION_TO_TEN_MILLION UserListSizeRangeEnum_UserListSizeRange = 13
+	// User list has number of users in range of 10 to 20 millions.
+	UserListSizeRangeEnum_TEN_MILLION_TO_TWENTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 14
+	// User list has number of users in range of 20 to 30 millions.
+	UserListSizeRangeEnum_TWENTY_MILLION_TO_THIRTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 15
+	// User list has number of users in range of 30 to 50 millions.
+	UserListSizeRangeEnum_THIRTY_MILLION_TO_FIFTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 16
+	// User list has over 50 million users.
+	UserListSizeRangeEnum_OVER_FIFTY_MILLION UserListSizeRangeEnum_UserListSizeRange = 17
+)
+
+var UserListSizeRangeEnum_UserListSizeRange_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "LESS_THAN_FIVE_HUNDRED",
+	3:  "LESS_THAN_ONE_THOUSAND",
+	4:  "ONE_THOUSAND_TO_TEN_THOUSAND",
+	5:  "TEN_THOUSAND_TO_FIFTY_THOUSAND",
+	6:  "FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND",
+	7:  "ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND",
+	8:  "THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND",
+	9:  "FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION",
+	10: "ONE_MILLION_TO_TWO_MILLION",
+	11: "TWO_MILLION_TO_THREE_MILLION",
+	12: "THREE_MILLION_TO_FIVE_MILLION",
+	13: "FIVE_MILLION_TO_TEN_MILLION",
+	14: "TEN_MILLION_TO_TWENTY_MILLION",
+	15: "TWENTY_MILLION_TO_THIRTY_MILLION",
+	16: "THIRTY_MILLION_TO_FIFTY_MILLION",
+	17: "OVER_FIFTY_MILLION",
+}
+var UserListSizeRangeEnum_UserListSizeRange_value = map[string]int32{
+	"UNSPECIFIED":                                     0,
+	"UNKNOWN":                                         1,
+	"LESS_THAN_FIVE_HUNDRED":                          2,
+	"LESS_THAN_ONE_THOUSAND":                          3,
+	"ONE_THOUSAND_TO_TEN_THOUSAND":                    4,
+	"TEN_THOUSAND_TO_FIFTY_THOUSAND":                  5,
+	"FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND":          6,
+	"ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND":  7,
+	"THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND": 8,
+	"FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION":            9,
+	"ONE_MILLION_TO_TWO_MILLION":                      10,
+	"TWO_MILLION_TO_THREE_MILLION":                    11,
+	"THREE_MILLION_TO_FIVE_MILLION":                   12,
+	"FIVE_MILLION_TO_TEN_MILLION":                     13,
+	"TEN_MILLION_TO_TWENTY_MILLION":                   14,
+	"TWENTY_MILLION_TO_THIRTY_MILLION":                15,
+	"THIRTY_MILLION_TO_FIFTY_MILLION":                 16,
+	"OVER_FIFTY_MILLION":                              17,
+}
+
+func (x UserListSizeRangeEnum_UserListSizeRange) String() string {
+	return proto.EnumName(UserListSizeRangeEnum_UserListSizeRange_name, int32(x))
+}
+func (UserListSizeRangeEnum_UserListSizeRange) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_size_range_66b8c4cb6c2c03b0, []int{0, 0}
+}
+
+// Size range in terms of number of users of a UserList.
+type UserListSizeRangeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListSizeRangeEnum) Reset()         { *m = UserListSizeRangeEnum{} }
+func (m *UserListSizeRangeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListSizeRangeEnum) ProtoMessage()    {}
+func (*UserListSizeRangeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_size_range_66b8c4cb6c2c03b0, []int{0}
+}
+func (m *UserListSizeRangeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListSizeRangeEnum.Unmarshal(m, b)
+}
+func (m *UserListSizeRangeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListSizeRangeEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserListSizeRangeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListSizeRangeEnum.Merge(dst, src)
+}
+func (m *UserListSizeRangeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListSizeRangeEnum.Size(m)
+}
+func (m *UserListSizeRangeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListSizeRangeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListSizeRangeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserListSizeRangeEnum)(nil), "google.ads.googleads.v0.enums.UserListSizeRangeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.UserListSizeRangeEnum_UserListSizeRange", UserListSizeRangeEnum_UserListSizeRange_name, UserListSizeRangeEnum_UserListSizeRange_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/user_list_size_range.proto", fileDescriptor_user_list_size_range_66b8c4cb6c2c03b0)
+}
+
+var fileDescriptor_user_list_size_range_66b8c4cb6c2c03b0 = []byte{
+	// 469 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xcb, 0x6e, 0xd3, 0x40,
+	0x14, 0x86, 0x49, 0x7a, 0x83, 0x13, 0xa0, 0xee, 0x91, 0xc8, 0xa2, 0x90, 0x5e, 0x42, 0x85, 0x10,
+	0x8b, 0x71, 0x44, 0x37, 0x48, 0xac, 0x1c, 0x32, 0x69, 0x2c, 0xc2, 0x38, 0xf2, 0xad, 0x2a, 0x8a,
+	0x34, 0x0a, 0xd8, 0xb2, 0x2c, 0x25, 0x76, 0xe5, 0x49, 0xba, 0xe8, 0x73, 0xf0, 0x04, 0x2c, 0x79,
+	0x11, 0x24, 0x1e, 0x89, 0x15, 0x1a, 0xbb, 0xbe, 0x51, 0xc3, 0xc6, 0x3a, 0xfa, 0xff, 0xef, 0xcc,
+	0xfc, 0x1a, 0x9f, 0x03, 0xef, 0x82, 0x38, 0x0e, 0x96, 0xbe, 0xba, 0xf0, 0x84, 0x9a, 0x95, 0xb2,
+	0xba, 0x19, 0xa8, 0x7e, 0xb4, 0x59, 0x09, 0x75, 0x23, 0xfc, 0x84, 0x2f, 0x43, 0xb1, 0xe6, 0x22,
+	0xbc, 0xf5, 0x79, 0xb2, 0x88, 0x02, 0x9f, 0x5c, 0x27, 0xf1, 0x3a, 0xc6, 0x5e, 0x86, 0x93, 0x85,
+	0x27, 0x48, 0xd1, 0x49, 0x6e, 0x06, 0x24, 0xed, 0xec, 0x7f, 0xdb, 0x81, 0x67, 0x8e, 0xf0, 0x93,
+	0x69, 0x28, 0xd6, 0x56, 0x78, 0xeb, 0x9b, 0xb2, 0x95, 0x46, 0x9b, 0x55, 0xff, 0xf7, 0x36, 0x1c,
+	0xdc, 0x73, 0x70, 0x1f, 0x3a, 0x0e, 0xb3, 0x66, 0xf4, 0x83, 0x3e, 0xd6, 0xe9, 0x48, 0x79, 0x80,
+	0x1d, 0xd8, 0x73, 0xd8, 0x47, 0x66, 0x5c, 0x32, 0xa5, 0x85, 0x87, 0xd0, 0x9d, 0x52, 0xcb, 0xe2,
+	0xf6, 0x44, 0x63, 0x7c, 0xac, 0xbb, 0x94, 0x4f, 0x1c, 0x36, 0x32, 0xe9, 0x48, 0x69, 0xd7, 0x3d,
+	0x83, 0x51, 0x6e, 0x4f, 0x0c, 0xc7, 0xd2, 0xd8, 0x48, 0xd9, 0xc2, 0x13, 0x78, 0x51, 0x55, 0xb8,
+	0x6d, 0x70, 0x9b, 0xb2, 0x92, 0xd8, 0xc6, 0x3e, 0x1c, 0x55, 0x15, 0x49, 0x8c, 0xf5, 0xb1, 0x7d,
+	0x55, 0x32, 0x3b, 0xf8, 0x06, 0x5e, 0xd5, 0x35, 0x49, 0xc9, 0x73, 0xef, 0x42, 0x94, 0xec, 0x2e,
+	0xbe, 0x05, 0xd2, 0xe4, 0xa4, 0x37, 0x4f, 0x4c, 0xda, 0xd0, 0xb3, 0x87, 0xe7, 0xa0, 0x36, 0x7b,
+	0x59, 0x1a, 0xb7, 0xa1, 0xe9, 0x21, 0xbe, 0x86, 0xb3, 0x46, 0x2b, 0xcf, 0xf6, 0x49, 0x9f, 0x4e,
+	0x75, 0x83, 0x29, 0x8f, 0xf0, 0x08, 0x0e, 0x2b, 0x42, 0x9a, 0xe4, 0xd2, 0x28, 0x7c, 0x90, 0x8f,
+	0x54, 0x11, 0xca, 0xa4, 0x39, 0xd1, 0xc1, 0x53, 0xe8, 0xd5, 0xa4, 0x22, 0x57, 0x8e, 0x3c, 0xc6,
+	0x63, 0x78, 0x5e, 0x55, 0xf2, 0x97, 0xce, 0x81, 0x27, 0xe9, 0x19, 0xa5, 0x90, 0xa5, 0xa0, 0xcc,
+	0xbe, 0x2a, 0x90, 0xa7, 0x78, 0x06, 0x27, 0x75, 0x2d, 0xcb, 0xa2, 0x9b, 0x15, 0x6a, 0x1f, 0x5f,
+	0xc2, 0x71, 0x5d, 0x2b, 0xff, 0x59, 0x0e, 0x29, 0xd8, 0x05, 0x34, 0x5c, 0x6a, 0xfe, 0xa5, 0x1f,
+	0x0c, 0x7f, 0xb6, 0xe0, 0xf4, 0x6b, 0xbc, 0x22, 0xff, 0x1d, 0xde, 0x61, 0xf7, 0xde, 0x7c, 0xce,
+	0xe4, 0xcc, 0xcf, 0x5a, 0x9f, 0x87, 0x77, 0x8d, 0x41, 0xbc, 0x5c, 0x44, 0x01, 0x89, 0x93, 0x40,
+	0x0d, 0xfc, 0x28, 0xdd, 0x88, 0x7c, 0x7f, 0xae, 0x43, 0xf1, 0x8f, 0x75, 0x7a, 0x9f, 0x7e, 0xbf,
+	0xb7, 0xb7, 0x2e, 0x34, 0xed, 0x47, 0xbb, 0x77, 0x91, 0x1d, 0xa5, 0x79, 0x82, 0x64, 0xa5, 0xac,
+	0xdc, 0x01, 0x91, 0x5b, 0x22, 0x7e, 0xe5, 0xfe, 0x5c, 0xf3, 0xc4, 0xbc, 0xf0, 0xe7, 0xee, 0x60,
+	0x9e, 0xfa, 0x5f, 0x76, 0xd3, 0x4b, 0xcf, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcb, 0xe4,
+	0xf3, 0xc2, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/enums/user_list_type.pb.go b/googleapis/ads/googleads/v0/enums/user_list_type.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5815900594ce9712d76b8bd6beb8eaa6eda5235e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/enums/user_list_type.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/enums/user_list_type.proto
+
+package enums // import "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum containing possible user list types.
+type UserListTypeEnum_UserListType int32
+
+const (
+	// Not specified.
+	UserListTypeEnum_UNSPECIFIED UserListTypeEnum_UserListType = 0
+	// Used for return value only. Represents value unknown in this version.
+	UserListTypeEnum_UNKNOWN UserListTypeEnum_UserListType = 1
+	// UserList represented as a collection of conversion types.
+	UserListTypeEnum_REMARKETING UserListTypeEnum_UserListType = 2
+	// UserList represented as a combination of other user lists/interests.
+	UserListTypeEnum_LOGICAL UserListTypeEnum_UserListType = 3
+	// UserList created in the Google Ad Manager platform.
+	UserListTypeEnum_EXTERNAL_REMARKETING UserListTypeEnum_UserListType = 4
+	// UserList associated with a rule.
+	UserListTypeEnum_RULE_BASED UserListTypeEnum_UserListType = 5
+	// UserList with users similar to users of another UserList.
+	UserListTypeEnum_SIMILAR UserListTypeEnum_UserListType = 6
+	// UserList of first party CRM data provided by advertiser in the form of
+	// emails or other formats.
+	UserListTypeEnum_CRM_BASED UserListTypeEnum_UserListType = 7
+)
+
+var UserListTypeEnum_UserListType_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REMARKETING",
+	3: "LOGICAL",
+	4: "EXTERNAL_REMARKETING",
+	5: "RULE_BASED",
+	6: "SIMILAR",
+	7: "CRM_BASED",
+}
+var UserListTypeEnum_UserListType_value = map[string]int32{
+	"UNSPECIFIED":          0,
+	"UNKNOWN":              1,
+	"REMARKETING":          2,
+	"LOGICAL":              3,
+	"EXTERNAL_REMARKETING": 4,
+	"RULE_BASED":           5,
+	"SIMILAR":              6,
+	"CRM_BASED":            7,
+}
+
+func (x UserListTypeEnum_UserListType) String() string {
+	return proto.EnumName(UserListTypeEnum_UserListType_name, int32(x))
+}
+func (UserListTypeEnum_UserListType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_type_33358370125a2b4a, []int{0, 0}
+}
+
+// The user list types.
+type UserListTypeEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListTypeEnum) Reset()         { *m = UserListTypeEnum{} }
+func (m *UserListTypeEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListTypeEnum) ProtoMessage()    {}
+func (*UserListTypeEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_type_33358370125a2b4a, []int{0}
+}
+func (m *UserListTypeEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListTypeEnum.Unmarshal(m, b)
+}
+func (m *UserListTypeEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListTypeEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserListTypeEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListTypeEnum.Merge(dst, src)
+}
+func (m *UserListTypeEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListTypeEnum.Size(m)
+}
+func (m *UserListTypeEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListTypeEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListTypeEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserListTypeEnum)(nil), "google.ads.googleads.v0.enums.UserListTypeEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.enums.UserListTypeEnum_UserListType", UserListTypeEnum_UserListType_name, UserListTypeEnum_UserListType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/enums/user_list_type.proto", fileDescriptor_user_list_type_33358370125a2b4a)
+}
+
+var fileDescriptor_user_list_type_33358370125a2b4a = []byte{
+	// 321 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4f, 0xc2, 0x30,
+	0x18, 0xc6, 0x1d, 0x28, 0xc4, 0xe2, 0x9f, 0xba, 0x78, 0xf0, 0xc2, 0x41, 0x3e, 0x40, 0xb7, 0xe8,
+	0xd1, 0x53, 0x07, 0x75, 0x59, 0x28, 0x85, 0x14, 0x86, 0xc6, 0x2c, 0x59, 0xd0, 0x35, 0x0d, 0x09,
+	0xac, 0xcb, 0x3a, 0x48, 0xf8, 0x16, 0x7e, 0x06, 0x13, 0x2f, 0x7e, 0x0c, 0x8f, 0x7e, 0x2a, 0xd3,
+	0x0d, 0x08, 0x17, 0xbd, 0x34, 0x4f, 0xfa, 0x7b, 0x9f, 0xf6, 0x7d, 0x1e, 0x70, 0x27, 0x95, 0x92,
+	0x0b, 0xe1, 0xcc, 0x12, 0xed, 0x54, 0xd2, 0xa8, 0xb5, 0xeb, 0x88, 0x74, 0xb5, 0xd4, 0xce, 0x4a,
+	0x8b, 0x3c, 0x5e, 0xcc, 0x75, 0x11, 0x17, 0x9b, 0x4c, 0xa0, 0x2c, 0x57, 0x85, 0xb2, 0xdb, 0xd5,
+	0x20, 0x9a, 0x25, 0x1a, 0xed, 0x3d, 0x68, 0xed, 0xa2, 0xd2, 0xd3, 0xf9, 0xb4, 0x00, 0x0c, 0xb5,
+	0xc8, 0xe9, 0x5c, 0x17, 0x93, 0x4d, 0x26, 0x48, 0xba, 0x5a, 0x76, 0xde, 0x2d, 0x70, 0x76, 0x78,
+	0x69, 0x5f, 0x82, 0x56, 0xc8, 0xc6, 0x23, 0xd2, 0x0d, 0x1e, 0x03, 0xd2, 0x83, 0x47, 0x76, 0x0b,
+	0x34, 0x43, 0xd6, 0x67, 0xc3, 0x27, 0x06, 0x2d, 0x43, 0x39, 0x19, 0x60, 0xde, 0x27, 0x93, 0x80,
+	0xf9, 0xb0, 0x66, 0x28, 0x1d, 0xfa, 0x41, 0x17, 0x53, 0x58, 0xb7, 0x6f, 0xc0, 0x35, 0x79, 0x9e,
+	0x10, 0xce, 0x30, 0x8d, 0x0f, 0xc7, 0x8e, 0xed, 0x0b, 0x00, 0x78, 0x48, 0x49, 0xec, 0xe1, 0x31,
+	0xe9, 0xc1, 0x13, 0x63, 0x1b, 0x07, 0x83, 0x80, 0x62, 0x0e, 0x1b, 0xf6, 0x39, 0x38, 0xed, 0xf2,
+	0xc1, 0x96, 0x35, 0xbd, 0x6f, 0x0b, 0xdc, 0xbe, 0xa9, 0x25, 0xfa, 0x37, 0x8d, 0x77, 0x75, 0xb8,
+	0xf5, 0xc8, 0xe4, 0x1f, 0x59, 0x2f, 0xde, 0xd6, 0x23, 0xd5, 0x62, 0x96, 0x4a, 0xa4, 0x72, 0xe9,
+	0x48, 0x91, 0x96, 0xed, 0xec, 0x5a, 0xcc, 0xe6, 0xfa, 0x8f, 0x52, 0x1f, 0xca, 0xf3, 0xa3, 0x56,
+	0xf7, 0x31, 0xfe, 0xaa, 0xb5, 0xfd, 0xea, 0x29, 0x9c, 0x68, 0x54, 0x49, 0xa3, 0xa6, 0x2e, 0x32,
+	0xb5, 0xe9, 0x9f, 0x1d, 0x8f, 0x70, 0xa2, 0xa3, 0x3d, 0x8f, 0xa6, 0x6e, 0x54, 0xf2, 0xd7, 0x46,
+	0xf9, 0xe9, 0xfd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0xc0, 0x85, 0x5b, 0xc8, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/account_budget_proposal_error.pb.go b/googleapis/ads/googleads/v0/errors/account_budget_proposal_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..27cc1f9252d5217f710c38714f6d86d96e80fd83
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/account_budget_proposal_error.pb.go
@@ -0,0 +1,222 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/account_budget_proposal_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible account budget proposal errors.
+type AccountBudgetProposalErrorEnum_AccountBudgetProposalError int32
+
+const (
+	// Enum unspecified.
+	AccountBudgetProposalErrorEnum_UNSPECIFIED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 0
+	// The received error code is not known in this version.
+	AccountBudgetProposalErrorEnum_UNKNOWN AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 1
+	// The field mask must be empty for create/end/remove proposals.
+	AccountBudgetProposalErrorEnum_FIELD_MASK_NOT_ALLOWED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 2
+	// The field cannot be set because of the proposal type.
+	AccountBudgetProposalErrorEnum_IMMUTABLE_FIELD AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 3
+	// The field is required because of the proposal type.
+	AccountBudgetProposalErrorEnum_REQUIRED_FIELD_MISSING AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 4
+	// Proposals that have been approved cannot be cancelled.
+	AccountBudgetProposalErrorEnum_CANNOT_CANCEL_APPROVED_PROPOSAL AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 5
+	// Budgets that haven't been approved cannot be removed.
+	AccountBudgetProposalErrorEnum_CANNOT_REMOVE_UNAPPROVED_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 6
+	// Budgets that are currently running cannot be removed.
+	AccountBudgetProposalErrorEnum_CANNOT_REMOVE_RUNNING_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 7
+	// Budgets that haven't been approved cannot be truncated.
+	AccountBudgetProposalErrorEnum_CANNOT_END_UNAPPROVED_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 8
+	// Only budgets that are currently running can be truncated.
+	AccountBudgetProposalErrorEnum_CANNOT_END_INACTIVE_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 9
+	// All budgets must have names.
+	AccountBudgetProposalErrorEnum_BUDGET_NAME_REQUIRED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 10
+	// Expired budgets cannot be edited after a sufficient amount of time has
+	// passed.
+	AccountBudgetProposalErrorEnum_CANNOT_UPDATE_OLD_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 11
+	// It is not permissible a propose a new budget that ends in the past.
+	AccountBudgetProposalErrorEnum_CANNOT_END_IN_PAST AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 12
+	// An expired budget cannot be extended to overlap with the running budget.
+	AccountBudgetProposalErrorEnum_CANNOT_EXTEND_END_TIME AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 13
+	// A purchase order number is required.
+	AccountBudgetProposalErrorEnum_PURCHASE_ORDER_NUMBER_REQUIRED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 14
+	// Budgets that have a pending update cannot be updated.
+	AccountBudgetProposalErrorEnum_PENDING_UPDATE_PROPOSAL_EXISTS AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 15
+	// Cannot propose more than one budget when the corresponding billing setup
+	// hasn't been approved.
+	AccountBudgetProposalErrorEnum_MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 16
+	// Cannot update the start time of a budget that has already started.
+	AccountBudgetProposalErrorEnum_CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 17
+	// Cannot update the spending limit of a budget with an amount lower than
+	// what has already been spent.
+	AccountBudgetProposalErrorEnum_SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 18
+	// Cannot propose a budget update without actually changing any fields.
+	AccountBudgetProposalErrorEnum_UPDATE_IS_NO_OP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 19
+	// The end time must come after the start time.
+	AccountBudgetProposalErrorEnum_END_TIME_MUST_FOLLOW_START_TIME AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 20
+	// The budget's date range must fall within the date range of its billing
+	// setup.
+	AccountBudgetProposalErrorEnum_BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 21
+	// The user is not authorized to mutate budgets for the given billing setup.
+	AccountBudgetProposalErrorEnum_NOT_AUTHORIZED AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 22
+	// Mutates are not allowed for the given billing setup.
+	AccountBudgetProposalErrorEnum_INVALID_BILLING_SETUP AccountBudgetProposalErrorEnum_AccountBudgetProposalError = 23
+)
+
+var AccountBudgetProposalErrorEnum_AccountBudgetProposalError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "FIELD_MASK_NOT_ALLOWED",
+	3:  "IMMUTABLE_FIELD",
+	4:  "REQUIRED_FIELD_MISSING",
+	5:  "CANNOT_CANCEL_APPROVED_PROPOSAL",
+	6:  "CANNOT_REMOVE_UNAPPROVED_BUDGET",
+	7:  "CANNOT_REMOVE_RUNNING_BUDGET",
+	8:  "CANNOT_END_UNAPPROVED_BUDGET",
+	9:  "CANNOT_END_INACTIVE_BUDGET",
+	10: "BUDGET_NAME_REQUIRED",
+	11: "CANNOT_UPDATE_OLD_BUDGET",
+	12: "CANNOT_END_IN_PAST",
+	13: "CANNOT_EXTEND_END_TIME",
+	14: "PURCHASE_ORDER_NUMBER_REQUIRED",
+	15: "PENDING_UPDATE_PROPOSAL_EXISTS",
+	16: "MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP",
+	17: "CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET",
+	18: "SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED",
+	19: "UPDATE_IS_NO_OP",
+	20: "END_TIME_MUST_FOLLOW_START_TIME",
+	21: "BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP",
+	22: "NOT_AUTHORIZED",
+	23: "INVALID_BILLING_SETUP",
+}
+var AccountBudgetProposalErrorEnum_AccountBudgetProposalError_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"FIELD_MASK_NOT_ALLOWED":          2,
+	"IMMUTABLE_FIELD":                 3,
+	"REQUIRED_FIELD_MISSING":          4,
+	"CANNOT_CANCEL_APPROVED_PROPOSAL": 5,
+	"CANNOT_REMOVE_UNAPPROVED_BUDGET": 6,
+	"CANNOT_REMOVE_RUNNING_BUDGET":    7,
+	"CANNOT_END_UNAPPROVED_BUDGET":    8,
+	"CANNOT_END_INACTIVE_BUDGET":      9,
+	"BUDGET_NAME_REQUIRED":            10,
+	"CANNOT_UPDATE_OLD_BUDGET":        11,
+	"CANNOT_END_IN_PAST":              12,
+	"CANNOT_EXTEND_END_TIME":          13,
+	"PURCHASE_ORDER_NUMBER_REQUIRED":  14,
+	"PENDING_UPDATE_PROPOSAL_EXISTS":  15,
+	"MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP": 16,
+	"CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET":               17,
+	"SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED":        18,
+	"UPDATE_IS_NO_OP":                                   19,
+	"END_TIME_MUST_FOLLOW_START_TIME":                   20,
+	"BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP": 21,
+	"NOT_AUTHORIZED":                                    22,
+	"INVALID_BILLING_SETUP":                             23,
+}
+
+func (x AccountBudgetProposalErrorEnum_AccountBudgetProposalError) String() string {
+	return proto.EnumName(AccountBudgetProposalErrorEnum_AccountBudgetProposalError_name, int32(x))
+}
+func (AccountBudgetProposalErrorEnum_AccountBudgetProposalError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_error_c86ef659348a5c67, []int{0, 0}
+}
+
+// Container for enum describing possible account budget proposal errors.
+type AccountBudgetProposalErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AccountBudgetProposalErrorEnum) Reset()         { *m = AccountBudgetProposalErrorEnum{} }
+func (m *AccountBudgetProposalErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalErrorEnum) ProtoMessage()    {}
+func (*AccountBudgetProposalErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_error_c86ef659348a5c67, []int{0}
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalErrorEnum.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudgetProposalErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalErrorEnum.Merge(dst, src)
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalErrorEnum.Size(m)
+}
+func (m *AccountBudgetProposalErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AccountBudgetProposalErrorEnum)(nil), "google.ads.googleads.v0.errors.AccountBudgetProposalErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AccountBudgetProposalErrorEnum_AccountBudgetProposalError", AccountBudgetProposalErrorEnum_AccountBudgetProposalError_name, AccountBudgetProposalErrorEnum_AccountBudgetProposalError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/account_budget_proposal_error.proto", fileDescriptor_account_budget_proposal_error_c86ef659348a5c67)
+}
+
+var fileDescriptor_account_budget_proposal_error_c86ef659348a5c67 = []byte{
+	// 648 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0x5d, 0x6f, 0xd3, 0x3c,
+	0x14, 0x7e, 0xb7, 0xbd, 0x6f, 0xf7, 0xe2, 0xc1, 0x66, 0xbc, 0x0f, 0xc6, 0x34, 0x75, 0xa8, 0x5c,
+	0x22, 0xa5, 0x05, 0x04, 0x12, 0x42, 0x5c, 0xb8, 0xc9, 0x69, 0x6b, 0x2d, 0xb1, 0x8d, 0x3f, 0xba,
+	0x69, 0xaa, 0x64, 0x75, 0x6b, 0x55, 0x21, 0x6d, 0x4d, 0xd5, 0x6c, 0xfb, 0x41, 0x5c, 0x72, 0xc7,
+	0xdf, 0xe0, 0x1a, 0xfe, 0x0f, 0x72, 0xd2, 0x74, 0xed, 0xc4, 0xb8, 0x88, 0x72, 0x92, 0xf3, 0x3c,
+	0xcf, 0xf9, 0xf0, 0x39, 0x46, 0xcd, 0x51, 0x9a, 0x8e, 0x2e, 0x87, 0xf5, 0xfe, 0x20, 0xab, 0x17,
+	0xa6, 0xb7, 0x6e, 0x1b, 0xf5, 0xe1, 0x74, 0x9a, 0x4e, 0xb3, 0x7a, 0xff, 0xe2, 0x22, 0xbd, 0x19,
+	0x5f, 0xbb, 0xf3, 0x9b, 0xc1, 0x68, 0x78, 0xed, 0x26, 0xd3, 0x74, 0x92, 0x66, 0xfd, 0x4b, 0x97,
+	0xbb, 0x83, 0xc9, 0x34, 0xbd, 0x4e, 0x49, 0xb5, 0x20, 0x06, 0xfd, 0x41, 0x16, 0xcc, 0x35, 0x82,
+	0xdb, 0x46, 0x50, 0x68, 0xd4, 0x7e, 0x56, 0x50, 0x95, 0x16, 0x3a, 0xcd, 0x5c, 0x46, 0xce, 0x54,
+	0xc0, 0xfb, 0x61, 0x7c, 0x73, 0x55, 0xfb, 0x5e, 0x41, 0x07, 0x0f, 0x43, 0xc8, 0x16, 0xda, 0xb0,
+	0x5c, 0x4b, 0x08, 0x59, 0x8b, 0x41, 0x84, 0xff, 0x21, 0x1b, 0x68, 0xdd, 0xf2, 0x63, 0x2e, 0x4e,
+	0x38, 0x5e, 0x21, 0x07, 0x68, 0xaf, 0xc5, 0x20, 0x8e, 0x5c, 0x42, 0xf5, 0xb1, 0xe3, 0xc2, 0x38,
+	0x1a, 0xc7, 0xe2, 0x04, 0x22, 0xbc, 0x4a, 0xb6, 0xd1, 0x16, 0x4b, 0x12, 0x6b, 0x68, 0x33, 0x06,
+	0x97, 0xa3, 0xf0, 0x9a, 0x27, 0x28, 0xf8, 0x6c, 0x99, 0x82, 0xc8, 0xcd, 0x98, 0x4c, 0x6b, 0xc6,
+	0xdb, 0xf8, 0x5f, 0xf2, 0x12, 0x1d, 0x85, 0x94, 0x7b, 0x91, 0x90, 0xf2, 0x10, 0x62, 0x47, 0xa5,
+	0x54, 0xa2, 0x0b, 0x91, 0x93, 0x4a, 0x48, 0xa1, 0x69, 0x8c, 0xff, 0x5b, 0x00, 0x29, 0x48, 0x44,
+	0x17, 0x9c, 0xe5, 0x73, 0x58, 0xd3, 0x46, 0x6d, 0x30, 0xb8, 0x42, 0x5e, 0xa0, 0xc3, 0x65, 0x90,
+	0xb2, 0x9c, 0x33, 0xde, 0x2e, 0x11, 0xeb, 0x0b, 0x08, 0xe0, 0xd1, 0x1f, 0x34, 0xfe, 0x27, 0x55,
+	0x74, 0xb0, 0x80, 0x60, 0x9c, 0x86, 0x86, 0x75, 0xa1, 0xf4, 0x3f, 0x22, 0xfb, 0x68, 0xa7, 0xb0,
+	0x1d, 0xa7, 0x09, 0xb8, 0xb2, 0x2a, 0x8c, 0xc8, 0x21, 0xda, 0x9f, 0x31, 0xad, 0x8c, 0xa8, 0x01,
+	0x27, 0xe2, 0xb9, 0xee, 0x06, 0xd9, 0x43, 0x64, 0x49, 0xd7, 0x49, 0xaa, 0x0d, 0x7e, 0xec, 0x3b,
+	0x53, 0xfe, 0x3f, 0x35, 0xde, 0xe5, 0x1f, 0xc3, 0x12, 0xc0, 0x4f, 0x48, 0x0d, 0x55, 0xa5, 0x55,
+	0x61, 0x87, 0x6a, 0x70, 0x42, 0x45, 0xa0, 0x1c, 0xb7, 0x49, 0x13, 0xd4, 0x5d, 0xd4, 0xcd, 0x1c,
+	0x03, 0x3c, 0xf2, 0x55, 0xce, 0xc2, 0x96, 0x5d, 0x73, 0x70, 0xca, 0xb4, 0xd1, 0x78, 0x8b, 0x7c,
+	0x42, 0x1f, 0x12, 0x1b, 0x1b, 0x26, 0xe3, 0xb2, 0x10, 0xbd, 0x78, 0x68, 0xae, 0x25, 0xd4, 0x52,
+	0x2f, 0x58, 0x1c, 0x7b, 0x3d, 0x0d, 0xc6, 0x4a, 0x8c, 0x49, 0x1d, 0xbd, 0x5a, 0x2e, 0x4c, 0x1b,
+	0xaa, 0x4c, 0x9e, 0x64, 0x4e, 0xcd, 0x3f, 0xef, 0x7a, 0xf8, 0x94, 0xbc, 0x47, 0x6f, 0x74, 0x99,
+	0x54, 0xcc, 0x12, 0x66, 0x9c, 0x8f, 0xa3, 0x9c, 0xe9, 0x50, 0xee, 0x68, 0x18, 0x2a, 0x0b, 0x91,
+	0x0b, 0x85, 0x36, 0x4b, 0xa3, 0x43, 0xfc, 0xe8, 0xcc, 0x22, 0x30, 0x9f, 0xa0, 0x13, 0x12, 0x6f,
+	0xfb, 0x93, 0x2f, 0x5b, 0xe2, 0x12, 0xab, 0x8d, 0x6b, 0x09, 0x4f, 0x58, 0x48, 0x02, 0xef, 0x90,
+	0x77, 0xe8, 0xf5, 0xec, 0x54, 0x72, 0xba, 0xa2, 0xbc, 0x0d, 0x8e, 0xf1, 0x50, 0x24, 0x92, 0x1a,
+	0xe6, 0x27, 0xf1, 0x84, 0x99, 0xce, 0xbd, 0xca, 0x76, 0x09, 0x41, 0x9b, 0x79, 0x06, 0xd6, 0x74,
+	0x84, 0x62, 0x67, 0x10, 0xe1, 0x3d, 0xf2, 0x1c, 0xed, 0x32, 0xde, 0xa5, 0x31, 0xbb, 0xdf, 0x88,
+	0x67, 0xcd, 0x5f, 0x2b, 0xa8, 0x76, 0x91, 0x5e, 0x05, 0x7f, 0xdf, 0xbe, 0xe6, 0xd1, 0xc3, 0x7b,
+	0x25, 0xfd, 0xfa, 0xca, 0x95, 0xb3, 0x68, 0x26, 0x31, 0x4a, 0x2f, 0xfb, 0xe3, 0x51, 0x90, 0x4e,
+	0x47, 0xf5, 0xd1, 0x70, 0x9c, 0x2f, 0x77, 0x79, 0x29, 0x4c, 0xbe, 0x64, 0x0f, 0xdd, 0x11, 0x1f,
+	0x8b, 0xd7, 0xd7, 0xd5, 0xb5, 0x36, 0xa5, 0xdf, 0x56, 0xab, 0xed, 0x42, 0x8c, 0x0e, 0xb2, 0xa0,
+	0x30, 0xbd, 0xd5, 0x6d, 0x04, 0x79, 0xc8, 0xec, 0x47, 0x09, 0xe8, 0xd1, 0x41, 0xd6, 0x9b, 0x03,
+	0x7a, 0xdd, 0x46, 0xaf, 0x00, 0x9c, 0x57, 0xf2, 0xc0, 0x6f, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff,
+	0x48, 0xff, 0xc4, 0xda, 0x9b, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_customizer_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_customizer_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..249ced17857bf955fd948ca3634ecafd319ff87d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_customizer_error.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_customizer_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad customizer errors.
+type AdCustomizerErrorEnum_AdCustomizerError int32
+
+const (
+	// Enum unspecified.
+	AdCustomizerErrorEnum_UNSPECIFIED AdCustomizerErrorEnum_AdCustomizerError = 0
+	// The received error code is not known in this version.
+	AdCustomizerErrorEnum_UNKNOWN AdCustomizerErrorEnum_AdCustomizerError = 1
+	// Invalid date argument in countdown function.
+	AdCustomizerErrorEnum_COUNTDOWN_INVALID_DATE_FORMAT AdCustomizerErrorEnum_AdCustomizerError = 2
+	// Countdown end date is in the past.
+	AdCustomizerErrorEnum_COUNTDOWN_DATE_IN_PAST AdCustomizerErrorEnum_AdCustomizerError = 3
+	// Invalid locale string in countdown function.
+	AdCustomizerErrorEnum_COUNTDOWN_INVALID_LOCALE AdCustomizerErrorEnum_AdCustomizerError = 4
+	// Days-before argument to countdown function is not positive.
+	AdCustomizerErrorEnum_COUNTDOWN_INVALID_START_DAYS_BEFORE AdCustomizerErrorEnum_AdCustomizerError = 5
+	// A user list referenced in an IF function does not exist.
+	AdCustomizerErrorEnum_UNKNOWN_USER_LIST AdCustomizerErrorEnum_AdCustomizerError = 6
+)
+
+var AdCustomizerErrorEnum_AdCustomizerError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "COUNTDOWN_INVALID_DATE_FORMAT",
+	3: "COUNTDOWN_DATE_IN_PAST",
+	4: "COUNTDOWN_INVALID_LOCALE",
+	5: "COUNTDOWN_INVALID_START_DAYS_BEFORE",
+	6: "UNKNOWN_USER_LIST",
+}
+var AdCustomizerErrorEnum_AdCustomizerError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"COUNTDOWN_INVALID_DATE_FORMAT":       2,
+	"COUNTDOWN_DATE_IN_PAST":              3,
+	"COUNTDOWN_INVALID_LOCALE":            4,
+	"COUNTDOWN_INVALID_START_DAYS_BEFORE": 5,
+	"UNKNOWN_USER_LIST":                   6,
+}
+
+func (x AdCustomizerErrorEnum_AdCustomizerError) String() string {
+	return proto.EnumName(AdCustomizerErrorEnum_AdCustomizerError_name, int32(x))
+}
+func (AdCustomizerErrorEnum_AdCustomizerError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_customizer_error_d214061e54f1882d, []int{0, 0}
+}
+
+// Container for enum describing possible ad customizer errors.
+type AdCustomizerErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdCustomizerErrorEnum) Reset()         { *m = AdCustomizerErrorEnum{} }
+func (m *AdCustomizerErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdCustomizerErrorEnum) ProtoMessage()    {}
+func (*AdCustomizerErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_customizer_error_d214061e54f1882d, []int{0}
+}
+func (m *AdCustomizerErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdCustomizerErrorEnum.Unmarshal(m, b)
+}
+func (m *AdCustomizerErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdCustomizerErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdCustomizerErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdCustomizerErrorEnum.Merge(dst, src)
+}
+func (m *AdCustomizerErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdCustomizerErrorEnum.Size(m)
+}
+func (m *AdCustomizerErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdCustomizerErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdCustomizerErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdCustomizerErrorEnum)(nil), "google.ads.googleads.v0.errors.AdCustomizerErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdCustomizerErrorEnum_AdCustomizerError", AdCustomizerErrorEnum_AdCustomizerError_name, AdCustomizerErrorEnum_AdCustomizerError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_customizer_error.proto", fileDescriptor_ad_customizer_error_d214061e54f1882d)
+}
+
+var fileDescriptor_ad_customizer_error_d214061e54f1882d = []byte{
+	// 349 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x6a, 0xea, 0x40,
+	0x14, 0x86, 0x6f, 0xf4, 0x5e, 0x2f, 0x8c, 0x8b, 0x1b, 0x07, 0x94, 0x4b, 0x69, 0x85, 0xda, 0x45,
+	0x77, 0x93, 0x40, 0x37, 0x85, 0xae, 0xc6, 0x64, 0x94, 0xd0, 0x74, 0x12, 0x92, 0x89, 0xd2, 0x12,
+	0x18, 0x52, 0x13, 0x82, 0xa0, 0x8e, 0x64, 0xd4, 0x45, 0x1f, 0xa7, 0xcb, 0x3e, 0x4a, 0x29, 0x7d,
+	0x8e, 0x3e, 0x46, 0x49, 0x46, 0xed, 0x22, 0xb4, 0xab, 0xf9, 0x39, 0xe7, 0xff, 0xe6, 0xcc, 0xfc,
+	0x07, 0x5c, 0xe7, 0x42, 0xe4, 0x8b, 0xcc, 0x48, 0x52, 0x69, 0x28, 0x59, 0xaa, 0x9d, 0x69, 0x64,
+	0x45, 0x21, 0x0a, 0x69, 0x24, 0x29, 0x9f, 0x6d, 0xe5, 0x46, 0x2c, 0xe7, 0x4f, 0x59, 0xc1, 0xab,
+	0x22, 0x5a, 0x17, 0x62, 0x23, 0x60, 0x5f, 0xd9, 0x51, 0x92, 0x4a, 0x74, 0x24, 0xd1, 0xce, 0x44,
+	0x8a, 0x1c, 0x7c, 0x68, 0xa0, 0x8b, 0x53, 0xeb, 0x08, 0x93, 0xb2, 0x4c, 0x56, 0xdb, 0xe5, 0xe0,
+	0x5d, 0x03, 0x9d, 0x5a, 0x07, 0xfe, 0x03, 0xed, 0x88, 0x86, 0x3e, 0xb1, 0x9c, 0x91, 0x43, 0x6c,
+	0xfd, 0x17, 0x6c, 0x83, 0xbf, 0x11, 0xbd, 0xa5, 0xde, 0x94, 0xea, 0x1a, 0x3c, 0x07, 0x67, 0x96,
+	0x17, 0x51, 0x66, 0x7b, 0x53, 0xca, 0x1d, 0x3a, 0xc1, 0xae, 0x63, 0x73, 0x1b, 0x33, 0xc2, 0x47,
+	0x5e, 0x70, 0x87, 0x99, 0xde, 0x80, 0x27, 0xa0, 0xf7, 0x65, 0xa9, 0x5a, 0x0e, 0xe5, 0x3e, 0x0e,
+	0x99, 0xde, 0x84, 0xa7, 0xe0, 0x7f, 0x1d, 0x77, 0x3d, 0x0b, 0xbb, 0x44, 0xff, 0x0d, 0x2f, 0xc1,
+	0x45, 0xbd, 0x1b, 0x32, 0x1c, 0x30, 0x6e, 0xe3, 0xfb, 0x90, 0x0f, 0xc9, 0xc8, 0x0b, 0x88, 0xfe,
+	0x07, 0x76, 0x41, 0x67, 0xff, 0x24, 0x1e, 0x85, 0x24, 0xe0, 0xae, 0x13, 0x32, 0xbd, 0x35, 0x7c,
+	0xd3, 0xc0, 0x60, 0x26, 0x96, 0xe8, 0xe7, 0x44, 0x86, 0xbd, 0xda, 0xa7, 0xfd, 0x32, 0x49, 0x5f,
+	0x7b, 0xb0, 0xf7, 0x64, 0x2e, 0x16, 0xc9, 0x2a, 0x47, 0xa2, 0xc8, 0x8d, 0x3c, 0x5b, 0x55, 0x39,
+	0x1f, 0xb6, 0xb2, 0x9e, 0xcb, 0xef, 0x96, 0x74, 0xa3, 0x8e, 0xe7, 0x46, 0x73, 0x8c, 0xf1, 0x4b,
+	0xa3, 0x3f, 0x56, 0x97, 0xe1, 0x54, 0x22, 0x25, 0x4b, 0x35, 0x31, 0x51, 0x35, 0x52, 0xbe, 0x1e,
+	0x0c, 0x31, 0x4e, 0x65, 0x7c, 0x34, 0xc4, 0x13, 0x33, 0x56, 0x86, 0xc7, 0x56, 0x35, 0xf8, 0xea,
+	0x33, 0x00, 0x00, 0xff, 0xff, 0x20, 0xba, 0x61, 0xed, 0x1c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3e7826428ec24ed785c6dbe767949d9ab64722e0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_error.pb.go
@@ -0,0 +1,754 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad errors.
+type AdErrorEnum_AdError int32
+
+const (
+	// Enum unspecified.
+	AdErrorEnum_UNSPECIFIED AdErrorEnum_AdError = 0
+	// The received error code is not known in this version.
+	AdErrorEnum_UNKNOWN AdErrorEnum_AdError = 1
+	// Ad customizers are not supported for ad type.
+	AdErrorEnum_AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE AdErrorEnum_AdError = 2
+	// Estimating character sizes the string is too long.
+	AdErrorEnum_APPROXIMATELY_TOO_LONG AdErrorEnum_AdError = 3
+	// Estimating character sizes the string is too short.
+	AdErrorEnum_APPROXIMATELY_TOO_SHORT AdErrorEnum_AdError = 4
+	// There is a problem with the snippet.
+	AdErrorEnum_BAD_SNIPPET AdErrorEnum_AdError = 5
+	// Cannot modify an ad.
+	AdErrorEnum_CANNOT_MODIFY_AD AdErrorEnum_AdError = 6
+	// business name and url cannot be set at the same time
+	AdErrorEnum_CANNOT_SET_BUSINESS_NAME_IF_URL_SET AdErrorEnum_AdError = 7
+	// The specified field is incompatible with this ad's type or settings.
+	AdErrorEnum_CANNOT_SET_FIELD AdErrorEnum_AdError = 8
+	// Cannot set field when originAdId is set.
+	AdErrorEnum_CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET AdErrorEnum_AdError = 9
+	// Cannot set field when an existing ad id is set for sharing.
+	AdErrorEnum_CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING AdErrorEnum_AdError = 10
+	// Cannot set allowFlexibleColor false if no color is provided by user.
+	AdErrorEnum_CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE AdErrorEnum_AdError = 11
+	// When user select native, no color control is allowed because we will
+	// always respect publisher color for native format serving.
+	AdErrorEnum_CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING AdErrorEnum_AdError = 12
+	// Cannot specify a url for the ad type
+	AdErrorEnum_CANNOT_SET_URL AdErrorEnum_AdError = 13
+	// Cannot specify a tracking or mobile url without also setting final urls
+	AdErrorEnum_CANNOT_SET_WITHOUT_FINAL_URLS AdErrorEnum_AdError = 14
+	// Cannot specify a legacy url and a final url simultaneously
+	AdErrorEnum_CANNOT_SET_WITH_FINAL_URLS AdErrorEnum_AdError = 15
+	// Cannot specify a legacy url and a tracking url template simultaneously in
+	// a DSA.
+	AdErrorEnum_CANNOT_SET_WITH_TRACKING_URL_TEMPLATE AdErrorEnum_AdError = 16
+	// Cannot specify a urls in UrlData and in template fields simultaneously.
+	AdErrorEnum_CANNOT_SET_WITH_URL_DATA AdErrorEnum_AdError = 17
+	// This operator cannot be used with a subclass of Ad.
+	AdErrorEnum_CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR AdErrorEnum_AdError = 18
+	// Customer is not approved for mobile ads.
+	AdErrorEnum_CUSTOMER_NOT_APPROVED_MOBILEADS AdErrorEnum_AdError = 19
+	// Customer is not approved for 3PAS richmedia ads.
+	AdErrorEnum_CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS AdErrorEnum_AdError = 20
+	// Customer is not approved for 3PAS redirect richmedia (Ad Exchange) ads.
+	AdErrorEnum_CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS AdErrorEnum_AdError = 21
+	// Not an eligible customer
+	AdErrorEnum_CUSTOMER_NOT_ELIGIBLE AdErrorEnum_AdError = 22
+	// Customer is not eligible for updating beacon url
+	AdErrorEnum_CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL AdErrorEnum_AdError = 23
+	// There already exists an ad with the same dimensions in the union.
+	AdErrorEnum_DIMENSION_ALREADY_IN_UNION AdErrorEnum_AdError = 24
+	// Ad's dimension must be set before setting union dimension.
+	AdErrorEnum_DIMENSION_MUST_BE_SET AdErrorEnum_AdError = 25
+	// Ad's dimension must be included in the union dimensions.
+	AdErrorEnum_DIMENSION_NOT_IN_UNION AdErrorEnum_AdError = 26
+	// Display Url cannot be specified (applies to Ad Exchange Ads)
+	AdErrorEnum_DISPLAY_URL_CANNOT_BE_SPECIFIED AdErrorEnum_AdError = 27
+	// Telephone number contains invalid characters or invalid format. Please
+	// re-enter your number using digits (0-9), dashes (-), and parentheses
+	// only.
+	AdErrorEnum_DOMESTIC_PHONE_NUMBER_FORMAT AdErrorEnum_AdError = 28
+	// Emergency telephone numbers are not allowed. Please enter a valid
+	// domestic phone number to connect customers to your business.
+	AdErrorEnum_EMERGENCY_PHONE_NUMBER AdErrorEnum_AdError = 29
+	// A required field was not specified or is an empty string.
+	AdErrorEnum_EMPTY_FIELD AdErrorEnum_AdError = 30
+	// A feed attribute referenced in an ad customizer tag is not in the ad
+	// customizer mapping for the feed.
+	AdErrorEnum_FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID AdErrorEnum_AdError = 31
+	// The ad customizer field mapping for the feed attribute does not match the
+	// expected field type.
+	AdErrorEnum_FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH AdErrorEnum_AdError = 32
+	// The use of ad customizer tags in the ad text is disallowed. Details in
+	// trigger.
+	AdErrorEnum_ILLEGAL_AD_CUSTOMIZER_TAG_USE AdErrorEnum_AdError = 33
+	// Tags of the form {PH_x}, where x is a number, are disallowed in ad text.
+	AdErrorEnum_ILLEGAL_TAG_USE AdErrorEnum_AdError = 34
+	// The dimensions of the ad are specified or derived in multiple ways and
+	// are not consistent.
+	AdErrorEnum_INCONSISTENT_DIMENSIONS AdErrorEnum_AdError = 35
+	// The status cannot differ among template ads of the same union.
+	AdErrorEnum_INCONSISTENT_STATUS_IN_TEMPLATE_UNION AdErrorEnum_AdError = 36
+	// The length of the string is not valid.
+	AdErrorEnum_INCORRECT_LENGTH AdErrorEnum_AdError = 37
+	// The ad is ineligible for upgrade.
+	AdErrorEnum_INELIGIBLE_FOR_UPGRADE AdErrorEnum_AdError = 38
+	// User cannot create mobile ad for countries targeted in specified
+	// campaign.
+	AdErrorEnum_INVALID_AD_ADDRESS_CAMPAIGN_TARGET AdErrorEnum_AdError = 39
+	// Invalid Ad type. A specific type of Ad is required.
+	AdErrorEnum_INVALID_AD_TYPE AdErrorEnum_AdError = 40
+	// Headline, description or phone cannot be present when creating mobile
+	// image ad.
+	AdErrorEnum_INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE AdErrorEnum_AdError = 41
+	// Image cannot be present when creating mobile text ad.
+	AdErrorEnum_INVALID_ATTRIBUTES_FOR_MOBILE_TEXT AdErrorEnum_AdError = 42
+	// Invalid call to action text.
+	AdErrorEnum_INVALID_CALL_TO_ACTION_TEXT AdErrorEnum_AdError = 43
+	// Invalid character in URL.
+	AdErrorEnum_INVALID_CHARACTER_FOR_URL AdErrorEnum_AdError = 44
+	// Creative's country code is not valid.
+	AdErrorEnum_INVALID_COUNTRY_CODE AdErrorEnum_AdError = 45
+	// Invalid use of Dynamic Search Ads tags ({lpurl} etc.)
+	AdErrorEnum_INVALID_DSA_URL_TAG AdErrorEnum_AdError = 46
+	// Invalid use of Expanded Dynamic Search Ads tags ({lpurl} etc.)
+	AdErrorEnum_INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG AdErrorEnum_AdError = 47
+	// An input error whose real reason was not properly mapped (should not
+	// happen).
+	AdErrorEnum_INVALID_INPUT AdErrorEnum_AdError = 48
+	// An invalid markup language was entered.
+	AdErrorEnum_INVALID_MARKUP_LANGUAGE AdErrorEnum_AdError = 49
+	// An invalid mobile carrier was entered.
+	AdErrorEnum_INVALID_MOBILE_CARRIER AdErrorEnum_AdError = 50
+	// Specified mobile carriers target a country not targeted by the campaign.
+	AdErrorEnum_INVALID_MOBILE_CARRIER_TARGET AdErrorEnum_AdError = 51
+	// Wrong number of elements for given element type
+	AdErrorEnum_INVALID_NUMBER_OF_ELEMENTS AdErrorEnum_AdError = 52
+	// The format of the telephone number is incorrect. Please re-enter the
+	// number using the correct format.
+	AdErrorEnum_INVALID_PHONE_NUMBER_FORMAT AdErrorEnum_AdError = 53
+	// The certified vendor format id is incorrect.
+	AdErrorEnum_INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID AdErrorEnum_AdError = 54
+	// The template ad data contains validation errors.
+	AdErrorEnum_INVALID_TEMPLATE_DATA AdErrorEnum_AdError = 55
+	// The template field doesn't have have the correct type.
+	AdErrorEnum_INVALID_TEMPLATE_ELEMENT_FIELD_TYPE AdErrorEnum_AdError = 56
+	// Invalid template id.
+	AdErrorEnum_INVALID_TEMPLATE_ID AdErrorEnum_AdError = 57
+	// After substituting replacement strings, the line is too wide.
+	AdErrorEnum_LINE_TOO_WIDE AdErrorEnum_AdError = 58
+	// The feed referenced must have ad customizer mapping to be used in a
+	// customizer tag.
+	AdErrorEnum_MISSING_AD_CUSTOMIZER_MAPPING AdErrorEnum_AdError = 59
+	// Missing address component in template element address field.
+	AdErrorEnum_MISSING_ADDRESS_COMPONENT AdErrorEnum_AdError = 60
+	// An ad name must be entered.
+	AdErrorEnum_MISSING_ADVERTISEMENT_NAME AdErrorEnum_AdError = 61
+	// Business name must be entered.
+	AdErrorEnum_MISSING_BUSINESS_NAME AdErrorEnum_AdError = 62
+	// Description (line 2) must be entered.
+	AdErrorEnum_MISSING_DESCRIPTION1 AdErrorEnum_AdError = 63
+	// Description (line 3) must be entered.
+	AdErrorEnum_MISSING_DESCRIPTION2 AdErrorEnum_AdError = 64
+	// The destination url must contain at least one tag (e.g. {lpurl})
+	AdErrorEnum_MISSING_DESTINATION_URL_TAG AdErrorEnum_AdError = 65
+	// The tracking url template of ExpandedDynamicSearchAd must contain at
+	// least one tag. (e.g. {lpurl})
+	AdErrorEnum_MISSING_LANDING_PAGE_URL_TAG AdErrorEnum_AdError = 66
+	// A valid dimension must be specified for this ad.
+	AdErrorEnum_MISSING_DIMENSION AdErrorEnum_AdError = 67
+	// A display URL must be entered.
+	AdErrorEnum_MISSING_DISPLAY_URL AdErrorEnum_AdError = 68
+	// Headline must be entered.
+	AdErrorEnum_MISSING_HEADLINE AdErrorEnum_AdError = 69
+	// A height must be entered.
+	AdErrorEnum_MISSING_HEIGHT AdErrorEnum_AdError = 70
+	// An image must be entered.
+	AdErrorEnum_MISSING_IMAGE AdErrorEnum_AdError = 71
+	// Marketing image or product videos are required.
+	AdErrorEnum_MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS AdErrorEnum_AdError = 72
+	// The markup language in which your site is written must be entered.
+	AdErrorEnum_MISSING_MARKUP_LANGUAGES AdErrorEnum_AdError = 73
+	// A mobile carrier must be entered.
+	AdErrorEnum_MISSING_MOBILE_CARRIER AdErrorEnum_AdError = 74
+	// Phone number must be entered.
+	AdErrorEnum_MISSING_PHONE AdErrorEnum_AdError = 75
+	// Missing required template fields
+	AdErrorEnum_MISSING_REQUIRED_TEMPLATE_FIELDS AdErrorEnum_AdError = 76
+	// Missing a required field value
+	AdErrorEnum_MISSING_TEMPLATE_FIELD_VALUE AdErrorEnum_AdError = 77
+	// The ad must have text.
+	AdErrorEnum_MISSING_TEXT AdErrorEnum_AdError = 78
+	// A visible URL must be entered.
+	AdErrorEnum_MISSING_VISIBLE_URL AdErrorEnum_AdError = 79
+	// A width must be entered.
+	AdErrorEnum_MISSING_WIDTH AdErrorEnum_AdError = 80
+	// Only 1 feed can be used as the source of ad customizer substitutions in a
+	// single ad.
+	AdErrorEnum_MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED AdErrorEnum_AdError = 81
+	// TempAdUnionId must be use when adding template ads.
+	AdErrorEnum_MUST_USE_TEMP_AD_UNION_ID_ON_ADD AdErrorEnum_AdError = 82
+	// The string has too many characters.
+	AdErrorEnum_TOO_LONG AdErrorEnum_AdError = 83
+	// The string has too few characters.
+	AdErrorEnum_TOO_SHORT AdErrorEnum_AdError = 84
+	// Ad union dimensions cannot change for saved ads.
+	AdErrorEnum_UNION_DIMENSIONS_CANNOT_CHANGE AdErrorEnum_AdError = 85
+	// Address component is not {country, lat, lng}.
+	AdErrorEnum_UNKNOWN_ADDRESS_COMPONENT AdErrorEnum_AdError = 86
+	// Unknown unique field name
+	AdErrorEnum_UNKNOWN_FIELD_NAME AdErrorEnum_AdError = 87
+	// Unknown unique name (template element type specifier)
+	AdErrorEnum_UNKNOWN_UNIQUE_NAME AdErrorEnum_AdError = 88
+	// Unsupported ad dimension
+	AdErrorEnum_UNSUPPORTED_DIMENSIONS AdErrorEnum_AdError = 89
+	// URL starts with an invalid scheme.
+	AdErrorEnum_URL_INVALID_SCHEME AdErrorEnum_AdError = 90
+	// URL ends with an invalid top-level domain name.
+	AdErrorEnum_URL_INVALID_TOP_LEVEL_DOMAIN AdErrorEnum_AdError = 91
+	// URL contains illegal characters.
+	AdErrorEnum_URL_MALFORMED AdErrorEnum_AdError = 92
+	// URL must contain a host name.
+	AdErrorEnum_URL_NO_HOST AdErrorEnum_AdError = 93
+	// URL not equivalent during upgrade.
+	AdErrorEnum_URL_NOT_EQUIVALENT AdErrorEnum_AdError = 94
+	// URL host name too long to be stored as visible URL (applies to Ad
+	// Exchange ads)
+	AdErrorEnum_URL_HOST_NAME_TOO_LONG AdErrorEnum_AdError = 95
+	// URL must start with a scheme.
+	AdErrorEnum_URL_NO_SCHEME AdErrorEnum_AdError = 96
+	// URL should end in a valid domain extension, such as .com or .net.
+	AdErrorEnum_URL_NO_TOP_LEVEL_DOMAIN AdErrorEnum_AdError = 97
+	// URL must not end with a path.
+	AdErrorEnum_URL_PATH_NOT_ALLOWED AdErrorEnum_AdError = 98
+	// URL must not specify a port.
+	AdErrorEnum_URL_PORT_NOT_ALLOWED AdErrorEnum_AdError = 99
+	// URL must not contain a query.
+	AdErrorEnum_URL_QUERY_NOT_ALLOWED AdErrorEnum_AdError = 100
+	// A url scheme is not allowed in front of tag in dest url (e.g.
+	// http://{lpurl})
+	AdErrorEnum_URL_SCHEME_BEFORE_DSA_TAG AdErrorEnum_AdError = 101
+	// A url scheme is not allowed in front of tag in tracking url template
+	// (e.g. http://{lpurl})
+	AdErrorEnum_URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG AdErrorEnum_AdError = 102
+	// The user does not have permissions to create a template ad for the given
+	// template.
+	AdErrorEnum_USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE AdErrorEnum_AdError = 103
+	// Expandable setting is inconsistent/wrong. For example, an AdX ad is
+	// invalid if it has a expandable vendor format but no expanding directions
+	// specified, or expanding directions is specified, but the vendor format is
+	// not expandable.
+	AdErrorEnum_INCONSISTENT_EXPANDABLE_SETTINGS AdErrorEnum_AdError = 104
+	// Format is invalid
+	AdErrorEnum_INVALID_FORMAT AdErrorEnum_AdError = 105
+	// The text of this field did not match a pattern of allowed values.
+	AdErrorEnum_INVALID_FIELD_TEXT AdErrorEnum_AdError = 106
+	// Template element is mising
+	AdErrorEnum_ELEMENT_NOT_PRESENT AdErrorEnum_AdError = 107
+	// Error occurred during image processing
+	AdErrorEnum_IMAGE_ERROR AdErrorEnum_AdError = 108
+	// The value is not within the valid range
+	AdErrorEnum_VALUE_NOT_IN_RANGE AdErrorEnum_AdError = 109
+	// Template element field is not present
+	AdErrorEnum_FIELD_NOT_PRESENT AdErrorEnum_AdError = 110
+	// Address is incomplete
+	AdErrorEnum_ADDRESS_NOT_COMPLETE AdErrorEnum_AdError = 111
+	// Invalid address
+	AdErrorEnum_ADDRESS_INVALID AdErrorEnum_AdError = 112
+	// Error retrieving specified video
+	AdErrorEnum_VIDEO_RETRIEVAL_ERROR AdErrorEnum_AdError = 113
+	// Error processing audio
+	AdErrorEnum_AUDIO_ERROR AdErrorEnum_AdError = 114
+	// Display URL is incorrect for YouTube PYV ads
+	AdErrorEnum_INVALID_YOUTUBE_DISPLAY_URL AdErrorEnum_AdError = 115
+	// Too many product Images in GmailAd
+	AdErrorEnum_TOO_MANY_PRODUCT_IMAGES AdErrorEnum_AdError = 116
+	// Too many product Videos in GmailAd
+	AdErrorEnum_TOO_MANY_PRODUCT_VIDEOS AdErrorEnum_AdError = 117
+	// The device preference is not compatible with the ad type
+	AdErrorEnum_INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE AdErrorEnum_AdError = 118
+	// Call tracking is not supported for specified country.
+	AdErrorEnum_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY AdErrorEnum_AdError = 119
+	// Carrier specific short number is not allowed.
+	AdErrorEnum_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED AdErrorEnum_AdError = 120
+	// Specified phone number type is disallowed.
+	AdErrorEnum_DISALLOWED_NUMBER_TYPE AdErrorEnum_AdError = 121
+	// Phone number not supported for country.
+	AdErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY AdErrorEnum_AdError = 122
+	// Phone number not supported with call tracking enabled for country.
+	AdErrorEnum_PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY AdErrorEnum_AdError = 123
+	// Premium rate phone number is not allowed.
+	AdErrorEnum_PREMIUM_RATE_NUMBER_NOT_ALLOWED AdErrorEnum_AdError = 124
+	// Vanity phone number is not allowed.
+	AdErrorEnum_VANITY_PHONE_NUMBER_NOT_ALLOWED AdErrorEnum_AdError = 125
+	// Invalid call conversion type id.
+	AdErrorEnum_INVALID_CALL_CONVERSION_TYPE_ID AdErrorEnum_AdError = 126
+	// Cannot disable call conversion and set conversion type id.
+	AdErrorEnum_CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID AdErrorEnum_AdError = 127
+	// Cannot set path2 without path1.
+	AdErrorEnum_CANNOT_SET_PATH2_WITHOUT_PATH1 AdErrorEnum_AdError = 128
+	// Missing domain name in campaign setting when adding expanded dynamic
+	// search ad.
+	AdErrorEnum_MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME AdErrorEnum_AdError = 129
+	// The associated ad is not compatible with restriction type.
+	AdErrorEnum_INCOMPATIBLE_WITH_RESTRICTION_TYPE AdErrorEnum_AdError = 130
+)
+
+var AdErrorEnum_AdError_name = map[int32]string{
+	0:   "UNSPECIFIED",
+	1:   "UNKNOWN",
+	2:   "AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE",
+	3:   "APPROXIMATELY_TOO_LONG",
+	4:   "APPROXIMATELY_TOO_SHORT",
+	5:   "BAD_SNIPPET",
+	6:   "CANNOT_MODIFY_AD",
+	7:   "CANNOT_SET_BUSINESS_NAME_IF_URL_SET",
+	8:   "CANNOT_SET_FIELD",
+	9:   "CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET",
+	10:  "CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING",
+	11:  "CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE",
+	12:  "CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING",
+	13:  "CANNOT_SET_URL",
+	14:  "CANNOT_SET_WITHOUT_FINAL_URLS",
+	15:  "CANNOT_SET_WITH_FINAL_URLS",
+	16:  "CANNOT_SET_WITH_TRACKING_URL_TEMPLATE",
+	17:  "CANNOT_SET_WITH_URL_DATA",
+	18:  "CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR",
+	19:  "CUSTOMER_NOT_APPROVED_MOBILEADS",
+	20:  "CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS",
+	21:  "CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS",
+	22:  "CUSTOMER_NOT_ELIGIBLE",
+	23:  "CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL",
+	24:  "DIMENSION_ALREADY_IN_UNION",
+	25:  "DIMENSION_MUST_BE_SET",
+	26:  "DIMENSION_NOT_IN_UNION",
+	27:  "DISPLAY_URL_CANNOT_BE_SPECIFIED",
+	28:  "DOMESTIC_PHONE_NUMBER_FORMAT",
+	29:  "EMERGENCY_PHONE_NUMBER",
+	30:  "EMPTY_FIELD",
+	31:  "FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID",
+	32:  "FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH",
+	33:  "ILLEGAL_AD_CUSTOMIZER_TAG_USE",
+	34:  "ILLEGAL_TAG_USE",
+	35:  "INCONSISTENT_DIMENSIONS",
+	36:  "INCONSISTENT_STATUS_IN_TEMPLATE_UNION",
+	37:  "INCORRECT_LENGTH",
+	38:  "INELIGIBLE_FOR_UPGRADE",
+	39:  "INVALID_AD_ADDRESS_CAMPAIGN_TARGET",
+	40:  "INVALID_AD_TYPE",
+	41:  "INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE",
+	42:  "INVALID_ATTRIBUTES_FOR_MOBILE_TEXT",
+	43:  "INVALID_CALL_TO_ACTION_TEXT",
+	44:  "INVALID_CHARACTER_FOR_URL",
+	45:  "INVALID_COUNTRY_CODE",
+	46:  "INVALID_DSA_URL_TAG",
+	47:  "INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG",
+	48:  "INVALID_INPUT",
+	49:  "INVALID_MARKUP_LANGUAGE",
+	50:  "INVALID_MOBILE_CARRIER",
+	51:  "INVALID_MOBILE_CARRIER_TARGET",
+	52:  "INVALID_NUMBER_OF_ELEMENTS",
+	53:  "INVALID_PHONE_NUMBER_FORMAT",
+	54:  "INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID",
+	55:  "INVALID_TEMPLATE_DATA",
+	56:  "INVALID_TEMPLATE_ELEMENT_FIELD_TYPE",
+	57:  "INVALID_TEMPLATE_ID",
+	58:  "LINE_TOO_WIDE",
+	59:  "MISSING_AD_CUSTOMIZER_MAPPING",
+	60:  "MISSING_ADDRESS_COMPONENT",
+	61:  "MISSING_ADVERTISEMENT_NAME",
+	62:  "MISSING_BUSINESS_NAME",
+	63:  "MISSING_DESCRIPTION1",
+	64:  "MISSING_DESCRIPTION2",
+	65:  "MISSING_DESTINATION_URL_TAG",
+	66:  "MISSING_LANDING_PAGE_URL_TAG",
+	67:  "MISSING_DIMENSION",
+	68:  "MISSING_DISPLAY_URL",
+	69:  "MISSING_HEADLINE",
+	70:  "MISSING_HEIGHT",
+	71:  "MISSING_IMAGE",
+	72:  "MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS",
+	73:  "MISSING_MARKUP_LANGUAGES",
+	74:  "MISSING_MOBILE_CARRIER",
+	75:  "MISSING_PHONE",
+	76:  "MISSING_REQUIRED_TEMPLATE_FIELDS",
+	77:  "MISSING_TEMPLATE_FIELD_VALUE",
+	78:  "MISSING_TEXT",
+	79:  "MISSING_VISIBLE_URL",
+	80:  "MISSING_WIDTH",
+	81:  "MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED",
+	82:  "MUST_USE_TEMP_AD_UNION_ID_ON_ADD",
+	83:  "TOO_LONG",
+	84:  "TOO_SHORT",
+	85:  "UNION_DIMENSIONS_CANNOT_CHANGE",
+	86:  "UNKNOWN_ADDRESS_COMPONENT",
+	87:  "UNKNOWN_FIELD_NAME",
+	88:  "UNKNOWN_UNIQUE_NAME",
+	89:  "UNSUPPORTED_DIMENSIONS",
+	90:  "URL_INVALID_SCHEME",
+	91:  "URL_INVALID_TOP_LEVEL_DOMAIN",
+	92:  "URL_MALFORMED",
+	93:  "URL_NO_HOST",
+	94:  "URL_NOT_EQUIVALENT",
+	95:  "URL_HOST_NAME_TOO_LONG",
+	96:  "URL_NO_SCHEME",
+	97:  "URL_NO_TOP_LEVEL_DOMAIN",
+	98:  "URL_PATH_NOT_ALLOWED",
+	99:  "URL_PORT_NOT_ALLOWED",
+	100: "URL_QUERY_NOT_ALLOWED",
+	101: "URL_SCHEME_BEFORE_DSA_TAG",
+	102: "URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG",
+	103: "USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE",
+	104: "INCONSISTENT_EXPANDABLE_SETTINGS",
+	105: "INVALID_FORMAT",
+	106: "INVALID_FIELD_TEXT",
+	107: "ELEMENT_NOT_PRESENT",
+	108: "IMAGE_ERROR",
+	109: "VALUE_NOT_IN_RANGE",
+	110: "FIELD_NOT_PRESENT",
+	111: "ADDRESS_NOT_COMPLETE",
+	112: "ADDRESS_INVALID",
+	113: "VIDEO_RETRIEVAL_ERROR",
+	114: "AUDIO_ERROR",
+	115: "INVALID_YOUTUBE_DISPLAY_URL",
+	116: "TOO_MANY_PRODUCT_IMAGES",
+	117: "TOO_MANY_PRODUCT_VIDEOS",
+	118: "INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE",
+	119: "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
+	120: "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
+	121: "DISALLOWED_NUMBER_TYPE",
+	122: "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
+	123: "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
+	124: "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
+	125: "VANITY_PHONE_NUMBER_NOT_ALLOWED",
+	126: "INVALID_CALL_CONVERSION_TYPE_ID",
+	127: "CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID",
+	128: "CANNOT_SET_PATH2_WITHOUT_PATH1",
+	129: "MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME",
+	130: "INCOMPATIBLE_WITH_RESTRICTION_TYPE",
+}
+var AdErrorEnum_AdError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE":                  2,
+	"APPROXIMATELY_TOO_LONG":                                    3,
+	"APPROXIMATELY_TOO_SHORT":                                   4,
+	"BAD_SNIPPET":                                               5,
+	"CANNOT_MODIFY_AD":                                          6,
+	"CANNOT_SET_BUSINESS_NAME_IF_URL_SET":                       7,
+	"CANNOT_SET_FIELD":                                          8,
+	"CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET":                    9,
+	"CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING":               10,
+	"CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE":                     11,
+	"CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING":       12,
+	"CANNOT_SET_URL":                                            13,
+	"CANNOT_SET_WITHOUT_FINAL_URLS":                             14,
+	"CANNOT_SET_WITH_FINAL_URLS":                                15,
+	"CANNOT_SET_WITH_TRACKING_URL_TEMPLATE":                     16,
+	"CANNOT_SET_WITH_URL_DATA":                                  17,
+	"CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR":                       18,
+	"CUSTOMER_NOT_APPROVED_MOBILEADS":                           19,
+	"CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS":                      20,
+	"CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS":             21,
+	"CUSTOMER_NOT_ELIGIBLE":                                     22,
+	"CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL":             23,
+	"DIMENSION_ALREADY_IN_UNION":                                24,
+	"DIMENSION_MUST_BE_SET":                                     25,
+	"DIMENSION_NOT_IN_UNION":                                    26,
+	"DISPLAY_URL_CANNOT_BE_SPECIFIED":                           27,
+	"DOMESTIC_PHONE_NUMBER_FORMAT":                              28,
+	"EMERGENCY_PHONE_NUMBER":                                    29,
+	"EMPTY_FIELD":                                               30,
+	"FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID":              31,
+	"FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH":                      32,
+	"ILLEGAL_AD_CUSTOMIZER_TAG_USE":                             33,
+	"ILLEGAL_TAG_USE":                                           34,
+	"INCONSISTENT_DIMENSIONS":                                   35,
+	"INCONSISTENT_STATUS_IN_TEMPLATE_UNION":                     36,
+	"INCORRECT_LENGTH":                                          37,
+	"INELIGIBLE_FOR_UPGRADE":                                    38,
+	"INVALID_AD_ADDRESS_CAMPAIGN_TARGET":                        39,
+	"INVALID_AD_TYPE":                                           40,
+	"INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE":                       41,
+	"INVALID_ATTRIBUTES_FOR_MOBILE_TEXT":                        42,
+	"INVALID_CALL_TO_ACTION_TEXT":                               43,
+	"INVALID_CHARACTER_FOR_URL":                                 44,
+	"INVALID_COUNTRY_CODE":                                      45,
+	"INVALID_DSA_URL_TAG":                                       46,
+	"INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG":                    47,
+	"INVALID_INPUT":                                             48,
+	"INVALID_MARKUP_LANGUAGE":                                   49,
+	"INVALID_MOBILE_CARRIER":                                    50,
+	"INVALID_MOBILE_CARRIER_TARGET":                             51,
+	"INVALID_NUMBER_OF_ELEMENTS":                                52,
+	"INVALID_PHONE_NUMBER_FORMAT":                               53,
+	"INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID":             54,
+	"INVALID_TEMPLATE_DATA":                                     55,
+	"INVALID_TEMPLATE_ELEMENT_FIELD_TYPE":                       56,
+	"INVALID_TEMPLATE_ID":                                       57,
+	"LINE_TOO_WIDE":                                             58,
+	"MISSING_AD_CUSTOMIZER_MAPPING":                             59,
+	"MISSING_ADDRESS_COMPONENT":                                 60,
+	"MISSING_ADVERTISEMENT_NAME":                                61,
+	"MISSING_BUSINESS_NAME":                                     62,
+	"MISSING_DESCRIPTION1":                                      63,
+	"MISSING_DESCRIPTION2":                                      64,
+	"MISSING_DESTINATION_URL_TAG":                               65,
+	"MISSING_LANDING_PAGE_URL_TAG":                              66,
+	"MISSING_DIMENSION":                                         67,
+	"MISSING_DISPLAY_URL":                                       68,
+	"MISSING_HEADLINE":                                          69,
+	"MISSING_HEIGHT":                                            70,
+	"MISSING_IMAGE":                                             71,
+	"MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS":                 72,
+	"MISSING_MARKUP_LANGUAGES":                                  73,
+	"MISSING_MOBILE_CARRIER":                                    74,
+	"MISSING_PHONE":                                             75,
+	"MISSING_REQUIRED_TEMPLATE_FIELDS":                          76,
+	"MISSING_TEMPLATE_FIELD_VALUE":                              77,
+	"MISSING_TEXT":                                              78,
+	"MISSING_VISIBLE_URL":                                       79,
+	"MISSING_WIDTH":                                             80,
+	"MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED":                       81,
+	"MUST_USE_TEMP_AD_UNION_ID_ON_ADD":                          82,
+	"TOO_LONG":                                                  83,
+	"TOO_SHORT":                                                 84,
+	"UNION_DIMENSIONS_CANNOT_CHANGE":                            85,
+	"UNKNOWN_ADDRESS_COMPONENT":                                 86,
+	"UNKNOWN_FIELD_NAME":                                        87,
+	"UNKNOWN_UNIQUE_NAME":                                       88,
+	"UNSUPPORTED_DIMENSIONS":                                    89,
+	"URL_INVALID_SCHEME":                                        90,
+	"URL_INVALID_TOP_LEVEL_DOMAIN":                              91,
+	"URL_MALFORMED":                                             92,
+	"URL_NO_HOST":                                               93,
+	"URL_NOT_EQUIVALENT":                                        94,
+	"URL_HOST_NAME_TOO_LONG":                                    95,
+	"URL_NO_SCHEME":                                             96,
+	"URL_NO_TOP_LEVEL_DOMAIN":                                   97,
+	"URL_PATH_NOT_ALLOWED":                                      98,
+	"URL_PORT_NOT_ALLOWED":                                      99,
+	"URL_QUERY_NOT_ALLOWED":                                     100,
+	"URL_SCHEME_BEFORE_DSA_TAG":                                 101,
+	"URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG":          102,
+	"USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE":                     103,
+	"INCONSISTENT_EXPANDABLE_SETTINGS":                          104,
+	"INVALID_FORMAT":                                            105,
+	"INVALID_FIELD_TEXT":                                        106,
+	"ELEMENT_NOT_PRESENT":                                       107,
+	"IMAGE_ERROR":                                               108,
+	"VALUE_NOT_IN_RANGE":                                        109,
+	"FIELD_NOT_PRESENT":                                         110,
+	"ADDRESS_NOT_COMPLETE":                                      111,
+	"ADDRESS_INVALID":                                           112,
+	"VIDEO_RETRIEVAL_ERROR":                                     113,
+	"AUDIO_ERROR":                                               114,
+	"INVALID_YOUTUBE_DISPLAY_URL":                               115,
+	"TOO_MANY_PRODUCT_IMAGES":                                   116,
+	"TOO_MANY_PRODUCT_VIDEOS":                                   117,
+	"INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE":                118,
+	"CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY":                    119,
+	"CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED":                 120,
+	"DISALLOWED_NUMBER_TYPE":                                    121,
+	"PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY":                    122,
+	"PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY":  123,
+	"PREMIUM_RATE_NUMBER_NOT_ALLOWED":                           124,
+	"VANITY_PHONE_NUMBER_NOT_ALLOWED":                           125,
+	"INVALID_CALL_CONVERSION_TYPE_ID":                           126,
+	"CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID": 127,
+	"CANNOT_SET_PATH2_WITHOUT_PATH1":                            128,
+	"MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME":            129,
+	"INCOMPATIBLE_WITH_RESTRICTION_TYPE":                        130,
+}
+
+func (x AdErrorEnum_AdError) String() string {
+	return proto.EnumName(AdErrorEnum_AdError_name, int32(x))
+}
+func (AdErrorEnum_AdError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_error_aca81f4d1458cbc6, []int{0, 0}
+}
+
+// Container for enum describing possible ad errors.
+type AdErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdErrorEnum) Reset()         { *m = AdErrorEnum{} }
+func (m *AdErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdErrorEnum) ProtoMessage()    {}
+func (*AdErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_error_aca81f4d1458cbc6, []int{0}
+}
+func (m *AdErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdErrorEnum.Unmarshal(m, b)
+}
+func (m *AdErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdErrorEnum.Merge(dst, src)
+}
+func (m *AdErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdErrorEnum.Size(m)
+}
+func (m *AdErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdErrorEnum)(nil), "google.ads.googleads.v0.errors.AdErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdErrorEnum_AdError", AdErrorEnum_AdError_name, AdErrorEnum_AdError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_error.proto", fileDescriptor_ad_error_aca81f4d1458cbc6)
+}
+
+var fileDescriptor_ad_error_aca81f4d1458cbc6 = []byte{
+	// 1985 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x58, 0x5b, 0x7f, 0x14, 0xb7,
+	0x15, 0xaf, 0x49, 0x1b, 0x12, 0x01, 0x41, 0x88, 0xfb, 0xcd, 0x10, 0x43, 0xb8, 0x05, 0xd6, 0x06,
+	0xd2, 0x26, 0x69, 0x92, 0xb6, 0xda, 0xd1, 0xd9, 0x19, 0x15, 0x8d, 0x34, 0x96, 0x34, 0x6b, 0x2f,
+	0x75, 0xab, 0x3a, 0x31, 0x75, 0xd3, 0x02, 0x4b, 0x6d, 0x42, 0xef, 0xd7, 0x8f, 0xd2, 0xc7, 0x7e,
+	0x84, 0x3e, 0xf6, 0x31, 0x9f, 0xaa, 0xbf, 0xa3, 0x19, 0xcd, 0xce, 0xda, 0x26, 0x79, 0xda, 0x59,
+	0x9d, 0xbf, 0x46, 0x47, 0x7f, 0xfd, 0xcf, 0x45, 0x43, 0xee, 0x6d, 0x4f, 0xa7, 0xdb, 0x4f, 0x9f,
+	0x2c, 0x6f, 0x6e, 0xed, 0x2e, 0x37, 0x8f, 0xf8, 0xf4, 0x6a, 0x65, 0xf9, 0xc9, 0xce, 0xce, 0x74,
+	0x67, 0x77, 0x79, 0x73, 0x2b, 0xc4, 0xa7, 0xc1, 0x8b, 0x9d, 0xe9, 0xcb, 0x29, 0x5b, 0x6c, 0x30,
+	0x83, 0xcd, 0xad, 0xdd, 0x41, 0x07, 0x1f, 0xbc, 0x5a, 0x19, 0x34, 0xf0, 0xa5, 0xaf, 0xaf, 0x92,
+	0x23, 0x7c, 0x0b, 0xf0, 0x0f, 0x3c, 0xff, 0xea, 0xd9, 0xd2, 0x7f, 0xaf, 0x92, 0xc3, 0xed, 0x7f,
+	0x76, 0x9c, 0x1c, 0xa9, 0xb5, 0xab, 0x20, 0x93, 0x23, 0x09, 0x82, 0x7e, 0x87, 0x1d, 0x21, 0x87,
+	0x6b, 0xfd, 0x48, 0x9b, 0x35, 0x4d, 0x17, 0xd8, 0x5d, 0x72, 0x8b, 0x8b, 0x90, 0xd5, 0xce, 0x9b,
+	0x52, 0x3e, 0x06, 0xeb, 0x82, 0x36, 0x3e, 0xb8, 0xba, 0xaa, 0x8c, 0xf5, 0x20, 0xc2, 0xc8, 0xd8,
+	0xc0, 0x45, 0xf0, 0x93, 0x0a, 0xe8, 0x21, 0x76, 0x81, 0x9c, 0xe1, 0x55, 0x65, 0xcd, 0xba, 0x2c,
+	0xb9, 0x07, 0x35, 0x09, 0xde, 0x98, 0xa0, 0x8c, 0xce, 0xe9, 0x1b, 0xec, 0x22, 0x39, 0xbb, 0xdf,
+	0xe6, 0x0a, 0x63, 0x3d, 0xfd, 0x2e, 0x3a, 0x31, 0xe4, 0x22, 0x38, 0x2d, 0xab, 0x0a, 0x3c, 0xfd,
+	0x1e, 0x3b, 0x45, 0x68, 0xc6, 0x35, 0xae, 0x55, 0x1a, 0x21, 0x47, 0x93, 0xc0, 0x05, 0x7d, 0x93,
+	0xdd, 0x24, 0xd7, 0xda, 0x51, 0x07, 0x3e, 0x0c, 0x6b, 0x27, 0x35, 0x38, 0x17, 0x34, 0x2f, 0x21,
+	0xc8, 0x51, 0xa8, 0xad, 0x42, 0x03, 0x3d, 0xdc, 0x9b, 0x8e, 0xc0, 0x91, 0x04, 0x25, 0xe8, 0x5b,
+	0xec, 0x0e, 0xb9, 0xb1, 0x77, 0x34, 0xac, 0x49, 0x5f, 0x04, 0x63, 0x65, 0x2e, 0x35, 0x6e, 0x44,
+	0x8a, 0xf8, 0x86, 0xb7, 0xd9, 0x32, 0x79, 0xff, 0x60, 0x6c, 0x07, 0x8a, 0x7b, 0x77, 0x05, 0xb7,
+	0x52, 0xe7, 0x94, 0xb0, 0xdb, 0xe4, 0xbd, 0xde, 0x04, 0xae, 0x94, 0x59, 0x0b, 0x23, 0x05, 0xeb,
+	0x72, 0xa8, 0x20, 0x64, 0x46, 0x19, 0x1b, 0x46, 0x5c, 0x39, 0xa0, 0x47, 0xd8, 0x87, 0xe4, 0x61,
+	0x0f, 0xda, 0xd8, 0x32, 0xa3, 0xbd, 0x35, 0x2a, 0xac, 0x15, 0xa0, 0x83, 0xe6, 0x5e, 0x8e, 0x01,
+	0x17, 0x28, 0x79, 0x04, 0x79, 0x5c, 0xe3, 0x28, 0x63, 0xe4, 0x9d, 0xde, 0xc4, 0xda, 0x2a, 0x7a,
+	0x8c, 0xbd, 0x4b, 0x2e, 0xf7, 0xc6, 0xd0, 0x45, 0x53, 0xa3, 0xc3, 0x9a, 0x2b, 0x44, 0x38, 0xfa,
+	0x0e, 0x5b, 0x24, 0x17, 0xf6, 0x40, 0xfa, 0xf6, 0xe3, 0x7b, 0x5c, 0x8f, 0x76, 0x6f, 0x79, 0xf6,
+	0x48, 0xea, 0x3c, 0x72, 0xea, 0xa1, 0xac, 0x14, 0xf7, 0x40, 0x29, 0xbb, 0x44, 0xce, 0xed, 0x85,
+	0x22, 0x42, 0x70, 0xcf, 0xe9, 0x89, 0xde, 0xf9, 0xd4, 0x0e, 0x90, 0x29, 0x57, 0x0f, 0x33, 0xc5,
+	0x9d, 0x8b, 0x5c, 0x99, 0x0a, 0x2c, 0xf7, 0xc6, 0x52, 0xc6, 0xae, 0x91, 0x2b, 0x8d, 0xa6, 0xc0,
+	0x46, 0x41, 0x45, 0x65, 0x8c, 0x41, 0x84, 0xd2, 0x0c, 0xa5, 0x02, 0x2e, 0x1c, 0x3d, 0xc9, 0x6e,
+	0x91, 0xeb, 0x07, 0x83, 0x7c, 0x21, 0xad, 0xa8, 0xb8, 0xf5, 0x28, 0x0b, 0x47, 0x4f, 0xb1, 0xfb,
+	0xe4, 0xde, 0xb7, 0x22, 0x2d, 0x08, 0x69, 0x21, 0xf3, 0x71, 0xca, 0x69, 0x76, 0x9e, 0x9c, 0x9e,
+	0x9b, 0x02, 0x4a, 0xe6, 0x78, 0x54, 0xf4, 0xcc, 0xbe, 0xb7, 0x25, 0x53, 0xdc, 0x44, 0x5d, 0x09,
+	0x8e, 0xa7, 0x11, 0x86, 0xc0, 0x33, 0xa3, 0xe3, 0x21, 0x9c, 0x45, 0x86, 0x85, 0x2c, 0x41, 0x3b,
+	0x69, 0x74, 0xe0, 0xca, 0x02, 0x17, 0x93, 0x20, 0x75, 0xa8, 0xb5, 0x34, 0x9a, 0x9e, 0xc3, 0xd5,
+	0x66, 0xf6, 0xb2, 0x76, 0x3e, 0x0c, 0x21, 0x0a, 0xed, 0x3c, 0xc6, 0xcc, 0xcc, 0x84, 0xcb, 0x75,
+	0xd3, 0x2e, 0x20, 0x4d, 0x42, 0xba, 0x4a, 0xf1, 0x49, 0x64, 0xb9, 0xe5, 0x16, 0xa7, 0x76, 0xf1,
+	0x7a, 0x91, 0x5d, 0x25, 0x97, 0x84, 0x29, 0xc1, 0x79, 0x99, 0x85, 0xaa, 0x30, 0x1a, 0x82, 0xae,
+	0xcb, 0x21, 0xd8, 0x56, 0x3e, 0xf4, 0x12, 0x2e, 0x01, 0x25, 0xd8, 0x1c, 0x74, 0x36, 0x99, 0x83,
+	0xd0, 0xcb, 0x18, 0x79, 0x50, 0x56, 0x7e, 0xd2, 0x06, 0xc9, 0x22, 0x5b, 0x21, 0x77, 0x47, 0x00,
+	0x22, 0x70, 0xef, 0xad, 0x1c, 0xd6, 0x1e, 0x1a, 0x7f, 0x0b, 0x3e, 0x86, 0x50, 0xf2, 0xaa, 0xc2,
+	0xbd, 0x23, 0x11, 0x18, 0xf2, 0x41, 0x0a, 0x7a, 0x05, 0xcf, 0x69, 0xef, 0x8c, 0x16, 0x17, 0x31,
+	0xa5, 0x74, 0x25, 0xf7, 0x59, 0x41, 0xaf, 0xa2, 0x56, 0xa5, 0x52, 0x90, 0x73, 0x15, 0xe6, 0xb2,
+	0x4a, 0xf0, 0x3c, 0x47, 0xc9, 0xd0, 0x77, 0xd9, 0x49, 0x72, 0x3c, 0x41, 0xd2, 0xe0, 0x12, 0xe6,
+	0x0e, 0xa9, 0x33, 0xa3, 0x9d, 0x74, 0x1e, 0xb4, 0x0f, 0x1d, 0x61, 0x8e, 0x5e, 0x43, 0xf5, 0xce,
+	0x19, 0x9d, 0xe7, 0xbe, 0x76, 0x48, 0x63, 0xd2, 0x6d, 0xcb, 0xe7, 0x75, 0x4c, 0x0b, 0x08, 0xb5,
+	0x51, 0x07, 0x0a, 0x74, 0xee, 0x0b, 0xfa, 0x1e, 0xd2, 0x23, 0xf5, 0x9e, 0x43, 0xce, 0x2d, 0x17,
+	0x40, 0x6f, 0xb0, 0x1b, 0x64, 0x49, 0xea, 0x31, 0x57, 0x52, 0xa0, 0xc7, 0x5c, 0x08, 0x8b, 0x09,
+	0x27, 0xe3, 0x65, 0xc5, 0x65, 0xae, 0x83, 0xe7, 0x36, 0x07, 0x4f, 0x6f, 0x46, 0xb7, 0x67, 0xb8,
+	0x98, 0x0e, 0x6f, 0x61, 0x38, 0x74, 0x83, 0x89, 0x9b, 0x26, 0x14, 0x1a, 0x99, 0x07, 0x59, 0xf2,
+	0x1c, 0xe8, 0xed, 0xb9, 0x55, 0x0e, 0x04, 0x7a, 0x58, 0xf7, 0xf4, 0x0e, 0xbb, 0x42, 0x2e, 0x26,
+	0x5c, 0xc6, 0x95, 0x0a, 0xde, 0x04, 0x9e, 0x79, 0x14, 0x4e, 0x04, 0xbc, 0xcf, 0x2e, 0x93, 0xf3,
+	0x1d, 0xa0, 0xe0, 0x96, 0x67, 0xbe, 0xd1, 0x41, 0x94, 0xe9, 0x5d, 0x76, 0x8e, 0x9c, 0xea, 0xcc,
+	0xa6, 0xd6, 0xde, 0x4e, 0x42, 0x66, 0x04, 0xd0, 0x7b, 0xec, 0x2c, 0x39, 0x99, 0x2c, 0xc2, 0xf1,
+	0x26, 0xea, 0x79, 0x4e, 0x07, 0x98, 0x33, 0x93, 0x01, 0xd6, 0x2b, 0xae, 0x05, 0x88, 0x20, 0x26,
+	0x9a, 0x97, 0x32, 0x0b, 0x0e, 0xb8, 0xcd, 0x62, 0x46, 0x44, 0xec, 0x32, 0x3b, 0x41, 0x8e, 0x25,
+	0xac, 0xd4, 0x55, 0xed, 0xe9, 0x4a, 0x73, 0x72, 0xcd, 0x50, 0xc9, 0xed, 0xa3, 0xba, 0x0a, 0x8a,
+	0xeb, 0xbc, 0xc6, 0x6d, 0xdf, 0x6f, 0x88, 0x6f, 0x8d, 0xcd, 0x3e, 0x33, 0x6e, 0xad, 0x04, 0x4b,
+	0x1f, 0x44, 0xa9, 0x1c, 0x68, 0x4b, 0x9c, 0x3f, 0xc4, 0xa0, 0x4b, 0x90, 0x56, 0xf1, 0x66, 0x14,
+	0x40, 0x41, 0x09, 0xda, 0x3b, 0xfa, 0x41, 0x9f, 0xad, 0x83, 0xe2, 0xe2, 0xfb, 0x18, 0xe8, 0x09,
+	0x60, 0x65, 0x56, 0x84, 0x12, 0x84, 0xe4, 0x21, 0x03, 0xeb, 0x63, 0x6c, 0x85, 0x31, 0x68, 0x61,
+	0x12, 0x1e, 0xb5, 0xfe, 0x03, 0x0c, 0xe4, 0x34, 0xa5, 0x53, 0x57, 0x4c, 0x7e, 0x1f, 0xf6, 0x4f,
+	0xbb, 0x33, 0xb5, 0xde, 0xb4, 0xf5, 0x23, 0xca, 0xe2, 0xa3, 0x3e, 0xd7, 0x1d, 0x50, 0x0a, 0xfa,
+	0x31, 0xf2, 0xa7, 0xa4, 0x86, 0x58, 0x19, 0xd7, 0xa4, 0x00, 0xfa, 0x43, 0xa4, 0xa1, 0x94, 0xce,
+	0x61, 0x30, 0xcd, 0x47, 0x4c, 0x1b, 0x62, 0xf4, 0x13, 0x3c, 0xf3, 0x19, 0xa4, 0xd5, 0xa7, 0x29,
+	0x2b, 0xa3, 0x41, 0x7b, 0xfa, 0x29, 0xb2, 0x34, 0x33, 0x8f, 0x71, 0x6f, 0xae, 0xf1, 0x09, 0xab,
+	0x26, 0xfd, 0x0c, 0x77, 0x94, 0xec, 0x73, 0x05, 0x95, 0xfe, 0x08, 0xe5, 0x92, 0x4c, 0x02, 0x5c,
+	0x66, 0x65, 0x85, 0x5a, 0xbb, 0x4f, 0x7f, 0xfc, 0x1a, 0xcb, 0x03, 0xfa, 0x13, 0x24, 0xbd, 0x67,
+	0xf1, 0x12, 0x4b, 0x59, 0x93, 0x26, 0xa3, 0x48, 0x38, 0xa6, 0xab, 0x04, 0x50, 0x5c, 0x0b, 0xfc,
+	0xad, 0x78, 0x0e, 0x1d, 0x62, 0xc8, 0x4e, 0x93, 0x13, 0xdd, 0x2b, 0x52, 0xa0, 0xd3, 0x0c, 0x69,
+	0x9b, 0x0d, 0x77, 0x49, 0x91, 0x0a, 0x8c, 0xea, 0x64, 0x28, 0x80, 0x0b, 0xa4, 0x90, 0x02, 0xd6,
+	0xca, 0xd9, 0xa8, 0xcc, 0x0b, 0x4f, 0x47, 0x48, 0x70, 0x1a, 0x6b, 0x42, 0x2f, 0x67, 0xf7, 0xc8,
+	0xed, 0x34, 0x84, 0x02, 0x05, 0xdf, 0x19, 0x83, 0xb1, 0xa1, 0xb2, 0x46, 0xd4, 0x99, 0x0f, 0x63,
+	0x29, 0xc0, 0x38, 0x5a, 0x60, 0xfd, 0xeb, 0xc3, 0x7b, 0x7a, 0x76, 0x54, 0xa2, 0xa0, 0x3b, 0xeb,
+	0xbc, 0xa0, 0x7f, 0xda, 0x5f, 0x3b, 0xaa, 0x91, 0x3e, 0x62, 0xd7, 0xc9, 0xd5, 0x34, 0x64, 0x61,
+	0xb5, 0x96, 0x16, 0x7a, 0x8a, 0x88, 0x92, 0x71, 0x54, 0xf5, 0x09, 0x9b, 0x37, 0x86, 0x31, 0x57,
+	0x35, 0xd0, 0x92, 0x51, 0x72, 0x74, 0x86, 0x58, 0xf7, 0x54, 0xf7, 0xb9, 0x1a, 0x4b, 0x17, 0xf3,
+	0x1a, 0x72, 0x65, 0xfa, 0x5e, 0xac, 0x49, 0xe1, 0x0b, 0x5a, 0xa1, 0x6e, 0xcb, 0x5a, 0x79, 0x59,
+	0x29, 0x40, 0x62, 0xbd, 0xd4, 0x99, 0x0f, 0x98, 0xd0, 0x5d, 0xa8, 0x75, 0xd7, 0xe9, 0xd1, 0xd5,
+	0xe8, 0x2e, 0x96, 0x02, 0xac, 0xed, 0xe8, 0x09, 0x2a, 0x32, 0x66, 0x56, 0x6c, 0x88, 0xb0, 0xee,
+	0x09, 0x41, 0x2d, 0x3b, 0x4a, 0xde, 0xea, 0xba, 0x3e, 0xc7, 0x8e, 0x91, 0xb7, 0x67, 0x7d, 0x9e,
+	0x67, 0x4b, 0x64, 0xb1, 0x99, 0x31, 0xcb, 0xe0, 0xa9, 0xaa, 0x65, 0x05, 0xd7, 0x39, 0xd0, 0x1a,
+	0xf5, 0xdc, 0xf6, 0x9f, 0x07, 0xe8, 0x79, 0xcc, 0xce, 0x10, 0x96, 0xcc, 0x0d, 0x0b, 0x51, 0xac,
+	0x6b, 0xb8, 0xe5, 0x34, 0x5e, 0x6b, 0xb9, 0x5a, 0x43, 0x63, 0x58, 0xc7, 0x43, 0xe9, 0xed, 0xa3,
+	0x5f, 0x3b, 0x26, 0xf1, 0x65, 0x56, 0x85, 0x14, 0x8e, 0x2e, 0x2b, 0xa0, 0x04, 0xfa, 0x18, 0x39,
+	0xef, 0x8f, 0x7b, 0x53, 0x05, 0x05, 0x63, 0x50, 0x41, 0x98, 0x92, 0x4b, 0x4d, 0x7f, 0x86, 0x44,
+	0x22, 0xa2, 0xe4, 0x0a, 0xd3, 0x03, 0x08, 0xba, 0x11, 0x3b, 0x69, 0xab, 0x82, 0x36, 0xa1, 0x30,
+	0xce, 0xd3, 0x9f, 0xa7, 0xb7, 0xc7, 0x1e, 0x62, 0xb5, 0x96, 0x63, 0xae, 0x70, 0x0b, 0xbf, 0x88,
+	0x1e, 0x59, 0x15, 0x51, 0x4d, 0xef, 0xda, 0x11, 0x16, 0xd2, 0x7b, 0xb5, 0x49, 0xce, 0xfc, 0x12,
+	0x73, 0x68, 0x3b, 0xb4, 0xcf, 0x8f, 0x4d, 0x8c, 0x44, 0x34, 0x56, 0xdc, 0x17, 0x4d, 0xeb, 0x83,
+	0x8d, 0x27, 0x08, 0xfa, 0x79, 0x67, 0x31, 0xd6, 0xcf, 0x59, 0xbe, 0xc0, 0x90, 0x47, 0xcb, 0x6a,
+	0x0d, 0x76, 0x32, 0x67, 0xda, 0x8a, 0xe4, 0x63, 0x17, 0x1d, 0xd7, 0x0e, 0x43, 0x18, 0x19, 0x0b,
+	0xb1, 0x22, 0x60, 0x68, 0x3e, 0x61, 0x1f, 0x90, 0x95, 0xfd, 0xe6, 0x6f, 0xa9, 0x0b, 0xbf, 0xc2,
+	0x0a, 0x5d, 0x3b, 0xb0, 0x41, 0x18, 0x68, 0xee, 0x0f, 0xb1, 0x99, 0xe0, 0x59, 0x86, 0x67, 0xeb,
+	0xcd, 0xac, 0xbf, 0xdc, 0x46, 0x8d, 0xcd, 0x15, 0xf3, 0xe6, 0xdd, 0x1c, 0x05, 0xdc, 0xb6, 0xc1,
+	0x8e, 0xfe, 0x1a, 0x63, 0x3b, 0x1d, 0x4d, 0x9b, 0xcc, 0xbf, 0x44, 0xb2, 0xbb, 0xb1, 0x26, 0xdb,
+	0x62, 0x28, 0xfc, 0x06, 0x75, 0x91, 0xb2, 0x30, 0x2e, 0x5d, 0x59, 0x70, 0x78, 0x0a, 0xbf, 0xc5,
+	0xe3, 0x6a, 0xe2, 0x1c, 0xac, 0x35, 0x96, 0x3e, 0xc5, 0x37, 0xc4, 0x88, 0x4a, 0x5d, 0x98, 0x8d,
+	0x82, 0x7c, 0x86, 0xf9, 0xa8, 0x55, 0x5a, 0x6f, 0xfe, 0x73, 0xe4, 0x37, 0xe9, 0x33, 0xea, 0xd7,
+	0x94, 0x95, 0x02, 0x0f, 0x74, 0x8a, 0xcd, 0x40, 0xb2, 0xb4, 0x2e, 0xd1, 0x17, 0x48, 0x7a, 0xcc,
+	0x22, 0xc1, 0x82, 0xb7, 0x12, 0xc6, 0x5c, 0xb5, 0x0b, 0xff, 0x0e, 0x3d, 0xe1, 0xb5, 0x90, 0xa6,
+	0x1d, 0xd8, 0xe9, 0x57, 0xae, 0x89, 0xa9, 0x7d, 0x3d, 0x84, 0xb9, 0x94, 0xb7, 0x8b, 0x92, 0x40,
+	0xcd, 0x94, 0x5c, 0x4f, 0xba, 0x1c, 0x15, 0x37, 0xe3, 0xe8, 0xcb, 0x03, 0x8d, 0x6d, 0x02, 0xfb,
+	0x8a, 0x0d, 0xc8, 0x1d, 0x24, 0xb8, 0xac, 0xb8, 0x8f, 0x69, 0xa1, 0xed, 0x56, 0x02, 0xd7, 0x22,
+	0x08, 0x18, 0xcb, 0x0c, 0x70, 0x8b, 0x23, 0xb0, 0xa0, 0x33, 0xa0, 0xaf, 0x9a, 0x3b, 0x93, 0x52,
+	0xdd, 0x7d, 0x60, 0xff, 0xf5, 0xaf, 0xed, 0x24, 0xe8, 0xef, 0x31, 0x97, 0xa6, 0x22, 0xdd, 0x36,
+	0xa8, 0x59, 0x13, 0xf9, 0xa9, 0xf2, 0xf6, 0xb5, 0xf6, 0x87, 0xa6, 0xf3, 0x75, 0xed, 0xff, 0x04,
+	0x89, 0x35, 0xf2, 0x8f, 0xb8, 0xec, 0x5c, 0xcd, 0x7e, 0xfd, 0xb2, 0x7f, 0x62, 0x9f, 0x92, 0x8f,
+	0xbe, 0x01, 0x1b, 0xef, 0x28, 0x73, 0x5b, 0xe8, 0xcf, 0xfe, 0x33, 0xf6, 0xd8, 0x95, 0x85, 0x52,
+	0xd6, 0x65, 0xb0, 0x98, 0x5a, 0x0f, 0x70, 0xf5, 0x2f, 0x08, 0x1a, 0x73, 0x2d, 0xfd, 0x7c, 0xfb,
+	0x3c, 0x07, 0xfa, 0x2b, 0x82, 0xe6, 0xba, 0xb3, 0xcc, 0xe8, 0x31, 0xd8, 0xd8, 0xd7, 0xa7, 0x66,
+	0xf9, 0x6f, 0xec, 0x33, 0xf2, 0x71, 0x9b, 0xf0, 0x70, 0xef, 0xf1, 0x6e, 0xb8, 0x07, 0x8b, 0x27,
+	0xd1, 0xdc, 0x0b, 0xf7, 0x4d, 0xff, 0x3b, 0xbb, 0x46, 0x16, 0x7b, 0xf7, 0x2f, 0x8c, 0xfa, 0x07,
+	0xdd, 0x9d, 0x0f, 0xff, 0xdd, 0xa7, 0xff, 0x58, 0x60, 0x0f, 0xc9, 0xa0, 0xab, 0x94, 0x7b, 0x43,
+	0xd2, 0xa5, 0x38, 0x6a, 0x53, 0x48, 0x93, 0x25, 0xff, 0xb9, 0xc0, 0x6e, 0x62, 0x0f, 0xda, 0x13,
+	0x46, 0xe4, 0xcd, 0x82, 0xf3, 0x56, 0xb6, 0x2d, 0x26, 0x9e, 0xcc, 0xbf, 0x16, 0x86, 0xff, 0x5b,
+	0x20, 0x4b, 0x5f, 0x4c, 0x9f, 0x0d, 0xbe, 0xf9, 0x9b, 0xc3, 0xf0, 0x68, 0xfb, 0x81, 0xa1, 0xda,
+	0x99, 0xbe, 0x9c, 0x56, 0x0b, 0x8f, 0x45, 0x8b, 0xdf, 0x9e, 0x3e, 0xdd, 0x7c, 0xbe, 0x3d, 0x98,
+	0xee, 0x6c, 0x2f, 0x6f, 0x3f, 0x79, 0x1e, 0xbf, 0x5f, 0xa4, 0x4f, 0x1c, 0x2f, 0xbe, 0xdc, 0x7d,
+	0xdd, 0x17, 0x8f, 0x4f, 0x9a, 0x9f, 0x7f, 0x1f, 0x7a, 0x23, 0xe7, 0xfc, 0x3f, 0x87, 0x16, 0xf3,
+	0xe6, 0x65, 0x7c, 0x6b, 0x77, 0xd0, 0x3c, 0xe2, 0xd3, 0x78, 0x65, 0x10, 0x97, 0xdc, 0xfd, 0x3a,
+	0x01, 0x36, 0xf8, 0xd6, 0xee, 0x46, 0x07, 0xd8, 0x18, 0xaf, 0x6c, 0x34, 0x80, 0xcf, 0xdf, 0x8c,
+	0x0b, 0x3f, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x41, 0xd3, 0x0b, 0xf0, 0x69, 0x11, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_group_ad_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_group_ad_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7b0170dbd61f54fe971335a1ee0ab9eb9b3ec12e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_group_ad_error.pb.go
@@ -0,0 +1,149 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_group_ad_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad group ad errors.
+type AdGroupAdErrorEnum_AdGroupAdError int32
+
+const (
+	// Enum unspecified.
+	AdGroupAdErrorEnum_UNSPECIFIED AdGroupAdErrorEnum_AdGroupAdError = 0
+	// The received error code is not known in this version.
+	AdGroupAdErrorEnum_UNKNOWN AdGroupAdErrorEnum_AdGroupAdError = 1
+	// No link found between the adgroup ad and the label.
+	AdGroupAdErrorEnum_AD_GROUP_AD_LABEL_DOES_NOT_EXIST AdGroupAdErrorEnum_AdGroupAdError = 2
+	// The label has already been attached to the adgroup ad.
+	AdGroupAdErrorEnum_AD_GROUP_AD_LABEL_ALREADY_EXISTS AdGroupAdErrorEnum_AdGroupAdError = 3
+	// The specified ad was not found in the adgroup
+	AdGroupAdErrorEnum_AD_NOT_UNDER_ADGROUP AdGroupAdErrorEnum_AdGroupAdError = 4
+	// Removed ads may not be modified
+	AdGroupAdErrorEnum_CANNOT_OPERATE_ON_REMOVED_ADGROUPAD AdGroupAdErrorEnum_AdGroupAdError = 5
+	// An ad of this type is deprecated and cannot be created. Only deletions
+	// are permitted.
+	AdGroupAdErrorEnum_CANNOT_CREATE_DEPRECATED_ADS AdGroupAdErrorEnum_AdGroupAdError = 6
+	// Text ads are deprecated and cannot be created. Use expanded text ads
+	// instead.
+	AdGroupAdErrorEnum_CANNOT_CREATE_TEXT_ADS AdGroupAdErrorEnum_AdGroupAdError = 7
+	// A required field was not specified or is an empty string.
+	AdGroupAdErrorEnum_EMPTY_FIELD AdGroupAdErrorEnum_AdGroupAdError = 8
+	// An ad may only be modified once per call
+	AdGroupAdErrorEnum_RESOURCE_REFERENCED_IN_MULTIPLE_OPS AdGroupAdErrorEnum_AdGroupAdError = 9
+)
+
+var AdGroupAdErrorEnum_AdGroupAdError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_GROUP_AD_LABEL_DOES_NOT_EXIST",
+	3: "AD_GROUP_AD_LABEL_ALREADY_EXISTS",
+	4: "AD_NOT_UNDER_ADGROUP",
+	5: "CANNOT_OPERATE_ON_REMOVED_ADGROUPAD",
+	6: "CANNOT_CREATE_DEPRECATED_ADS",
+	7: "CANNOT_CREATE_TEXT_ADS",
+	8: "EMPTY_FIELD",
+	9: "RESOURCE_REFERENCED_IN_MULTIPLE_OPS",
+}
+var AdGroupAdErrorEnum_AdGroupAdError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"AD_GROUP_AD_LABEL_DOES_NOT_EXIST":    2,
+	"AD_GROUP_AD_LABEL_ALREADY_EXISTS":    3,
+	"AD_NOT_UNDER_ADGROUP":                4,
+	"CANNOT_OPERATE_ON_REMOVED_ADGROUPAD": 5,
+	"CANNOT_CREATE_DEPRECATED_ADS":        6,
+	"CANNOT_CREATE_TEXT_ADS":              7,
+	"EMPTY_FIELD":                         8,
+	"RESOURCE_REFERENCED_IN_MULTIPLE_OPS": 9,
+}
+
+func (x AdGroupAdErrorEnum_AdGroupAdError) String() string {
+	return proto.EnumName(AdGroupAdErrorEnum_AdGroupAdError_name, int32(x))
+}
+func (AdGroupAdErrorEnum_AdGroupAdError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_error_f8ac183f11835402, []int{0, 0}
+}
+
+// Container for enum describing possible ad group ad errors.
+type AdGroupAdErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAdErrorEnum) Reset()         { *m = AdGroupAdErrorEnum{} }
+func (m *AdGroupAdErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdErrorEnum) ProtoMessage()    {}
+func (*AdGroupAdErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_error_f8ac183f11835402, []int{0}
+}
+func (m *AdGroupAdErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupAdErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupAdErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdErrorEnum.Merge(dst, src)
+}
+func (m *AdGroupAdErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdErrorEnum.Size(m)
+}
+func (m *AdGroupAdErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupAdErrorEnum)(nil), "google.ads.googleads.v0.errors.AdGroupAdErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdGroupAdErrorEnum_AdGroupAdError", AdGroupAdErrorEnum_AdGroupAdError_name, AdGroupAdErrorEnum_AdGroupAdError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_group_ad_error.proto", fileDescriptor_ad_group_ad_error_f8ac183f11835402)
+}
+
+var fileDescriptor_ad_group_ad_error_f8ac183f11835402 = []byte{
+	// 408 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x51, 0x8b, 0xd4, 0x30,
+	0x10, 0xc7, 0xdd, 0x9e, 0xde, 0x69, 0x0e, 0x34, 0x44, 0x11, 0x11, 0x39, 0x8e, 0x55, 0xf0, 0x2d,
+	0x5d, 0x10, 0x7c, 0xf1, 0x69, 0xb6, 0x99, 0x5d, 0x8a, 0xdd, 0x24, 0xa4, 0xed, 0x7a, 0x27, 0x0b,
+	0x43, 0xb5, 0x4b, 0x11, 0xee, 0x36, 0x4b, 0xeb, 0xdd, 0x07, 0xf2, 0xd1, 0x77, 0x3f, 0x84, 0xe2,
+	0x87, 0x92, 0xb4, 0xb7, 0x07, 0x0b, 0xea, 0x53, 0xfe, 0xcc, 0xfc, 0xfe, 0x19, 0x32, 0xff, 0xb0,
+	0xb7, 0x8d, 0xf7, 0xcd, 0xc5, 0x3a, 0xae, 0xea, 0x2e, 0x1e, 0x64, 0x50, 0xd7, 0x93, 0x78, 0xdd,
+	0xb6, 0xbe, 0xed, 0xe2, 0xaa, 0xa6, 0xa6, 0xf5, 0x57, 0x5b, 0xaa, 0x6a, 0xea, 0x4b, 0x72, 0xdb,
+	0xfa, 0xaf, 0x5e, 0x9c, 0x0c, 0xb0, 0xac, 0xea, 0x4e, 0xde, 0xfa, 0xe4, 0xf5, 0x44, 0x0e, 0xbe,
+	0xf1, 0xef, 0x88, 0x09, 0xa8, 0xe7, 0xc1, 0x0a, 0x35, 0x86, 0x1a, 0x6e, 0xae, 0x2e, 0xc7, 0x3f,
+	0x22, 0xf6, 0x70, 0xbf, 0x2c, 0x1e, 0xb1, 0xe3, 0x52, 0xe7, 0x16, 0x93, 0x74, 0x96, 0xa2, 0xe2,
+	0x77, 0xc4, 0x31, 0x3b, 0x2a, 0xf5, 0x7b, 0x6d, 0x3e, 0x68, 0x3e, 0x12, 0xaf, 0xd8, 0x29, 0x28,
+	0x9a, 0x3b, 0x53, 0x5a, 0x02, 0x45, 0x19, 0x4c, 0x31, 0x23, 0x65, 0x30, 0x27, 0x6d, 0x0a, 0xc2,
+	0xb3, 0x34, 0x2f, 0x78, 0xf4, 0x77, 0x0a, 0x32, 0x87, 0xa0, 0xce, 0x07, 0x28, 0xe7, 0x07, 0xe2,
+	0x19, 0x7b, 0x02, 0xaa, 0xf7, 0x95, 0x5a, 0xa1, 0x23, 0x50, 0xbd, 0x83, 0xdf, 0x15, 0xaf, 0xd9,
+	0xcb, 0x04, 0x74, 0xe8, 0x18, 0x8b, 0x0e, 0x0a, 0x24, 0xa3, 0xc9, 0xe1, 0xc2, 0x2c, 0x51, 0xed,
+	0x30, 0x50, 0xfc, 0x9e, 0x38, 0x65, 0x2f, 0x6e, 0xc0, 0xc4, 0x61, 0xe0, 0x14, 0x5a, 0x87, 0x09,
+	0x14, 0x3d, 0x97, 0xf3, 0x43, 0xf1, 0x9c, 0x3d, 0xdd, 0x27, 0x0a, 0x3c, 0x2b, 0xfa, 0xde, 0x51,
+	0x78, 0x2a, 0x2e, 0x6c, 0x71, 0x4e, 0xb3, 0x14, 0x33, 0xc5, 0xef, 0x87, 0xb9, 0x0e, 0x73, 0x53,
+	0xba, 0x04, 0xc9, 0xe1, 0x0c, 0x1d, 0xea, 0x04, 0x15, 0xa5, 0x9a, 0x16, 0x65, 0x56, 0xa4, 0x36,
+	0x43, 0x32, 0x36, 0xe7, 0x0f, 0xa6, 0x3f, 0x47, 0x6c, 0xfc, 0xd9, 0x5f, 0xca, 0xff, 0x6f, 0x7d,
+	0xfa, 0x78, 0x7f, 0xb7, 0x36, 0x44, 0x65, 0x47, 0x1f, 0xd5, 0x8d, 0xad, 0xf1, 0x17, 0xd5, 0xa6,
+	0x91, 0xbe, 0x6d, 0xe2, 0x66, 0xbd, 0xe9, 0x83, 0xdc, 0x85, 0xbe, 0xfd, 0xd2, 0xfd, 0xeb, 0x0f,
+	0xbc, 0x1b, 0x8e, 0x6f, 0xd1, 0xc1, 0x1c, 0xe0, 0x7b, 0x74, 0x32, 0x1f, 0x2e, 0x83, 0xba, 0x93,
+	0x83, 0x0c, 0x6a, 0x39, 0x91, 0xfd, 0xc8, 0xee, 0xd7, 0x0e, 0x58, 0x41, 0xdd, 0xad, 0x6e, 0x81,
+	0xd5, 0x72, 0xb2, 0x1a, 0x80, 0x4f, 0x87, 0xfd, 0xe0, 0x37, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff,
+	0x6d, 0x4c, 0x9a, 0x33, 0x7b, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_group_bid_modifier_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_group_bid_modifier_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f5d809dc495a62b9b746eec2d1f6acaf80a12d5c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_group_bid_modifier_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_group_bid_modifier_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad group bid modifier errors.
+type AdGroupBidModifierErrorEnum_AdGroupBidModifierError int32
+
+const (
+	// Enum unspecified.
+	AdGroupBidModifierErrorEnum_UNSPECIFIED AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 0
+	// The received error code is not known in this version.
+	AdGroupBidModifierErrorEnum_UNKNOWN AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 1
+	// The criterion ID does not support bid modification.
+	AdGroupBidModifierErrorEnum_CRITERION_ID_NOT_SUPPORTED AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 2
+	// Cannot override the bid modifier for the given criterion ID if the parent
+	// campaign is opted out of the same criterion.
+	AdGroupBidModifierErrorEnum_CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER AdGroupBidModifierErrorEnum_AdGroupBidModifierError = 3
+)
+
+var AdGroupBidModifierErrorEnum_AdGroupBidModifierError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CRITERION_ID_NOT_SUPPORTED",
+	3: "CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER",
+}
+var AdGroupBidModifierErrorEnum_AdGroupBidModifierError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"CRITERION_ID_NOT_SUPPORTED": 2,
+	"CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER": 3,
+}
+
+func (x AdGroupBidModifierErrorEnum_AdGroupBidModifierError) String() string {
+	return proto.EnumName(AdGroupBidModifierErrorEnum_AdGroupBidModifierError_name, int32(x))
+}
+func (AdGroupBidModifierErrorEnum_AdGroupBidModifierError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_error_3bb7ac3c0a520d5f, []int{0, 0}
+}
+
+// Container for enum describing possible ad group bid modifier errors.
+type AdGroupBidModifierErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupBidModifierErrorEnum) Reset()         { *m = AdGroupBidModifierErrorEnum{} }
+func (m *AdGroupBidModifierErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupBidModifierErrorEnum) ProtoMessage()    {}
+func (*AdGroupBidModifierErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_error_3bb7ac3c0a520d5f, []int{0}
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupBidModifierErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupBidModifierErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupBidModifierErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupBidModifierErrorEnum.Merge(dst, src)
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupBidModifierErrorEnum.Size(m)
+}
+func (m *AdGroupBidModifierErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupBidModifierErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupBidModifierErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupBidModifierErrorEnum)(nil), "google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum_AdGroupBidModifierError", AdGroupBidModifierErrorEnum_AdGroupBidModifierError_name, AdGroupBidModifierErrorEnum_AdGroupBidModifierError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_group_bid_modifier_error.proto", fileDescriptor_ad_group_bid_modifier_error_3bb7ac3c0a520d5f)
+}
+
+var fileDescriptor_ad_group_bid_modifier_error_3bb7ac3c0a520d5f = []byte{
+	// 333 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x6a, 0xe3, 0x30,
+	0x18, 0x85, 0xc7, 0x09, 0xcc, 0x80, 0xb2, 0x18, 0xe3, 0xcd, 0xc0, 0xb4, 0x64, 0x91, 0x03, 0xc8,
+	0x86, 0xae, 0x4a, 0x29, 0x54, 0xb6, 0x54, 0x23, 0x4a, 0x24, 0xe3, 0xd8, 0x29, 0x14, 0x83, 0x70,
+	0x2a, 0xd7, 0x18, 0x92, 0x28, 0x48, 0x4d, 0x8e, 0xd2, 0x03, 0x74, 0xd9, 0x03, 0xf4, 0x10, 0x5d,
+	0xf6, 0x44, 0x45, 0x56, 0x92, 0xae, 0xd2, 0x95, 0x1f, 0xfe, 0xdf, 0xff, 0x3d, 0xe9, 0x09, 0xdc,
+	0xb4, 0x4a, 0xb5, 0xcb, 0x26, 0xac, 0xa5, 0x09, 0x9d, 0xb4, 0x6a, 0x17, 0x85, 0x8d, 0xd6, 0x4a,
+	0x9b, 0xb0, 0x96, 0xa2, 0xd5, 0x6a, 0xbb, 0x11, 0x8b, 0x4e, 0x8a, 0x95, 0x92, 0xdd, 0x53, 0xd7,
+	0x68, 0xd1, 0x0f, 0xe1, 0x46, 0xab, 0x67, 0x15, 0x8c, 0xdd, 0x1a, 0xac, 0xa5, 0x81, 0x47, 0x02,
+	0xdc, 0x45, 0xd0, 0x11, 0x26, 0xef, 0x1e, 0x38, 0x43, 0x32, 0xb5, 0x90, 0xb8, 0x93, 0xd3, 0x3d,
+	0x82, 0xd8, 0x21, 0x59, 0x6f, 0x57, 0x93, 0x17, 0x0f, 0xfc, 0x3b, 0x31, 0x0f, 0xfe, 0x82, 0x51,
+	0xc9, 0x66, 0x19, 0x49, 0xe8, 0x2d, 0x25, 0xd8, 0xff, 0x15, 0x8c, 0xc0, 0x9f, 0x92, 0xdd, 0x31,
+	0x7e, 0xcf, 0x7c, 0x2f, 0x18, 0x83, 0xff, 0x49, 0x4e, 0x0b, 0x92, 0x53, 0xce, 0x04, 0xc5, 0x82,
+	0xf1, 0x42, 0xcc, 0xca, 0x2c, 0xe3, 0x79, 0x41, 0xb0, 0x3f, 0x08, 0xae, 0xc1, 0x65, 0x82, 0x98,
+	0xfd, 0xcb, 0xe7, 0x24, 0xcf, 0x29, 0x26, 0x82, 0x67, 0x05, 0xc1, 0x82, 0x97, 0x85, 0x48, 0xd0,
+	0x34, 0x43, 0x34, 0x65, 0xe2, 0x1b, 0x11, 0x53, 0x2c, 0xa6, 0x1c, 0xdb, 0xac, 0xdc, 0x1f, 0xc6,
+	0x9f, 0x1e, 0x98, 0x3c, 0xaa, 0x15, 0xfc, 0xf9, 0x7e, 0xf1, 0xf9, 0x89, 0xc3, 0x67, 0xb6, 0x9d,
+	0xcc, 0x7b, 0xc0, 0xfb, 0xfd, 0x56, 0x2d, 0xeb, 0x75, 0x0b, 0x95, 0x6e, 0xc3, 0xb6, 0x59, 0xf7,
+	0xdd, 0x1d, 0x1a, 0xdf, 0x74, 0xe6, 0xd4, 0x03, 0x5c, 0xb9, 0xcf, 0xeb, 0x60, 0x98, 0x22, 0xf4,
+	0x36, 0x18, 0xa7, 0x0e, 0x86, 0xa4, 0x81, 0x4e, 0x5a, 0x35, 0x8f, 0x60, 0x1f, 0x69, 0x3e, 0x0e,
+	0x86, 0x0a, 0x49, 0x53, 0x1d, 0x0d, 0xd5, 0x3c, 0xaa, 0x9c, 0x61, 0xf1, 0xbb, 0x0f, 0xbe, 0xf8,
+	0x0a, 0x00, 0x00, 0xff, 0xff, 0xb1, 0x0a, 0x9b, 0xd3, 0xf8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_group_criterion_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_group_criterion_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0fe537fde489568554cf8a30e35bba12b4c9de99
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_group_criterion_error.pb.go
@@ -0,0 +1,306 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_group_criterion_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad group criterion errors.
+type AdGroupCriterionErrorEnum_AdGroupCriterionError int32
+
+const (
+	// Enum unspecified.
+	AdGroupCriterionErrorEnum_UNSPECIFIED AdGroupCriterionErrorEnum_AdGroupCriterionError = 0
+	// The received error code is not known in this version.
+	AdGroupCriterionErrorEnum_UNKNOWN AdGroupCriterionErrorEnum_AdGroupCriterionError = 1
+	// No link found between the AdGroupCriterion and the label.
+	AdGroupCriterionErrorEnum_AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 2
+	// The label has already been attached to the AdGroupCriterion.
+	AdGroupCriterionErrorEnum_AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 3
+	// Negative AdGroupCriterion cannot have labels.
+	AdGroupCriterionErrorEnum_CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION AdGroupCriterionErrorEnum_AdGroupCriterionError = 4
+	// Too many operations for a single call.
+	AdGroupCriterionErrorEnum_TOO_MANY_OPERATIONS AdGroupCriterionErrorEnum_AdGroupCriterionError = 5
+	// Negative ad group criteria are not updateable.
+	AdGroupCriterionErrorEnum_CANT_UPDATE_NEGATIVE AdGroupCriterionErrorEnum_AdGroupCriterionError = 6
+	// Concrete type of criterion (keyword v.s. placement) is required for ADD
+	// and SET operations.
+	AdGroupCriterionErrorEnum_CONCRETE_TYPE_REQUIRED AdGroupCriterionErrorEnum_AdGroupCriterionError = 7
+	// Bid is incompatible with ad group's bidding settings.
+	AdGroupCriterionErrorEnum_BID_INCOMPATIBLE_WITH_ADGROUP AdGroupCriterionErrorEnum_AdGroupCriterionError = 8
+	// Cannot target and exclude the same criterion at once.
+	AdGroupCriterionErrorEnum_CANNOT_TARGET_AND_EXCLUDE AdGroupCriterionErrorEnum_AdGroupCriterionError = 9
+	// The URL of a placement is invalid.
+	AdGroupCriterionErrorEnum_ILLEGAL_URL AdGroupCriterionErrorEnum_AdGroupCriterionError = 10
+	// Keyword text was invalid.
+	AdGroupCriterionErrorEnum_INVALID_KEYWORD_TEXT AdGroupCriterionErrorEnum_AdGroupCriterionError = 11
+	// Destination URL was invalid.
+	AdGroupCriterionErrorEnum_INVALID_DESTINATION_URL AdGroupCriterionErrorEnum_AdGroupCriterionError = 12
+	// The destination url must contain at least one tag (e.g. {lpurl})
+	AdGroupCriterionErrorEnum_MISSING_DESTINATION_URL_TAG AdGroupCriterionErrorEnum_AdGroupCriterionError = 13
+	// Keyword-level cpm bid is not supported
+	AdGroupCriterionErrorEnum_KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM AdGroupCriterionErrorEnum_AdGroupCriterionError = 14
+	// For example, cannot add a biddable ad group criterion that had been
+	// removed.
+	AdGroupCriterionErrorEnum_INVALID_USER_STATUS AdGroupCriterionErrorEnum_AdGroupCriterionError = 15
+	// Criteria type cannot be targeted for the ad group. Either the account is
+	// restricted to keywords only, the criteria type is incompatible with the
+	// campaign's bidding strategy, or the criteria type can only be applied to
+	// campaigns.
+	AdGroupCriterionErrorEnum_CANNOT_ADD_CRITERIA_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 16
+	// Criteria type cannot be excluded for the ad group. Refer to the
+	// documentation for a specific criterion to check if it is excludable.
+	AdGroupCriterionErrorEnum_CANNOT_EXCLUDE_CRITERIA_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 17
+	// Partial failure is not supported for shopping campaign mutate operations.
+	AdGroupCriterionErrorEnum_CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE AdGroupCriterionErrorEnum_AdGroupCriterionError = 27
+	// Operations in the mutate request changes too many shopping ad groups.
+	// Please split requests for multiple shopping ad groups across multiple
+	// requests.
+	AdGroupCriterionErrorEnum_OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS AdGroupCriterionErrorEnum_AdGroupCriterionError = 28
+	// Not allowed to modify url fields of an ad group criterion if there are
+	// duplicate elements for that ad group criterion in the request.
+	AdGroupCriterionErrorEnum_CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 29
+	// Cannot set url fields without also setting final urls.
+	AdGroupCriterionErrorEnum_CANNOT_SET_WITHOUT_FINAL_URLS AdGroupCriterionErrorEnum_AdGroupCriterionError = 30
+	// Cannot clear final urls if final mobile urls exist.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 31
+	// Cannot clear final urls if final app urls exist.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 32
+	// Cannot clear final urls if tracking url template exists.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 33
+	// Cannot clear final urls if url custom parameters exist.
+	AdGroupCriterionErrorEnum_CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 34
+	// Cannot set both destination url and final urls.
+	AdGroupCriterionErrorEnum_CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS AdGroupCriterionErrorEnum_AdGroupCriterionError = 35
+	// Cannot set both destination url and tracking url template.
+	AdGroupCriterionErrorEnum_CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE AdGroupCriterionErrorEnum_AdGroupCriterionError = 36
+	// Final urls are not supported for this criterion type.
+	AdGroupCriterionErrorEnum_FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 37
+	// Final mobile urls are not supported for this criterion type.
+	AdGroupCriterionErrorEnum_FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 38
+	// Ad group is invalid due to the listing groups it contains.
+	AdGroupCriterionErrorEnum_INVALID_LISTING_GROUP_HIERARCHY AdGroupCriterionErrorEnum_AdGroupCriterionError = 39
+	// Listing group unit cannot have children.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN AdGroupCriterionErrorEnum_AdGroupCriterionError = 40
+	// Subdivided listing groups must have an "others" case.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE AdGroupCriterionErrorEnum_AdGroupCriterionError = 41
+	// Dimension type of listing group must be the same as that of its siblings.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS AdGroupCriterionErrorEnum_AdGroupCriterionError = 42
+	// Listing group cannot be added to the ad group because it already exists.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_ALREADY_EXISTS AdGroupCriterionErrorEnum_AdGroupCriterionError = 43
+	// Listing group referenced in the operation was not found in the ad group.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_DOES_NOT_EXIST AdGroupCriterionErrorEnum_AdGroupCriterionError = 44
+	// Recursive removal failed because listing group subdivision is being
+	// created or modified in this request.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_CANNOT_BE_REMOVED AdGroupCriterionErrorEnum_AdGroupCriterionError = 45
+	// Listing group type is not allowed for specified ad group criterion type.
+	AdGroupCriterionErrorEnum_INVALID_LISTING_GROUP_TYPE AdGroupCriterionErrorEnum_AdGroupCriterionError = 46
+	// Listing group in an ADD operation specifies a non temporary criterion id.
+	AdGroupCriterionErrorEnum_LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID AdGroupCriterionErrorEnum_AdGroupCriterionError = 47
+)
+
+var AdGroupCriterionErrorEnum_AdGroupCriterionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST",
+	3:  "AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS",
+	4:  "CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION",
+	5:  "TOO_MANY_OPERATIONS",
+	6:  "CANT_UPDATE_NEGATIVE",
+	7:  "CONCRETE_TYPE_REQUIRED",
+	8:  "BID_INCOMPATIBLE_WITH_ADGROUP",
+	9:  "CANNOT_TARGET_AND_EXCLUDE",
+	10: "ILLEGAL_URL",
+	11: "INVALID_KEYWORD_TEXT",
+	12: "INVALID_DESTINATION_URL",
+	13: "MISSING_DESTINATION_URL_TAG",
+	14: "KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM",
+	15: "INVALID_USER_STATUS",
+	16: "CANNOT_ADD_CRITERIA_TYPE",
+	17: "CANNOT_EXCLUDE_CRITERIA_TYPE",
+	27: "CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE",
+	28: "OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS",
+	29: "CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS",
+	30: "CANNOT_SET_WITHOUT_FINAL_URLS",
+	31: "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST",
+	32: "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST",
+	33: "CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS",
+	34: "CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST",
+	35: "CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS",
+	36: "CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE",
+	37: "FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE",
+	38: "FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE",
+	39: "INVALID_LISTING_GROUP_HIERARCHY",
+	40: "LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN",
+	41: "LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE",
+	42: "LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS",
+	43: "LISTING_GROUP_ALREADY_EXISTS",
+	44: "LISTING_GROUP_DOES_NOT_EXIST",
+	45: "LISTING_GROUP_CANNOT_BE_REMOVED",
+	46: "INVALID_LISTING_GROUP_TYPE",
+	47: "LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID",
+}
+var AdGroupCriterionErrorEnum_AdGroupCriterionError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST":                   2,
+	"AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS":                   3,
+	"CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION":                    4,
+	"TOO_MANY_OPERATIONS":                                       5,
+	"CANT_UPDATE_NEGATIVE":                                      6,
+	"CONCRETE_TYPE_REQUIRED":                                    7,
+	"BID_INCOMPATIBLE_WITH_ADGROUP":                             8,
+	"CANNOT_TARGET_AND_EXCLUDE":                                 9,
+	"ILLEGAL_URL":                                               10,
+	"INVALID_KEYWORD_TEXT":                                      11,
+	"INVALID_DESTINATION_URL":                                   12,
+	"MISSING_DESTINATION_URL_TAG":                               13,
+	"KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM":             14,
+	"INVALID_USER_STATUS":                                       15,
+	"CANNOT_ADD_CRITERIA_TYPE":                                  16,
+	"CANNOT_EXCLUDE_CRITERIA_TYPE":                              17,
+	"CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE":         27,
+	"OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS":                 28,
+	"CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS":          29,
+	"CANNOT_SET_WITHOUT_FINAL_URLS":                             30,
+	"CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST":        31,
+	"CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST":           32,
+	"CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS":   33,
+	"CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST":    34,
+	"CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS":            35,
+	"CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE": 36,
+	"FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE":               37,
+	"FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE":        38,
+	"INVALID_LISTING_GROUP_HIERARCHY":                           39,
+	"LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN":                   40,
+	"LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE":            41,
+	"LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS":    42,
+	"LISTING_GROUP_ALREADY_EXISTS":                              43,
+	"LISTING_GROUP_DOES_NOT_EXIST":                              44,
+	"LISTING_GROUP_CANNOT_BE_REMOVED":                           45,
+	"INVALID_LISTING_GROUP_TYPE":                                46,
+	"LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID":                    47,
+}
+
+func (x AdGroupCriterionErrorEnum_AdGroupCriterionError) String() string {
+	return proto.EnumName(AdGroupCriterionErrorEnum_AdGroupCriterionError_name, int32(x))
+}
+func (AdGroupCriterionErrorEnum_AdGroupCriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_error_64389e9bd7c7c16e, []int{0, 0}
+}
+
+// Container for enum describing possible ad group criterion errors.
+type AdGroupCriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupCriterionErrorEnum) Reset()         { *m = AdGroupCriterionErrorEnum{} }
+func (m *AdGroupCriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionErrorEnum) ProtoMessage()    {}
+func (*AdGroupCriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_error_64389e9bd7c7c16e, []int{0}
+}
+func (m *AdGroupCriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupCriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionErrorEnum.Merge(dst, src)
+}
+func (m *AdGroupCriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionErrorEnum.Size(m)
+}
+func (m *AdGroupCriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupCriterionErrorEnum)(nil), "google.ads.googleads.v0.errors.AdGroupCriterionErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdGroupCriterionErrorEnum_AdGroupCriterionError", AdGroupCriterionErrorEnum_AdGroupCriterionError_name, AdGroupCriterionErrorEnum_AdGroupCriterionError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_group_criterion_error.proto", fileDescriptor_ad_group_criterion_error_64389e9bd7c7c16e)
+}
+
+var fileDescriptor_ad_group_criterion_error_64389e9bd7c7c16e = []byte{
+	// 936 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x72, 0x1b, 0x35,
+	0x14, 0x26, 0x29, 0xb4, 0xa0, 0x04, 0x2a, 0xc4, 0x4f, 0xdb, 0xfc, 0xb6, 0x29, 0xb4, 0xb4, 0x21,
+	0xeb, 0xb4, 0x85, 0x32, 0xd0, 0xe9, 0xc5, 0xd9, 0xd5, 0xf1, 0x5a, 0x13, 0xad, 0xb4, 0x48, 0x5a,
+	0x27, 0x66, 0x32, 0xa3, 0x09, 0x75, 0xc6, 0x93, 0x99, 0x36, 0x9b, 0xb1, 0xdb, 0x3e, 0x10, 0x97,
+	0xbc, 0x01, 0xaf, 0xc0, 0x15, 0x77, 0xbc, 0x0e, 0xa3, 0xdd, 0x75, 0x62, 0x3b, 0x21, 0xed, 0x55,
+	0x14, 0x9f, 0xef, 0x93, 0xbe, 0xf3, 0x9d, 0xb3, 0xe7, 0x90, 0xe7, 0x83, 0xb2, 0x1c, 0xbc, 0x3c,
+	0x6c, 0x1d, 0xf4, 0x47, 0xad, 0xfa, 0x18, 0x4e, 0x6f, 0xb7, 0x5b, 0x87, 0xc3, 0x61, 0x39, 0x1c,
+	0xb5, 0x0e, 0xfa, 0x7e, 0x30, 0x2c, 0xdf, 0x9c, 0xf8, 0x17, 0xc3, 0xa3, 0xd7, 0x87, 0xc3, 0xa3,
+	0xf2, 0xd8, 0x57, 0x91, 0xe8, 0x64, 0x58, 0xbe, 0x2e, 0xd9, 0x5a, 0xcd, 0x89, 0x0e, 0xfa, 0xa3,
+	0xe8, 0x94, 0x1e, 0xbd, 0xdd, 0x8e, 0x6a, 0xfa, 0xc6, 0xbf, 0x8b, 0xe4, 0x16, 0xf4, 0xd3, 0x70,
+	0x43, 0x32, 0xbe, 0x00, 0x43, 0x08, 0x8f, 0xdf, 0xbc, 0xda, 0xf8, 0x6b, 0x91, 0x7c, 0x75, 0x61,
+	0x94, 0x5d, 0x27, 0x0b, 0x85, 0xb2, 0x39, 0x26, 0xa2, 0x2d, 0x90, 0xd3, 0x0f, 0xd8, 0x02, 0xb9,
+	0x56, 0xa8, 0x1d, 0xa5, 0x77, 0x15, 0x9d, 0x63, 0x9b, 0xe4, 0x3e, 0x70, 0x9f, 0x1a, 0x5d, 0xe4,
+	0x3e, 0x31, 0xc2, 0xa1, 0x11, 0x5a, 0x79, 0x09, 0x31, 0x4a, 0xcf, 0x35, 0x5a, 0xaf, 0xb4, 0xf3,
+	0xb8, 0x27, 0xac, 0xa3, 0xf3, 0x97, 0x82, 0x41, 0x1a, 0x04, 0xde, 0xab, 0xb1, 0x96, 0x5e, 0x61,
+	0x0f, 0xc9, 0xbd, 0x04, 0x54, 0xa0, 0x03, 0xe7, 0x0d, 0xc8, 0x69, 0xaf, 0x30, 0x05, 0x27, 0xba,
+	0x78, 0x76, 0x01, 0xfd, 0x90, 0xdd, 0x20, 0x5f, 0x38, 0xad, 0x7d, 0x06, 0xaa, 0xe7, 0x75, 0x8e,
+	0x06, 0x9c, 0xd0, 0xca, 0xd2, 0x8f, 0xd8, 0x4d, 0xf2, 0x65, 0x02, 0xca, 0xf9, 0x22, 0xe7, 0xe0,
+	0xf0, 0x94, 0x4c, 0xaf, 0xb2, 0x25, 0xf2, 0x75, 0xa2, 0x55, 0x62, 0xd0, 0xa1, 0x77, 0xbd, 0x1c,
+	0xbd, 0xc1, 0x5f, 0x0b, 0x61, 0x90, 0xd3, 0x6b, 0xec, 0x0e, 0x59, 0x8d, 0x05, 0xf7, 0x42, 0x25,
+	0x3a, 0xcb, 0xc1, 0x89, 0x58, 0xa2, 0xdf, 0x15, 0xae, 0xe3, 0x81, 0x57, 0xe2, 0xe9, 0xc7, 0x6c,
+	0x95, 0xdc, 0x6a, 0xd4, 0x39, 0x30, 0x29, 0x3a, 0x0f, 0x8a, 0x7b, 0xdc, 0x4b, 0x64, 0xc1, 0x91,
+	0x7e, 0x12, 0x4c, 0x13, 0x52, 0x62, 0x0a, 0xd2, 0x17, 0x46, 0x52, 0x12, 0x84, 0x08, 0xd5, 0x05,
+	0x29, 0xb8, 0xdf, 0xc1, 0xde, 0xae, 0x36, 0xdc, 0x3b, 0xdc, 0x73, 0x74, 0x81, 0x2d, 0x93, 0x1b,
+	0xe3, 0x08, 0x47, 0xeb, 0x84, 0xaa, 0xc4, 0x57, 0xb4, 0x45, 0xb6, 0x4e, 0x96, 0x33, 0x61, 0xad,
+	0x50, 0xe9, 0x6c, 0xd0, 0x3b, 0x48, 0xe9, 0xa7, 0xec, 0x11, 0xd9, 0x1a, 0xdf, 0x27, 0xb1, 0x8b,
+	0xd2, 0x07, 0xe1, 0x41, 0x96, 0x2d, 0xf2, 0x5c, 0x1b, 0x87, 0xdc, 0xb7, 0xb5, 0x09, 0xce, 0x14,
+	0x20, 0x93, 0x3c, 0xa3, 0x9f, 0x05, 0xb3, 0xc6, 0x0f, 0x16, 0x16, 0x8d, 0xb7, 0x0e, 0x5c, 0x61,
+	0xe9, 0x75, 0xb6, 0x42, 0x6e, 0x4e, 0x38, 0xde, 0xf8, 0x0b, 0x95, 0x3b, 0x94, 0xb2, 0xdb, 0x64,
+	0xa5, 0x89, 0x36, 0x69, 0xce, 0x20, 0x3e, 0x67, 0x3f, 0x92, 0x47, 0x09, 0x64, 0x39, 0x88, 0x54,
+	0xd5, 0x96, 0x06, 0xf0, 0xac, 0x85, 0x39, 0x18, 0x27, 0x40, 0xfa, 0x36, 0x08, 0x59, 0x18, 0xa4,
+	0xcb, 0x6c, 0x8b, 0x3c, 0x38, 0xab, 0x59, 0xa5, 0xf6, 0xb4, 0x96, 0xb6, 0xa3, 0xf3, 0x3c, 0x24,
+	0xdf, 0x18, 0x6f, 0xe9, 0x0a, 0xfb, 0x81, 0x6c, 0x37, 0x3a, 0x32, 0xcd, 0x45, 0xbb, 0x57, 0x99,
+	0xd1, 0x16, 0x28, 0xb9, 0xad, 0x5f, 0xe0, 0x45, 0x2e, 0x45, 0x12, 0xca, 0x8d, 0x12, 0x33, 0x54,
+	0xce, 0xd2, 0xd5, 0x50, 0xd2, 0x86, 0x65, 0xd1, 0x55, 0x38, 0x5d, 0x38, 0xdf, 0x16, 0xaa, 0xae,
+	0x90, 0xa5, 0x6b, 0xec, 0x29, 0x79, 0xdc, 0x40, 0x12, 0x89, 0x60, 0x26, 0x82, 0x5e, 0xb4, 0x9b,
+	0xff, 0x32, 0x1d, 0x0b, 0x89, 0xf5, 0x8f, 0x75, 0x57, 0xaf, 0xb3, 0x27, 0xa4, 0xf5, 0x4e, 0x1e,
+	0xe4, 0xf9, 0x24, 0xe9, 0x36, 0x7b, 0x46, 0x7e, 0xba, 0x84, 0xe4, 0x0c, 0x24, 0x3b, 0x21, 0xef,
+	0xaa, 0xd0, 0x98, 0xe5, 0xb2, 0x4a, 0xa7, 0xfe, 0x34, 0xee, 0xb0, 0x5f, 0xc8, 0xd3, 0x4b, 0xc8,
+	0x81, 0x93, 0x14, 0xd6, 0xe9, 0x2c, 0x98, 0x0d, 0x19, 0x3a, 0x34, 0xe3, 0x87, 0x37, 0xd8, 0x63,
+	0x12, 0x4d, 0x18, 0x11, 0xeb, 0x60, 0xd8, 0x4c, 0x67, 0x85, 0x56, 0x9e, 0x70, 0xe6, 0x2e, 0x7b,
+	0x4e, 0x7e, 0x7e, 0x1f, 0xce, 0x85, 0xaa, 0xe9, 0x37, 0xac, 0x45, 0x36, 0x27, 0x14, 0x9e, 0x6f,
+	0xce, 0xb3, 0x51, 0x50, 0x35, 0xd2, 0xb7, 0xa1, 0x12, 0xe7, 0xed, 0x7e, 0x27, 0xef, 0x1e, 0xbb,
+	0x4b, 0xd6, 0xc7, 0x9d, 0x2d, 0x45, 0xd0, 0x97, 0x36, 0xc3, 0xa6, 0x23, 0xd0, 0x80, 0x49, 0x3a,
+	0x3d, 0x7a, 0x3f, 0x0c, 0xa1, 0xe9, 0x60, 0xa1, 0x84, 0xf3, 0x4d, 0x7e, 0x1d, 0x08, 0x93, 0xa5,
+	0x23, 0x24, 0x37, 0xa8, 0xe8, 0x77, 0xc1, 0xad, 0x69, 0xb0, 0x2d, 0x62, 0x2e, 0xba, 0xc2, 0x86,
+	0x57, 0x9b, 0x89, 0x61, 0xbd, 0x76, 0x9d, 0x60, 0x71, 0x02, 0x16, 0xe9, 0x83, 0x50, 0x9d, 0x69,
+	0xce, 0x29, 0xce, 0x42, 0x86, 0x9e, 0x8b, 0x0c, 0x95, 0x1d, 0xab, 0xf6, 0x60, 0xbd, 0x15, 0xb1,
+	0x14, 0x2a, 0xb5, 0xf4, 0x61, 0xf8, 0xc8, 0xa6, 0xb9, 0x33, 0x63, 0x71, 0xf3, 0x3c, 0x62, 0x66,
+	0xca, 0x7e, 0x1f, 0x5c, 0x98, 0x46, 0x34, 0xb9, 0xc5, 0x61, 0xc6, 0x65, 0xba, 0x8b, 0x9c, 0x6e,
+	0xb1, 0x35, 0xb2, 0x74, 0xb1, 0x55, 0x95, 0x95, 0x51, 0x98, 0xbe, 0x33, 0x42, 0x38, 0xf7, 0x19,
+	0xf4, 0xbc, 0x56, 0xb2, 0x17, 0xe6, 0x46, 0x55, 0x60, 0x2f, 0x38, 0x6d, 0xc5, 0xff, 0xcc, 0x91,
+	0x8d, 0x17, 0xe5, 0xab, 0xe8, 0xf2, 0x05, 0x14, 0x2f, 0x5d, 0xb8, 0x5f, 0xf2, 0xb0, 0xbc, 0xf2,
+	0xb9, 0xdf, 0x78, 0xc3, 0x1e, 0x94, 0x2f, 0x0f, 0x8e, 0x07, 0x51, 0x39, 0x1c, 0xb4, 0x06, 0x87,
+	0xc7, 0xd5, 0x6a, 0x1b, 0x6f, 0xc3, 0x93, 0xa3, 0xd1, 0xff, 0x2d, 0xc7, 0x67, 0xf5, 0x9f, 0x3f,
+	0xe6, 0xaf, 0xa4, 0x00, 0x7f, 0xce, 0xaf, 0xa5, 0xf5, 0x65, 0xd0, 0x1f, 0x45, 0xf5, 0x31, 0x9c,
+	0xba, 0xdb, 0x51, 0xf5, 0xe4, 0xe8, 0xef, 0x31, 0x60, 0x1f, 0xfa, 0xa3, 0xfd, 0x53, 0xc0, 0x7e,
+	0x77, 0x7b, 0xbf, 0x06, 0xfc, 0x7e, 0xb5, 0x7a, 0xf8, 0xc9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x3f, 0x5b, 0xb6, 0x2f, 0x94, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_group_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_group_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4385f7ec81edc97a623d6a64bdf50c702950e411
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_group_error.pb.go
@@ -0,0 +1,173 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_group_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad group errors.
+type AdGroupErrorEnum_AdGroupError int32
+
+const (
+	// Enum unspecified.
+	AdGroupErrorEnum_UNSPECIFIED AdGroupErrorEnum_AdGroupError = 0
+	// The received error code is not known in this version.
+	AdGroupErrorEnum_UNKNOWN AdGroupErrorEnum_AdGroupError = 1
+	// AdGroup with the same name already exists for the campaign.
+	AdGroupErrorEnum_DUPLICATE_ADGROUP_NAME AdGroupErrorEnum_AdGroupError = 2
+	// AdGroup name is not valid.
+	AdGroupErrorEnum_INVALID_ADGROUP_NAME AdGroupErrorEnum_AdGroupError = 3
+	// Advertiser is not allowed to target sites or set site bids that are not
+	// on the Google Search Network.
+	AdGroupErrorEnum_ADVERTISER_NOT_ON_CONTENT_NETWORK AdGroupErrorEnum_AdGroupError = 5
+	// Bid amount is too big.
+	AdGroupErrorEnum_BID_TOO_BIG AdGroupErrorEnum_AdGroupError = 6
+	// AdGroup bid does not match the campaign's bidding strategy.
+	AdGroupErrorEnum_BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH AdGroupErrorEnum_AdGroupError = 7
+	// AdGroup name is required for Add.
+	AdGroupErrorEnum_MISSING_ADGROUP_NAME AdGroupErrorEnum_AdGroupError = 8
+	// No link found between the ad group and the label.
+	AdGroupErrorEnum_ADGROUP_LABEL_DOES_NOT_EXIST AdGroupErrorEnum_AdGroupError = 9
+	// The label has already been attached to the ad group.
+	AdGroupErrorEnum_ADGROUP_LABEL_ALREADY_EXISTS AdGroupErrorEnum_AdGroupError = 10
+	// The CriterionTypeGroup is not supported for the content bid dimension.
+	AdGroupErrorEnum_INVALID_CONTENT_BID_CRITERION_TYPE_GROUP AdGroupErrorEnum_AdGroupError = 11
+	// The ad group type is not compatible with the campaign channel type.
+	AdGroupErrorEnum_AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE AdGroupErrorEnum_AdGroupError = 12
+	// The ad group type is not supported in the country of sale of the
+	// campaign.
+	AdGroupErrorEnum_ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY AdGroupErrorEnum_AdGroupError = 13
+	// Ad groups of AdGroupType.SEARCH_DYNAMIC_ADS can only be added to
+	// campaigns that have DynamicSearchAdsSetting attached.
+	AdGroupErrorEnum_CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING AdGroupErrorEnum_AdGroupError = 14
+)
+
+var AdGroupErrorEnum_AdGroupError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "DUPLICATE_ADGROUP_NAME",
+	3:  "INVALID_ADGROUP_NAME",
+	5:  "ADVERTISER_NOT_ON_CONTENT_NETWORK",
+	6:  "BID_TOO_BIG",
+	7:  "BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH",
+	8:  "MISSING_ADGROUP_NAME",
+	9:  "ADGROUP_LABEL_DOES_NOT_EXIST",
+	10: "ADGROUP_LABEL_ALREADY_EXISTS",
+	11: "INVALID_CONTENT_BID_CRITERION_TYPE_GROUP",
+	12: "AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE",
+	13: "ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY",
+	14: "CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING",
+}
+var AdGroupErrorEnum_AdGroupError_value = map[string]int32{
+	"UNSPECIFIED":                                                    0,
+	"UNKNOWN":                                                        1,
+	"DUPLICATE_ADGROUP_NAME":                                         2,
+	"INVALID_ADGROUP_NAME":                                           3,
+	"ADVERTISER_NOT_ON_CONTENT_NETWORK":                              5,
+	"BID_TOO_BIG":                                                    6,
+	"BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH":                         7,
+	"MISSING_ADGROUP_NAME":                                           8,
+	"ADGROUP_LABEL_DOES_NOT_EXIST":                                   9,
+	"ADGROUP_LABEL_ALREADY_EXISTS":                                   10,
+	"INVALID_CONTENT_BID_CRITERION_TYPE_GROUP":                       11,
+	"AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE":           12,
+	"ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY":          13,
+	"CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING": 14,
+}
+
+func (x AdGroupErrorEnum_AdGroupError) String() string {
+	return proto.EnumName(AdGroupErrorEnum_AdGroupError_name, int32(x))
+}
+func (AdGroupErrorEnum_AdGroupError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_error_19fdb626fdf61d89, []int{0, 0}
+}
+
+// Container for enum describing possible ad group errors.
+type AdGroupErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupErrorEnum) Reset()         { *m = AdGroupErrorEnum{} }
+func (m *AdGroupErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupErrorEnum) ProtoMessage()    {}
+func (*AdGroupErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_error_19fdb626fdf61d89, []int{0}
+}
+func (m *AdGroupErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupErrorEnum.Merge(dst, src)
+}
+func (m *AdGroupErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupErrorEnum.Size(m)
+}
+func (m *AdGroupErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupErrorEnum)(nil), "google.ads.googleads.v0.errors.AdGroupErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdGroupErrorEnum_AdGroupError", AdGroupErrorEnum_AdGroupError_name, AdGroupErrorEnum_AdGroupError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_group_error.proto", fileDescriptor_ad_group_error_19fdb626fdf61d89)
+}
+
+var fileDescriptor_ad_group_error_19fdb626fdf61d89 = []byte{
+	// 515 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xe1, 0x8a, 0xd3, 0x4c,
+	0x14, 0xfd, 0xda, 0xdd, 0x6f, 0x57, 0xa7, 0xab, 0x8e, 0x83, 0x88, 0x88, 0x2c, 0x5a, 0x50, 0x44,
+	0x24, 0x2d, 0xac, 0x82, 0x22, 0x08, 0x37, 0x99, 0x69, 0x3a, 0x6c, 0x3a, 0x13, 0x66, 0x26, 0xad,
+	0x95, 0xc2, 0x50, 0x4d, 0x09, 0xc2, 0x6e, 0x53, 0x12, 0x77, 0x5f, 0xc2, 0x97, 0x10, 0x7f, 0xfa,
+	0x22, 0x82, 0x4f, 0x25, 0x93, 0x31, 0xdd, 0x5d, 0x44, 0x7f, 0xe5, 0xce, 0x99, 0x73, 0xee, 0x39,
+	0x49, 0x0e, 0x3a, 0x2a, 0xca, 0xb2, 0x38, 0x59, 0x0d, 0x96, 0x79, 0x3d, 0xf0, 0xa3, 0x9b, 0xce,
+	0x87, 0x83, 0x55, 0x55, 0x95, 0x55, 0x3d, 0x58, 0xe6, 0xb6, 0xa8, 0xca, 0xb3, 0x8d, 0x6d, 0xce,
+	0xc1, 0xa6, 0x2a, 0x3f, 0x97, 0xe4, 0xd0, 0x33, 0x83, 0x65, 0x5e, 0x07, 0x5b, 0x51, 0x70, 0x3e,
+	0x0c, 0xbc, 0xa8, 0xff, 0x75, 0x17, 0x61, 0xc8, 0x63, 0xa7, 0x63, 0x0e, 0x61, 0xeb, 0xb3, 0xd3,
+	0xfe, 0x97, 0x5d, 0x74, 0x70, 0x19, 0x24, 0xb7, 0x50, 0x2f, 0x13, 0x3a, 0x65, 0x11, 0x1f, 0x71,
+	0x46, 0xf1, 0x7f, 0xa4, 0x87, 0xf6, 0x33, 0x71, 0x2c, 0xe4, 0x4c, 0xe0, 0x0e, 0xb9, 0x8f, 0xee,
+	0xd2, 0x2c, 0x4d, 0x78, 0x04, 0x86, 0x59, 0xa0, 0xb1, 0x92, 0x59, 0x6a, 0x05, 0x4c, 0x18, 0xee,
+	0x92, 0x7b, 0xe8, 0x0e, 0x17, 0x53, 0x48, 0x38, 0xbd, 0x7a, 0xb3, 0x43, 0x1e, 0xa3, 0x47, 0x40,
+	0xa7, 0x4c, 0x19, 0xae, 0x99, 0xb2, 0x42, 0x1a, 0x2b, 0x85, 0x8d, 0xa4, 0x30, 0x4c, 0x18, 0x2b,
+	0x98, 0x99, 0x49, 0x75, 0x8c, 0xff, 0x77, 0xd6, 0x21, 0xa7, 0xd6, 0x48, 0x69, 0x43, 0x1e, 0xe3,
+	0x3d, 0xf2, 0x0c, 0x3d, 0x69, 0x80, 0x79, 0xca, 0x2c, 0x08, 0x6a, 0x43, 0x4e, 0x29, 0x17, 0xb1,
+	0xd5, 0x46, 0x81, 0x61, 0xf1, 0xdc, 0x4e, 0xb8, 0x9e, 0x80, 0x89, 0xc6, 0x78, 0xdf, 0xb9, 0x4f,
+	0xb8, 0xd6, 0xee, 0xfa, 0x8a, 0xfb, 0x35, 0xf2, 0x10, 0x3d, 0x68, 0x91, 0x04, 0x42, 0x96, 0x58,
+	0x2a, 0x99, 0x6e, 0x52, 0xb0, 0x77, 0x5c, 0x1b, 0x7c, 0xfd, 0x4f, 0x06, 0x24, 0x8a, 0x01, 0x9d,
+	0x7b, 0x82, 0xc6, 0x88, 0x3c, 0x47, 0x4f, 0xdb, 0x77, 0x6b, 0x73, 0xbb, 0x64, 0x91, 0xe2, 0x86,
+	0x29, 0x2e, 0x85, 0xcf, 0xd8, 0xac, 0xc0, 0x3d, 0xf2, 0x0a, 0xbd, 0x00, 0xea, 0x4f, 0xfe, 0xc2,
+	0x99, 0x79, 0xf5, 0x48, 0x2a, 0xdb, 0x7e, 0x0b, 0x97, 0x35, 0x1a, 0x83, 0x10, 0x2c, 0x69, 0x68,
+	0xf8, 0x80, 0xbc, 0x46, 0x2f, 0xdb, 0x24, 0x5b, 0xa1, 0xce, 0xd2, 0x54, 0x2a, 0xc3, 0xbc, 0x38,
+	0x82, 0x49, 0x0a, 0x3c, 0x16, 0x56, 0x43, 0xc2, 0xb4, 0x8d, 0x64, 0x26, 0x8c, 0x9a, 0xe3, 0x1b,
+	0x24, 0x44, 0x6f, 0x23, 0x10, 0x4e, 0x00, 0xf4, 0xe2, 0x0f, 0xc8, 0x91, 0x5f, 0x44, 0x35, 0x58,
+	0x23, 0x2f, 0xd4, 0x33, 0x6e, 0xc6, 0x32, 0x33, 0x0d, 0xae, 0x99, 0x31, 0x5c, 0xc4, 0xf8, 0x66,
+	0xf8, 0xa3, 0x83, 0xfa, 0x1f, 0xcb, 0xd3, 0xe0, 0xdf, 0x4d, 0x0a, 0x6f, 0x5f, 0x6e, 0x4c, 0xea,
+	0xca, 0x97, 0x76, 0xde, 0xd3, 0xdf, 0xa2, 0xa2, 0x3c, 0x59, 0xae, 0x8b, 0xa0, 0xac, 0x8a, 0x41,
+	0xb1, 0x5a, 0x37, 0xd5, 0x6c, 0x3b, 0xbc, 0xf9, 0x54, 0xff, 0xad, 0xd2, 0x6f, 0xfc, 0xe3, 0x5b,
+	0x77, 0x27, 0x06, 0xf8, 0xde, 0x3d, 0x8c, 0xfd, 0x32, 0xc8, 0xeb, 0xc0, 0x8f, 0x6e, 0x9a, 0x0e,
+	0x83, 0xc6, 0xb2, 0xfe, 0xd9, 0x12, 0x16, 0x90, 0xd7, 0x8b, 0x2d, 0x61, 0x31, 0x1d, 0x2e, 0x3c,
+	0xe1, 0xc3, 0x5e, 0x63, 0x7c, 0xf4, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x21, 0x87, 0x0e, 0x4a,
+	0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_group_feed_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_group_feed_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f91f508159a9421a6e7bfed9f6d7c1aed09de0b3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_group_feed_error.pb.go
@@ -0,0 +1,145 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_group_feed_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad group feed errors.
+type AdGroupFeedErrorEnum_AdGroupFeedError int32
+
+const (
+	// Enum unspecified.
+	AdGroupFeedErrorEnum_UNSPECIFIED AdGroupFeedErrorEnum_AdGroupFeedError = 0
+	// The received error code is not known in this version.
+	AdGroupFeedErrorEnum_UNKNOWN AdGroupFeedErrorEnum_AdGroupFeedError = 1
+	// An active feed already exists for this ad group and place holder type.
+	AdGroupFeedErrorEnum_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE AdGroupFeedErrorEnum_AdGroupFeedError = 2
+	// The specified feed is removed.
+	AdGroupFeedErrorEnum_CANNOT_CREATE_FOR_REMOVED_FEED AdGroupFeedErrorEnum_AdGroupFeedError = 3
+	// The AdGroupFeed already exists. UPDATE operation should be used to modify
+	// the existing AdGroupFeed.
+	AdGroupFeedErrorEnum_ADGROUP_FEED_ALREADY_EXISTS AdGroupFeedErrorEnum_AdGroupFeedError = 4
+	// Cannot operate on removed AdGroupFeed.
+	AdGroupFeedErrorEnum_CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED AdGroupFeedErrorEnum_AdGroupFeedError = 5
+	// Invalid placeholder type.
+	AdGroupFeedErrorEnum_INVALID_PLACEHOLDER_TYPE AdGroupFeedErrorEnum_AdGroupFeedError = 6
+	// Feed mapping for this placeholder type does not exist.
+	AdGroupFeedErrorEnum_MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE AdGroupFeedErrorEnum_AdGroupFeedError = 7
+	// Location AdGroupFeeds cannot be created unless there is a location
+	// CustomerFeed for the specified feed.
+	AdGroupFeedErrorEnum_NO_EXISTING_LOCATION_CUSTOMER_FEED AdGroupFeedErrorEnum_AdGroupFeedError = 8
+)
+
+var AdGroupFeedErrorEnum_AdGroupFeedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	3: "CANNOT_CREATE_FOR_REMOVED_FEED",
+	4: "ADGROUP_FEED_ALREADY_EXISTS",
+	5: "CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED",
+	6: "INVALID_PLACEHOLDER_TYPE",
+	7: "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
+	8: "NO_EXISTING_LOCATION_CUSTOMER_FEED",
+}
+var AdGroupFeedErrorEnum_AdGroupFeedError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE": 2,
+	"CANNOT_CREATE_FOR_REMOVED_FEED":           3,
+	"ADGROUP_FEED_ALREADY_EXISTS":              4,
+	"CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED":   5,
+	"INVALID_PLACEHOLDER_TYPE":                 6,
+	"MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE": 7,
+	"NO_EXISTING_LOCATION_CUSTOMER_FEED":       8,
+}
+
+func (x AdGroupFeedErrorEnum_AdGroupFeedError) String() string {
+	return proto.EnumName(AdGroupFeedErrorEnum_AdGroupFeedError_name, int32(x))
+}
+func (AdGroupFeedErrorEnum_AdGroupFeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_error_c3514b578457331e, []int{0, 0}
+}
+
+// Container for enum describing possible ad group feed errors.
+type AdGroupFeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupFeedErrorEnum) Reset()         { *m = AdGroupFeedErrorEnum{} }
+func (m *AdGroupFeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdGroupFeedErrorEnum) ProtoMessage()    {}
+func (*AdGroupFeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_error_c3514b578457331e, []int{0}
+}
+func (m *AdGroupFeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupFeedErrorEnum.Unmarshal(m, b)
+}
+func (m *AdGroupFeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupFeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupFeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupFeedErrorEnum.Merge(dst, src)
+}
+func (m *AdGroupFeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdGroupFeedErrorEnum.Size(m)
+}
+func (m *AdGroupFeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupFeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupFeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdGroupFeedErrorEnum)(nil), "google.ads.googleads.v0.errors.AdGroupFeedErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdGroupFeedErrorEnum_AdGroupFeedError", AdGroupFeedErrorEnum_AdGroupFeedError_name, AdGroupFeedErrorEnum_AdGroupFeedError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_group_feed_error.proto", fileDescriptor_ad_group_feed_error_c3514b578457331e)
+}
+
+var fileDescriptor_ad_group_feed_error_c3514b578457331e = []byte{
+	// 406 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x8a, 0xd4, 0x30,
+	0x18, 0x85, 0x9d, 0xae, 0xee, 0x4a, 0xf6, 0xc2, 0x12, 0x14, 0x04, 0x65, 0x84, 0x5e, 0x2c, 0x22,
+	0x92, 0x0e, 0x78, 0x23, 0x78, 0x95, 0x6d, 0xfe, 0xa9, 0xc1, 0x4e, 0x12, 0xd2, 0x4e, 0x75, 0xa5,
+	0x10, 0xaa, 0xa9, 0x45, 0xd8, 0x9d, 0x0c, 0xad, 0xbb, 0x0f, 0xe4, 0xa5, 0xaf, 0xe1, 0x9d, 0xbe,
+	0x82, 0x0f, 0x23, 0x69, 0x76, 0x07, 0x59, 0x57, 0xaf, 0x7a, 0x48, 0xbf, 0x73, 0xfe, 0x43, 0xfe,
+	0xa0, 0x97, 0xbd, 0x73, 0xfd, 0x69, 0x97, 0xb6, 0x76, 0x4c, 0x83, 0xf4, 0xea, 0x62, 0x91, 0x76,
+	0xc3, 0xe0, 0x86, 0x31, 0x6d, 0xad, 0xe9, 0x07, 0x77, 0xbe, 0x35, 0x9f, 0xba, 0xce, 0x9a, 0xe9,
+	0x90, 0x6c, 0x07, 0xf7, 0xc5, 0xe1, 0x79, 0xc0, 0x49, 0x6b, 0x47, 0xb2, 0x73, 0x92, 0x8b, 0x05,
+	0x09, 0xce, 0xe4, 0x57, 0x84, 0xee, 0x53, 0x9b, 0x7b, 0xf3, 0xb2, 0xeb, 0x2c, 0xf8, 0x53, 0xd8,
+	0x9c, 0x9f, 0x25, 0xdf, 0x23, 0x14, 0x5f, 0xff, 0x81, 0xef, 0xa1, 0xc3, 0xb5, 0x28, 0x15, 0x64,
+	0x7c, 0xc9, 0x81, 0xc5, 0xb7, 0xf0, 0x21, 0x3a, 0x58, 0x8b, 0x37, 0x42, 0xbe, 0x15, 0xf1, 0x0c,
+	0x3f, 0x47, 0x4f, 0x97, 0x00, 0xcc, 0xd0, 0x42, 0x03, 0x65, 0x27, 0x06, 0xde, 0xf1, 0xb2, 0x2a,
+	0xcd, 0x52, 0x6a, 0xa3, 0x0a, 0x9a, 0xc1, 0x6b, 0x59, 0x30, 0xd0, 0xa6, 0x3a, 0x51, 0x10, 0x47,
+	0x38, 0x41, 0xf3, 0x8c, 0x0a, 0x21, 0x2b, 0x93, 0x69, 0xa0, 0x15, 0x4c, 0x9c, 0x86, 0x95, 0xac,
+	0x81, 0x19, 0x9f, 0x13, 0xef, 0xe1, 0x27, 0xe8, 0x11, 0x65, 0xb9, 0x96, 0x6b, 0x65, 0x6e, 0x48,
+	0x8e, 0x6f, 0xe3, 0x67, 0xe8, 0xe8, 0x32, 0x44, 0x2a, 0xd0, 0x3e, 0x45, 0x8a, 0x5d, 0xc8, 0x9f,
+	0xd6, 0xf8, 0x0e, 0x7e, 0x8c, 0x1e, 0x72, 0x51, 0xd3, 0x82, 0xb3, 0xbf, 0xeb, 0xec, 0xfb, 0xf2,
+	0x2b, 0x5e, 0x96, 0x5c, 0xe4, 0x13, 0xbf, 0xa2, 0x4a, 0x4d, 0xfa, 0xa6, 0xf2, 0x07, 0xf8, 0x08,
+	0x25, 0x42, 0x86, 0x1a, 0x9e, 0x2a, 0x64, 0x46, 0x2b, 0x2e, 0x85, 0xc9, 0xd6, 0x65, 0x25, 0x57,
+	0xa0, 0xc3, 0xcc, 0xbb, 0xc7, 0x3f, 0x67, 0x28, 0xf9, 0xe8, 0xce, 0xc8, 0xff, 0xb7, 0x70, 0xfc,
+	0xe0, 0xfa, 0x4d, 0x2b, 0xbf, 0x3c, 0x35, 0x7b, 0xcf, 0x2e, 0x8d, 0xbd, 0x3b, 0x6d, 0x37, 0x3d,
+	0x71, 0x43, 0x9f, 0xf6, 0xdd, 0x66, 0x5a, 0xed, 0xd5, 0x43, 0xd8, 0x7e, 0x1e, 0xff, 0xf5, 0x2e,
+	0x5e, 0x85, 0xcf, 0xd7, 0x68, 0x2f, 0xa7, 0xf4, 0x5b, 0x34, 0xcf, 0x43, 0x18, 0xb5, 0x23, 0x09,
+	0xd2, 0xab, 0x7a, 0x41, 0xa6, 0x91, 0xe3, 0x8f, 0x2b, 0xa0, 0xa1, 0x76, 0x6c, 0x76, 0x40, 0x53,
+	0x2f, 0x9a, 0x00, 0x7c, 0xd8, 0x9f, 0x06, 0xbf, 0xf8, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x87, 0x97,
+	0x7a, 0x4d, 0x8f, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/ad_sharing_error.pb.go b/googleapis/ads/googleads/v0/errors/ad_sharing_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d4fa6bd2a19bdb5dd55eb6b913107b6dba662736
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/ad_sharing_error.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/ad_sharing_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible ad sharing errors.
+type AdSharingErrorEnum_AdSharingError int32
+
+const (
+	// Enum unspecified.
+	AdSharingErrorEnum_UNSPECIFIED AdSharingErrorEnum_AdSharingError = 0
+	// The received error code is not known in this version.
+	AdSharingErrorEnum_UNKNOWN AdSharingErrorEnum_AdSharingError = 1
+	// Error resulting in attempting to add an Ad to an AdGroup that already
+	// contains the Ad.
+	AdSharingErrorEnum_AD_GROUP_ALREADY_CONTAINS_AD AdSharingErrorEnum_AdSharingError = 2
+	// Ad is not compatible with the AdGroup it is being shared with.
+	AdSharingErrorEnum_INCOMPATIBLE_AD_UNDER_AD_GROUP AdSharingErrorEnum_AdSharingError = 3
+	// Cannot add AdGroupAd on inactive Ad.
+	AdSharingErrorEnum_CANNOT_SHARE_INACTIVE_AD AdSharingErrorEnum_AdSharingError = 4
+)
+
+var AdSharingErrorEnum_AdSharingError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "AD_GROUP_ALREADY_CONTAINS_AD",
+	3: "INCOMPATIBLE_AD_UNDER_AD_GROUP",
+	4: "CANNOT_SHARE_INACTIVE_AD",
+}
+var AdSharingErrorEnum_AdSharingError_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"AD_GROUP_ALREADY_CONTAINS_AD":   2,
+	"INCOMPATIBLE_AD_UNDER_AD_GROUP": 3,
+	"CANNOT_SHARE_INACTIVE_AD":       4,
+}
+
+func (x AdSharingErrorEnum_AdSharingError) String() string {
+	return proto.EnumName(AdSharingErrorEnum_AdSharingError_name, int32(x))
+}
+func (AdSharingErrorEnum_AdSharingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_ad_sharing_error_1f026b2ad4c0cf9b, []int{0, 0}
+}
+
+// Container for enum describing possible ad sharing errors.
+type AdSharingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdSharingErrorEnum) Reset()         { *m = AdSharingErrorEnum{} }
+func (m *AdSharingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdSharingErrorEnum) ProtoMessage()    {}
+func (*AdSharingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_sharing_error_1f026b2ad4c0cf9b, []int{0}
+}
+func (m *AdSharingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdSharingErrorEnum.Unmarshal(m, b)
+}
+func (m *AdSharingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdSharingErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdSharingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdSharingErrorEnum.Merge(dst, src)
+}
+func (m *AdSharingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdSharingErrorEnum.Size(m)
+}
+func (m *AdSharingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdSharingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdSharingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdSharingErrorEnum)(nil), "google.ads.googleads.v0.errors.AdSharingErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdSharingErrorEnum_AdSharingError", AdSharingErrorEnum_AdSharingError_name, AdSharingErrorEnum_AdSharingError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/ad_sharing_error.proto", fileDescriptor_ad_sharing_error_1f026b2ad4c0cf9b)
+}
+
+var fileDescriptor_ad_sharing_error_1f026b2ad4c0cf9b = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xf3, 0x30,
+	0x18, 0xc6, 0xbf, 0x6e, 0x1f, 0xdf, 0x07, 0x19, 0x68, 0x89, 0x27, 0x1e, 0x8c, 0x21, 0xbd, 0x80,
+	0xb4, 0x20, 0x1e, 0x79, 0xf4, 0xae, 0x89, 0x33, 0x38, 0xd3, 0xd2, 0x3f, 0x13, 0xa5, 0x10, 0xaa,
+	0x1d, 0x71, 0xb0, 0x35, 0xa3, 0xd1, 0x5d, 0x88, 0x97, 0xe0, 0x99, 0xde, 0x89, 0x5e, 0x95, 0xb4,
+	0x71, 0x83, 0x1d, 0xe8, 0x51, 0x1e, 0x5e, 0x7e, 0xbf, 0xbc, 0xc9, 0x83, 0xce, 0x94, 0xd6, 0x6a,
+	0x39, 0xf7, 0xcb, 0xca, 0xf8, 0x36, 0xb6, 0x69, 0x13, 0xf8, 0xf3, 0xa6, 0xd1, 0x8d, 0xf1, 0xcb,
+	0x4a, 0x9a, 0xc7, 0xb2, 0x59, 0xd4, 0x4a, 0x76, 0x13, 0xb2, 0x6e, 0xf4, 0x93, 0xc6, 0x23, 0xcb,
+	0x92, 0xb2, 0x32, 0x64, 0xa7, 0x91, 0x4d, 0x40, 0xac, 0xe6, 0xbd, 0x39, 0x08, 0x43, 0x95, 0x5a,
+	0x93, 0xb5, 0x33, 0x56, 0x3f, 0xaf, 0xbc, 0x17, 0x07, 0x1d, 0xec, 0x8f, 0xf1, 0x21, 0x1a, 0xe4,
+	0x22, 0x8d, 0x59, 0xc8, 0x2f, 0x38, 0xa3, 0xee, 0x1f, 0x3c, 0x40, 0xff, 0x73, 0x71, 0x25, 0xa2,
+	0x1b, 0xe1, 0x3a, 0xf8, 0x04, 0x0d, 0x81, 0xca, 0x49, 0x12, 0xe5, 0xb1, 0x84, 0x69, 0xc2, 0x80,
+	0xde, 0xca, 0x30, 0x12, 0x19, 0x70, 0x91, 0x4a, 0xa0, 0x6e, 0x0f, 0x7b, 0x68, 0xc4, 0x45, 0x18,
+	0x5d, 0xc7, 0x90, 0xf1, 0xf1, 0x94, 0x49, 0xa0, 0x32, 0x17, 0x94, 0x25, 0x72, 0xeb, 0xb9, 0x7d,
+	0x3c, 0x44, 0xc7, 0x21, 0x08, 0x11, 0x65, 0x32, 0xbd, 0x84, 0x84, 0x49, 0x2e, 0x20, 0xcc, 0xf8,
+	0xac, 0x85, 0xdd, 0xbf, 0xe3, 0x0f, 0x07, 0x79, 0x0f, 0x7a, 0x45, 0x7e, 0xff, 0xd2, 0xf8, 0x68,
+	0xff, 0xe1, 0x71, 0xdb, 0x43, 0xec, 0xdc, 0xd1, 0x6f, 0x4d, 0xe9, 0x65, 0x59, 0x2b, 0xa2, 0x1b,
+	0xe5, 0xab, 0x79, 0xdd, 0xb5, 0xb4, 0x2d, 0x74, 0xbd, 0x30, 0x3f, 0xf5, 0x7b, 0x6e, 0x8f, 0xd7,
+	0x5e, 0x7f, 0x02, 0xf0, 0xde, 0x1b, 0x4d, 0xec, 0x65, 0x50, 0x19, 0x62, 0x63, 0x9b, 0x66, 0x01,
+	0xe9, 0x56, 0x9a, 0xcf, 0x2d, 0x50, 0x40, 0x65, 0x8a, 0x1d, 0x50, 0xcc, 0x82, 0xc2, 0x02, 0xf7,
+	0xff, 0xba, 0xc5, 0xa7, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x38, 0xb7, 0x41, 0xd7, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/adx_error.pb.go b/googleapis/ads/googleads/v0/errors/adx_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9629ffbc01162733ddb66a203c70d23915a23440
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/adx_error.pb.go
@@ -0,0 +1,109 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/adx_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible adx errors.
+type AdxErrorEnum_AdxError int32
+
+const (
+	// Enum unspecified.
+	AdxErrorEnum_UNSPECIFIED AdxErrorEnum_AdxError = 0
+	// The received error code is not known in this version.
+	AdxErrorEnum_UNKNOWN AdxErrorEnum_AdxError = 1
+	// Attempt to use non-AdX feature by AdX customer.
+	AdxErrorEnum_UNSUPPORTED_FEATURE AdxErrorEnum_AdxError = 2
+)
+
+var AdxErrorEnum_AdxError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "UNSUPPORTED_FEATURE",
+}
+var AdxErrorEnum_AdxError_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"UNSUPPORTED_FEATURE": 2,
+}
+
+func (x AdxErrorEnum_AdxError) String() string {
+	return proto.EnumName(AdxErrorEnum_AdxError_name, int32(x))
+}
+func (AdxErrorEnum_AdxError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_adx_error_4966203c5ec48a3a, []int{0, 0}
+}
+
+// Container for enum describing possible adx errors.
+type AdxErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdxErrorEnum) Reset()         { *m = AdxErrorEnum{} }
+func (m *AdxErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AdxErrorEnum) ProtoMessage()    {}
+func (*AdxErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_adx_error_4966203c5ec48a3a, []int{0}
+}
+func (m *AdxErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdxErrorEnum.Unmarshal(m, b)
+}
+func (m *AdxErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdxErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AdxErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdxErrorEnum.Merge(dst, src)
+}
+func (m *AdxErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AdxErrorEnum.Size(m)
+}
+func (m *AdxErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdxErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdxErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AdxErrorEnum)(nil), "google.ads.googleads.v0.errors.AdxErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AdxErrorEnum_AdxError", AdxErrorEnum_AdxError_name, AdxErrorEnum_AdxError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/adx_error.proto", fileDescriptor_adx_error_4966203c5ec48a3a)
+}
+
+var fileDescriptor_adx_error_4966203c5ec48a3a = []byte{
+	// 253 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xc4, 0x94, 0x8a, 0x78, 0x30, 0x53, 0xaf, 0xa0, 0x28, 0xbf, 0x24,
+	0x5f, 0x48, 0x0e, 0xa2, 0x48, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x5e, 0xaf, 0xcc, 0x40, 0x0f,
+	0xa2, 0x5e, 0x29, 0x90, 0x8b, 0xc7, 0x31, 0xa5, 0xc2, 0x15, 0xc4, 0x71, 0xcd, 0x2b, 0xcd, 0x55,
+	0x72, 0xe4, 0xe2, 0x80, 0xf1, 0x85, 0xf8, 0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c, 0x9d, 0x3d,
+	0xdd, 0x3c, 0x5d, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd, 0xfc, 0xc3,
+	0xfd, 0x04, 0x18, 0x85, 0xc4, 0xb9, 0x84, 0x43, 0xfd, 0x82, 0x43, 0x03, 0x02, 0xfc, 0x83, 0x42,
+	0x5c, 0x5d, 0xe2, 0xdd, 0x5c, 0x1d, 0x43, 0x42, 0x83, 0x5c, 0x05, 0x98, 0x9c, 0x0e, 0x33, 0x72,
+	0x29, 0x25, 0xe7, 0xe7, 0xea, 0xe1, 0xb7, 0xd9, 0x89, 0x17, 0x66, 0x4f, 0x00, 0xc8, 0xa1, 0x01,
+	0x8c, 0x51, 0x2e, 0x50, 0x0d, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9, 0xfa,
+	0xe9, 0xa9, 0x79, 0x60, 0x6f, 0xc0, 0xbc, 0x5a, 0x90, 0x59, 0x8c, 0xcb, 0xe7, 0xd6, 0x10, 0x6a,
+	0x11, 0x13, 0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0x61, 0x8e, 0x29, 0xc5, 0x7a,
+	0x10, 0x26, 0x88, 0x15, 0x66, 0xa0, 0x07, 0xb6, 0xb2, 0xf8, 0x14, 0x4c, 0x41, 0x8c, 0x63, 0x4a,
+	0x71, 0x0c, 0x5c, 0x41, 0x4c, 0x98, 0x41, 0x0c, 0x44, 0x41, 0x12, 0x1b, 0xd8, 0x62, 0x63, 0x40,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x54, 0xbf, 0x75, 0xe3, 0x71, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/authentication_error.pb.go b/googleapis/ads/googleads/v0/errors/authentication_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5dd8481d0a973e91dbce769151d06eb75b9fde0f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/authentication_error.pb.go
@@ -0,0 +1,199 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/authentication_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible authentication errors.
+type AuthenticationErrorEnum_AuthenticationError int32
+
+const (
+	// Enum unspecified.
+	AuthenticationErrorEnum_UNSPECIFIED AuthenticationErrorEnum_AuthenticationError = 0
+	// The received error code is not known in this version.
+	AuthenticationErrorEnum_UNKNOWN AuthenticationErrorEnum_AuthenticationError = 1
+	// Authentication of the request failed.
+	AuthenticationErrorEnum_AUTHENTICATION_ERROR AuthenticationErrorEnum_AuthenticationError = 2
+	// Client Customer Id is not a number.
+	AuthenticationErrorEnum_CLIENT_CUSTOMER_ID_INVALID AuthenticationErrorEnum_AuthenticationError = 5
+	// No customer found for the provided customer id.
+	AuthenticationErrorEnum_CUSTOMER_NOT_FOUND AuthenticationErrorEnum_AuthenticationError = 8
+	// Client's Google Account is deleted.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_DELETED AuthenticationErrorEnum_AuthenticationError = 9
+	// Google account login token in the cookie is invalid.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_COOKIE_INVALID AuthenticationErrorEnum_AuthenticationError = 10
+	// A problem occurred during Google account authentication.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_AUTHENTICATION_FAILED AuthenticationErrorEnum_AuthenticationError = 25
+	// The user in the google account login token does not match the UserId in
+	// the cookie.
+	AuthenticationErrorEnum_GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH AuthenticationErrorEnum_AuthenticationError = 12
+	// Login cookie is required for authentication.
+	AuthenticationErrorEnum_LOGIN_COOKIE_REQUIRED AuthenticationErrorEnum_AuthenticationError = 13
+	// User in the cookie is not a valid Ads user.
+	AuthenticationErrorEnum_NOT_ADS_USER AuthenticationErrorEnum_AuthenticationError = 14
+	// Oauth token in the header is not valid.
+	AuthenticationErrorEnum_OAUTH_TOKEN_INVALID AuthenticationErrorEnum_AuthenticationError = 15
+	// Oauth token in the header has expired.
+	AuthenticationErrorEnum_OAUTH_TOKEN_EXPIRED AuthenticationErrorEnum_AuthenticationError = 16
+	// Oauth token in the header has been disabled.
+	AuthenticationErrorEnum_OAUTH_TOKEN_DISABLED AuthenticationErrorEnum_AuthenticationError = 17
+	// Oauth token in the header has been revoked.
+	AuthenticationErrorEnum_OAUTH_TOKEN_REVOKED AuthenticationErrorEnum_AuthenticationError = 18
+	// Oauth token HTTP header is malformed.
+	AuthenticationErrorEnum_OAUTH_TOKEN_HEADER_INVALID AuthenticationErrorEnum_AuthenticationError = 19
+	// Login cookie is not valid.
+	AuthenticationErrorEnum_LOGIN_COOKIE_INVALID AuthenticationErrorEnum_AuthenticationError = 20
+	// User Id in the header is not a valid id.
+	AuthenticationErrorEnum_USER_ID_INVALID AuthenticationErrorEnum_AuthenticationError = 22
+	// An account administrator changed this account's authentication settings.
+	// To access this Google Ads account, enable 2-Step Verification in your
+	// Google account at https://www.google.com/landing/2step.
+	AuthenticationErrorEnum_TWO_STEP_VERIFICATION_NOT_ENROLLED AuthenticationErrorEnum_AuthenticationError = 23
+	// An account administrator changed this account's authentication settings.
+	// To access this Google Ads account, enable Advanced Protection in your
+	// Google account at https://landing.google.com/advancedprotection.
+	AuthenticationErrorEnum_ADVANCED_PROTECTION_NOT_ENROLLED AuthenticationErrorEnum_AuthenticationError = 24
+)
+
+var AuthenticationErrorEnum_AuthenticationError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "AUTHENTICATION_ERROR",
+	5:  "CLIENT_CUSTOMER_ID_INVALID",
+	8:  "CUSTOMER_NOT_FOUND",
+	9:  "GOOGLE_ACCOUNT_DELETED",
+	10: "GOOGLE_ACCOUNT_COOKIE_INVALID",
+	25: "GOOGLE_ACCOUNT_AUTHENTICATION_FAILED",
+	12: "GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH",
+	13: "LOGIN_COOKIE_REQUIRED",
+	14: "NOT_ADS_USER",
+	15: "OAUTH_TOKEN_INVALID",
+	16: "OAUTH_TOKEN_EXPIRED",
+	17: "OAUTH_TOKEN_DISABLED",
+	18: "OAUTH_TOKEN_REVOKED",
+	19: "OAUTH_TOKEN_HEADER_INVALID",
+	20: "LOGIN_COOKIE_INVALID",
+	22: "USER_ID_INVALID",
+	23: "TWO_STEP_VERIFICATION_NOT_ENROLLED",
+	24: "ADVANCED_PROTECTION_NOT_ENROLLED",
+}
+var AuthenticationErrorEnum_AuthenticationError_value = map[string]int32{
+	"UNSPECIFIED":                               0,
+	"UNKNOWN":                                   1,
+	"AUTHENTICATION_ERROR":                      2,
+	"CLIENT_CUSTOMER_ID_INVALID":                5,
+	"CUSTOMER_NOT_FOUND":                        8,
+	"GOOGLE_ACCOUNT_DELETED":                    9,
+	"GOOGLE_ACCOUNT_COOKIE_INVALID":             10,
+	"GOOGLE_ACCOUNT_AUTHENTICATION_FAILED":      25,
+	"GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH": 12,
+	"LOGIN_COOKIE_REQUIRED":                     13,
+	"NOT_ADS_USER":                              14,
+	"OAUTH_TOKEN_INVALID":                       15,
+	"OAUTH_TOKEN_EXPIRED":                       16,
+	"OAUTH_TOKEN_DISABLED":                      17,
+	"OAUTH_TOKEN_REVOKED":                       18,
+	"OAUTH_TOKEN_HEADER_INVALID":                19,
+	"LOGIN_COOKIE_INVALID":                      20,
+	"USER_ID_INVALID":                           22,
+	"TWO_STEP_VERIFICATION_NOT_ENROLLED":        23,
+	"ADVANCED_PROTECTION_NOT_ENROLLED":          24,
+}
+
+func (x AuthenticationErrorEnum_AuthenticationError) String() string {
+	return proto.EnumName(AuthenticationErrorEnum_AuthenticationError_name, int32(x))
+}
+func (AuthenticationErrorEnum_AuthenticationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_authentication_error_8d31aef746d95263, []int{0, 0}
+}
+
+// Container for enum describing possible authentication errors.
+type AuthenticationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AuthenticationErrorEnum) Reset()         { *m = AuthenticationErrorEnum{} }
+func (m *AuthenticationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AuthenticationErrorEnum) ProtoMessage()    {}
+func (*AuthenticationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_authentication_error_8d31aef746d95263, []int{0}
+}
+func (m *AuthenticationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AuthenticationErrorEnum.Unmarshal(m, b)
+}
+func (m *AuthenticationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AuthenticationErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AuthenticationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AuthenticationErrorEnum.Merge(dst, src)
+}
+func (m *AuthenticationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AuthenticationErrorEnum.Size(m)
+}
+func (m *AuthenticationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AuthenticationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AuthenticationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AuthenticationErrorEnum)(nil), "google.ads.googleads.v0.errors.AuthenticationErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AuthenticationErrorEnum_AuthenticationError", AuthenticationErrorEnum_AuthenticationError_name, AuthenticationErrorEnum_AuthenticationError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/authentication_error.proto", fileDescriptor_authentication_error_8d31aef746d95263)
+}
+
+var fileDescriptor_authentication_error_8d31aef746d95263 = []byte{
+	// 524 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0x5d, 0x6f, 0xd3, 0x30,
+	0x14, 0x65, 0x65, 0x7c, 0x79, 0x83, 0x1a, 0x77, 0xb4, 0xdd, 0x24, 0x2a, 0xa8, 0x26, 0x04, 0x0f,
+	0xa4, 0x95, 0x78, 0x42, 0x3c, 0xb9, 0xf1, 0x6d, 0x6b, 0x35, 0xb5, 0x83, 0xe3, 0x64, 0x08, 0x55,
+	0xb2, 0xca, 0x5a, 0x85, 0x4a, 0x5b, 0x33, 0x35, 0xdd, 0x7e, 0x10, 0x8f, 0xfc, 0x14, 0x84, 0xf8,
+	0x1d, 0xfc, 0x0c, 0xe4, 0x64, 0xa9, 0xba, 0x30, 0x78, 0xca, 0x4d, 0xce, 0x39, 0xf7, 0x1c, 0xdf,
+	0x5c, 0xa3, 0xf7, 0x71, 0x92, 0xc4, 0x67, 0xf3, 0xce, 0x74, 0x96, 0x76, 0xf2, 0xd2, 0x56, 0x57,
+	0xdd, 0xce, 0x7c, 0xb5, 0x4a, 0x56, 0x69, 0x67, 0x7a, 0xb9, 0xfe, 0x3a, 0x5f, 0xae, 0x17, 0xa7,
+	0xd3, 0xf5, 0x22, 0x59, 0x9a, 0xec, 0xab, 0x73, 0xb1, 0x4a, 0xd6, 0x09, 0x69, 0xe5, 0x7c, 0x67,
+	0x3a, 0x4b, 0x9d, 0x8d, 0xd4, 0xb9, 0xea, 0x3a, 0xb9, 0xb4, 0xfd, 0x7b, 0x17, 0x35, 0xe8, 0x0d,
+	0x39, 0x58, 0x00, 0x96, 0x97, 0xe7, 0xed, 0x9f, 0xbb, 0xa8, 0x76, 0x0b, 0x46, 0xaa, 0x68, 0x2f,
+	0x14, 0x81, 0x0f, 0x2e, 0xef, 0x73, 0x60, 0xf8, 0x0e, 0xd9, 0x43, 0x0f, 0x42, 0x31, 0x12, 0xf2,
+	0x44, 0xe0, 0x1d, 0xd2, 0x44, 0x07, 0x34, 0xd4, 0x43, 0x10, 0x9a, 0xbb, 0x54, 0x73, 0x29, 0x0c,
+	0x28, 0x25, 0x15, 0xae, 0x90, 0x16, 0x3a, 0x72, 0x3d, 0x0e, 0x42, 0x1b, 0x37, 0x0c, 0xb4, 0x1c,
+	0x83, 0x32, 0x9c, 0x19, 0x2e, 0x22, 0xea, 0x71, 0x86, 0xef, 0x91, 0x3a, 0x22, 0x1b, 0x40, 0x48,
+	0x6d, 0xfa, 0x32, 0x14, 0x0c, 0x3f, 0x24, 0x47, 0xa8, 0x3e, 0x90, 0x72, 0xe0, 0x81, 0xa1, 0xae,
+	0x2b, 0x43, 0xa1, 0x0d, 0x03, 0x0f, 0x34, 0x30, 0xfc, 0x88, 0xbc, 0x44, 0xcf, 0x4b, 0x98, 0x2b,
+	0xe5, 0x88, 0xc3, 0xa6, 0x2d, 0x22, 0xaf, 0xd1, 0x71, 0x89, 0x52, 0xca, 0xd7, 0xa7, 0xdc, 0x03,
+	0x86, 0x0f, 0xc9, 0x5b, 0xf4, 0xa6, 0xc4, 0x0c, 0x03, 0x50, 0x86, 0x0a, 0x66, 0x28, 0x0b, 0xf2,
+	0x97, 0x31, 0x0f, 0xc6, 0x54, 0xbb, 0x43, 0xbc, 0x4f, 0x0e, 0xd1, 0x33, 0x4f, 0x0e, 0xb8, 0x28,
+	0x2c, 0x15, 0x7c, 0x0c, 0xb9, 0x02, 0x86, 0x1f, 0x13, 0x8c, 0xf6, 0xed, 0x09, 0x0a, 0x15, 0x7e,
+	0x42, 0x1a, 0xa8, 0x26, 0xad, 0xaf, 0xd1, 0x72, 0x04, 0x62, 0x13, 0xaf, 0x5a, 0x06, 0xe0, 0x93,
+	0x9f, 0xf5, 0xc0, 0x76, 0x90, 0xdb, 0x00, 0xe3, 0x01, 0xed, 0xd9, 0x9c, 0x4f, 0xcb, 0x12, 0x05,
+	0x91, 0x1c, 0x01, 0xc3, 0xc4, 0x4e, 0x78, 0x1b, 0x18, 0x02, 0x65, 0x76, 0xc8, 0xd7, 0x5e, 0x35,
+	0xdb, 0xf2, 0x46, 0xe2, 0x02, 0x39, 0x20, 0x35, 0x54, 0xcd, 0x8e, 0xb7, 0xf5, 0x43, 0xea, 0xe4,
+	0x15, 0x6a, 0xeb, 0x13, 0x69, 0x02, 0x0d, 0xbe, 0x89, 0x40, 0xf1, 0x7e, 0x31, 0x31, 0x7b, 0x36,
+	0x10, 0x4a, 0x7a, 0x36, 0x4f, 0x83, 0x1c, 0xa3, 0x17, 0x94, 0x45, 0x54, 0xb8, 0xc0, 0x8c, 0xaf,
+	0xa4, 0x06, 0xf7, 0x6f, 0x56, 0xb3, 0xf7, 0x6b, 0x07, 0xb5, 0x4f, 0x93, 0x73, 0xe7, 0xff, 0x1b,
+	0xd9, 0x6b, 0xde, 0xb2, 0x72, 0xbe, 0xdd, 0x65, 0x7f, 0xe7, 0x33, 0xbb, 0xd6, 0xc6, 0xc9, 0xd9,
+	0x74, 0x19, 0x3b, 0xc9, 0x2a, 0xee, 0xc4, 0xf3, 0x65, 0xb6, 0xe9, 0xc5, 0xc5, 0xb8, 0x58, 0xa4,
+	0xff, 0xba, 0x27, 0x1f, 0xf2, 0xc7, 0xb7, 0xca, 0xdd, 0x01, 0xa5, 0xdf, 0x2b, 0xad, 0x41, 0xde,
+	0x8c, 0xce, 0x52, 0x27, 0x2f, 0x6d, 0x15, 0x75, 0x9d, 0xcc, 0x32, 0xfd, 0x51, 0x10, 0x26, 0x74,
+	0x96, 0x4e, 0x36, 0x84, 0x49, 0xd4, 0x9d, 0xe4, 0x84, 0x2f, 0xf7, 0x33, 0xe3, 0x77, 0x7f, 0x02,
+	0x00, 0x00, 0xff, 0xff, 0xa3, 0x01, 0xf3, 0x55, 0x9f, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/authorization_error.pb.go b/googleapis/ads/googleads/v0/errors/authorization_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f0d3f0649b5f7fde50300694f75953f49f65d909
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/authorization_error.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/authorization_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible authorization errors.
+type AuthorizationErrorEnum_AuthorizationError int32
+
+const (
+	// Enum unspecified.
+	AuthorizationErrorEnum_UNSPECIFIED AuthorizationErrorEnum_AuthorizationError = 0
+	// The received error code is not known in this version.
+	AuthorizationErrorEnum_UNKNOWN AuthorizationErrorEnum_AuthorizationError = 1
+	// User doesn't have permission to access customer.
+	AuthorizationErrorEnum_USER_PERMISSION_DENIED AuthorizationErrorEnum_AuthorizationError = 2
+	// The developer token is not whitelisted.
+	AuthorizationErrorEnum_DEVELOPER_TOKEN_NOT_WHITELISTED AuthorizationErrorEnum_AuthorizationError = 3
+	// The developer token is not allowed with the project sent in the request.
+	AuthorizationErrorEnum_DEVELOPER_TOKEN_PROHIBITED AuthorizationErrorEnum_AuthorizationError = 4
+	// The Google Cloud project sent in the request does not have permission to
+	// access the api.
+	AuthorizationErrorEnum_PROJECT_DISABLED AuthorizationErrorEnum_AuthorizationError = 5
+	// Authorization of the client failed.
+	AuthorizationErrorEnum_AUTHORIZATION_ERROR AuthorizationErrorEnum_AuthorizationError = 6
+	// The user does not have permission to perform this action
+	// (e.g., ADD, UPDATE, REMOVE) on the resource or call a method.
+	AuthorizationErrorEnum_ACTION_NOT_PERMITTED AuthorizationErrorEnum_AuthorizationError = 7
+	// Signup not complete.
+	AuthorizationErrorEnum_INCOMPLETE_SIGNUP AuthorizationErrorEnum_AuthorizationError = 8
+)
+
+var AuthorizationErrorEnum_AuthorizationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "USER_PERMISSION_DENIED",
+	3: "DEVELOPER_TOKEN_NOT_WHITELISTED",
+	4: "DEVELOPER_TOKEN_PROHIBITED",
+	5: "PROJECT_DISABLED",
+	6: "AUTHORIZATION_ERROR",
+	7: "ACTION_NOT_PERMITTED",
+	8: "INCOMPLETE_SIGNUP",
+}
+var AuthorizationErrorEnum_AuthorizationError_value = map[string]int32{
+	"UNSPECIFIED":                     0,
+	"UNKNOWN":                         1,
+	"USER_PERMISSION_DENIED":          2,
+	"DEVELOPER_TOKEN_NOT_WHITELISTED": 3,
+	"DEVELOPER_TOKEN_PROHIBITED":      4,
+	"PROJECT_DISABLED":                5,
+	"AUTHORIZATION_ERROR":             6,
+	"ACTION_NOT_PERMITTED":            7,
+	"INCOMPLETE_SIGNUP":               8,
+}
+
+func (x AuthorizationErrorEnum_AuthorizationError) String() string {
+	return proto.EnumName(AuthorizationErrorEnum_AuthorizationError_name, int32(x))
+}
+func (AuthorizationErrorEnum_AuthorizationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_authorization_error_bfcafdfe999de0f1, []int{0, 0}
+}
+
+// Container for enum describing possible authorization errors.
+type AuthorizationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AuthorizationErrorEnum) Reset()         { *m = AuthorizationErrorEnum{} }
+func (m *AuthorizationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*AuthorizationErrorEnum) ProtoMessage()    {}
+func (*AuthorizationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_authorization_error_bfcafdfe999de0f1, []int{0}
+}
+func (m *AuthorizationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AuthorizationErrorEnum.Unmarshal(m, b)
+}
+func (m *AuthorizationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AuthorizationErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *AuthorizationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AuthorizationErrorEnum.Merge(dst, src)
+}
+func (m *AuthorizationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_AuthorizationErrorEnum.Size(m)
+}
+func (m *AuthorizationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_AuthorizationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AuthorizationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*AuthorizationErrorEnum)(nil), "google.ads.googleads.v0.errors.AuthorizationErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.AuthorizationErrorEnum_AuthorizationError", AuthorizationErrorEnum_AuthorizationError_name, AuthorizationErrorEnum_AuthorizationError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/authorization_error.proto", fileDescriptor_authorization_error_bfcafdfe999de0f1)
+}
+
+var fileDescriptor_authorization_error_bfcafdfe999de0f1 = []byte{
+	// 390 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x6e, 0xd4, 0x30,
+	0x10, 0x86, 0x49, 0x0a, 0x2d, 0x72, 0x0f, 0x04, 0x53, 0x5a, 0xd4, 0xc3, 0x22, 0x2d, 0x77, 0x27,
+	0x12, 0x17, 0x24, 0x4e, 0x4e, 0x32, 0xec, 0x9a, 0xa6, 0xb6, 0xe5, 0x38, 0x5b, 0xa9, 0x8a, 0x64,
+	0x05, 0xb2, 0x0a, 0x2b, 0xb5, 0x71, 0x95, 0x6c, 0xf7, 0xc0, 0x43, 0xf0, 0x10, 0x1c, 0x79, 0x14,
+	0x24, 0x9e, 0x86, 0x17, 0x40, 0x4e, 0xd8, 0x15, 0x62, 0x05, 0x27, 0xff, 0x9a, 0xf9, 0xfe, 0xf9,
+	0xad, 0x19, 0xf4, 0xa6, 0xb1, 0xb6, 0xb9, 0x59, 0x86, 0x55, 0xdd, 0x87, 0xa3, 0x74, 0x6a, 0x13,
+	0x85, 0xcb, 0xae, 0xb3, 0x5d, 0x1f, 0x56, 0xf7, 0xeb, 0x4f, 0xb6, 0x5b, 0x7d, 0xae, 0xd6, 0x2b,
+	0xdb, 0x9a, 0xa1, 0x48, 0xee, 0x3a, 0xbb, 0xb6, 0x78, 0x32, 0xe2, 0xa4, 0xaa, 0x7b, 0xb2, 0x73,
+	0x92, 0x4d, 0x44, 0x46, 0xe7, 0xf4, 0x8b, 0x8f, 0x4e, 0xe9, 0x9f, 0x6e, 0x70, 0x75, 0x68, 0xef,
+	0x6f, 0xa7, 0x3f, 0x3d, 0x84, 0xf7, 0x5b, 0xf8, 0x09, 0x3a, 0x2e, 0x78, 0x2e, 0x21, 0x61, 0xef,
+	0x18, 0xa4, 0xc1, 0x03, 0x7c, 0x8c, 0x8e, 0x0a, 0x7e, 0xc1, 0xc5, 0x15, 0x0f, 0x3c, 0x7c, 0x8e,
+	0x4e, 0x8b, 0x1c, 0x94, 0x91, 0xa0, 0x2e, 0x59, 0x9e, 0x33, 0xc1, 0x4d, 0x0a, 0xdc, 0x81, 0x3e,
+	0x7e, 0x85, 0x5e, 0xa6, 0xb0, 0x80, 0x4c, 0x48, 0x50, 0x46, 0x8b, 0x0b, 0xe0, 0x86, 0x0b, 0x6d,
+	0xae, 0xe6, 0x4c, 0x43, 0xc6, 0x72, 0x0d, 0x69, 0x70, 0x80, 0x27, 0xe8, 0xfc, 0x6f, 0x48, 0x2a,
+	0x31, 0x67, 0x31, 0x73, 0xfd, 0x87, 0xf8, 0x04, 0x05, 0x52, 0x89, 0xf7, 0x90, 0x68, 0x93, 0xb2,
+	0x9c, 0xc6, 0x19, 0xa4, 0xc1, 0x23, 0x7c, 0x86, 0x9e, 0xd1, 0x42, 0xcf, 0x85, 0x62, 0xd7, 0x54,
+	0xbb, 0x50, 0x50, 0x4a, 0xa8, 0xe0, 0x10, 0xbf, 0x40, 0x27, 0x34, 0x19, 0x2a, 0x2e, 0x6a, 0xf8,
+	0x95, 0x76, 0x83, 0x8e, 0xf0, 0x73, 0xf4, 0x94, 0xf1, 0x44, 0x5c, 0xca, 0x0c, 0x34, 0x98, 0x9c,
+	0xcd, 0x78, 0x21, 0x83, 0xc7, 0xf1, 0x0f, 0x0f, 0x4d, 0x3f, 0xda, 0x5b, 0xf2, 0xff, 0xbd, 0xc5,
+	0x67, 0xfb, 0x9b, 0x91, 0x6e, 0xe1, 0xd2, 0xbb, 0x4e, 0x7f, 0x5b, 0x1b, 0x7b, 0x53, 0xb5, 0x0d,
+	0xb1, 0x5d, 0x13, 0x36, 0xcb, 0x76, 0x38, 0xc7, 0xf6, 0x78, 0x77, 0xab, 0xfe, 0x5f, 0xb7, 0x7c,
+	0x3b, 0x3e, 0x5f, 0xfd, 0x83, 0x19, 0xa5, 0xdf, 0xfc, 0xc9, 0x6c, 0x1c, 0x46, 0xeb, 0x9e, 0x8c,
+	0xd2, 0xa9, 0x45, 0x44, 0x86, 0xc8, 0xfe, 0xfb, 0x16, 0x28, 0x69, 0xdd, 0x97, 0x3b, 0xa0, 0x5c,
+	0x44, 0xe5, 0x08, 0x7c, 0x38, 0x1c, 0x82, 0x5f, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x28, 0x0d,
+	0x58, 0xa5, 0x43, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/bidding_error.pb.go b/googleapis/ads/googleads/v0/errors/bidding_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..de4e9ed083b5a558ced63fbab2c924ef77904c4b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/bidding_error.pb.go
@@ -0,0 +1,215 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/bidding_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible bidding errors.
+type BiddingErrorEnum_BiddingError int32
+
+const (
+	// Enum unspecified.
+	BiddingErrorEnum_UNSPECIFIED BiddingErrorEnum_BiddingError = 0
+	// The received error code is not known in this version.
+	BiddingErrorEnum_UNKNOWN BiddingErrorEnum_BiddingError = 1
+	// Cannot transition to new bidding strategy.
+	BiddingErrorEnum_BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED BiddingErrorEnum_BiddingError = 2
+	// Cannot attach bidding strategy to campaign.
+	BiddingErrorEnum_CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN BiddingErrorEnum_BiddingError = 7
+	// Bidding strategy is not supported or cannot be used as anonymous.
+	BiddingErrorEnum_INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE BiddingErrorEnum_BiddingError = 10
+	// The type does not match the named strategy's type.
+	BiddingErrorEnum_INVALID_BIDDING_STRATEGY_TYPE BiddingErrorEnum_BiddingError = 14
+	// The bid is invalid.
+	BiddingErrorEnum_INVALID_BID BiddingErrorEnum_BiddingError = 17
+	// Bidding strategy is not available for the account type.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE BiddingErrorEnum_BiddingError = 18
+	// Conversion tracking is not enabled for the campaign for VBB transition.
+	BiddingErrorEnum_CONVERSION_TRACKING_NOT_ENABLED BiddingErrorEnum_BiddingError = 19
+	// Not enough conversions tracked for VBB transitions.
+	BiddingErrorEnum_NOT_ENOUGH_CONVERSIONS BiddingErrorEnum_BiddingError = 20
+	// Campaign can not be created with given bidding strategy. It can be
+	// transitioned to the strategy, once eligible.
+	BiddingErrorEnum_CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY BiddingErrorEnum_BiddingError = 21
+	// Cannot target content network only as campaign uses Page One Promoted
+	// bidding strategy.
+	BiddingErrorEnum_CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY BiddingErrorEnum_BiddingError = 23
+	// Budget Optimizer and Target Spend bidding strategies are not supported
+	// for campaigns with AdSchedule targeting.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE BiddingErrorEnum_BiddingError = 24
+	// Pay per conversion is not available to all the customer, only few
+	// whitelisted customers can use this.
+	BiddingErrorEnum_PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER BiddingErrorEnum_BiddingError = 25
+	// Pay per conversion is not allowed with Target CPA.
+	BiddingErrorEnum_PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA BiddingErrorEnum_BiddingError = 26
+	// Cannot set bidding strategy to Manual CPM for search network only
+	// campaigns.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS BiddingErrorEnum_BiddingError = 27
+	// The bidding strategy is not supported for use in drafts or experiments.
+	BiddingErrorEnum_BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS BiddingErrorEnum_BiddingError = 28
+	// Bidding strategy type does not support product type ad group criterion.
+	BiddingErrorEnum_BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION BiddingErrorEnum_BiddingError = 29
+	// Bid amount is too small.
+	BiddingErrorEnum_BID_TOO_SMALL BiddingErrorEnum_BiddingError = 30
+	// Bid amount is too big.
+	BiddingErrorEnum_BID_TOO_BIG BiddingErrorEnum_BiddingError = 31
+	// Bid has too many fractional digit precision.
+	BiddingErrorEnum_BID_TOO_MANY_FRACTIONAL_DIGITS BiddingErrorEnum_BiddingError = 32
+	// Invalid domain name specified.
+	BiddingErrorEnum_INVALID_DOMAIN_NAME BiddingErrorEnum_BiddingError = 33
+)
+
+var BiddingErrorEnum_BiddingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED",
+	7:  "CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN",
+	10: "INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE",
+	14: "INVALID_BIDDING_STRATEGY_TYPE",
+	17: "INVALID_BID",
+	18: "BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE",
+	19: "CONVERSION_TRACKING_NOT_ENABLED",
+	20: "NOT_ENOUGH_CONVERSIONS",
+	21: "CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY",
+	23: "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY",
+	24: "BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE",
+	25: "PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER",
+	26: "PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA",
+	27: "BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS",
+	28: "BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS",
+	29: "BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION",
+	30: "BID_TOO_SMALL",
+	31: "BID_TOO_BIG",
+	32: "BID_TOO_MANY_FRACTIONAL_DIGITS",
+	33: "INVALID_DOMAIN_NAME",
+}
+var BiddingErrorEnum_BiddingError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED":                                     2,
+	"CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN":                                  7,
+	"INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE":                                     10,
+	"INVALID_BIDDING_STRATEGY_TYPE":                                               14,
+	"INVALID_BID":                                                                 17,
+	"BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE":                             18,
+	"CONVERSION_TRACKING_NOT_ENABLED":                                             19,
+	"NOT_ENOUGH_CONVERSIONS":                                                      20,
+	"CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY":                                21,
+	"CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY": 23,
+	"BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE":                             24,
+	"PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER":                               25,
+	"PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA":                              26,
+	"BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS":                      27,
+	"BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS":                     28,
+	"BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION":       29,
+	"BID_TOO_SMALL":                  30,
+	"BID_TOO_BIG":                    31,
+	"BID_TOO_MANY_FRACTIONAL_DIGITS": 32,
+	"INVALID_DOMAIN_NAME":            33,
+}
+
+func (x BiddingErrorEnum_BiddingError) String() string {
+	return proto.EnumName(BiddingErrorEnum_BiddingError_name, int32(x))
+}
+func (BiddingErrorEnum_BiddingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_error_04ed8b812bcf4766, []int{0, 0}
+}
+
+// Container for enum describing possible bidding errors.
+type BiddingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingErrorEnum) Reset()         { *m = BiddingErrorEnum{} }
+func (m *BiddingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingErrorEnum) ProtoMessage()    {}
+func (*BiddingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_error_04ed8b812bcf4766, []int{0}
+}
+func (m *BiddingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingErrorEnum.Unmarshal(m, b)
+}
+func (m *BiddingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *BiddingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingErrorEnum.Merge(dst, src)
+}
+func (m *BiddingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingErrorEnum.Size(m)
+}
+func (m *BiddingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BiddingErrorEnum)(nil), "google.ads.googleads.v0.errors.BiddingErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.BiddingErrorEnum_BiddingError", BiddingErrorEnum_BiddingError_name, BiddingErrorEnum_BiddingError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/bidding_error.proto", fileDescriptor_bidding_error_04ed8b812bcf4766)
+}
+
+var fileDescriptor_bidding_error_04ed8b812bcf4766 = []byte{
+	// 655 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xed, 0x6e, 0xd3, 0x4a,
+	0x10, 0xbd, 0xed, 0x95, 0x6e, 0xa4, 0xed, 0xfd, 0xd8, 0x6e, 0x2f, 0x14, 0x0a, 0x4d, 0x69, 0xf8,
+	0x81, 0xc4, 0x87, 0x13, 0x5a, 0x09, 0x24, 0xfa, 0x6b, 0xe2, 0x9d, 0x38, 0xab, 0xd8, 0xbb, 0xd6,
+	0xee, 0x3a, 0x21, 0x28, 0xd2, 0xaa, 0x25, 0x55, 0x54, 0xa9, 0x8d, 0xab, 0x04, 0xfa, 0x40, 0x88,
+	0x5f, 0xbc, 0x01, 0x4f, 0x80, 0xc4, 0x53, 0x21, 0x67, 0xe3, 0x10, 0x29, 0x29, 0xfc, 0xf2, 0xf8,
+	0xe8, 0x9c, 0x33, 0x3e, 0xeb, 0xd9, 0x21, 0x47, 0xa3, 0x3c, 0x1f, 0x5d, 0x9e, 0xd7, 0x4f, 0x87,
+	0xd3, 0xba, 0x2f, 0x8b, 0xea, 0xa6, 0x51, 0x3f, 0x9f, 0x4c, 0xf2, 0xc9, 0xb4, 0x7e, 0x76, 0x31,
+	0x1c, 0x5e, 0x8c, 0x47, 0x6e, 0xf6, 0x1a, 0x5c, 0x4f, 0xf2, 0x0f, 0x39, 0xab, 0x7a, 0x62, 0x70,
+	0x3a, 0x9c, 0x06, 0x0b, 0x4d, 0x70, 0xd3, 0x08, 0xbc, 0xa6, 0xf6, 0xb5, 0x42, 0x68, 0xd3, 0xeb,
+	0xb0, 0x40, 0x70, 0xfc, 0xf1, 0xaa, 0xf6, 0xb9, 0x42, 0xfe, 0x5e, 0x06, 0xd9, 0x7f, 0x64, 0x2b,
+	0x93, 0x26, 0xc5, 0x50, 0xb4, 0x04, 0x72, 0xfa, 0x07, 0xdb, 0x22, 0x95, 0x4c, 0x76, 0xa4, 0xea,
+	0x49, 0xba, 0xc1, 0x9e, 0x91, 0x27, 0x4d, 0xc1, 0xb9, 0x90, 0x91, 0x33, 0x56, 0x83, 0xc5, 0xa8,
+	0xef, 0xac, 0x06, 0x69, 0x84, 0x15, 0x4a, 0x3a, 0xa9, 0xac, 0x83, 0x38, 0x56, 0x3d, 0xe4, 0x74,
+	0x93, 0x05, 0xe4, 0x69, 0x08, 0x72, 0x86, 0x59, 0x0b, 0x61, 0xdb, 0xad, 0x4a, 0x95, 0x0b, 0x21,
+	0x49, 0x41, 0x44, 0x92, 0x56, 0x0a, 0x73, 0x21, 0xbb, 0x10, 0x0b, 0xee, 0x40, 0x2a, 0xd9, 0x4f,
+	0x54, 0x66, 0xd6, 0x68, 0xfa, 0x29, 0x52, 0xc2, 0x0e, 0xc9, 0x7e, 0x49, 0x5e, 0x4f, 0xf9, 0xb7,
+	0x88, 0xb2, 0x44, 0xa1, 0xdb, 0xec, 0x98, 0xd4, 0x57, 0xb8, 0xb3, 0xcf, 0xeb, 0x82, 0x88, 0xa1,
+	0x19, 0xa3, 0x6b, 0x29, 0xed, 0x20, 0x0c, 0x55, 0x26, 0xad, 0x77, 0x61, 0xec, 0x31, 0x39, 0x08,
+	0x95, 0xec, 0xa2, 0x36, 0x45, 0x42, 0xab, 0x21, 0xec, 0x14, 0x06, 0x85, 0x0e, 0x65, 0x21, 0xe2,
+	0x74, 0x87, 0xed, 0x91, 0xbb, 0x1e, 0x50, 0x59, 0xd4, 0x76, 0x3f, 0xf9, 0x86, 0xfe, 0xcf, 0x1a,
+	0xe4, 0xf9, 0xfc, 0x18, 0x42, 0x8d, 0x60, 0x71, 0x11, 0xd9, 0xf5, 0x84, 0x5d, 0x3d, 0x14, 0x7a,
+	0x87, 0x29, 0xd2, 0x99, 0x2b, 0x2c, 0xe8, 0x08, 0x6d, 0x61, 0x68, 0x51, 0x5a, 0x27, 0xd1, 0xf6,
+	0x94, 0xee, 0x38, 0x25, 0xe3, 0xbe, 0x57, 0x2f, 0xbc, 0x62, 0xec, 0x62, 0xec, 0x52, 0x95, 0xae,
+	0x1a, 0xee, 0xde, 0x1a, 0xdc, 0x64, 0x69, 0xaa, 0xb4, 0x45, 0xee, 0xcd, 0x80, 0x3b, 0x13, 0xb6,
+	0x91, 0x67, 0x31, 0xd2, 0x7b, 0xec, 0x25, 0x79, 0x91, 0x42, 0xdf, 0xa5, 0xa8, 0x97, 0x02, 0xad,
+	0x39, 0xaf, 0x30, 0x33, 0x56, 0x25, 0xa8, 0xe9, 0x7d, 0x76, 0x44, 0x82, 0xdb, 0x24, 0x7e, 0x2a,
+	0x7c, 0x9f, 0x32, 0x55, 0x0a, 0x74, 0x8f, 0xbd, 0x21, 0xaf, 0xd6, 0xff, 0x94, 0xb9, 0xa2, 0x68,
+	0x61, 0x10, 0x74, 0xd8, 0xf6, 0xb1, 0xcb, 0xc4, 0x86, 0x3e, 0x60, 0x27, 0xe4, 0xf5, 0x6f, 0x72,
+	0x09, 0xe9, 0xb8, 0x86, 0x96, 0x35, 0x4e, 0x69, 0x87, 0x6f, 0x53, 0xd4, 0x22, 0x41, 0x69, 0x0d,
+	0x7d, 0xc8, 0x04, 0xc1, 0xb5, 0x93, 0xe3, 0xb8, 0x42, 0xb3, 0x6c, 0xe3, 0x52, 0xad, 0x78, 0x16,
+	0xfa, 0x89, 0x70, 0xc0, 0x23, 0xad, 0xb2, 0xd4, 0x85, 0x5a, 0x58, 0xd4, 0x42, 0x49, 0xba, 0xcf,
+	0xb6, 0xc9, 0x3f, 0x4d, 0xc1, 0x9d, 0x55, 0xca, 0x99, 0x04, 0xe2, 0x98, 0x56, 0x8b, 0xe1, 0x2b,
+	0xa1, 0xa6, 0x88, 0xe8, 0x01, 0xab, 0x91, 0x6a, 0x09, 0x24, 0x20, 0xfb, 0xae, 0xa5, 0x21, 0x2c,
+	0x2e, 0x0d, 0xc4, 0x8e, 0x8b, 0x48, 0x58, 0x43, 0x1f, 0xb1, 0x5d, 0xb2, 0x53, 0x4e, 0x2c, 0x57,
+	0x09, 0x08, 0xe9, 0x24, 0x24, 0x48, 0x0f, 0x9b, 0xdf, 0x36, 0x48, 0xed, 0x7d, 0x7e, 0x15, 0xfc,
+	0xfa, 0x8a, 0x37, 0xb7, 0x97, 0xaf, 0x72, 0x5a, 0x6c, 0x85, 0x74, 0xe3, 0x1d, 0x9f, 0x8b, 0x46,
+	0xf9, 0xe5, 0xe9, 0x78, 0x14, 0xe4, 0x93, 0x51, 0x7d, 0x74, 0x3e, 0x9e, 0xed, 0x8c, 0x72, 0xb7,
+	0x5c, 0x5f, 0x4c, 0x6f, 0x5b, 0x35, 0x27, 0xfe, 0xf1, 0x69, 0xf3, 0xcf, 0x08, 0xe0, 0xcb, 0x66,
+	0x35, 0xf2, 0x66, 0x30, 0x9c, 0x06, 0xbe, 0x2c, 0xaa, 0x6e, 0x23, 0x98, 0xb5, 0x9c, 0x7e, 0x2f,
+	0x09, 0x03, 0x18, 0x4e, 0x07, 0x0b, 0xc2, 0xa0, 0xdb, 0x18, 0x78, 0xc2, 0xd9, 0x5f, 0xb3, 0xc6,
+	0xc7, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x66, 0x6a, 0x7a, 0x65, 0xe2, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/bidding_strategy_error.pb.go b/googleapis/ads/googleads/v0/errors/bidding_strategy_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..fe89c8a581341ea07dfa12ca074e43cac7663b5d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/bidding_strategy_error.pb.go
@@ -0,0 +1,128 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/bidding_strategy_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible bidding strategy errors.
+type BiddingStrategyErrorEnum_BiddingStrategyError int32
+
+const (
+	// Enum unspecified.
+	BiddingStrategyErrorEnum_UNSPECIFIED BiddingStrategyErrorEnum_BiddingStrategyError = 0
+	// The received error code is not known in this version.
+	BiddingStrategyErrorEnum_UNKNOWN BiddingStrategyErrorEnum_BiddingStrategyError = 1
+	// Each bidding strategy must have a unique name.
+	BiddingStrategyErrorEnum_DUPLICATE_NAME BiddingStrategyErrorEnum_BiddingStrategyError = 2
+	// Bidding strategy type is immutable.
+	BiddingStrategyErrorEnum_CANNOT_CHANGE_BIDDING_STRATEGY_TYPE BiddingStrategyErrorEnum_BiddingStrategyError = 3
+	// Only bidding strategies not linked to campaigns, adgroups or adgroup
+	// criteria can be removed.
+	BiddingStrategyErrorEnum_CANNOT_REMOVE_ASSOCIATED_STRATEGY BiddingStrategyErrorEnum_BiddingStrategyError = 4
+	// The specified bidding strategy is not supported.
+	BiddingStrategyErrorEnum_BIDDING_STRATEGY_NOT_SUPPORTED BiddingStrategyErrorEnum_BiddingStrategyError = 5
+)
+
+var BiddingStrategyErrorEnum_BiddingStrategyError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DUPLICATE_NAME",
+	3: "CANNOT_CHANGE_BIDDING_STRATEGY_TYPE",
+	4: "CANNOT_REMOVE_ASSOCIATED_STRATEGY",
+	5: "BIDDING_STRATEGY_NOT_SUPPORTED",
+}
+var BiddingStrategyErrorEnum_BiddingStrategyError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"DUPLICATE_NAME":                      2,
+	"CANNOT_CHANGE_BIDDING_STRATEGY_TYPE": 3,
+	"CANNOT_REMOVE_ASSOCIATED_STRATEGY":   4,
+	"BIDDING_STRATEGY_NOT_SUPPORTED":      5,
+}
+
+func (x BiddingStrategyErrorEnum_BiddingStrategyError) String() string {
+	return proto.EnumName(BiddingStrategyErrorEnum_BiddingStrategyError_name, int32(x))
+}
+func (BiddingStrategyErrorEnum_BiddingStrategyError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_error_e371ee92178e1434, []int{0, 0}
+}
+
+// Container for enum describing possible bidding strategy errors.
+type BiddingStrategyErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BiddingStrategyErrorEnum) Reset()         { *m = BiddingStrategyErrorEnum{} }
+func (m *BiddingStrategyErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategyErrorEnum) ProtoMessage()    {}
+func (*BiddingStrategyErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_error_e371ee92178e1434, []int{0}
+}
+func (m *BiddingStrategyErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategyErrorEnum.Unmarshal(m, b)
+}
+func (m *BiddingStrategyErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategyErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *BiddingStrategyErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategyErrorEnum.Merge(dst, src)
+}
+func (m *BiddingStrategyErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategyErrorEnum.Size(m)
+}
+func (m *BiddingStrategyErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategyErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategyErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BiddingStrategyErrorEnum)(nil), "google.ads.googleads.v0.errors.BiddingStrategyErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.BiddingStrategyErrorEnum_BiddingStrategyError", BiddingStrategyErrorEnum_BiddingStrategyError_name, BiddingStrategyErrorEnum_BiddingStrategyError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/bidding_strategy_error.proto", fileDescriptor_bidding_strategy_error_e371ee92178e1434)
+}
+
+var fileDescriptor_bidding_strategy_error_e371ee92178e1434 = []byte{
+	// 347 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xeb, 0x40,
+	0x18, 0x85, 0x6f, 0xda, 0x7b, 0xaf, 0x30, 0x05, 0x0d, 0x83, 0x0b, 0xdd, 0x14, 0x8c, 0x88, 0xbb,
+	0x49, 0xc0, 0x65, 0x57, 0x93, 0x64, 0x8c, 0x41, 0x3b, 0x09, 0xcd, 0xa4, 0x52, 0x09, 0x0c, 0xa9,
+	0x09, 0x43, 0xa1, 0xcd, 0x94, 0x4c, 0x2d, 0xf8, 0x3a, 0x2e, 0x7d, 0x06, 0x9f, 0xc0, 0x8d, 0x6b,
+	0xdf, 0x46, 0x92, 0x69, 0xbb, 0xb1, 0xba, 0xca, 0x21, 0xff, 0xf9, 0xce, 0xcf, 0x9c, 0x1f, 0x0c,
+	0x84, 0x94, 0x62, 0x5e, 0xda, 0x79, 0xa1, 0x6c, 0x2d, 0x1b, 0xb5, 0x76, 0xec, 0xb2, 0xae, 0x65,
+	0xad, 0xec, 0xe9, 0xac, 0x28, 0x66, 0x95, 0xe0, 0x6a, 0x55, 0xe7, 0xab, 0x52, 0x3c, 0xf3, 0xf6,
+	0x3f, 0x5a, 0xd6, 0x72, 0x25, 0x61, 0x5f, 0x13, 0x28, 0x2f, 0x14, 0xda, 0xc1, 0x68, 0xed, 0x20,
+	0x0d, 0x5b, 0x9f, 0x06, 0x38, 0x71, 0x75, 0x40, 0xb2, 0xe1, 0x49, 0x33, 0x21, 0xd5, 0xd3, 0xc2,
+	0x7a, 0x33, 0xc0, 0xf1, 0xbe, 0x21, 0x3c, 0x02, 0xbd, 0x94, 0x26, 0x31, 0xf1, 0xc2, 0xeb, 0x90,
+	0xf8, 0xe6, 0x1f, 0xd8, 0x03, 0x07, 0x29, 0xbd, 0xa5, 0xd1, 0x3d, 0x35, 0x0d, 0x08, 0xc1, 0xa1,
+	0x9f, 0xc6, 0x77, 0xa1, 0x87, 0x19, 0xe1, 0x14, 0x0f, 0x89, 0xd9, 0x81, 0x97, 0xe0, 0xdc, 0xc3,
+	0x94, 0x46, 0x8c, 0x7b, 0x37, 0x98, 0x06, 0x84, 0xbb, 0xa1, 0xef, 0x87, 0x34, 0xe0, 0x09, 0x1b,
+	0x61, 0x46, 0x82, 0x09, 0x67, 0x93, 0x98, 0x98, 0x5d, 0x78, 0x01, 0xce, 0x36, 0xc6, 0x11, 0x19,
+	0x46, 0x63, 0xc2, 0x71, 0x92, 0x44, 0x5e, 0x88, 0x19, 0xf1, 0x77, 0x5e, 0xf3, 0x2f, 0xb4, 0x40,
+	0xff, 0x5b, 0x42, 0x03, 0x25, 0x69, 0x1c, 0x47, 0x23, 0x46, 0x7c, 0xf3, 0x9f, 0xfb, 0x61, 0x00,
+	0xeb, 0x51, 0x2e, 0xd0, 0xef, 0x15, 0xb8, 0xa7, 0xfb, 0x9e, 0x18, 0x37, 0xed, 0xc5, 0xc6, 0x83,
+	0xbf, 0x81, 0x85, 0x9c, 0xe7, 0x95, 0x40, 0xb2, 0x16, 0xb6, 0x28, 0xab, 0xb6, 0xdb, 0xed, 0x31,
+	0x96, 0x33, 0xf5, 0xd3, 0x6d, 0x06, 0xfa, 0xf3, 0xd2, 0xe9, 0x06, 0x18, 0xbf, 0x76, 0xfa, 0x81,
+	0x0e, 0xc3, 0x85, 0x42, 0x5a, 0x36, 0x6a, 0xec, 0xa0, 0x76, 0xa5, 0x7a, 0xdf, 0x1a, 0x32, 0x5c,
+	0xa8, 0x6c, 0x67, 0xc8, 0xc6, 0x4e, 0xa6, 0x0d, 0xd3, 0xff, 0xed, 0xe2, 0xab, 0xaf, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0xa8, 0x67, 0x71, 0x4a, 0x13, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/billing_setup_error.pb.go b/googleapis/ads/googleads/v0/errors/billing_setup_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8f7b6aa5e28c1f6213ded40d0bd6209c2845954b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/billing_setup_error.pb.go
@@ -0,0 +1,195 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/billing_setup_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible billing setup errors.
+type BillingSetupErrorEnum_BillingSetupError int32
+
+const (
+	// Enum unspecified.
+	BillingSetupErrorEnum_UNSPECIFIED BillingSetupErrorEnum_BillingSetupError = 0
+	// The received error code is not known in this version.
+	BillingSetupErrorEnum_UNKNOWN BillingSetupErrorEnum_BillingSetupError = 1
+	// Cannot use both an existing Payments account and a new Payments account
+	// when setting up billing.
+	BillingSetupErrorEnum_CANNOT_USE_EXISTING_AND_NEW_ACCOUNT BillingSetupErrorEnum_BillingSetupError = 2
+	// Cannot cancel an APPROVED billing setup whose start time has passed.
+	BillingSetupErrorEnum_CANNOT_REMOVE_STARTED_BILLING_SETUP BillingSetupErrorEnum_BillingSetupError = 3
+	// Cannot perform a Change of Bill-To (CBT) to the same Payments account.
+	BillingSetupErrorEnum_CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT BillingSetupErrorEnum_BillingSetupError = 4
+	// Billing Setups can only be used by customers with ENABLED or DRAFT
+	// status.
+	BillingSetupErrorEnum_BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS BillingSetupErrorEnum_BillingSetupError = 5
+	// Billing Setups must either include a correctly formatted existing
+	// Payments account id, or a non-empty new Payments account name.
+	BillingSetupErrorEnum_INVALID_PAYMENTS_ACCOUNT BillingSetupErrorEnum_BillingSetupError = 6
+	// Only billable and third party customers can create billing setups.
+	BillingSetupErrorEnum_BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY BillingSetupErrorEnum_BillingSetupError = 7
+	// Billing Setup creations can only use NOW for start time type.
+	BillingSetupErrorEnum_INVALID_START_TIME_TYPE BillingSetupErrorEnum_BillingSetupError = 8
+	// Billing Setups can only be created for a third party customer if they do
+	// not already have a setup.
+	BillingSetupErrorEnum_THIRD_PARTY_ALREADY_HAS_BILLING BillingSetupErrorEnum_BillingSetupError = 9
+	// Billing Setups cannot be created if there is already a pending billing in
+	// progress, ie. a billing known to Payments.
+	BillingSetupErrorEnum_BILLING_SETUP_IN_PROGRESS BillingSetupErrorEnum_BillingSetupError = 10
+	// Billing Setups can only be created by customers who have permission to
+	// setup billings. Users can contact a representative for help setting up
+	// permissions.
+	BillingSetupErrorEnum_NO_SIGNUP_PERMISSION BillingSetupErrorEnum_BillingSetupError = 11
+	// Billing Setups cannot be created if there is already a future-approved
+	// billing.
+	BillingSetupErrorEnum_CHANGE_OF_BILL_TO_IN_PROGRESS BillingSetupErrorEnum_BillingSetupError = 12
+	// Billing Setup creation failed because Payments could not find the
+	// requested Payments profile.
+	BillingSetupErrorEnum_PAYMENTS_PROFILE_NOT_FOUND BillingSetupErrorEnum_BillingSetupError = 13
+	// Billing Setup creation failed because Payments could not find the
+	// requested Payments account.
+	BillingSetupErrorEnum_PAYMENTS_ACCOUNT_NOT_FOUND BillingSetupErrorEnum_BillingSetupError = 14
+	// Billing Setup creation failed because Payments considers requested
+	// Payments profile ineligible.
+	BillingSetupErrorEnum_PAYMENTS_PROFILE_INELIGIBLE BillingSetupErrorEnum_BillingSetupError = 15
+	// Billing Setup creation failed because Payments considers requested
+	// Payments account ineligible.
+	BillingSetupErrorEnum_PAYMENTS_ACCOUNT_INELIGIBLE BillingSetupErrorEnum_BillingSetupError = 16
+)
+
+var BillingSetupErrorEnum_BillingSetupError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CANNOT_USE_EXISTING_AND_NEW_ACCOUNT",
+	3:  "CANNOT_REMOVE_STARTED_BILLING_SETUP",
+	4:  "CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT",
+	5:  "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS",
+	6:  "INVALID_PAYMENTS_ACCOUNT",
+	7:  "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY",
+	8:  "INVALID_START_TIME_TYPE",
+	9:  "THIRD_PARTY_ALREADY_HAS_BILLING",
+	10: "BILLING_SETUP_IN_PROGRESS",
+	11: "NO_SIGNUP_PERMISSION",
+	12: "CHANGE_OF_BILL_TO_IN_PROGRESS",
+	13: "PAYMENTS_PROFILE_NOT_FOUND",
+	14: "PAYMENTS_ACCOUNT_NOT_FOUND",
+	15: "PAYMENTS_PROFILE_INELIGIBLE",
+	16: "PAYMENTS_ACCOUNT_INELIGIBLE",
+}
+var BillingSetupErrorEnum_BillingSetupError_value = map[string]int32{
+	"UNSPECIFIED":                                       0,
+	"UNKNOWN":                                           1,
+	"CANNOT_USE_EXISTING_AND_NEW_ACCOUNT":               2,
+	"CANNOT_REMOVE_STARTED_BILLING_SETUP":               3,
+	"CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT":    4,
+	"BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS":   5,
+	"INVALID_PAYMENTS_ACCOUNT":                          6,
+	"BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY": 7,
+	"INVALID_START_TIME_TYPE":                           8,
+	"THIRD_PARTY_ALREADY_HAS_BILLING":                   9,
+	"BILLING_SETUP_IN_PROGRESS":                         10,
+	"NO_SIGNUP_PERMISSION":                              11,
+	"CHANGE_OF_BILL_TO_IN_PROGRESS":                     12,
+	"PAYMENTS_PROFILE_NOT_FOUND":                        13,
+	"PAYMENTS_ACCOUNT_NOT_FOUND":                        14,
+	"PAYMENTS_PROFILE_INELIGIBLE":                       15,
+	"PAYMENTS_ACCOUNT_INELIGIBLE":                       16,
+}
+
+func (x BillingSetupErrorEnum_BillingSetupError) String() string {
+	return proto.EnumName(BillingSetupErrorEnum_BillingSetupError_name, int32(x))
+}
+func (BillingSetupErrorEnum_BillingSetupError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_error_107368948c349ada, []int{0, 0}
+}
+
+// Container for enum describing possible billing setup errors.
+type BillingSetupErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BillingSetupErrorEnum) Reset()         { *m = BillingSetupErrorEnum{} }
+func (m *BillingSetupErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*BillingSetupErrorEnum) ProtoMessage()    {}
+func (*BillingSetupErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_error_107368948c349ada, []int{0}
+}
+func (m *BillingSetupErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetupErrorEnum.Unmarshal(m, b)
+}
+func (m *BillingSetupErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetupErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *BillingSetupErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetupErrorEnum.Merge(dst, src)
+}
+func (m *BillingSetupErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_BillingSetupErrorEnum.Size(m)
+}
+func (m *BillingSetupErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetupErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetupErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*BillingSetupErrorEnum)(nil), "google.ads.googleads.v0.errors.BillingSetupErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.BillingSetupErrorEnum_BillingSetupError", BillingSetupErrorEnum_BillingSetupError_name, BillingSetupErrorEnum_BillingSetupError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/billing_setup_error.proto", fileDescriptor_billing_setup_error_107368948c349ada)
+}
+
+var fileDescriptor_billing_setup_error_107368948c349ada = []byte{
+	// 530 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x69, 0x57, 0x36, 0x70, 0x81, 0x19, 0x8b, 0x3f, 0x83, 0xb1, 0x4e, 0x74, 0x17, 0xdc,
+	0x25, 0x85, 0x09, 0x09, 0x89, 0x2b, 0x37, 0x39, 0x4d, 0x2d, 0x12, 0x3b, 0xb2, 0x9d, 0x8e, 0xa2,
+	0x4a, 0x56, 0x47, 0xab, 0xa8, 0x52, 0xd7, 0x54, 0xcd, 0xb6, 0x07, 0xe2, 0x92, 0x47, 0x41, 0xbc,
+	0x04, 0xcf, 0xc1, 0x0d, 0x72, 0xd2, 0x56, 0xad, 0x2a, 0x10, 0x57, 0x39, 0xb2, 0xbf, 0xdf, 0xf7,
+	0xe5, 0x1c, 0x1d, 0xa3, 0x0f, 0x69, 0x96, 0xa5, 0xd3, 0xb1, 0x3b, 0x1c, 0xe5, 0x6e, 0x59, 0xda,
+	0xea, 0xb6, 0xe5, 0x8e, 0x17, 0x8b, 0x6c, 0x91, 0xbb, 0x97, 0x93, 0xe9, 0x74, 0x32, 0x4b, 0x4d,
+	0x3e, 0xbe, 0xbe, 0x99, 0x9b, 0xe2, 0xd0, 0x99, 0x2f, 0xb2, 0xeb, 0x8c, 0x34, 0x4a, 0xb9, 0x33,
+	0x1c, 0xe5, 0xce, 0x9a, 0x74, 0x6e, 0x5b, 0x4e, 0x49, 0x36, 0x7f, 0xd7, 0xd0, 0xd3, 0x76, 0x49,
+	0x2b, 0x0b, 0x83, 0x3d, 0x86, 0xd9, 0xcd, 0x55, 0xf3, 0x57, 0x0d, 0x3d, 0xde, 0xb9, 0x21, 0x87,
+	0xa8, 0x9e, 0x70, 0x15, 0x83, 0xc7, 0x3a, 0x0c, 0x7c, 0x7c, 0x87, 0xd4, 0xd1, 0x41, 0xc2, 0x3f,
+	0x71, 0x71, 0xc1, 0x71, 0x85, 0xbc, 0x41, 0x67, 0x1e, 0xe5, 0x5c, 0x68, 0x93, 0x28, 0x30, 0xf0,
+	0x99, 0x29, 0xcd, 0x78, 0x60, 0x28, 0xf7, 0x0d, 0x87, 0x0b, 0x43, 0x3d, 0x4f, 0x24, 0x5c, 0xe3,
+	0xea, 0x86, 0x50, 0x42, 0x24, 0x7a, 0x60, 0x94, 0xa6, 0x52, 0x83, 0x6f, 0xda, 0x2c, 0x0c, 0x2d,
+	0xa2, 0x40, 0x27, 0x31, 0xde, 0x23, 0xef, 0x90, 0xb3, 0x14, 0x7a, 0x5d, 0xca, 0x03, 0x58, 0x0b,
+	0xb4, 0x30, 0x8a, 0x46, 0x60, 0x62, 0xda, 0x8f, 0x80, 0x6b, 0xb5, 0x36, 0xaf, 0x91, 0x73, 0xe4,
+	0x6e, 0xd9, 0x18, 0x8b, 0xc7, 0x20, 0x23, 0xa6, 0x6d, 0x44, 0x47, 0x48, 0xe3, 0x25, 0x4a, 0x8b,
+	0x08, 0xa4, 0xcd, 0xd5, 0x89, 0xc2, 0x77, 0xc9, 0x2b, 0x74, 0xc4, 0x78, 0x8f, 0x86, 0xcc, 0xdf,
+	0xb5, 0xdc, 0x27, 0xef, 0xd1, 0xdb, 0xff, 0xb6, 0xf4, 0xa8, 0x86, 0x40, 0xc8, 0x3e, 0x3e, 0x20,
+	0xc7, 0xe8, 0xf9, 0xca, 0xb4, 0x68, 0xd0, 0x68, 0x16, 0x81, 0xd1, 0xfd, 0x18, 0xf0, 0x3d, 0x72,
+	0x86, 0x4e, 0x75, 0x97, 0x49, 0x9b, 0x27, 0x75, 0xdf, 0xd0, 0x50, 0x02, 0xf5, 0xfb, 0xa6, 0x4b,
+	0xd5, 0xaa, 0x49, 0x7c, 0x9f, 0x9c, 0xa0, 0x17, 0xdb, 0xc1, 0x8c, 0x9b, 0x58, 0x8a, 0x40, 0x82,
+	0x52, 0x18, 0x91, 0x23, 0xf4, 0x84, 0x0b, 0xa3, 0x58, 0xc0, 0x93, 0xb8, 0xfc, 0x1f, 0xa5, 0x98,
+	0xe0, 0xb8, 0x4e, 0x5e, 0xa3, 0x93, 0xe5, 0xc4, 0x44, 0xa7, 0xf0, 0xb3, 0x13, 0xdb, 0x84, 0x1f,
+	0x90, 0x06, 0x7a, 0xb9, 0x6e, 0x35, 0x96, 0xa2, 0xc3, 0x42, 0x28, 0xfa, 0xea, 0x88, 0x84, 0xfb,
+	0xf8, 0xe1, 0xd6, 0xfd, 0x72, 0x14, 0x1b, 0xf7, 0x8f, 0xc8, 0x29, 0x3a, 0xde, 0xe1, 0x19, 0x87,
+	0x90, 0x05, 0xac, 0x1d, 0x02, 0x3e, 0xdc, 0x12, 0xac, 0x0c, 0x36, 0x04, 0xb8, 0xfd, 0xb3, 0x82,
+	0x9a, 0x5f, 0xb3, 0x2b, 0xe7, 0xdf, 0x4b, 0xda, 0x7e, 0xb6, 0xb3, 0x87, 0xb1, 0x5d, 0xee, 0xb8,
+	0xf2, 0xc5, 0x5f, 0x92, 0x69, 0x36, 0x1d, 0xce, 0x52, 0x27, 0x5b, 0xa4, 0x6e, 0x3a, 0x9e, 0x15,
+	0xab, 0xbf, 0x7a, 0x28, 0xf3, 0x49, 0xfe, 0xb7, 0x77, 0xf3, 0xb1, 0xfc, 0x7c, 0xab, 0xee, 0x05,
+	0x94, 0x7e, 0xaf, 0x36, 0x82, 0xd2, 0x8c, 0x8e, 0x72, 0xa7, 0x2c, 0x6d, 0xd5, 0x6b, 0x39, 0x45,
+	0x64, 0xfe, 0x63, 0x25, 0x18, 0xd0, 0x51, 0x3e, 0x58, 0x0b, 0x06, 0xbd, 0xd6, 0xa0, 0x14, 0x5c,
+	0xee, 0x17, 0xc1, 0xe7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xee, 0x6c, 0xd2, 0x8a, 0xaf, 0x03,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/campaign_budget_error.pb.go b/googleapis/ads/googleads/v0/errors/campaign_budget_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9eb71b9bc69b5fb54bf243bf7da7d189c056fab3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/campaign_budget_error.pb.go
@@ -0,0 +1,188 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/campaign_budget_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible campaign budget errors.
+type CampaignBudgetErrorEnum_CampaignBudgetError int32
+
+const (
+	// Enum unspecified.
+	CampaignBudgetErrorEnum_UNSPECIFIED CampaignBudgetErrorEnum_CampaignBudgetError = 0
+	// The received error code is not known in this version.
+	CampaignBudgetErrorEnum_UNKNOWN CampaignBudgetErrorEnum_CampaignBudgetError = 1
+	// The campaign budget cannot be shared.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_CANNOT_BE_SHARED CampaignBudgetErrorEnum_CampaignBudgetError = 17
+	// The requested campaign budget no longer exists.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_REMOVED CampaignBudgetErrorEnum_CampaignBudgetError = 2
+	// The campaign budget is associated with at least one campaign, and so the
+	// campaign budget cannot be removed.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_IN_USE CampaignBudgetErrorEnum_CampaignBudgetError = 3
+	// Customer is not whitelisted for this campaign budget period.
+	CampaignBudgetErrorEnum_CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE CampaignBudgetErrorEnum_CampaignBudgetError = 4
+	// This field is not mutable on implicitly shared campaign budgets
+	CampaignBudgetErrorEnum_CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET CampaignBudgetErrorEnum_CampaignBudgetError = 6
+	// Cannot change explicitly shared campaign budgets back to implicitly
+	// shared ones.
+	CampaignBudgetErrorEnum_CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED CampaignBudgetErrorEnum_CampaignBudgetError = 7
+	// An implicit campaign budget without a name cannot be changed to
+	// explicitly shared campaign budget.
+	CampaignBudgetErrorEnum_CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME CampaignBudgetErrorEnum_CampaignBudgetError = 8
+	// Cannot change an implicitly shared campaign budget to an explicitly
+	// shared one.
+	CampaignBudgetErrorEnum_CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED CampaignBudgetErrorEnum_CampaignBudgetError = 9
+	// Only explicitly shared campaign budgets can be used with multiple
+	// campaigns.
+	CampaignBudgetErrorEnum_CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS CampaignBudgetErrorEnum_CampaignBudgetError = 10
+	// A campaign budget with this name already exists.
+	CampaignBudgetErrorEnum_DUPLICATE_NAME CampaignBudgetErrorEnum_CampaignBudgetError = 11
+	// A money amount was not in the expected currency.
+	CampaignBudgetErrorEnum_MONEY_AMOUNT_IN_WRONG_CURRENCY CampaignBudgetErrorEnum_CampaignBudgetError = 12
+	// A money amount was less than the minimum CPC for currency.
+	CampaignBudgetErrorEnum_MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC CampaignBudgetErrorEnum_CampaignBudgetError = 13
+	// A money amount was greater than the maximum allowed.
+	CampaignBudgetErrorEnum_MONEY_AMOUNT_TOO_LARGE CampaignBudgetErrorEnum_CampaignBudgetError = 14
+	// A money amount was negative.
+	CampaignBudgetErrorEnum_NEGATIVE_MONEY_AMOUNT CampaignBudgetErrorEnum_CampaignBudgetError = 15
+	// A money amount was not a multiple of a minimum unit.
+	CampaignBudgetErrorEnum_NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT CampaignBudgetErrorEnum_CampaignBudgetError = 16
+)
+
+var CampaignBudgetErrorEnum_CampaignBudgetError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	17: "CAMPAIGN_BUDGET_CANNOT_BE_SHARED",
+	2:  "CAMPAIGN_BUDGET_REMOVED",
+	3:  "CAMPAIGN_BUDGET_IN_USE",
+	4:  "CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE",
+	6:  "CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET",
+	7:  "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED",
+	8:  "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME",
+	9:  "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED",
+	10: "CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS",
+	11: "DUPLICATE_NAME",
+	12: "MONEY_AMOUNT_IN_WRONG_CURRENCY",
+	13: "MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC",
+	14: "MONEY_AMOUNT_TOO_LARGE",
+	15: "NEGATIVE_MONEY_AMOUNT",
+	16: "NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT",
+}
+var CampaignBudgetErrorEnum_CampaignBudgetError_value = map[string]int32{
+	"UNSPECIFIED":                          0,
+	"UNKNOWN":                              1,
+	"CAMPAIGN_BUDGET_CANNOT_BE_SHARED":     17,
+	"CAMPAIGN_BUDGET_REMOVED":              2,
+	"CAMPAIGN_BUDGET_IN_USE":               3,
+	"CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE": 4,
+	"CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET":             6,
+	"CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED":                   7,
+	"CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME":      8,
+	"CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED":                   9,
+	"CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS": 10,
+	"DUPLICATE_NAME":                              11,
+	"MONEY_AMOUNT_IN_WRONG_CURRENCY":              12,
+	"MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC": 13,
+	"MONEY_AMOUNT_TOO_LARGE":                      14,
+	"NEGATIVE_MONEY_AMOUNT":                       15,
+	"NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT":       16,
+}
+
+func (x CampaignBudgetErrorEnum_CampaignBudgetError) String() string {
+	return proto.EnumName(CampaignBudgetErrorEnum_CampaignBudgetError_name, int32(x))
+}
+func (CampaignBudgetErrorEnum_CampaignBudgetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_error_ab6396a2a8fee8c4, []int{0, 0}
+}
+
+// Container for enum describing possible campaign budget errors.
+type CampaignBudgetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignBudgetErrorEnum) Reset()         { *m = CampaignBudgetErrorEnum{} }
+func (m *CampaignBudgetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignBudgetErrorEnum) ProtoMessage()    {}
+func (*CampaignBudgetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_error_ab6396a2a8fee8c4, []int{0}
+}
+func (m *CampaignBudgetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBudgetErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignBudgetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBudgetErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignBudgetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBudgetErrorEnum.Merge(dst, src)
+}
+func (m *CampaignBudgetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignBudgetErrorEnum.Size(m)
+}
+func (m *CampaignBudgetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBudgetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBudgetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignBudgetErrorEnum)(nil), "google.ads.googleads.v0.errors.CampaignBudgetErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CampaignBudgetErrorEnum_CampaignBudgetError", CampaignBudgetErrorEnum_CampaignBudgetError_name, CampaignBudgetErrorEnum_CampaignBudgetError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/campaign_budget_error.proto", fileDescriptor_campaign_budget_error_ab6396a2a8fee8c4)
+}
+
+var fileDescriptor_campaign_budget_error_ab6396a2a8fee8c4 = []byte{
+	// 544 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x6a, 0xd4, 0x4e,
+	0x14, 0xc7, 0x7f, 0xdd, 0xfe, 0xda, 0xea, 0xac, 0xb6, 0xe3, 0x88, 0xd6, 0x3f, 0xb0, 0xc8, 0x52,
+	0x41, 0x11, 0x92, 0x45, 0x41, 0x44, 0x05, 0x99, 0x24, 0x67, 0xb3, 0x83, 0x99, 0x99, 0x90, 0xcc,
+	0xec, 0xba, 0xb2, 0x30, 0x6c, 0xbb, 0x4b, 0x28, 0x74, 0x37, 0xcb, 0xa6, 0xed, 0x03, 0x79, 0xe9,
+	0x73, 0x78, 0xe5, 0x85, 0xcf, 0xe0, 0xa3, 0x48, 0x92, 0xfd, 0x63, 0xd3, 0x6a, 0xbd, 0xca, 0x21,
+	0xe7, 0xfb, 0x39, 0x9f, 0x09, 0x93, 0x83, 0xde, 0x26, 0x69, 0x9a, 0x9c, 0x8c, 0xed, 0xe1, 0x28,
+	0xb3, 0xcb, 0x32, 0xaf, 0xce, 0x5b, 0xf6, 0x78, 0x3e, 0x4f, 0xe7, 0x99, 0x7d, 0x34, 0x9c, 0xcc,
+	0x86, 0xc7, 0xc9, 0xd4, 0x1c, 0x9e, 0x8d, 0x92, 0xf1, 0xa9, 0x29, 0x5e, 0x5b, 0xb3, 0x79, 0x7a,
+	0x9a, 0x92, 0x46, 0x09, 0x58, 0xc3, 0x51, 0x66, 0xad, 0x58, 0xeb, 0xbc, 0x65, 0x95, 0x6c, 0xf3,
+	0xe7, 0x16, 0xda, 0x77, 0x17, 0xbc, 0x53, 0xe0, 0x90, 0x37, 0x60, 0x7a, 0x36, 0x69, 0x7e, 0xdb,
+	0x42, 0x77, 0xaf, 0xe8, 0x91, 0x3d, 0x54, 0xd7, 0x22, 0x0e, 0xc1, 0x65, 0x6d, 0x06, 0x1e, 0xfe,
+	0x8f, 0xd4, 0xd1, 0x8e, 0x16, 0x1f, 0x85, 0xec, 0x09, 0xbc, 0x41, 0x0e, 0xd0, 0x13, 0x97, 0xf2,
+	0x90, 0x32, 0x5f, 0x18, 0x47, 0x7b, 0x3e, 0x28, 0xe3, 0x52, 0x21, 0xa4, 0x32, 0x0e, 0x98, 0xb8,
+	0x43, 0x23, 0xf0, 0xf0, 0x1d, 0xf2, 0x18, 0xed, 0x57, 0x53, 0x11, 0x70, 0xd9, 0x05, 0x0f, 0xd7,
+	0xc8, 0x23, 0x74, 0xbf, 0xda, 0x64, 0xc2, 0xe8, 0x18, 0xf0, 0x26, 0x79, 0x86, 0x0e, 0xaa, 0xbd,
+	0x10, 0x22, 0x26, 0x3d, 0x93, 0x2b, 0x68, 0x97, 0xb2, 0x80, 0x3a, 0x01, 0xe0, 0xff, 0xc9, 0x7b,
+	0xf4, 0x66, 0x21, 0xe6, 0xd2, 0x63, 0xed, 0xbe, 0x69, 0x33, 0x08, 0x3c, 0x23, 0xdb, 0x86, 0xf1,
+	0x30, 0x60, 0x2e, 0x53, 0x41, 0x7f, 0x71, 0x20, 0x53, 0x19, 0x89, 0xb7, 0xc9, 0x6b, 0xf4, 0x72,
+	0x41, 0xeb, 0xd0, 0xa3, 0x0a, 0xaa, 0x11, 0xa3, 0xe4, 0xe5, 0x39, 0x78, 0x87, 0xb8, 0xe8, 0xc3,
+	0xb5, 0x1c, 0x7c, 0xaa, 0xfa, 0x7b, 0x4c, 0x75, 0xa4, 0x56, 0x46, 0x50, 0x0e, 0xf8, 0xc6, 0x3f,
+	0xc9, 0x2f, 0x0d, 0xc1, 0x37, 0x49, 0x07, 0x79, 0x4b, 0x2e, 0x86, 0xeb, 0x3f, 0xb3, 0xd0, 0x1a,
+	0xae, 0x03, 0xc5, 0xc2, 0x60, 0x2d, 0x89, 0x31, 0x22, 0x04, 0xed, 0x7a, 0x3a, 0xc7, 0x73, 0x7b,
+	0x71, 0xaa, 0x3a, 0x69, 0xa2, 0x06, 0x97, 0x02, 0xfa, 0x86, 0x72, 0xa9, 0x45, 0x71, 0x27, 0xbd,
+	0x48, 0x0a, 0xdf, 0xb8, 0x3a, 0x8a, 0x40, 0xb8, 0x7d, 0x7c, 0x8b, 0xd8, 0xe8, 0xc5, 0x85, 0x4c,
+	0x00, 0x71, 0x6c, 0x54, 0x87, 0x8a, 0x55, 0xc8, 0x70, 0x26, 0x18, 0xd7, 0xdc, 0xb8, 0xa1, 0x8b,
+	0x6f, 0xe7, 0x77, 0x7d, 0x01, 0x50, 0x52, 0x9a, 0x80, 0x46, 0x3e, 0xe0, 0x5d, 0xf2, 0x10, 0xdd,
+	0x13, 0xe0, 0x53, 0xc5, 0xba, 0x60, 0x7e, 0x0f, 0xe1, 0x3d, 0xf2, 0x1c, 0x3d, 0x15, 0x52, 0xac,
+	0xcf, 0x2e, 0xdb, 0xeb, 0xb9, 0x4b, 0x91, 0x16, 0x4c, 0x61, 0xec, 0xfc, 0xd8, 0x40, 0xcd, 0xa3,
+	0x74, 0x62, 0xfd, 0x7d, 0x13, 0x9c, 0x07, 0x57, 0xfc, 0xea, 0x61, 0xbe, 0x43, 0xe1, 0xc6, 0x67,
+	0x6f, 0xc1, 0x26, 0xe9, 0xc9, 0x70, 0x9a, 0x58, 0xe9, 0x3c, 0xb1, 0x93, 0xf1, 0xb4, 0xd8, 0xb0,
+	0xe5, 0x46, 0xce, 0x8e, 0xb3, 0x3f, 0x2d, 0xe8, 0xbb, 0xf2, 0xf1, 0xa5, 0xb6, 0xe9, 0x53, 0xfa,
+	0xb5, 0xd6, 0xf0, 0xcb, 0x61, 0x74, 0x94, 0x59, 0x65, 0x99, 0x57, 0xdd, 0x96, 0x55, 0x28, 0xb3,
+	0xef, 0xcb, 0xc0, 0x80, 0x8e, 0xb2, 0xc1, 0x2a, 0x30, 0xe8, 0xb6, 0x06, 0x65, 0xe0, 0x70, 0xbb,
+	0x10, 0xbf, 0xfa, 0x15, 0x00, 0x00, 0xff, 0xff, 0x71, 0xa6, 0x49, 0xb4, 0x18, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/campaign_criterion_error.pb.go b/googleapis/ads/googleads/v0/errors/campaign_criterion_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d9b83d5622dd7d70eaf6807e19d71062e95a65d5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/campaign_criterion_error.pb.go
@@ -0,0 +1,168 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/campaign_criterion_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible campaign criterion errors.
+type CampaignCriterionErrorEnum_CampaignCriterionError int32
+
+const (
+	// Enum unspecified.
+	CampaignCriterionErrorEnum_UNSPECIFIED CampaignCriterionErrorEnum_CampaignCriterionError = 0
+	// The received error code is not known in this version.
+	CampaignCriterionErrorEnum_UNKNOWN CampaignCriterionErrorEnum_CampaignCriterionError = 1
+	// Concrete type of criterion (keyword v.s. placement) is required for
+	// CREATE and UPDATE operations.
+	CampaignCriterionErrorEnum_CONCRETE_TYPE_REQUIRED CampaignCriterionErrorEnum_CampaignCriterionError = 2
+	// Invalid placement URL.
+	CampaignCriterionErrorEnum_INVALID_PLACEMENT_URL CampaignCriterionErrorEnum_CampaignCriterionError = 3
+	// Criteria type can not be excluded for the campaign by the customer. like
+	// AOL account type cannot target site type criteria
+	CampaignCriterionErrorEnum_CANNOT_EXCLUDE_CRITERIA_TYPE CampaignCriterionErrorEnum_CampaignCriterionError = 4
+	// Cannot set the campaign criterion status for this criteria type.
+	CampaignCriterionErrorEnum_CANNOT_SET_STATUS_FOR_CRITERIA_TYPE CampaignCriterionErrorEnum_CampaignCriterionError = 5
+	// Cannot set the campaign criterion status for an excluded criteria.
+	CampaignCriterionErrorEnum_CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA CampaignCriterionErrorEnum_CampaignCriterionError = 6
+	// Cannot target and exclude the same criterion.
+	CampaignCriterionErrorEnum_CANNOT_TARGET_AND_EXCLUDE CampaignCriterionErrorEnum_CampaignCriterionError = 7
+	// The mutate contained too many operations.
+	CampaignCriterionErrorEnum_TOO_MANY_OPERATIONS CampaignCriterionErrorEnum_CampaignCriterionError = 8
+	// This operator cannot be applied to a criterion of this type.
+	CampaignCriterionErrorEnum_OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE CampaignCriterionErrorEnum_CampaignCriterionError = 9
+	// The Shopping campaign sales country is not supported for
+	// ProductSalesChannel targeting.
+	CampaignCriterionErrorEnum_SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL CampaignCriterionErrorEnum_CampaignCriterionError = 10
+	// The existing field can't be updated with CREATE operation. It can be
+	// updated with UPDATE operation only.
+	CampaignCriterionErrorEnum_CANNOT_ADD_EXISTING_FIELD CampaignCriterionErrorEnum_CampaignCriterionError = 11
+	// Negative criteria are immutable, so updates are not allowed.
+	CampaignCriterionErrorEnum_CANNOT_UPDATE_NEGATIVE_CRITERION CampaignCriterionErrorEnum_CampaignCriterionError = 12
+)
+
+var CampaignCriterionErrorEnum_CampaignCriterionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CONCRETE_TYPE_REQUIRED",
+	3:  "INVALID_PLACEMENT_URL",
+	4:  "CANNOT_EXCLUDE_CRITERIA_TYPE",
+	5:  "CANNOT_SET_STATUS_FOR_CRITERIA_TYPE",
+	6:  "CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA",
+	7:  "CANNOT_TARGET_AND_EXCLUDE",
+	8:  "TOO_MANY_OPERATIONS",
+	9:  "OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE",
+	10: "SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL",
+	11: "CANNOT_ADD_EXISTING_FIELD",
+	12: "CANNOT_UPDATE_NEGATIVE_CRITERION",
+}
+var CampaignCriterionErrorEnum_CampaignCriterionError_value = map[string]int32{
+	"UNSPECIFIED":                               0,
+	"UNKNOWN":                                   1,
+	"CONCRETE_TYPE_REQUIRED":                    2,
+	"INVALID_PLACEMENT_URL":                     3,
+	"CANNOT_EXCLUDE_CRITERIA_TYPE":              4,
+	"CANNOT_SET_STATUS_FOR_CRITERIA_TYPE":       5,
+	"CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA":   6,
+	"CANNOT_TARGET_AND_EXCLUDE":                 7,
+	"TOO_MANY_OPERATIONS":                       8,
+	"OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE": 9,
+	"SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL": 10,
+	"CANNOT_ADD_EXISTING_FIELD":                                       11,
+	"CANNOT_UPDATE_NEGATIVE_CRITERION":                                12,
+}
+
+func (x CampaignCriterionErrorEnum_CampaignCriterionError) String() string {
+	return proto.EnumName(CampaignCriterionErrorEnum_CampaignCriterionError_name, int32(x))
+}
+func (CampaignCriterionErrorEnum_CampaignCriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_error_d0d1f7612cbd8dc8, []int{0, 0}
+}
+
+// Container for enum describing possible campaign criterion errors.
+type CampaignCriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignCriterionErrorEnum) Reset()         { *m = CampaignCriterionErrorEnum{} }
+func (m *CampaignCriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterionErrorEnum) ProtoMessage()    {}
+func (*CampaignCriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_error_d0d1f7612cbd8dc8, []int{0}
+}
+func (m *CampaignCriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignCriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignCriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterionErrorEnum.Merge(dst, src)
+}
+func (m *CampaignCriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterionErrorEnum.Size(m)
+}
+func (m *CampaignCriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignCriterionErrorEnum)(nil), "google.ads.googleads.v0.errors.CampaignCriterionErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CampaignCriterionErrorEnum_CampaignCriterionError", CampaignCriterionErrorEnum_CampaignCriterionError_name, CampaignCriterionErrorEnum_CampaignCriterionError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/campaign_criterion_error.proto", fileDescriptor_campaign_criterion_error_d0d1f7612cbd8dc8)
+}
+
+var fileDescriptor_campaign_criterion_error_d0d1f7612cbd8dc8 = []byte{
+	// 486 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdd, 0x6a, 0x13, 0x41,
+	0x18, 0x35, 0x89, 0xb6, 0x3a, 0x11, 0x1c, 0x46, 0xac, 0xb4, 0x6a, 0x29, 0x51, 0x28, 0x22, 0x6e,
+	0x02, 0x5e, 0x8a, 0xc8, 0x74, 0xe6, 0xcb, 0x76, 0x70, 0x33, 0x33, 0xce, 0xce, 0x46, 0x23, 0x81,
+	0x61, 0x4d, 0xc2, 0x12, 0x68, 0x76, 0xc3, 0x6e, 0xed, 0x03, 0x79, 0xe9, 0xa3, 0x78, 0xe7, 0x8d,
+	0x6f, 0xe2, 0xbd, 0xec, 0x4f, 0x62, 0x91, 0xe8, 0xd5, 0x9e, 0xe5, 0xfc, 0x7c, 0x07, 0xe6, 0xa0,
+	0x37, 0x49, 0x96, 0x25, 0x17, 0x8b, 0x7e, 0x3c, 0x2f, 0xfa, 0x35, 0x2c, 0xd1, 0xd5, 0xa0, 0xbf,
+	0xc8, 0xf3, 0x2c, 0x2f, 0xfa, 0xb3, 0x78, 0xb5, 0x8e, 0x97, 0x49, 0xea, 0x66, 0xf9, 0xf2, 0x72,
+	0x91, 0x2f, 0xb3, 0xd4, 0x55, 0x8c, 0xb7, 0xce, 0xb3, 0xcb, 0x8c, 0x1c, 0xd7, 0x1e, 0x2f, 0x9e,
+	0x17, 0xde, 0xd6, 0xee, 0x5d, 0x0d, 0xbc, 0xda, 0xde, 0xfb, 0xd5, 0x41, 0x47, 0xac, 0x89, 0x60,
+	0x9b, 0x04, 0x28, 0x39, 0x48, 0xbf, 0xac, 0x7a, 0x3f, 0x3b, 0xe8, 0x60, 0x37, 0x4d, 0xee, 0xa1,
+	0x6e, 0x24, 0x43, 0x0d, 0x4c, 0x0c, 0x05, 0x70, 0x7c, 0x83, 0x74, 0xd1, 0x7e, 0x24, 0xdf, 0x49,
+	0xf5, 0x41, 0xe2, 0x16, 0x39, 0x42, 0x07, 0x4c, 0x49, 0x66, 0xc0, 0x82, 0xb3, 0x13, 0x0d, 0xce,
+	0xc0, 0xfb, 0x48, 0x18, 0xe0, 0xb8, 0x4d, 0x0e, 0xd1, 0x03, 0x21, 0xc7, 0x34, 0x10, 0xdc, 0xe9,
+	0x80, 0x32, 0x18, 0x81, 0xb4, 0x2e, 0x32, 0x01, 0xee, 0x90, 0x13, 0xf4, 0x98, 0x51, 0x29, 0x95,
+	0x75, 0xf0, 0x91, 0x05, 0x11, 0x07, 0xc7, 0x8c, 0xb0, 0x60, 0x04, 0xad, 0x52, 0xf0, 0x4d, 0x72,
+	0x8a, 0x9e, 0x36, 0x8a, 0x10, 0xac, 0x0b, 0x2d, 0xb5, 0x51, 0xe8, 0x86, 0xca, 0xfc, 0x25, 0xbc,
+	0x45, 0x5e, 0xa0, 0xd3, 0xdd, 0xc2, 0x26, 0x99, 0x6f, 0x1d, 0x78, 0x8f, 0x3c, 0x41, 0x87, 0x8d,
+	0xd8, 0x52, 0xe3, 0x83, 0x75, 0x54, 0xf2, 0x8d, 0x10, 0xef, 0x93, 0x87, 0xe8, 0xbe, 0x55, 0xca,
+	0x8d, 0xa8, 0x9c, 0x38, 0xa5, 0xc1, 0x50, 0x2b, 0x94, 0x0c, 0xf1, 0x6d, 0xf2, 0x12, 0x3d, 0xaf,
+	0xff, 0x95, 0x71, 0xd5, 0xa9, 0x48, 0x6b, 0x65, 0x2c, 0xf0, 0xeb, 0x95, 0x94, 0xac, 0x3b, 0xdd,
+	0x21, 0x0c, 0xbd, 0x0d, 0xcf, 0x95, 0xd6, 0x42, 0xfa, 0x8e, 0xd1, 0x91, 0xa6, 0xc2, 0x97, 0x2e,
+	0xa4, 0x01, 0x84, 0x8e, 0xa9, 0x48, 0x5a, 0x33, 0xd9, 0x91, 0xd2, 0xf0, 0xe7, 0x54, 0x4a, 0x08,
+	0x30, 0xba, 0xd6, 0x95, 0xf2, 0xb2, 0xa4, 0x08, 0x6d, 0x99, 0x37, 0x14, 0x10, 0x70, 0xdc, 0x25,
+	0xcf, 0xd0, 0x49, 0x43, 0x47, 0x9a, 0x53, 0x0b, 0x4e, 0x82, 0x4f, 0xad, 0x18, 0xc3, 0x9f, 0x3a,
+	0xf8, 0xee, 0xd9, 0x8f, 0x16, 0xea, 0xcd, 0xb2, 0x95, 0xf7, 0xff, 0x79, 0x9c, 0x3d, 0xda, 0xfd,
+	0xf8, 0xba, 0xdc, 0x96, 0x6e, 0x7d, 0xe2, 0x8d, 0x3d, 0xc9, 0x2e, 0xe2, 0x34, 0xf1, 0xb2, 0x3c,
+	0xe9, 0x27, 0x8b, 0xb4, 0x5a, 0xde, 0x66, 0xac, 0xeb, 0x65, 0xf1, 0xaf, 0xed, 0xbe, 0xae, 0x3f,
+	0x5f, 0xdb, 0x1d, 0x9f, 0xd2, 0x6f, 0xed, 0x63, 0xbf, 0x0e, 0xa3, 0xf3, 0xc2, 0xab, 0x61, 0x89,
+	0xc6, 0x03, 0xaf, 0x3a, 0x59, 0x7c, 0xdf, 0x08, 0xa6, 0x74, 0x5e, 0x4c, 0xb7, 0x82, 0xe9, 0x78,
+	0x30, 0xad, 0x05, 0x9f, 0xf7, 0xaa, 0xc3, 0xaf, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x60, 0xe8,
+	0xd8, 0x4f, 0x33, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/campaign_error.pb.go b/googleapis/ads/googleads/v0/errors/campaign_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e10d2f879397a93ec28955caf879aed5b6876b7f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/campaign_error.pb.go
@@ -0,0 +1,304 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/campaign_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible campaign errors.
+type CampaignErrorEnum_CampaignError int32
+
+const (
+	// Enum unspecified.
+	CampaignErrorEnum_UNSPECIFIED CampaignErrorEnum_CampaignError = 0
+	// The received error code is not known in this version.
+	CampaignErrorEnum_UNKNOWN CampaignErrorEnum_CampaignError = 1
+	// Cannot target content network.
+	CampaignErrorEnum_CANNOT_TARGET_CONTENT_NETWORK CampaignErrorEnum_CampaignError = 3
+	// Cannot target search network.
+	CampaignErrorEnum_CANNOT_TARGET_SEARCH_NETWORK CampaignErrorEnum_CampaignError = 4
+	// Cannot cover search network without google search network.
+	CampaignErrorEnum_CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH CampaignErrorEnum_CampaignError = 5
+	// Cannot target Google Search network for a CPM campaign.
+	CampaignErrorEnum_CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN CampaignErrorEnum_CampaignError = 6
+	// Must target at least one network.
+	CampaignErrorEnum_CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK CampaignErrorEnum_CampaignError = 7
+	// Only some Google partners are allowed to target partner search network.
+	CampaignErrorEnum_CANNOT_TARGET_PARTNER_SEARCH_NETWORK CampaignErrorEnum_CampaignError = 8
+	// Cannot target content network only as campaign has criteria-level bidding
+	// strategy.
+	CampaignErrorEnum_CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY CampaignErrorEnum_CampaignError = 9
+	// Cannot modify the start or end date such that the campaign duration would
+	// not contain the durations of all runnable trials.
+	CampaignErrorEnum_CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS CampaignErrorEnum_CampaignError = 10
+	// Cannot modify dates, budget or campaign name of a trial campaign.
+	CampaignErrorEnum_CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN CampaignErrorEnum_CampaignError = 11
+	// Trying to modify the name of an active or paused campaign, where the name
+	// is already assigned to another active or paused campaign.
+	CampaignErrorEnum_DUPLICATE_CAMPAIGN_NAME CampaignErrorEnum_CampaignError = 12
+	// Two fields are in conflicting modes.
+	CampaignErrorEnum_INCOMPATIBLE_CAMPAIGN_FIELD CampaignErrorEnum_CampaignError = 13
+	// Campaign name cannot be used.
+	CampaignErrorEnum_INVALID_CAMPAIGN_NAME CampaignErrorEnum_CampaignError = 14
+	// Given status is invalid.
+	CampaignErrorEnum_INVALID_AD_SERVING_OPTIMIZATION_STATUS CampaignErrorEnum_CampaignError = 15
+	// Error in the campaign level tracking url.
+	CampaignErrorEnum_INVALID_TRACKING_URL CampaignErrorEnum_CampaignError = 16
+	// Cannot set both tracking url template and tracking setting. An user has
+	// to clear legacy tracking setting in order to add tracking url template.
+	CampaignErrorEnum_CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING CampaignErrorEnum_CampaignError = 17
+	// The maximum number of impressions for Frequency Cap should be an integer
+	// greater than 0.
+	CampaignErrorEnum_MAX_IMPRESSIONS_NOT_IN_RANGE CampaignErrorEnum_CampaignError = 18
+	// Only the Day, Week and Month time units are supported.
+	CampaignErrorEnum_TIME_UNIT_NOT_SUPPORTED CampaignErrorEnum_CampaignError = 19
+	// Operation not allowed on a campaign whose serving status has ended
+	CampaignErrorEnum_INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED CampaignErrorEnum_CampaignError = 20
+	// This budget is exclusively linked to a Campaign that is using experiments
+	// so it cannot be shared.
+	CampaignErrorEnum_BUDGET_CANNOT_BE_SHARED CampaignErrorEnum_CampaignError = 21
+	// Campaigns using experiments cannot use a shared budget.
+	CampaignErrorEnum_CAMPAIGN_CANNOT_USE_SHARED_BUDGET CampaignErrorEnum_CampaignError = 22
+	// A different budget cannot be assigned to a campaign when there are
+	// running or scheduled trials.
+	CampaignErrorEnum_CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS CampaignErrorEnum_CampaignError = 23
+	// No link found between the campaign and the label.
+	CampaignErrorEnum_CAMPAIGN_LABEL_DOES_NOT_EXIST CampaignErrorEnum_CampaignError = 24
+	// The label has already been attached to the campaign.
+	CampaignErrorEnum_CAMPAIGN_LABEL_ALREADY_EXISTS CampaignErrorEnum_CampaignError = 25
+	// A ShoppingSetting was not found when creating a shopping campaign.
+	CampaignErrorEnum_MISSING_SHOPPING_SETTING CampaignErrorEnum_CampaignError = 26
+	// The country in shopping setting is not an allowed country.
+	CampaignErrorEnum_INVALID_SHOPPING_SALES_COUNTRY CampaignErrorEnum_CampaignError = 27
+	// A Campaign with channel sub type UNIVERSAL_APP_CAMPAIGN must have a
+	// UniversalAppCampaignSetting specified.
+	CampaignErrorEnum_MISSING_UNIVERSAL_APP_CAMPAIGN_SETTING CampaignErrorEnum_CampaignError = 30
+	// The requested channel type is not available according to the customer's
+	// account setting.
+	CampaignErrorEnum_ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE CampaignErrorEnum_CampaignError = 31
+	// The AdvertisingChannelSubType is not a valid subtype of the primary
+	// channel type.
+	CampaignErrorEnum_INVALID_ADVERTISING_CHANNEL_SUB_TYPE CampaignErrorEnum_CampaignError = 32
+	// At least one conversion must be selected.
+	CampaignErrorEnum_AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED CampaignErrorEnum_CampaignError = 33
+	// Setting ad rotation mode for a campaign is not allowed. Ad rotation mode
+	// at campaign is deprecated.
+	CampaignErrorEnum_CANNOT_SET_AD_ROTATION_MODE CampaignErrorEnum_CampaignError = 34
+	// Trying to change start date on a campaign that has started.
+	CampaignErrorEnum_CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED CampaignErrorEnum_CampaignError = 35
+	// Trying to modify a date into the past.
+	CampaignErrorEnum_CANNOT_SET_DATE_TO_PAST CampaignErrorEnum_CampaignError = 36
+	// Hotel center id in the hotel setting does not match any customer links.
+	CampaignErrorEnum_MISSING_HOTEL_CUSTOMER_LINK CampaignErrorEnum_CampaignError = 37
+	// Hotel center id in the hotel setting must match an active customer link.
+	CampaignErrorEnum_INVALID_HOTEL_CUSTOMER_LINK CampaignErrorEnum_CampaignError = 38
+	// Hotel setting was not found when creating a hotel ads campaign.
+	CampaignErrorEnum_MISSING_HOTEL_SETTING CampaignErrorEnum_CampaignError = 39
+	// A Campaign cannot use shared campaign budgets and be part of a campaign
+	// group.
+	CampaignErrorEnum_CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP CampaignErrorEnum_CampaignError = 40
+)
+
+var CampaignErrorEnum_CampaignError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "CANNOT_TARGET_CONTENT_NETWORK",
+	4:  "CANNOT_TARGET_SEARCH_NETWORK",
+	5:  "CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH",
+	6:  "CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN",
+	7:  "CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK",
+	8:  "CANNOT_TARGET_PARTNER_SEARCH_NETWORK",
+	9:  "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY",
+	10: "CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS",
+	11: "CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN",
+	12: "DUPLICATE_CAMPAIGN_NAME",
+	13: "INCOMPATIBLE_CAMPAIGN_FIELD",
+	14: "INVALID_CAMPAIGN_NAME",
+	15: "INVALID_AD_SERVING_OPTIMIZATION_STATUS",
+	16: "INVALID_TRACKING_URL",
+	17: "CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING",
+	18: "MAX_IMPRESSIONS_NOT_IN_RANGE",
+	19: "TIME_UNIT_NOT_SUPPORTED",
+	20: "INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED",
+	21: "BUDGET_CANNOT_BE_SHARED",
+	22: "CAMPAIGN_CANNOT_USE_SHARED_BUDGET",
+	23: "CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS",
+	24: "CAMPAIGN_LABEL_DOES_NOT_EXIST",
+	25: "CAMPAIGN_LABEL_ALREADY_EXISTS",
+	26: "MISSING_SHOPPING_SETTING",
+	27: "INVALID_SHOPPING_SALES_COUNTRY",
+	30: "MISSING_UNIVERSAL_APP_CAMPAIGN_SETTING",
+	31: "ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE",
+	32: "INVALID_ADVERTISING_CHANNEL_SUB_TYPE",
+	33: "AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED",
+	34: "CANNOT_SET_AD_ROTATION_MODE",
+	35: "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED",
+	36: "CANNOT_SET_DATE_TO_PAST",
+	37: "MISSING_HOTEL_CUSTOMER_LINK",
+	38: "INVALID_HOTEL_CUSTOMER_LINK",
+	39: "MISSING_HOTEL_SETTING",
+	40: "CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP",
+}
+var CampaignErrorEnum_CampaignError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"CANNOT_TARGET_CONTENT_NETWORK": 3,
+	"CANNOT_TARGET_SEARCH_NETWORK":  4,
+	"CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH":                      5,
+	"CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN":                            6,
+	"CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK":                               7,
+	"CANNOT_TARGET_PARTNER_SEARCH_NETWORK":                                    8,
+	"CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY": 9,
+	"CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS":                      10,
+	"CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN":                                        11,
+	"DUPLICATE_CAMPAIGN_NAME":                                                 12,
+	"INCOMPATIBLE_CAMPAIGN_FIELD":                                             13,
+	"INVALID_CAMPAIGN_NAME":                                                   14,
+	"INVALID_AD_SERVING_OPTIMIZATION_STATUS":                                  15,
+	"INVALID_TRACKING_URL":                                                    16,
+	"CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING":              17,
+	"MAX_IMPRESSIONS_NOT_IN_RANGE":                                            18,
+	"TIME_UNIT_NOT_SUPPORTED":                                                 19,
+	"INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED":                           20,
+	"BUDGET_CANNOT_BE_SHARED":                                                 21,
+	"CAMPAIGN_CANNOT_USE_SHARED_BUDGET":                                       22,
+	"CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS":                            23,
+	"CAMPAIGN_LABEL_DOES_NOT_EXIST":                                           24,
+	"CAMPAIGN_LABEL_ALREADY_EXISTS":                                           25,
+	"MISSING_SHOPPING_SETTING":                                                26,
+	"INVALID_SHOPPING_SALES_COUNTRY":                                          27,
+	"MISSING_UNIVERSAL_APP_CAMPAIGN_SETTING":                                  30,
+	"ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE":                 31,
+	"INVALID_ADVERTISING_CHANNEL_SUB_TYPE":                                    32,
+	"AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED":                                33,
+	"CANNOT_SET_AD_ROTATION_MODE":                                             34,
+	"CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED":                             35,
+	"CANNOT_SET_DATE_TO_PAST":                                                 36,
+	"MISSING_HOTEL_CUSTOMER_LINK":                                             37,
+	"INVALID_HOTEL_CUSTOMER_LINK":                                             38,
+	"MISSING_HOTEL_SETTING":                                                   39,
+	"CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP":          40,
+}
+
+func (x CampaignErrorEnum_CampaignError) String() string {
+	return proto.EnumName(CampaignErrorEnum_CampaignError_name, int32(x))
+}
+func (CampaignErrorEnum_CampaignError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_error_67c91d16be8f048d, []int{0, 0}
+}
+
+// Container for enum describing possible campaign errors.
+type CampaignErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignErrorEnum) Reset()         { *m = CampaignErrorEnum{} }
+func (m *CampaignErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignErrorEnum) ProtoMessage()    {}
+func (*CampaignErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_error_67c91d16be8f048d, []int{0}
+}
+func (m *CampaignErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignErrorEnum.Merge(dst, src)
+}
+func (m *CampaignErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignErrorEnum.Size(m)
+}
+func (m *CampaignErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignErrorEnum)(nil), "google.ads.googleads.v0.errors.CampaignErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CampaignErrorEnum_CampaignError", CampaignErrorEnum_CampaignError_name, CampaignErrorEnum_CampaignError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/campaign_error.proto", fileDescriptor_campaign_error_67c91d16be8f048d)
+}
+
+var fileDescriptor_campaign_error_67c91d16be8f048d = []byte{
+	// 937 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0x6f, 0x6f, 0x1c, 0xb5,
+	0x13, 0xfe, 0xa5, 0xfd, 0xd1, 0x82, 0x93, 0x52, 0xd7, 0xb4, 0x34, 0x25, 0x25, 0x4d, 0x42, 0x5a,
+	0x02, 0xb4, 0x77, 0x81, 0x4a, 0x20, 0x51, 0xa9, 0xd2, 0xdc, 0x7a, 0x6e, 0xcf, 0x8a, 0xd7, 0x5e,
+	0xd9, 0xde, 0x4b, 0xaf, 0x8a, 0x34, 0x0a, 0x4d, 0x74, 0xaa, 0xd4, 0xe4, 0xa2, 0x1c, 0xf4, 0x35,
+	0x9f, 0x82, 0x0f, 0xc0, 0x4b, 0x3e, 0x09, 0xe2, 0x53, 0x21, 0xef, 0xbf, 0xcb, 0xb6, 0x25, 0xaf,
+	0xce, 0xeb, 0xe7, 0x99, 0xf1, 0xcc, 0xe3, 0x67, 0xce, 0xec, 0xe9, 0x74, 0x36, 0x9b, 0xbe, 0x39,
+	0xee, 0x1f, 0x1e, 0xcd, 0xfb, 0xd5, 0x32, 0xae, 0xde, 0xee, 0xf6, 0x8f, 0xcf, 0xcf, 0x67, 0xe7,
+	0xf3, 0xfe, 0xab, 0xc3, 0x93, 0xb3, 0xc3, 0xd7, 0xd3, 0x53, 0x2a, 0xbf, 0x7b, 0x67, 0xe7, 0xb3,
+	0x5f, 0x67, 0x62, 0xbd, 0x62, 0xf6, 0x0e, 0x8f, 0xe6, 0xbd, 0x36, 0xa8, 0xf7, 0x76, 0xb7, 0x57,
+	0x05, 0x6d, 0xfd, 0xb1, 0xc2, 0x6e, 0x25, 0x75, 0x20, 0xc6, 0x2d, 0x3c, 0xfd, 0xed, 0x64, 0xeb,
+	0xf7, 0x15, 0x76, 0xa3, 0xb3, 0x2b, 0x6e, 0xb2, 0xe5, 0xc2, 0xf8, 0x1c, 0x13, 0x35, 0x54, 0x28,
+	0xf9, 0xff, 0xc4, 0x32, 0xbb, 0x5e, 0x98, 0x3d, 0x63, 0xf7, 0x0d, 0x5f, 0x12, 0x9b, 0xec, 0xcb,
+	0x04, 0x8c, 0xb1, 0x81, 0x02, 0xb8, 0x14, 0x03, 0x25, 0xd6, 0x04, 0x34, 0x81, 0x0c, 0x86, 0x7d,
+	0xeb, 0xf6, 0xf8, 0x55, 0xb1, 0xc1, 0xee, 0x77, 0x29, 0x1e, 0xc1, 0x25, 0xa3, 0x96, 0xf1, 0x7f,
+	0xf1, 0x23, 0xfb, 0xe1, 0x32, 0x06, 0xed, 0xab, 0x30, 0xb2, 0x45, 0xa0, 0xd4, 0xda, 0x54, 0x63,
+	0x8d, 0xf2, 0x8f, 0xc4, 0x2e, 0x7b, 0xdc, 0x8d, 0xeb, 0x10, 0x68, 0x68, 0x1d, 0x25, 0x79, 0x46,
+	0x09, 0x64, 0x39, 0xa8, 0xd4, 0xf0, 0x6b, 0xe2, 0x09, 0xfb, 0xa6, 0xf9, 0xa2, 0xac, 0xf0, 0x6d,
+	0x20, 0x04, 0xd2, 0x08, 0x3e, 0x90, 0x35, 0xd8, 0x16, 0x76, 0x5d, 0xec, 0xb0, 0xed, 0xee, 0x01,
+	0x39, 0xb8, 0x60, 0xd0, 0xbd, 0xdb, 0xc2, 0xc7, 0x62, 0x8f, 0xa5, 0x97, 0xea, 0x40, 0xd6, 0xe8,
+	0x49, 0xd9, 0x08, 0x25, 0x4e, 0x05, 0x74, 0x0a, 0x48, 0xe3, 0x18, 0x35, 0x0d, 0x94, 0x94, 0xca,
+	0xa4, 0xe4, 0x83, 0x83, 0x80, 0xe9, 0x84, 0x7f, 0x52, 0xe9, 0x51, 0x57, 0x29, 0x0b, 0x07, 0x41,
+	0xd9, 0xba, 0xdc, 0x98, 0x15, 0x94, 0x21, 0xd0, 0x9a, 0x5c, 0x61, 0x0c, 0x0c, 0x34, 0x52, 0x70,
+	0x0a, 0xb4, 0xe7, 0x4c, 0x6c, 0xb3, 0x8d, 0xba, 0x88, 0xcc, 0x4a, 0x35, 0x9c, 0x94, 0x0a, 0x94,
+	0xe8, 0x42, 0x83, 0x65, 0xb1, 0xc6, 0xee, 0xca, 0x22, 0xd7, 0x2a, 0x81, 0x80, 0xed, 0x3e, 0x19,
+	0xc8, 0x90, 0xaf, 0x88, 0x07, 0x6c, 0x4d, 0x99, 0xc4, 0x66, 0x39, 0x04, 0x15, 0x73, 0xb7, 0xf8,
+	0x50, 0xa1, 0x96, 0xfc, 0x86, 0xb8, 0xc7, 0xee, 0x28, 0x33, 0x06, 0xad, 0xe4, 0x3b, 0xb1, 0x9f,
+	0x8a, 0x6f, 0xd9, 0xa3, 0x06, 0x02, 0x49, 0x1e, 0xdd, 0x38, 0xf6, 0x65, 0xf3, 0xa0, 0x32, 0xf5,
+	0xb2, 0x6a, 0xc2, 0x07, 0x08, 0x85, 0xe7, 0x37, 0xc5, 0x2a, 0xbb, 0xdd, 0x70, 0x83, 0x83, 0x64,
+	0x2f, 0x32, 0x0b, 0xa7, 0x39, 0x17, 0xcf, 0xd9, 0xcf, 0x75, 0x13, 0x1e, 0x03, 0x0d, 0x6c, 0x18,
+	0x75, 0x18, 0x14, 0x30, 0xcb, 0x75, 0x2c, 0x1d, 0xcc, 0x85, 0x58, 0x8f, 0x21, 0x28, 0x93, 0xf2,
+	0x5b, 0xd1, 0x6e, 0x19, 0xbc, 0x20, 0x95, 0xe5, 0x0e, 0xbd, 0x57, 0xd6, 0x78, 0x8a, 0xc9, 0x94,
+	0x21, 0x07, 0x26, 0x45, 0x2e, 0xa2, 0x00, 0x41, 0x65, 0x48, 0x85, 0x51, 0xa1, 0xc4, 0x7c, 0x91,
+	0xe7, 0xd6, 0x05, 0x94, 0xfc, 0x33, 0xf1, 0x3d, 0x7b, 0xd2, 0x14, 0x66, 0x73, 0xac, 0xb5, 0x57,
+	0xc3, 0xb6, 0x9d, 0xaa, 0x03, 0x1a, 0x81, 0x27, 0x34, 0x12, 0x25, 0xbf, 0x1d, 0xf3, 0x0d, 0x0a,
+	0x59, 0x5e, 0x7a, 0x55, 0xf8, 0x00, 0xc9, 0x8f, 0xc0, 0xa1, 0xe4, 0x77, 0xc4, 0x43, 0xb6, 0xd9,
+	0xea, 0x54, 0xc3, 0x85, 0x6f, 0x70, 0xaa, 0xe2, 0xf8, 0xe7, 0x17, 0xac, 0x9c, 0x8c, 0x62, 0x99,
+	0x35, 0x42, 0xd6, 0x2c, 0x64, 0x2e, 0xdd, 0x53, 0x5f, 0xf6, 0xdd, 0x6a, 0xf2, 0x6a, 0x44, 0xc3,
+	0x00, 0x35, 0x49, 0x8b, 0x55, 0xaf, 0xf8, 0x42, 0xf9, 0xc0, 0x57, 0x3f, 0x40, 0x01, 0xed, 0x10,
+	0xe4, 0xa4, 0x62, 0x78, 0x7e, 0x4f, 0xdc, 0x67, 0xab, 0x99, 0xf2, 0xbe, 0xec, 0x6c, 0x64, 0xf3,
+	0xfc, 0xa2, 0x96, 0x5f, 0x88, 0x2d, 0xb6, 0xde, 0x88, 0xb1, 0x40, 0x41, 0xa3, 0xa7, 0xc4, 0x16,
+	0x26, 0xb8, 0x09, 0x5f, 0x8b, 0xb7, 0xde, 0x64, 0x28, 0x8c, 0x1a, 0xa3, 0xf3, 0xa0, 0x09, 0xf2,
+	0x7c, 0x51, 0x77, 0x93, 0x6f, 0x5d, 0x3c, 0x63, 0x3f, 0x81, 0x1c, 0xa3, 0x0b, 0xaa, 0xe4, 0xc7,
+	0x56, 0x0d, 0x6a, 0x0a, 0x93, 0x1c, 0xcb, 0xc2, 0x61, 0x0c, 0x4a, 0x97, 0x9e, 0x8e, 0xce, 0x85,
+	0xa4, 0x3c, 0xa5, 0x84, 0xf9, 0x83, 0x38, 0x8c, 0x0b, 0x7b, 0xbd, 0x9f, 0xc4, 0x17, 0x83, 0x8a,
+	0xb9, 0x21, 0x1e, 0xb3, 0x9d, 0xce, 0x40, 0x27, 0xd6, 0xc4, 0xba, 0xda, 0x29, 0x8a, 0xf7, 0x83,
+	0x1a, 0x93, 0x78, 0xe3, 0x9b, 0xd1, 0xf2, 0x17, 0x0c, 0x07, 0x92, 0x9c, 0x0d, 0xf5, 0xc8, 0x59,
+	0x89, 0x7c, 0x4b, 0xf4, 0xd9, 0x77, 0xdd, 0xb1, 0xf2, 0x01, 0x5c, 0x20, 0x19, 0x4d, 0xa8, 0x86,
+	0xad, 0xa6, 0xe5, 0x2e, 0x4a, 0xfe, 0x55, 0x34, 0xc4, 0x85, 0x8c, 0x25, 0x2f, 0x58, 0xca, 0xc1,
+	0x07, 0xbe, 0x1d, 0x8f, 0x6b, 0xf4, 0x1a, 0xd9, 0x80, 0x9a, 0x92, 0xc2, 0x07, 0x9b, 0xa1, 0x23,
+	0xad, 0xcc, 0x1e, 0x7f, 0x58, 0x8d, 0x60, 0xd5, 0xe7, 0x87, 0x08, 0x8f, 0xe2, 0x08, 0x76, 0x33,
+	0x34, 0x02, 0x7f, 0x2d, 0x06, 0xec, 0xf9, 0xfb, 0x26, 0x6b, 0x2f, 0xa2, 0xf6, 0xd4, 0xfe, 0x48,
+	0x69, 0x2c, 0xff, 0xca, 0xc8, 0x0e, 0x17, 0x68, 0xea, 0x6c, 0x91, 0xf3, 0x9d, 0xc1, 0xdf, 0x4b,
+	0x6c, 0xeb, 0xd5, 0xec, 0xa4, 0x77, 0xf9, 0xfb, 0x31, 0x10, 0x9d, 0x67, 0x22, 0x8f, 0x6f, 0x4e,
+	0xbe, 0xf4, 0x52, 0xd6, 0x51, 0xd3, 0xd9, 0x9b, 0xc3, 0xd3, 0x69, 0x6f, 0x76, 0x3e, 0xed, 0x4f,
+	0x8f, 0x4f, 0xcb, 0x17, 0xa9, 0x79, 0xba, 0xce, 0x5e, 0xcf, 0xff, 0xeb, 0x25, 0x7b, 0x56, 0xfd,
+	0xfc, 0x79, 0xe5, 0x6a, 0x0a, 0xf0, 0xd7, 0x95, 0xf5, 0xb4, 0x4a, 0x06, 0x47, 0xf3, 0x5e, 0xb5,
+	0x8c, 0xab, 0xf1, 0x6e, 0xaf, 0x3c, 0x72, 0xfe, 0x4f, 0x43, 0x38, 0x80, 0xa3, 0xf9, 0x41, 0x4b,
+	0x38, 0x18, 0xef, 0x1e, 0x54, 0x84, 0x5f, 0xae, 0x95, 0x07, 0x3f, 0xfd, 0x37, 0x00, 0x00, 0xff,
+	0xff, 0xcf, 0xa0, 0xc1, 0x07, 0x41, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/campaign_feed_error.pb.go b/googleapis/ads/googleads/v0/errors/campaign_feed_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..535a2b4434eaf1e5e6c872843b8b7f11a2ccb8d3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/campaign_feed_error.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/campaign_feed_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible campaign feed errors.
+type CampaignFeedErrorEnum_CampaignFeedError int32
+
+const (
+	// Enum unspecified.
+	CampaignFeedErrorEnum_UNSPECIFIED CampaignFeedErrorEnum_CampaignFeedError = 0
+	// The received error code is not known in this version.
+	CampaignFeedErrorEnum_UNKNOWN CampaignFeedErrorEnum_CampaignFeedError = 1
+	// An active feed already exists for this campaign and placeholder type.
+	CampaignFeedErrorEnum_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE CampaignFeedErrorEnum_CampaignFeedError = 2
+	// The specified feed is removed.
+	CampaignFeedErrorEnum_CANNOT_CREATE_FOR_REMOVED_FEED CampaignFeedErrorEnum_CampaignFeedError = 4
+	// The CampaignFeed already exists. UPDATE should be used to modify the
+	// existing CampaignFeed.
+	CampaignFeedErrorEnum_CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED CampaignFeedErrorEnum_CampaignFeedError = 5
+	// Cannot update removed campaign feed.
+	CampaignFeedErrorEnum_CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED CampaignFeedErrorEnum_CampaignFeedError = 6
+	// Invalid placeholder type.
+	CampaignFeedErrorEnum_INVALID_PLACEHOLDER_TYPE CampaignFeedErrorEnum_CampaignFeedError = 7
+	// Feed mapping for this placeholder type does not exist.
+	CampaignFeedErrorEnum_MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE CampaignFeedErrorEnum_CampaignFeedError = 8
+)
+
+var CampaignFeedErrorEnum_CampaignFeedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	4: "CANNOT_CREATE_FOR_REMOVED_FEED",
+	5: "CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED",
+	6: "CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED",
+	7: "INVALID_PLACEHOLDER_TYPE",
+	8: "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
+}
+var CampaignFeedErrorEnum_CampaignFeedError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE":     2,
+	"CANNOT_CREATE_FOR_REMOVED_FEED":               4,
+	"CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED": 5,
+	"CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED":          6,
+	"INVALID_PLACEHOLDER_TYPE":                     7,
+	"MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE":     8,
+}
+
+func (x CampaignFeedErrorEnum_CampaignFeedError) String() string {
+	return proto.EnumName(CampaignFeedErrorEnum_CampaignFeedError_name, int32(x))
+}
+func (CampaignFeedErrorEnum_CampaignFeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_error_8ad65cf273383026, []int{0, 0}
+}
+
+// Container for enum describing possible campaign feed errors.
+type CampaignFeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignFeedErrorEnum) Reset()         { *m = CampaignFeedErrorEnum{} }
+func (m *CampaignFeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignFeedErrorEnum) ProtoMessage()    {}
+func (*CampaignFeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_error_8ad65cf273383026, []int{0}
+}
+func (m *CampaignFeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignFeedErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignFeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignFeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignFeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignFeedErrorEnum.Merge(dst, src)
+}
+func (m *CampaignFeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignFeedErrorEnum.Size(m)
+}
+func (m *CampaignFeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignFeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignFeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignFeedErrorEnum)(nil), "google.ads.googleads.v0.errors.CampaignFeedErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CampaignFeedErrorEnum_CampaignFeedError", CampaignFeedErrorEnum_CampaignFeedError_name, CampaignFeedErrorEnum_CampaignFeedError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/campaign_feed_error.proto", fileDescriptor_campaign_feed_error_8ad65cf273383026)
+}
+
+var fileDescriptor_campaign_feed_error_8ad65cf273383026 = []byte{
+	// 383 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0xae, 0x93, 0x40,
+	0x14, 0x86, 0x2d, 0xea, 0xbd, 0x66, 0xee, 0x42, 0x9c, 0x44, 0xe3, 0xc2, 0x74, 0x81, 0x0b, 0x5d,
+	0x34, 0x03, 0x89, 0x1b, 0x13, 0x57, 0x53, 0x66, 0xc0, 0x89, 0x30, 0x4c, 0x80, 0xa2, 0x35, 0x24,
+	0x13, 0x2c, 0x48, 0x9a, 0xb4, 0x4c, 0x03, 0xda, 0x07, 0x72, 0xd9, 0xe7, 0x70, 0x65, 0x7c, 0x28,
+	0x33, 0x4c, 0xdb, 0xa4, 0xa9, 0xba, 0xe2, 0xcf, 0xe1, 0xfb, 0xff, 0xc3, 0x39, 0x07, 0xf0, 0xb6,
+	0x55, 0xaa, 0xdd, 0x34, 0x6e, 0x55, 0x0f, 0xae, 0x91, 0x5a, 0xed, 0x3d, 0xb7, 0xe9, 0x7b, 0xd5,
+	0x0f, 0xee, 0xaa, 0xda, 0xee, 0xaa, 0x75, 0xdb, 0xc9, 0xaf, 0x4d, 0x53, 0xcb, 0xb1, 0x88, 0x76,
+	0xbd, 0xfa, 0xa6, 0xe0, 0xd4, 0xe0, 0xa8, 0xaa, 0x07, 0x74, 0x76, 0xa2, 0xbd, 0x87, 0x8c, 0xd3,
+	0xf9, 0x69, 0x81, 0xa7, 0xfe, 0xd1, 0x1d, 0x34, 0x4d, 0x4d, 0x75, 0x99, 0x76, 0xdf, 0xb7, 0xce,
+	0xc1, 0x02, 0x4f, 0xae, 0xde, 0xc0, 0xc7, 0xe0, 0x6e, 0xc1, 0x33, 0x41, 0x7d, 0x16, 0x30, 0x4a,
+	0xec, 0x7b, 0xf0, 0x0e, 0xdc, 0x2e, 0xf8, 0x07, 0x9e, 0x7c, 0xe4, 0xf6, 0x04, 0xce, 0xc0, 0xeb,
+	0x80, 0x52, 0x22, 0x71, 0x94, 0x52, 0x4c, 0x96, 0x92, 0x7e, 0x62, 0x59, 0x9e, 0xc9, 0x20, 0x49,
+	0xa5, 0x88, 0xb0, 0x4f, 0xdf, 0x27, 0x11, 0xa1, 0xa9, 0xcc, 0x97, 0x82, 0xda, 0x16, 0x74, 0xc0,
+	0xd4, 0xc7, 0x9c, 0x27, 0xb9, 0xf4, 0x53, 0x8a, 0x73, 0x3a, 0x72, 0x29, 0x8d, 0x93, 0x82, 0x12,
+	0xa9, 0x73, 0xec, 0x07, 0xd0, 0x03, 0xb3, 0x4b, 0xe6, 0x22, 0x9a, 0xf1, 0x50, 0xfa, 0x38, 0x16,
+	0x98, 0x85, 0xdc, 0x38, 0x1e, 0xc2, 0x57, 0xe0, 0xe5, 0xd1, 0x11, 0x27, 0x84, 0x05, 0xcb, 0x73,
+	0xe2, 0x25, 0x78, 0x03, 0x5f, 0x80, 0xe7, 0x8c, 0x17, 0x38, 0x62, 0xe4, 0xfa, 0xe3, 0x6e, 0xf5,
+	0x28, 0x31, 0xcb, 0x32, 0xdd, 0x41, 0xf3, 0x31, 0x16, 0x62, 0xd4, 0x7f, 0x1b, 0xe5, 0xd1, 0xfc,
+	0xf7, 0x04, 0x38, 0x2b, 0xb5, 0x45, 0xff, 0xdf, 0xf6, 0xfc, 0xd9, 0xd5, 0x42, 0x85, 0xbe, 0x92,
+	0x98, 0x7c, 0x26, 0x47, 0x67, 0xab, 0x36, 0x55, 0xd7, 0x22, 0xd5, 0xb7, 0x6e, 0xdb, 0x74, 0xe3,
+	0x0d, 0x4f, 0x17, 0xdf, 0xad, 0x87, 0x7f, 0xfd, 0x00, 0xef, 0xcc, 0xe3, 0x87, 0x75, 0x3f, 0xc4,
+	0xf8, 0x60, 0x4d, 0x43, 0x13, 0x86, 0xeb, 0x01, 0x19, 0xa9, 0x55, 0xe1, 0xa1, 0xb1, 0xe5, 0xf0,
+	0xeb, 0x04, 0x94, 0xb8, 0x1e, 0xca, 0x33, 0x50, 0x16, 0x5e, 0x69, 0x80, 0x2f, 0x37, 0x63, 0xe3,
+	0x37, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x6a, 0xa0, 0x54, 0x78, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/campaign_group_error.pb.go b/googleapis/ads/googleads/v0/errors/campaign_group_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..85cb1a42eae24e34755c1ec6eef51b52a63b9110
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/campaign_group_error.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/campaign_group_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible campaign group errors.
+type CampaignGroupErrorEnum_CampaignGroupError int32
+
+const (
+	// Enum unspecified.
+	CampaignGroupErrorEnum_UNSPECIFIED CampaignGroupErrorEnum_CampaignGroupError = 0
+	// The received error code is not known in this version.
+	CampaignGroupErrorEnum_UNKNOWN CampaignGroupErrorEnum_CampaignGroupError = 1
+	// CampaignGroup was removed with ENABLED or PAUSED Campaigns associated
+	// with it.
+	CampaignGroupErrorEnum_CANNOT_REMOVE_CAMPAIGN_GROUP_WITH_ENABLED_OR_PAUSED_CAMPAIGNS CampaignGroupErrorEnum_CampaignGroupError = 2
+	// CampaignGroup with the given name already exists.
+	CampaignGroupErrorEnum_DUPLICATE_NAME CampaignGroupErrorEnum_CampaignGroupError = 3
+	// Cannot modify a removed campaign group.
+	CampaignGroupErrorEnum_CANNOT_MODIFY_REMOVED_CAMPAIGN_GROUP CampaignGroupErrorEnum_CampaignGroupError = 4
+)
+
+var CampaignGroupErrorEnum_CampaignGroupError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CANNOT_REMOVE_CAMPAIGN_GROUP_WITH_ENABLED_OR_PAUSED_CAMPAIGNS",
+	3: "DUPLICATE_NAME",
+	4: "CANNOT_MODIFY_REMOVED_CAMPAIGN_GROUP",
+}
+var CampaignGroupErrorEnum_CampaignGroupError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CANNOT_REMOVE_CAMPAIGN_GROUP_WITH_ENABLED_OR_PAUSED_CAMPAIGNS": 2,
+	"DUPLICATE_NAME":                       3,
+	"CANNOT_MODIFY_REMOVED_CAMPAIGN_GROUP": 4,
+}
+
+func (x CampaignGroupErrorEnum_CampaignGroupError) String() string {
+	return proto.EnumName(CampaignGroupErrorEnum_CampaignGroupError_name, int32(x))
+}
+func (CampaignGroupErrorEnum_CampaignGroupError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_error_675a06723b979a2f, []int{0, 0}
+}
+
+// Container for enum describing possible campaign group errors.
+type CampaignGroupErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignGroupErrorEnum) Reset()         { *m = CampaignGroupErrorEnum{} }
+func (m *CampaignGroupErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignGroupErrorEnum) ProtoMessage()    {}
+func (*CampaignGroupErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_error_675a06723b979a2f, []int{0}
+}
+func (m *CampaignGroupErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignGroupErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignGroupErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignGroupErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignGroupErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignGroupErrorEnum.Merge(dst, src)
+}
+func (m *CampaignGroupErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignGroupErrorEnum.Size(m)
+}
+func (m *CampaignGroupErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignGroupErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignGroupErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignGroupErrorEnum)(nil), "google.ads.googleads.v0.errors.CampaignGroupErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CampaignGroupErrorEnum_CampaignGroupError", CampaignGroupErrorEnum_CampaignGroupError_name, CampaignGroupErrorEnum_CampaignGroupError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/campaign_group_error.proto", fileDescriptor_campaign_group_error_675a06723b979a2f)
+}
+
+var fileDescriptor_campaign_group_error_675a06723b979a2f = []byte{
+	// 334 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4b, 0xc3, 0x30,
+	0x1c, 0xc5, 0xed, 0x26, 0x0a, 0x19, 0x68, 0xc9, 0x41, 0x6f, 0x3b, 0x0c, 0x0f, 0x9e, 0xd2, 0x82,
+	0x27, 0x11, 0x0f, 0x59, 0x93, 0xd5, 0xe2, 0x9a, 0x86, 0x6d, 0xdd, 0x50, 0x0a, 0xa1, 0xae, 0x23,
+	0x0c, 0xb6, 0xa6, 0x34, 0x6e, 0x1f, 0xc8, 0xa3, 0x57, 0xbf, 0x85, 0xa0, 0x9f, 0x49, 0xda, 0x74,
+	0x3b, 0x38, 0xf4, 0xd4, 0xc7, 0xbf, 0xef, 0xf7, 0xfe, 0xfc, 0x5f, 0xc0, 0xad, 0x54, 0x4a, 0xae,
+	0x16, 0x4e, 0x9a, 0x69, 0xc7, 0xc8, 0x4a, 0x6d, 0x5d, 0x67, 0x51, 0x96, 0xaa, 0xd4, 0xce, 0x3c,
+	0x5d, 0x17, 0xe9, 0x52, 0xe6, 0x42, 0x96, 0x6a, 0x53, 0x88, 0x7a, 0x8a, 0x8a, 0x52, 0xbd, 0x2a,
+	0xd8, 0x35, 0x7e, 0x94, 0x66, 0x1a, 0xed, 0x51, 0xb4, 0x75, 0x91, 0x41, 0x7b, 0xdf, 0x16, 0xb8,
+	0xf0, 0x1a, 0xdc, 0xaf, 0x68, 0x5a, 0xcd, 0x69, 0xbe, 0x59, 0xf7, 0x3e, 0x2c, 0x00, 0x0f, 0x7f,
+	0xc1, 0x73, 0xd0, 0x89, 0xd9, 0x98, 0x53, 0x2f, 0x18, 0x04, 0x94, 0xd8, 0x47, 0xb0, 0x03, 0x4e,
+	0x63, 0xf6, 0xc8, 0xa2, 0x19, 0xb3, 0x2d, 0x88, 0xc1, 0xbd, 0x87, 0x19, 0x8b, 0x26, 0x62, 0x44,
+	0xc3, 0x68, 0x4a, 0x85, 0x87, 0x43, 0x8e, 0x03, 0x9f, 0x09, 0x7f, 0x14, 0xc5, 0x5c, 0xcc, 0x82,
+	0xc9, 0x83, 0xa0, 0x0c, 0xf7, 0x87, 0x94, 0x88, 0x68, 0x24, 0x38, 0x8e, 0xc7, 0x94, 0xec, 0x5d,
+	0x63, 0xbb, 0x05, 0x21, 0x38, 0x23, 0x31, 0x1f, 0x06, 0x1e, 0x9e, 0x50, 0xc1, 0x70, 0x48, 0xed,
+	0x36, 0xbc, 0x06, 0x57, 0x4d, 0x6c, 0x18, 0x91, 0x60, 0xf0, 0xd4, 0xa4, 0x93, 0x5f, 0xf1, 0xf6,
+	0x71, 0xff, 0xcb, 0x02, 0xbd, 0xb9, 0x5a, 0xa3, 0xff, 0xef, 0xee, 0x5f, 0x1e, 0x5e, 0xc6, 0xab,
+	0xc2, 0xb8, 0xf5, 0x4c, 0x1a, 0x54, 0xaa, 0x55, 0x9a, 0x4b, 0xa4, 0x4a, 0xe9, 0xc8, 0x45, 0x5e,
+	0xd7, 0xb9, 0x6b, 0xbf, 0x58, 0xea, 0xbf, 0x1e, 0xe3, 0xce, 0x7c, 0xde, 0x5a, 0x6d, 0x1f, 0xe3,
+	0xf7, 0x56, 0xd7, 0x37, 0x61, 0x38, 0xd3, 0xc8, 0xc8, 0x4a, 0x4d, 0x5d, 0x54, 0xaf, 0xd4, 0x9f,
+	0x3b, 0x43, 0x82, 0x33, 0x9d, 0xec, 0x0d, 0xc9, 0xd4, 0x4d, 0x8c, 0xe1, 0xe5, 0xa4, 0x5e, 0x7c,
+	0xf3, 0x13, 0x00, 0x00, 0xff, 0xff, 0x18, 0x8d, 0x63, 0x1d, 0x04, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/campaign_shared_set_error.pb.go b/googleapis/ads/googleads/v0/errors/campaign_shared_set_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c77daf605e2c88dfdfbec4dedc7e45ab6a2f94af
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/campaign_shared_set_error.pb.go
@@ -0,0 +1,111 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/campaign_shared_set_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible campaign shared set errors.
+type CampaignSharedSetErrorEnum_CampaignSharedSetError int32
+
+const (
+	// Enum unspecified.
+	CampaignSharedSetErrorEnum_UNSPECIFIED CampaignSharedSetErrorEnum_CampaignSharedSetError = 0
+	// The received error code is not known in this version.
+	CampaignSharedSetErrorEnum_UNKNOWN CampaignSharedSetErrorEnum_CampaignSharedSetError = 1
+	// The shared set belongs to another customer and permission isn't granted.
+	CampaignSharedSetErrorEnum_SHARED_SET_ACCESS_DENIED CampaignSharedSetErrorEnum_CampaignSharedSetError = 2
+)
+
+var CampaignSharedSetErrorEnum_CampaignSharedSetError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "SHARED_SET_ACCESS_DENIED",
+}
+var CampaignSharedSetErrorEnum_CampaignSharedSetError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"SHARED_SET_ACCESS_DENIED": 2,
+}
+
+func (x CampaignSharedSetErrorEnum_CampaignSharedSetError) String() string {
+	return proto.EnumName(CampaignSharedSetErrorEnum_CampaignSharedSetError_name, int32(x))
+}
+func (CampaignSharedSetErrorEnum_CampaignSharedSetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_error_6fb036bae1aa3bd9, []int{0, 0}
+}
+
+// Container for enum describing possible campaign shared set errors.
+type CampaignSharedSetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignSharedSetErrorEnum) Reset()         { *m = CampaignSharedSetErrorEnum{} }
+func (m *CampaignSharedSetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSetErrorEnum) ProtoMessage()    {}
+func (*CampaignSharedSetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_error_6fb036bae1aa3bd9, []int{0}
+}
+func (m *CampaignSharedSetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSetErrorEnum.Unmarshal(m, b)
+}
+func (m *CampaignSharedSetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSetErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CampaignSharedSetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSetErrorEnum.Merge(dst, src)
+}
+func (m *CampaignSharedSetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSetErrorEnum.Size(m)
+}
+func (m *CampaignSharedSetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CampaignSharedSetErrorEnum)(nil), "google.ads.googleads.v0.errors.CampaignSharedSetErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CampaignSharedSetErrorEnum_CampaignSharedSetError", CampaignSharedSetErrorEnum_CampaignSharedSetError_name, CampaignSharedSetErrorEnum_CampaignSharedSetError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/campaign_shared_set_error.proto", fileDescriptor_campaign_shared_set_error_6fb036bae1aa3bd9)
+}
+
+var fileDescriptor_campaign_shared_set_error_6fb036bae1aa3bd9 = []byte{
+	// 275 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xcf, 0x4a, 0xc3, 0x30,
+	0x1c, 0xb6, 0x15, 0x14, 0xb2, 0x83, 0xa3, 0x07, 0x11, 0x95, 0x1d, 0xfa, 0x00, 0x69, 0xc1, 0xa3,
+	0x20, 0x64, 0x6d, 0x9c, 0x43, 0x88, 0xc5, 0x6c, 0x13, 0xa4, 0x10, 0xe2, 0x12, 0xe2, 0x60, 0x6d,
+	0x4a, 0x52, 0xf7, 0x40, 0x1e, 0x7d, 0x14, 0x6f, 0xbe, 0x91, 0x24, 0xd9, 0x76, 0x9a, 0x9e, 0xf2,
+	0xc1, 0xf7, 0x2f, 0xbf, 0x0f, 0xdc, 0x29, 0xad, 0xd5, 0x5a, 0x66, 0x5c, 0xd8, 0x2c, 0x40, 0x87,
+	0x36, 0x79, 0x26, 0x8d, 0xd1, 0xc6, 0x66, 0x4b, 0xde, 0x74, 0x7c, 0xa5, 0x5a, 0x66, 0xdf, 0xb9,
+	0x91, 0x82, 0x59, 0xd9, 0x33, 0x4f, 0xc1, 0xce, 0xe8, 0x5e, 0x27, 0xa3, 0x60, 0x82, 0x5c, 0x58,
+	0xb8, 0xf7, 0xc3, 0x4d, 0x0e, 0x83, 0x3f, 0x35, 0xe0, 0xb2, 0xd8, 0x46, 0x50, 0x9f, 0x40, 0x65,
+	0x8f, 0x1d, 0x85, 0xdb, 0x8f, 0x26, 0x9d, 0x81, 0xf3, 0xc3, 0x6c, 0x72, 0x06, 0x06, 0x73, 0x42,
+	0x2b, 0x5c, 0x4c, 0xef, 0xa7, 0xb8, 0x1c, 0x1e, 0x25, 0x03, 0x70, 0x3a, 0x27, 0x8f, 0xe4, 0xe9,
+	0x85, 0x0c, 0xa3, 0xe4, 0x1a, 0x5c, 0xd0, 0x07, 0xf4, 0x8c, 0x4b, 0x46, 0xf1, 0x8c, 0xa1, 0xa2,
+	0xc0, 0x94, 0xb2, 0x12, 0x13, 0x27, 0x8d, 0xc7, 0x3f, 0x11, 0x48, 0x97, 0xba, 0x81, 0xff, 0x7f,
+	0x6d, 0x7c, 0x75, 0xb8, 0xba, 0x72, 0x77, 0x55, 0xd1, 0x6b, 0xb9, 0xb5, 0x2b, 0xbd, 0xe6, 0xad,
+	0x82, 0xda, 0xa8, 0x4c, 0xc9, 0xd6, 0x5f, 0xbd, 0x5b, 0xaa, 0x5b, 0xd9, 0xbf, 0x86, 0xbb, 0x0d,
+	0xcf, 0x67, 0x7c, 0x3c, 0x41, 0xe8, 0x2b, 0x1e, 0x4d, 0x42, 0x18, 0x12, 0x16, 0x06, 0xe8, 0xd0,
+	0x22, 0x87, 0xbe, 0xd2, 0x7e, 0xef, 0x04, 0x35, 0x12, 0xb6, 0xde, 0x0b, 0xea, 0x45, 0x5e, 0x07,
+	0xc1, 0xdb, 0x89, 0x2f, 0xbe, 0xf9, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x05, 0x13, 0x71, 0xbb, 0xb0,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/change_status_error.pb.go b/googleapis/ads/googleads/v0/errors/change_status_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a224ee13f8d330bdc5a061897965a3dd4f53eacd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/change_status_error.pb.go
@@ -0,0 +1,110 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/change_status_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible change status errors.
+type ChangeStatusErrorEnum_ChangeStatusError int32
+
+const (
+	// Enum unspecified.
+	ChangeStatusErrorEnum_UNSPECIFIED ChangeStatusErrorEnum_ChangeStatusError = 0
+	// The received error code is not known in this version.
+	ChangeStatusErrorEnum_UNKNOWN ChangeStatusErrorEnum_ChangeStatusError = 1
+	// The requested start date is too old.
+	ChangeStatusErrorEnum_START_DATE_TOO_OLD ChangeStatusErrorEnum_ChangeStatusError = 3
+)
+
+var ChangeStatusErrorEnum_ChangeStatusError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "START_DATE_TOO_OLD",
+}
+var ChangeStatusErrorEnum_ChangeStatusError_value = map[string]int32{
+	"UNSPECIFIED":        0,
+	"UNKNOWN":            1,
+	"START_DATE_TOO_OLD": 3,
+}
+
+func (x ChangeStatusErrorEnum_ChangeStatusError) String() string {
+	return proto.EnumName(ChangeStatusErrorEnum_ChangeStatusError_name, int32(x))
+}
+func (ChangeStatusErrorEnum_ChangeStatusError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_error_3510b0503a390638, []int{0, 0}
+}
+
+// Container for enum describing possible change status errors.
+type ChangeStatusErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChangeStatusErrorEnum) Reset()         { *m = ChangeStatusErrorEnum{} }
+func (m *ChangeStatusErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatusErrorEnum) ProtoMessage()    {}
+func (*ChangeStatusErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_error_3510b0503a390638, []int{0}
+}
+func (m *ChangeStatusErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatusErrorEnum.Unmarshal(m, b)
+}
+func (m *ChangeStatusErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatusErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *ChangeStatusErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatusErrorEnum.Merge(dst, src)
+}
+func (m *ChangeStatusErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatusErrorEnum.Size(m)
+}
+func (m *ChangeStatusErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatusErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatusErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ChangeStatusErrorEnum)(nil), "google.ads.googleads.v0.errors.ChangeStatusErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.ChangeStatusErrorEnum_ChangeStatusError", ChangeStatusErrorEnum_ChangeStatusError_name, ChangeStatusErrorEnum_ChangeStatusError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/change_status_error.proto", fileDescriptor_change_status_error_3510b0503a390638)
+}
+
+var fileDescriptor_change_status_error_3510b0503a390638 = []byte{
+	// 266 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xe4, 0x8c, 0xc4, 0xbc, 0xf4, 0xd4, 0xf8, 0xe2, 0x92, 0xc4, 0x92,
+	0xd2, 0xe2, 0x78, 0xb0, 0xa0, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x1c, 0x44, 0xb9, 0x5e,
+	0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xa7, 0x5e, 0x99, 0x81, 0x1e, 0x44, 0xa7, 0x52, 0x12, 0x97, 0xa8,
+	0x33, 0x58, 0x73, 0x30, 0x58, 0xaf, 0x2b, 0x48, 0xd4, 0x35, 0xaf, 0x34, 0x57, 0xc9, 0x93, 0x4b,
+	0x10, 0x43, 0x42, 0x88, 0x9f, 0x8b, 0x3b, 0xd4, 0x2f, 0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3,
+	0xd5, 0x45, 0x80, 0x41, 0x88, 0x9b, 0x8b, 0x3d, 0xd4, 0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80,
+	0x51, 0x48, 0x8c, 0x4b, 0x28, 0x38, 0xc4, 0x31, 0x28, 0x24, 0xde, 0xc5, 0x31, 0xc4, 0x35, 0x3e,
+	0xc4, 0xdf, 0x3f, 0xde, 0xdf, 0xc7, 0x45, 0x80, 0xd9, 0xe9, 0x0c, 0x23, 0x97, 0x52, 0x72, 0x7e,
+	0xae, 0x1e, 0x7e, 0xa7, 0x38, 0x89, 0x61, 0xd8, 0x17, 0x00, 0xf2, 0x42, 0x00, 0x63, 0x94, 0x0b,
+	0x54, 0x67, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e,
+	0xd8, 0x83, 0xb0, 0xe0, 0x28, 0xc8, 0x2c, 0xc6, 0x15, 0x3a, 0xd6, 0x10, 0x6a, 0x11, 0x13, 0xb3,
+	0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0x61, 0x8e, 0x29, 0xc5, 0x7a, 0x10, 0x26, 0x88,
+	0x15, 0x66, 0xa0, 0x07, 0xb6, 0xb2, 0xf8, 0x14, 0x4c, 0x41, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c,
+	0x41, 0x4c, 0x98, 0x41, 0x0c, 0x44, 0x41, 0x12, 0x1b, 0xd8, 0x62, 0x63, 0x40, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xc6, 0x6d, 0xde, 0x35, 0x95, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/collection_size_error.pb.go b/googleapis/ads/googleads/v0/errors/collection_size_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1e48345c3eea337576b35d3d24c15b2187cdd36f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/collection_size_error.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/collection_size_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible collection size errors.
+type CollectionSizeErrorEnum_CollectionSizeError int32
+
+const (
+	// Enum unspecified.
+	CollectionSizeErrorEnum_UNSPECIFIED CollectionSizeErrorEnum_CollectionSizeError = 0
+	// The received error code is not known in this version.
+	CollectionSizeErrorEnum_UNKNOWN CollectionSizeErrorEnum_CollectionSizeError = 1
+	// Too few.
+	CollectionSizeErrorEnum_TOO_FEW CollectionSizeErrorEnum_CollectionSizeError = 2
+	// Too many.
+	CollectionSizeErrorEnum_TOO_MANY CollectionSizeErrorEnum_CollectionSizeError = 3
+)
+
+var CollectionSizeErrorEnum_CollectionSizeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "TOO_FEW",
+	3: "TOO_MANY",
+}
+var CollectionSizeErrorEnum_CollectionSizeError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"TOO_FEW":     2,
+	"TOO_MANY":    3,
+}
+
+func (x CollectionSizeErrorEnum_CollectionSizeError) String() string {
+	return proto.EnumName(CollectionSizeErrorEnum_CollectionSizeError_name, int32(x))
+}
+func (CollectionSizeErrorEnum_CollectionSizeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_collection_size_error_d621fd7462c2de8f, []int{0, 0}
+}
+
+// Container for enum describing possible collection size errors.
+type CollectionSizeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CollectionSizeErrorEnum) Reset()         { *m = CollectionSizeErrorEnum{} }
+func (m *CollectionSizeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CollectionSizeErrorEnum) ProtoMessage()    {}
+func (*CollectionSizeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_collection_size_error_d621fd7462c2de8f, []int{0}
+}
+func (m *CollectionSizeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CollectionSizeErrorEnum.Unmarshal(m, b)
+}
+func (m *CollectionSizeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CollectionSizeErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CollectionSizeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CollectionSizeErrorEnum.Merge(dst, src)
+}
+func (m *CollectionSizeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CollectionSizeErrorEnum.Size(m)
+}
+func (m *CollectionSizeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CollectionSizeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CollectionSizeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CollectionSizeErrorEnum)(nil), "google.ads.googleads.v0.errors.CollectionSizeErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CollectionSizeErrorEnum_CollectionSizeError", CollectionSizeErrorEnum_CollectionSizeError_name, CollectionSizeErrorEnum_CollectionSizeError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/collection_size_error.proto", fileDescriptor_collection_size_error_d621fd7462c2de8f)
+}
+
+var fileDescriptor_collection_size_error_d621fd7462c2de8f = []byte{
+	// 267 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xe4, 0xfc, 0x9c, 0x9c, 0xd4, 0xe4, 0x92, 0xcc, 0xfc, 0xbc, 0xf8,
+	0xe2, 0xcc, 0xaa, 0xd4, 0x78, 0xb0, 0xb0, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x1c, 0x44,
+	0x83, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xaf, 0x5e, 0x99, 0x81, 0x1e, 0x44, 0xaf, 0x52, 0x26,
+	0x97, 0xb8, 0x33, 0x5c, 0x7b, 0x70, 0x66, 0x55, 0xaa, 0x2b, 0x48, 0xdc, 0x35, 0xaf, 0x34, 0x57,
+	0xc9, 0x8f, 0x4b, 0x18, 0x8b, 0x94, 0x10, 0x3f, 0x17, 0x77, 0xa8, 0x5f, 0x70, 0x80, 0xab, 0xb3,
+	0xa7, 0x9b, 0xa7, 0xab, 0x8b, 0x00, 0x83, 0x10, 0x37, 0x17, 0x7b, 0xa8, 0x9f, 0xb7, 0x9f, 0x7f,
+	0xb8, 0x9f, 0x00, 0x23, 0x88, 0x13, 0xe2, 0xef, 0x1f, 0xef, 0xe6, 0x1a, 0x2e, 0xc0, 0x24, 0xc4,
+	0xc3, 0xc5, 0x01, 0xe2, 0xf8, 0x3a, 0xfa, 0x45, 0x0a, 0x30, 0x3b, 0x9d, 0x63, 0xe4, 0x52, 0x4a,
+	0xce, 0xcf, 0xd5, 0xc3, 0xef, 0x22, 0x27, 0x09, 0x2c, 0x96, 0x06, 0x80, 0xfc, 0x12, 0xc0, 0x18,
+	0xe5, 0x02, 0xd5, 0x9b, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e,
+	0x9a, 0x07, 0xf6, 0x29, 0x2c, 0x64, 0x0a, 0x32, 0x8b, 0x71, 0x05, 0x94, 0x35, 0x84, 0x5a, 0xc4,
+	0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x98, 0x63, 0x4a, 0xb1, 0x1e, 0x84,
+	0x09, 0x62, 0x85, 0x19, 0xe8, 0x81, 0xad, 0x2c, 0x3e, 0x05, 0x53, 0x10, 0xe3, 0x98, 0x52, 0x1c,
+	0x03, 0x57, 0x10, 0x13, 0x66, 0x10, 0x03, 0x51, 0x90, 0xc4, 0x06, 0xb6, 0xd8, 0x18, 0x10, 0x00,
+	0x00, 0xff, 0xff, 0x9e, 0xae, 0x5b, 0xc8, 0xa0, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/context_error.pb.go b/googleapis/ads/googleads/v0/errors/context_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..df514418fa076a680bb28e9b005b93671cfa8589
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/context_error.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/context_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible context errors.
+type ContextErrorEnum_ContextError int32
+
+const (
+	// Enum unspecified.
+	ContextErrorEnum_UNSPECIFIED ContextErrorEnum_ContextError = 0
+	// The received error code is not known in this version.
+	ContextErrorEnum_UNKNOWN ContextErrorEnum_ContextError = 1
+	// The operation is not allowed for the given context.
+	ContextErrorEnum_OPERATION_NOT_PERMITTED_FOR_CONTEXT ContextErrorEnum_ContextError = 2
+	// The operation is not allowed for removed resources.
+	ContextErrorEnum_OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE ContextErrorEnum_ContextError = 3
+)
+
+var ContextErrorEnum_ContextError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPERATION_NOT_PERMITTED_FOR_CONTEXT",
+	3: "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE",
+}
+var ContextErrorEnum_ContextError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"OPERATION_NOT_PERMITTED_FOR_CONTEXT": 2,
+	"OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE": 3,
+}
+
+func (x ContextErrorEnum_ContextError) String() string {
+	return proto.EnumName(ContextErrorEnum_ContextError_name, int32(x))
+}
+func (ContextErrorEnum_ContextError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_context_error_9a745e2a82a873d0, []int{0, 0}
+}
+
+// Container for enum describing possible context errors.
+type ContextErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ContextErrorEnum) Reset()         { *m = ContextErrorEnum{} }
+func (m *ContextErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ContextErrorEnum) ProtoMessage()    {}
+func (*ContextErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_context_error_9a745e2a82a873d0, []int{0}
+}
+func (m *ContextErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ContextErrorEnum.Unmarshal(m, b)
+}
+func (m *ContextErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ContextErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *ContextErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ContextErrorEnum.Merge(dst, src)
+}
+func (m *ContextErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ContextErrorEnum.Size(m)
+}
+func (m *ContextErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ContextErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ContextErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ContextErrorEnum)(nil), "google.ads.googleads.v0.errors.ContextErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.ContextErrorEnum_ContextError", ContextErrorEnum_ContextError_name, ContextErrorEnum_ContextError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/context_error.proto", fileDescriptor_context_error_9a745e2a82a873d0)
+}
+
+var fileDescriptor_context_error_9a745e2a82a873d0 = []byte{
+	// 300 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xe4, 0xfc, 0xbc, 0x92, 0xd4, 0x8a, 0x92, 0x78, 0x30, 0x57, 0xaf,
+	0xa0, 0x28, 0xbf, 0x24, 0x5f, 0x48, 0x0e, 0xa2, 0x50, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x47,
+	0xaf, 0xcc, 0x40, 0x0f, 0xa2, 0x47, 0x69, 0x0e, 0x23, 0x97, 0x80, 0x33, 0x44, 0x9f, 0x2b, 0x48,
+	0xc4, 0x35, 0xaf, 0x34, 0x57, 0xa9, 0x9d, 0x91, 0x8b, 0x07, 0x59, 0x50, 0x88, 0x9f, 0x8b, 0x3b,
+	0xd4, 0x2f, 0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3, 0xd5, 0x45, 0x80, 0x41, 0x88, 0x9b, 0x8b,
+	0x3d, 0xd4, 0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80, 0x51, 0x48, 0x9d, 0x4b, 0xd9, 0x3f, 0xc0,
+	0x35, 0xc8, 0x31, 0xc4, 0xd3, 0xdf, 0x2f, 0xde, 0xcf, 0x3f, 0x24, 0x3e, 0xc0, 0x35, 0xc8, 0xd7,
+	0x33, 0x24, 0xc4, 0xd5, 0x25, 0xde, 0xcd, 0x3f, 0x28, 0xde, 0xd9, 0xdf, 0x2f, 0xc4, 0x35, 0x22,
+	0x44, 0x80, 0x49, 0xc8, 0x80, 0x4b, 0x07, 0x9f, 0xc2, 0x20, 0x57, 0x5f, 0xff, 0x30, 0x57, 0x97,
+	0xf8, 0x20, 0xd7, 0x60, 0xff, 0xd0, 0x20, 0x67, 0x57, 0x01, 0x66, 0xa7, 0xe3, 0x8c, 0x5c, 0x4a,
+	0xc9, 0xf9, 0xb9, 0x7a, 0xf8, 0x7d, 0xe1, 0x24, 0x88, 0xec, 0xda, 0x00, 0x90, 0xc7, 0x03, 0x18,
+	0xa3, 0x5c, 0xa0, 0x9a, 0xd2, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3,
+	0x53, 0xf3, 0xc0, 0xc1, 0x02, 0x0b, 0xbe, 0x82, 0xcc, 0x62, 0x5c, 0xa1, 0x69, 0x0d, 0xa1, 0x16,
+	0x31, 0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x92, 0x73, 0x87, 0x18, 0xe6, 0x98, 0x52, 0xac, 0x07,
+	0x61, 0x82, 0x58, 0x61, 0x06, 0x7a, 0x60, 0x2b, 0x8b, 0x4f, 0xc1, 0x14, 0xc4, 0x38, 0xa6, 0x14,
+	0xc7, 0xc0, 0x15, 0xc4, 0x84, 0x19, 0xc4, 0x40, 0x14, 0x24, 0xb1, 0x81, 0x2d, 0x36, 0x06, 0x04,
+	0x00, 0x00, 0xff, 0xff, 0x46, 0x21, 0xd9, 0x0a, 0xc5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/conversion_action_error.pb.go b/googleapis/ads/googleads/v0/errors/conversion_action_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6d5ff23574566ea57d2392ffa2e9d22d0a37e1cc
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/conversion_action_error.pb.go
@@ -0,0 +1,154 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/conversion_action_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible conversion action errors.
+type ConversionActionErrorEnum_ConversionActionError int32
+
+const (
+	// Enum unspecified.
+	ConversionActionErrorEnum_UNSPECIFIED ConversionActionErrorEnum_ConversionActionError = 0
+	// The received error code is not known in this version.
+	ConversionActionErrorEnum_UNKNOWN ConversionActionErrorEnum_ConversionActionError = 1
+	// The specified conversion action name already exists.
+	ConversionActionErrorEnum_DUPLICATE_NAME ConversionActionErrorEnum_ConversionActionError = 2
+	// Another conversion action with the specified app id already exists.
+	ConversionActionErrorEnum_DUPLICATE_APP_ID ConversionActionErrorEnum_ConversionActionError = 3
+	// Android first open action conflicts with Google play codeless download
+	// action tracking the same app.
+	ConversionActionErrorEnum_TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD ConversionActionErrorEnum_ConversionActionError = 4
+	// Android first open action conflicts with Google play codeless download
+	// action tracking the same app.
+	ConversionActionErrorEnum_BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION ConversionActionErrorEnum_ConversionActionError = 5
+	// The attribution model cannot be set to DATA_DRIVEN because a data-driven
+	// model has never been generated.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED ConversionActionErrorEnum_ConversionActionError = 6
+	// The attribution model cannot be set to DATA_DRIVEN because the
+	// data-driven model is expired.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_EXPIRED ConversionActionErrorEnum_ConversionActionError = 7
+	// The attribution model cannot be set to DATA_DRIVEN because the
+	// data-driven model is stale.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_STALE ConversionActionErrorEnum_ConversionActionError = 8
+	// The attribution model cannot be set to DATA_DRIVEN because the
+	// data-driven model is unavailable or the conversion action was newly
+	// added.
+	ConversionActionErrorEnum_DATA_DRIVEN_MODEL_UNKNOWN ConversionActionErrorEnum_ConversionActionError = 9
+)
+
+var ConversionActionErrorEnum_ConversionActionError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DUPLICATE_NAME",
+	3: "DUPLICATE_APP_ID",
+	4: "TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD",
+	5: "BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION",
+	6: "DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED",
+	7: "DATA_DRIVEN_MODEL_EXPIRED",
+	8: "DATA_DRIVEN_MODEL_STALE",
+	9: "DATA_DRIVEN_MODEL_UNKNOWN",
+}
+var ConversionActionErrorEnum_ConversionActionError_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"UNKNOWN":          1,
+	"DUPLICATE_NAME":   2,
+	"DUPLICATE_APP_ID": 3,
+	"TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD": 4,
+	"BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION":       5,
+	"DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED":               6,
+	"DATA_DRIVEN_MODEL_EXPIRED":                           7,
+	"DATA_DRIVEN_MODEL_STALE":                             8,
+	"DATA_DRIVEN_MODEL_UNKNOWN":                           9,
+}
+
+func (x ConversionActionErrorEnum_ConversionActionError) String() string {
+	return proto.EnumName(ConversionActionErrorEnum_ConversionActionError_name, int32(x))
+}
+func (ConversionActionErrorEnum_ConversionActionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_error_529ca4a007cbb9ef, []int{0, 0}
+}
+
+// Container for enum describing possible conversion action errors.
+type ConversionActionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConversionActionErrorEnum) Reset()         { *m = ConversionActionErrorEnum{} }
+func (m *ConversionActionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionErrorEnum) ProtoMessage()    {}
+func (*ConversionActionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_error_529ca4a007cbb9ef, []int{0}
+}
+func (m *ConversionActionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionErrorEnum.Unmarshal(m, b)
+}
+func (m *ConversionActionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *ConversionActionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionErrorEnum.Merge(dst, src)
+}
+func (m *ConversionActionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionErrorEnum.Size(m)
+}
+func (m *ConversionActionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ConversionActionErrorEnum)(nil), "google.ads.googleads.v0.errors.ConversionActionErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.ConversionActionErrorEnum_ConversionActionError", ConversionActionErrorEnum_ConversionActionError_name, ConversionActionErrorEnum_ConversionActionError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/conversion_action_error.proto", fileDescriptor_conversion_action_error_529ca4a007cbb9ef)
+}
+
+var fileDescriptor_conversion_action_error_529ca4a007cbb9ef = []byte{
+	// 407 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4f, 0x6f, 0xd3, 0x30,
+	0x14, 0xa7, 0x19, 0x6c, 0xe0, 0x49, 0x60, 0x59, 0x20, 0x34, 0x10, 0x3b, 0x54, 0xe2, 0xc0, 0x01,
+	0xa7, 0x68, 0x07, 0x0e, 0x70, 0x79, 0x8d, 0x1f, 0x91, 0x45, 0x6a, 0x47, 0x49, 0x9a, 0x22, 0x54,
+	0xc9, 0x2a, 0x6d, 0x14, 0x4d, 0xda, 0xe2, 0x29, 0x1e, 0xfd, 0x40, 0x1c, 0xf9, 0x28, 0x9c, 0xe0,
+	0x93, 0xf0, 0x15, 0x50, 0xe2, 0xb5, 0x1c, 0xd6, 0xf5, 0xe4, 0x9f, 0xfc, 0xfb, 0xf3, 0xa4, 0xf7,
+	0x7b, 0xe4, 0x63, 0x6d, 0x6d, 0x7d, 0x51, 0x85, 0x8b, 0x95, 0x0b, 0x3d, 0xec, 0xd0, 0x7a, 0x14,
+	0x56, 0x6d, 0x6b, 0x5b, 0x17, 0x2e, 0x6d, 0xb3, 0xae, 0x5a, 0x77, 0x6e, 0x1b, 0xb3, 0x58, 0x5e,
+	0x77, 0x4f, 0x4f, 0xf0, 0xab, 0xd6, 0x5e, 0x5b, 0x76, 0xea, 0x2d, 0x7c, 0xb1, 0x72, 0x7c, 0xeb,
+	0xe6, 0xeb, 0x11, 0xf7, 0xee, 0xe1, 0xdf, 0x80, 0x9c, 0x44, 0xdb, 0x04, 0xe8, 0x03, 0xb0, 0xa3,
+	0xb0, 0xf9, 0x7e, 0x39, 0xfc, 0x13, 0x90, 0x67, 0x3b, 0x59, 0xf6, 0x84, 0x1c, 0x4f, 0x55, 0x9e,
+	0x62, 0x24, 0x3f, 0x49, 0x14, 0xf4, 0x1e, 0x3b, 0x26, 0x47, 0x53, 0xf5, 0x59, 0xe9, 0x99, 0xa2,
+	0x03, 0xc6, 0xc8, 0x63, 0x31, 0x4d, 0x13, 0x19, 0x41, 0x81, 0x46, 0xc1, 0x04, 0x69, 0xc0, 0x9e,
+	0x12, 0xfa, 0xff, 0x0f, 0xd2, 0xd4, 0x48, 0x41, 0x0f, 0xd8, 0x7b, 0x72, 0x56, 0xcc, 0xb4, 0x89,
+	0xb4, 0x2a, 0x31, 0xcb, 0xa5, 0x56, 0x06, 0xa2, 0x42, 0x6a, 0x95, 0x9b, 0xb1, 0x14, 0x42, 0xaa,
+	0xd8, 0x68, 0x65, 0x72, 0x98, 0x78, 0x8b, 0xd0, 0x33, 0x95, 0x68, 0x10, 0xf4, 0x3e, 0x7b, 0x47,
+	0xde, 0xee, 0x53, 0x18, 0xc8, 0x4d, 0x9c, 0xe8, 0x31, 0x24, 0x37, 0x81, 0xf4, 0x01, 0x7b, 0x43,
+	0x5e, 0x0b, 0x28, 0xc0, 0x88, 0x4c, 0x96, 0xa8, 0xcc, 0x44, 0x0b, 0x4c, 0xcc, 0x0c, 0x72, 0xa3,
+	0xb0, 0xc4, 0xcc, 0xc4, 0xa8, 0x30, 0x83, 0x02, 0x05, 0x3d, 0x64, 0xaf, 0xc8, 0xc9, 0x6d, 0x29,
+	0x7e, 0x49, 0x65, 0x86, 0x82, 0x1e, 0xb1, 0x97, 0xe4, 0xf9, 0x6d, 0x3a, 0x2f, 0x20, 0x41, 0xfa,
+	0x70, 0xb7, 0x77, 0xb3, 0x9b, 0x47, 0xe3, 0xdf, 0x03, 0x32, 0x5c, 0xda, 0x4b, 0xbe, 0xbf, 0x98,
+	0xf1, 0x8b, 0x9d, 0x7b, 0x4f, 0xbb, 0x52, 0xd3, 0xc1, 0x57, 0x71, 0xe3, 0xae, 0xed, 0xc5, 0xa2,
+	0xa9, 0xb9, 0x6d, 0xeb, 0xb0, 0xae, 0x9a, 0xbe, 0xf2, 0xcd, 0x91, 0x5c, 0x9d, 0xbb, 0xbb, 0x6e,
+	0xe6, 0x83, 0x7f, 0x7e, 0x04, 0x07, 0x31, 0xc0, 0xcf, 0xe0, 0x34, 0xf6, 0x61, 0xb0, 0x72, 0xdc,
+	0xc3, 0x0e, 0x95, 0x23, 0xde, 0x8f, 0x74, 0xbf, 0x36, 0x82, 0x39, 0xac, 0xdc, 0x7c, 0x2b, 0x98,
+	0x97, 0xa3, 0xb9, 0x17, 0x7c, 0x3b, 0xec, 0x07, 0x9f, 0xfd, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x82,
+	0x96, 0xeb, 0x1a, 0xab, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/criterion_error.pb.go b/googleapis/ads/googleads/v0/errors/criterion_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b4a054c7081876efac8e0c23418a1b50f90cc01e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/criterion_error.pb.go
@@ -0,0 +1,544 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/criterion_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible criterion errors.
+type CriterionErrorEnum_CriterionError int32
+
+const (
+	// Enum unspecified.
+	CriterionErrorEnum_UNSPECIFIED CriterionErrorEnum_CriterionError = 0
+	// The received error code is not known in this version.
+	CriterionErrorEnum_UNKNOWN CriterionErrorEnum_CriterionError = 1
+	// Concrete type of criterion is required for CREATE and UPDATE operations.
+	CriterionErrorEnum_CONCRETE_TYPE_REQUIRED CriterionErrorEnum_CriterionError = 2
+	// The category requested for exclusion is invalid.
+	CriterionErrorEnum_INVALID_EXCLUDED_CATEGORY CriterionErrorEnum_CriterionError = 3
+	// Invalid keyword criteria text.
+	CriterionErrorEnum_INVALID_KEYWORD_TEXT CriterionErrorEnum_CriterionError = 4
+	// Keyword text should be less than 80 chars.
+	CriterionErrorEnum_KEYWORD_TEXT_TOO_LONG CriterionErrorEnum_CriterionError = 5
+	// Keyword text has too many words.
+	CriterionErrorEnum_KEYWORD_HAS_TOO_MANY_WORDS CriterionErrorEnum_CriterionError = 6
+	// Keyword text has invalid characters or symbols.
+	CriterionErrorEnum_KEYWORD_HAS_INVALID_CHARS CriterionErrorEnum_CriterionError = 7
+	// Invalid placement URL.
+	CriterionErrorEnum_INVALID_PLACEMENT_URL CriterionErrorEnum_CriterionError = 8
+	// Invalid user list criterion.
+	CriterionErrorEnum_INVALID_USER_LIST CriterionErrorEnum_CriterionError = 9
+	// Invalid user interest criterion.
+	CriterionErrorEnum_INVALID_USER_INTEREST CriterionErrorEnum_CriterionError = 10
+	// Placement URL has wrong format.
+	CriterionErrorEnum_INVALID_FORMAT_FOR_PLACEMENT_URL CriterionErrorEnum_CriterionError = 11
+	// Placement URL is too long.
+	CriterionErrorEnum_PLACEMENT_URL_IS_TOO_LONG CriterionErrorEnum_CriterionError = 12
+	// Indicates the URL contains an illegal character.
+	CriterionErrorEnum_PLACEMENT_URL_HAS_ILLEGAL_CHAR CriterionErrorEnum_CriterionError = 13
+	// Indicates the URL contains multiple comma separated URLs.
+	CriterionErrorEnum_PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE CriterionErrorEnum_CriterionError = 14
+	// Indicates the domain is blacklisted.
+	CriterionErrorEnum_PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION CriterionErrorEnum_CriterionError = 15
+	// Invalid topic path.
+	CriterionErrorEnum_INVALID_TOPIC_PATH CriterionErrorEnum_CriterionError = 16
+	// The YouTube Channel Id is invalid.
+	CriterionErrorEnum_INVALID_YOUTUBE_CHANNEL_ID CriterionErrorEnum_CriterionError = 17
+	// The YouTube Video Id is invalid.
+	CriterionErrorEnum_INVALID_YOUTUBE_VIDEO_ID CriterionErrorEnum_CriterionError = 18
+	// Indicates the placement is a YouTube vertical channel, which is no longer
+	// supported.
+	CriterionErrorEnum_YOUTUBE_VERTICAL_CHANNEL_DEPRECATED CriterionErrorEnum_CriterionError = 19
+	// Indicates the placement is a YouTube demographic channel, which is no
+	// longer supported.
+	CriterionErrorEnum_YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED CriterionErrorEnum_CriterionError = 20
+	// YouTube urls are not supported in Placement criterion. Use YouTubeChannel
+	// and YouTubeVideo criterion instead.
+	CriterionErrorEnum_YOUTUBE_URL_UNSUPPORTED CriterionErrorEnum_CriterionError = 21
+	// Criteria type can not be excluded by the customer, like AOL account type
+	// cannot target site type criteria.
+	CriterionErrorEnum_CANNOT_EXCLUDE_CRITERIA_TYPE CriterionErrorEnum_CriterionError = 22
+	// Criteria type can not be targeted.
+	CriterionErrorEnum_CANNOT_ADD_CRITERIA_TYPE CriterionErrorEnum_CriterionError = 23
+	// Product filter in the product criteria has invalid characters. Operand
+	// and the argument in the filter can not have "==" or "&+".
+	CriterionErrorEnum_INVALID_PRODUCT_FILTER CriterionErrorEnum_CriterionError = 24
+	// Product filter in the product criteria is translated to a string as
+	// operand1==argument1&+operand2==argument2, maximum allowed length for the
+	// string is 255 chars.
+	CriterionErrorEnum_PRODUCT_FILTER_TOO_LONG CriterionErrorEnum_CriterionError = 25
+	// Not allowed to exclude similar user list.
+	CriterionErrorEnum_CANNOT_EXCLUDE_SIMILAR_USER_LIST CriterionErrorEnum_CriterionError = 26
+	// Not allowed to target a closed user list.
+	CriterionErrorEnum_CANNOT_ADD_CLOSED_USER_LIST CriterionErrorEnum_CriterionError = 27
+	// Not allowed to add display only UserLists to search only campaigns.
+	CriterionErrorEnum_CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS CriterionErrorEnum_CriterionError = 28
+	// Not allowed to add display only UserLists to search plus campaigns.
+	CriterionErrorEnum_CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS CriterionErrorEnum_CriterionError = 29
+	// Not allowed to add display only UserLists to shopping campaigns.
+	CriterionErrorEnum_CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS CriterionErrorEnum_CriterionError = 30
+	// Not allowed to add User interests to search only campaigns.
+	CriterionErrorEnum_CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS CriterionErrorEnum_CriterionError = 31
+	// Not allowed to set bids for this criterion type in search campaigns
+	CriterionErrorEnum_CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS CriterionErrorEnum_CriterionError = 32
+	// Final URLs, URL Templates and CustomParameters cannot be set for the
+	// criterion types of Gender, AgeRange, UserList, Placement, MobileApp, and
+	// MobileAppCategory in search campaigns and shopping campaigns.
+	CriterionErrorEnum_CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE CriterionErrorEnum_CriterionError = 33
+	// IP address is not valid.
+	CriterionErrorEnum_INVALID_IP_ADDRESS CriterionErrorEnum_CriterionError = 34
+	// IP format is not valid.
+	CriterionErrorEnum_INVALID_IP_FORMAT CriterionErrorEnum_CriterionError = 35
+	// Mobile application is not valid.
+	CriterionErrorEnum_INVALID_MOBILE_APP CriterionErrorEnum_CriterionError = 36
+	// Mobile application category is not valid.
+	CriterionErrorEnum_INVALID_MOBILE_APP_CATEGORY CriterionErrorEnum_CriterionError = 37
+	// The CriterionId does not exist or is of the incorrect type.
+	CriterionErrorEnum_INVALID_CRITERION_ID CriterionErrorEnum_CriterionError = 38
+	// The Criterion is not allowed to be targeted.
+	CriterionErrorEnum_CANNOT_TARGET_CRITERION CriterionErrorEnum_CriterionError = 39
+	// The criterion is not allowed to be targeted as it is deprecated.
+	CriterionErrorEnum_CANNOT_TARGET_OBSOLETE_CRITERION CriterionErrorEnum_CriterionError = 40
+	// The CriterionId is not valid for the type.
+	CriterionErrorEnum_CRITERION_ID_AND_TYPE_MISMATCH CriterionErrorEnum_CriterionError = 41
+	// Distance for the radius for the proximity criterion is invalid.
+	CriterionErrorEnum_INVALID_PROXIMITY_RADIUS CriterionErrorEnum_CriterionError = 42
+	// Units for the distance for the radius for the proximity criterion is
+	// invalid.
+	CriterionErrorEnum_INVALID_PROXIMITY_RADIUS_UNITS CriterionErrorEnum_CriterionError = 43
+	// Street address in the address is not valid.
+	CriterionErrorEnum_INVALID_STREETADDRESS_LENGTH CriterionErrorEnum_CriterionError = 44
+	// City name in the address is not valid.
+	CriterionErrorEnum_INVALID_CITYNAME_LENGTH CriterionErrorEnum_CriterionError = 45
+	// Region code in the address is not valid.
+	CriterionErrorEnum_INVALID_REGIONCODE_LENGTH CriterionErrorEnum_CriterionError = 46
+	// Region name in the address is not valid.
+	CriterionErrorEnum_INVALID_REGIONNAME_LENGTH CriterionErrorEnum_CriterionError = 47
+	// Postal code in the address is not valid.
+	CriterionErrorEnum_INVALID_POSTALCODE_LENGTH CriterionErrorEnum_CriterionError = 48
+	// Country code in the address is not valid.
+	CriterionErrorEnum_INVALID_COUNTRY_CODE CriterionErrorEnum_CriterionError = 49
+	// Latitude for the GeoPoint is not valid.
+	CriterionErrorEnum_INVALID_LATITUDE CriterionErrorEnum_CriterionError = 50
+	// Longitude for the GeoPoint is not valid.
+	CriterionErrorEnum_INVALID_LONGITUDE CriterionErrorEnum_CriterionError = 51
+	// The Proximity input is not valid. Both address and geoPoint cannot be
+	// null.
+	CriterionErrorEnum_PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL CriterionErrorEnum_CriterionError = 52
+	// The Proximity address cannot be geocoded to a valid lat/long.
+	CriterionErrorEnum_INVALID_PROXIMITY_ADDRESS CriterionErrorEnum_CriterionError = 53
+	// User domain name is not valid.
+	CriterionErrorEnum_INVALID_USER_DOMAIN_NAME CriterionErrorEnum_CriterionError = 54
+	// Length of serialized criterion parameter exceeded size limit.
+	CriterionErrorEnum_CRITERION_PARAMETER_TOO_LONG CriterionErrorEnum_CriterionError = 55
+	// Time interval in the AdSchedule overlaps with another AdSchedule.
+	CriterionErrorEnum_AD_SCHEDULE_TIME_INTERVALS_OVERLAP CriterionErrorEnum_CriterionError = 56
+	// AdSchedule time interval cannot span multiple days.
+	CriterionErrorEnum_AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS CriterionErrorEnum_CriterionError = 57
+	// AdSchedule time interval specified is invalid, endTime cannot be earlier
+	// than startTime.
+	CriterionErrorEnum_AD_SCHEDULE_INVALID_TIME_INTERVAL CriterionErrorEnum_CriterionError = 58
+	// The number of AdSchedule entries in a day exceeds the limit.
+	CriterionErrorEnum_AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT CriterionErrorEnum_CriterionError = 59
+	// CriteriaId does not match the interval of the AdSchedule specified.
+	CriterionErrorEnum_AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS CriterionErrorEnum_CriterionError = 60
+	// Cannot set bid modifier for this criterion type.
+	CriterionErrorEnum_CANNOT_BID_MODIFY_CRITERION_TYPE CriterionErrorEnum_CriterionError = 61
+	// Cannot bid modify criterion, since it is opted out of the campaign.
+	CriterionErrorEnum_CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT CriterionErrorEnum_CriterionError = 62
+	// Cannot set bid modifier for a negative criterion.
+	CriterionErrorEnum_CANNOT_BID_MODIFY_NEGATIVE_CRITERION CriterionErrorEnum_CriterionError = 63
+	// Bid Modifier already exists. Use SET operation to update.
+	CriterionErrorEnum_BID_MODIFIER_ALREADY_EXISTS CriterionErrorEnum_CriterionError = 64
+	// Feed Id is not allowed in these Location Groups.
+	CriterionErrorEnum_FEED_ID_NOT_ALLOWED CriterionErrorEnum_CriterionError = 65
+	// The account may not use the requested criteria type. For example, some
+	// accounts are restricted to keywords only.
+	CriterionErrorEnum_ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE CriterionErrorEnum_CriterionError = 66
+	// The requested criteria type cannot be used with campaign or ad group
+	// bidding strategy.
+	CriterionErrorEnum_CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY CriterionErrorEnum_CriterionError = 67
+	// The Criterion is not allowed to be excluded.
+	CriterionErrorEnum_CANNOT_EXCLUDE_CRITERION CriterionErrorEnum_CriterionError = 68
+	// The criterion is not allowed to be removed. For example, we cannot remove
+	// any of the device criterion.
+	CriterionErrorEnum_CANNOT_REMOVE_CRITERION CriterionErrorEnum_CriterionError = 69
+	// The combined length of product dimension values of the product scope
+	// criterion is too long.
+	CriterionErrorEnum_PRODUCT_SCOPE_TOO_LONG CriterionErrorEnum_CriterionError = 70
+	// Product scope contains too many dimensions.
+	CriterionErrorEnum_PRODUCT_SCOPE_TOO_MANY_DIMENSIONS CriterionErrorEnum_CriterionError = 71
+	// The combined length of product dimension values of the product partition
+	// criterion is too long.
+	CriterionErrorEnum_PRODUCT_PARTITION_TOO_LONG CriterionErrorEnum_CriterionError = 72
+	// Product partition contains too many dimensions.
+	CriterionErrorEnum_PRODUCT_PARTITION_TOO_MANY_DIMENSIONS CriterionErrorEnum_CriterionError = 73
+	// The product dimension is invalid (e.g. dimension contains illegal value,
+	// dimension type is represented with wrong class, etc). Product dimension
+	// value can not contain "==" or "&+".
+	CriterionErrorEnum_INVALID_PRODUCT_DIMENSION CriterionErrorEnum_CriterionError = 74
+	// Product dimension type is either invalid for campaigns of this type or
+	// cannot be used in the current context. BIDDING_CATEGORY_Lx and
+	// PRODUCT_TYPE_Lx product dimensions must be used in ascending order of
+	// their levels: L1, L2, L3, L4, L5... The levels must be specified
+	// sequentially and start from L1. Furthermore, an "others" product
+	// partition cannot be subdivided with a dimension of the same type but of a
+	// higher level ("others" BIDDING_CATEGORY_L3 can be subdivided with BRAND
+	// but not with BIDDING_CATEGORY_L4).
+	CriterionErrorEnum_INVALID_PRODUCT_DIMENSION_TYPE CriterionErrorEnum_CriterionError = 75
+	// Bidding categories do not form a valid path in the Shopping bidding
+	// category taxonomy.
+	CriterionErrorEnum_INVALID_PRODUCT_BIDDING_CATEGORY CriterionErrorEnum_CriterionError = 76
+	// ShoppingSetting must be added to the campaign before ProductScope
+	// criteria can be added.
+	CriterionErrorEnum_MISSING_SHOPPING_SETTING CriterionErrorEnum_CriterionError = 77
+	// Matching function is invalid.
+	CriterionErrorEnum_INVALID_MATCHING_FUNCTION CriterionErrorEnum_CriterionError = 78
+	// Filter parameters not allowed for location groups targeting.
+	CriterionErrorEnum_LOCATION_FILTER_NOT_ALLOWED CriterionErrorEnum_CriterionError = 79
+	// Given location filter parameter is invalid for location groups targeting.
+	CriterionErrorEnum_LOCATION_FILTER_INVALID CriterionErrorEnum_CriterionError = 80
+	// Criteria type cannot be associated with a campaign and its ad group(s)
+	// simultaneously.
+	CriterionErrorEnum_CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP CriterionErrorEnum_CriterionError = 81
+	// Range represented by hotel length of stay's min nights and max nights
+	// overlaps with an existing criterion.
+	CriterionErrorEnum_HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION CriterionErrorEnum_CriterionError = 82
+	// Range represented by hotel advance booking window's min days and max days
+	// overlaps with an existing criterion.
+	CriterionErrorEnum_HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION CriterionErrorEnum_CriterionError = 83
+	// The field is not allowed to be set when the negative field is set to
+	// true, e.g. we don't allow bids in negative ad group or campaign criteria.
+	CriterionErrorEnum_FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING CriterionErrorEnum_CriterionError = 84
+)
+
+var CriterionErrorEnum_CriterionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CONCRETE_TYPE_REQUIRED",
+	3:  "INVALID_EXCLUDED_CATEGORY",
+	4:  "INVALID_KEYWORD_TEXT",
+	5:  "KEYWORD_TEXT_TOO_LONG",
+	6:  "KEYWORD_HAS_TOO_MANY_WORDS",
+	7:  "KEYWORD_HAS_INVALID_CHARS",
+	8:  "INVALID_PLACEMENT_URL",
+	9:  "INVALID_USER_LIST",
+	10: "INVALID_USER_INTEREST",
+	11: "INVALID_FORMAT_FOR_PLACEMENT_URL",
+	12: "PLACEMENT_URL_IS_TOO_LONG",
+	13: "PLACEMENT_URL_HAS_ILLEGAL_CHAR",
+	14: "PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE",
+	15: "PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION",
+	16: "INVALID_TOPIC_PATH",
+	17: "INVALID_YOUTUBE_CHANNEL_ID",
+	18: "INVALID_YOUTUBE_VIDEO_ID",
+	19: "YOUTUBE_VERTICAL_CHANNEL_DEPRECATED",
+	20: "YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED",
+	21: "YOUTUBE_URL_UNSUPPORTED",
+	22: "CANNOT_EXCLUDE_CRITERIA_TYPE",
+	23: "CANNOT_ADD_CRITERIA_TYPE",
+	24: "INVALID_PRODUCT_FILTER",
+	25: "PRODUCT_FILTER_TOO_LONG",
+	26: "CANNOT_EXCLUDE_SIMILAR_USER_LIST",
+	27: "CANNOT_ADD_CLOSED_USER_LIST",
+	28: "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS",
+	29: "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS",
+	30: "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS",
+	31: "CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS",
+	32: "CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS",
+	33: "CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE",
+	34: "INVALID_IP_ADDRESS",
+	35: "INVALID_IP_FORMAT",
+	36: "INVALID_MOBILE_APP",
+	37: "INVALID_MOBILE_APP_CATEGORY",
+	38: "INVALID_CRITERION_ID",
+	39: "CANNOT_TARGET_CRITERION",
+	40: "CANNOT_TARGET_OBSOLETE_CRITERION",
+	41: "CRITERION_ID_AND_TYPE_MISMATCH",
+	42: "INVALID_PROXIMITY_RADIUS",
+	43: "INVALID_PROXIMITY_RADIUS_UNITS",
+	44: "INVALID_STREETADDRESS_LENGTH",
+	45: "INVALID_CITYNAME_LENGTH",
+	46: "INVALID_REGIONCODE_LENGTH",
+	47: "INVALID_REGIONNAME_LENGTH",
+	48: "INVALID_POSTALCODE_LENGTH",
+	49: "INVALID_COUNTRY_CODE",
+	50: "INVALID_LATITUDE",
+	51: "INVALID_LONGITUDE",
+	52: "PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL",
+	53: "INVALID_PROXIMITY_ADDRESS",
+	54: "INVALID_USER_DOMAIN_NAME",
+	55: "CRITERION_PARAMETER_TOO_LONG",
+	56: "AD_SCHEDULE_TIME_INTERVALS_OVERLAP",
+	57: "AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS",
+	58: "AD_SCHEDULE_INVALID_TIME_INTERVAL",
+	59: "AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT",
+	60: "AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS",
+	61: "CANNOT_BID_MODIFY_CRITERION_TYPE",
+	62: "CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT",
+	63: "CANNOT_BID_MODIFY_NEGATIVE_CRITERION",
+	64: "BID_MODIFIER_ALREADY_EXISTS",
+	65: "FEED_ID_NOT_ALLOWED",
+	66: "ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE",
+	67: "CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY",
+	68: "CANNOT_EXCLUDE_CRITERION",
+	69: "CANNOT_REMOVE_CRITERION",
+	70: "PRODUCT_SCOPE_TOO_LONG",
+	71: "PRODUCT_SCOPE_TOO_MANY_DIMENSIONS",
+	72: "PRODUCT_PARTITION_TOO_LONG",
+	73: "PRODUCT_PARTITION_TOO_MANY_DIMENSIONS",
+	74: "INVALID_PRODUCT_DIMENSION",
+	75: "INVALID_PRODUCT_DIMENSION_TYPE",
+	76: "INVALID_PRODUCT_BIDDING_CATEGORY",
+	77: "MISSING_SHOPPING_SETTING",
+	78: "INVALID_MATCHING_FUNCTION",
+	79: "LOCATION_FILTER_NOT_ALLOWED",
+	80: "LOCATION_FILTER_INVALID",
+	81: "CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP",
+	82: "HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION",
+	83: "HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION",
+	84: "FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING",
+}
+var CriterionErrorEnum_CriterionError_value = map[string]int32{
+	"UNSPECIFIED":                                                   0,
+	"UNKNOWN":                                                       1,
+	"CONCRETE_TYPE_REQUIRED":                                        2,
+	"INVALID_EXCLUDED_CATEGORY":                                     3,
+	"INVALID_KEYWORD_TEXT":                                          4,
+	"KEYWORD_TEXT_TOO_LONG":                                         5,
+	"KEYWORD_HAS_TOO_MANY_WORDS":                                    6,
+	"KEYWORD_HAS_INVALID_CHARS":                                     7,
+	"INVALID_PLACEMENT_URL":                                         8,
+	"INVALID_USER_LIST":                                             9,
+	"INVALID_USER_INTEREST":                                         10,
+	"INVALID_FORMAT_FOR_PLACEMENT_URL":                              11,
+	"PLACEMENT_URL_IS_TOO_LONG":                                     12,
+	"PLACEMENT_URL_HAS_ILLEGAL_CHAR":                                13,
+	"PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE":                      14,
+	"PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION":         15,
+	"INVALID_TOPIC_PATH":                                            16,
+	"INVALID_YOUTUBE_CHANNEL_ID":                                    17,
+	"INVALID_YOUTUBE_VIDEO_ID":                                      18,
+	"YOUTUBE_VERTICAL_CHANNEL_DEPRECATED":                           19,
+	"YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED":                        20,
+	"YOUTUBE_URL_UNSUPPORTED":                                       21,
+	"CANNOT_EXCLUDE_CRITERIA_TYPE":                                  22,
+	"CANNOT_ADD_CRITERIA_TYPE":                                      23,
+	"INVALID_PRODUCT_FILTER":                                        24,
+	"PRODUCT_FILTER_TOO_LONG":                                       25,
+	"CANNOT_EXCLUDE_SIMILAR_USER_LIST":                              26,
+	"CANNOT_ADD_CLOSED_USER_LIST":                                   27,
+	"CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS":        28,
+	"CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS":             29,
+	"CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS":           30,
+	"CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS":                 31,
+	"CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS":         32,
+	"CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE":           33,
+	"INVALID_IP_ADDRESS":                                            34,
+	"INVALID_IP_FORMAT":                                             35,
+	"INVALID_MOBILE_APP":                                            36,
+	"INVALID_MOBILE_APP_CATEGORY":                                   37,
+	"INVALID_CRITERION_ID":                                          38,
+	"CANNOT_TARGET_CRITERION":                                       39,
+	"CANNOT_TARGET_OBSOLETE_CRITERION":                              40,
+	"CRITERION_ID_AND_TYPE_MISMATCH":                                41,
+	"INVALID_PROXIMITY_RADIUS":                                      42,
+	"INVALID_PROXIMITY_RADIUS_UNITS":                                43,
+	"INVALID_STREETADDRESS_LENGTH":                                  44,
+	"INVALID_CITYNAME_LENGTH":                                       45,
+	"INVALID_REGIONCODE_LENGTH":                                     46,
+	"INVALID_REGIONNAME_LENGTH":                                     47,
+	"INVALID_POSTALCODE_LENGTH":                                     48,
+	"INVALID_COUNTRY_CODE":                                          49,
+	"INVALID_LATITUDE":                                              50,
+	"INVALID_LONGITUDE":                                             51,
+	"PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL":            52,
+	"INVALID_PROXIMITY_ADDRESS":                                     53,
+	"INVALID_USER_DOMAIN_NAME":                                      54,
+	"CRITERION_PARAMETER_TOO_LONG":                                  55,
+	"AD_SCHEDULE_TIME_INTERVALS_OVERLAP":                            56,
+	"AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS":                57,
+	"AD_SCHEDULE_INVALID_TIME_INTERVAL":                             58,
+	"AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT":                  59,
+	"AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS":                   60,
+	"CANNOT_BID_MODIFY_CRITERION_TYPE":                              61,
+	"CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT":                62,
+	"CANNOT_BID_MODIFY_NEGATIVE_CRITERION":                          63,
+	"BID_MODIFIER_ALREADY_EXISTS":                                   64,
+	"FEED_ID_NOT_ALLOWED":                                           65,
+	"ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE":                          66,
+	"CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY":                    67,
+	"CANNOT_EXCLUDE_CRITERION":                                      68,
+	"CANNOT_REMOVE_CRITERION":                                       69,
+	"PRODUCT_SCOPE_TOO_LONG":                                        70,
+	"PRODUCT_SCOPE_TOO_MANY_DIMENSIONS":                             71,
+	"PRODUCT_PARTITION_TOO_LONG":                                    72,
+	"PRODUCT_PARTITION_TOO_MANY_DIMENSIONS":                         73,
+	"INVALID_PRODUCT_DIMENSION":                                     74,
+	"INVALID_PRODUCT_DIMENSION_TYPE":                                75,
+	"INVALID_PRODUCT_BIDDING_CATEGORY":                              76,
+	"MISSING_SHOPPING_SETTING":                                      77,
+	"INVALID_MATCHING_FUNCTION":                                     78,
+	"LOCATION_FILTER_NOT_ALLOWED":                                   79,
+	"LOCATION_FILTER_INVALID":                                       80,
+	"CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP":                81,
+	"HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION":         82,
+	"HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION": 83,
+	"FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING":                    84,
+}
+
+func (x CriterionErrorEnum_CriterionError) String() string {
+	return proto.EnumName(CriterionErrorEnum_CriterionError_name, int32(x))
+}
+func (CriterionErrorEnum_CriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_error_e6ddf5f52ad99d20, []int{0, 0}
+}
+
+// Container for enum describing possible criterion errors.
+type CriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CriterionErrorEnum) Reset()         { *m = CriterionErrorEnum{} }
+func (m *CriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CriterionErrorEnum) ProtoMessage()    {}
+func (*CriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_criterion_error_e6ddf5f52ad99d20, []int{0}
+}
+func (m *CriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *CriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CriterionErrorEnum.Merge(dst, src)
+}
+func (m *CriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CriterionErrorEnum.Size(m)
+}
+func (m *CriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CriterionErrorEnum)(nil), "google.ads.googleads.v0.errors.CriterionErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CriterionErrorEnum_CriterionError", CriterionErrorEnum_CriterionError_name, CriterionErrorEnum_CriterionError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/criterion_error.proto", fileDescriptor_criterion_error_e6ddf5f52ad99d20)
+}
+
+var fileDescriptor_criterion_error_e6ddf5f52ad99d20 = []byte{
+	// 1443 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x57, 0xe9, 0x72, 0x54, 0xbb,
+	0x11, 0x0e, 0x90, 0x40, 0x22, 0x12, 0x10, 0x62, 0x33, 0x9b, 0x01, 0xb3, 0x6f, 0x63, 0xb3, 0x07,
+	0x08, 0x49, 0x34, 0x47, 0x3d, 0x67, 0x14, 0xeb, 0x48, 0x42, 0xd2, 0x19, 0x7b, 0x52, 0xae, 0x52,
+	0x11, 0xec, 0x72, 0x51, 0x05, 0x1e, 0xca, 0x26, 0xbc, 0x43, 0xde, 0x22, 0x95, 0x9f, 0x79, 0x93,
+	0x7b, 0x9f, 0xea, 0x56, 0x9f, 0x33, 0x9a, 0xd1, 0x8c, 0x59, 0xee, 0xaf, 0x99, 0xea, 0xfe, 0x5a,
+	0xea, 0xe5, 0xeb, 0xee, 0x23, 0xf2, 0x64, 0x7b, 0x34, 0xda, 0xfe, 0xb0, 0xb5, 0xfc, 0x76, 0x73,
+	0x6f, 0xb9, 0xfd, 0x8b, 0xff, 0xbe, 0xac, 0x2c, 0x6f, 0xed, 0xee, 0x8e, 0x76, 0xf7, 0x96, 0xdf,
+	0xed, 0xbe, 0xff, 0xbc, 0xb5, 0xfb, 0x7e, 0xb4, 0x13, 0x1b, 0x41, 0xe7, 0xd3, 0xee, 0xe8, 0xf3,
+	0x88, 0x2d, 0xb6, 0xd0, 0xce, 0xdb, 0xcd, 0xbd, 0xce, 0xc4, 0xaa, 0xf3, 0x65, 0xa5, 0xd3, 0x5a,
+	0x2d, 0xfd, 0x77, 0x81, 0xb0, 0x22, 0x59, 0x02, 0xca, 0x60, 0xe7, 0xdf, 0x1f, 0x97, 0xfe, 0xb3,
+	0x40, 0x8e, 0xcd, 0x8a, 0xd9, 0x71, 0x72, 0xb4, 0xd6, 0xde, 0x42, 0x21, 0x7b, 0x12, 0x04, 0xfd,
+	0x0d, 0x3b, 0x4a, 0x8e, 0xd4, 0x7a, 0x55, 0x9b, 0x35, 0x4d, 0x0f, 0xb0, 0xf3, 0xe4, 0x4c, 0x61,
+	0x74, 0xe1, 0x20, 0x40, 0x0c, 0x43, 0x0b, 0xd1, 0xc1, 0x9b, 0x5a, 0x3a, 0x10, 0xf4, 0x20, 0xbb,
+	0x44, 0xce, 0x49, 0x3d, 0xe0, 0x4a, 0x8a, 0x08, 0xeb, 0x85, 0xaa, 0x05, 0x88, 0x58, 0xf0, 0x00,
+	0xa5, 0x71, 0x43, 0x7a, 0x88, 0x2d, 0x90, 0x53, 0x49, 0xbd, 0x0a, 0xc3, 0x35, 0xe3, 0x44, 0x0c,
+	0xb0, 0x1e, 0xe8, 0x6f, 0xd9, 0x39, 0x72, 0x3a, 0x97, 0xc4, 0x60, 0x4c, 0x54, 0x46, 0x97, 0xf4,
+	0x77, 0x6c, 0x91, 0x9c, 0x4f, 0xaa, 0x3e, 0xf7, 0x8d, 0xa6, 0xe2, 0x7a, 0x18, 0x51, 0xe2, 0xe9,
+	0x61, 0xbc, 0x33, 0xd7, 0xa7, 0x0b, 0x8a, 0x3e, 0x77, 0x9e, 0x1e, 0xc1, 0x93, 0x93, 0xc8, 0x2a,
+	0x5e, 0x40, 0x05, 0x3a, 0xc4, 0xda, 0x29, 0xfa, 0x7b, 0x76, 0x9a, 0x9c, 0x48, 0xaa, 0xda, 0x83,
+	0x8b, 0x4a, 0xfa, 0x40, 0xff, 0x90, 0x5b, 0x34, 0x62, 0xa9, 0x03, 0x38, 0xf0, 0x81, 0x12, 0x76,
+	0x9d, 0x5c, 0x49, 0xaa, 0x9e, 0x71, 0x15, 0x0f, 0xf8, 0x33, 0x77, 0xee, 0x51, 0xf4, 0x68, 0x46,
+	0x14, 0xa5, 0x9f, 0x06, 0xf4, 0x47, 0xb6, 0x44, 0x16, 0x67, 0xd5, 0x8d, 0xdb, 0x4a, 0x41, 0xc9,
+	0x55, 0xe3, 0x36, 0xfd, 0x13, 0xbb, 0x4f, 0x6e, 0xef, 0xc7, 0x54, 0xb5, 0x0a, 0xd2, 0x2a, 0x88,
+	0x5e, 0x06, 0xc0, 0x48, 0xa3, 0x92, 0x1a, 0xe8, 0x31, 0xf6, 0x82, 0x3c, 0x9d, 0xa2, 0xa5, 0x8f,
+	0xda, 0x84, 0xc8, 0x07, 0x5c, 0x2a, 0xde, 0x55, 0xd0, 0xb8, 0x18, 0xb8, 0x2b, 0x21, 0x48, 0x5d,
+	0x46, 0xe3, 0xda, 0xd2, 0x78, 0x69, 0x34, 0x3d, 0xce, 0xce, 0x10, 0x96, 0x22, 0x0a, 0xc6, 0xca,
+	0x22, 0x5a, 0x1e, 0xfa, 0x94, 0x62, 0xd6, 0x93, 0x7c, 0x68, 0xea, 0x50, 0x77, 0x01, 0x5d, 0xd3,
+	0x1a, 0x54, 0x94, 0x82, 0x9e, 0x60, 0x17, 0xc9, 0xc2, 0xbc, 0x7e, 0x20, 0x05, 0x18, 0xd4, 0x32,
+	0x76, 0x8b, 0x5c, 0x9b, 0x48, 0xc1, 0x05, 0x59, 0xb4, 0x91, 0x35, 0xe6, 0x02, 0xac, 0x03, 0x24,
+	0x85, 0xa0, 0x27, 0xd9, 0x5d, 0x72, 0x33, 0x01, 0x05, 0x54, 0xa6, 0x74, 0xdc, 0xf6, 0x65, 0xf1,
+	0x35, 0xec, 0x29, 0x76, 0x81, 0x9c, 0x4d, 0x58, 0xcc, 0x48, 0xad, 0x7d, 0x6d, 0xad, 0x71, 0xa8,
+	0x3c, 0xcd, 0xae, 0x90, 0x8b, 0x05, 0xd7, 0x18, 0xf8, 0x98, 0x78, 0xb1, 0x70, 0x32, 0x80, 0x93,
+	0xbc, 0x21, 0x29, 0x3d, 0x83, 0x1e, 0x8f, 0x11, 0x5c, 0x88, 0x39, 0xed, 0x59, 0x64, 0xf5, 0x84,
+	0x26, 0xce, 0x88, 0xba, 0x08, 0xb1, 0x27, 0x55, 0x00, 0x47, 0x17, 0xf0, 0xe2, 0x59, 0xd9, 0xb4,
+	0x9a, 0xe7, 0x90, 0x12, 0x73, 0x17, 0x7b, 0x59, 0x49, 0xc5, 0x5d, 0xc6, 0xa9, 0xf3, 0xec, 0x32,
+	0xb9, 0x90, 0x5f, 0xae, 0x8c, 0x87, 0x9c, 0x74, 0x17, 0xd8, 0x4b, 0xf2, 0x2c, 0x03, 0x08, 0xe9,
+	0xad, 0xe2, 0xc3, 0x68, 0xb4, 0x1a, 0x36, 0x08, 0x24, 0x50, 0xf4, 0xc0, 0x5d, 0xd1, 0x6f, 0x85,
+	0x05, 0xaf, 0x2c, 0x97, 0xa5, 0xf6, 0xf4, 0x22, 0x7b, 0x4a, 0x1e, 0xfe, 0x5a, 0xdb, 0xa9, 0xd9,
+	0x25, 0xf6, 0x9c, 0x3c, 0xfe, 0xb1, 0x59, 0xdf, 0x58, 0x8b, 0xb4, 0x99, 0x1a, 0x2e, 0xb2, 0x87,
+	0xe4, 0x41, 0x66, 0x38, 0xd3, 0x23, 0x5f, 0xbf, 0xeb, 0x32, 0x32, 0x74, 0x6c, 0xe2, 0x21, 0xc4,
+	0xae, 0x14, 0x3e, 0x1a, 0x9d, 0x8a, 0x60, 0x74, 0x3b, 0x48, 0xa4, 0xde, 0x6f, 0x7a, 0x65, 0xce,
+	0xcd, 0xda, 0xa9, 0xe6, 0x8e, 0x39, 0x53, 0xe4, 0x78, 0x32, 0x6a, 0x4b, 0x7a, 0x35, 0xa7, 0xb6,
+	0xb4, 0x68, 0xec, 0xc0, 0x7b, 0xba, 0x94, 0xb7, 0xbd, 0xb4, 0xe3, 0x3e, 0xa6, 0xd7, 0x72, 0x78,
+	0x65, 0xba, 0x52, 0x41, 0xe4, 0xd6, 0xd2, 0xeb, 0x58, 0xba, 0xfd, 0xf2, 0xe9, 0x54, 0xbb, 0x91,
+	0x4f, 0xb5, 0xa9, 0x57, 0x52, 0xd0, 0x9b, 0x48, 0x9c, 0xb1, 0xeb, 0x6d, 0xff, 0x4d, 0xf5, 0xf4,
+	0x56, 0x46, 0x9c, 0xb1, 0xd2, 0x74, 0xbd, 0x51, 0x38, 0x55, 0xa7, 0xa8, 0xdb, 0x38, 0x2c, 0xf2,
+	0x43, 0x23, 0xd7, 0xa2, 0x8d, 0xb8, 0x92, 0xbe, 0xe2, 0xa1, 0xe8, 0xd3, 0x3b, 0x79, 0x2f, 0x5a,
+	0x67, 0xd6, 0x65, 0x25, 0xc3, 0x30, 0x3a, 0x2e, 0x64, 0xed, 0xe9, 0x5d, 0x3c, 0xe1, 0x5b, 0xda,
+	0x58, 0x6b, 0x19, 0x3c, 0xbd, 0x87, 0xdd, 0x93, 0x30, 0x3e, 0x38, 0x80, 0x30, 0xce, 0x56, 0x54,
+	0xa0, 0xcb, 0xd0, 0xa7, 0xf7, 0x31, 0x94, 0x49, 0x90, 0x32, 0x0c, 0x35, 0xaf, 0x20, 0x29, 0x1f,
+	0xe4, 0x63, 0xdf, 0x41, 0x29, 0x8d, 0x2e, 0x8c, 0x98, 0xa8, 0x3b, 0xfb, 0xd5, 0xb9, 0xf5, 0x72,
+	0xae, 0xb6, 0xc6, 0x07, 0xae, 0x72, 0xeb, 0x95, 0x99, 0xf4, 0x9a, 0x5a, 0x07, 0x37, 0x8c, 0x08,
+	0xa0, 0x0f, 0xd9, 0x29, 0x42, 0x93, 0x46, 0xf1, 0x20, 0x43, 0x2d, 0x80, 0x3e, 0xca, 0xcb, 0x8b,
+	0x2d, 0xda, 0x8a, 0x1f, 0xb3, 0x67, 0xe4, 0xd1, 0x34, 0xfc, 0x12, 0x8c, 0x35, 0x52, 0x87, 0x26,
+	0x9d, 0x29, 0xd6, 0xae, 0x09, 0xc8, 0xbc, 0xa6, 0x24, 0x5d, 0x88, 0xba, 0x56, 0x8a, 0x3e, 0x99,
+	0xf1, 0x6e, 0x62, 0x9f, 0xc8, 0xf4, 0x34, 0xcf, 0x7d, 0xd3, 0x08, 0xc2, 0x54, 0x5c, 0xea, 0x88,
+	0x11, 0xd2, 0x67, 0xcd, 0x54, 0x9a, 0x54, 0xcf, 0x72, 0xc7, 0x2b, 0x98, 0x19, 0x1f, 0xcf, 0xd9,
+	0x4d, 0xb2, 0xc4, 0x45, 0xf4, 0x45, 0x1f, 0x44, 0xad, 0x20, 0x06, 0x59, 0x41, 0xdb, 0x4c, 0x03,
+	0xae, 0x7c, 0x34, 0x03, 0x70, 0x8a, 0x5b, 0xfa, 0x67, 0xf6, 0x88, 0x74, 0x72, 0x5c, 0x82, 0x24,
+	0x7f, 0xbd, 0xe5, 0x7a, 0xba, 0x1f, 0x04, 0x1f, 0x7a, 0xfa, 0x82, 0xdd, 0x20, 0x57, 0x67, 0x6d,
+	0xc6, 0x73, 0x3e, 0xbf, 0x83, 0xbe, 0x64, 0x2b, 0xe4, 0x7e, 0x0e, 0x83, 0xf5, 0x02, 0x00, 0x17,
+	0xf7, 0xd4, 0x0d, 0x8b, 0x81, 0x71, 0x1c, 0x0b, 0x95, 0x0c, 0xf4, 0x15, 0x5b, 0x26, 0xf7, 0x72,
+	0x8b, 0x19, 0x82, 0x26, 0x5e, 0xe2, 0xd0, 0xe8, 0x49, 0x50, 0xc2, 0xd3, 0xbf, 0x64, 0x5c, 0xef,
+	0x36, 0x6d, 0x24, 0x64, 0x6f, 0x38, 0xd7, 0xc2, 0xf4, 0x35, 0xc6, 0xf8, 0x3d, 0xd4, 0xa4, 0xbf,
+	0x8d, 0x0d, 0x20, 0xa2, 0xa9, 0x03, 0xfd, 0x2b, 0xbb, 0x4d, 0xae, 0xef, 0xb7, 0xd1, 0x50, 0xf2,
+	0x20, 0x07, 0x79, 0x27, 0xfd, 0x0d, 0xfb, 0x78, 0x02, 0x91, 0xe0, 0x22, 0x57, 0x0e, 0xb8, 0x18,
+	0x46, 0x58, 0xc7, 0x61, 0x47, 0xff, 0xce, 0xce, 0x92, 0x93, 0x3d, 0xc0, 0xb8, 0x45, 0xbb, 0x40,
+	0x95, 0x32, 0x6b, 0x20, 0x28, 0xc7, 0x3b, 0x78, 0xd1, 0x70, 0x2f, 0x4a, 0x0d, 0x4a, 0x96, 0x32,
+	0xad, 0xd5, 0xd9, 0x2d, 0xd2, 0x65, 0x1d, 0x72, 0x77, 0x46, 0x14, 0xb3, 0xaf, 0x05, 0x74, 0x50,
+	0x60, 0x56, 0x7c, 0x70, 0x38, 0x3c, 0x86, 0xb4, 0xc8, 0x76, 0xd2, 0xdc, 0xd6, 0x32, 0x9a, 0x8a,
+	0x6c, 0x7c, 0x38, 0xa8, 0xcc, 0x4c, 0x38, 0x80, 0x0b, 0x2b, 0x2d, 0x25, 0x5f, 0x18, 0x0b, 0x53,
+	0x52, 0xf5, 0xb0, 0xf0, 0xfb, 0x75, 0xcd, 0x47, 0x93, 0x90, 0x15, 0x68, 0x5c, 0xfd, 0x9e, 0x96,
+	0xb8, 0xe3, 0x13, 0xcc, 0x72, 0x17, 0x64, 0x68, 0x6a, 0x91, 0x8e, 0xe9, 0xb3, 0x3b, 0xe4, 0xc6,
+	0xd7, 0xf5, 0xf3, 0x47, 0xc9, 0xb9, 0x2e, 0x69, 0x4c, 0x26, 0x7a, 0xfa, 0x8f, 0xb9, 0x19, 0x34,
+	0xab, 0x6e, 0x73, 0xb7, 0x9a, 0x7f, 0x5b, 0x25, 0x4c, 0xca, 0xd8, 0x64, 0xd8, 0x2a, 0xcc, 0x58,
+	0x25, 0xbd, 0x6f, 0xf2, 0x98, 0x76, 0x93, 0x87, 0x80, 0x9f, 0x36, 0xb4, 0xca, 0xdd, 0x98, 0x92,
+	0xb0, 0xd6, 0x05, 0x7a, 0x4e, 0x35, 0x52, 0x40, 0x99, 0x82, 0x37, 0x71, 0x8c, 0x37, 0x79, 0x5e,
+	0x69, 0x83, 0x19, 0x9f, 0x07, 0x8c, 0xcf, 0xa3, 0x36, 0xa3, 0x27, 0x0f, 0x81, 0xe3, 0x96, 0x4a,
+	0xa5, 0xe6, 0x61, 0x4a, 0xce, 0x76, 0xa2, 0x94, 0xce, 0xd4, 0x96, 0xbe, 0xc1, 0xbd, 0xd7, 0x37,
+	0x01, 0xd4, 0x78, 0x9c, 0x45, 0xd3, 0x8b, 0x3e, 0xe0, 0x96, 0x6d, 0x1b, 0xdb, 0xc7, 0x35, 0x19,
+	0xfa, 0x2d, 0x05, 0x9b, 0x40, 0x27, 0x05, 0x76, 0x8c, 0x93, 0xd7, 0xad, 0x29, 0x17, 0x03, 0xae,
+	0x0b, 0x88, 0x5d, 0x63, 0x56, 0x11, 0xb4, 0x26, 0xb5, 0x30, 0x6b, 0x3f, 0x3e, 0xc2, 0x23, 0x1d,
+	0x9b, 0x16, 0x8c, 0x52, 0x17, 0xa6, 0xb2, 0x3c, 0x34, 0xc4, 0x6d, 0xf0, 0x93, 0x16, 0x99, 0x7c,
+	0x19, 0xd2, 0xd0, 0xfd, 0xe9, 0x00, 0x59, 0x7a, 0x37, 0xfa, 0xd8, 0xf9, 0xfe, 0x4b, 0xa2, 0x7b,
+	0x72, 0xf6, 0xbd, 0x60, 0xf1, 0xf9, 0x61, 0x0f, 0xfc, 0x53, 0x8c, 0xcd, 0xb6, 0x47, 0x1f, 0xde,
+	0xee, 0x6c, 0x77, 0x46, 0xbb, 0xdb, 0xcb, 0xdb, 0x5b, 0x3b, 0xcd, 0xe3, 0x24, 0x3d, 0x63, 0x3e,
+	0xbd, 0xdf, 0xfb, 0xd6, 0xab, 0xe6, 0x55, 0xfb, 0xf3, 0xbf, 0x83, 0x87, 0x4a, 0xce, 0xff, 0x7f,
+	0x70, 0xb1, 0x6c, 0x0f, 0xe3, 0x9b, 0x7b, 0x9d, 0xf6, 0x2f, 0xfe, 0x1b, 0xac, 0x74, 0x9a, 0x2b,
+	0xf7, 0x7e, 0x4e, 0x80, 0x0d, 0xbe, 0xb9, 0xb7, 0x31, 0x01, 0x6c, 0x0c, 0x56, 0x36, 0x5a, 0xc0,
+	0xbf, 0x0e, 0x37, 0x17, 0x3f, 0xfe, 0x25, 0x00, 0x00, 0xff, 0xff, 0x16, 0x22, 0xbc, 0x13, 0x4d,
+	0x0d, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/customer_client_link_error.pb.go b/googleapis/ads/googleads/v0/errors/customer_client_link_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8abcee349192aec82154df7ca6ec4d6e81255b3e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/customer_client_link_error.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/customer_client_link_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible CustomerClientLink errors.
+type CustomerClientLinkErrorEnum_CustomerClientLinkError int32
+
+const (
+	// Enum unspecified.
+	CustomerClientLinkErrorEnum_UNSPECIFIED CustomerClientLinkErrorEnum_CustomerClientLinkError = 0
+	// The received error code is not known in this version.
+	CustomerClientLinkErrorEnum_UNKNOWN CustomerClientLinkErrorEnum_CustomerClientLinkError = 1
+	// Trying to manage a client that already in being managed by customer.
+	CustomerClientLinkErrorEnum_CLIENT_ALREADY_INVITED_BY_THIS_MANAGER CustomerClientLinkErrorEnum_CustomerClientLinkError = 2
+	// Already managed by some other manager in the hierarchy.
+	CustomerClientLinkErrorEnum_CLIENT_ALREADY_MANAGED_IN_HIERARCHY CustomerClientLinkErrorEnum_CustomerClientLinkError = 3
+	// Attempt to create a cycle in the hierarchy.
+	CustomerClientLinkErrorEnum_CYCLIC_LINK_NOT_ALLOWED CustomerClientLinkErrorEnum_CustomerClientLinkError = 4
+	// Managed accounts has the maximum number of linked accounts.
+	CustomerClientLinkErrorEnum_CUSTOMER_HAS_TOO_MANY_ACCOUNTS CustomerClientLinkErrorEnum_CustomerClientLinkError = 5
+	// Invitor has the maximum pending invitations.
+	CustomerClientLinkErrorEnum_CLIENT_HAS_TOO_MANY_INVITATIONS CustomerClientLinkErrorEnum_CustomerClientLinkError = 6
+	// Attempt to change hidden status of a link that is not active.
+	CustomerClientLinkErrorEnum_CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS CustomerClientLinkErrorEnum_CustomerClientLinkError = 7
+	// Parent manager account has the maximum number of linked accounts.
+	CustomerClientLinkErrorEnum_CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER CustomerClientLinkErrorEnum_CustomerClientLinkError = 8
+)
+
+var CustomerClientLinkErrorEnum_CustomerClientLinkError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CLIENT_ALREADY_INVITED_BY_THIS_MANAGER",
+	3: "CLIENT_ALREADY_MANAGED_IN_HIERARCHY",
+	4: "CYCLIC_LINK_NOT_ALLOWED",
+	5: "CUSTOMER_HAS_TOO_MANY_ACCOUNTS",
+	6: "CLIENT_HAS_TOO_MANY_INVITATIONS",
+	7: "CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS",
+	8: "CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER",
+}
+var CustomerClientLinkErrorEnum_CustomerClientLinkError_value = map[string]int32{
+	"UNSPECIFIED":                               0,
+	"UNKNOWN":                                   1,
+	"CLIENT_ALREADY_INVITED_BY_THIS_MANAGER":    2,
+	"CLIENT_ALREADY_MANAGED_IN_HIERARCHY":       3,
+	"CYCLIC_LINK_NOT_ALLOWED":                   4,
+	"CUSTOMER_HAS_TOO_MANY_ACCOUNTS":            5,
+	"CLIENT_HAS_TOO_MANY_INVITATIONS":           6,
+	"CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS":    7,
+	"CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER": 8,
+}
+
+func (x CustomerClientLinkErrorEnum_CustomerClientLinkError) String() string {
+	return proto.EnumName(CustomerClientLinkErrorEnum_CustomerClientLinkError_name, int32(x))
+}
+func (CustomerClientLinkErrorEnum_CustomerClientLinkError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_customer_client_link_error_8f1a745bcc958e5b, []int{0, 0}
+}
+
+// Container for enum describing possible CustomeClientLink errors.
+type CustomerClientLinkErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerClientLinkErrorEnum) Reset()         { *m = CustomerClientLinkErrorEnum{} }
+func (m *CustomerClientLinkErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerClientLinkErrorEnum) ProtoMessage()    {}
+func (*CustomerClientLinkErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_client_link_error_8f1a745bcc958e5b, []int{0}
+}
+func (m *CustomerClientLinkErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerClientLinkErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerClientLinkErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerClientLinkErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CustomerClientLinkErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerClientLinkErrorEnum.Merge(dst, src)
+}
+func (m *CustomerClientLinkErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerClientLinkErrorEnum.Size(m)
+}
+func (m *CustomerClientLinkErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerClientLinkErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerClientLinkErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CustomerClientLinkErrorEnum)(nil), "google.ads.googleads.v0.errors.CustomerClientLinkErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CustomerClientLinkErrorEnum_CustomerClientLinkError", CustomerClientLinkErrorEnum_CustomerClientLinkError_name, CustomerClientLinkErrorEnum_CustomerClientLinkError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/customer_client_link_error.proto", fileDescriptor_customer_client_link_error_8f1a745bcc958e5b)
+}
+
+var fileDescriptor_customer_client_link_error_8f1a745bcc958e5b = []byte{
+	// 420 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6b, 0xdb, 0x30,
+	0x14, 0xc7, 0x17, 0x77, 0x6b, 0x87, 0x7a, 0x98, 0xd1, 0xa5, 0x87, 0x8e, 0x0c, 0x52, 0xd8, 0xd8,
+	0x60, 0x72, 0x60, 0xc7, 0x1d, 0x86, 0x22, 0x6b, 0xb1, 0xa8, 0x2b, 0x05, 0x5b, 0x4e, 0xf1, 0x08,
+	0x3c, 0xb2, 0xc4, 0x98, 0xd0, 0xc4, 0x2a, 0x56, 0xda, 0x0f, 0xb4, 0xe3, 0x3e, 0xca, 0x60, 0x97,
+	0x7d, 0x8f, 0x7d, 0x87, 0x61, 0x29, 0xcd, 0xd8, 0x20, 0x3d, 0xf9, 0x0f, 0xef, 0xff, 0x7e, 0xff,
+	0x67, 0xbd, 0x87, 0x3e, 0xd5, 0xc6, 0xd4, 0xeb, 0x2a, 0x9a, 0x2f, 0x6d, 0xe4, 0x65, 0xa7, 0xee,
+	0x87, 0x51, 0xd5, 0xb6, 0xa6, 0xb5, 0xd1, 0xe2, 0xce, 0x6e, 0xcd, 0xa6, 0x6a, 0x61, 0xb1, 0x5e,
+	0x55, 0xcd, 0x16, 0xd6, 0xab, 0xe6, 0x06, 0x5c, 0x8d, 0xdc, 0xb6, 0x66, 0x6b, 0x70, 0xdf, 0x77,
+	0x91, 0xf9, 0xd2, 0x92, 0x3d, 0x80, 0xdc, 0x0f, 0x89, 0x07, 0x0c, 0x7e, 0x07, 0xe8, 0x9c, 0xed,
+	0x20, 0xcc, 0x31, 0xd2, 0x55, 0x73, 0xc3, 0xbb, 0x22, 0x6f, 0xee, 0x36, 0x83, 0x9f, 0x01, 0x3a,
+	0x3b, 0x50, 0xc7, 0x2f, 0xd0, 0x69, 0x21, 0xf3, 0x09, 0x67, 0xe2, 0xb3, 0xe0, 0x71, 0xf8, 0x04,
+	0x9f, 0xa2, 0x93, 0x42, 0x5e, 0x4a, 0x75, 0x2d, 0xc3, 0x1e, 0x7e, 0x87, 0x5e, 0xb3, 0x54, 0x70,
+	0xa9, 0x81, 0xa6, 0x19, 0xa7, 0x71, 0x09, 0x42, 0x4e, 0x85, 0xe6, 0x31, 0x8c, 0x4a, 0xd0, 0x89,
+	0xc8, 0xe1, 0x8a, 0x4a, 0x3a, 0xe6, 0x59, 0x18, 0xe0, 0x37, 0xe8, 0xe2, 0x3f, 0xaf, 0xaf, 0xc5,
+	0x20, 0x24, 0x24, 0x82, 0x67, 0x34, 0x63, 0x49, 0x19, 0x1e, 0xe1, 0x73, 0x74, 0xc6, 0x4a, 0x96,
+	0x0a, 0x06, 0xa9, 0x90, 0x97, 0x20, 0x55, 0xd7, 0x91, 0xaa, 0x6b, 0x1e, 0x87, 0x4f, 0xf1, 0x00,
+	0xf5, 0x59, 0x91, 0x6b, 0x75, 0xc5, 0x33, 0x48, 0x68, 0x0e, 0x5a, 0xa9, 0x8e, 0x53, 0x02, 0x65,
+	0x4c, 0x15, 0x52, 0xe7, 0xe1, 0x33, 0x7c, 0x81, 0x5e, 0xed, 0x92, 0xfe, 0x71, 0xb8, 0xd1, 0xa8,
+	0x16, 0x4a, 0xe6, 0xe1, 0xb1, 0x1b, 0x9d, 0xca, 0x0e, 0x9e, 0x88, 0x98, 0x83, 0xca, 0xa0, 0x90,
+	0x4e, 0xed, 0x26, 0xfe, 0x0b, 0x3c, 0xc1, 0xef, 0xd1, 0xdb, 0xc7, 0x43, 0x81, 0xea, 0xfd, 0x9f,
+	0x3e, 0x1f, 0xfd, 0xea, 0xa1, 0xc1, 0xc2, 0x6c, 0xc8, 0xe3, 0x6b, 0x19, 0xbd, 0x3c, 0xf0, 0xe6,
+	0x93, 0x6e, 0xa9, 0x93, 0xde, 0x97, 0x78, 0xd7, 0x5f, 0x9b, 0xf5, 0xbc, 0xa9, 0x89, 0x69, 0xeb,
+	0xa8, 0xae, 0x1a, 0xb7, 0xf2, 0x87, 0x3b, 0xb9, 0x5d, 0xd9, 0x43, 0x67, 0xf3, 0xd1, 0x7f, 0xbe,
+	0x05, 0x47, 0x63, 0x4a, 0xbf, 0x07, 0xfd, 0xb1, 0x87, 0xd1, 0xa5, 0x25, 0x5e, 0x76, 0x6a, 0x3a,
+	0x24, 0x2e, 0xd2, 0xfe, 0x78, 0x30, 0xcc, 0xe8, 0xd2, 0xce, 0xf6, 0x86, 0xd9, 0x74, 0x38, 0xf3,
+	0x86, 0xaf, 0xc7, 0x2e, 0xf8, 0xc3, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x7f, 0x37, 0x19,
+	0xae, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/customer_error.pb.go b/googleapis/ads/googleads/v0/errors/customer_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1a2a46978d36aa34879073c14a51b73a4b7ea1cf
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/customer_error.pb.go
@@ -0,0 +1,118 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/customer_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Set of errors that are related to requests dealing with Customer.
+// Next id: 26
+type CustomerErrorEnum_CustomerError int32
+
+const (
+	// Enum unspecified.
+	CustomerErrorEnum_UNSPECIFIED CustomerErrorEnum_CustomerError = 0
+	// The received error code is not known in this version.
+	CustomerErrorEnum_UNKNOWN CustomerErrorEnum_CustomerError = 1
+	// Customer status is not allowed to be changed from DRAFT and CLOSED.
+	// Currency code and at least one of country code and time zone needs to be
+	// set when status is changed to ENABLED.
+	CustomerErrorEnum_STATUS_CHANGE_DISALLOWED CustomerErrorEnum_CustomerError = 2
+	// CustomerService cannot get a customer that has not been fully set up.
+	CustomerErrorEnum_ACCOUNT_NOT_SET_UP CustomerErrorEnum_CustomerError = 3
+)
+
+var CustomerErrorEnum_CustomerError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "STATUS_CHANGE_DISALLOWED",
+	3: "ACCOUNT_NOT_SET_UP",
+}
+var CustomerErrorEnum_CustomerError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"STATUS_CHANGE_DISALLOWED": 2,
+	"ACCOUNT_NOT_SET_UP":       3,
+}
+
+func (x CustomerErrorEnum_CustomerError) String() string {
+	return proto.EnumName(CustomerErrorEnum_CustomerError_name, int32(x))
+}
+func (CustomerErrorEnum_CustomerError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_customer_error_67eed9e7530db687, []int{0, 0}
+}
+
+// Container for enum describing possible customer errors.
+type CustomerErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerErrorEnum) Reset()         { *m = CustomerErrorEnum{} }
+func (m *CustomerErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerErrorEnum) ProtoMessage()    {}
+func (*CustomerErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_error_67eed9e7530db687, []int{0}
+}
+func (m *CustomerErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CustomerErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerErrorEnum.Merge(dst, src)
+}
+func (m *CustomerErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerErrorEnum.Size(m)
+}
+func (m *CustomerErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CustomerErrorEnum)(nil), "google.ads.googleads.v0.errors.CustomerErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CustomerErrorEnum_CustomerError", CustomerErrorEnum_CustomerError_name, CustomerErrorEnum_CustomerError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/customer_error.proto", fileDescriptor_customer_error_67eed9e7530db687)
+}
+
+var fileDescriptor_customer_error_67eed9e7530db687 = []byte{
+	// 285 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4b, 0xc3, 0x30,
+	0x18, 0xc6, 0x5d, 0x07, 0x0a, 0x19, 0x62, 0xcd, 0x41, 0x3c, 0xc8, 0x0e, 0xfd, 0x00, 0x69, 0x61,
+	0x47, 0x4f, 0x59, 0x1b, 0x6b, 0x71, 0xa4, 0x85, 0x26, 0x1b, 0x48, 0x21, 0xd4, 0xb6, 0x04, 0x61,
+	0x6d, 0x46, 0xb2, 0x0d, 0x3f, 0x8f, 0x47, 0x3f, 0x89, 0xf8, 0xa9, 0xa4, 0xcd, 0x36, 0xd8, 0x41,
+	0x4f, 0x79, 0xf2, 0xf2, 0xfc, 0xde, 0x3f, 0x0f, 0x98, 0x49, 0xa5, 0xe4, 0xba, 0xf1, 0xcb, 0xda,
+	0xf8, 0x56, 0xf6, 0x6a, 0x1f, 0xf8, 0x8d, 0xd6, 0x4a, 0x1b, 0xbf, 0xda, 0x99, 0xad, 0x6a, 0x1b,
+	0x2d, 0x86, 0x3f, 0xda, 0x68, 0xb5, 0x55, 0x70, 0x6a, 0x9d, 0xa8, 0xac, 0x0d, 0x3a, 0x41, 0x68,
+	0x1f, 0x20, 0x0b, 0x79, 0x1f, 0xe0, 0x36, 0x3c, 0x70, 0xa4, 0xaf, 0x90, 0x6e, 0xd7, 0x7a, 0x15,
+	0xb8, 0x3e, 0x2b, 0xc2, 0x1b, 0x30, 0xe1, 0x34, 0xcf, 0x48, 0x98, 0x3c, 0x25, 0x24, 0x72, 0x2f,
+	0xe0, 0x04, 0x5c, 0x71, 0xfa, 0x42, 0xd3, 0x15, 0x75, 0x47, 0xf0, 0x01, 0xdc, 0xe7, 0x0c, 0x33,
+	0x9e, 0x8b, 0xf0, 0x19, 0xd3, 0x98, 0x88, 0x28, 0xc9, 0xf1, 0x62, 0x91, 0xae, 0x48, 0xe4, 0x3a,
+	0xf0, 0x0e, 0x40, 0x1c, 0x86, 0x29, 0xa7, 0x4c, 0xd0, 0x94, 0x89, 0x9c, 0x30, 0xc1, 0x33, 0x77,
+	0x3c, 0xff, 0x1e, 0x01, 0xaf, 0x52, 0x2d, 0xfa, 0x7f, 0xc1, 0x39, 0x3c, 0xdb, 0x24, 0xeb, 0x8f,
+	0xca, 0x46, 0xaf, 0xd1, 0x81, 0x92, 0x6a, 0x5d, 0x76, 0x12, 0x29, 0x2d, 0x7d, 0xd9, 0x74, 0xc3,
+	0xc9, 0xc7, 0x6c, 0x36, 0xef, 0xe6, 0xaf, 0xa8, 0x1e, 0xed, 0xf3, 0xe9, 0x8c, 0x63, 0x8c, 0xbf,
+	0x9c, 0x69, 0x6c, 0x9b, 0xe1, 0xda, 0x20, 0x2b, 0x7b, 0xb5, 0x0c, 0xd0, 0x30, 0xd2, 0xfc, 0x1c,
+	0x0d, 0x05, 0xae, 0x4d, 0x71, 0x32, 0x14, 0xcb, 0xa0, 0xb0, 0x86, 0xb7, 0xcb, 0x61, 0xf0, 0xec,
+	0x37, 0x00, 0x00, 0xff, 0xff, 0x98, 0x99, 0x68, 0x2b, 0xa2, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/customer_feed_error.pb.go b/googleapis/ads/googleads/v0/errors/customer_feed_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..068ee7fdcc7cd88910a53e4b21433ad0a500e50b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/customer_feed_error.pb.go
@@ -0,0 +1,144 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/customer_feed_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible customer feed errors.
+type CustomerFeedErrorEnum_CustomerFeedError int32
+
+const (
+	// Enum unspecified.
+	CustomerFeedErrorEnum_UNSPECIFIED CustomerFeedErrorEnum_CustomerFeedError = 0
+	// The received error code is not known in this version.
+	CustomerFeedErrorEnum_UNKNOWN CustomerFeedErrorEnum_CustomerFeedError = 1
+	// An active feed already exists for this customer and place holder type.
+	CustomerFeedErrorEnum_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE CustomerFeedErrorEnum_CustomerFeedError = 2
+	// The specified feed is removed.
+	CustomerFeedErrorEnum_CANNOT_CREATE_FOR_REMOVED_FEED CustomerFeedErrorEnum_CustomerFeedError = 3
+	// The CustomerFeed already exists. Update should be used to modify the
+	// existing CustomerFeed.
+	CustomerFeedErrorEnum_CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED CustomerFeedErrorEnum_CustomerFeedError = 4
+	// Cannot update removed customer feed.
+	CustomerFeedErrorEnum_CANNOT_MODIFY_REMOVED_CUSTOMER_FEED CustomerFeedErrorEnum_CustomerFeedError = 5
+	// Invalid placeholder type.
+	CustomerFeedErrorEnum_INVALID_PLACEHOLDER_TYPE CustomerFeedErrorEnum_CustomerFeedError = 6
+	// Feed mapping for this placeholder type does not exist.
+	CustomerFeedErrorEnum_MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE CustomerFeedErrorEnum_CustomerFeedError = 7
+	// Placeholder not allowed at the account level.
+	CustomerFeedErrorEnum_PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED CustomerFeedErrorEnum_CustomerFeedError = 8
+)
+
+var CustomerFeedErrorEnum_CustomerFeedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
+	3: "CANNOT_CREATE_FOR_REMOVED_FEED",
+	4: "CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED",
+	5: "CANNOT_MODIFY_REMOVED_CUSTOMER_FEED",
+	6: "INVALID_PLACEHOLDER_TYPE",
+	7: "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
+	8: "PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED",
+}
+var CustomerFeedErrorEnum_CustomerFeedError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE":      2,
+	"CANNOT_CREATE_FOR_REMOVED_FEED":                3,
+	"CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED":  4,
+	"CANNOT_MODIFY_REMOVED_CUSTOMER_FEED":           5,
+	"INVALID_PLACEHOLDER_TYPE":                      6,
+	"MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE":      7,
+	"PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED": 8,
+}
+
+func (x CustomerFeedErrorEnum_CustomerFeedError) String() string {
+	return proto.EnumName(CustomerFeedErrorEnum_CustomerFeedError_name, int32(x))
+}
+func (CustomerFeedErrorEnum_CustomerFeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_error_7d219f169025f9b2, []int{0, 0}
+}
+
+// Container for enum describing possible customer feed errors.
+type CustomerFeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerFeedErrorEnum) Reset()         { *m = CustomerFeedErrorEnum{} }
+func (m *CustomerFeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerFeedErrorEnum) ProtoMessage()    {}
+func (*CustomerFeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_error_7d219f169025f9b2, []int{0}
+}
+func (m *CustomerFeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerFeedErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerFeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerFeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CustomerFeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerFeedErrorEnum.Merge(dst, src)
+}
+func (m *CustomerFeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerFeedErrorEnum.Size(m)
+}
+func (m *CustomerFeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerFeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerFeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CustomerFeedErrorEnum)(nil), "google.ads.googleads.v0.errors.CustomerFeedErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CustomerFeedErrorEnum_CustomerFeedError", CustomerFeedErrorEnum_CustomerFeedError_name, CustomerFeedErrorEnum_CustomerFeedError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/customer_feed_error.proto", fileDescriptor_customer_feed_error_7d219f169025f9b2)
+}
+
+var fileDescriptor_customer_feed_error_7d219f169025f9b2 = []byte{
+	// 406 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x6e, 0xd3, 0x30,
+	0x1c, 0xc6, 0x69, 0x06, 0x1b, 0xf2, 0x0e, 0x14, 0x4b, 0x20, 0x0e, 0xa8, 0x87, 0x72, 0x80, 0xc3,
+	0x70, 0x82, 0xb8, 0x20, 0x71, 0xf2, 0xe2, 0x7f, 0x8a, 0x45, 0x62, 0x47, 0x49, 0xda, 0x51, 0x14,
+	0xc9, 0x2a, 0x8b, 0x89, 0x90, 0xd6, 0x7a, 0x8a, 0xb7, 0x3d, 0x10, 0x47, 0x1e, 0x05, 0xf1, 0x0a,
+	0x3c, 0x07, 0x57, 0xe4, 0xb8, 0xab, 0xd4, 0x16, 0x76, 0xca, 0xa7, 0x7f, 0x7e, 0xdf, 0xff, 0xb3,
+	0xf5, 0x19, 0xbd, 0x6b, 0x8d, 0x69, 0x2f, 0x74, 0xb8, 0x68, 0x6c, 0xe8, 0xa5, 0x53, 0x37, 0x51,
+	0xa8, 0xbb, 0xce, 0x74, 0x36, 0x3c, 0xbf, 0xb6, 0x57, 0x66, 0xa9, 0x3b, 0xf5, 0x55, 0xeb, 0x46,
+	0xf5, 0x43, 0x72, 0xd9, 0x99, 0x2b, 0x83, 0x47, 0x1e, 0x27, 0x8b, 0xc6, 0x92, 0x8d, 0x93, 0xdc,
+	0x44, 0xc4, 0x3b, 0xc7, 0x7f, 0x02, 0xf4, 0x24, 0x5e, 0xbb, 0x13, 0xad, 0x1b, 0x70, 0x63, 0x58,
+	0x5d, 0x2f, 0xc7, 0xbf, 0x03, 0xf4, 0x78, 0xef, 0x0f, 0x7e, 0x84, 0x8e, 0xa7, 0xa2, 0xcc, 0x21,
+	0xe6, 0x09, 0x07, 0x36, 0xbc, 0x87, 0x8f, 0xd1, 0xd1, 0x54, 0x7c, 0x14, 0xf2, 0x4c, 0x0c, 0x07,
+	0xf8, 0x04, 0xbd, 0x4a, 0x00, 0x98, 0xa2, 0x69, 0x01, 0x94, 0xcd, 0x15, 0x7c, 0xe2, 0x65, 0x55,
+	0xaa, 0x44, 0x16, 0x2a, 0x4f, 0x69, 0x0c, 0x1f, 0x64, 0xca, 0xa0, 0x50, 0xd5, 0x3c, 0x87, 0x61,
+	0x80, 0xc7, 0x68, 0x14, 0x53, 0x21, 0x64, 0xa5, 0xe2, 0x02, 0x68, 0x05, 0x3d, 0x57, 0x40, 0x26,
+	0x67, 0xc0, 0x94, 0xdb, 0x33, 0x3c, 0xc0, 0x11, 0x3a, 0xd9, 0x66, 0xb6, 0x56, 0x73, 0x31, 0x51,
+	0xf1, 0xb4, 0xac, 0x64, 0x06, 0x85, 0x77, 0xdc, 0xc7, 0x2f, 0xd1, 0x8b, 0xb5, 0x23, 0x93, 0x8c,
+	0x27, 0xf3, 0xcd, 0xc6, 0x6d, 0xf0, 0x01, 0x7e, 0x8e, 0x9e, 0x71, 0x31, 0xa3, 0x29, 0x67, 0xfb,
+	0x87, 0x3b, 0x74, 0x57, 0xc9, 0x78, 0x59, 0xba, 0x04, 0xc7, 0x67, 0x34, 0xcf, 0x7b, 0xfd, 0xaf,
+	0xab, 0x1c, 0xe1, 0x37, 0xe8, 0xf5, 0xee, 0x54, 0xb9, 0x23, 0xd0, 0x34, 0x95, 0x67, 0xc0, 0x94,
+	0x14, 0x3b, 0xf1, 0x0f, 0x4f, 0x7f, 0x0d, 0xd0, 0xf8, 0xdc, 0x2c, 0xc9, 0xdd, 0x05, 0x9d, 0x3e,
+	0xdd, 0xeb, 0x20, 0x77, 0xc5, 0xe6, 0x83, 0xcf, 0x6c, 0xed, 0x6c, 0xcd, 0xc5, 0x62, 0xd5, 0x12,
+	0xd3, 0xb5, 0x61, 0xab, 0x57, 0x7d, 0xed, 0xb7, 0x8f, 0xe4, 0xf2, 0x9b, 0xfd, 0xdf, 0x9b, 0x79,
+	0xef, 0x3f, 0xdf, 0x83, 0x83, 0x09, 0xa5, 0x3f, 0x82, 0xd1, 0xc4, 0x2f, 0xa3, 0x8d, 0x25, 0x5e,
+	0x3a, 0x35, 0x8b, 0x48, 0x1f, 0x69, 0x7f, 0xde, 0x02, 0x35, 0x6d, 0x6c, 0xbd, 0x01, 0xea, 0x59,
+	0x54, 0x7b, 0xe0, 0xcb, 0x61, 0x1f, 0xfc, 0xf6, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x13,
+	0xb5, 0x65, 0xab, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/customer_manager_link_error.pb.go b/googleapis/ads/googleads/v0/errors/customer_manager_link_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b5d575973610e1f5f17148e1c0a74f2efd7e6503
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/customer_manager_link_error.pb.go
@@ -0,0 +1,153 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/customer_manager_link_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible CustomerManagerLink errors.
+type CustomerManagerLinkErrorEnum_CustomerManagerLinkError int32
+
+const (
+	// Enum unspecified.
+	CustomerManagerLinkErrorEnum_UNSPECIFIED CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 0
+	// The received error code is not known in this version.
+	CustomerManagerLinkErrorEnum_UNKNOWN CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 1
+	// No pending invitation.
+	CustomerManagerLinkErrorEnum_NO_PENDING_INVITE CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 2
+	// Attempt to operate on the same client more than once in the same call.
+	CustomerManagerLinkErrorEnum_SAME_CLIENT_MORE_THAN_ONCE_PER_CALL CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 3
+	// Manager account has the maximum number of linked accounts.
+	CustomerManagerLinkErrorEnum_MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 4
+	// If no active user on account it cannot be unlinked from its manager.
+	CustomerManagerLinkErrorEnum_CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 5
+	// Account should have at least one active owner on it before being
+	// unlinked.
+	CustomerManagerLinkErrorEnum_CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 6
+	// Only account owners may change their permission role.
+	CustomerManagerLinkErrorEnum_CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 7
+	// When a client's link to its manager is not active, the link role cannot
+	// be changed.
+	CustomerManagerLinkErrorEnum_CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 8
+	// Attempt to link a child to a parent that contains or will contain
+	// duplicate children.
+	CustomerManagerLinkErrorEnum_DUPLICATE_CHILD_FOUND CustomerManagerLinkErrorEnum_CustomerManagerLinkError = 9
+)
+
+var CustomerManagerLinkErrorEnum_CustomerManagerLinkError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NO_PENDING_INVITE",
+	3: "SAME_CLIENT_MORE_THAN_ONCE_PER_CALL",
+	4: "MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS",
+	5: "CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER",
+	6: "CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER",
+	7: "CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER",
+	8: "CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT",
+	9: "DUPLICATE_CHILD_FOUND",
+}
+var CustomerManagerLinkErrorEnum_CustomerManagerLinkError_value = map[string]int32{
+	"UNSPECIFIED":                         0,
+	"UNKNOWN":                             1,
+	"NO_PENDING_INVITE":                   2,
+	"SAME_CLIENT_MORE_THAN_ONCE_PER_CALL": 3,
+	"MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS":      4,
+	"CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER":      5,
+	"CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER":        6,
+	"CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER":        7,
+	"CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT": 8,
+	"DUPLICATE_CHILD_FOUND":                          9,
+}
+
+func (x CustomerManagerLinkErrorEnum_CustomerManagerLinkError) String() string {
+	return proto.EnumName(CustomerManagerLinkErrorEnum_CustomerManagerLinkError_name, int32(x))
+}
+func (CustomerManagerLinkErrorEnum_CustomerManagerLinkError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_customer_manager_link_error_3b39935325f9f58c, []int{0, 0}
+}
+
+// Container for enum describing possible CustomerManagerLink errors.
+type CustomerManagerLinkErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomerManagerLinkErrorEnum) Reset()         { *m = CustomerManagerLinkErrorEnum{} }
+func (m *CustomerManagerLinkErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*CustomerManagerLinkErrorEnum) ProtoMessage()    {}
+func (*CustomerManagerLinkErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_manager_link_error_3b39935325f9f58c, []int{0}
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerManagerLinkErrorEnum.Unmarshal(m, b)
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerManagerLinkErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *CustomerManagerLinkErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerManagerLinkErrorEnum.Merge(dst, src)
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_CustomerManagerLinkErrorEnum.Size(m)
+}
+func (m *CustomerManagerLinkErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerManagerLinkErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerManagerLinkErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*CustomerManagerLinkErrorEnum)(nil), "google.ads.googleads.v0.errors.CustomerManagerLinkErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.CustomerManagerLinkErrorEnum_CustomerManagerLinkError", CustomerManagerLinkErrorEnum_CustomerManagerLinkError_name, CustomerManagerLinkErrorEnum_CustomerManagerLinkError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/customer_manager_link_error.proto", fileDescriptor_customer_manager_link_error_3b39935325f9f58c)
+}
+
+var fileDescriptor_customer_manager_link_error_3b39935325f9f58c = []byte{
+	// 457 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6f, 0xd3, 0x40,
+	0x10, 0x85, 0x49, 0x02, 0x2d, 0x6c, 0x0f, 0x18, 0x4b, 0x95, 0x40, 0x82, 0x1e, 0xc2, 0xa1, 0x42,
+	0x88, 0x4d, 0x04, 0x47, 0x2e, 0x6c, 0xd6, 0x93, 0x64, 0x55, 0x7b, 0xd6, 0xb2, 0xd7, 0x0e, 0xa0,
+	0x48, 0x23, 0xd3, 0x58, 0x56, 0xd4, 0xc4, 0xae, 0xec, 0xb6, 0xbf, 0x07, 0x71, 0xe4, 0xa7, 0x70,
+	0xe5, 0x07, 0x81, 0x6c, 0xc7, 0x55, 0x85, 0x48, 0x4f, 0xfb, 0xa4, 0xf7, 0xed, 0x9b, 0x91, 0xe6,
+	0xb1, 0x4f, 0x59, 0x51, 0x64, 0x9b, 0x74, 0x94, 0xac, 0xaa, 0x51, 0x2b, 0x6b, 0x75, 0x33, 0x1e,
+	0xa5, 0x65, 0x59, 0x94, 0xd5, 0xe8, 0xfc, 0xba, 0xba, 0x2a, 0xb6, 0x69, 0x49, 0xdb, 0x24, 0x4f,
+	0xb2, 0xb4, 0xa4, 0xcd, 0x3a, 0xbf, 0xa0, 0xc6, 0xe4, 0x97, 0x65, 0x71, 0x55, 0xd8, 0x27, 0xed,
+	0x37, 0x9e, 0xac, 0x2a, 0x7e, 0x9b, 0xc0, 0x6f, 0xc6, 0xbc, 0x4d, 0x18, 0x7e, 0x1f, 0xb0, 0x97,
+	0x72, 0x97, 0xe2, 0xb5, 0x21, 0xee, 0x3a, 0xbf, 0x80, 0xda, 0x85, 0xfc, 0x7a, 0x3b, 0xfc, 0xd3,
+	0x67, 0xcf, 0xf7, 0x01, 0xf6, 0x53, 0x76, 0x14, 0x61, 0xe8, 0x83, 0x54, 0x53, 0x05, 0x8e, 0xf5,
+	0xc0, 0x3e, 0x62, 0x87, 0x11, 0x9e, 0xa1, 0x5e, 0xa0, 0xd5, 0xb3, 0x8f, 0xd9, 0x33, 0xd4, 0xe4,
+	0x03, 0x3a, 0x0a, 0x67, 0xa4, 0x30, 0x56, 0x06, 0xac, 0xbe, 0x7d, 0xca, 0x5e, 0x87, 0xc2, 0x03,
+	0x92, 0xae, 0x02, 0x34, 0xe4, 0xe9, 0x00, 0xc8, 0xcc, 0x05, 0x92, 0x46, 0x09, 0xe4, 0x43, 0x40,
+	0x52, 0xb8, 0xae, 0x35, 0xb0, 0xdf, 0xb1, 0x37, 0x9e, 0x40, 0x31, 0x83, 0x80, 0xe6, 0x22, 0x24,
+	0x4f, 0x7c, 0x26, 0x8c, 0xbc, 0x09, 0x04, 0xa4, 0xa7, 0xe4, 0x2a, 0x3c, 0x03, 0x87, 0x84, 0x94,
+	0x3a, 0x42, 0x13, 0x5a, 0x0f, 0x6b, 0x5c, 0x0a, 0x44, 0x6d, 0x28, 0xc2, 0xda, 0xed, 0x3c, 0x5a,
+	0x28, 0x33, 0xd7, 0x91, 0x21, 0x21, 0x8d, 0x8a, 0x81, 0xa2, 0x10, 0x02, 0xeb, 0x91, 0xfd, 0x96,
+	0x9d, 0xee, 0xf0, 0x00, 0x3c, 0x1d, 0x03, 0xb9, 0x22, 0x34, 0xdd, 0x52, 0xdd, 0x57, 0xbd, 0x40,
+	0x08, 0xac, 0x83, 0x3b, 0xb0, 0x9c, 0x0b, 0x9c, 0x01, 0x05, 0xda, 0x05, 0x9a, 0x7c, 0x21, 0xd4,
+	0xf8, 0x0f, 0x7c, 0x68, 0xbf, 0x67, 0xfc, 0x3f, 0xf0, 0x54, 0x07, 0x3b, 0xba, 0xd9, 0xe2, 0xee,
+	0x86, 0xd6, 0x63, 0xfb, 0x05, 0x3b, 0x76, 0x22, 0xdf, 0x55, 0x52, 0x18, 0x20, 0x39, 0x57, 0xae,
+	0x43, 0x53, 0x1d, 0xa1, 0x63, 0x3d, 0x99, 0xfc, 0xee, 0xb1, 0xe1, 0x79, 0xb1, 0xe5, 0xf7, 0x5f,
+	0x72, 0xf2, 0x6a, 0xdf, 0x95, 0xfc, 0xba, 0x08, 0x7e, 0xef, 0xab, 0xb3, 0x0b, 0xc8, 0x8a, 0x4d,
+	0x92, 0x67, 0xbc, 0x28, 0xb3, 0x51, 0x96, 0xe6, 0x4d, 0x4d, 0xba, 0x72, 0x5d, 0xae, 0xab, 0x7d,
+	0x5d, 0xfb, 0xd8, 0x3e, 0x3f, 0xfa, 0x83, 0x99, 0x10, 0x3f, 0xfb, 0x27, 0xb3, 0x36, 0x4c, 0xac,
+	0x2a, 0xde, 0xca, 0x5a, 0xc5, 0x63, 0xde, 0x8c, 0xac, 0x7e, 0x75, 0xc0, 0x52, 0xac, 0xaa, 0xe5,
+	0x2d, 0xb0, 0x8c, 0xc7, 0xcb, 0x16, 0xf8, 0x76, 0xd0, 0x0c, 0xfe, 0xf0, 0x37, 0x00, 0x00, 0xff,
+	0xff, 0x6c, 0x06, 0x95, 0xed, 0xe3, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/database_error.pb.go b/googleapis/ads/googleads/v0/errors/database_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e15d1c0e3d4482068cd202c796e24cbad386c783
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/database_error.pb.go
@@ -0,0 +1,111 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/database_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible database errors.
+type DatabaseErrorEnum_DatabaseError int32
+
+const (
+	// Enum unspecified.
+	DatabaseErrorEnum_UNSPECIFIED DatabaseErrorEnum_DatabaseError = 0
+	// The received error code is not known in this version.
+	DatabaseErrorEnum_UNKNOWN DatabaseErrorEnum_DatabaseError = 1
+	// Multiple requests were attempting to modify the same resource at once.
+	// Please retry the request.
+	DatabaseErrorEnum_CONCURRENT_MODIFICATION DatabaseErrorEnum_DatabaseError = 2
+)
+
+var DatabaseErrorEnum_DatabaseError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CONCURRENT_MODIFICATION",
+}
+var DatabaseErrorEnum_DatabaseError_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"CONCURRENT_MODIFICATION": 2,
+}
+
+func (x DatabaseErrorEnum_DatabaseError) String() string {
+	return proto.EnumName(DatabaseErrorEnum_DatabaseError_name, int32(x))
+}
+func (DatabaseErrorEnum_DatabaseError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_database_error_967d4f3a60ca34cc, []int{0, 0}
+}
+
+// Container for enum describing possible database errors.
+type DatabaseErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DatabaseErrorEnum) Reset()         { *m = DatabaseErrorEnum{} }
+func (m *DatabaseErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DatabaseErrorEnum) ProtoMessage()    {}
+func (*DatabaseErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_database_error_967d4f3a60ca34cc, []int{0}
+}
+func (m *DatabaseErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DatabaseErrorEnum.Unmarshal(m, b)
+}
+func (m *DatabaseErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DatabaseErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *DatabaseErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DatabaseErrorEnum.Merge(dst, src)
+}
+func (m *DatabaseErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DatabaseErrorEnum.Size(m)
+}
+func (m *DatabaseErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DatabaseErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DatabaseErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DatabaseErrorEnum)(nil), "google.ads.googleads.v0.errors.DatabaseErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.DatabaseErrorEnum_DatabaseError", DatabaseErrorEnum_DatabaseError_name, DatabaseErrorEnum_DatabaseError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/database_error.proto", fileDescriptor_database_error_967d4f3a60ca34cc)
+}
+
+var fileDescriptor_database_error_967d4f3a60ca34cc = []byte{
+	// 262 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0x94, 0xc4, 0x92, 0xc4, 0xa4, 0xc4, 0xe2, 0xd4, 0x78, 0x30, 0x5f,
+	0xaf, 0xa0, 0x28, 0xbf, 0x24, 0x5f, 0x48, 0x0e, 0xa2, 0x52, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae,
+	0x49, 0xaf, 0xcc, 0x40, 0x0f, 0xa2, 0x49, 0x29, 0x9e, 0x4b, 0xd0, 0x05, 0xaa, 0xcf, 0x15, 0x24,
+	0xe2, 0x9a, 0x57, 0x9a, 0xab, 0xe4, 0xc5, 0xc5, 0x8b, 0x22, 0x28, 0xc4, 0xcf, 0xc5, 0x1d, 0xea,
+	0x17, 0x1c, 0xe0, 0xea, 0xec, 0xe9, 0xe6, 0xe9, 0xea, 0x22, 0xc0, 0x20, 0xc4, 0xcd, 0xc5, 0x1e,
+	0xea, 0xe7, 0xed, 0xe7, 0x1f, 0xee, 0x27, 0xc0, 0x28, 0x24, 0xcd, 0x25, 0xee, 0xec, 0xef, 0xe7,
+	0x1c, 0x1a, 0x14, 0xe4, 0xea, 0x17, 0x12, 0xef, 0xeb, 0xef, 0xe2, 0xe9, 0xe6, 0xe9, 0xec, 0x18,
+	0xe2, 0xe9, 0xef, 0x27, 0xc0, 0xe4, 0x74, 0x82, 0x91, 0x4b, 0x29, 0x39, 0x3f, 0x57, 0x0f, 0xbf,
+	0x3b, 0x9c, 0x84, 0x50, 0x2c, 0x0c, 0x00, 0xb9, 0x3d, 0x80, 0x31, 0xca, 0x05, 0xaa, 0x2b, 0x3d,
+	0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x33, 0x58,
+	0x10, 0x14, 0x64, 0x16, 0xe3, 0x0a, 0x11, 0x6b, 0x08, 0xb5, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71,
+	0x15, 0x93, 0x9c, 0x3b, 0xc4, 0x30, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0,
+	0x03, 0x5b, 0x59, 0x7c, 0x0a, 0xa6, 0x20, 0xc6, 0x31, 0xa5, 0x38, 0x06, 0xae, 0x20, 0x26, 0xcc,
+	0x20, 0x06, 0xa2, 0x20, 0x89, 0x0d, 0x6c, 0xb1, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xf4,
+	0x59, 0x5f, 0x89, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/date_error.pb.go b/googleapis/ads/googleads/v0/errors/date_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7bdfef19f83814840cbf33ffe911dd0306ba4931
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/date_error.pb.go
@@ -0,0 +1,150 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/date_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible date errors.
+type DateErrorEnum_DateError int32
+
+const (
+	// Enum unspecified.
+	DateErrorEnum_UNSPECIFIED DateErrorEnum_DateError = 0
+	// The received error code is not known in this version.
+	DateErrorEnum_UNKNOWN DateErrorEnum_DateError = 1
+	// Given field values do not correspond to a valid date.
+	DateErrorEnum_INVALID_FIELD_VALUES_IN_DATE DateErrorEnum_DateError = 2
+	// Given field values do not correspond to a valid date time.
+	DateErrorEnum_INVALID_FIELD_VALUES_IN_DATE_TIME DateErrorEnum_DateError = 3
+	// The string date's format should be yyyy-mm-dd.
+	DateErrorEnum_INVALID_STRING_DATE DateErrorEnum_DateError = 4
+	// The string date time's format should be yyyy-mm-dd hh:mm:ss.ssssss.
+	DateErrorEnum_INVALID_STRING_DATE_TIME_MICROS DateErrorEnum_DateError = 6
+	// The string date time's format should be yyyy-mm-dd hh:mm:ss.
+	DateErrorEnum_INVALID_STRING_DATE_TIME_SECONDS DateErrorEnum_DateError = 11
+	// Date is before allowed minimum.
+	DateErrorEnum_EARLIER_THAN_MINIMUM_DATE DateErrorEnum_DateError = 7
+	// Date is after allowed maximum.
+	DateErrorEnum_LATER_THAN_MAXIMUM_DATE DateErrorEnum_DateError = 8
+	// Date range bounds are not in order.
+	DateErrorEnum_DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE DateErrorEnum_DateError = 9
+	// Both dates in range are null.
+	DateErrorEnum_DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL DateErrorEnum_DateError = 10
+)
+
+var DateErrorEnum_DateError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_FIELD_VALUES_IN_DATE",
+	3:  "INVALID_FIELD_VALUES_IN_DATE_TIME",
+	4:  "INVALID_STRING_DATE",
+	6:  "INVALID_STRING_DATE_TIME_MICROS",
+	11: "INVALID_STRING_DATE_TIME_SECONDS",
+	7:  "EARLIER_THAN_MINIMUM_DATE",
+	8:  "LATER_THAN_MAXIMUM_DATE",
+	9:  "DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE",
+	10: "DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL",
+}
+var DateErrorEnum_DateError_value = map[string]int32{
+	"UNSPECIFIED":                                     0,
+	"UNKNOWN":                                         1,
+	"INVALID_FIELD_VALUES_IN_DATE":                    2,
+	"INVALID_FIELD_VALUES_IN_DATE_TIME":               3,
+	"INVALID_STRING_DATE":                             4,
+	"INVALID_STRING_DATE_TIME_MICROS":                 6,
+	"INVALID_STRING_DATE_TIME_SECONDS":                11,
+	"EARLIER_THAN_MINIMUM_DATE":                       7,
+	"LATER_THAN_MAXIMUM_DATE":                         8,
+	"DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE": 9,
+	"DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL":  10,
+}
+
+func (x DateErrorEnum_DateError) String() string {
+	return proto.EnumName(DateErrorEnum_DateError_name, int32(x))
+}
+func (DateErrorEnum_DateError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_date_error_e503fbf0897d3786, []int{0, 0}
+}
+
+// Container for enum describing possible date errors.
+type DateErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DateErrorEnum) Reset()         { *m = DateErrorEnum{} }
+func (m *DateErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DateErrorEnum) ProtoMessage()    {}
+func (*DateErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_date_error_e503fbf0897d3786, []int{0}
+}
+func (m *DateErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DateErrorEnum.Unmarshal(m, b)
+}
+func (m *DateErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DateErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *DateErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DateErrorEnum.Merge(dst, src)
+}
+func (m *DateErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DateErrorEnum.Size(m)
+}
+func (m *DateErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DateErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DateErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DateErrorEnum)(nil), "google.ads.googleads.v0.errors.DateErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.DateErrorEnum_DateError", DateErrorEnum_DateError_name, DateErrorEnum_DateError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/date_error.proto", fileDescriptor_date_error_e503fbf0897d3786)
+}
+
+var fileDescriptor_date_error_e503fbf0897d3786 = []byte{
+	// 392 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0xae, 0xd2, 0x40,
+	0x14, 0x87, 0xa5, 0x98, 0x7b, 0xbd, 0x87, 0xa8, 0xcd, 0xb8, 0xb8, 0x31, 0xea, 0x15, 0x51, 0xb7,
+	0xd3, 0x46, 0x96, 0xae, 0x06, 0x66, 0x28, 0x13, 0xdb, 0x29, 0xe9, 0x3f, 0x8d, 0x69, 0x32, 0xa9,
+	0xb6, 0x69, 0x4c, 0x80, 0x21, 0x2d, 0xf2, 0x16, 0xbe, 0x84, 0x4b, 0x9f, 0xc3, 0x95, 0xaf, 0xe4,
+	0xc6, 0xb4, 0x03, 0x35, 0x24, 0xc0, 0xaa, 0xbf, 0xce, 0xf9, 0xbe, 0x73, 0x16, 0xe7, 0x80, 0x55,
+	0x2a, 0x55, 0x2e, 0x0b, 0x2b, 0xcb, 0xeb, 0x7d, 0x6c, 0xd2, 0xce, 0xb6, 0x8a, 0xaa, 0x52, 0x55,
+	0x6d, 0xe5, 0xd9, 0xb6, 0x90, 0x6d, 0xc6, 0x9b, 0x4a, 0x6d, 0x15, 0xba, 0xd3, 0x14, 0xce, 0xf2,
+	0x1a, 0x77, 0x02, 0xde, 0xd9, 0x58, 0x0b, 0xa3, 0x1f, 0x7d, 0x78, 0x48, 0xb3, 0x6d, 0xc1, 0x9a,
+	0x5f, 0xb6, 0xfe, 0xbe, 0x1a, 0xfd, 0x35, 0xe0, 0xa6, 0x7b, 0x41, 0x8f, 0x61, 0x10, 0x8b, 0x70,
+	0xc1, 0xa6, 0x7c, 0xc6, 0x19, 0x35, 0xef, 0xa1, 0x01, 0x5c, 0xc7, 0xe2, 0x83, 0xf0, 0x3f, 0x0a,
+	0xb3, 0x87, 0x86, 0xf0, 0x9c, 0x8b, 0x84, 0xb8, 0x9c, 0xca, 0x19, 0x67, 0x2e, 0x95, 0x09, 0x71,
+	0x63, 0x16, 0x4a, 0x2e, 0x24, 0x25, 0x11, 0x33, 0x0d, 0xf4, 0x16, 0x5e, 0x5d, 0x22, 0x64, 0xc4,
+	0x3d, 0x66, 0xf6, 0xd1, 0x2d, 0x3c, 0x39, 0x60, 0x61, 0x14, 0x70, 0xe1, 0x68, 0xff, 0x3e, 0x7a,
+	0x0d, 0x2f, 0x4f, 0x14, 0x5a, 0x4d, 0x7a, 0x7c, 0x1a, 0xf8, 0xa1, 0x79, 0x85, 0xde, 0xc0, 0xf0,
+	0x2c, 0x14, 0xb2, 0xa9, 0x2f, 0x68, 0x68, 0x0e, 0xd0, 0x0b, 0x78, 0xca, 0x48, 0xe0, 0x72, 0x16,
+	0xc8, 0x68, 0x4e, 0x84, 0xf4, 0xb8, 0xe0, 0x5e, 0xec, 0xe9, 0x49, 0xd7, 0xe8, 0x19, 0xdc, 0xba,
+	0x24, 0xea, 0x8a, 0xe4, 0xd3, 0xff, 0xe2, 0x03, 0x34, 0x06, 0xab, 0x6d, 0x19, 0x10, 0xe1, 0xb0,
+	0x23, 0x53, 0x9e, 0x93, 0x6e, 0xd0, 0x3b, 0xc0, 0x27, 0x24, 0x22, 0xe8, 0x11, 0x18, 0xca, 0x89,
+	0x1f, 0xcd, 0xa5, 0x88, 0x5d, 0xd7, 0x84, 0xc9, 0xef, 0x1e, 0x8c, 0xbe, 0xaa, 0x15, 0xbe, 0xbc,
+	0xb6, 0xc9, 0xa3, 0x6e, 0x43, 0x8b, 0x66, 0xcd, 0x8b, 0xde, 0x67, 0xba, 0x37, 0x4a, 0xb5, 0xcc,
+	0xd6, 0x25, 0x56, 0x55, 0x69, 0x95, 0xc5, 0xba, 0x3d, 0x82, 0xc3, 0xa5, 0x6c, 0xbe, 0xd5, 0xe7,
+	0x0e, 0xe7, 0xbd, 0xfe, 0xfc, 0x34, 0xfa, 0x0e, 0x21, 0xbf, 0x8c, 0x3b, 0x47, 0x37, 0x23, 0x79,
+	0x8d, 0x75, 0x6c, 0x52, 0x62, 0xe3, 0x76, 0x64, 0xfd, 0xe7, 0x00, 0xa4, 0x24, 0xaf, 0xd3, 0x0e,
+	0x48, 0x13, 0x3b, 0xd5, 0xc0, 0x97, 0xab, 0x76, 0xf0, 0xf8, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0xc4, 0x62, 0x40, 0x2a, 0xb0, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/date_range_error.pb.go b/googleapis/ads/googleads/v0/errors/date_range_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..07ab2bd4237ab839ed5a5cc700ea6674aede349a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/date_range_error.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/date_range_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible date range errors.
+type DateRangeErrorEnum_DateRangeError int32
+
+const (
+	// Enum unspecified.
+	DateRangeErrorEnum_UNSPECIFIED DateRangeErrorEnum_DateRangeError = 0
+	// The received error code is not known in this version.
+	DateRangeErrorEnum_UNKNOWN DateRangeErrorEnum_DateRangeError = 1
+	// Invalid date.
+	DateRangeErrorEnum_INVALID_DATE DateRangeErrorEnum_DateRangeError = 2
+	// The start date was after the end date.
+	DateRangeErrorEnum_START_DATE_AFTER_END_DATE DateRangeErrorEnum_DateRangeError = 3
+	// Cannot set date to past time
+	DateRangeErrorEnum_CANNOT_SET_DATE_TO_PAST DateRangeErrorEnum_DateRangeError = 4
+	// A date was used that is past the system "last" date.
+	DateRangeErrorEnum_AFTER_MAXIMUM_ALLOWABLE_DATE DateRangeErrorEnum_DateRangeError = 5
+	// Trying to change start date on a campaign that has started.
+	DateRangeErrorEnum_CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED DateRangeErrorEnum_DateRangeError = 6
+)
+
+var DateRangeErrorEnum_DateRangeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_DATE",
+	3: "START_DATE_AFTER_END_DATE",
+	4: "CANNOT_SET_DATE_TO_PAST",
+	5: "AFTER_MAXIMUM_ALLOWABLE_DATE",
+	6: "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED",
+}
+var DateRangeErrorEnum_DateRangeError_value = map[string]int32{
+	"UNSPECIFIED":                  0,
+	"UNKNOWN":                      1,
+	"INVALID_DATE":                 2,
+	"START_DATE_AFTER_END_DATE":    3,
+	"CANNOT_SET_DATE_TO_PAST":      4,
+	"AFTER_MAXIMUM_ALLOWABLE_DATE": 5,
+	"CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED": 6,
+}
+
+func (x DateRangeErrorEnum_DateRangeError) String() string {
+	return proto.EnumName(DateRangeErrorEnum_DateRangeError_name, int32(x))
+}
+func (DateRangeErrorEnum_DateRangeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_date_range_error_46426a282e457061, []int{0, 0}
+}
+
+// Container for enum describing possible date range errors.
+type DateRangeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DateRangeErrorEnum) Reset()         { *m = DateRangeErrorEnum{} }
+func (m *DateRangeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DateRangeErrorEnum) ProtoMessage()    {}
+func (*DateRangeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_date_range_error_46426a282e457061, []int{0}
+}
+func (m *DateRangeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DateRangeErrorEnum.Unmarshal(m, b)
+}
+func (m *DateRangeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DateRangeErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *DateRangeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DateRangeErrorEnum.Merge(dst, src)
+}
+func (m *DateRangeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DateRangeErrorEnum.Size(m)
+}
+func (m *DateRangeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DateRangeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DateRangeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DateRangeErrorEnum)(nil), "google.ads.googleads.v0.errors.DateRangeErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.DateRangeErrorEnum_DateRangeError", DateRangeErrorEnum_DateRangeError_name, DateRangeErrorEnum_DateRangeError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/date_range_error.proto", fileDescriptor_date_range_error_46426a282e457061)
+}
+
+var fileDescriptor_date_range_error_46426a282e457061 = []byte{
+	// 353 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xe3, 0x40,
+	0x1c, 0xc6, 0x37, 0xed, 0x6e, 0x17, 0xa6, 0xcb, 0x6e, 0x98, 0x3d, 0x88, 0xa8, 0x45, 0x7a, 0x15,
+	0x26, 0x01, 0xf1, 0xe4, 0xe9, 0xdf, 0xce, 0xa4, 0x04, 0x93, 0x49, 0x48, 0xd2, 0x56, 0x25, 0x30,
+	0x44, 0x13, 0x82, 0xd0, 0x66, 0x4a, 0x52, 0xfb, 0x40, 0x1e, 0x7d, 0x13, 0xbd, 0xf8, 0x16, 0x3e,
+	0x87, 0x24, 0x93, 0x16, 0x7b, 0xd0, 0x53, 0xbe, 0x7c, 0xf3, 0xfd, 0xe6, 0xcf, 0x7c, 0x7f, 0x74,
+	0x91, 0x4b, 0x99, 0x2f, 0x32, 0x23, 0x49, 0x2b, 0x43, 0xc9, 0x5a, 0x6d, 0x4c, 0x23, 0x2b, 0x4b,
+	0x59, 0x56, 0x46, 0x9a, 0xac, 0x33, 0x51, 0x26, 0x45, 0x9e, 0x89, 0xc6, 0x21, 0xab, 0x52, 0xae,
+	0x25, 0x1e, 0xa8, 0x2c, 0x49, 0xd2, 0x8a, 0xec, 0x30, 0xb2, 0x31, 0x89, 0xc2, 0x86, 0xef, 0x1a,
+	0xc2, 0x34, 0x59, 0x67, 0x41, 0x4d, 0xb2, 0xda, 0x63, 0xc5, 0xe3, 0x72, 0xf8, 0xa6, 0xa1, 0xbf,
+	0xfb, 0x36, 0xfe, 0x87, 0xfa, 0x53, 0x1e, 0xfa, 0x6c, 0x6c, 0x5b, 0x36, 0xa3, 0xfa, 0x0f, 0xdc,
+	0x47, 0xbf, 0xa7, 0xfc, 0x8a, 0x7b, 0x73, 0xae, 0x6b, 0x58, 0x47, 0x7f, 0x6c, 0x3e, 0x03, 0xc7,
+	0xa6, 0x82, 0x42, 0xc4, 0xf4, 0x0e, 0x3e, 0x41, 0x87, 0x61, 0x04, 0x41, 0xd4, 0xfc, 0x0b, 0xb0,
+	0x22, 0x16, 0x08, 0xc6, 0xdb, 0xe3, 0x2e, 0x3e, 0x42, 0x07, 0x63, 0xe0, 0xdc, 0x8b, 0x44, 0xc8,
+	0xda, 0x4c, 0xe4, 0x09, 0x1f, 0xc2, 0x48, 0xff, 0x89, 0x4f, 0xd1, 0xb1, 0x02, 0x5c, 0xb8, 0xb6,
+	0xdd, 0xa9, 0x2b, 0xc0, 0x71, 0xbc, 0x39, 0x8c, 0x1c, 0xa6, 0xf0, 0x5f, 0xd8, 0x40, 0x67, 0x2d,
+	0xee, 0x7a, 0xd4, 0xb6, 0x6e, 0xc4, 0xa7, 0x59, 0xb6, 0x25, 0xc0, 0x09, 0x18, 0xd0, 0xd6, 0x65,
+	0x54, 0xef, 0x8d, 0x5e, 0x34, 0x34, 0xbc, 0x97, 0x4b, 0xf2, 0x7d, 0x1f, 0xa3, 0xff, 0xfb, 0xaf,
+	0xf6, 0xeb, 0x12, 0x7d, 0xed, 0x96, 0xb6, 0x58, 0x2e, 0x17, 0x49, 0x91, 0x13, 0x59, 0xe6, 0x46,
+	0x9e, 0x15, 0x4d, 0xc5, 0xdb, 0x6d, 0xac, 0x1e, 0xaa, 0xaf, 0x96, 0x73, 0xa9, 0x3e, 0x4f, 0x9d,
+	0xee, 0x04, 0xe0, 0xb9, 0x33, 0x98, 0xa8, 0xcb, 0x20, 0xad, 0x88, 0x92, 0xb5, 0x9a, 0x99, 0xa4,
+	0x19, 0x59, 0xbd, 0x6e, 0x03, 0x31, 0xa4, 0x55, 0xbc, 0x0b, 0xc4, 0x33, 0x33, 0x56, 0x81, 0xbb,
+	0x5e, 0x33, 0xf8, 0xfc, 0x23, 0x00, 0x00, 0xff, 0xff, 0x76, 0x21, 0xc0, 0x89, 0x14, 0x02, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/distinct_error.pb.go b/googleapis/ads/googleads/v0/errors/distinct_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c86789c7be4147118ab22fc4a284e3b7cb60446b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/distinct_error.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/distinct_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible distinct errors.
+type DistinctErrorEnum_DistinctError int32
+
+const (
+	// Enum unspecified.
+	DistinctErrorEnum_UNSPECIFIED DistinctErrorEnum_DistinctError = 0
+	// The received error code is not known in this version.
+	DistinctErrorEnum_UNKNOWN DistinctErrorEnum_DistinctError = 1
+	// Duplicate element.
+	DistinctErrorEnum_DUPLICATE_ELEMENT DistinctErrorEnum_DistinctError = 2
+	// Duplicate type.
+	DistinctErrorEnum_DUPLICATE_TYPE DistinctErrorEnum_DistinctError = 3
+)
+
+var DistinctErrorEnum_DistinctError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "DUPLICATE_ELEMENT",
+	3: "DUPLICATE_TYPE",
+}
+var DistinctErrorEnum_DistinctError_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"DUPLICATE_ELEMENT": 2,
+	"DUPLICATE_TYPE":    3,
+}
+
+func (x DistinctErrorEnum_DistinctError) String() string {
+	return proto.EnumName(DistinctErrorEnum_DistinctError_name, int32(x))
+}
+func (DistinctErrorEnum_DistinctError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_distinct_error_5ad5da077f636ddb, []int{0, 0}
+}
+
+// Container for enum describing possible distinct errors.
+type DistinctErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DistinctErrorEnum) Reset()         { *m = DistinctErrorEnum{} }
+func (m *DistinctErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*DistinctErrorEnum) ProtoMessage()    {}
+func (*DistinctErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_distinct_error_5ad5da077f636ddb, []int{0}
+}
+func (m *DistinctErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DistinctErrorEnum.Unmarshal(m, b)
+}
+func (m *DistinctErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DistinctErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *DistinctErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DistinctErrorEnum.Merge(dst, src)
+}
+func (m *DistinctErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_DistinctErrorEnum.Size(m)
+}
+func (m *DistinctErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_DistinctErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DistinctErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*DistinctErrorEnum)(nil), "google.ads.googleads.v0.errors.DistinctErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.DistinctErrorEnum_DistinctError", DistinctErrorEnum_DistinctError_name, DistinctErrorEnum_DistinctError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/distinct_error.proto", fileDescriptor_distinct_error_5ad5da077f636ddb)
+}
+
+var fileDescriptor_distinct_error_5ad5da077f636ddb = []byte{
+	// 268 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0x94, 0xcc, 0xe2, 0x92, 0xcc, 0xbc, 0xe4, 0x92, 0x78, 0x30, 0x5f,
+	0xaf, 0xa0, 0x28, 0xbf, 0x24, 0x5f, 0x48, 0x0e, 0xa2, 0x52, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae,
+	0x49, 0xaf, 0xcc, 0x40, 0x0f, 0xa2, 0x49, 0x29, 0x97, 0x4b, 0xd0, 0x05, 0xaa, 0xcf, 0x15, 0x24,
+	0xe2, 0x9a, 0x57, 0x9a, 0xab, 0x14, 0xc1, 0xc5, 0x8b, 0x22, 0x28, 0xc4, 0xcf, 0xc5, 0x1d, 0xea,
+	0x17, 0x1c, 0xe0, 0xea, 0xec, 0xe9, 0xe6, 0xe9, 0xea, 0x22, 0xc0, 0x20, 0xc4, 0xcd, 0xc5, 0x1e,
+	0xea, 0xe7, 0xed, 0xe7, 0x1f, 0xee, 0x27, 0xc0, 0x28, 0x24, 0xca, 0x25, 0xe8, 0x12, 0x1a, 0xe0,
+	0xe3, 0xe9, 0xec, 0x18, 0xe2, 0x1a, 0xef, 0xea, 0xe3, 0xea, 0xeb, 0xea, 0x17, 0x22, 0xc0, 0x24,
+	0x24, 0xc4, 0xc5, 0x87, 0x10, 0x0e, 0x89, 0x0c, 0x70, 0x15, 0x60, 0x76, 0x3a, 0xc1, 0xc8, 0xa5,
+	0x94, 0x9c, 0x9f, 0xab, 0x87, 0xdf, 0x55, 0x4e, 0x42, 0x28, 0xd6, 0x07, 0x80, 0x7c, 0x12, 0xc0,
+	0x18, 0xe5, 0x02, 0xd5, 0x95, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f,
+	0x9e, 0x9a, 0x07, 0xf6, 0x27, 0x2c, 0x40, 0x0a, 0x32, 0x8b, 0x71, 0x85, 0x8f, 0x35, 0x84, 0x5a,
+	0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x98, 0x63, 0x4a, 0xb1, 0x1e,
+	0x84, 0x09, 0x62, 0x85, 0x19, 0xe8, 0x81, 0xad, 0x2c, 0x3e, 0x05, 0x53, 0x10, 0xe3, 0x98, 0x52,
+	0x1c, 0x03, 0x57, 0x10, 0x13, 0x66, 0x10, 0x03, 0x51, 0x90, 0xc4, 0x06, 0xb6, 0xd8, 0x18, 0x10,
+	0x00, 0x00, 0xff, 0xff, 0x4a, 0x23, 0x22, 0x57, 0x97, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/enum_error.pb.go b/googleapis/ads/googleads/v0/errors/enum_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..44503b7045841d923ec19e348c8d95cc50b02bbd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/enum_error.pb.go
@@ -0,0 +1,110 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/enum_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible enum errors.
+type EnumErrorEnum_EnumError int32
+
+const (
+	// Enum unspecified.
+	EnumErrorEnum_UNSPECIFIED EnumErrorEnum_EnumError = 0
+	// The received error code is not known in this version.
+	EnumErrorEnum_UNKNOWN EnumErrorEnum_EnumError = 1
+	// The enum value is not permitted.
+	EnumErrorEnum_ENUM_VALUE_NOT_PERMITTED EnumErrorEnum_EnumError = 3
+)
+
+var EnumErrorEnum_EnumError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "ENUM_VALUE_NOT_PERMITTED",
+}
+var EnumErrorEnum_EnumError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"ENUM_VALUE_NOT_PERMITTED": 3,
+}
+
+func (x EnumErrorEnum_EnumError) String() string {
+	return proto.EnumName(EnumErrorEnum_EnumError_name, int32(x))
+}
+func (EnumErrorEnum_EnumError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_enum_error_95b237d25cdd3851, []int{0, 0}
+}
+
+// Container for enum describing possible enum errors.
+type EnumErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnumErrorEnum) Reset()         { *m = EnumErrorEnum{} }
+func (m *EnumErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*EnumErrorEnum) ProtoMessage()    {}
+func (*EnumErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_enum_error_95b237d25cdd3851, []int{0}
+}
+func (m *EnumErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnumErrorEnum.Unmarshal(m, b)
+}
+func (m *EnumErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnumErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *EnumErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumErrorEnum.Merge(dst, src)
+}
+func (m *EnumErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_EnumErrorEnum.Size(m)
+}
+func (m *EnumErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnumErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*EnumErrorEnum)(nil), "google.ads.googleads.v0.errors.EnumErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.EnumErrorEnum_EnumError", EnumErrorEnum_EnumError_name, EnumErrorEnum_EnumError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/enum_error.proto", fileDescriptor_enum_error_95b237d25cdd3851)
+}
+
+var fileDescriptor_enum_error_95b237d25cdd3851 = []byte{
+	// 257 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0x86, 0x32, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2, 0xa2,
+	0xfc, 0xa2, 0x62, 0xfd, 0xd4, 0xbc, 0xd2, 0xdc, 0x78, 0x30, 0x5b, 0xaf, 0xa0, 0x28, 0xbf, 0x24,
+	0x5f, 0x48, 0x0e, 0xa2, 0x4a, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x41, 0xaf, 0xcc, 0x40, 0x0f,
+	0xa2, 0x41, 0x29, 0x82, 0x8b, 0xd7, 0x35, 0xaf, 0x34, 0xd7, 0x15, 0xc4, 0x03, 0x31, 0x94, 0xdc,
+	0xb9, 0x38, 0xe1, 0x02, 0x42, 0xfc, 0x5c, 0xdc, 0xa1, 0x7e, 0xc1, 0x01, 0xae, 0xce, 0x9e, 0x6e,
+	0x9e, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0xdc, 0x5c, 0xec, 0xa1, 0x7e, 0xde, 0x7e, 0xfe, 0xe1, 0x7e,
+	0x02, 0x8c, 0x42, 0x32, 0x5c, 0x12, 0xae, 0x7e, 0xa1, 0xbe, 0xf1, 0x61, 0x8e, 0x3e, 0xa1, 0xae,
+	0xf1, 0x7e, 0xfe, 0x21, 0xf1, 0x01, 0xae, 0x41, 0xbe, 0x9e, 0x21, 0x21, 0xae, 0x2e, 0x02, 0xcc,
+	0x4e, 0x47, 0x18, 0xb9, 0x94, 0x92, 0xf3, 0x73, 0xf5, 0xf0, 0x3b, 0xc0, 0x89, 0x0f, 0x6e, 0x5b,
+	0x00, 0xc8, 0xc1, 0x01, 0x8c, 0x51, 0x2e, 0x50, 0x1d, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a,
+	0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79, 0x60, 0xef, 0xc0, 0xfc, 0x5c, 0x90, 0x59, 0x8c, 0x2b,
+	0x08, 0xac, 0x21, 0xd4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0x72, 0xee, 0x10, 0xc3,
+	0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0x6c, 0x65, 0xf1, 0x29, 0x98,
+	0x82, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x82, 0x98, 0x30, 0x83, 0x18, 0x88, 0x82, 0x24, 0x36,
+	0xb0, 0xc5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xa7, 0x5a, 0xd1, 0x7a, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/errors.pb.go b/googleapis/ads/googleads/v0/errors/errors.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..fb8f7fb36ba290a0386ed45e6f6fc9c066640a59
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/errors.pb.go
@@ -0,0 +1,2962 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/errors.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Describes how a GoogleAds API call failed. It's returned inside
+// google.rpc.Status.details when a call fails.
+type GoogleAdsFailure struct {
+	// The list of errors that occurred.
+	Errors               []*GoogleAdsError `protobuf:"bytes,1,rep,name=errors,proto3" json:"errors,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *GoogleAdsFailure) Reset()         { *m = GoogleAdsFailure{} }
+func (m *GoogleAdsFailure) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsFailure) ProtoMessage()    {}
+func (*GoogleAdsFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{0}
+}
+func (m *GoogleAdsFailure) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsFailure.Unmarshal(m, b)
+}
+func (m *GoogleAdsFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsFailure.Marshal(b, m, deterministic)
+}
+func (dst *GoogleAdsFailure) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsFailure.Merge(dst, src)
+}
+func (m *GoogleAdsFailure) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsFailure.Size(m)
+}
+func (m *GoogleAdsFailure) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsFailure.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsFailure proto.InternalMessageInfo
+
+func (m *GoogleAdsFailure) GetErrors() []*GoogleAdsError {
+	if m != nil {
+		return m.Errors
+	}
+	return nil
+}
+
+// GoogleAds-specific error.
+type GoogleAdsError struct {
+	// An enum value that indicates which error occurred.
+	ErrorCode *ErrorCode `protobuf:"bytes,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"`
+	// A human-readable description of the error.
+	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+	// The value that triggered the error.
+	Trigger *common.Value `protobuf:"bytes,3,opt,name=trigger,proto3" json:"trigger,omitempty"`
+	// Describes the part of the request proto that caused the error.
+	Location *ErrorLocation `protobuf:"bytes,4,opt,name=location,proto3" json:"location,omitempty"`
+	// Additional error details, which are returned by certain error codes. Most
+	// error codes do not include details.
+	Details              *ErrorDetails `protobuf:"bytes,5,opt,name=details,proto3" json:"details,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *GoogleAdsError) Reset()         { *m = GoogleAdsError{} }
+func (m *GoogleAdsError) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsError) ProtoMessage()    {}
+func (*GoogleAdsError) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{1}
+}
+func (m *GoogleAdsError) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsError.Unmarshal(m, b)
+}
+func (m *GoogleAdsError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsError.Marshal(b, m, deterministic)
+}
+func (dst *GoogleAdsError) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsError.Merge(dst, src)
+}
+func (m *GoogleAdsError) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsError.Size(m)
+}
+func (m *GoogleAdsError) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsError proto.InternalMessageInfo
+
+func (m *GoogleAdsError) GetErrorCode() *ErrorCode {
+	if m != nil {
+		return m.ErrorCode
+	}
+	return nil
+}
+
+func (m *GoogleAdsError) GetMessage() string {
+	if m != nil {
+		return m.Message
+	}
+	return ""
+}
+
+func (m *GoogleAdsError) GetTrigger() *common.Value {
+	if m != nil {
+		return m.Trigger
+	}
+	return nil
+}
+
+func (m *GoogleAdsError) GetLocation() *ErrorLocation {
+	if m != nil {
+		return m.Location
+	}
+	return nil
+}
+
+func (m *GoogleAdsError) GetDetails() *ErrorDetails {
+	if m != nil {
+		return m.Details
+	}
+	return nil
+}
+
+// The error reason represented by type and enum.
+type ErrorCode struct {
+	// The list of error enums
+	//
+	// Types that are valid to be assigned to ErrorCode:
+	//	*ErrorCode_RequestError
+	//	*ErrorCode_BiddingStrategyError
+	//	*ErrorCode_UrlFieldError
+	//	*ErrorCode_ListOperationError
+	//	*ErrorCode_QueryError
+	//	*ErrorCode_MutateError
+	//	*ErrorCode_FieldMaskError
+	//	*ErrorCode_AuthorizationError
+	//	*ErrorCode_InternalError
+	//	*ErrorCode_QuotaError
+	//	*ErrorCode_AdError
+	//	*ErrorCode_AdGroupError
+	//	*ErrorCode_CampaignBudgetError
+	//	*ErrorCode_CampaignError
+	//	*ErrorCode_AuthenticationError
+	//	*ErrorCode_AdGroupCriterionError
+	//	*ErrorCode_AdCustomizerError
+	//	*ErrorCode_AdGroupAdError
+	//	*ErrorCode_AdSharingError
+	//	*ErrorCode_AdxError
+	//	*ErrorCode_BiddingError
+	//	*ErrorCode_CampaignCriterionError
+	//	*ErrorCode_CollectionSizeError
+	//	*ErrorCode_CriterionError
+	//	*ErrorCode_CustomerError
+	//	*ErrorCode_DateError
+	//	*ErrorCode_DateRangeError
+	//	*ErrorCode_DistinctError
+	//	*ErrorCode_FeedAttributeReferenceError
+	//	*ErrorCode_FunctionError
+	//	*ErrorCode_FunctionParsingError
+	//	*ErrorCode_IdError
+	//	*ErrorCode_ImageError
+	//	*ErrorCode_MediaBundleError
+	//	*ErrorCode_MediaFileError
+	//	*ErrorCode_MultiplierError
+	//	*ErrorCode_NewResourceCreationError
+	//	*ErrorCode_NotEmptyError
+	//	*ErrorCode_NullError
+	//	*ErrorCode_OperatorError
+	//	*ErrorCode_RangeError
+	//	*ErrorCode_RecommendationError
+	//	*ErrorCode_RegionCodeError
+	//	*ErrorCode_SettingError
+	//	*ErrorCode_StringFormatError
+	//	*ErrorCode_StringLengthError
+	//	*ErrorCode_OperationAccessDeniedError
+	//	*ErrorCode_ResourceAccessDeniedError
+	//	*ErrorCode_ResourceCountLimitExceededError
+	//	*ErrorCode_AdGroupBidModifierError
+	//	*ErrorCode_ContextError
+	//	*ErrorCode_FieldError
+	//	*ErrorCode_SharedSetError
+	//	*ErrorCode_SharedCriterionError
+	//	*ErrorCode_CampaignSharedSetError
+	//	*ErrorCode_ConversionActionError
+	//	*ErrorCode_HeaderError
+	//	*ErrorCode_DatabaseError
+	//	*ErrorCode_PolicyFindingError
+	//	*ErrorCode_CampaignGroupError
+	//	*ErrorCode_EnumError
+	//	*ErrorCode_KeywordPlanError
+	//	*ErrorCode_KeywordPlanCampaignError
+	//	*ErrorCode_KeywordPlanNegativeKeywordError
+	//	*ErrorCode_KeywordPlanAdGroupError
+	//	*ErrorCode_KeywordPlanKeywordError
+	//	*ErrorCode_KeywordPlanIdeaError
+	//	*ErrorCode_AccountBudgetProposalError
+	//	*ErrorCode_UserListError
+	//	*ErrorCode_ChangeStatusError
+	//	*ErrorCode_FeedError
+	//	*ErrorCode_GeoTargetConstantSuggestionError
+	//	*ErrorCode_FeedItemError
+	//	*ErrorCode_BillingSetupError
+	//	*ErrorCode_CustomerClientLinkError
+	//	*ErrorCode_CustomerManagerLinkError
+	//	*ErrorCode_FeedMappingError
+	//	*ErrorCode_CustomerFeedError
+	//	*ErrorCode_AdGroupFeedError
+	//	*ErrorCode_CampaignFeedError
+	ErrorCode            isErrorCode_ErrorCode `protobuf_oneof:"error_code"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ErrorCode) Reset()         { *m = ErrorCode{} }
+func (m *ErrorCode) String() string { return proto.CompactTextString(m) }
+func (*ErrorCode) ProtoMessage()    {}
+func (*ErrorCode) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{2}
+}
+func (m *ErrorCode) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorCode.Unmarshal(m, b)
+}
+func (m *ErrorCode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorCode.Marshal(b, m, deterministic)
+}
+func (dst *ErrorCode) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorCode.Merge(dst, src)
+}
+func (m *ErrorCode) XXX_Size() int {
+	return xxx_messageInfo_ErrorCode.Size(m)
+}
+func (m *ErrorCode) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorCode.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorCode proto.InternalMessageInfo
+
+type isErrorCode_ErrorCode interface {
+	isErrorCode_ErrorCode()
+}
+
+type ErrorCode_RequestError struct {
+	RequestError RequestErrorEnum_RequestError `protobuf:"varint,1,opt,name=request_error,json=requestError,proto3,enum=google.ads.googleads.v0.errors.RequestErrorEnum_RequestError,oneof"`
+}
+
+type ErrorCode_BiddingStrategyError struct {
+	BiddingStrategyError BiddingStrategyErrorEnum_BiddingStrategyError `protobuf:"varint,2,opt,name=bidding_strategy_error,json=biddingStrategyError,proto3,enum=google.ads.googleads.v0.errors.BiddingStrategyErrorEnum_BiddingStrategyError,oneof"`
+}
+
+type ErrorCode_UrlFieldError struct {
+	UrlFieldError UrlFieldErrorEnum_UrlFieldError `protobuf:"varint,3,opt,name=url_field_error,json=urlFieldError,proto3,enum=google.ads.googleads.v0.errors.UrlFieldErrorEnum_UrlFieldError,oneof"`
+}
+
+type ErrorCode_ListOperationError struct {
+	ListOperationError ListOperationErrorEnum_ListOperationError `protobuf:"varint,4,opt,name=list_operation_error,json=listOperationError,proto3,enum=google.ads.googleads.v0.errors.ListOperationErrorEnum_ListOperationError,oneof"`
+}
+
+type ErrorCode_QueryError struct {
+	QueryError QueryErrorEnum_QueryError `protobuf:"varint,5,opt,name=query_error,json=queryError,proto3,enum=google.ads.googleads.v0.errors.QueryErrorEnum_QueryError,oneof"`
+}
+
+type ErrorCode_MutateError struct {
+	MutateError MutateErrorEnum_MutateError `protobuf:"varint,7,opt,name=mutate_error,json=mutateError,proto3,enum=google.ads.googleads.v0.errors.MutateErrorEnum_MutateError,oneof"`
+}
+
+type ErrorCode_FieldMaskError struct {
+	FieldMaskError FieldMaskErrorEnum_FieldMaskError `protobuf:"varint,8,opt,name=field_mask_error,json=fieldMaskError,proto3,enum=google.ads.googleads.v0.errors.FieldMaskErrorEnum_FieldMaskError,oneof"`
+}
+
+type ErrorCode_AuthorizationError struct {
+	AuthorizationError AuthorizationErrorEnum_AuthorizationError `protobuf:"varint,9,opt,name=authorization_error,json=authorizationError,proto3,enum=google.ads.googleads.v0.errors.AuthorizationErrorEnum_AuthorizationError,oneof"`
+}
+
+type ErrorCode_InternalError struct {
+	InternalError InternalErrorEnum_InternalError `protobuf:"varint,10,opt,name=internal_error,json=internalError,proto3,enum=google.ads.googleads.v0.errors.InternalErrorEnum_InternalError,oneof"`
+}
+
+type ErrorCode_QuotaError struct {
+	QuotaError QuotaErrorEnum_QuotaError `protobuf:"varint,11,opt,name=quota_error,json=quotaError,proto3,enum=google.ads.googleads.v0.errors.QuotaErrorEnum_QuotaError,oneof"`
+}
+
+type ErrorCode_AdError struct {
+	AdError AdErrorEnum_AdError `protobuf:"varint,12,opt,name=ad_error,json=adError,proto3,enum=google.ads.googleads.v0.errors.AdErrorEnum_AdError,oneof"`
+}
+
+type ErrorCode_AdGroupError struct {
+	AdGroupError AdGroupErrorEnum_AdGroupError `protobuf:"varint,13,opt,name=ad_group_error,json=adGroupError,proto3,enum=google.ads.googleads.v0.errors.AdGroupErrorEnum_AdGroupError,oneof"`
+}
+
+type ErrorCode_CampaignBudgetError struct {
+	CampaignBudgetError CampaignBudgetErrorEnum_CampaignBudgetError `protobuf:"varint,14,opt,name=campaign_budget_error,json=campaignBudgetError,proto3,enum=google.ads.googleads.v0.errors.CampaignBudgetErrorEnum_CampaignBudgetError,oneof"`
+}
+
+type ErrorCode_CampaignError struct {
+	CampaignError CampaignErrorEnum_CampaignError `protobuf:"varint,15,opt,name=campaign_error,json=campaignError,proto3,enum=google.ads.googleads.v0.errors.CampaignErrorEnum_CampaignError,oneof"`
+}
+
+type ErrorCode_AuthenticationError struct {
+	AuthenticationError AuthenticationErrorEnum_AuthenticationError `protobuf:"varint,17,opt,name=authentication_error,json=authenticationError,proto3,enum=google.ads.googleads.v0.errors.AuthenticationErrorEnum_AuthenticationError,oneof"`
+}
+
+type ErrorCode_AdGroupCriterionError struct {
+	AdGroupCriterionError AdGroupCriterionErrorEnum_AdGroupCriterionError `protobuf:"varint,18,opt,name=ad_group_criterion_error,json=adGroupCriterionError,proto3,enum=google.ads.googleads.v0.errors.AdGroupCriterionErrorEnum_AdGroupCriterionError,oneof"`
+}
+
+type ErrorCode_AdCustomizerError struct {
+	AdCustomizerError AdCustomizerErrorEnum_AdCustomizerError `protobuf:"varint,19,opt,name=ad_customizer_error,json=adCustomizerError,proto3,enum=google.ads.googleads.v0.errors.AdCustomizerErrorEnum_AdCustomizerError,oneof"`
+}
+
+type ErrorCode_AdGroupAdError struct {
+	AdGroupAdError AdGroupAdErrorEnum_AdGroupAdError `protobuf:"varint,21,opt,name=ad_group_ad_error,json=adGroupAdError,proto3,enum=google.ads.googleads.v0.errors.AdGroupAdErrorEnum_AdGroupAdError,oneof"`
+}
+
+type ErrorCode_AdSharingError struct {
+	AdSharingError AdSharingErrorEnum_AdSharingError `protobuf:"varint,24,opt,name=ad_sharing_error,json=adSharingError,proto3,enum=google.ads.googleads.v0.errors.AdSharingErrorEnum_AdSharingError,oneof"`
+}
+
+type ErrorCode_AdxError struct {
+	AdxError AdxErrorEnum_AdxError `protobuf:"varint,25,opt,name=adx_error,json=adxError,proto3,enum=google.ads.googleads.v0.errors.AdxErrorEnum_AdxError,oneof"`
+}
+
+type ErrorCode_BiddingError struct {
+	BiddingError BiddingErrorEnum_BiddingError `protobuf:"varint,26,opt,name=bidding_error,json=biddingError,proto3,enum=google.ads.googleads.v0.errors.BiddingErrorEnum_BiddingError,oneof"`
+}
+
+type ErrorCode_CampaignCriterionError struct {
+	CampaignCriterionError CampaignCriterionErrorEnum_CampaignCriterionError `protobuf:"varint,29,opt,name=campaign_criterion_error,json=campaignCriterionError,proto3,enum=google.ads.googleads.v0.errors.CampaignCriterionErrorEnum_CampaignCriterionError,oneof"`
+}
+
+type ErrorCode_CollectionSizeError struct {
+	CollectionSizeError CollectionSizeErrorEnum_CollectionSizeError `protobuf:"varint,31,opt,name=collection_size_error,json=collectionSizeError,proto3,enum=google.ads.googleads.v0.errors.CollectionSizeErrorEnum_CollectionSizeError,oneof"`
+}
+
+type ErrorCode_CriterionError struct {
+	CriterionError CriterionErrorEnum_CriterionError `protobuf:"varint,32,opt,name=criterion_error,json=criterionError,proto3,enum=google.ads.googleads.v0.errors.CriterionErrorEnum_CriterionError,oneof"`
+}
+
+type ErrorCode_CustomerError struct {
+	CustomerError CustomerErrorEnum_CustomerError `protobuf:"varint,90,opt,name=customer_error,json=customerError,proto3,enum=google.ads.googleads.v0.errors.CustomerErrorEnum_CustomerError,oneof"`
+}
+
+type ErrorCode_DateError struct {
+	DateError DateErrorEnum_DateError `protobuf:"varint,33,opt,name=date_error,json=dateError,proto3,enum=google.ads.googleads.v0.errors.DateErrorEnum_DateError,oneof"`
+}
+
+type ErrorCode_DateRangeError struct {
+	DateRangeError DateRangeErrorEnum_DateRangeError `protobuf:"varint,34,opt,name=date_range_error,json=dateRangeError,proto3,enum=google.ads.googleads.v0.errors.DateRangeErrorEnum_DateRangeError,oneof"`
+}
+
+type ErrorCode_DistinctError struct {
+	DistinctError DistinctErrorEnum_DistinctError `protobuf:"varint,35,opt,name=distinct_error,json=distinctError,proto3,enum=google.ads.googleads.v0.errors.DistinctErrorEnum_DistinctError,oneof"`
+}
+
+type ErrorCode_FeedAttributeReferenceError struct {
+	FeedAttributeReferenceError FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError `protobuf:"varint,36,opt,name=feed_attribute_reference_error,json=feedAttributeReferenceError,proto3,enum=google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError,oneof"`
+}
+
+type ErrorCode_FunctionError struct {
+	FunctionError FunctionErrorEnum_FunctionError `protobuf:"varint,37,opt,name=function_error,json=functionError,proto3,enum=google.ads.googleads.v0.errors.FunctionErrorEnum_FunctionError,oneof"`
+}
+
+type ErrorCode_FunctionParsingError struct {
+	FunctionParsingError FunctionParsingErrorEnum_FunctionParsingError `protobuf:"varint,38,opt,name=function_parsing_error,json=functionParsingError,proto3,enum=google.ads.googleads.v0.errors.FunctionParsingErrorEnum_FunctionParsingError,oneof"`
+}
+
+type ErrorCode_IdError struct {
+	IdError IdErrorEnum_IdError `protobuf:"varint,39,opt,name=id_error,json=idError,proto3,enum=google.ads.googleads.v0.errors.IdErrorEnum_IdError,oneof"`
+}
+
+type ErrorCode_ImageError struct {
+	ImageError ImageErrorEnum_ImageError `protobuf:"varint,40,opt,name=image_error,json=imageError,proto3,enum=google.ads.googleads.v0.errors.ImageErrorEnum_ImageError,oneof"`
+}
+
+type ErrorCode_MediaBundleError struct {
+	MediaBundleError MediaBundleErrorEnum_MediaBundleError `protobuf:"varint,42,opt,name=media_bundle_error,json=mediaBundleError,proto3,enum=google.ads.googleads.v0.errors.MediaBundleErrorEnum_MediaBundleError,oneof"`
+}
+
+type ErrorCode_MediaFileError struct {
+	MediaFileError MediaFileErrorEnum_MediaFileError `protobuf:"varint,86,opt,name=media_file_error,json=mediaFileError,proto3,enum=google.ads.googleads.v0.errors.MediaFileErrorEnum_MediaFileError,oneof"`
+}
+
+type ErrorCode_MultiplierError struct {
+	MultiplierError MultiplierErrorEnum_MultiplierError `protobuf:"varint,44,opt,name=multiplier_error,json=multiplierError,proto3,enum=google.ads.googleads.v0.errors.MultiplierErrorEnum_MultiplierError,oneof"`
+}
+
+type ErrorCode_NewResourceCreationError struct {
+	NewResourceCreationError NewResourceCreationErrorEnum_NewResourceCreationError `protobuf:"varint,45,opt,name=new_resource_creation_error,json=newResourceCreationError,proto3,enum=google.ads.googleads.v0.errors.NewResourceCreationErrorEnum_NewResourceCreationError,oneof"`
+}
+
+type ErrorCode_NotEmptyError struct {
+	NotEmptyError NotEmptyErrorEnum_NotEmptyError `protobuf:"varint,46,opt,name=not_empty_error,json=notEmptyError,proto3,enum=google.ads.googleads.v0.errors.NotEmptyErrorEnum_NotEmptyError,oneof"`
+}
+
+type ErrorCode_NullError struct {
+	NullError NullErrorEnum_NullError `protobuf:"varint,47,opt,name=null_error,json=nullError,proto3,enum=google.ads.googleads.v0.errors.NullErrorEnum_NullError,oneof"`
+}
+
+type ErrorCode_OperatorError struct {
+	OperatorError OperatorErrorEnum_OperatorError `protobuf:"varint,48,opt,name=operator_error,json=operatorError,proto3,enum=google.ads.googleads.v0.errors.OperatorErrorEnum_OperatorError,oneof"`
+}
+
+type ErrorCode_RangeError struct {
+	RangeError RangeErrorEnum_RangeError `protobuf:"varint,49,opt,name=range_error,json=rangeError,proto3,enum=google.ads.googleads.v0.errors.RangeErrorEnum_RangeError,oneof"`
+}
+
+type ErrorCode_RecommendationError struct {
+	RecommendationError RecommendationErrorEnum_RecommendationError `protobuf:"varint,58,opt,name=recommendation_error,json=recommendationError,proto3,enum=google.ads.googleads.v0.errors.RecommendationErrorEnum_RecommendationError,oneof"`
+}
+
+type ErrorCode_RegionCodeError struct {
+	RegionCodeError RegionCodeErrorEnum_RegionCodeError `protobuf:"varint,51,opt,name=region_code_error,json=regionCodeError,proto3,enum=google.ads.googleads.v0.errors.RegionCodeErrorEnum_RegionCodeError,oneof"`
+}
+
+type ErrorCode_SettingError struct {
+	SettingError SettingErrorEnum_SettingError `protobuf:"varint,52,opt,name=setting_error,json=settingError,proto3,enum=google.ads.googleads.v0.errors.SettingErrorEnum_SettingError,oneof"`
+}
+
+type ErrorCode_StringFormatError struct {
+	StringFormatError StringFormatErrorEnum_StringFormatError `protobuf:"varint,53,opt,name=string_format_error,json=stringFormatError,proto3,enum=google.ads.googleads.v0.errors.StringFormatErrorEnum_StringFormatError,oneof"`
+}
+
+type ErrorCode_StringLengthError struct {
+	StringLengthError StringLengthErrorEnum_StringLengthError `protobuf:"varint,54,opt,name=string_length_error,json=stringLengthError,proto3,enum=google.ads.googleads.v0.errors.StringLengthErrorEnum_StringLengthError,oneof"`
+}
+
+type ErrorCode_OperationAccessDeniedError struct {
+	OperationAccessDeniedError OperationAccessDeniedErrorEnum_OperationAccessDeniedError `protobuf:"varint,55,opt,name=operation_access_denied_error,json=operationAccessDeniedError,proto3,enum=google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum_OperationAccessDeniedError,oneof"`
+}
+
+type ErrorCode_ResourceAccessDeniedError struct {
+	ResourceAccessDeniedError ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError `protobuf:"varint,56,opt,name=resource_access_denied_error,json=resourceAccessDeniedError,proto3,enum=google.ads.googleads.v0.errors.ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError,oneof"`
+}
+
+type ErrorCode_ResourceCountLimitExceededError struct {
+	ResourceCountLimitExceededError ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError `protobuf:"varint,57,opt,name=resource_count_limit_exceeded_error,json=resourceCountLimitExceededError,proto3,enum=google.ads.googleads.v0.errors.ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError,oneof"`
+}
+
+type ErrorCode_AdGroupBidModifierError struct {
+	AdGroupBidModifierError AdGroupBidModifierErrorEnum_AdGroupBidModifierError `protobuf:"varint,59,opt,name=ad_group_bid_modifier_error,json=adGroupBidModifierError,proto3,enum=google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum_AdGroupBidModifierError,oneof"`
+}
+
+type ErrorCode_ContextError struct {
+	ContextError ContextErrorEnum_ContextError `protobuf:"varint,60,opt,name=context_error,json=contextError,proto3,enum=google.ads.googleads.v0.errors.ContextErrorEnum_ContextError,oneof"`
+}
+
+type ErrorCode_FieldError struct {
+	FieldError FieldErrorEnum_FieldError `protobuf:"varint,61,opt,name=field_error,json=fieldError,proto3,enum=google.ads.googleads.v0.errors.FieldErrorEnum_FieldError,oneof"`
+}
+
+type ErrorCode_SharedSetError struct {
+	SharedSetError SharedSetErrorEnum_SharedSetError `protobuf:"varint,62,opt,name=shared_set_error,json=sharedSetError,proto3,enum=google.ads.googleads.v0.errors.SharedSetErrorEnum_SharedSetError,oneof"`
+}
+
+type ErrorCode_SharedCriterionError struct {
+	SharedCriterionError SharedCriterionErrorEnum_SharedCriterionError `protobuf:"varint,63,opt,name=shared_criterion_error,json=sharedCriterionError,proto3,enum=google.ads.googleads.v0.errors.SharedCriterionErrorEnum_SharedCriterionError,oneof"`
+}
+
+type ErrorCode_CampaignSharedSetError struct {
+	CampaignSharedSetError CampaignSharedSetErrorEnum_CampaignSharedSetError `protobuf:"varint,64,opt,name=campaign_shared_set_error,json=campaignSharedSetError,proto3,enum=google.ads.googleads.v0.errors.CampaignSharedSetErrorEnum_CampaignSharedSetError,oneof"`
+}
+
+type ErrorCode_ConversionActionError struct {
+	ConversionActionError ConversionActionErrorEnum_ConversionActionError `protobuf:"varint,65,opt,name=conversion_action_error,json=conversionActionError,proto3,enum=google.ads.googleads.v0.errors.ConversionActionErrorEnum_ConversionActionError,oneof"`
+}
+
+type ErrorCode_HeaderError struct {
+	HeaderError HeaderErrorEnum_HeaderError `protobuf:"varint,66,opt,name=header_error,json=headerError,proto3,enum=google.ads.googleads.v0.errors.HeaderErrorEnum_HeaderError,oneof"`
+}
+
+type ErrorCode_DatabaseError struct {
+	DatabaseError DatabaseErrorEnum_DatabaseError `protobuf:"varint,67,opt,name=database_error,json=databaseError,proto3,enum=google.ads.googleads.v0.errors.DatabaseErrorEnum_DatabaseError,oneof"`
+}
+
+type ErrorCode_PolicyFindingError struct {
+	PolicyFindingError PolicyFindingErrorEnum_PolicyFindingError `protobuf:"varint,68,opt,name=policy_finding_error,json=policyFindingError,proto3,enum=google.ads.googleads.v0.errors.PolicyFindingErrorEnum_PolicyFindingError,oneof"`
+}
+
+type ErrorCode_CampaignGroupError struct {
+	CampaignGroupError CampaignGroupErrorEnum_CampaignGroupError `protobuf:"varint,69,opt,name=campaign_group_error,json=campaignGroupError,proto3,enum=google.ads.googleads.v0.errors.CampaignGroupErrorEnum_CampaignGroupError,oneof"`
+}
+
+type ErrorCode_EnumError struct {
+	EnumError EnumErrorEnum_EnumError `protobuf:"varint,70,opt,name=enum_error,json=enumError,proto3,enum=google.ads.googleads.v0.errors.EnumErrorEnum_EnumError,oneof"`
+}
+
+type ErrorCode_KeywordPlanError struct {
+	KeywordPlanError KeywordPlanErrorEnum_KeywordPlanError `protobuf:"varint,71,opt,name=keyword_plan_error,json=keywordPlanError,proto3,enum=google.ads.googleads.v0.errors.KeywordPlanErrorEnum_KeywordPlanError,oneof"`
+}
+
+type ErrorCode_KeywordPlanCampaignError struct {
+	KeywordPlanCampaignError KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError `protobuf:"varint,72,opt,name=keyword_plan_campaign_error,json=keywordPlanCampaignError,proto3,enum=google.ads.googleads.v0.errors.KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError,oneof"`
+}
+
+type ErrorCode_KeywordPlanNegativeKeywordError struct {
+	KeywordPlanNegativeKeywordError KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError `protobuf:"varint,73,opt,name=keyword_plan_negative_keyword_error,json=keywordPlanNegativeKeywordError,proto3,enum=google.ads.googleads.v0.errors.KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError,oneof"`
+}
+
+type ErrorCode_KeywordPlanAdGroupError struct {
+	KeywordPlanAdGroupError KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError `protobuf:"varint,74,opt,name=keyword_plan_ad_group_error,json=keywordPlanAdGroupError,proto3,enum=google.ads.googleads.v0.errors.KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError,oneof"`
+}
+
+type ErrorCode_KeywordPlanKeywordError struct {
+	KeywordPlanKeywordError KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError `protobuf:"varint,75,opt,name=keyword_plan_keyword_error,json=keywordPlanKeywordError,proto3,enum=google.ads.googleads.v0.errors.KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError,oneof"`
+}
+
+type ErrorCode_KeywordPlanIdeaError struct {
+	KeywordPlanIdeaError KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError `protobuf:"varint,76,opt,name=keyword_plan_idea_error,json=keywordPlanIdeaError,proto3,enum=google.ads.googleads.v0.errors.KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError,oneof"`
+}
+
+type ErrorCode_AccountBudgetProposalError struct {
+	AccountBudgetProposalError AccountBudgetProposalErrorEnum_AccountBudgetProposalError `protobuf:"varint,77,opt,name=account_budget_proposal_error,json=accountBudgetProposalError,proto3,enum=google.ads.googleads.v0.errors.AccountBudgetProposalErrorEnum_AccountBudgetProposalError,oneof"`
+}
+
+type ErrorCode_UserListError struct {
+	UserListError UserListErrorEnum_UserListError `protobuf:"varint,78,opt,name=user_list_error,json=userListError,proto3,enum=google.ads.googleads.v0.errors.UserListErrorEnum_UserListError,oneof"`
+}
+
+type ErrorCode_ChangeStatusError struct {
+	ChangeStatusError ChangeStatusErrorEnum_ChangeStatusError `protobuf:"varint,79,opt,name=change_status_error,json=changeStatusError,proto3,enum=google.ads.googleads.v0.errors.ChangeStatusErrorEnum_ChangeStatusError,oneof"`
+}
+
+type ErrorCode_FeedError struct {
+	FeedError FeedErrorEnum_FeedError `protobuf:"varint,80,opt,name=feed_error,json=feedError,proto3,enum=google.ads.googleads.v0.errors.FeedErrorEnum_FeedError,oneof"`
+}
+
+type ErrorCode_GeoTargetConstantSuggestionError struct {
+	GeoTargetConstantSuggestionError GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError `protobuf:"varint,81,opt,name=geo_target_constant_suggestion_error,json=geoTargetConstantSuggestionError,proto3,enum=google.ads.googleads.v0.errors.GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError,oneof"`
+}
+
+type ErrorCode_FeedItemError struct {
+	FeedItemError FeedItemErrorEnum_FeedItemError `protobuf:"varint,83,opt,name=feed_item_error,json=feedItemError,proto3,enum=google.ads.googleads.v0.errors.FeedItemErrorEnum_FeedItemError,oneof"`
+}
+
+type ErrorCode_BillingSetupError struct {
+	BillingSetupError BillingSetupErrorEnum_BillingSetupError `protobuf:"varint,87,opt,name=billing_setup_error,json=billingSetupError,proto3,enum=google.ads.googleads.v0.errors.BillingSetupErrorEnum_BillingSetupError,oneof"`
+}
+
+type ErrorCode_CustomerClientLinkError struct {
+	CustomerClientLinkError CustomerClientLinkErrorEnum_CustomerClientLinkError `protobuf:"varint,88,opt,name=customer_client_link_error,json=customerClientLinkError,proto3,enum=google.ads.googleads.v0.errors.CustomerClientLinkErrorEnum_CustomerClientLinkError,oneof"`
+}
+
+type ErrorCode_CustomerManagerLinkError struct {
+	CustomerManagerLinkError CustomerManagerLinkErrorEnum_CustomerManagerLinkError `protobuf:"varint,91,opt,name=customer_manager_link_error,json=customerManagerLinkError,proto3,enum=google.ads.googleads.v0.errors.CustomerManagerLinkErrorEnum_CustomerManagerLinkError,oneof"`
+}
+
+type ErrorCode_FeedMappingError struct {
+	FeedMappingError FeedMappingErrorEnum_FeedMappingError `protobuf:"varint,92,opt,name=feed_mapping_error,json=feedMappingError,proto3,enum=google.ads.googleads.v0.errors.FeedMappingErrorEnum_FeedMappingError,oneof"`
+}
+
+type ErrorCode_CustomerFeedError struct {
+	CustomerFeedError CustomerFeedErrorEnum_CustomerFeedError `protobuf:"varint,93,opt,name=customer_feed_error,json=customerFeedError,proto3,enum=google.ads.googleads.v0.errors.CustomerFeedErrorEnum_CustomerFeedError,oneof"`
+}
+
+type ErrorCode_AdGroupFeedError struct {
+	AdGroupFeedError AdGroupFeedErrorEnum_AdGroupFeedError `protobuf:"varint,94,opt,name=ad_group_feed_error,json=adGroupFeedError,proto3,enum=google.ads.googleads.v0.errors.AdGroupFeedErrorEnum_AdGroupFeedError,oneof"`
+}
+
+type ErrorCode_CampaignFeedError struct {
+	CampaignFeedError CampaignFeedErrorEnum_CampaignFeedError `protobuf:"varint,96,opt,name=campaign_feed_error,json=campaignFeedError,proto3,enum=google.ads.googleads.v0.errors.CampaignFeedErrorEnum_CampaignFeedError,oneof"`
+}
+
+func (*ErrorCode_RequestError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_BiddingStrategyError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_UrlFieldError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ListOperationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_QueryError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MutateError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FieldMaskError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AuthorizationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_InternalError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_QuotaError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignBudgetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AuthenticationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupCriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdCustomizerError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupAdError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdSharingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdxError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_BiddingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignCriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CollectionSizeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DateError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DateRangeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DistinctError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedAttributeReferenceError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FunctionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FunctionParsingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_IdError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ImageError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MediaBundleError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MediaFileError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_MultiplierError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_NewResourceCreationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_NotEmptyError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_NullError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_OperatorError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_RangeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_RecommendationError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_RegionCodeError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_SettingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_StringFormatError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_StringLengthError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_OperationAccessDeniedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ResourceAccessDeniedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ResourceCountLimitExceededError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupBidModifierError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ContextError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FieldError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_SharedSetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_SharedCriterionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignSharedSetError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ConversionActionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_HeaderError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_DatabaseError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_PolicyFindingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignGroupError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_EnumError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanCampaignError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanNegativeKeywordError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanAdGroupError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanKeywordError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_KeywordPlanIdeaError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AccountBudgetProposalError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_UserListError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_ChangeStatusError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_GeoTargetConstantSuggestionError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedItemError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_BillingSetupError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerClientLinkError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerManagerLinkError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_FeedMappingError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CustomerFeedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_AdGroupFeedError) isErrorCode_ErrorCode() {}
+
+func (*ErrorCode_CampaignFeedError) isErrorCode_ErrorCode() {}
+
+func (m *ErrorCode) GetErrorCode() isErrorCode_ErrorCode {
+	if m != nil {
+		return m.ErrorCode
+	}
+	return nil
+}
+
+func (m *ErrorCode) GetRequestError() RequestErrorEnum_RequestError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RequestError); ok {
+		return x.RequestError
+	}
+	return RequestErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetBiddingStrategyError() BiddingStrategyErrorEnum_BiddingStrategyError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_BiddingStrategyError); ok {
+		return x.BiddingStrategyError
+	}
+	return BiddingStrategyErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetUrlFieldError() UrlFieldErrorEnum_UrlFieldError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_UrlFieldError); ok {
+		return x.UrlFieldError
+	}
+	return UrlFieldErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetListOperationError() ListOperationErrorEnum_ListOperationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ListOperationError); ok {
+		return x.ListOperationError
+	}
+	return ListOperationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetQueryError() QueryErrorEnum_QueryError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_QueryError); ok {
+		return x.QueryError
+	}
+	return QueryErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMutateError() MutateErrorEnum_MutateError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MutateError); ok {
+		return x.MutateError
+	}
+	return MutateErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFieldMaskError() FieldMaskErrorEnum_FieldMaskError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FieldMaskError); ok {
+		return x.FieldMaskError
+	}
+	return FieldMaskErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAuthorizationError() AuthorizationErrorEnum_AuthorizationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AuthorizationError); ok {
+		return x.AuthorizationError
+	}
+	return AuthorizationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetInternalError() InternalErrorEnum_InternalError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_InternalError); ok {
+		return x.InternalError
+	}
+	return InternalErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetQuotaError() QuotaErrorEnum_QuotaError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_QuotaError); ok {
+		return x.QuotaError
+	}
+	return QuotaErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdError() AdErrorEnum_AdError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdError); ok {
+		return x.AdError
+	}
+	return AdErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupError() AdGroupErrorEnum_AdGroupError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupError); ok {
+		return x.AdGroupError
+	}
+	return AdGroupErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignBudgetError() CampaignBudgetErrorEnum_CampaignBudgetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignBudgetError); ok {
+		return x.CampaignBudgetError
+	}
+	return CampaignBudgetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignError() CampaignErrorEnum_CampaignError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignError); ok {
+		return x.CampaignError
+	}
+	return CampaignErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAuthenticationError() AuthenticationErrorEnum_AuthenticationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AuthenticationError); ok {
+		return x.AuthenticationError
+	}
+	return AuthenticationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupCriterionError() AdGroupCriterionErrorEnum_AdGroupCriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupCriterionError); ok {
+		return x.AdGroupCriterionError
+	}
+	return AdGroupCriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdCustomizerError() AdCustomizerErrorEnum_AdCustomizerError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdCustomizerError); ok {
+		return x.AdCustomizerError
+	}
+	return AdCustomizerErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupAdError() AdGroupAdErrorEnum_AdGroupAdError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupAdError); ok {
+		return x.AdGroupAdError
+	}
+	return AdGroupAdErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdSharingError() AdSharingErrorEnum_AdSharingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdSharingError); ok {
+		return x.AdSharingError
+	}
+	return AdSharingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdxError() AdxErrorEnum_AdxError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdxError); ok {
+		return x.AdxError
+	}
+	return AdxErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetBiddingError() BiddingErrorEnum_BiddingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_BiddingError); ok {
+		return x.BiddingError
+	}
+	return BiddingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignCriterionError() CampaignCriterionErrorEnum_CampaignCriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignCriterionError); ok {
+		return x.CampaignCriterionError
+	}
+	return CampaignCriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCollectionSizeError() CollectionSizeErrorEnum_CollectionSizeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CollectionSizeError); ok {
+		return x.CollectionSizeError
+	}
+	return CollectionSizeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCriterionError() CriterionErrorEnum_CriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CriterionError); ok {
+		return x.CriterionError
+	}
+	return CriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerError() CustomerErrorEnum_CustomerError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerError); ok {
+		return x.CustomerError
+	}
+	return CustomerErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDateError() DateErrorEnum_DateError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DateError); ok {
+		return x.DateError
+	}
+	return DateErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDateRangeError() DateRangeErrorEnum_DateRangeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DateRangeError); ok {
+		return x.DateRangeError
+	}
+	return DateRangeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDistinctError() DistinctErrorEnum_DistinctError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DistinctError); ok {
+		return x.DistinctError
+	}
+	return DistinctErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedAttributeReferenceError() FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedAttributeReferenceError); ok {
+		return x.FeedAttributeReferenceError
+	}
+	return FeedAttributeReferenceErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFunctionError() FunctionErrorEnum_FunctionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FunctionError); ok {
+		return x.FunctionError
+	}
+	return FunctionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFunctionParsingError() FunctionParsingErrorEnum_FunctionParsingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FunctionParsingError); ok {
+		return x.FunctionParsingError
+	}
+	return FunctionParsingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetIdError() IdErrorEnum_IdError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_IdError); ok {
+		return x.IdError
+	}
+	return IdErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetImageError() ImageErrorEnum_ImageError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ImageError); ok {
+		return x.ImageError
+	}
+	return ImageErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMediaBundleError() MediaBundleErrorEnum_MediaBundleError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MediaBundleError); ok {
+		return x.MediaBundleError
+	}
+	return MediaBundleErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMediaFileError() MediaFileErrorEnum_MediaFileError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MediaFileError); ok {
+		return x.MediaFileError
+	}
+	return MediaFileErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetMultiplierError() MultiplierErrorEnum_MultiplierError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_MultiplierError); ok {
+		return x.MultiplierError
+	}
+	return MultiplierErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetNewResourceCreationError() NewResourceCreationErrorEnum_NewResourceCreationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_NewResourceCreationError); ok {
+		return x.NewResourceCreationError
+	}
+	return NewResourceCreationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetNotEmptyError() NotEmptyErrorEnum_NotEmptyError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_NotEmptyError); ok {
+		return x.NotEmptyError
+	}
+	return NotEmptyErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetNullError() NullErrorEnum_NullError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_NullError); ok {
+		return x.NullError
+	}
+	return NullErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetOperatorError() OperatorErrorEnum_OperatorError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_OperatorError); ok {
+		return x.OperatorError
+	}
+	return OperatorErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetRangeError() RangeErrorEnum_RangeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RangeError); ok {
+		return x.RangeError
+	}
+	return RangeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetRecommendationError() RecommendationErrorEnum_RecommendationError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RecommendationError); ok {
+		return x.RecommendationError
+	}
+	return RecommendationErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetRegionCodeError() RegionCodeErrorEnum_RegionCodeError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_RegionCodeError); ok {
+		return x.RegionCodeError
+	}
+	return RegionCodeErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetSettingError() SettingErrorEnum_SettingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_SettingError); ok {
+		return x.SettingError
+	}
+	return SettingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetStringFormatError() StringFormatErrorEnum_StringFormatError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_StringFormatError); ok {
+		return x.StringFormatError
+	}
+	return StringFormatErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetStringLengthError() StringLengthErrorEnum_StringLengthError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_StringLengthError); ok {
+		return x.StringLengthError
+	}
+	return StringLengthErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetOperationAccessDeniedError() OperationAccessDeniedErrorEnum_OperationAccessDeniedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_OperationAccessDeniedError); ok {
+		return x.OperationAccessDeniedError
+	}
+	return OperationAccessDeniedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetResourceAccessDeniedError() ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ResourceAccessDeniedError); ok {
+		return x.ResourceAccessDeniedError
+	}
+	return ResourceAccessDeniedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetResourceCountLimitExceededError() ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ResourceCountLimitExceededError); ok {
+		return x.ResourceCountLimitExceededError
+	}
+	return ResourceCountLimitExceededErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupBidModifierError() AdGroupBidModifierErrorEnum_AdGroupBidModifierError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupBidModifierError); ok {
+		return x.AdGroupBidModifierError
+	}
+	return AdGroupBidModifierErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetContextError() ContextErrorEnum_ContextError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ContextError); ok {
+		return x.ContextError
+	}
+	return ContextErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFieldError() FieldErrorEnum_FieldError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FieldError); ok {
+		return x.FieldError
+	}
+	return FieldErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetSharedSetError() SharedSetErrorEnum_SharedSetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_SharedSetError); ok {
+		return x.SharedSetError
+	}
+	return SharedSetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetSharedCriterionError() SharedCriterionErrorEnum_SharedCriterionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_SharedCriterionError); ok {
+		return x.SharedCriterionError
+	}
+	return SharedCriterionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignSharedSetError() CampaignSharedSetErrorEnum_CampaignSharedSetError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignSharedSetError); ok {
+		return x.CampaignSharedSetError
+	}
+	return CampaignSharedSetErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetConversionActionError() ConversionActionErrorEnum_ConversionActionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ConversionActionError); ok {
+		return x.ConversionActionError
+	}
+	return ConversionActionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetHeaderError() HeaderErrorEnum_HeaderError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_HeaderError); ok {
+		return x.HeaderError
+	}
+	return HeaderErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetDatabaseError() DatabaseErrorEnum_DatabaseError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_DatabaseError); ok {
+		return x.DatabaseError
+	}
+	return DatabaseErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetPolicyFindingError() PolicyFindingErrorEnum_PolicyFindingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_PolicyFindingError); ok {
+		return x.PolicyFindingError
+	}
+	return PolicyFindingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignGroupError() CampaignGroupErrorEnum_CampaignGroupError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignGroupError); ok {
+		return x.CampaignGroupError
+	}
+	return CampaignGroupErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetEnumError() EnumErrorEnum_EnumError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_EnumError); ok {
+		return x.EnumError
+	}
+	return EnumErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanError() KeywordPlanErrorEnum_KeywordPlanError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanError); ok {
+		return x.KeywordPlanError
+	}
+	return KeywordPlanErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanCampaignError() KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanCampaignError); ok {
+		return x.KeywordPlanCampaignError
+	}
+	return KeywordPlanCampaignErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanNegativeKeywordError() KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanNegativeKeywordError); ok {
+		return x.KeywordPlanNegativeKeywordError
+	}
+	return KeywordPlanNegativeKeywordErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanAdGroupError() KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanAdGroupError); ok {
+		return x.KeywordPlanAdGroupError
+	}
+	return KeywordPlanAdGroupErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanKeywordError() KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanKeywordError); ok {
+		return x.KeywordPlanKeywordError
+	}
+	return KeywordPlanKeywordErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetKeywordPlanIdeaError() KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_KeywordPlanIdeaError); ok {
+		return x.KeywordPlanIdeaError
+	}
+	return KeywordPlanIdeaErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAccountBudgetProposalError() AccountBudgetProposalErrorEnum_AccountBudgetProposalError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AccountBudgetProposalError); ok {
+		return x.AccountBudgetProposalError
+	}
+	return AccountBudgetProposalErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetUserListError() UserListErrorEnum_UserListError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_UserListError); ok {
+		return x.UserListError
+	}
+	return UserListErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetChangeStatusError() ChangeStatusErrorEnum_ChangeStatusError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_ChangeStatusError); ok {
+		return x.ChangeStatusError
+	}
+	return ChangeStatusErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedError() FeedErrorEnum_FeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedError); ok {
+		return x.FeedError
+	}
+	return FeedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetGeoTargetConstantSuggestionError() GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_GeoTargetConstantSuggestionError); ok {
+		return x.GeoTargetConstantSuggestionError
+	}
+	return GeoTargetConstantSuggestionErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedItemError() FeedItemErrorEnum_FeedItemError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedItemError); ok {
+		return x.FeedItemError
+	}
+	return FeedItemErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetBillingSetupError() BillingSetupErrorEnum_BillingSetupError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_BillingSetupError); ok {
+		return x.BillingSetupError
+	}
+	return BillingSetupErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerClientLinkError() CustomerClientLinkErrorEnum_CustomerClientLinkError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerClientLinkError); ok {
+		return x.CustomerClientLinkError
+	}
+	return CustomerClientLinkErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerManagerLinkError() CustomerManagerLinkErrorEnum_CustomerManagerLinkError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerManagerLinkError); ok {
+		return x.CustomerManagerLinkError
+	}
+	return CustomerManagerLinkErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetFeedMappingError() FeedMappingErrorEnum_FeedMappingError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_FeedMappingError); ok {
+		return x.FeedMappingError
+	}
+	return FeedMappingErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCustomerFeedError() CustomerFeedErrorEnum_CustomerFeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CustomerFeedError); ok {
+		return x.CustomerFeedError
+	}
+	return CustomerFeedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetAdGroupFeedError() AdGroupFeedErrorEnum_AdGroupFeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_AdGroupFeedError); ok {
+		return x.AdGroupFeedError
+	}
+	return AdGroupFeedErrorEnum_UNSPECIFIED
+}
+
+func (m *ErrorCode) GetCampaignFeedError() CampaignFeedErrorEnum_CampaignFeedError {
+	if x, ok := m.GetErrorCode().(*ErrorCode_CampaignFeedError); ok {
+		return x.CampaignFeedError
+	}
+	return CampaignFeedErrorEnum_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ErrorCode) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ErrorCode_OneofMarshaler, _ErrorCode_OneofUnmarshaler, _ErrorCode_OneofSizer, []interface{}{
+		(*ErrorCode_RequestError)(nil),
+		(*ErrorCode_BiddingStrategyError)(nil),
+		(*ErrorCode_UrlFieldError)(nil),
+		(*ErrorCode_ListOperationError)(nil),
+		(*ErrorCode_QueryError)(nil),
+		(*ErrorCode_MutateError)(nil),
+		(*ErrorCode_FieldMaskError)(nil),
+		(*ErrorCode_AuthorizationError)(nil),
+		(*ErrorCode_InternalError)(nil),
+		(*ErrorCode_QuotaError)(nil),
+		(*ErrorCode_AdError)(nil),
+		(*ErrorCode_AdGroupError)(nil),
+		(*ErrorCode_CampaignBudgetError)(nil),
+		(*ErrorCode_CampaignError)(nil),
+		(*ErrorCode_AuthenticationError)(nil),
+		(*ErrorCode_AdGroupCriterionError)(nil),
+		(*ErrorCode_AdCustomizerError)(nil),
+		(*ErrorCode_AdGroupAdError)(nil),
+		(*ErrorCode_AdSharingError)(nil),
+		(*ErrorCode_AdxError)(nil),
+		(*ErrorCode_BiddingError)(nil),
+		(*ErrorCode_CampaignCriterionError)(nil),
+		(*ErrorCode_CollectionSizeError)(nil),
+		(*ErrorCode_CriterionError)(nil),
+		(*ErrorCode_CustomerError)(nil),
+		(*ErrorCode_DateError)(nil),
+		(*ErrorCode_DateRangeError)(nil),
+		(*ErrorCode_DistinctError)(nil),
+		(*ErrorCode_FeedAttributeReferenceError)(nil),
+		(*ErrorCode_FunctionError)(nil),
+		(*ErrorCode_FunctionParsingError)(nil),
+		(*ErrorCode_IdError)(nil),
+		(*ErrorCode_ImageError)(nil),
+		(*ErrorCode_MediaBundleError)(nil),
+		(*ErrorCode_MediaFileError)(nil),
+		(*ErrorCode_MultiplierError)(nil),
+		(*ErrorCode_NewResourceCreationError)(nil),
+		(*ErrorCode_NotEmptyError)(nil),
+		(*ErrorCode_NullError)(nil),
+		(*ErrorCode_OperatorError)(nil),
+		(*ErrorCode_RangeError)(nil),
+		(*ErrorCode_RecommendationError)(nil),
+		(*ErrorCode_RegionCodeError)(nil),
+		(*ErrorCode_SettingError)(nil),
+		(*ErrorCode_StringFormatError)(nil),
+		(*ErrorCode_StringLengthError)(nil),
+		(*ErrorCode_OperationAccessDeniedError)(nil),
+		(*ErrorCode_ResourceAccessDeniedError)(nil),
+		(*ErrorCode_ResourceCountLimitExceededError)(nil),
+		(*ErrorCode_AdGroupBidModifierError)(nil),
+		(*ErrorCode_ContextError)(nil),
+		(*ErrorCode_FieldError)(nil),
+		(*ErrorCode_SharedSetError)(nil),
+		(*ErrorCode_SharedCriterionError)(nil),
+		(*ErrorCode_CampaignSharedSetError)(nil),
+		(*ErrorCode_ConversionActionError)(nil),
+		(*ErrorCode_HeaderError)(nil),
+		(*ErrorCode_DatabaseError)(nil),
+		(*ErrorCode_PolicyFindingError)(nil),
+		(*ErrorCode_CampaignGroupError)(nil),
+		(*ErrorCode_EnumError)(nil),
+		(*ErrorCode_KeywordPlanError)(nil),
+		(*ErrorCode_KeywordPlanCampaignError)(nil),
+		(*ErrorCode_KeywordPlanNegativeKeywordError)(nil),
+		(*ErrorCode_KeywordPlanAdGroupError)(nil),
+		(*ErrorCode_KeywordPlanKeywordError)(nil),
+		(*ErrorCode_KeywordPlanIdeaError)(nil),
+		(*ErrorCode_AccountBudgetProposalError)(nil),
+		(*ErrorCode_UserListError)(nil),
+		(*ErrorCode_ChangeStatusError)(nil),
+		(*ErrorCode_FeedError)(nil),
+		(*ErrorCode_GeoTargetConstantSuggestionError)(nil),
+		(*ErrorCode_FeedItemError)(nil),
+		(*ErrorCode_BillingSetupError)(nil),
+		(*ErrorCode_CustomerClientLinkError)(nil),
+		(*ErrorCode_CustomerManagerLinkError)(nil),
+		(*ErrorCode_FeedMappingError)(nil),
+		(*ErrorCode_CustomerFeedError)(nil),
+		(*ErrorCode_AdGroupFeedError)(nil),
+		(*ErrorCode_CampaignFeedError)(nil),
+	}
+}
+
+func _ErrorCode_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ErrorCode)
+	// error_code
+	switch x := m.ErrorCode.(type) {
+	case *ErrorCode_RequestError:
+		b.EncodeVarint(1<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.RequestError))
+	case *ErrorCode_BiddingStrategyError:
+		b.EncodeVarint(2<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.BiddingStrategyError))
+	case *ErrorCode_UrlFieldError:
+		b.EncodeVarint(3<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.UrlFieldError))
+	case *ErrorCode_ListOperationError:
+		b.EncodeVarint(4<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ListOperationError))
+	case *ErrorCode_QueryError:
+		b.EncodeVarint(5<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.QueryError))
+	case *ErrorCode_MutateError:
+		b.EncodeVarint(7<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MutateError))
+	case *ErrorCode_FieldMaskError:
+		b.EncodeVarint(8<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FieldMaskError))
+	case *ErrorCode_AuthorizationError:
+		b.EncodeVarint(9<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AuthorizationError))
+	case *ErrorCode_InternalError:
+		b.EncodeVarint(10<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.InternalError))
+	case *ErrorCode_QuotaError:
+		b.EncodeVarint(11<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.QuotaError))
+	case *ErrorCode_AdError:
+		b.EncodeVarint(12<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdError))
+	case *ErrorCode_AdGroupError:
+		b.EncodeVarint(13<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdGroupError))
+	case *ErrorCode_CampaignBudgetError:
+		b.EncodeVarint(14<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CampaignBudgetError))
+	case *ErrorCode_CampaignError:
+		b.EncodeVarint(15<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CampaignError))
+	case *ErrorCode_AuthenticationError:
+		b.EncodeVarint(17<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AuthenticationError))
+	case *ErrorCode_AdGroupCriterionError:
+		b.EncodeVarint(18<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdGroupCriterionError))
+	case *ErrorCode_AdCustomizerError:
+		b.EncodeVarint(19<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdCustomizerError))
+	case *ErrorCode_AdGroupAdError:
+		b.EncodeVarint(21<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdGroupAdError))
+	case *ErrorCode_AdSharingError:
+		b.EncodeVarint(24<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdSharingError))
+	case *ErrorCode_AdxError:
+		b.EncodeVarint(25<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdxError))
+	case *ErrorCode_BiddingError:
+		b.EncodeVarint(26<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.BiddingError))
+	case *ErrorCode_CampaignCriterionError:
+		b.EncodeVarint(29<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CampaignCriterionError))
+	case *ErrorCode_CollectionSizeError:
+		b.EncodeVarint(31<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CollectionSizeError))
+	case *ErrorCode_CriterionError:
+		b.EncodeVarint(32<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CriterionError))
+	case *ErrorCode_CustomerError:
+		b.EncodeVarint(90<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CustomerError))
+	case *ErrorCode_DateError:
+		b.EncodeVarint(33<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.DateError))
+	case *ErrorCode_DateRangeError:
+		b.EncodeVarint(34<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.DateRangeError))
+	case *ErrorCode_DistinctError:
+		b.EncodeVarint(35<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.DistinctError))
+	case *ErrorCode_FeedAttributeReferenceError:
+		b.EncodeVarint(36<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FeedAttributeReferenceError))
+	case *ErrorCode_FunctionError:
+		b.EncodeVarint(37<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FunctionError))
+	case *ErrorCode_FunctionParsingError:
+		b.EncodeVarint(38<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FunctionParsingError))
+	case *ErrorCode_IdError:
+		b.EncodeVarint(39<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.IdError))
+	case *ErrorCode_ImageError:
+		b.EncodeVarint(40<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ImageError))
+	case *ErrorCode_MediaBundleError:
+		b.EncodeVarint(42<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MediaBundleError))
+	case *ErrorCode_MediaFileError:
+		b.EncodeVarint(86<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MediaFileError))
+	case *ErrorCode_MultiplierError:
+		b.EncodeVarint(44<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MultiplierError))
+	case *ErrorCode_NewResourceCreationError:
+		b.EncodeVarint(45<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.NewResourceCreationError))
+	case *ErrorCode_NotEmptyError:
+		b.EncodeVarint(46<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.NotEmptyError))
+	case *ErrorCode_NullError:
+		b.EncodeVarint(47<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.NullError))
+	case *ErrorCode_OperatorError:
+		b.EncodeVarint(48<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.OperatorError))
+	case *ErrorCode_RangeError:
+		b.EncodeVarint(49<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.RangeError))
+	case *ErrorCode_RecommendationError:
+		b.EncodeVarint(58<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.RecommendationError))
+	case *ErrorCode_RegionCodeError:
+		b.EncodeVarint(51<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.RegionCodeError))
+	case *ErrorCode_SettingError:
+		b.EncodeVarint(52<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.SettingError))
+	case *ErrorCode_StringFormatError:
+		b.EncodeVarint(53<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.StringFormatError))
+	case *ErrorCode_StringLengthError:
+		b.EncodeVarint(54<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.StringLengthError))
+	case *ErrorCode_OperationAccessDeniedError:
+		b.EncodeVarint(55<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.OperationAccessDeniedError))
+	case *ErrorCode_ResourceAccessDeniedError:
+		b.EncodeVarint(56<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ResourceAccessDeniedError))
+	case *ErrorCode_ResourceCountLimitExceededError:
+		b.EncodeVarint(57<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ResourceCountLimitExceededError))
+	case *ErrorCode_AdGroupBidModifierError:
+		b.EncodeVarint(59<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdGroupBidModifierError))
+	case *ErrorCode_ContextError:
+		b.EncodeVarint(60<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ContextError))
+	case *ErrorCode_FieldError:
+		b.EncodeVarint(61<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FieldError))
+	case *ErrorCode_SharedSetError:
+		b.EncodeVarint(62<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.SharedSetError))
+	case *ErrorCode_SharedCriterionError:
+		b.EncodeVarint(63<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.SharedCriterionError))
+	case *ErrorCode_CampaignSharedSetError:
+		b.EncodeVarint(64<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CampaignSharedSetError))
+	case *ErrorCode_ConversionActionError:
+		b.EncodeVarint(65<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ConversionActionError))
+	case *ErrorCode_HeaderError:
+		b.EncodeVarint(66<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.HeaderError))
+	case *ErrorCode_DatabaseError:
+		b.EncodeVarint(67<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.DatabaseError))
+	case *ErrorCode_PolicyFindingError:
+		b.EncodeVarint(68<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.PolicyFindingError))
+	case *ErrorCode_CampaignGroupError:
+		b.EncodeVarint(69<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CampaignGroupError))
+	case *ErrorCode_EnumError:
+		b.EncodeVarint(70<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.EnumError))
+	case *ErrorCode_KeywordPlanError:
+		b.EncodeVarint(71<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.KeywordPlanError))
+	case *ErrorCode_KeywordPlanCampaignError:
+		b.EncodeVarint(72<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.KeywordPlanCampaignError))
+	case *ErrorCode_KeywordPlanNegativeKeywordError:
+		b.EncodeVarint(73<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.KeywordPlanNegativeKeywordError))
+	case *ErrorCode_KeywordPlanAdGroupError:
+		b.EncodeVarint(74<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.KeywordPlanAdGroupError))
+	case *ErrorCode_KeywordPlanKeywordError:
+		b.EncodeVarint(75<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.KeywordPlanKeywordError))
+	case *ErrorCode_KeywordPlanIdeaError:
+		b.EncodeVarint(76<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.KeywordPlanIdeaError))
+	case *ErrorCode_AccountBudgetProposalError:
+		b.EncodeVarint(77<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AccountBudgetProposalError))
+	case *ErrorCode_UserListError:
+		b.EncodeVarint(78<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.UserListError))
+	case *ErrorCode_ChangeStatusError:
+		b.EncodeVarint(79<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ChangeStatusError))
+	case *ErrorCode_FeedError:
+		b.EncodeVarint(80<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FeedError))
+	case *ErrorCode_GeoTargetConstantSuggestionError:
+		b.EncodeVarint(81<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.GeoTargetConstantSuggestionError))
+	case *ErrorCode_FeedItemError:
+		b.EncodeVarint(83<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FeedItemError))
+	case *ErrorCode_BillingSetupError:
+		b.EncodeVarint(87<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.BillingSetupError))
+	case *ErrorCode_CustomerClientLinkError:
+		b.EncodeVarint(88<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CustomerClientLinkError))
+	case *ErrorCode_CustomerManagerLinkError:
+		b.EncodeVarint(91<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CustomerManagerLinkError))
+	case *ErrorCode_FeedMappingError:
+		b.EncodeVarint(92<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FeedMappingError))
+	case *ErrorCode_CustomerFeedError:
+		b.EncodeVarint(93<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CustomerFeedError))
+	case *ErrorCode_AdGroupFeedError:
+		b.EncodeVarint(94<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdGroupFeedError))
+	case *ErrorCode_CampaignFeedError:
+		b.EncodeVarint(96<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CampaignFeedError))
+	case nil:
+	default:
+		return fmt.Errorf("ErrorCode.ErrorCode has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ErrorCode_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ErrorCode)
+	switch tag {
+	case 1: // error_code.request_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_RequestError{RequestErrorEnum_RequestError(x)}
+		return true, err
+	case 2: // error_code.bidding_strategy_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_BiddingStrategyError{BiddingStrategyErrorEnum_BiddingStrategyError(x)}
+		return true, err
+	case 3: // error_code.url_field_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_UrlFieldError{UrlFieldErrorEnum_UrlFieldError(x)}
+		return true, err
+	case 4: // error_code.list_operation_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_ListOperationError{ListOperationErrorEnum_ListOperationError(x)}
+		return true, err
+	case 5: // error_code.query_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_QueryError{QueryErrorEnum_QueryError(x)}
+		return true, err
+	case 7: // error_code.mutate_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_MutateError{MutateErrorEnum_MutateError(x)}
+		return true, err
+	case 8: // error_code.field_mask_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FieldMaskError{FieldMaskErrorEnum_FieldMaskError(x)}
+		return true, err
+	case 9: // error_code.authorization_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AuthorizationError{AuthorizationErrorEnum_AuthorizationError(x)}
+		return true, err
+	case 10: // error_code.internal_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_InternalError{InternalErrorEnum_InternalError(x)}
+		return true, err
+	case 11: // error_code.quota_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_QuotaError{QuotaErrorEnum_QuotaError(x)}
+		return true, err
+	case 12: // error_code.ad_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdError{AdErrorEnum_AdError(x)}
+		return true, err
+	case 13: // error_code.ad_group_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdGroupError{AdGroupErrorEnum_AdGroupError(x)}
+		return true, err
+	case 14: // error_code.campaign_budget_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CampaignBudgetError{CampaignBudgetErrorEnum_CampaignBudgetError(x)}
+		return true, err
+	case 15: // error_code.campaign_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CampaignError{CampaignErrorEnum_CampaignError(x)}
+		return true, err
+	case 17: // error_code.authentication_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AuthenticationError{AuthenticationErrorEnum_AuthenticationError(x)}
+		return true, err
+	case 18: // error_code.ad_group_criterion_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdGroupCriterionError{AdGroupCriterionErrorEnum_AdGroupCriterionError(x)}
+		return true, err
+	case 19: // error_code.ad_customizer_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdCustomizerError{AdCustomizerErrorEnum_AdCustomizerError(x)}
+		return true, err
+	case 21: // error_code.ad_group_ad_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdGroupAdError{AdGroupAdErrorEnum_AdGroupAdError(x)}
+		return true, err
+	case 24: // error_code.ad_sharing_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdSharingError{AdSharingErrorEnum_AdSharingError(x)}
+		return true, err
+	case 25: // error_code.adx_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdxError{AdxErrorEnum_AdxError(x)}
+		return true, err
+	case 26: // error_code.bidding_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_BiddingError{BiddingErrorEnum_BiddingError(x)}
+		return true, err
+	case 29: // error_code.campaign_criterion_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CampaignCriterionError{CampaignCriterionErrorEnum_CampaignCriterionError(x)}
+		return true, err
+	case 31: // error_code.collection_size_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CollectionSizeError{CollectionSizeErrorEnum_CollectionSizeError(x)}
+		return true, err
+	case 32: // error_code.criterion_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CriterionError{CriterionErrorEnum_CriterionError(x)}
+		return true, err
+	case 90: // error_code.customer_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CustomerError{CustomerErrorEnum_CustomerError(x)}
+		return true, err
+	case 33: // error_code.date_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_DateError{DateErrorEnum_DateError(x)}
+		return true, err
+	case 34: // error_code.date_range_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_DateRangeError{DateRangeErrorEnum_DateRangeError(x)}
+		return true, err
+	case 35: // error_code.distinct_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_DistinctError{DistinctErrorEnum_DistinctError(x)}
+		return true, err
+	case 36: // error_code.feed_attribute_reference_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FeedAttributeReferenceError{FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError(x)}
+		return true, err
+	case 37: // error_code.function_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FunctionError{FunctionErrorEnum_FunctionError(x)}
+		return true, err
+	case 38: // error_code.function_parsing_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FunctionParsingError{FunctionParsingErrorEnum_FunctionParsingError(x)}
+		return true, err
+	case 39: // error_code.id_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_IdError{IdErrorEnum_IdError(x)}
+		return true, err
+	case 40: // error_code.image_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_ImageError{ImageErrorEnum_ImageError(x)}
+		return true, err
+	case 42: // error_code.media_bundle_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_MediaBundleError{MediaBundleErrorEnum_MediaBundleError(x)}
+		return true, err
+	case 86: // error_code.media_file_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_MediaFileError{MediaFileErrorEnum_MediaFileError(x)}
+		return true, err
+	case 44: // error_code.multiplier_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_MultiplierError{MultiplierErrorEnum_MultiplierError(x)}
+		return true, err
+	case 45: // error_code.new_resource_creation_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_NewResourceCreationError{NewResourceCreationErrorEnum_NewResourceCreationError(x)}
+		return true, err
+	case 46: // error_code.not_empty_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_NotEmptyError{NotEmptyErrorEnum_NotEmptyError(x)}
+		return true, err
+	case 47: // error_code.null_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_NullError{NullErrorEnum_NullError(x)}
+		return true, err
+	case 48: // error_code.operator_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_OperatorError{OperatorErrorEnum_OperatorError(x)}
+		return true, err
+	case 49: // error_code.range_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_RangeError{RangeErrorEnum_RangeError(x)}
+		return true, err
+	case 58: // error_code.recommendation_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_RecommendationError{RecommendationErrorEnum_RecommendationError(x)}
+		return true, err
+	case 51: // error_code.region_code_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_RegionCodeError{RegionCodeErrorEnum_RegionCodeError(x)}
+		return true, err
+	case 52: // error_code.setting_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_SettingError{SettingErrorEnum_SettingError(x)}
+		return true, err
+	case 53: // error_code.string_format_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_StringFormatError{StringFormatErrorEnum_StringFormatError(x)}
+		return true, err
+	case 54: // error_code.string_length_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_StringLengthError{StringLengthErrorEnum_StringLengthError(x)}
+		return true, err
+	case 55: // error_code.operation_access_denied_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_OperationAccessDeniedError{OperationAccessDeniedErrorEnum_OperationAccessDeniedError(x)}
+		return true, err
+	case 56: // error_code.resource_access_denied_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_ResourceAccessDeniedError{ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError(x)}
+		return true, err
+	case 57: // error_code.resource_count_limit_exceeded_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_ResourceCountLimitExceededError{ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError(x)}
+		return true, err
+	case 59: // error_code.ad_group_bid_modifier_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdGroupBidModifierError{AdGroupBidModifierErrorEnum_AdGroupBidModifierError(x)}
+		return true, err
+	case 60: // error_code.context_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_ContextError{ContextErrorEnum_ContextError(x)}
+		return true, err
+	case 61: // error_code.field_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FieldError{FieldErrorEnum_FieldError(x)}
+		return true, err
+	case 62: // error_code.shared_set_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_SharedSetError{SharedSetErrorEnum_SharedSetError(x)}
+		return true, err
+	case 63: // error_code.shared_criterion_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_SharedCriterionError{SharedCriterionErrorEnum_SharedCriterionError(x)}
+		return true, err
+	case 64: // error_code.campaign_shared_set_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CampaignSharedSetError{CampaignSharedSetErrorEnum_CampaignSharedSetError(x)}
+		return true, err
+	case 65: // error_code.conversion_action_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_ConversionActionError{ConversionActionErrorEnum_ConversionActionError(x)}
+		return true, err
+	case 66: // error_code.header_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_HeaderError{HeaderErrorEnum_HeaderError(x)}
+		return true, err
+	case 67: // error_code.database_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_DatabaseError{DatabaseErrorEnum_DatabaseError(x)}
+		return true, err
+	case 68: // error_code.policy_finding_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_PolicyFindingError{PolicyFindingErrorEnum_PolicyFindingError(x)}
+		return true, err
+	case 69: // error_code.campaign_group_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CampaignGroupError{CampaignGroupErrorEnum_CampaignGroupError(x)}
+		return true, err
+	case 70: // error_code.enum_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_EnumError{EnumErrorEnum_EnumError(x)}
+		return true, err
+	case 71: // error_code.keyword_plan_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_KeywordPlanError{KeywordPlanErrorEnum_KeywordPlanError(x)}
+		return true, err
+	case 72: // error_code.keyword_plan_campaign_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_KeywordPlanCampaignError{KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError(x)}
+		return true, err
+	case 73: // error_code.keyword_plan_negative_keyword_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_KeywordPlanNegativeKeywordError{KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError(x)}
+		return true, err
+	case 74: // error_code.keyword_plan_ad_group_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_KeywordPlanAdGroupError{KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError(x)}
+		return true, err
+	case 75: // error_code.keyword_plan_keyword_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_KeywordPlanKeywordError{KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError(x)}
+		return true, err
+	case 76: // error_code.keyword_plan_idea_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_KeywordPlanIdeaError{KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError(x)}
+		return true, err
+	case 77: // error_code.account_budget_proposal_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AccountBudgetProposalError{AccountBudgetProposalErrorEnum_AccountBudgetProposalError(x)}
+		return true, err
+	case 78: // error_code.user_list_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_UserListError{UserListErrorEnum_UserListError(x)}
+		return true, err
+	case 79: // error_code.change_status_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_ChangeStatusError{ChangeStatusErrorEnum_ChangeStatusError(x)}
+		return true, err
+	case 80: // error_code.feed_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FeedError{FeedErrorEnum_FeedError(x)}
+		return true, err
+	case 81: // error_code.geo_target_constant_suggestion_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_GeoTargetConstantSuggestionError{GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError(x)}
+		return true, err
+	case 83: // error_code.feed_item_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FeedItemError{FeedItemErrorEnum_FeedItemError(x)}
+		return true, err
+	case 87: // error_code.billing_setup_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_BillingSetupError{BillingSetupErrorEnum_BillingSetupError(x)}
+		return true, err
+	case 88: // error_code.customer_client_link_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CustomerClientLinkError{CustomerClientLinkErrorEnum_CustomerClientLinkError(x)}
+		return true, err
+	case 91: // error_code.customer_manager_link_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CustomerManagerLinkError{CustomerManagerLinkErrorEnum_CustomerManagerLinkError(x)}
+		return true, err
+	case 92: // error_code.feed_mapping_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_FeedMappingError{FeedMappingErrorEnum_FeedMappingError(x)}
+		return true, err
+	case 93: // error_code.customer_feed_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CustomerFeedError{CustomerFeedErrorEnum_CustomerFeedError(x)}
+		return true, err
+	case 94: // error_code.ad_group_feed_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_AdGroupFeedError{AdGroupFeedErrorEnum_AdGroupFeedError(x)}
+		return true, err
+	case 96: // error_code.campaign_feed_error
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ErrorCode = &ErrorCode_CampaignFeedError{CampaignFeedErrorEnum_CampaignFeedError(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ErrorCode_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ErrorCode)
+	// error_code
+	switch x := m.ErrorCode.(type) {
+	case *ErrorCode_RequestError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.RequestError))
+	case *ErrorCode_BiddingStrategyError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.BiddingStrategyError))
+	case *ErrorCode_UrlFieldError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.UrlFieldError))
+	case *ErrorCode_ListOperationError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ListOperationError))
+	case *ErrorCode_QueryError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.QueryError))
+	case *ErrorCode_MutateError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.MutateError))
+	case *ErrorCode_FieldMaskError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.FieldMaskError))
+	case *ErrorCode_AuthorizationError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.AuthorizationError))
+	case *ErrorCode_InternalError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.InternalError))
+	case *ErrorCode_QuotaError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.QuotaError))
+	case *ErrorCode_AdError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdError))
+	case *ErrorCode_AdGroupError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdGroupError))
+	case *ErrorCode_CampaignBudgetError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.CampaignBudgetError))
+	case *ErrorCode_CampaignError:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.CampaignError))
+	case *ErrorCode_AuthenticationError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AuthenticationError))
+	case *ErrorCode_AdGroupCriterionError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdGroupCriterionError))
+	case *ErrorCode_AdCustomizerError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdCustomizerError))
+	case *ErrorCode_AdGroupAdError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdGroupAdError))
+	case *ErrorCode_AdSharingError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdSharingError))
+	case *ErrorCode_AdxError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdxError))
+	case *ErrorCode_BiddingError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.BiddingError))
+	case *ErrorCode_CampaignCriterionError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CampaignCriterionError))
+	case *ErrorCode_CollectionSizeError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CollectionSizeError))
+	case *ErrorCode_CriterionError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CriterionError))
+	case *ErrorCode_CustomerError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CustomerError))
+	case *ErrorCode_DateError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.DateError))
+	case *ErrorCode_DateRangeError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.DateRangeError))
+	case *ErrorCode_DistinctError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.DistinctError))
+	case *ErrorCode_FeedAttributeReferenceError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FeedAttributeReferenceError))
+	case *ErrorCode_FunctionError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FunctionError))
+	case *ErrorCode_FunctionParsingError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FunctionParsingError))
+	case *ErrorCode_IdError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.IdError))
+	case *ErrorCode_ImageError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ImageError))
+	case *ErrorCode_MediaBundleError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.MediaBundleError))
+	case *ErrorCode_MediaFileError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.MediaFileError))
+	case *ErrorCode_MultiplierError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.MultiplierError))
+	case *ErrorCode_NewResourceCreationError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.NewResourceCreationError))
+	case *ErrorCode_NotEmptyError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.NotEmptyError))
+	case *ErrorCode_NullError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.NullError))
+	case *ErrorCode_OperatorError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.OperatorError))
+	case *ErrorCode_RangeError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.RangeError))
+	case *ErrorCode_RecommendationError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.RecommendationError))
+	case *ErrorCode_RegionCodeError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.RegionCodeError))
+	case *ErrorCode_SettingError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.SettingError))
+	case *ErrorCode_StringFormatError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.StringFormatError))
+	case *ErrorCode_StringLengthError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.StringLengthError))
+	case *ErrorCode_OperationAccessDeniedError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.OperationAccessDeniedError))
+	case *ErrorCode_ResourceAccessDeniedError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ResourceAccessDeniedError))
+	case *ErrorCode_ResourceCountLimitExceededError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ResourceCountLimitExceededError))
+	case *ErrorCode_AdGroupBidModifierError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdGroupBidModifierError))
+	case *ErrorCode_ContextError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ContextError))
+	case *ErrorCode_FieldError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FieldError))
+	case *ErrorCode_SharedSetError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.SharedSetError))
+	case *ErrorCode_SharedCriterionError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.SharedCriterionError))
+	case *ErrorCode_CampaignSharedSetError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CampaignSharedSetError))
+	case *ErrorCode_ConversionActionError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ConversionActionError))
+	case *ErrorCode_HeaderError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.HeaderError))
+	case *ErrorCode_DatabaseError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.DatabaseError))
+	case *ErrorCode_PolicyFindingError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.PolicyFindingError))
+	case *ErrorCode_CampaignGroupError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CampaignGroupError))
+	case *ErrorCode_EnumError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.EnumError))
+	case *ErrorCode_KeywordPlanError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.KeywordPlanError))
+	case *ErrorCode_KeywordPlanCampaignError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.KeywordPlanCampaignError))
+	case *ErrorCode_KeywordPlanNegativeKeywordError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.KeywordPlanNegativeKeywordError))
+	case *ErrorCode_KeywordPlanAdGroupError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.KeywordPlanAdGroupError))
+	case *ErrorCode_KeywordPlanKeywordError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.KeywordPlanKeywordError))
+	case *ErrorCode_KeywordPlanIdeaError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.KeywordPlanIdeaError))
+	case *ErrorCode_AccountBudgetProposalError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AccountBudgetProposalError))
+	case *ErrorCode_UserListError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.UserListError))
+	case *ErrorCode_ChangeStatusError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ChangeStatusError))
+	case *ErrorCode_FeedError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FeedError))
+	case *ErrorCode_GeoTargetConstantSuggestionError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.GeoTargetConstantSuggestionError))
+	case *ErrorCode_FeedItemError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FeedItemError))
+	case *ErrorCode_BillingSetupError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.BillingSetupError))
+	case *ErrorCode_CustomerClientLinkError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CustomerClientLinkError))
+	case *ErrorCode_CustomerManagerLinkError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CustomerManagerLinkError))
+	case *ErrorCode_FeedMappingError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FeedMappingError))
+	case *ErrorCode_CustomerFeedError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CustomerFeedError))
+	case *ErrorCode_AdGroupFeedError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdGroupFeedError))
+	case *ErrorCode_CampaignFeedError:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CampaignFeedError))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Describes the part of the request proto that caused the error.
+type ErrorLocation struct {
+	// The mutate operation that failed
+	OperationIndex *wrappers.Int64Value `protobuf:"bytes,1,opt,name=operation_index,json=operationIndex,proto3" json:"operation_index,omitempty"`
+	// A field path that indicates which field was invalid in the request.
+	FieldPathElements    []*ErrorLocation_FieldPathElement `protobuf:"bytes,2,rep,name=field_path_elements,json=fieldPathElements,proto3" json:"field_path_elements,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *ErrorLocation) Reset()         { *m = ErrorLocation{} }
+func (m *ErrorLocation) String() string { return proto.CompactTextString(m) }
+func (*ErrorLocation) ProtoMessage()    {}
+func (*ErrorLocation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{3}
+}
+func (m *ErrorLocation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorLocation.Unmarshal(m, b)
+}
+func (m *ErrorLocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorLocation.Marshal(b, m, deterministic)
+}
+func (dst *ErrorLocation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorLocation.Merge(dst, src)
+}
+func (m *ErrorLocation) XXX_Size() int {
+	return xxx_messageInfo_ErrorLocation.Size(m)
+}
+func (m *ErrorLocation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorLocation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorLocation proto.InternalMessageInfo
+
+func (m *ErrorLocation) GetOperationIndex() *wrappers.Int64Value {
+	if m != nil {
+		return m.OperationIndex
+	}
+	return nil
+}
+
+func (m *ErrorLocation) GetFieldPathElements() []*ErrorLocation_FieldPathElement {
+	if m != nil {
+		return m.FieldPathElements
+	}
+	return nil
+}
+
+// A part of a field path.
+type ErrorLocation_FieldPathElement struct {
+	// The name of a field or a oneof
+	FieldName string `protobuf:"bytes,1,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	// If field_name is a repeated field, this is the element that failed
+	Index                *wrappers.Int64Value `protobuf:"bytes,2,opt,name=index,proto3" json:"index,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ErrorLocation_FieldPathElement) Reset()         { *m = ErrorLocation_FieldPathElement{} }
+func (m *ErrorLocation_FieldPathElement) String() string { return proto.CompactTextString(m) }
+func (*ErrorLocation_FieldPathElement) ProtoMessage()    {}
+func (*ErrorLocation_FieldPathElement) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{3, 0}
+}
+func (m *ErrorLocation_FieldPathElement) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorLocation_FieldPathElement.Unmarshal(m, b)
+}
+func (m *ErrorLocation_FieldPathElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorLocation_FieldPathElement.Marshal(b, m, deterministic)
+}
+func (dst *ErrorLocation_FieldPathElement) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorLocation_FieldPathElement.Merge(dst, src)
+}
+func (m *ErrorLocation_FieldPathElement) XXX_Size() int {
+	return xxx_messageInfo_ErrorLocation_FieldPathElement.Size(m)
+}
+func (m *ErrorLocation_FieldPathElement) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorLocation_FieldPathElement.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorLocation_FieldPathElement proto.InternalMessageInfo
+
+func (m *ErrorLocation_FieldPathElement) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+func (m *ErrorLocation_FieldPathElement) GetIndex() *wrappers.Int64Value {
+	if m != nil {
+		return m.Index
+	}
+	return nil
+}
+
+// Additional error details.
+type ErrorDetails struct {
+	// The error code that should have been returned, but wasn't. This is used
+	// when the error code is InternalError.ERROR_CODE_NOT_PUBLISHED.
+	UnpublishedErrorCode string `protobuf:"bytes,1,opt,name=unpublished_error_code,json=unpublishedErrorCode,proto3" json:"unpublished_error_code,omitempty"`
+	// Describes an ad policy violation.
+	PolicyViolationDetails *PolicyViolationDetails `protobuf:"bytes,2,opt,name=policy_violation_details,json=policyViolationDetails,proto3" json:"policy_violation_details,omitempty"`
+	// Describes policy violation findings.
+	PolicyFindingDetails *PolicyFindingDetails `protobuf:"bytes,3,opt,name=policy_finding_details,json=policyFindingDetails,proto3" json:"policy_finding_details,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ErrorDetails) Reset()         { *m = ErrorDetails{} }
+func (m *ErrorDetails) String() string { return proto.CompactTextString(m) }
+func (*ErrorDetails) ProtoMessage()    {}
+func (*ErrorDetails) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{4}
+}
+func (m *ErrorDetails) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ErrorDetails.Unmarshal(m, b)
+}
+func (m *ErrorDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ErrorDetails.Marshal(b, m, deterministic)
+}
+func (dst *ErrorDetails) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ErrorDetails.Merge(dst, src)
+}
+func (m *ErrorDetails) XXX_Size() int {
+	return xxx_messageInfo_ErrorDetails.Size(m)
+}
+func (m *ErrorDetails) XXX_DiscardUnknown() {
+	xxx_messageInfo_ErrorDetails.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ErrorDetails proto.InternalMessageInfo
+
+func (m *ErrorDetails) GetUnpublishedErrorCode() string {
+	if m != nil {
+		return m.UnpublishedErrorCode
+	}
+	return ""
+}
+
+func (m *ErrorDetails) GetPolicyViolationDetails() *PolicyViolationDetails {
+	if m != nil {
+		return m.PolicyViolationDetails
+	}
+	return nil
+}
+
+func (m *ErrorDetails) GetPolicyFindingDetails() *PolicyFindingDetails {
+	if m != nil {
+		return m.PolicyFindingDetails
+	}
+	return nil
+}
+
+// Error returned as part of a mutate response.
+// This error indicates single policy violation by some text
+// in one of the fields.
+type PolicyViolationDetails struct {
+	// Human readable description of policy violation.
+	ExternalPolicyDescription string `protobuf:"bytes,2,opt,name=external_policy_description,json=externalPolicyDescription,proto3" json:"external_policy_description,omitempty"`
+	// Unique identifier for this violation.
+	// If policy is exemptible, this key may be used to request exemption.
+	Key *common.PolicyViolationKey `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"`
+	// Human readable name of the policy.
+	ExternalPolicyName string `protobuf:"bytes,5,opt,name=external_policy_name,json=externalPolicyName,proto3" json:"external_policy_name,omitempty"`
+	// Whether user can file an exemption request for this violation.
+	IsExemptible         bool     `protobuf:"varint,6,opt,name=is_exemptible,json=isExemptible,proto3" json:"is_exemptible,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyViolationDetails) Reset()         { *m = PolicyViolationDetails{} }
+func (m *PolicyViolationDetails) String() string { return proto.CompactTextString(m) }
+func (*PolicyViolationDetails) ProtoMessage()    {}
+func (*PolicyViolationDetails) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{5}
+}
+func (m *PolicyViolationDetails) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyViolationDetails.Unmarshal(m, b)
+}
+func (m *PolicyViolationDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyViolationDetails.Marshal(b, m, deterministic)
+}
+func (dst *PolicyViolationDetails) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyViolationDetails.Merge(dst, src)
+}
+func (m *PolicyViolationDetails) XXX_Size() int {
+	return xxx_messageInfo_PolicyViolationDetails.Size(m)
+}
+func (m *PolicyViolationDetails) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyViolationDetails.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyViolationDetails proto.InternalMessageInfo
+
+func (m *PolicyViolationDetails) GetExternalPolicyDescription() string {
+	if m != nil {
+		return m.ExternalPolicyDescription
+	}
+	return ""
+}
+
+func (m *PolicyViolationDetails) GetKey() *common.PolicyViolationKey {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+func (m *PolicyViolationDetails) GetExternalPolicyName() string {
+	if m != nil {
+		return m.ExternalPolicyName
+	}
+	return ""
+}
+
+func (m *PolicyViolationDetails) GetIsExemptible() bool {
+	if m != nil {
+		return m.IsExemptible
+	}
+	return false
+}
+
+// Error returned as part of a mutate response.
+// This error indicates one or more policy findings in the fields of a
+// resource.
+type PolicyFindingDetails struct {
+	// The list of policy topics for the resource. Contains the PROHIBITED or
+	// FULLY_LIMITED policy topic entries that prevented the resource from being
+	// saved (among any other entries the resource may also have).
+	PolicyTopicEntries   []*common.PolicyTopicEntry `protobuf:"bytes,1,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *PolicyFindingDetails) Reset()         { *m = PolicyFindingDetails{} }
+func (m *PolicyFindingDetails) String() string { return proto.CompactTextString(m) }
+func (*PolicyFindingDetails) ProtoMessage()    {}
+func (*PolicyFindingDetails) Descriptor() ([]byte, []int) {
+	return fileDescriptor_errors_fa6b3b0791612cfd, []int{6}
+}
+func (m *PolicyFindingDetails) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyFindingDetails.Unmarshal(m, b)
+}
+func (m *PolicyFindingDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyFindingDetails.Marshal(b, m, deterministic)
+}
+func (dst *PolicyFindingDetails) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyFindingDetails.Merge(dst, src)
+}
+func (m *PolicyFindingDetails) XXX_Size() int {
+	return xxx_messageInfo_PolicyFindingDetails.Size(m)
+}
+func (m *PolicyFindingDetails) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyFindingDetails.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyFindingDetails proto.InternalMessageInfo
+
+func (m *PolicyFindingDetails) GetPolicyTopicEntries() []*common.PolicyTopicEntry {
+	if m != nil {
+		return m.PolicyTopicEntries
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GoogleAdsFailure)(nil), "google.ads.googleads.v0.errors.GoogleAdsFailure")
+	proto.RegisterType((*GoogleAdsError)(nil), "google.ads.googleads.v0.errors.GoogleAdsError")
+	proto.RegisterType((*ErrorCode)(nil), "google.ads.googleads.v0.errors.ErrorCode")
+	proto.RegisterType((*ErrorLocation)(nil), "google.ads.googleads.v0.errors.ErrorLocation")
+	proto.RegisterType((*ErrorLocation_FieldPathElement)(nil), "google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement")
+	proto.RegisterType((*ErrorDetails)(nil), "google.ads.googleads.v0.errors.ErrorDetails")
+	proto.RegisterType((*PolicyViolationDetails)(nil), "google.ads.googleads.v0.errors.PolicyViolationDetails")
+	proto.RegisterType((*PolicyFindingDetails)(nil), "google.ads.googleads.v0.errors.PolicyFindingDetails")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/errors.proto", fileDescriptor_errors_fa6b3b0791612cfd)
+}
+
+var fileDescriptor_errors_fa6b3b0791612cfd = []byte{
+	// 3366 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x5b, 0xcd, 0x73, 0x1c, 0x47,
+	0x15, 0xdf, 0x95, 0x49, 0x6c, 0xb5, 0x65, 0xd9, 0x6e, 0xcb, 0x4e, 0xdb, 0x26, 0x89, 0x51, 0x12,
+	0x30, 0x21, 0x59, 0xc9, 0xf2, 0x57, 0x1c, 0x27, 0x76, 0x56, 0x2b, 0xc9, 0x23, 0x2c, 0xd9, 0xca,
+	0x28, 0x71, 0x42, 0x62, 0xd8, 0xf4, 0xce, 0xf4, 0xae, 0x1a, 0xcd, 0xc7, 0x7a, 0x3e, 0x64, 0xc9,
+	0x45, 0xaa, 0xe0, 0x00, 0x55, 0x50, 0x05, 0x07, 0xa8, 0xe2, 0xc0, 0x81, 0x43, 0x8e, 0x70, 0xe4,
+	0xc0, 0x99, 0x1b, 0xc5, 0xff, 0xc3, 0x91, 0x2a, 0xaa, 0x7b, 0xbe, 0xba, 0x7b, 0x66, 0x77, 0x7a,
+	0x72, 0x92, 0xfa, 0xd7, 0xfd, 0x7b, 0xaf, 0xbb, 0xa7, 0x3f, 0xde, 0x7b, 0xfd, 0x16, 0xfc, 0x68,
+	0xe4, 0xfb, 0x23, 0x87, 0x2c, 0x61, 0x3b, 0x5c, 0x4a, 0xfe, 0x65, 0xff, 0x1d, 0x2c, 0x2f, 0x91,
+	0x20, 0xf0, 0x83, 0x30, 0xfd, 0xd3, 0x19, 0x07, 0x7e, 0xe4, 0xc3, 0xd7, 0x92, 0x16, 0x1d, 0x6c,
+	0x87, 0x9d, 0xbc, 0x71, 0xe7, 0x60, 0xb9, 0x93, 0xb4, 0xba, 0x34, 0x51, 0x98, 0xe5, 0xbb, 0xae,
+	0xef, 0x2d, 0x8d, 0x7d, 0x87, 0x5a, 0x47, 0x89, 0xb0, 0x4b, 0x6f, 0xd7, 0x34, 0x3e, 0xc0, 0x4e,
+	0x4c, 0xd2, 0xb6, 0xab, 0x35, 0xbd, 0xc4, 0x96, 0xe5, 0xc7, 0x5e, 0xd4, 0x1f, 0xc4, 0xf6, 0x88,
+	0x44, 0xfd, 0x71, 0xe0, 0x8f, 0xfd, 0x10, 0x3b, 0x7d, 0x5e, 0x9d, 0xca, 0x78, 0xaf, 0x4e, 0x86,
+	0xdd, 0xb7, 0xe2, 0x30, 0xf2, 0x5d, 0xfa, 0x82, 0x04, 0x12, 0xf3, 0xdd, 0x7a, 0xa6, 0xd8, 0xfc,
+	0x56, 0x7d, 0xf3, 0x51, 0xe0, 0xc7, 0xe3, 0xbe, 0xc2, 0xfb, 0x48, 0x97, 0x37, 0xa0, 0x76, 0xdf,
+	0xf5, 0x6d, 0x3a, 0xa4, 0x4a, 0x47, 0x3f, 0xd4, 0x95, 0x60, 0x05, 0x34, 0x22, 0x01, 0xf5, 0x3d,
+	0x89, 0x7e, 0x5d, 0x97, 0xde, 0x70, 0x5a, 0x13, 0xd2, 0x90, 0x10, 0x79, 0xbc, 0x37, 0xeb, 0x99,
+	0xe1, 0x1e, 0x0e, 0xa8, 0x37, 0x92, 0x68, 0x9d, 0x5a, 0xda, 0xa1, 0xd4, 0xfe, 0x4e, 0x5d, 0xfb,
+	0x38, 0xda, 0x23, 0x5e, 0x44, 0x2d, 0x1c, 0xa9, 0x13, 0xf2, 0x9e, 0x06, 0xd5, 0x0f, 0xe8, 0x8b,
+	0x32, 0x73, 0xa5, 0x86, 0x39, 0xa0, 0xb6, 0xad, 0x0e, 0xec, 0xae, 0x26, 0x27, 0x8c, 0x02, 0x1c,
+	0x91, 0xd1, 0x51, 0xa3, 0xae, 0x0e, 0xa8, 0xe3, 0x70, 0x32, 0x89, 0x94, 0x0f, 0xf8, 0x7e, 0x0d,
+	0xd3, 0xc2, 0xee, 0x18, 0xd3, 0x91, 0x97, 0x6d, 0xae, 0x26, 0x0b, 0x2e, 0xe7, 0x7e, 0xbb, 0x05,
+	0x97, 0xd3, 0x9b, 0x8c, 0x34, 0x27, 0x95, 0x16, 0xdc, 0x1d, 0x5d, 0x66, 0x79, 0x95, 0xdf, 0xd3,
+	0xa5, 0xb2, 0x15, 0x4b, 0x6c, 0x36, 0xcd, 0xcd, 0x3a, 0xbd, 0x87, 0xbd, 0x11, 0xe9, 0x87, 0x11,
+	0x8e, 0xe2, 0xb0, 0xd9, 0xe7, 0xf1, 0x1d, 0x87, 0x58, 0x7c, 0x01, 0x86, 0xf4, 0x05, 0x69, 0xb4,
+	0x0a, 0x2d, 0xdf, 0x8b, 0xc8, 0xa1, 0xdc, 0xd3, 0x0f, 0xea, 0x39, 0x07, 0x24, 0x08, 0x99, 0x3e,
+	0x6c, 0x95, 0xd6, 0xfd, 0x8d, 0x3a, 0x76, 0xe5, 0x3a, 0xb8, 0x5f, 0xc7, 0xe2, 0xe7, 0x32, 0x09,
+	0xfa, 0x96, 0x43, 0x89, 0x17, 0xf5, 0x1d, 0xea, 0xed, 0x37, 0x5b, 0x48, 0x99, 0x80, 0x46, 0xdf,
+	0x24, 0x23, 0x95, 0x16, 0xd2, 0x47, 0xba, 0x4c, 0x17, 0x7b, 0x78, 0x44, 0x82, 0xe6, 0x1d, 0xb6,
+	0x71, 0x84, 0x07, 0x38, 0x94, 0x3f, 0xe7, 0x52, 0x3d, 0x89, 0x34, 0x3a, 0x61, 0x39, 0x21, 0xe0,
+	0x2b, 0xaf, 0x51, 0xe7, 0x68, 0x18, 0x51, 0xcf, 0x8a, 0x1a, 0x75, 0x8e, 0x78, 0xb1, 0x2b, 0x11,
+	0x7a, 0x35, 0x04, 0x3e, 0xeb, 0x38, 0x8a, 0x02, 0x3a, 0x88, 0x59, 0x37, 0xc9, 0x90, 0x04, 0xc4,
+	0xb3, 0x9a, 0x4d, 0x49, 0xe9, 0xd3, 0xdd, 0xd0, 0x21, 0xd0, 0x88, 0xc8, 0x7d, 0xbd, 0xad, 0xc3,
+	0x72, 0xf1, 0x78, 0xac, 0x9e, 0xe9, 0xcb, 0x75, 0x44, 0x4a, 0x9c, 0x66, 0xb7, 0x62, 0xc2, 0x70,
+	0x71, 0xd8, 0x6c, 0x41, 0x0d, 0x63, 0xaf, 0xbc, 0x5b, 0xef, 0xea, 0x92, 0xc6, 0x38, 0x08, 0xd5,
+	0xa1, 0x6d, 0xd6, 0x90, 0x47, 0xc4, 0xef, 0x47, 0x38, 0x60, 0x57, 0x86, 0xe5, 0x7b, 0x61, 0x84,
+	0xbd, 0xa8, 0x1f, 0xc6, 0xa3, 0x11, 0x09, 0x4b, 0xfd, 0xb8, 0x56, 0x23, 0x6a, 0x8f, 0x60, 0xbb,
+	0xa1, 0x4d, 0x46, 0xed, 0x46, 0xdf, 0x81, 0xba, 0xb8, 0xe1, 0x26, 0xa0, 0x5e, 0x44, 0x02, 0x4f,
+	0xb1, 0x31, 0xeb, 0x0e, 0x86, 0x7d, 0x72, 0xf4, 0xdc, 0x0f, 0xec, 0xfe, 0xd8, 0xc1, 0x5e, 0xbf,
+	0xd2, 0x9c, 0x6a, 0x24, 0xa1, 0xf2, 0x7e, 0xbc, 0xdd, 0x44, 0x42, 0x93, 0x93, 0x5f, 0x22, 0x52,
+	0x9b, 0xe0, 0x46, 0x67, 0xb8, 0xc4, 0xce, 0x0a, 0xa2, 0x00, 0xa3, 0x89, 0x00, 0x8f, 0x8c, 0x70,
+	0x44, 0x0f, 0x48, 0xa5, 0xa4, 0xba, 0x7b, 0xde, 0xa1, 0x61, 0xd4, 0xf7, 0xc7, 0x24, 0x28, 0xdb,
+	0x6d, 0x75, 0x93, 0xe7, 0x12, 0x9b, 0xe2, 0xfe, 0x20, 0xf6, 0x6c, 0xa7, 0xd9, 0x51, 0x9b, 0x10,
+	0x87, 0xb4, 0x29, 0x2d, 0x76, 0x22, 0x3a, 0x76, 0x54, 0x43, 0xff, 0x5a, 0x2d, 0x2d, 0x52, 0xef,
+	0x82, 0xba, 0x85, 0xe5, 0x91, 0xe7, 0xfd, 0x80, 0x84, 0x7e, 0x1c, 0x58, 0xa4, 0x6f, 0x05, 0x04,
+	0x37, 0xbe, 0xdb, 0x3d, 0x3f, 0xea, 0x13, 0x77, 0x1c, 0x1d, 0x35, 0x3a, 0xa1, 0xbd, 0xd8, 0x91,
+	0xf7, 0x50, 0x9d, 0xaf, 0x57, 0x7c, 0x38, 0x6c, 0x59, 0x24, 0x0c, 0xfb, 0x36, 0xf1, 0xa8, 0x72,
+	0xca, 0x5f, 0xd7, 0x92, 0xe1, 0x07, 0x8d, 0x96, 0x4d, 0xe2, 0xbd, 0xf6, 0x87, 0xd4, 0xb3, 0x9b,
+	0x1e, 0xf3, 0xcf, 0x62, 0x12, 0x1c, 0x35, 0x64, 0xf8, 0x11, 0x6e, 0xc4, 0x28, 0xdf, 0xe3, 0x75,
+	0x03, 0x0a, 0x08, 0x73, 0xb5, 0x89, 0x67, 0x97, 0xbf, 0xf5, 0xad, 0x5a, 0xea, 0x88, 0x51, 0x2c,
+	0xdf, 0x6e, 0x66, 0x71, 0x06, 0xe4, 0x59, 0x4c, 0x42, 0xd9, 0x72, 0xe8, 0xd6, 0x72, 0xd2, 0x55,
+	0x39, 0xf9, 0x7b, 0x1b, 0xba, 0x22, 0x92, 0x30, 0x81, 0x43, 0x5d, 0x1a, 0xf5, 0xc9, 0xa1, 0x45,
+	0x88, 0xad, 0x48, 0xaa, 0x1b, 0x40, 0x48, 0xa2, 0xa8, 0xa9, 0xe3, 0x96, 0xfa, 0x04, 0xd5, 0xb6,
+	0xef, 0x4d, 0x3d, 0x72, 0x53, 0x87, 0x22, 0x8c, 0xb8, 0xe3, 0x3c, 0xf4, 0x03, 0x17, 0x7f, 0x2b,
+	0xa6, 0x43, 0xbc, 0x51, 0xb4, 0xd7, 0xe8, 0x00, 0x88, 0x03, 0xa7, 0x5f, 0x36, 0x68, 0x6a, 0x59,
+	0x21, 0x37, 0x90, 0x95, 0x45, 0x91, 0x86, 0x9a, 0x96, 0x78, 0x69, 0x10, 0x0f, 0x97, 0x9e, 0x07,
+	0x78, 0x3c, 0x26, 0x59, 0x28, 0x6a, 0xf1, 0x0b, 0x70, 0xe6, 0x01, 0x6f, 0xd1, 0xb5, 0xc3, 0x0d,
+	0x4c, 0x9d, 0x38, 0x20, 0x70, 0x03, 0xbc, 0x9c, 0xc8, 0x44, 0xed, 0x2b, 0xc7, 0xae, 0x9e, 0x5c,
+	0xe9, 0x74, 0xa6, 0xc7, 0xab, 0x3a, 0xb9, 0x84, 0x75, 0x56, 0x36, 0x53, 0xf6, 0xe2, 0xbf, 0x67,
+	0xc0, 0xbc, 0x5c, 0x05, 0x0d, 0x00, 0x78, 0x25, 0x5f, 0xf1, 0xa8, 0x7d, 0xa5, 0x7d, 0xf5, 0xe4,
+	0xca, 0x0f, 0xeb, 0xc4, 0x73, 0x6a, 0xcf, 0xb7, 0x89, 0x39, 0x4b, 0xb2, 0x7f, 0x21, 0x02, 0xc7,
+	0x5d, 0x12, 0x86, 0x78, 0x44, 0xd0, 0xcc, 0x95, 0xf6, 0xd5, 0x59, 0x33, 0x2b, 0xc2, 0xfb, 0xe0,
+	0x78, 0x14, 0xd0, 0xd1, 0x88, 0x04, 0xe8, 0x18, 0x57, 0xf0, 0xd6, 0x44, 0x05, 0x49, 0x88, 0xac,
+	0xf3, 0x04, 0x3b, 0x31, 0x31, 0x33, 0x16, 0xdc, 0x04, 0x27, 0x1c, 0x3f, 0x09, 0x63, 0xa0, 0xef,
+	0x70, 0x09, 0xef, 0x6a, 0x75, 0x71, 0x2b, 0x25, 0x99, 0x39, 0x1d, 0x6e, 0x80, 0xe3, 0x36, 0x89,
+	0x30, 0x75, 0x42, 0xf4, 0x12, 0x97, 0xf4, 0x8e, 0x96, 0xa4, 0xb5, 0x84, 0x63, 0x66, 0xe4, 0xc5,
+	0xff, 0x3d, 0x04, 0xb3, 0xf9, 0x34, 0x40, 0x1b, 0x9c, 0x92, 0x0e, 0x00, 0x3e, 0x91, 0xf3, 0x2b,
+	0x1f, 0xd6, 0xc9, 0x36, 0x13, 0x12, 0x17, 0xb4, 0xee, 0xc5, 0xae, 0x04, 0x18, 0x2d, 0x73, 0x2e,
+	0x10, 0xca, 0xf0, 0xd7, 0x6d, 0x70, 0xa1, 0x3a, 0x56, 0xc2, 0x67, 0x7c, 0x7e, 0x65, 0xbb, 0x4e,
+	0xdf, 0x6a, 0xc2, 0xde, 0x4d, 0xc9, 0x85, 0xde, 0xaa, 0x0a, 0xa3, 0x65, 0x2e, 0x0c, 0x2a, 0x70,
+	0x48, 0xc1, 0x69, 0x65, 0x47, 0xf0, 0xef, 0x3a, 0xbf, 0x72, 0xbf, 0x4e, 0xff, 0xa7, 0x81, 0xb3,
+	0xc1, 0x58, 0x85, 0x62, 0x09, 0x31, 0x5a, 0xe6, 0xa9, 0x58, 0x04, 0xe0, 0xd7, 0x60, 0xa1, 0xca,
+	0xa8, 0xe1, 0xab, 0x60, 0x7e, 0x65, 0xb3, 0x4e, 0xdf, 0x16, 0x0d, 0xa3, 0xc7, 0x19, 0xb5, 0x50,
+	0x5a, 0x86, 0x8d, 0x96, 0x09, 0x9d, 0x12, 0x0a, 0x9f, 0x82, 0x93, 0xc2, 0x0d, 0xc7, 0x57, 0xcc,
+	0xfc, 0xca, 0x9d, 0x3a, 0xad, 0x1f, 0x33, 0x4a, 0xa1, 0xad, 0x28, 0x1a, 0x2d, 0x13, 0x3c, 0xcb,
+	0x4b, 0xf0, 0x2b, 0x30, 0x27, 0xda, 0x33, 0xe8, 0x38, 0x17, 0x7f, 0xb7, 0x4e, 0xfc, 0x36, 0xe7,
+	0x14, 0xf2, 0x85, 0xb2, 0xd1, 0x32, 0x4f, 0xba, 0x45, 0x11, 0xba, 0xe0, 0x8c, 0xea, 0x56, 0xa1,
+	0x13, 0x5c, 0x4b, 0xb7, 0x4e, 0x0b, 0xff, 0x08, 0xdb, 0x38, 0xdc, 0x2f, 0x14, 0xc9, 0x90, 0xd1,
+	0x32, 0xe7, 0x87, 0x12, 0x02, 0x7f, 0x01, 0xce, 0x55, 0x44, 0x0e, 0xd1, 0xac, 0xde, 0xc7, 0xea,
+	0x8a, 0xd4, 0x42, 0x6b, 0x19, 0x66, 0x1f, 0x0b, 0x97, 0x50, 0xb8, 0x07, 0xe6, 0x65, 0xdf, 0x05,
+	0x01, 0xbd, 0x55, 0xb9, 0x99, 0xb2, 0x0a, 0x9d, 0x12, 0xc2, 0x56, 0x25, 0x15, 0x81, 0x64, 0x59,
+	0xe4, 0x66, 0x0c, 0x3a, 0xa9, 0xbb, 0x2c, 0xfc, 0x08, 0x8b, 0xcb, 0x22, 0x2b, 0x26, 0xcb, 0x22,
+	0x2b, 0xc1, 0x1d, 0x70, 0x22, 0x0b, 0xa0, 0xa3, 0x39, 0x2e, 0xfa, 0x7a, 0xed, 0xd4, 0x09, 0x3b,
+	0xaa, 0x9b, 0xef, 0xa5, 0xe3, 0x38, 0xdd, 0x45, 0x04, 0xcc, 0xcb, 0x3e, 0x19, 0x3a, 0xa5, 0x77,
+	0x3e, 0x75, 0xed, 0x07, 0x8c, 0x24, 0x0a, 0x2f, 0x00, 0x76, 0x3e, 0x61, 0xa1, 0x0c, 0x7f, 0xd5,
+	0x06, 0xe7, 0x2b, 0x83, 0xaa, 0x68, 0x9e, 0xab, 0x7b, 0x58, 0xa7, 0xae, 0x97, 0x92, 0x57, 0x39,
+	0xb7, 0xd0, 0x5a, 0x81, 0x1b, 0x2d, 0xf3, 0x9c, 0x55, 0x86, 0xd9, 0x22, 0x90, 0x9d, 0x47, 0x74,
+	0x5a, 0x6f, 0x11, 0x64, 0x3a, 0xca, 0x5a, 0xf3, 0x45, 0x60, 0x89, 0x00, 0xfc, 0x65, 0x1b, 0x2c,
+	0x54, 0x85, 0xd8, 0xd1, 0x59, 0xbd, 0xc1, 0x76, 0x25, 0xae, 0xbc, 0xde, 0x15, 0x9c, 0x0d, 0x16,
+	0x97, 0x61, 0xf8, 0xbb, 0x36, 0x40, 0x93, 0x9e, 0x3e, 0x10, 0xe4, 0xdd, 0x78, 0xac, 0xf9, 0x89,
+	0x7b, 0x19, 0xbb, 0xf4, 0xad, 0xe5, 0x1a, 0xa3, 0x65, 0x9e, 0xc7, 0x55, 0x15, 0xf0, 0x08, 0x9c,
+	0xab, 0x78, 0x69, 0x42, 0xe7, 0x78, 0x37, 0x1e, 0xd4, 0x77, 0xa3, 0x97, 0x33, 0xc5, 0x2e, 0x28,
+	0xa8, 0xd1, 0x32, 0xcf, 0x62, 0x15, 0x84, 0x1e, 0x38, 0x5b, 0x7a, 0x7b, 0x42, 0xe7, 0xf5, 0xce,
+	0xb9, 0x74, 0x94, 0xf2, 0x0e, 0x12, 0x21, 0x76, 0xce, 0x61, 0x09, 0x61, 0xc7, 0xaa, 0xfa, 0x86,
+	0x83, 0x90, 0xae, 0xba, 0xdd, 0x84, 0x26, 0xaa, 0x13, 0xa1, 0x44, 0x9d, 0x88, 0xc0, 0x4f, 0xc0,
+	0x6c, 0xfe, 0xf6, 0x83, 0x2e, 0x72, 0x3d, 0x37, 0xeb, 0xf5, 0x1c, 0x8a, 0x1a, 0x0e, 0x33, 0xd9,
+	0x27, 0x70, 0xfa, 0x3f, 0xb3, 0x59, 0xa4, 0xc7, 0x1a, 0x74, 0x49, 0xef, 0x4c, 0x48, 0x4d, 0x85,
+	0x92, 0xed, 0x90, 0x9f, 0x09, 0x03, 0xa1, 0x0c, 0x7f, 0xdf, 0x06, 0x68, 0xd2, 0x63, 0x09, 0x7a,
+	0x95, 0x6b, 0xfc, 0x58, 0x77, 0x6b, 0x56, 0xac, 0xd1, 0xea, 0x2a, 0xa3, 0x65, 0x5e, 0xb0, 0x2a,
+	0x6b, 0x92, 0x33, 0xaa, 0xea, 0x65, 0x01, 0xbd, 0xae, 0x79, 0x46, 0xe5, 0xe4, 0x5d, 0xfa, 0x42,
+	0xb8, 0x85, 0x2b, 0x70, 0x7e, 0x46, 0x95, 0x61, 0xe8, 0x80, 0xd3, 0xea, 0x4c, 0x5c, 0xd1, 0x5b,
+	0x3d, 0x55, 0x33, 0xa0, 0x8e, 0x7c, 0xde, 0x92, 0x47, 0xcc, 0x4e, 0x44, 0xe9, 0x95, 0x00, 0x7d,
+	0xa1, 0x79, 0x22, 0xa6, 0x2c, 0x41, 0x97, 0x88, 0xf0, 0x13, 0x51, 0x04, 0xe0, 0xe7, 0x00, 0x14,
+	0x91, 0x7a, 0xf4, 0x3d, 0xae, 0xe5, 0x76, 0x9d, 0x96, 0x35, 0xc9, 0x96, 0x59, 0x13, 0x2c, 0x99,
+	0x59, 0x5b, 0xb4, 0x63, 0xd4, 0x90, 0x3e, 0x5a, 0xd4, 0x9b, 0x32, 0x26, 0xd1, 0x64, 0x34, 0x59,
+	0x49, 0x01, 0xb1, 0x29, 0xb3, 0x25, 0x84, 0x4d, 0x99, 0xfc, 0x14, 0x80, 0xde, 0xd0, 0x9b, 0xb2,
+	0xb5, 0x94, 0x25, 0xe8, 0x12, 0x11, 0x36, 0x65, 0xb6, 0x08, 0xc0, 0x6f, 0xda, 0xe0, 0xb5, 0xe9,
+	0xef, 0x01, 0xe8, 0x4d, 0xae, 0xfa, 0xcb, 0x5a, 0x7b, 0x8d, 0x10, 0xbb, 0x9b, 0x09, 0x31, 0x33,
+	0x19, 0x82, 0xf1, 0x36, 0xb9, 0xde, 0x68, 0x99, 0x97, 0x87, 0x93, 0xab, 0xd9, 0x74, 0xc8, 0x51,
+	0x76, 0xf4, 0x96, 0xde, 0x74, 0x6c, 0xa4, 0x2c, 0xa1, 0x17, 0x22, 0xc2, 0xa6, 0x63, 0x28, 0x02,
+	0xdc, 0xc3, 0xa9, 0x8e, 0xcd, 0xa3, 0xef, 0xeb, 0x79, 0x38, 0x99, 0x82, 0x9d, 0x84, 0x5c, 0xd6,
+	0x2c, 0x56, 0x30, 0x0f, 0x67, 0x58, 0x81, 0x33, 0x13, 0x2c, 0x8b, 0xb3, 0xa3, 0x1f, 0xe8, 0x99,
+	0x60, 0x9b, 0xc2, 0x05, 0xb2, 0x59, 0x98, 0x60, 0xd4, 0xce, 0x4d, 0x46, 0x21, 0x14, 0x8f, 0xae,
+	0xea, 0x99, 0x8c, 0x9b, 0x8c, 0x22, 0xc8, 0xcd, 0x8b, 0xcc, 0x64, 0xa4, 0x79, 0x09, 0xc6, 0x00,
+	0x96, 0x03, 0xb8, 0xe8, 0x6d, 0xae, 0x64, 0xbd, 0xd6, 0x9f, 0x60, 0xcc, 0x55, 0x4e, 0x14, 0x9c,
+	0x0a, 0x05, 0x34, 0x5a, 0xe6, 0x19, 0x57, 0xc1, 0xd8, 0xb6, 0x54, 0xc3, 0xbf, 0xe8, 0x89, 0xde,
+	0xb6, 0xe4, 0xf2, 0x37, 0x68, 0x49, 0x65, 0x0e, 0xb1, 0x6d, 0xe9, 0x4a, 0x08, 0x1c, 0x83, 0x33,
+	0x6a, 0xd8, 0x18, 0xbd, 0xc3, 0xd5, 0xf5, 0xea, 0x7d, 0xa6, 0x8c, 0x27, 0xfa, 0x4d, 0x12, 0x66,
+	0xb4, 0xcc, 0xd3, 0xae, 0x0c, 0xc1, 0x3f, 0xb7, 0xc1, 0xe5, 0x29, 0xf1, 0x63, 0xf4, 0x2e, 0xd7,
+	0xfe, 0x69, 0x9d, 0xf6, 0x47, 0xe4, 0xb9, 0x99, 0x4a, 0xe8, 0xa5, 0x02, 0x8a, 0x6e, 0x4c, 0xaa,
+	0x34, 0x5a, 0x26, 0xf2, 0x26, 0xd4, 0x31, 0x17, 0x5c, 0x89, 0x4a, 0xa3, 0x8e, 0xde, 0x9e, 0x7c,
+	0xe4, 0x47, 0xeb, 0x8c, 0x25, 0x74, 0x40, 0x44, 0xd8, 0x9e, 0xf4, 0x44, 0x80, 0x9d, 0xea, 0x45,
+	0x28, 0x1b, 0x2d, 0xe9, 0x9d, 0xea, 0x8f, 0x62, 0x47, 0x70, 0xa7, 0xf2, 0x12, 0x3b, 0xd5, 0xbd,
+	0xac, 0xc0, 0xce, 0x15, 0x39, 0x5e, 0x8d, 0x96, 0xf5, 0xc6, 0xf0, 0x38, 0x65, 0x15, 0x1a, 0x24,
+	0x84, 0x8d, 0xc1, 0x17, 0x01, 0xb6, 0xfb, 0xc4, 0xab, 0xe3, 0x9a, 0xde, 0xee, 0x53, 0xae, 0x0d,
+	0xe9, 0xca, 0x00, 0x41, 0x71, 0x5d, 0x30, 0x4f, 0xa0, 0x2a, 0xe4, 0x8c, 0xde, 0xd7, 0x33, 0x29,
+	0x4c, 0x89, 0x2b, 0x06, 0x83, 0x4a, 0x38, 0x33, 0x29, 0x82, 0x32, 0x0c, 0x9f, 0x81, 0xb3, 0xa5,
+	0xc8, 0x35, 0xba, 0xae, 0xb7, 0x37, 0x4c, 0x4e, 0xec, 0xf9, 0xb6, 0x38, 0x56, 0x19, 0x63, 0x7b,
+	0x23, 0x90, 0x21, 0x66, 0x3f, 0x4a, 0x31, 0x63, 0x74, 0x43, 0xcf, 0x7e, 0xdc, 0x4d, 0x48, 0x85,
+	0x2e, 0x11, 0x60, 0xf6, 0x63, 0x28, 0x94, 0x99, 0x57, 0x51, 0x11, 0xf1, 0x45, 0x37, 0xf5, 0xbc,
+	0x8a, 0x5d, 0x4e, 0xdd, 0xe0, 0x4c, 0x41, 0xa1, 0x8a, 0x32, 0xaf, 0x22, 0x54, 0x41, 0x41, 0xb5,
+	0x18, 0x32, 0x46, 0xb7, 0x9a, 0xa8, 0xde, 0xe2, 0x4c, 0x55, 0xb5, 0x80, 0x16, 0xaa, 0x05, 0x10,
+	0xfe, 0xb5, 0x0d, 0x5e, 0x9d, 0xfa, 0x1c, 0x84, 0x6e, 0xf3, 0x5e, 0xfc, 0x44, 0x6f, 0xa7, 0x50,
+	0xdf, 0xeb, 0x72, 0x19, 0x6b, 0x5c, 0x84, 0xba, 0x6d, 0xaa, 0xaa, 0x8d, 0x96, 0x79, 0xc9, 0x9f,
+	0x58, 0x0b, 0xff, 0xd2, 0x06, 0xdf, 0x9d, 0xf6, 0x7c, 0x81, 0xde, 0xe3, 0xfd, 0xfb, 0xac, 0x7e,
+	0xed, 0x25, 0x32, 0xaa, 0xbb, 0x37, 0xb1, 0xd6, 0x68, 0x99, 0x17, 0x83, 0x49, 0x95, 0xf0, 0x1f,
+	0x6d, 0xf0, 0x86, 0xc6, 0xc3, 0x08, 0xba, 0xc3, 0xfb, 0x68, 0xe9, 0xf6, 0xb1, 0xc7, 0x24, 0x6d,
+	0x31, 0x41, 0xeb, 0xa9, 0x9c, 0x72, 0x4f, 0x27, 0xb4, 0x31, 0x5a, 0xe6, 0xeb, 0xc1, 0xf4, 0x26,
+	0xf0, 0x4f, 0x6d, 0x70, 0x79, 0x4a, 0x26, 0x24, 0xba, 0xcb, 0x7b, 0xbb, 0xab, 0xe9, 0xcf, 0xae,
+	0x52, 0x7b, 0x3b, 0xe5, 0x97, 0x1c, 0x5b, 0xb5, 0xce, 0x68, 0x99, 0xaf, 0xe0, 0xea, 0x2a, 0xb6,
+	0xcb, 0xa5, 0x64, 0x2a, 0xf4, 0x81, 0xde, 0x2e, 0xef, 0x25, 0x24, 0xd1, 0x3f, 0x2a, 0x00, 0xb6,
+	0xcb, 0x2d, 0xa1, 0xcc, 0xce, 0x67, 0x31, 0x9a, 0xfc, 0xa1, 0xde, 0xf9, 0xac, 0x84, 0x92, 0xa5,
+	0x38, 0x32, 0x18, 0x16, 0x41, 0x64, 0x17, 0x9c, 0x51, 0x1f, 0x9b, 0xd0, 0x3d, 0x3d, 0x33, 0x65,
+	0x97, 0xf3, 0x76, 0xc5, 0x60, 0x94, 0x0c, 0x31, 0x33, 0x25, 0x94, 0x10, 0x6e, 0xc4, 0x56, 0xbf,
+	0x8c, 0xa1, 0xfb, 0x7a, 0x46, 0x6c, 0xa2, 0xa2, 0xc2, 0xd9, 0xab, 0xaa, 0x60, 0x46, 0x6c, 0x58,
+	0x81, 0xc3, 0x3f, 0xb4, 0xc1, 0xc5, 0x89, 0xe9, 0x7b, 0xe8, 0xa3, 0x66, 0xbe, 0x77, 0xc5, 0x44,
+	0x54, 0x57, 0x89, 0xbe, 0xb7, 0x5c, 0x03, 0x7f, 0xdb, 0x06, 0xaf, 0x4c, 0xc8, 0xb2, 0x43, 0x5d,
+	0xbd, 0x68, 0x55, 0x2f, 0xa7, 0x77, 0x15, 0xcf, 0xa2, 0xb2, 0xc6, 0x68, 0x99, 0xe7, 0xad, 0xaa,
+	0x0a, 0xf8, 0x15, 0x98, 0x13, 0x93, 0x6f, 0xd0, 0xaa, 0x5e, 0xec, 0xdd, 0xe0, 0x9c, 0x42, 0xab,
+	0x50, 0x36, 0x5a, 0xe6, 0xc9, 0xbd, 0xa2, 0xc8, 0x9d, 0x48, 0x29, 0xd9, 0x0d, 0xf5, 0x34, 0x9d,
+	0xc8, 0x94, 0x25, 0x39, 0xac, 0x05, 0xc2, 0x9d, 0x48, 0x11, 0x80, 0x5f, 0x83, 0x85, 0xaa, 0x27,
+	0x7c, 0xb4, 0xa6, 0x17, 0x77, 0xdf, 0xe1, 0xdc, 0x8d, 0x84, 0x5a, 0x28, 0x2d, 0xc3, 0x46, 0xcb,
+	0x84, 0xe3, 0x12, 0xca, 0xd4, 0x57, 0x25, 0x98, 0xa2, 0x75, 0x3d, 0xf5, 0xd9, 0x32, 0x52, 0x22,
+	0xcd, 0x65, 0x98, 0xa9, 0xb7, 0x4a, 0x28, 0xb3, 0x4f, 0x8b, 0x14, 0x3c, 0xb4, 0xa1, 0x67, 0x9f,
+	0x32, 0x15, 0x85, 0xae, 0xbc, 0xc4, 0xec, 0x53, 0x92, 0x15, 0x98, 0x57, 0x55, 0xce, 0x29, 0x42,
+	0x0f, 0xf4, 0xbc, 0xaa, 0x87, 0x09, 0x73, 0xc7, 0xc1, 0xc2, 0x22, 0x55, 0x41, 0xe6, 0x55, 0xed,
+	0x2b, 0x18, 0x77, 0x3a, 0xa6, 0x64, 0x43, 0x21, 0x43, 0xcf, 0xe9, 0x10, 0x74, 0x95, 0x63, 0xdb,
+	0x93, 0x2a, 0x99, 0xd3, 0xb1, 0x3f, 0xa1, 0x8e, 0xdf, 0xab, 0x1a, 0xc9, 0x4a, 0x68, 0x53, 0xef,
+	0x5e, 0x15, 0xfa, 0xf0, 0x28, 0x15, 0x94, 0x42, 0x95, 0xfd, 0xac, 0x6a, 0xc3, 0xee, 0xd5, 0xfd,
+	0xe9, 0x4d, 0xf8, 0xbd, 0x3a, 0x25, 0x3d, 0x0d, 0xfd, 0x58, 0xef, 0x5e, 0x15, 0x7a, 0x52, 0x7a,
+	0x15, 0x99, 0x50, 0xc7, 0xee, 0xd5, 0xfd, 0xea, 0x2a, 0xf8, 0xc7, 0x36, 0xb8, 0x34, 0x39, 0x73,
+	0x0c, 0x3d, 0x6c, 0xdc, 0xa9, 0x69, 0x53, 0xa7, 0x4c, 0x99, 0xd8, 0x29, 0x69, 0xaa, 0x7e, 0xd3,
+	0x06, 0xaf, 0x4c, 0x48, 0x86, 0x43, 0x5b, 0x7a, 0x57, 0x97, 0xa0, 0x75, 0xd3, 0x26, 0xb8, 0xb2,
+	0x3b, 0x79, 0x05, 0xbb, 0xba, 0xf6, 0x2b, 0x70, 0x6e, 0xff, 0x4e, 0xfd, 0xe9, 0x0b, 0xda, 0xd6,
+	0xb3, 0x7f, 0xbb, 0x89, 0x90, 0xe4, 0x85, 0x68, 0x27, 0x15, 0x21, 0x18, 0x44, 0x13, 0xab, 0x99,
+	0xfd, 0x8b, 0x27, 0xd6, 0xf2, 0x27, 0x70, 0x39, 0xbd, 0x03, 0x3d, 0xd2, 0x7c, 0x02, 0x0f, 0x49,
+	0xb0, 0x45, 0xc5, 0x37, 0x7f, 0x09, 0xe1, 0x4f, 0xe0, 0x22, 0xc0, 0xdc, 0x90, 0x8a, 0x24, 0x7a,
+	0xf4, 0x58, 0xcf, 0x0d, 0xe9, 0x71, 0xea, 0x2e, 0x67, 0x0a, 0x87, 0xab, 0x8a, 0x32, 0x37, 0xc4,
+	0x52, 0x41, 0x76, 0xb4, 0x16, 0x79, 0xc6, 0x68, 0x47, 0xef, 0x68, 0xdd, 0x20, 0xa2, 0x61, 0x9c,
+	0x97, 0xd8, 0xd1, 0x3a, 0xcc, 0x0a, 0xf0, 0x9f, 0x6d, 0xf0, 0xa6, 0x4e, 0x1e, 0x2d, 0xfa, 0x98,
+	0x2b, 0x25, 0xb5, 0x09, 0x2f, 0xc4, 0xff, 0x84, 0x8b, 0xea, 0xa5, 0x92, 0x76, 0x73, 0x41, 0x45,
+	0x5f, 0xea, 0x1a, 0x19, 0x2d, 0xf3, 0xca, 0xa8, 0xa6, 0x0d, 0xfb, 0xf2, 0x4a, 0x2a, 0x35, 0xda,
+	0xd5, 0x8c, 0x86, 0x12, 0x62, 0x6f, 0x46, 0xc4, 0x95, 0x27, 0x27, 0x47, 0x78, 0x34, 0x54, 0x04,
+	0xd8, 0x97, 0xaf, 0xf8, 0x75, 0x0b, 0xfa, 0x4c, 0xef, 0xcb, 0xaf, 0x26, 0xd4, 0x5d, 0xc6, 0x14,
+	0x1f, 0x6b, 0x14, 0x94, 0x7d, 0xf9, 0x81, 0x0a, 0xf2, 0xe3, 0x69, 0xf2, 0x8f, 0x13, 0xd0, 0xe7,
+	0x7a, 0xc7, 0x53, 0xf6, 0x5e, 0xd0, 0xe3, 0x02, 0xb6, 0xa8, 0xb7, 0x5f, 0x7e, 0x4b, 0x50, 0xea,
+	0xd8, 0xf1, 0x64, 0x55, 0x57, 0xf1, 0x8b, 0x71, 0xca, 0x2f, 0x10, 0xd0, 0x97, 0x7a, 0x17, 0x63,
+	0xa6, 0x79, 0x3b, 0x91, 0x50, 0xdd, 0x2d, 0xb5, 0x92, 0x5d, 0x8c, 0xd6, 0x84, 0x3a, 0x66, 0x28,
+	0x94, 0x13, 0xe5, 0xd1, 0x53, 0x3d, 0x43, 0x81, 0x2d, 0x82, 0xed, 0x84, 0x28, 0xaf, 0x0c, 0x11,
+	0x64, 0x86, 0xc2, 0x50, 0xc1, 0xf8, 0xc9, 0x50, 0xfe, 0x29, 0x07, 0xfa, 0xa9, 0xe6, 0xc9, 0x90,
+	0x52, 0xe5, 0xfd, 0x5a, 0x42, 0xf9, 0xc9, 0xa0, 0x82, 0xf0, 0x80, 0x3f, 0xf6, 0xaa, 0xbf, 0x7f,
+	0x43, 0x3f, 0xd3, 0x1b, 0x72, 0x7a, 0x13, 0xca, 0x9a, 0x55, 0x90, 0x0d, 0x19, 0x2b, 0x18, 0x1f,
+	0x72, 0xf9, 0x67, 0x50, 0xe8, 0x2b, 0xcd, 0x21, 0xa7, 0x54, 0x65, 0xc8, 0x2a, 0xca, 0x87, 0xac,
+	0x82, 0xab, 0x73, 0x62, 0xa6, 0xdc, 0xe2, 0xdf, 0x67, 0xc0, 0x29, 0x29, 0xc7, 0x0c, 0xae, 0x81,
+	0xd3, 0x45, 0xc8, 0x86, 0x7a, 0x36, 0x39, 0x4c, 0xd3, 0xe9, 0x2e, 0x67, 0xdd, 0xca, 0x52, 0xfe,
+	0x3a, 0x9b, 0x5e, 0x74, 0xeb, 0x46, 0x92, 0xe3, 0x36, 0x9f, 0x73, 0x36, 0x19, 0x05, 0x7a, 0xe0,
+	0x5c, 0xe2, 0x09, 0x8f, 0x71, 0xb4, 0xd7, 0x27, 0x0e, 0x71, 0x89, 0x17, 0x85, 0x68, 0x86, 0xe7,
+	0xfd, 0xdd, 0x6b, 0x94, 0xf5, 0x96, 0x38, 0xc4, 0x3b, 0x38, 0xda, 0x5b, 0x4f, 0xc4, 0x98, 0x67,
+	0x87, 0x0a, 0x12, 0x5e, 0xb2, 0xc1, 0x19, 0xb5, 0x19, 0x7c, 0x15, 0x24, 0xde, 0x73, 0xdf, 0xc3,
+	0x6e, 0x92, 0x13, 0x38, 0x6b, 0xce, 0x72, 0xe4, 0x11, 0x76, 0x09, 0xbc, 0x06, 0x5e, 0x4a, 0x86,
+	0x37, 0x53, 0x3f, 0xbc, 0xa4, 0xe5, 0xe2, 0x37, 0x33, 0x60, 0x4e, 0xcc, 0xa3, 0x83, 0x37, 0xc0,
+	0x85, 0xd8, 0x1b, 0xc7, 0x03, 0x87, 0x86, 0x7b, 0xd9, 0x57, 0x2c, 0x52, 0x10, 0x67, 0xcd, 0x05,
+	0xa1, 0xb6, 0x48, 0xb3, 0x1b, 0x03, 0x94, 0x3a, 0x3a, 0x07, 0xd4, 0x77, 0x92, 0x99, 0xce, 0xb2,
+	0xf9, 0x92, 0xce, 0xdc, 0xd2, 0x73, 0x76, 0x9e, 0x64, 0xf4, 0x2c, 0xaf, 0xef, 0xc2, 0xb8, 0x12,
+	0x87, 0x3f, 0x07, 0x17, 0x14, 0xd7, 0x2a, 0xd3, 0x97, 0x64, 0x32, 0xde, 0x68, 0xe4, 0x5c, 0x65,
+	0xda, 0x16, 0xc6, 0x15, 0xe8, 0xe2, 0x7f, 0xdb, 0xe0, 0x42, 0x75, 0xf7, 0xe0, 0x3d, 0x70, 0x99,
+	0x1c, 0xa6, 0xa9, 0x4d, 0x69, 0x7f, 0x6c, 0x12, 0x5a, 0x01, 0x1d, 0xf3, 0x9c, 0xc8, 0x24, 0xdf,
+	0xf2, 0x62, 0xd6, 0x24, 0x11, 0xb2, 0x56, 0x34, 0x80, 0x6b, 0xe0, 0xd8, 0x3e, 0x39, 0x4a, 0x73,
+	0x27, 0x57, 0xea, 0xb2, 0x2f, 0x95, 0x4e, 0x3c, 0x24, 0x47, 0x26, 0xa3, 0xc3, 0x65, 0xb0, 0xa0,
+	0xf6, 0x82, 0xaf, 0x90, 0x97, 0xb8, 0x7a, 0x28, 0xab, 0xe7, 0x4b, 0xe5, 0x0d, 0x70, 0x8a, 0x86,
+	0x7d, 0x72, 0x48, 0xdc, 0x71, 0x44, 0x07, 0x0e, 0x41, 0x2f, 0x5f, 0x69, 0x5f, 0x3d, 0x61, 0xce,
+	0xd1, 0x70, 0x3d, 0xc7, 0x16, 0x5f, 0x80, 0x85, 0xaa, 0x59, 0x82, 0x83, 0xdc, 0xad, 0x8d, 0xfc,
+	0x31, 0xb5, 0xfa, 0xc4, 0x8b, 0x02, 0x4a, 0xb2, 0x1c, 0xd8, 0x65, 0xbd, 0x51, 0x7c, 0xc2, 0xa8,
+	0xeb, 0x5e, 0x14, 0x1c, 0x65, 0xbe, 0x6b, 0x8e, 0x50, 0x12, 0xae, 0xfe, 0xab, 0x0d, 0x16, 0x2d,
+	0xdf, 0xad, 0xf9, 0x8a, 0xab, 0x27, 0xf9, 0x1a, 0x0c, 0x77, 0xd8, 0x0a, 0xdf, 0x69, 0x7f, 0xb1,
+	0x96, 0x36, 0x1f, 0xf9, 0x0e, 0xf6, 0x46, 0x1d, 0x3f, 0x18, 0x2d, 0x8d, 0x88, 0xc7, 0xd7, 0x7f,
+	0x96, 0x09, 0x3c, 0xa6, 0xe1, 0xa4, 0xc4, 0xe0, 0xbb, 0xc9, 0x9f, 0x6f, 0x66, 0x8e, 0x3d, 0xe8,
+	0x76, 0xff, 0x36, 0xf3, 0x5a, 0x92, 0x91, 0xdb, 0xe9, 0xda, 0x42, 0xde, 0x6e, 0xe7, 0xc9, 0x72,
+	0xb2, 0x99, 0xc3, 0xff, 0x64, 0x0d, 0x9e, 0x76, 0xed, 0xf0, 0x69, 0xde, 0xe0, 0xe9, 0x93, 0xe5,
+	0xa7, 0x49, 0x83, 0xc1, 0xcb, 0x5c, 0xf1, 0xf5, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x72, 0x91,
+	0xd2, 0x81, 0xf2, 0x3e, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/feed_attribute_reference_error.pb.go b/googleapis/ads/googleads/v0/errors/feed_attribute_reference_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ec1004dd56a8107e630d09cda8456a4a956dec4c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/feed_attribute_reference_error.pb.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/feed_attribute_reference_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible feed attribute reference errors.
+type FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError int32
+
+const (
+	// Enum unspecified.
+	FeedAttributeReferenceErrorEnum_UNSPECIFIED FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 0
+	// The received error code is not known in this version.
+	FeedAttributeReferenceErrorEnum_UNKNOWN FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 1
+	// A feed referenced by ID has been deleted.
+	FeedAttributeReferenceErrorEnum_CANNOT_REFERENCE_DELETED_FEED FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 2
+	// There is no active feed with the given name.
+	FeedAttributeReferenceErrorEnum_INVALID_FEED_NAME FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 3
+	// There is no feed attribute in an active feed with the given name.
+	FeedAttributeReferenceErrorEnum_INVALID_FEED_ATTRIBUTE_NAME FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError = 4
+)
+
+var FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CANNOT_REFERENCE_DELETED_FEED",
+	3: "INVALID_FEED_NAME",
+	4: "INVALID_FEED_ATTRIBUTE_NAME",
+}
+var FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"CANNOT_REFERENCE_DELETED_FEED": 2,
+	"INVALID_FEED_NAME":             3,
+	"INVALID_FEED_ATTRIBUTE_NAME":   4,
+}
+
+func (x FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError) String() string {
+	return proto.EnumName(FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_name, int32(x))
+}
+func (FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_attribute_reference_error_a22b1b7f38948ef0, []int{0, 0}
+}
+
+// Container for enum describing possible feed attribute reference errors.
+type FeedAttributeReferenceErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedAttributeReferenceErrorEnum) Reset()         { *m = FeedAttributeReferenceErrorEnum{} }
+func (m *FeedAttributeReferenceErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedAttributeReferenceErrorEnum) ProtoMessage()    {}
+func (*FeedAttributeReferenceErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_attribute_reference_error_a22b1b7f38948ef0, []int{0}
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttributeReferenceErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttributeReferenceErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedAttributeReferenceErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttributeReferenceErrorEnum.Merge(dst, src)
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedAttributeReferenceErrorEnum.Size(m)
+}
+func (m *FeedAttributeReferenceErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttributeReferenceErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttributeReferenceErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedAttributeReferenceErrorEnum)(nil), "google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError", FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_name, FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/feed_attribute_reference_error.proto", fileDescriptor_feed_attribute_reference_error_a22b1b7f38948ef0)
+}
+
+var fileDescriptor_feed_attribute_reference_error_a22b1b7f38948ef0 = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xd1, 0x4e, 0xf2, 0x30,
+	0x14, 0xc7, 0xbf, 0xc1, 0x17, 0x4d, 0xca, 0x85, 0x73, 0x89, 0x57, 0x44, 0x50, 0x1e, 0xa0, 0x5b,
+	0xe2, 0xa5, 0x57, 0x65, 0x3b, 0x23, 0x8b, 0x58, 0xc8, 0x1c, 0x98, 0x98, 0x25, 0xcd, 0x60, 0xa5,
+	0x21, 0x81, 0x95, 0xb4, 0x83, 0x47, 0xf1, 0x01, 0xbc, 0xf4, 0x11, 0x7c, 0x04, 0x1f, 0xc0, 0xe7,
+	0x31, 0x5b, 0x1d, 0x89, 0x17, 0x72, 0xd5, 0x7f, 0x4e, 0x7f, 0xfd, 0x9d, 0xf6, 0x14, 0xf9, 0x42,
+	0x4a, 0xb1, 0xe1, 0x6e, 0x96, 0x6b, 0xd7, 0xc4, 0x2a, 0x1d, 0x3c, 0x97, 0x2b, 0x25, 0x95, 0x76,
+	0x57, 0x9c, 0xe7, 0x2c, 0x2b, 0x4b, 0xb5, 0x5e, 0xec, 0x4b, 0xce, 0x14, 0x5f, 0x71, 0xc5, 0x8b,
+	0x25, 0x67, 0xf5, 0x3e, 0xde, 0x29, 0x59, 0x4a, 0xa7, 0x67, 0x4e, 0xe2, 0x2c, 0xd7, 0xf8, 0x28,
+	0xc1, 0x07, 0x0f, 0x1b, 0xc9, 0xe0, 0xc3, 0x42, 0xfd, 0x90, 0xf3, 0x9c, 0x34, 0x9e, 0xb8, 0xd1,
+	0x40, 0x05, 0x40, 0xb1, 0xdf, 0x0e, 0x5e, 0x2d, 0xd4, 0x3d, 0xc1, 0x38, 0x17, 0xa8, 0x33, 0xa3,
+	0x4f, 0x53, 0xf0, 0xa3, 0x30, 0x82, 0xc0, 0xfe, 0xe7, 0x74, 0xd0, 0xf9, 0x8c, 0x3e, 0xd0, 0xc9,
+	0x33, 0xb5, 0x2d, 0xe7, 0x16, 0x5d, 0xfb, 0x84, 0xd2, 0x49, 0xc2, 0x62, 0x08, 0x21, 0x06, 0xea,
+	0x03, 0x0b, 0x60, 0x0c, 0x09, 0x04, 0x2c, 0x04, 0x08, 0xec, 0x96, 0x73, 0x85, 0x2e, 0x23, 0x3a,
+	0x27, 0xe3, 0xc8, 0x54, 0x18, 0x25, 0x8f, 0x60, 0xb7, 0x9d, 0x3e, 0xea, 0xfe, 0x2a, 0x93, 0x24,
+	0x89, 0xa3, 0xe1, 0x2c, 0x01, 0x03, 0xfc, 0x1f, 0x7e, 0x59, 0x68, 0xb0, 0x94, 0x5b, 0x7c, 0xfa,
+	0x8d, 0xc3, 0x9b, 0x13, 0x97, 0x9f, 0x56, 0x53, 0x9a, 0x5a, 0x2f, 0xc1, 0x8f, 0x43, 0xc8, 0x4d,
+	0x56, 0x08, 0x2c, 0x95, 0x70, 0x05, 0x2f, 0xea, 0x19, 0x36, 0xc3, 0xdf, 0xad, 0xf5, 0x5f, 0x7f,
+	0x71, 0x6f, 0x96, 0xb7, 0x56, 0x7b, 0x44, 0xc8, 0x7b, 0xab, 0x37, 0x32, 0x32, 0x92, 0x6b, 0x6c,
+	0x62, 0x95, 0xe6, 0x1e, 0xae, 0x5b, 0xea, 0xcf, 0x06, 0x48, 0x49, 0xae, 0xd3, 0x23, 0x90, 0xce,
+	0xbd, 0xd4, 0x00, 0x8b, 0xb3, 0xba, 0xf1, 0xdd, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x51,
+	0xca, 0x0c, 0x03, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/feed_error.pb.go b/googleapis/ads/googleads/v0/errors/feed_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5924e2412066cfbebed3b210653e38cadc73869c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/feed_error.pb.go
@@ -0,0 +1,202 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/feed_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible feed errors.
+type FeedErrorEnum_FeedError int32
+
+const (
+	// Enum unspecified.
+	FeedErrorEnum_UNSPECIFIED FeedErrorEnum_FeedError = 0
+	// The received error code is not known in this version.
+	FeedErrorEnum_UNKNOWN FeedErrorEnum_FeedError = 1
+	// The names of the FeedAttributes must be unique.
+	FeedErrorEnum_ATTRIBUTE_NAMES_NOT_UNIQUE FeedErrorEnum_FeedError = 2
+	// The attribute list must be an exact copy of the existing list if the
+	// attribute ID's are present.
+	FeedErrorEnum_ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES FeedErrorEnum_FeedError = 3
+	// Cannot specify USER origin for a system generated feed.
+	FeedErrorEnum_CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED FeedErrorEnum_FeedError = 4
+	// Cannot specify GOOGLE origin for a non-system generated feed.
+	FeedErrorEnum_CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED FeedErrorEnum_FeedError = 5
+	// Cannot specify feed attributes for system feed.
+	FeedErrorEnum_CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED FeedErrorEnum_FeedError = 6
+	// Cannot update FeedAttributes on feed with origin GOOGLE.
+	FeedErrorEnum_CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE FeedErrorEnum_FeedError = 7
+	// The given ID refers to a removed Feed. Removed Feeds are immutable.
+	FeedErrorEnum_FEED_REMOVED FeedErrorEnum_FeedError = 8
+	// The origin of the feed is not valid for the client.
+	FeedErrorEnum_INVALID_ORIGIN_VALUE FeedErrorEnum_FeedError = 9
+	// A user can only create and modify feeds with USER origin.
+	FeedErrorEnum_FEED_ORIGIN_IS_NOT_USER FeedErrorEnum_FeedError = 10
+	// Invalid auth token for the given email.
+	FeedErrorEnum_INVALID_AUTH_TOKEN_FOR_EMAIL FeedErrorEnum_FeedError = 11
+	// Invalid email specified.
+	FeedErrorEnum_INVALID_EMAIL FeedErrorEnum_FeedError = 12
+	// Feed name matches that of another active Feed.
+	FeedErrorEnum_DUPLICATE_FEED_NAME FeedErrorEnum_FeedError = 13
+	// Name of feed is not allowed.
+	FeedErrorEnum_INVALID_FEED_NAME FeedErrorEnum_FeedError = 14
+	// Missing OAuthInfo.
+	FeedErrorEnum_MISSING_OAUTH_INFO FeedErrorEnum_FeedError = 15
+	// New FeedAttributes must not affect the unique key.
+	FeedErrorEnum_NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY FeedErrorEnum_FeedError = 16
+	// Too many FeedAttributes for a Feed.
+	FeedErrorEnum_TOO_MANY_ATTRIBUTES FeedErrorEnum_FeedError = 17
+	// The business account is not valid.
+	FeedErrorEnum_INVALID_BUSINESS_ACCOUNT FeedErrorEnum_FeedError = 18
+	// Business account cannot access Google My Business account.
+	FeedErrorEnum_BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT FeedErrorEnum_FeedError = 19
+	// Invalid chain ID provided for affiliate location feed.
+	FeedErrorEnum_INVALID_AFFILIATE_CHAIN_ID FeedErrorEnum_FeedError = 20
+)
+
+var FeedErrorEnum_FeedError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ATTRIBUTE_NAMES_NOT_UNIQUE",
+	3:  "ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES",
+	4:  "CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED",
+	5:  "CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED",
+	6:  "CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED",
+	7:  "CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE",
+	8:  "FEED_REMOVED",
+	9:  "INVALID_ORIGIN_VALUE",
+	10: "FEED_ORIGIN_IS_NOT_USER",
+	11: "INVALID_AUTH_TOKEN_FOR_EMAIL",
+	12: "INVALID_EMAIL",
+	13: "DUPLICATE_FEED_NAME",
+	14: "INVALID_FEED_NAME",
+	15: "MISSING_OAUTH_INFO",
+	16: "NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY",
+	17: "TOO_MANY_ATTRIBUTES",
+	18: "INVALID_BUSINESS_ACCOUNT",
+	19: "BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT",
+	20: "INVALID_AFFILIATE_CHAIN_ID",
+}
+var FeedErrorEnum_FeedError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"ATTRIBUTE_NAMES_NOT_UNIQUE": 2,
+	"ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES":      3,
+	"CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED":       4,
+	"CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED": 5,
+	"CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED":   6,
+	"CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE": 7,
+	"FEED_REMOVED":                                    8,
+	"INVALID_ORIGIN_VALUE":                            9,
+	"FEED_ORIGIN_IS_NOT_USER":                         10,
+	"INVALID_AUTH_TOKEN_FOR_EMAIL":                    11,
+	"INVALID_EMAIL":                                   12,
+	"DUPLICATE_FEED_NAME":                             13,
+	"INVALID_FEED_NAME":                               14,
+	"MISSING_OAUTH_INFO":                              15,
+	"NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY":      16,
+	"TOO_MANY_ATTRIBUTES":                             17,
+	"INVALID_BUSINESS_ACCOUNT":                        18,
+	"BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT": 19,
+	"INVALID_AFFILIATE_CHAIN_ID":                      20,
+}
+
+func (x FeedErrorEnum_FeedError) String() string {
+	return proto.EnumName(FeedErrorEnum_FeedError_name, int32(x))
+}
+func (FeedErrorEnum_FeedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_error_f116f5801b32d835, []int{0, 0}
+}
+
+// Container for enum describing possible feed errors.
+type FeedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedErrorEnum) Reset()         { *m = FeedErrorEnum{} }
+func (m *FeedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedErrorEnum) ProtoMessage()    {}
+func (*FeedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_error_f116f5801b32d835, []int{0}
+}
+func (m *FeedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedErrorEnum.Merge(dst, src)
+}
+func (m *FeedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedErrorEnum.Size(m)
+}
+func (m *FeedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedErrorEnum)(nil), "google.ads.googleads.v0.errors.FeedErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FeedErrorEnum_FeedError", FeedErrorEnum_FeedError_name, FeedErrorEnum_FeedError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/feed_error.proto", fileDescriptor_feed_error_f116f5801b32d835)
+}
+
+var fileDescriptor_feed_error_f116f5801b32d835 = []byte{
+	// 570 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xdd, 0x4e, 0xd4, 0x40,
+	0x14, 0xc7, 0x05, 0x04, 0x64, 0xf8, 0x1a, 0x06, 0x14, 0xa2, 0x84, 0x18, 0x2e, 0x35, 0x69, 0x37,
+	0xe2, 0x9d, 0x57, 0xb3, 0xed, 0x69, 0x77, 0x42, 0x3b, 0x53, 0x3b, 0x33, 0x8b, 0x6b, 0x36, 0x99,
+	0xa0, 0xad, 0x8d, 0x09, 0x50, 0xb2, 0x55, 0x1e, 0xc8, 0x4b, 0x9f, 0xc3, 0x2b, 0xe3, 0x33, 0xf8,
+	0x2c, 0x66, 0xfa, 0xc5, 0x0a, 0xd1, 0xab, 0x3d, 0x7b, 0xe6, 0xf7, 0xef, 0x7f, 0xce, 0x39, 0x73,
+	0x90, 0x5b, 0x94, 0x65, 0x71, 0x91, 0xbb, 0xe7, 0x59, 0xd5, 0x86, 0x36, 0xba, 0x19, 0xb8, 0xf9,
+	0x6c, 0x56, 0xce, 0x2a, 0xf7, 0x53, 0x9e, 0x67, 0xa6, 0x8e, 0x9d, 0xeb, 0x59, 0xf9, 0xa5, 0x24,
+	0x47, 0x0d, 0xe5, 0x9c, 0x67, 0x95, 0xd3, 0x0b, 0x9c, 0x9b, 0x81, 0xd3, 0x08, 0x8e, 0x7f, 0x2f,
+	0xa3, 0xcd, 0x20, 0xcf, 0x33, 0xb0, 0x7f, 0xe1, 0xea, 0xeb, 0xe5, 0xf1, 0xaf, 0x65, 0xb4, 0xd6,
+	0x67, 0xc8, 0x36, 0x5a, 0xd7, 0x5c, 0x26, 0xe0, 0xb1, 0x80, 0x81, 0x8f, 0x1f, 0x90, 0x75, 0xb4,
+	0xaa, 0xf9, 0x29, 0x17, 0x67, 0x1c, 0x2f, 0x90, 0x23, 0xf4, 0x94, 0x2a, 0x95, 0xb2, 0xa1, 0x56,
+	0x60, 0x38, 0x8d, 0x41, 0x1a, 0x2e, 0x94, 0xd1, 0x9c, 0xbd, 0xd5, 0x80, 0x17, 0x89, 0x8b, 0x5e,
+	0xf6, 0xe7, 0xd2, 0xf8, 0xa2, 0x3e, 0x8d, 0xa9, 0xf2, 0x46, 0x06, 0xde, 0x31, 0xa9, 0x18, 0x0f,
+	0xcd, 0x2d, 0x80, 0x97, 0x88, 0x83, 0x5e, 0x78, 0x94, 0x5b, 0xaa, 0xf1, 0x9c, 0x18, 0x2d, 0x21,
+	0x35, 0x22, 0x65, 0x21, 0xe3, 0x26, 0x10, 0xa9, 0x91, 0x13, 0xa9, 0x20, 0x36, 0x01, 0x80, 0x8f,
+	0x1f, 0x92, 0xd7, 0x68, 0x70, 0x87, 0x0f, 0x85, 0x08, 0x23, 0x98, 0x57, 0x70, 0xc1, 0xff, 0x52,
+	0x2d, 0x93, 0x57, 0xc8, 0xb9, 0xa3, 0xb2, 0x07, 0x73, 0x37, 0xb9, 0xe7, 0xb4, 0x32, 0xe7, 0xa4,
+	0x13, 0x9f, 0x2a, 0xb8, 0x27, 0x39, 0x63, 0x6a, 0xd4, 0xd9, 0x36, 0x97, 0xc0, 0xab, 0x04, 0xa3,
+	0x8d, 0x9a, 0x4b, 0x21, 0x16, 0x63, 0xf0, 0xf1, 0x23, 0x72, 0x80, 0xf6, 0x18, 0x1f, 0xd3, 0x88,
+	0xf9, 0x1d, 0x3c, 0xa6, 0x91, 0x06, 0xbc, 0x46, 0x9e, 0xa1, 0xfd, 0x9a, 0x6d, 0xd3, 0xac, 0xed,
+	0xa5, 0x84, 0x14, 0x23, 0xf2, 0x1c, 0x1d, 0x76, 0x32, 0xaa, 0xd5, 0xc8, 0x28, 0x71, 0x0a, 0x4d,
+	0x79, 0x10, 0x53, 0x16, 0xe1, 0x75, 0xb2, 0x83, 0x36, 0x3b, 0xa2, 0x49, 0x6d, 0x90, 0x7d, 0xb4,
+	0xeb, 0xeb, 0x24, 0x62, 0x5e, 0x7f, 0x5f, 0x3b, 0x23, 0xbc, 0x49, 0x1e, 0xa3, 0x9d, 0x8e, 0xbd,
+	0x4d, 0x6f, 0x91, 0x27, 0x88, 0xc4, 0x4c, 0x4a, 0x3b, 0x15, 0x51, 0xbb, 0x30, 0x1e, 0x08, 0xbc,
+	0x6d, 0xa7, 0xc2, 0xe1, 0xec, 0xb6, 0x58, 0xd3, 0x76, 0x62, 0x08, 0x26, 0xa1, 0xa9, 0x32, 0x22,
+	0x68, 0x47, 0x6e, 0x4e, 0x61, 0x82, 0xb1, 0xf5, 0x55, 0x42, 0x98, 0x98, 0xf2, 0xc9, 0xfc, 0x78,
+	0x77, 0xc8, 0x21, 0x3a, 0xe8, 0x7c, 0x87, 0x5a, 0x32, 0x0e, 0x52, 0x1a, 0xea, 0x79, 0x42, 0x73,
+	0x85, 0x09, 0x39, 0x41, 0xee, 0xdd, 0x6c, 0xe7, 0x44, 0x3d, 0xcf, 0x66, 0x23, 0xe1, 0x51, 0xc5,
+	0x04, 0xef, 0x45, 0xbb, 0xf6, 0x09, 0xf6, 0x8d, 0x09, 0x02, 0x16, 0x31, 0x5b, 0xab, 0x37, 0xa2,
+	0xb6, 0x83, 0x3e, 0xde, 0x1b, 0xfe, 0x58, 0x40, 0xc7, 0x1f, 0xcb, 0x4b, 0xe7, 0xff, 0x7b, 0x30,
+	0xdc, 0xea, 0x9f, 0x7c, 0x62, 0xf7, 0x26, 0x59, 0x78, 0xef, 0xb7, 0x8a, 0xa2, 0xbc, 0x38, 0xbf,
+	0x2a, 0x9c, 0x72, 0x56, 0xb8, 0x45, 0x7e, 0x55, 0x6f, 0x55, 0xb7, 0x7a, 0xd7, 0x9f, 0xab, 0x7f,
+	0x6d, 0xe2, 0x9b, 0xe6, 0xe7, 0xdb, 0xe2, 0x52, 0x48, 0xe9, 0xf7, 0xc5, 0xa3, 0xb0, 0xf9, 0x18,
+	0xcd, 0x2a, 0xa7, 0x09, 0x6d, 0x34, 0x1e, 0x38, 0xb5, 0x65, 0xf5, 0xb3, 0x03, 0xa6, 0x34, 0xab,
+	0xa6, 0x3d, 0x30, 0x1d, 0x0f, 0xa6, 0x0d, 0xf0, 0x61, 0xa5, 0x36, 0x3e, 0xf9, 0x13, 0x00, 0x00,
+	0xff, 0xff, 0x33, 0xfd, 0x24, 0x7d, 0x01, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/feed_item_error.pb.go b/googleapis/ads/googleads/v0/errors/feed_item_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..98bc5b83a54f5811181f6fb46eb8bad6ea01199b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/feed_item_error.pb.go
@@ -0,0 +1,153 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/feed_item_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible feed item errors.
+type FeedItemErrorEnum_FeedItemError int32
+
+const (
+	// Enum unspecified.
+	FeedItemErrorEnum_UNSPECIFIED FeedItemErrorEnum_FeedItemError = 0
+	// The received error code is not known in this version.
+	FeedItemErrorEnum_UNKNOWN FeedItemErrorEnum_FeedItemError = 1
+	// Cannot convert the feed attribute value from string to its real type.
+	FeedItemErrorEnum_CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING FeedItemErrorEnum_FeedItemError = 2
+	// Cannot operate on removed feed item.
+	FeedItemErrorEnum_CANNOT_OPERATE_ON_REMOVED_FEED_ITEM FeedItemErrorEnum_FeedItemError = 3
+	// Date time zone does not match the account's time zone.
+	FeedItemErrorEnum_DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE FeedItemErrorEnum_FeedItemError = 4
+	// Feed item with the key attributes could not be found.
+	FeedItemErrorEnum_KEY_ATTRIBUTES_NOT_FOUND FeedItemErrorEnum_FeedItemError = 5
+	// Url feed attribute value is not valid.
+	FeedItemErrorEnum_INVALID_URL FeedItemErrorEnum_FeedItemError = 6
+	// Some key attributes are missing.
+	FeedItemErrorEnum_MISSING_KEY_ATTRIBUTES FeedItemErrorEnum_FeedItemError = 7
+	// Feed item has same key attributes as another feed item.
+	FeedItemErrorEnum_KEY_ATTRIBUTES_NOT_UNIQUE FeedItemErrorEnum_FeedItemError = 8
+	// Cannot modify key attributes on an existing feed item.
+	FeedItemErrorEnum_CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE FeedItemErrorEnum_FeedItemError = 9
+	// The feed attribute value is too large.
+	FeedItemErrorEnum_SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE FeedItemErrorEnum_FeedItemError = 10
+)
+
+var FeedItemErrorEnum_FeedItemError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING",
+	3:  "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM",
+	4:  "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
+	5:  "KEY_ATTRIBUTES_NOT_FOUND",
+	6:  "INVALID_URL",
+	7:  "MISSING_KEY_ATTRIBUTES",
+	8:  "KEY_ATTRIBUTES_NOT_UNIQUE",
+	9:  "CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE",
+	10: "SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE",
+}
+var FeedItemErrorEnum_FeedItemError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING": 2,
+	"CANNOT_OPERATE_ON_REMOVED_FEED_ITEM":        3,
+	"DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE":     4,
+	"KEY_ATTRIBUTES_NOT_FOUND":                   5,
+	"INVALID_URL":                                6,
+	"MISSING_KEY_ATTRIBUTES":                     7,
+	"KEY_ATTRIBUTES_NOT_UNIQUE":                  8,
+	"CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE":          9,
+	"SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE":   10,
+}
+
+func (x FeedItemErrorEnum_FeedItemError) String() string {
+	return proto.EnumName(FeedItemErrorEnum_FeedItemError_name, int32(x))
+}
+func (FeedItemErrorEnum_FeedItemError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_error_d7f66157bcdcedc7, []int{0, 0}
+}
+
+// Container for enum describing possible feed item errors.
+type FeedItemErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedItemErrorEnum) Reset()         { *m = FeedItemErrorEnum{} }
+func (m *FeedItemErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedItemErrorEnum) ProtoMessage()    {}
+func (*FeedItemErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_error_d7f66157bcdcedc7, []int{0}
+}
+func (m *FeedItemErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedItemErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedItemErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemErrorEnum.Merge(dst, src)
+}
+func (m *FeedItemErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedItemErrorEnum.Size(m)
+}
+func (m *FeedItemErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedItemErrorEnum)(nil), "google.ads.googleads.v0.errors.FeedItemErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FeedItemErrorEnum_FeedItemError", FeedItemErrorEnum_FeedItemError_name, FeedItemErrorEnum_FeedItemError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/feed_item_error.proto", fileDescriptor_feed_item_error_d7f66157bcdcedc7)
+}
+
+var fileDescriptor_feed_item_error_d7f66157bcdcedc7 = []byte{
+	// 448 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xdd, 0x8a, 0xd3, 0x40,
+	0x14, 0xb6, 0xad, 0xee, 0xea, 0x2c, 0xe2, 0x38, 0x17, 0xa2, 0xa2, 0x0b, 0x56, 0xfc, 0x61, 0x91,
+	0x49, 0x41, 0xef, 0xbc, 0x9a, 0x26, 0x27, 0x61, 0xd8, 0x64, 0xa6, 0x26, 0x33, 0x91, 0x2d, 0x85,
+	0x43, 0x35, 0x31, 0x2c, 0x6c, 0x9b, 0x25, 0xa9, 0xfb, 0x0a, 0xbe, 0x87, 0x97, 0x3e, 0x89, 0xf8,
+	0x36, 0xbe, 0x81, 0xa4, 0xd3, 0x56, 0x0a, 0xba, 0x57, 0xf3, 0xf1, 0xcd, 0xf7, 0x9d, 0x6f, 0xce,
+	0x9c, 0x43, 0xde, 0x55, 0x75, 0x5d, 0x5d, 0x94, 0xde, 0xbc, 0x68, 0x3d, 0x07, 0x3b, 0x74, 0x35,
+	0xf2, 0xca, 0xa6, 0xa9, 0x9b, 0xd6, 0xfb, 0x52, 0x96, 0x05, 0x9e, 0xaf, 0xca, 0x05, 0xae, 0x09,
+	0x7e, 0xd9, 0xd4, 0xab, 0x9a, 0x1d, 0x3b, 0x29, 0x9f, 0x17, 0x2d, 0xdf, 0xb9, 0xf8, 0xd5, 0x88,
+	0x3b, 0xd7, 0xf0, 0xdb, 0x80, 0xdc, 0x0f, 0xcb, 0xb2, 0x90, 0xab, 0x72, 0x01, 0x1d, 0x05, 0xcb,
+	0xaf, 0x8b, 0xe1, 0xef, 0x3e, 0xb9, 0xbb, 0xc7, 0xb2, 0x7b, 0xe4, 0xc8, 0xaa, 0x6c, 0x02, 0xbe,
+	0x0c, 0x25, 0x04, 0xf4, 0x06, 0x3b, 0x22, 0x87, 0x56, 0x9d, 0x2a, 0xfd, 0x51, 0xd1, 0x1e, 0xe3,
+	0xe4, 0xc4, 0x17, 0x4a, 0x69, 0x83, 0xbe, 0x56, 0x39, 0xa4, 0x06, 0x85, 0x31, 0xa9, 0x1c, 0x5b,
+	0x03, 0x98, 0x8b, 0xd8, 0x02, 0x86, 0xa9, 0x4e, 0x30, 0x33, 0xa9, 0x54, 0x11, 0xed, 0xb3, 0x57,
+	0xe4, 0xf9, 0x46, 0xaf, 0x27, 0x90, 0x0a, 0x03, 0xa8, 0x15, 0xa6, 0x90, 0xe8, 0x1c, 0x02, 0x0c,
+	0x01, 0x02, 0x94, 0x06, 0x12, 0x3a, 0x60, 0x27, 0xe4, 0x65, 0xd0, 0x5d, 0x1b, 0x99, 0x00, 0x26,
+	0x36, 0x33, 0x38, 0x06, 0x94, 0x0a, 0x85, 0xef, 0x6b, 0xab, 0x8c, 0xe3, 0xa7, 0x5a, 0x01, 0xbd,
+	0xc9, 0x9e, 0x90, 0x87, 0xa7, 0x70, 0xf6, 0x37, 0x39, 0xc3, 0x2e, 0x20, 0xd4, 0x56, 0x05, 0xf4,
+	0x56, 0xd7, 0x80, 0x54, 0xb9, 0x88, 0x65, 0x80, 0x36, 0x8d, 0xe9, 0x01, 0x7b, 0x4c, 0x1e, 0x24,
+	0x32, 0xcb, 0xa4, 0x8a, 0x70, 0xdf, 0x46, 0x0f, 0xd9, 0x53, 0xf2, 0xe8, 0x1f, 0xa5, 0xac, 0x92,
+	0x1f, 0x2c, 0xd0, 0xdb, 0xec, 0x05, 0x79, 0xb6, 0x79, 0x7e, 0xa2, 0x03, 0x19, 0x9e, 0xed, 0x17,
+	0x70, 0x1d, 0xd3, 0x3b, 0xec, 0x0d, 0x79, 0x9d, 0xc9, 0x29, 0xa0, 0xd1, 0x1a, 0x63, 0x91, 0x46,
+	0x80, 0xa1, 0x4e, 0x31, 0xb1, 0xb1, 0x91, 0x9b, 0x5f, 0xd9, 0x79, 0x28, 0x19, 0xff, 0xec, 0x91,
+	0xe1, 0xe7, 0x7a, 0xc1, 0xaf, 0x1f, 0xd8, 0x98, 0xed, 0xcd, 0x65, 0xd2, 0x0d, 0x79, 0xd2, 0x9b,
+	0x06, 0x1b, 0x57, 0x55, 0x5f, 0xcc, 0x97, 0x15, 0xaf, 0x9b, 0xca, 0xab, 0xca, 0xe5, 0x7a, 0x05,
+	0xb6, 0xcb, 0x72, 0x79, 0xde, 0xfe, 0x6f, 0x77, 0xde, 0xbb, 0xe3, 0x7b, 0x7f, 0x10, 0x09, 0xf1,
+	0xa3, 0x7f, 0x1c, 0xb9, 0x62, 0xa2, 0x68, 0xb9, 0x83, 0x1d, 0xca, 0x47, 0x7c, 0x1d, 0xd9, 0xfe,
+	0xda, 0x0a, 0x66, 0xa2, 0x68, 0x67, 0x3b, 0xc1, 0x2c, 0x1f, 0xcd, 0x9c, 0xe0, 0xd3, 0xc1, 0x3a,
+	0xf8, 0xed, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6d, 0x06, 0x99, 0xd8, 0xb3, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/feed_mapping_error.pb.go b/googleapis/ads/googleads/v0/errors/feed_mapping_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..691bf1bd9379201c8ca6c01f0b9ea12e6063d623
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/feed_mapping_error.pb.go
@@ -0,0 +1,191 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/feed_mapping_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible feed item errors.
+type FeedMappingErrorEnum_FeedMappingError int32
+
+const (
+	// Enum unspecified.
+	FeedMappingErrorEnum_UNSPECIFIED FeedMappingErrorEnum_FeedMappingError = 0
+	// The received error code is not known in this version.
+	FeedMappingErrorEnum_UNKNOWN FeedMappingErrorEnum_FeedMappingError = 1
+	// The given placeholder field does not exist.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_FIELD FeedMappingErrorEnum_FeedMappingError = 2
+	// The given criterion field does not exist.
+	FeedMappingErrorEnum_INVALID_CRITERION_FIELD FeedMappingErrorEnum_FeedMappingError = 3
+	// The given placeholder type does not exist.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_TYPE FeedMappingErrorEnum_FeedMappingError = 4
+	// The given criterion type does not exist.
+	FeedMappingErrorEnum_INVALID_CRITERION_TYPE FeedMappingErrorEnum_FeedMappingError = 5
+	// A feed mapping must contain at least one attribute field mapping.
+	FeedMappingErrorEnum_NO_ATTRIBUTE_FIELD_MAPPINGS FeedMappingErrorEnum_FeedMappingError = 7
+	// The type of the feed attribute referenced in the attribute field mapping
+	// must match the type of the placeholder field.
+	FeedMappingErrorEnum_FEED_ATTRIBUTE_TYPE_MISMATCH FeedMappingErrorEnum_FeedMappingError = 8
+	// A feed mapping for a system generated feed cannot be operated on.
+	FeedMappingErrorEnum_CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED FeedMappingErrorEnum_FeedMappingError = 9
+	// Only one feed mapping for a placeholder type is allowed per feed or
+	// customer (depending on the placeholder type).
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE FeedMappingErrorEnum_FeedMappingError = 10
+	// Only one feed mapping for a criterion type is allowed per customer.
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE FeedMappingErrorEnum_FeedMappingError = 11
+	// Only one feed attribute mapping for a placeholder field is allowed
+	// (depending on the placeholder type).
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD FeedMappingErrorEnum_FeedMappingError = 12
+	// Only one feed attribute mapping for a criterion field is allowed
+	// (depending on the criterion type).
+	FeedMappingErrorEnum_MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD FeedMappingErrorEnum_FeedMappingError = 13
+	// This feed mapping may not contain any explicit attribute field mappings.
+	FeedMappingErrorEnum_UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS FeedMappingErrorEnum_FeedMappingError = 14
+	// Location placeholder feed mappings can only be created for Places feeds.
+	FeedMappingErrorEnum_LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS FeedMappingErrorEnum_FeedMappingError = 15
+	// Mappings for typed feeds cannot be modified.
+	FeedMappingErrorEnum_CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED FeedMappingErrorEnum_FeedMappingError = 16
+	// The given placeholder type can only be mapped to system generated feeds.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED FeedMappingErrorEnum_FeedMappingError = 17
+	// The given placeholder type cannot be mapped to a system generated feed
+	// with the given type.
+	FeedMappingErrorEnum_INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE FeedMappingErrorEnum_FeedMappingError = 18
+)
+
+var FeedMappingErrorEnum_FeedMappingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_PLACEHOLDER_FIELD",
+	3:  "INVALID_CRITERION_FIELD",
+	4:  "INVALID_PLACEHOLDER_TYPE",
+	5:  "INVALID_CRITERION_TYPE",
+	7:  "NO_ATTRIBUTE_FIELD_MAPPINGS",
+	8:  "FEED_ATTRIBUTE_TYPE_MISMATCH",
+	9:  "CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED",
+	10: "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE",
+	11: "MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE",
+	12: "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD",
+	13: "MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD",
+	14: "UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS",
+	15: "LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS",
+	16: "CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED",
+	17: "INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED",
+	18: "INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE",
+}
+var FeedMappingErrorEnum_FeedMappingError_value = map[string]int32{
+	"UNSPECIFIED":                  0,
+	"UNKNOWN":                      1,
+	"INVALID_PLACEHOLDER_FIELD":    2,
+	"INVALID_CRITERION_FIELD":      3,
+	"INVALID_PLACEHOLDER_TYPE":     4,
+	"INVALID_CRITERION_TYPE":       5,
+	"NO_ATTRIBUTE_FIELD_MAPPINGS":  7,
+	"FEED_ATTRIBUTE_TYPE_MISMATCH": 8,
+	"CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED":    9,
+	"MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE":                  10,
+	"MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE":                    11,
+	"MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD":                 12,
+	"MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD":                   13,
+	"UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS":                     14,
+	"LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS":              15,
+	"CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED":                   16,
+	"INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED":  17,
+	"INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE": 18,
+}
+
+func (x FeedMappingErrorEnum_FeedMappingError) String() string {
+	return proto.EnumName(FeedMappingErrorEnum_FeedMappingError_name, int32(x))
+}
+func (FeedMappingErrorEnum_FeedMappingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_error_00493e471bdaff0d, []int{0, 0}
+}
+
+// Container for enum describing possible feed item errors.
+type FeedMappingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FeedMappingErrorEnum) Reset()         { *m = FeedMappingErrorEnum{} }
+func (m *FeedMappingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingErrorEnum) ProtoMessage()    {}
+func (*FeedMappingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_error_00493e471bdaff0d, []int{0}
+}
+func (m *FeedMappingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingErrorEnum.Unmarshal(m, b)
+}
+func (m *FeedMappingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FeedMappingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingErrorEnum.Merge(dst, src)
+}
+func (m *FeedMappingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingErrorEnum.Size(m)
+}
+func (m *FeedMappingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FeedMappingErrorEnum)(nil), "google.ads.googleads.v0.errors.FeedMappingErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FeedMappingErrorEnum_FeedMappingError", FeedMappingErrorEnum_FeedMappingError_name, FeedMappingErrorEnum_FeedMappingError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/feed_mapping_error.proto", fileDescriptor_feed_mapping_error_00493e471bdaff0d)
+}
+
+var fileDescriptor_feed_mapping_error_00493e471bdaff0d = []byte{
+	// 518 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x69, 0x47, 0x19, 0x9c, 0x02, 0x0b, 0x16, 0xff, 0x37, 0x06, 0x2a, 0x7f, 0x06, 0x43,
+	0x72, 0x2b, 0x81, 0x18, 0x62, 0x57, 0x6e, 0xe2, 0x74, 0x16, 0x89, 0x6d, 0x25, 0x6e, 0xa1, 0xa8,
+	0x92, 0x55, 0x48, 0x88, 0x26, 0xad, 0x4d, 0xd5, 0xc0, 0x1e, 0x88, 0x4b, 0x1e, 0x05, 0x24, 0x5e,
+	0x83, 0xd7, 0x40, 0x89, 0xdb, 0xb2, 0x76, 0xed, 0x76, 0xd5, 0x23, 0x9f, 0xef, 0xf7, 0xd9, 0xe7,
+	0x6b, 0x0e, 0xec, 0x25, 0x69, 0x9a, 0x1c, 0xc5, 0xf5, 0x7e, 0x94, 0xd5, 0x4d, 0x99, 0x57, 0xc7,
+	0x8d, 0x7a, 0x3c, 0x1e, 0xa7, 0xe3, 0xac, 0xfe, 0x35, 0x8e, 0x23, 0x3d, 0xe8, 0x8f, 0x46, 0x87,
+	0xc3, 0x44, 0x17, 0x67, 0x78, 0x34, 0x4e, 0xbf, 0xa5, 0x68, 0xdb, 0xa8, 0x71, 0x3f, 0xca, 0xf0,
+	0x0c, 0xc4, 0xc7, 0x0d, 0x6c, 0xc0, 0xda, 0xdf, 0x0a, 0xdc, 0x74, 0xe3, 0x38, 0xf2, 0x0d, 0x4b,
+	0xf3, 0x53, 0x3a, 0xfc, 0x3e, 0xa8, 0xfd, 0xa9, 0x80, 0xb5, 0xd8, 0x40, 0x1b, 0x50, 0x6d, 0xf3,
+	0x50, 0x52, 0x9b, 0xb9, 0x8c, 0x3a, 0xd6, 0x05, 0x54, 0x85, 0xf5, 0x36, 0x7f, 0xcf, 0xc5, 0x07,
+	0x6e, 0x95, 0xd0, 0x03, 0xb8, 0xc7, 0x78, 0x87, 0x78, 0xcc, 0xd1, 0xd2, 0x23, 0x36, 0x3d, 0x10,
+	0x9e, 0x43, 0x03, 0xed, 0x32, 0xea, 0x39, 0x56, 0x19, 0x6d, 0xc2, 0x9d, 0x69, 0xdb, 0x0e, 0x98,
+	0xa2, 0x01, 0x13, 0x7c, 0xd2, 0x5c, 0x43, 0x5b, 0x70, 0x77, 0x19, 0xab, 0xba, 0x92, 0x5a, 0x17,
+	0xd1, 0x7d, 0xb8, 0x7d, 0x1a, 0x2d, 0x7a, 0x15, 0xf4, 0x10, 0x36, 0xb9, 0xd0, 0x44, 0xa9, 0x80,
+	0x35, 0xdb, 0x8a, 0x1a, 0x47, 0xed, 0x13, 0x29, 0x19, 0x6f, 0x85, 0xd6, 0x3a, 0x7a, 0x04, 0x5b,
+	0x2e, 0xa5, 0xce, 0x09, 0x49, 0x4e, 0x6a, 0x9f, 0x85, 0x3e, 0x51, 0xf6, 0x81, 0x75, 0x19, 0xbd,
+	0x85, 0xd7, 0x36, 0xe1, 0x5c, 0x28, 0x2d, 0x24, 0x0d, 0x88, 0xa2, 0x5a, 0xf0, 0x99, 0x83, 0x76,
+	0x45, 0xa0, 0xc3, 0x6e, 0xa8, 0xa8, 0xaf, 0x5b, 0x94, 0x17, 0x7d, 0x47, 0xe7, 0x8e, 0xd6, 0x15,
+	0xb4, 0x0b, 0xcf, 0xfc, 0xb6, 0xa7, 0x98, 0xf4, 0xe8, 0x3c, 0x70, 0x6a, 0x08, 0x40, 0xcf, 0xe1,
+	0xc9, 0x72, 0xed, 0xc2, 0x48, 0x55, 0xf4, 0x12, 0x76, 0xce, 0x77, 0x35, 0xc9, 0x5d, 0x45, 0x2f,
+	0xe0, 0xe9, 0x79, 0xb6, 0x46, 0x7a, 0x0d, 0xed, 0xc0, 0xe3, 0x36, 0xa7, 0x1f, 0x25, 0xb5, 0xd5,
+	0x5c, 0x1e, 0x0b, 0x91, 0x5d, 0x47, 0x18, 0x76, 0x3d, 0x61, 0x13, 0x95, 0xc3, 0x27, 0xef, 0x14,
+	0xdc, 0xeb, 0xfe, 0x7f, 0x48, 0x58, 0xa4, 0x10, 0x5a, 0x1b, 0xf9, 0x1b, 0x26, 0x01, 0xfa, 0xc2,
+	0x61, 0x6e, 0x77, 0xfe, 0x21, 0xf9, 0x54, 0x93, 0xc4, 0x2c, 0xf4, 0x0e, 0xde, 0xac, 0xfa, 0xa3,
+	0x0b, 0x31, 0x17, 0x7c, 0x45, 0xda, 0x37, 0xd0, 0x3e, 0xec, 0x9d, 0xc9, 0x2e, 0xe5, 0x4c, 0xa8,
+	0xa8, 0xf9, 0xbb, 0x04, 0xb5, 0x2f, 0xe9, 0x00, 0x9f, 0xbd, 0x10, 0xcd, 0x5b, 0x8b, 0x1f, 0xbd,
+	0xcc, 0xf7, 0x48, 0x96, 0x3e, 0x39, 0x13, 0x30, 0x49, 0x8f, 0xfa, 0xc3, 0x04, 0xa7, 0xe3, 0xa4,
+	0x9e, 0xc4, 0xc3, 0x62, 0xcb, 0xa6, 0x2b, 0x39, 0x3a, 0xcc, 0x56, 0x6d, 0xe8, 0xbe, 0xf9, 0xf9,
+	0x51, 0x5e, 0x6b, 0x11, 0xf2, 0xb3, 0xbc, 0xdd, 0x32, 0x66, 0x24, 0xca, 0xb0, 0x29, 0xf3, 0xaa,
+	0xd3, 0xc0, 0xc5, 0x95, 0xd9, 0xaf, 0xa9, 0xa0, 0x47, 0xa2, 0xac, 0x37, 0x13, 0xf4, 0x3a, 0x8d,
+	0x9e, 0x11, 0x7c, 0xbe, 0x54, 0x5c, 0xfc, 0xea, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x47, 0x3b,
+	0x01, 0x4f, 0x19, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/field_error.pb.go b/googleapis/ads/googleads/v0/errors/field_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..849e0a04868e6970d6c2bd6b5a5b18e55f92840f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/field_error.pb.go
@@ -0,0 +1,135 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/field_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible field errors.
+type FieldErrorEnum_FieldError int32
+
+const (
+	// Enum unspecified.
+	FieldErrorEnum_UNSPECIFIED FieldErrorEnum_FieldError = 0
+	// The received error code is not known in this version.
+	FieldErrorEnum_UNKNOWN FieldErrorEnum_FieldError = 1
+	// The required field was not present in the resource.
+	FieldErrorEnum_REQUIRED FieldErrorEnum_FieldError = 2
+	// The field attempted to be mutated is immutable.
+	FieldErrorEnum_IMMUTABLE_FIELD FieldErrorEnum_FieldError = 3
+	// The field's value is invalid.
+	FieldErrorEnum_INVALID_VALUE FieldErrorEnum_FieldError = 4
+	// The field cannot be set.
+	FieldErrorEnum_VALUE_MUST_BE_UNSET FieldErrorEnum_FieldError = 5
+	// The required repeated field was empty.
+	FieldErrorEnum_REQUIRED_NONEMPTY_LIST FieldErrorEnum_FieldError = 6
+	// The field cannot be cleared.
+	FieldErrorEnum_FIELD_CANNOT_BE_CLEARED FieldErrorEnum_FieldError = 7
+)
+
+var FieldErrorEnum_FieldError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "REQUIRED",
+	3: "IMMUTABLE_FIELD",
+	4: "INVALID_VALUE",
+	5: "VALUE_MUST_BE_UNSET",
+	6: "REQUIRED_NONEMPTY_LIST",
+	7: "FIELD_CANNOT_BE_CLEARED",
+}
+var FieldErrorEnum_FieldError_value = map[string]int32{
+	"UNSPECIFIED":             0,
+	"UNKNOWN":                 1,
+	"REQUIRED":                2,
+	"IMMUTABLE_FIELD":         3,
+	"INVALID_VALUE":           4,
+	"VALUE_MUST_BE_UNSET":     5,
+	"REQUIRED_NONEMPTY_LIST":  6,
+	"FIELD_CANNOT_BE_CLEARED": 7,
+}
+
+func (x FieldErrorEnum_FieldError) String() string {
+	return proto.EnumName(FieldErrorEnum_FieldError_name, int32(x))
+}
+func (FieldErrorEnum_FieldError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_field_error_e825b142d7742744, []int{0, 0}
+}
+
+// Container for enum describing possible field errors.
+type FieldErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FieldErrorEnum) Reset()         { *m = FieldErrorEnum{} }
+func (m *FieldErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FieldErrorEnum) ProtoMessage()    {}
+func (*FieldErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_field_error_e825b142d7742744, []int{0}
+}
+func (m *FieldErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FieldErrorEnum.Unmarshal(m, b)
+}
+func (m *FieldErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FieldErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FieldErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FieldErrorEnum.Merge(dst, src)
+}
+func (m *FieldErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FieldErrorEnum.Size(m)
+}
+func (m *FieldErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FieldErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FieldErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FieldErrorEnum)(nil), "google.ads.googleads.v0.errors.FieldErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FieldErrorEnum_FieldError", FieldErrorEnum_FieldError_name, FieldErrorEnum_FieldError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/field_error.proto", fileDescriptor_field_error_e825b142d7742744)
+}
+
+var fileDescriptor_field_error_e825b142d7742744 = []byte{
+	// 341 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0xea, 0x40,
+	0x18, 0x85, 0x6f, 0xe1, 0x5e, 0xb8, 0x19, 0xee, 0x95, 0x3a, 0x24, 0x92, 0x68, 0xc2, 0x82, 0x07,
+	0x98, 0x36, 0x71, 0xe9, 0x6a, 0x4a, 0x07, 0x32, 0xb1, 0x1d, 0x2a, 0xed, 0xd4, 0x68, 0x9a, 0x4c,
+	0xd0, 0xd6, 0x86, 0x04, 0x18, 0xd2, 0x51, 0x1e, 0xc8, 0xa5, 0x4b, 0xdf, 0x81, 0x8d, 0x4f, 0x65,
+	0x3a, 0x23, 0xb0, 0xd2, 0xd5, 0x9c, 0x7f, 0x72, 0xbe, 0xff, 0xe4, 0x3f, 0xc0, 0x2d, 0xa5, 0x2c,
+	0x97, 0x85, 0x33, 0xcf, 0x95, 0x63, 0x64, 0xad, 0xb6, 0xae, 0x53, 0x54, 0x95, 0xac, 0x94, 0xf3,
+	0xb4, 0x28, 0x96, 0xb9, 0xd0, 0x03, 0xda, 0x54, 0xf2, 0x59, 0xc2, 0x81, 0xb1, 0xa1, 0x79, 0xae,
+	0xd0, 0x81, 0x40, 0x5b, 0x17, 0x19, 0x62, 0xb8, 0xb3, 0xc0, 0xc9, 0xb8, 0xa6, 0x48, 0x3d, 0x93,
+	0xf5, 0xcb, 0x6a, 0xf8, 0x6e, 0x01, 0x70, 0xfc, 0x82, 0x5d, 0xd0, 0xe1, 0x2c, 0x8e, 0xc8, 0x88,
+	0x8e, 0x29, 0xf1, 0xed, 0x5f, 0xb0, 0x03, 0xda, 0x9c, 0x5d, 0xb3, 0xe9, 0x2d, 0xb3, 0x2d, 0xf8,
+	0x0f, 0xfc, 0x9d, 0x91, 0x1b, 0x4e, 0x67, 0xc4, 0xb7, 0x1b, 0xb0, 0x07, 0xba, 0x34, 0x0c, 0x79,
+	0x82, 0xbd, 0x80, 0x88, 0x31, 0x25, 0x81, 0x6f, 0x37, 0xe1, 0x29, 0xf8, 0x4f, 0x59, 0x8a, 0x03,
+	0xea, 0x8b, 0x14, 0x07, 0x9c, 0xd8, 0xbf, 0x61, 0x1f, 0xf4, 0xb4, 0x14, 0x21, 0x8f, 0x13, 0xe1,
+	0x11, 0xc1, 0x59, 0x4c, 0x12, 0xfb, 0x0f, 0x3c, 0x07, 0x67, 0xfb, 0x75, 0x82, 0x4d, 0x19, 0x09,
+	0xa3, 0xe4, 0x4e, 0x04, 0x34, 0x4e, 0xec, 0x16, 0xbc, 0x00, 0x7d, 0xbd, 0x52, 0x8c, 0x30, 0x63,
+	0x53, 0x8d, 0x8d, 0x02, 0x82, 0xeb, 0xe4, 0xb6, 0xb7, 0xb3, 0xc0, 0xf0, 0x51, 0xae, 0xd0, 0xcf,
+	0xe7, 0x7a, 0xdd, 0xe3, 0x61, 0x51, 0xdd, 0x4f, 0x64, 0xdd, 0xfb, 0x5f, 0x48, 0x29, 0x97, 0xf3,
+	0x75, 0x89, 0x64, 0x55, 0x3a, 0x65, 0xb1, 0xd6, 0xed, 0xed, 0x3b, 0xde, 0x2c, 0xd4, 0x77, 0x95,
+	0x5f, 0x99, 0xe7, 0xb5, 0xd1, 0x9c, 0x60, 0xfc, 0xd6, 0x18, 0x4c, 0xcc, 0x32, 0x9c, 0x2b, 0x64,
+	0x64, 0xad, 0x52, 0x17, 0xe9, 0x48, 0xf5, 0xb1, 0x37, 0x64, 0x38, 0x57, 0xd9, 0xc1, 0x90, 0xa5,
+	0x6e, 0x66, 0x0c, 0x0f, 0x2d, 0x1d, 0x7c, 0xf9, 0x19, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0x58,
+	0x18, 0xea, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/field_mask_error.pb.go b/googleapis/ads/googleads/v0/errors/field_mask_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..cfaa56e471b1d56642a9dc2931cbe76850a94bc6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/field_mask_error.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/field_mask_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible field mask errors.
+type FieldMaskErrorEnum_FieldMaskError int32
+
+const (
+	// Enum unspecified.
+	FieldMaskErrorEnum_UNSPECIFIED FieldMaskErrorEnum_FieldMaskError = 0
+	// The received error code is not known in this version.
+	FieldMaskErrorEnum_UNKNOWN FieldMaskErrorEnum_FieldMaskError = 1
+	// The field mask must be provided for update operations.
+	FieldMaskErrorEnum_FIELD_MASK_MISSING FieldMaskErrorEnum_FieldMaskError = 5
+	// The field mask must be empty for create and remove operations.
+	FieldMaskErrorEnum_FIELD_MASK_NOT_ALLOWED FieldMaskErrorEnum_FieldMaskError = 4
+	// The field mask contained an invalid field.
+	FieldMaskErrorEnum_FIELD_NOT_FOUND FieldMaskErrorEnum_FieldMaskError = 2
+	// The field mask updated a field with subfields. Fields with subfields may
+	// be cleared, but not updated. To fix this, the field mask should select
+	// all the subfields of the invalid field.
+	FieldMaskErrorEnum_FIELD_HAS_SUBFIELDS FieldMaskErrorEnum_FieldMaskError = 3
+)
+
+var FieldMaskErrorEnum_FieldMaskError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	5: "FIELD_MASK_MISSING",
+	4: "FIELD_MASK_NOT_ALLOWED",
+	2: "FIELD_NOT_FOUND",
+	3: "FIELD_HAS_SUBFIELDS",
+}
+var FieldMaskErrorEnum_FieldMaskError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"FIELD_MASK_MISSING":     5,
+	"FIELD_MASK_NOT_ALLOWED": 4,
+	"FIELD_NOT_FOUND":        2,
+	"FIELD_HAS_SUBFIELDS":    3,
+}
+
+func (x FieldMaskErrorEnum_FieldMaskError) String() string {
+	return proto.EnumName(FieldMaskErrorEnum_FieldMaskError_name, int32(x))
+}
+func (FieldMaskErrorEnum_FieldMaskError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_field_mask_error_33f5aadb43a7526c, []int{0, 0}
+}
+
+// Container for enum describing possible field mask errors.
+type FieldMaskErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FieldMaskErrorEnum) Reset()         { *m = FieldMaskErrorEnum{} }
+func (m *FieldMaskErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FieldMaskErrorEnum) ProtoMessage()    {}
+func (*FieldMaskErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_field_mask_error_33f5aadb43a7526c, []int{0}
+}
+func (m *FieldMaskErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FieldMaskErrorEnum.Unmarshal(m, b)
+}
+func (m *FieldMaskErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FieldMaskErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FieldMaskErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FieldMaskErrorEnum.Merge(dst, src)
+}
+func (m *FieldMaskErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FieldMaskErrorEnum.Size(m)
+}
+func (m *FieldMaskErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FieldMaskErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FieldMaskErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FieldMaskErrorEnum)(nil), "google.ads.googleads.v0.errors.FieldMaskErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FieldMaskErrorEnum_FieldMaskError", FieldMaskErrorEnum_FieldMaskError_name, FieldMaskErrorEnum_FieldMaskError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/field_mask_error.proto", fileDescriptor_field_mask_error_33f5aadb43a7526c)
+}
+
+var fileDescriptor_field_mask_error_33f5aadb43a7526c = []byte{
+	// 315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xd1, 0x4a, 0xf3, 0x30,
+	0x1c, 0xc5, 0xbf, 0x6e, 0x9f, 0x0a, 0x19, 0xb8, 0x90, 0xc1, 0x04, 0x2f, 0x76, 0xb1, 0x07, 0x48,
+	0x0b, 0xe2, 0x95, 0x57, 0x99, 0x4d, 0x67, 0xd9, 0x96, 0x0e, 0x62, 0x37, 0x90, 0x42, 0xa8, 0xb6,
+	0x86, 0xb1, 0xb6, 0x19, 0x8d, 0xee, 0x39, 0x7c, 0x06, 0x6f, 0x04, 0xdf, 0x44, 0x9f, 0x4a, 0xd2,
+	0xb8, 0xe1, 0x2e, 0xf4, 0x2a, 0x27, 0xbf, 0x9c, 0x93, 0x7f, 0x72, 0xc0, 0xa5, 0x54, 0x4a, 0x16,
+	0xb9, 0x9b, 0x66, 0xda, 0xb5, 0xd2, 0xa8, 0xad, 0xe7, 0xe6, 0x75, 0xad, 0x6a, 0xed, 0x3e, 0xae,
+	0xf2, 0x22, 0x13, 0x65, 0xaa, 0xd7, 0xa2, 0x21, 0x78, 0x53, 0xab, 0x27, 0x85, 0x06, 0xd6, 0x8b,
+	0xd3, 0x4c, 0xe3, 0x7d, 0x0c, 0x6f, 0x3d, 0x6c, 0x63, 0xc3, 0x37, 0x07, 0xa0, 0xc0, 0x44, 0x67,
+	0xa9, 0x5e, 0x53, 0xc3, 0x68, 0xf5, 0x5c, 0x0e, 0x5f, 0x1c, 0x70, 0x7a, 0x88, 0x51, 0x17, 0x74,
+	0x62, 0xc6, 0xe7, 0xf4, 0x3a, 0x0c, 0x42, 0xea, 0xc3, 0x7f, 0xa8, 0x03, 0x4e, 0x62, 0x36, 0x61,
+	0xd1, 0x92, 0x41, 0x07, 0xf5, 0x01, 0x0a, 0x42, 0x3a, 0xf5, 0xc5, 0x8c, 0xf0, 0x89, 0x98, 0x85,
+	0x9c, 0x87, 0x6c, 0x0c, 0x8f, 0xd0, 0x39, 0xe8, 0xff, 0xe0, 0x2c, 0xba, 0x15, 0x64, 0x3a, 0x8d,
+	0x96, 0xd4, 0x87, 0xff, 0x51, 0x0f, 0x74, 0xed, 0x99, 0xc1, 0x41, 0x14, 0x33, 0x1f, 0xb6, 0xd0,
+	0x19, 0xe8, 0x59, 0x78, 0x43, 0xb8, 0xe0, 0xf1, 0xa8, 0xd9, 0x70, 0xd8, 0x1e, 0x7d, 0x38, 0x60,
+	0xf8, 0xa0, 0x4a, 0xfc, 0xf7, 0x87, 0x46, 0xbd, 0xc3, 0x67, 0xcf, 0x4d, 0x0b, 0x73, 0xe7, 0xce,
+	0xff, 0x8e, 0x49, 0x55, 0xa4, 0x95, 0xc4, 0xaa, 0x96, 0xae, 0xcc, 0xab, 0xa6, 0xa3, 0x5d, 0x9d,
+	0x9b, 0x95, 0xfe, 0xad, 0xdd, 0x2b, 0xbb, 0xbc, 0xb6, 0xda, 0x63, 0x42, 0xde, 0x5b, 0x83, 0xb1,
+	0xbd, 0x8c, 0x64, 0x1a, 0x5b, 0x69, 0xd4, 0xc2, 0xc3, 0xcd, 0x48, 0xfd, 0xb9, 0x33, 0x24, 0x24,
+	0xd3, 0xc9, 0xde, 0x90, 0x2c, 0xbc, 0xc4, 0x1a, 0xee, 0x8f, 0x9b, 0xc1, 0x17, 0x5f, 0x01, 0x00,
+	0x00, 0xff, 0xff, 0x95, 0x75, 0xb9, 0x40, 0xd5, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/function_error.pb.go b/googleapis/ads/googleads/v0/errors/function_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..718eec0804a26e51efe202bb21caf5984315e151
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/function_error.pb.go
@@ -0,0 +1,186 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/function_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible function errors.
+type FunctionErrorEnum_FunctionError int32
+
+const (
+	// Enum unspecified.
+	FunctionErrorEnum_UNSPECIFIED FunctionErrorEnum_FunctionError = 0
+	// The received error code is not known in this version.
+	FunctionErrorEnum_UNKNOWN FunctionErrorEnum_FunctionError = 1
+	// The format of the function is not recognized as a supported function
+	// format.
+	FunctionErrorEnum_INVALID_FUNCTION_FORMAT FunctionErrorEnum_FunctionError = 2
+	// Operand data types do not match.
+	FunctionErrorEnum_DATA_TYPE_MISMATCH FunctionErrorEnum_FunctionError = 3
+	// The operands cannot be used together in a conjunction.
+	FunctionErrorEnum_INVALID_CONJUNCTION_OPERANDS FunctionErrorEnum_FunctionError = 4
+	// Invalid numer of Operands.
+	FunctionErrorEnum_INVALID_NUMBER_OF_OPERANDS FunctionErrorEnum_FunctionError = 5
+	// Operand Type not supported.
+	FunctionErrorEnum_INVALID_OPERAND_TYPE FunctionErrorEnum_FunctionError = 6
+	// Operator not supported.
+	FunctionErrorEnum_INVALID_OPERATOR FunctionErrorEnum_FunctionError = 7
+	// Request context type not supported.
+	FunctionErrorEnum_INVALID_REQUEST_CONTEXT_TYPE FunctionErrorEnum_FunctionError = 8
+	// The matching function is not allowed for call placeholders
+	FunctionErrorEnum_INVALID_FUNCTION_FOR_CALL_PLACEHOLDER FunctionErrorEnum_FunctionError = 9
+	// The matching function is not allowed for the specified placeholder
+	FunctionErrorEnum_INVALID_FUNCTION_FOR_PLACEHOLDER FunctionErrorEnum_FunctionError = 10
+	// Invalid operand.
+	FunctionErrorEnum_INVALID_OPERAND FunctionErrorEnum_FunctionError = 11
+	// Missing value for the constant operand.
+	FunctionErrorEnum_MISSING_CONSTANT_OPERAND_VALUE FunctionErrorEnum_FunctionError = 12
+	// The value of the constant operand is invalid.
+	FunctionErrorEnum_INVALID_CONSTANT_OPERAND_VALUE FunctionErrorEnum_FunctionError = 13
+	// Invalid function nesting.
+	FunctionErrorEnum_INVALID_NESTING FunctionErrorEnum_FunctionError = 14
+	// The Feed ID was different from another Feed ID in the same function.
+	FunctionErrorEnum_MULTIPLE_FEED_IDS_NOT_SUPPORTED FunctionErrorEnum_FunctionError = 15
+	// The matching function is invalid for use with a feed with a fixed schema.
+	FunctionErrorEnum_INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA FunctionErrorEnum_FunctionError = 16
+	// Invalid attribute name.
+	FunctionErrorEnum_INVALID_ATTRIBUTE_NAME FunctionErrorEnum_FunctionError = 17
+)
+
+var FunctionErrorEnum_FunctionError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_FUNCTION_FORMAT",
+	3:  "DATA_TYPE_MISMATCH",
+	4:  "INVALID_CONJUNCTION_OPERANDS",
+	5:  "INVALID_NUMBER_OF_OPERANDS",
+	6:  "INVALID_OPERAND_TYPE",
+	7:  "INVALID_OPERATOR",
+	8:  "INVALID_REQUEST_CONTEXT_TYPE",
+	9:  "INVALID_FUNCTION_FOR_CALL_PLACEHOLDER",
+	10: "INVALID_FUNCTION_FOR_PLACEHOLDER",
+	11: "INVALID_OPERAND",
+	12: "MISSING_CONSTANT_OPERAND_VALUE",
+	13: "INVALID_CONSTANT_OPERAND_VALUE",
+	14: "INVALID_NESTING",
+	15: "MULTIPLE_FEED_IDS_NOT_SUPPORTED",
+	16: "INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA",
+	17: "INVALID_ATTRIBUTE_NAME",
+}
+var FunctionErrorEnum_FunctionError_value = map[string]int32{
+	"UNSPECIFIED":                                 0,
+	"UNKNOWN":                                     1,
+	"INVALID_FUNCTION_FORMAT":                     2,
+	"DATA_TYPE_MISMATCH":                          3,
+	"INVALID_CONJUNCTION_OPERANDS":                4,
+	"INVALID_NUMBER_OF_OPERANDS":                  5,
+	"INVALID_OPERAND_TYPE":                        6,
+	"INVALID_OPERATOR":                            7,
+	"INVALID_REQUEST_CONTEXT_TYPE":                8,
+	"INVALID_FUNCTION_FOR_CALL_PLACEHOLDER":       9,
+	"INVALID_FUNCTION_FOR_PLACEHOLDER":            10,
+	"INVALID_OPERAND":                             11,
+	"MISSING_CONSTANT_OPERAND_VALUE":              12,
+	"INVALID_CONSTANT_OPERAND_VALUE":              13,
+	"INVALID_NESTING":                             14,
+	"MULTIPLE_FEED_IDS_NOT_SUPPORTED":             15,
+	"INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA": 16,
+	"INVALID_ATTRIBUTE_NAME":                      17,
+}
+
+func (x FunctionErrorEnum_FunctionError) String() string {
+	return proto.EnumName(FunctionErrorEnum_FunctionError_name, int32(x))
+}
+func (FunctionErrorEnum_FunctionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_function_error_6eac0af30e166d98, []int{0, 0}
+}
+
+// Container for enum describing possible function errors.
+type FunctionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FunctionErrorEnum) Reset()         { *m = FunctionErrorEnum{} }
+func (m *FunctionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FunctionErrorEnum) ProtoMessage()    {}
+func (*FunctionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_function_error_6eac0af30e166d98, []int{0}
+}
+func (m *FunctionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FunctionErrorEnum.Unmarshal(m, b)
+}
+func (m *FunctionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FunctionErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FunctionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FunctionErrorEnum.Merge(dst, src)
+}
+func (m *FunctionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FunctionErrorEnum.Size(m)
+}
+func (m *FunctionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FunctionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FunctionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FunctionErrorEnum)(nil), "google.ads.googleads.v0.errors.FunctionErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FunctionErrorEnum_FunctionError", FunctionErrorEnum_FunctionError_name, FunctionErrorEnum_FunctionError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/function_error.proto", fileDescriptor_function_error_6eac0af30e166d98)
+}
+
+var fileDescriptor_function_error_6eac0af30e166d98 = []byte{
+	// 502 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xd1, 0x6e, 0xd3, 0x30,
+	0x14, 0x86, 0x69, 0x57, 0x36, 0x38, 0x65, 0xd4, 0x33, 0xd3, 0x40, 0x03, 0x95, 0xa9, 0xc0, 0x05,
+	0x42, 0x4a, 0x2a, 0xed, 0x92, 0x2b, 0x37, 0x39, 0x69, 0x0d, 0x89, 0x1d, 0x62, 0xa7, 0x1b, 0xa8,
+	0x92, 0x55, 0xd6, 0x12, 0x4d, 0xda, 0x9a, 0xa9, 0xd9, 0xf6, 0x40, 0x5c, 0xc2, 0x53, 0x70, 0x87,
+	0x78, 0x2a, 0x94, 0xa4, 0x29, 0x2d, 0x2a, 0x5c, 0xe5, 0xe4, 0x9c, 0xff, 0xf3, 0xef, 0x63, 0xfd,
+	0x70, 0x9c, 0xa4, 0x69, 0x72, 0x31, 0xb5, 0xc7, 0x93, 0xcc, 0x2e, 0xcb, 0xbc, 0xba, 0xed, 0xda,
+	0xd3, 0xf9, 0x3c, 0x9d, 0x67, 0xf6, 0x97, 0x9b, 0xd9, 0xd9, 0xf5, 0x79, 0x3a, 0x33, 0xc5, 0xbf,
+	0x75, 0x35, 0x4f, 0xaf, 0x53, 0xda, 0x2e, 0x95, 0xd6, 0x78, 0x92, 0x59, 0x4b, 0xc8, 0xba, 0xed,
+	0x5a, 0x25, 0xd4, 0xf9, 0xd1, 0x80, 0x3d, 0x6f, 0x01, 0x62, 0xde, 0xc2, 0xd9, 0xcd, 0x65, 0xe7,
+	0x7b, 0x03, 0x76, 0xd7, 0xba, 0xb4, 0x05, 0xcd, 0x58, 0xa8, 0x10, 0x1d, 0xee, 0x71, 0x74, 0xc9,
+	0x1d, 0xda, 0x84, 0x9d, 0x58, 0xbc, 0x17, 0xf2, 0x44, 0x90, 0x1a, 0x7d, 0x0a, 0x8f, 0xb9, 0x18,
+	0x32, 0x9f, 0xbb, 0xc6, 0x8b, 0x85, 0xa3, 0xb9, 0x14, 0xc6, 0x93, 0x51, 0xc0, 0x34, 0xa9, 0xd3,
+	0x03, 0xa0, 0x2e, 0xd3, 0xcc, 0xe8, 0x8f, 0x21, 0x9a, 0x80, 0xab, 0x80, 0x69, 0x67, 0x40, 0xb6,
+	0xe8, 0x11, 0x3c, 0xab, 0x20, 0x47, 0x8a, 0x77, 0x15, 0x27, 0x43, 0x8c, 0x98, 0x70, 0x15, 0x69,
+	0xd0, 0x36, 0x1c, 0x56, 0x0a, 0x11, 0x07, 0x3d, 0x8c, 0x8c, 0xf4, 0xfe, 0xcc, 0xef, 0xd2, 0x27,
+	0xb0, 0x5f, 0xcd, 0x17, 0xdd, 0xc2, 0x84, 0x6c, 0xd3, 0x7d, 0x20, 0x6b, 0x13, 0x2d, 0x23, 0xb2,
+	0xb3, 0xea, 0x18, 0xe1, 0x87, 0x18, 0x95, 0xce, 0x9d, 0x35, 0x9e, 0xea, 0x92, 0xbb, 0x47, 0x5f,
+	0xc3, 0xab, 0x4d, 0x8b, 0x18, 0x87, 0xf9, 0xbe, 0x09, 0x7d, 0xe6, 0xe0, 0x40, 0xfa, 0x2e, 0x46,
+	0xe4, 0x3e, 0x7d, 0x09, 0x47, 0x1b, 0xa5, 0xab, 0x2a, 0xa0, 0x8f, 0xa0, 0xf5, 0xd7, 0x15, 0x49,
+	0x93, 0x76, 0xa0, 0x1d, 0x70, 0xa5, 0xb8, 0xe8, 0xe7, 0xfe, 0x4a, 0x33, 0xa1, 0x97, 0x0b, 0x0c,
+	0x99, 0x1f, 0x23, 0x79, 0x90, 0x6b, 0x56, 0x5e, 0x67, 0x93, 0x66, 0x77, 0xf5, 0x70, 0x81, 0x4a,
+	0x73, 0xd1, 0x27, 0x0f, 0xe9, 0x0b, 0x78, 0x1e, 0xc4, 0xbe, 0xe6, 0xa1, 0x8f, 0xc6, 0x43, 0x74,
+	0x0d, 0x77, 0x95, 0x11, 0x52, 0x1b, 0x15, 0x87, 0xa1, 0x8c, 0x34, 0xba, 0xa4, 0x45, 0x6d, 0x78,
+	0xb3, 0xf1, 0xf2, 0x05, 0x70, 0xc2, 0xf5, 0xc0, 0x78, 0xfc, 0x14, 0x5d, 0xa3, 0x9c, 0x01, 0x06,
+	0x8c, 0x10, 0x7a, 0x08, 0x07, 0x15, 0xc0, 0xb4, 0x8e, 0x78, 0x2f, 0xd6, 0x68, 0x04, 0x0b, 0x90,
+	0xec, 0xf5, 0x7e, 0xd6, 0xa0, 0x73, 0x96, 0x5e, 0x5a, 0xff, 0x8f, 0x5a, 0x8f, 0xae, 0x25, 0x2a,
+	0xcc, 0xe3, 0x19, 0xd6, 0x3e, 0xb9, 0x0b, 0x2a, 0x49, 0x2f, 0xc6, 0xb3, 0xc4, 0x4a, 0xe7, 0x89,
+	0x9d, 0x4c, 0x67, 0x45, 0x78, 0xab, 0x94, 0x5f, 0x9d, 0x67, 0xff, 0x0a, 0xfd, 0xdb, 0xf2, 0xf3,
+	0xb5, 0xbe, 0xd5, 0x67, 0xec, 0x5b, 0xbd, 0xdd, 0x2f, 0x0f, 0x63, 0x93, 0xcc, 0x2a, 0xcb, 0xbc,
+	0x1a, 0x76, 0xad, 0xc2, 0x32, 0xfb, 0x55, 0x09, 0x46, 0x6c, 0x92, 0x8d, 0x96, 0x82, 0xd1, 0xb0,
+	0x3b, 0x2a, 0x05, 0x9f, 0xb7, 0x0b, 0xe3, 0xe3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x0e,
+	0xda, 0xaa, 0x6c, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/function_parsing_error.pb.go b/googleapis/ads/googleads/v0/errors/function_parsing_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6339389c37d97128d5a177955756f8fdd78e40d8
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/function_parsing_error.pb.go
@@ -0,0 +1,162 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/function_parsing_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible function parsing errors.
+type FunctionParsingErrorEnum_FunctionParsingError int32
+
+const (
+	// Enum unspecified.
+	FunctionParsingErrorEnum_UNSPECIFIED FunctionParsingErrorEnum_FunctionParsingError = 0
+	// The received error code is not known in this version.
+	FunctionParsingErrorEnum_UNKNOWN FunctionParsingErrorEnum_FunctionParsingError = 1
+	// Unexpected end of function string.
+	FunctionParsingErrorEnum_NO_MORE_INPUT FunctionParsingErrorEnum_FunctionParsingError = 2
+	// Could not find an expected character.
+	FunctionParsingErrorEnum_EXPECTED_CHARACTER FunctionParsingErrorEnum_FunctionParsingError = 3
+	// Unexpected separator character.
+	FunctionParsingErrorEnum_UNEXPECTED_SEPARATOR FunctionParsingErrorEnum_FunctionParsingError = 4
+	// Unmatched left bracket or parenthesis.
+	FunctionParsingErrorEnum_UNMATCHED_LEFT_BRACKET FunctionParsingErrorEnum_FunctionParsingError = 5
+	// Unmatched right bracket or parenthesis.
+	FunctionParsingErrorEnum_UNMATCHED_RIGHT_BRACKET FunctionParsingErrorEnum_FunctionParsingError = 6
+	// Functions are nested too deeply.
+	FunctionParsingErrorEnum_TOO_MANY_NESTED_FUNCTIONS FunctionParsingErrorEnum_FunctionParsingError = 7
+	// Missing right-hand-side operand.
+	FunctionParsingErrorEnum_MISSING_RIGHT_HAND_OPERAND FunctionParsingErrorEnum_FunctionParsingError = 8
+	// Invalid operator/function name.
+	FunctionParsingErrorEnum_INVALID_OPERATOR_NAME FunctionParsingErrorEnum_FunctionParsingError = 9
+	// Feed attribute operand's argument is not an integer.
+	FunctionParsingErrorEnum_FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER FunctionParsingErrorEnum_FunctionParsingError = 10
+	// Missing function operands.
+	FunctionParsingErrorEnum_NO_OPERANDS FunctionParsingErrorEnum_FunctionParsingError = 11
+	// Function had too many operands.
+	FunctionParsingErrorEnum_TOO_MANY_OPERANDS FunctionParsingErrorEnum_FunctionParsingError = 12
+)
+
+var FunctionParsingErrorEnum_FunctionParsingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "NO_MORE_INPUT",
+	3:  "EXPECTED_CHARACTER",
+	4:  "UNEXPECTED_SEPARATOR",
+	5:  "UNMATCHED_LEFT_BRACKET",
+	6:  "UNMATCHED_RIGHT_BRACKET",
+	7:  "TOO_MANY_NESTED_FUNCTIONS",
+	8:  "MISSING_RIGHT_HAND_OPERAND",
+	9:  "INVALID_OPERATOR_NAME",
+	10: "FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER",
+	11: "NO_OPERANDS",
+	12: "TOO_MANY_OPERANDS",
+}
+var FunctionParsingErrorEnum_FunctionParsingError_value = map[string]int32{
+	"UNSPECIFIED":                                 0,
+	"UNKNOWN":                                     1,
+	"NO_MORE_INPUT":                               2,
+	"EXPECTED_CHARACTER":                          3,
+	"UNEXPECTED_SEPARATOR":                        4,
+	"UNMATCHED_LEFT_BRACKET":                      5,
+	"UNMATCHED_RIGHT_BRACKET":                     6,
+	"TOO_MANY_NESTED_FUNCTIONS":                   7,
+	"MISSING_RIGHT_HAND_OPERAND":                  8,
+	"INVALID_OPERATOR_NAME":                       9,
+	"FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER": 10,
+	"NO_OPERANDS":                                 11,
+	"TOO_MANY_OPERANDS":                           12,
+}
+
+func (x FunctionParsingErrorEnum_FunctionParsingError) String() string {
+	return proto.EnumName(FunctionParsingErrorEnum_FunctionParsingError_name, int32(x))
+}
+func (FunctionParsingErrorEnum_FunctionParsingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_function_parsing_error_692dba496bc85c78, []int{0, 0}
+}
+
+// Container for enum describing possible function parsing errors.
+type FunctionParsingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FunctionParsingErrorEnum) Reset()         { *m = FunctionParsingErrorEnum{} }
+func (m *FunctionParsingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*FunctionParsingErrorEnum) ProtoMessage()    {}
+func (*FunctionParsingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_function_parsing_error_692dba496bc85c78, []int{0}
+}
+func (m *FunctionParsingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FunctionParsingErrorEnum.Unmarshal(m, b)
+}
+func (m *FunctionParsingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FunctionParsingErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *FunctionParsingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FunctionParsingErrorEnum.Merge(dst, src)
+}
+func (m *FunctionParsingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_FunctionParsingErrorEnum.Size(m)
+}
+func (m *FunctionParsingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_FunctionParsingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FunctionParsingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*FunctionParsingErrorEnum)(nil), "google.ads.googleads.v0.errors.FunctionParsingErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.FunctionParsingErrorEnum_FunctionParsingError", FunctionParsingErrorEnum_FunctionParsingError_name, FunctionParsingErrorEnum_FunctionParsingError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/function_parsing_error.proto", fileDescriptor_function_parsing_error_692dba496bc85c78)
+}
+
+var fileDescriptor_function_parsing_error_692dba496bc85c78 = []byte{
+	// 452 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0x6e, 0xd3, 0x40,
+	0x10, 0xc6, 0x69, 0x02, 0x2d, 0x6c, 0x40, 0x6c, 0x57, 0x6d, 0x69, 0x8a, 0xc8, 0x21, 0x57, 0xa4,
+	0x75, 0x24, 0x8e, 0x3d, 0x6d, 0xec, 0xb1, 0xb3, 0x6a, 0x3d, 0x6b, 0xad, 0xd7, 0xe1, 0x8f, 0x22,
+	0xad, 0x42, 0x13, 0xac, 0x48, 0xad, 0x37, 0xb2, 0xdb, 0x3e, 0x00, 0x8f, 0xc2, 0x91, 0x47, 0xe1,
+	0xc2, 0x53, 0xf0, 0x1e, 0xc8, 0x71, 0xe2, 0x5e, 0x0a, 0x27, 0x7f, 0x9a, 0xef, 0xfb, 0xcd, 0x58,
+	0x3b, 0x43, 0xce, 0x73, 0xe7, 0xf2, 0xeb, 0xa5, 0x37, 0x5f, 0x54, 0x5e, 0x23, 0x6b, 0x75, 0x3f,
+	0xf2, 0x96, 0x65, 0xe9, 0xca, 0xca, 0xfb, 0x76, 0x57, 0x5c, 0xdd, 0xae, 0x5c, 0x61, 0xd7, 0xf3,
+	0xb2, 0x5a, 0x15, 0xb9, 0xdd, 0xd4, 0xf9, 0xba, 0x74, 0xb7, 0x8e, 0x0d, 0x1a, 0x82, 0xcf, 0x17,
+	0x15, 0x6f, 0x61, 0x7e, 0x3f, 0xe2, 0x0d, 0x3c, 0xfc, 0xde, 0x25, 0xa7, 0xe1, 0xb6, 0x41, 0xd2,
+	0xf0, 0x50, 0x3b, 0x50, 0xdc, 0xdd, 0x0c, 0xff, 0x74, 0xc8, 0xd1, 0x63, 0x26, 0x7b, 0x4d, 0x7a,
+	0x19, 0xa6, 0x09, 0xf8, 0x32, 0x94, 0x10, 0xd0, 0x27, 0xac, 0x47, 0x0e, 0x32, 0xbc, 0x40, 0xf5,
+	0x11, 0xe9, 0x1e, 0x3b, 0x24, 0xaf, 0x50, 0xd9, 0x58, 0x69, 0xb0, 0x12, 0x93, 0xcc, 0xd0, 0x0e,
+	0x3b, 0x21, 0x0c, 0x3e, 0x25, 0xe0, 0x1b, 0x08, 0xac, 0x3f, 0x11, 0x5a, 0xf8, 0x06, 0x34, 0xed,
+	0xb2, 0x53, 0x72, 0x94, 0x61, 0xeb, 0xa4, 0x90, 0x08, 0x2d, 0x8c, 0xd2, 0xf4, 0x29, 0x3b, 0x23,
+	0x27, 0x19, 0xc6, 0xc2, 0xf8, 0x13, 0x08, 0xec, 0x25, 0x84, 0xc6, 0x8e, 0xb5, 0xf0, 0x2f, 0xc0,
+	0xd0, 0x67, 0xec, 0x2d, 0x79, 0xf3, 0xe0, 0x69, 0x19, 0x4d, 0x1e, 0xcc, 0x7d, 0xf6, 0x8e, 0xf4,
+	0x8d, 0x52, 0x36, 0x16, 0xf8, 0xd9, 0x22, 0xa4, 0x75, 0xdf, 0x30, 0x43, 0xdf, 0x48, 0x85, 0x29,
+	0x3d, 0x60, 0x03, 0x72, 0x16, 0xcb, 0x34, 0x95, 0x18, 0x6d, 0xc9, 0x89, 0xc0, 0xc0, 0xaa, 0x04,
+	0xb4, 0xc0, 0x80, 0x3e, 0x67, 0x7d, 0x72, 0x2c, 0x71, 0x2a, 0x2e, 0xe5, 0xb6, 0x68, 0x94, 0xb6,
+	0x28, 0x62, 0xa0, 0x2f, 0x98, 0x47, 0xde, 0x87, 0x00, 0x81, 0x15, 0xc6, 0x68, 0x39, 0xce, 0x0c,
+	0xec, 0x30, 0x2b, 0x74, 0x94, 0xc5, 0x80, 0xc6, 0xa2, 0x32, 0x56, 0xa2, 0x81, 0x08, 0x34, 0x25,
+	0xf5, 0x33, 0xa1, 0xda, 0x85, 0x52, 0xda, 0x63, 0xc7, 0xe4, 0xb0, 0xfd, 0xb7, 0xb6, 0xfc, 0x72,
+	0xfc, 0x7b, 0x8f, 0x0c, 0xaf, 0xdc, 0x0d, 0xff, 0xff, 0xae, 0xc6, 0xfd, 0xc7, 0x76, 0x91, 0xd4,
+	0x6b, 0x4e, 0xf6, 0xbe, 0x04, 0x5b, 0x38, 0x77, 0xd7, 0xf3, 0x22, 0xe7, 0xae, 0xcc, 0xbd, 0x7c,
+	0x59, 0x6c, 0x8e, 0x60, 0x77, 0x35, 0xeb, 0x55, 0xf5, 0xaf, 0x23, 0x3a, 0x6f, 0x3e, 0x3f, 0x3a,
+	0xdd, 0x48, 0x88, 0x9f, 0x9d, 0x41, 0xd4, 0x34, 0x13, 0x8b, 0x8a, 0x37, 0xb2, 0x56, 0xd3, 0x11,
+	0xdf, 0x8c, 0xac, 0x7e, 0xed, 0x02, 0x33, 0xb1, 0xa8, 0x66, 0x6d, 0x60, 0x36, 0x1d, 0xcd, 0x9a,
+	0xc0, 0xd7, 0xfd, 0xcd, 0xe0, 0x0f, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x79, 0x2f, 0x06, 0xfd,
+	0xbc, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/geo_target_constant_suggestion_error.pb.go b/googleapis/ads/googleads/v0/errors/geo_target_constant_suggestion_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1d6be46bff151b8fb25bd75e8bd62d4f0457f11f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/geo_target_constant_suggestion_error.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/geo_target_constant_suggestion_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible geo target constant suggestion errors.
+type GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError int32
+
+const (
+	// Enum unspecified.
+	GeoTargetConstantSuggestionErrorEnum_UNSPECIFIED GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 0
+	// The received error code is not known in this version.
+	GeoTargetConstantSuggestionErrorEnum_UNKNOWN GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 1
+	// A location name cannot be greater than 300 characters.
+	GeoTargetConstantSuggestionErrorEnum_LOCATION_NAME_SIZE_LIMIT GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 2
+	// At most 25 location names can be specified in a SuggestGeoTargetConstants
+	// method.
+	GeoTargetConstantSuggestionErrorEnum_LOCATION_NAME_LIMIT GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 3
+	// The country code is invalid.
+	GeoTargetConstantSuggestionErrorEnum_INVALID_COUNTRY_CODE GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 4
+	// Geo target constant resource names or location names must be provided in
+	// the request.
+	GeoTargetConstantSuggestionErrorEnum_REQUEST_PARAMETERS_UNSET GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError = 5
+)
+
+var GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "LOCATION_NAME_SIZE_LIMIT",
+	3: "LOCATION_NAME_LIMIT",
+	4: "INVALID_COUNTRY_CODE",
+	5: "REQUEST_PARAMETERS_UNSET",
+}
+var GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"LOCATION_NAME_SIZE_LIMIT": 2,
+	"LOCATION_NAME_LIMIT":      3,
+	"INVALID_COUNTRY_CODE":     4,
+	"REQUEST_PARAMETERS_UNSET": 5,
+}
+
+func (x GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError) String() string {
+	return proto.EnumName(GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_name, int32(x))
+}
+func (GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_suggestion_error_31080d85d3836c4e, []int{0, 0}
+}
+
+// Container for enum describing possible geo target constant suggestion errors.
+type GeoTargetConstantSuggestionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeoTargetConstantSuggestionErrorEnum) Reset()         { *m = GeoTargetConstantSuggestionErrorEnum{} }
+func (m *GeoTargetConstantSuggestionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstantSuggestionErrorEnum) ProtoMessage()    {}
+func (*GeoTargetConstantSuggestionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_suggestion_error_31080d85d3836c4e, []int{0}
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Unmarshal(m, b)
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *GeoTargetConstantSuggestionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Merge(dst, src)
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.Size(m)
+}
+func (m *GeoTargetConstantSuggestionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstantSuggestionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*GeoTargetConstantSuggestionErrorEnum)(nil), "google.ads.googleads.v0.errors.GeoTargetConstantSuggestionErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError", GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_name, GeoTargetConstantSuggestionErrorEnum_GeoTargetConstantSuggestionError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/geo_target_constant_suggestion_error.proto", fileDescriptor_geo_target_constant_suggestion_error_31080d85d3836c4e)
+}
+
+var fileDescriptor_geo_target_constant_suggestion_error_31080d85d3836c4e = []byte{
+	// 348 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xcd, 0x4a, 0xf3, 0x40,
+	0x14, 0x86, 0xbf, 0xb4, 0x9f, 0x0a, 0xd3, 0x85, 0x21, 0x0a, 0x76, 0x21, 0x45, 0x8a, 0x6e, 0x27,
+	0x01, 0x97, 0xae, 0xa6, 0xc9, 0x58, 0x06, 0xdb, 0x49, 0xcc, 0x4f, 0xc5, 0x12, 0x18, 0x62, 0x33,
+	0x0c, 0x85, 0x36, 0x53, 0x32, 0x69, 0x2f, 0xc8, 0xa5, 0x1b, 0xef, 0xc3, 0x2b, 0x10, 0xbc, 0x19,
+	0x49, 0xa6, 0x2d, 0xb8, 0xd0, 0xae, 0xf2, 0xc2, 0x79, 0xf2, 0x1c, 0xe6, 0x3d, 0x80, 0x08, 0x29,
+	0xc5, 0x82, 0xdb, 0x59, 0xae, 0x6c, 0x1d, 0xeb, 0xb4, 0x71, 0x6c, 0x5e, 0x96, 0xb2, 0x54, 0xb6,
+	0xe0, 0x92, 0x55, 0x59, 0x29, 0x78, 0xc5, 0x66, 0xb2, 0x50, 0x55, 0x56, 0x54, 0x4c, 0xad, 0x85,
+	0xe0, 0xaa, 0x9a, 0xcb, 0x82, 0x35, 0x14, 0x5c, 0x95, 0xb2, 0x92, 0x56, 0x4f, 0xff, 0x0f, 0xb3,
+	0x5c, 0xc1, 0xbd, 0x0a, 0x6e, 0x1c, 0xa8, 0x55, 0xfd, 0x4f, 0x03, 0x5c, 0x0f, 0xb9, 0x8c, 0x1b,
+	0x9b, 0xbb, 0x95, 0x45, 0x7b, 0x17, 0xae, 0x29, 0x5c, 0xac, 0x97, 0xfd, 0x77, 0x03, 0x5c, 0x1d,
+	0x02, 0xad, 0x53, 0xd0, 0x49, 0x68, 0x14, 0x60, 0x97, 0xdc, 0x13, 0xec, 0x99, 0xff, 0xac, 0x0e,
+	0x38, 0x49, 0xe8, 0x03, 0xf5, 0x9f, 0xa8, 0x69, 0x58, 0x97, 0xa0, 0x3b, 0xf2, 0x5d, 0x14, 0x13,
+	0x9f, 0x32, 0x8a, 0xc6, 0x98, 0x45, 0x64, 0x8a, 0xd9, 0x88, 0x8c, 0x49, 0x6c, 0xb6, 0xac, 0x0b,
+	0x70, 0xf6, 0x73, 0xaa, 0x07, 0x6d, 0xab, 0x0b, 0xce, 0x09, 0x9d, 0xa0, 0x11, 0xf1, 0x98, 0xeb,
+	0x27, 0x34, 0x0e, 0x9f, 0x99, 0xeb, 0x7b, 0xd8, 0xfc, 0x5f, 0x0b, 0x43, 0xfc, 0x98, 0xe0, 0x28,
+	0x66, 0x01, 0x0a, 0xd1, 0x18, 0xc7, 0x38, 0x8c, 0x58, 0x42, 0x23, 0x1c, 0x9b, 0x47, 0x83, 0x2f,
+	0x03, 0xf4, 0x67, 0x72, 0x09, 0xff, 0x6e, 0x60, 0x70, 0x73, 0xe8, 0x55, 0x41, 0x5d, 0x64, 0x60,
+	0x4c, 0xbd, 0xad, 0x48, 0xc8, 0x45, 0x56, 0x08, 0x28, 0x4b, 0x61, 0x0b, 0x5e, 0x34, 0x35, 0xef,
+	0xae, 0xb4, 0x9a, 0xab, 0xdf, 0x8e, 0x76, 0xa7, 0x3f, 0xaf, 0xad, 0xf6, 0x10, 0xa1, 0xb7, 0x56,
+	0x6f, 0xa8, 0x65, 0x28, 0x57, 0x50, 0xc7, 0x3a, 0x4d, 0x1c, 0xd8, 0xac, 0x54, 0x1f, 0x3b, 0x20,
+	0x45, 0xb9, 0x4a, 0xf7, 0x40, 0x3a, 0x71, 0x52, 0x0d, 0xbc, 0x1c, 0x37, 0x8b, 0x6f, 0xbf, 0x03,
+	0x00, 0x00, 0xff, 0xff, 0x71, 0xd6, 0x36, 0xfe, 0x2c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/header_error.pb.go b/googleapis/ads/googleads/v0/errors/header_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9f5989a31ba46a332b756765d46c61ff23bac6e2
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/header_error.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/header_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible header errors.
+type HeaderErrorEnum_HeaderError int32
+
+const (
+	// Enum unspecified.
+	HeaderErrorEnum_UNSPECIFIED HeaderErrorEnum_HeaderError = 0
+	// The received error code is not known in this version.
+	HeaderErrorEnum_UNKNOWN HeaderErrorEnum_HeaderError = 1
+	// The login customer id could not be validated.
+	HeaderErrorEnum_INVALID_LOGIN_CUSTOMER_ID HeaderErrorEnum_HeaderError = 3
+	// One or more task headers could not be parsed.
+	HeaderErrorEnum_MALFORMED_TASK_INFO HeaderErrorEnum_HeaderError = 4
+)
+
+var HeaderErrorEnum_HeaderError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "INVALID_LOGIN_CUSTOMER_ID",
+	4: "MALFORMED_TASK_INFO",
+}
+var HeaderErrorEnum_HeaderError_value = map[string]int32{
+	"UNSPECIFIED":               0,
+	"UNKNOWN":                   1,
+	"INVALID_LOGIN_CUSTOMER_ID": 3,
+	"MALFORMED_TASK_INFO":       4,
+}
+
+func (x HeaderErrorEnum_HeaderError) String() string {
+	return proto.EnumName(HeaderErrorEnum_HeaderError_name, int32(x))
+}
+func (HeaderErrorEnum_HeaderError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_header_error_eabd2af5e7269dcb, []int{0, 0}
+}
+
+// Container for enum describing possible header errors.
+type HeaderErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HeaderErrorEnum) Reset()         { *m = HeaderErrorEnum{} }
+func (m *HeaderErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*HeaderErrorEnum) ProtoMessage()    {}
+func (*HeaderErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_header_error_eabd2af5e7269dcb, []int{0}
+}
+func (m *HeaderErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HeaderErrorEnum.Unmarshal(m, b)
+}
+func (m *HeaderErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HeaderErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *HeaderErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HeaderErrorEnum.Merge(dst, src)
+}
+func (m *HeaderErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_HeaderErrorEnum.Size(m)
+}
+func (m *HeaderErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_HeaderErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HeaderErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*HeaderErrorEnum)(nil), "google.ads.googleads.v0.errors.HeaderErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.HeaderErrorEnum_HeaderError", HeaderErrorEnum_HeaderError_name, HeaderErrorEnum_HeaderError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/header_error.proto", fileDescriptor_header_error_eabd2af5e7269dcb)
+}
+
+var fileDescriptor_header_error_eabd2af5e7269dcb = []byte{
+	// 287 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4f, 0x83, 0x30,
+	0x18, 0xc6, 0x65, 0x33, 0x9a, 0x94, 0xc3, 0x08, 0x1e, 0x8c, 0x07, 0x77, 0xe0, 0x03, 0x14, 0x8c,
+	0x47, 0x4f, 0xdd, 0x28, 0xd8, 0x0c, 0x0a, 0x19, 0x03, 0x13, 0x43, 0xd2, 0xe0, 0x20, 0xd5, 0x64,
+	0xa3, 0x4b, 0xab, 0x7c, 0x20, 0x8f, 0x7e, 0x10, 0x0f, 0x7e, 0x2a, 0x03, 0x75, 0xcb, 0x2e, 0xee,
+	0xd4, 0xe7, 0x6d, 0x9e, 0xdf, 0xfb, 0xe7, 0x01, 0x77, 0x5c, 0x08, 0xbe, 0x69, 0xdc, 0xaa, 0x56,
+	0xae, 0x96, 0xbd, 0xea, 0x3c, 0xb7, 0x91, 0x52, 0x48, 0xe5, 0xbe, 0x36, 0x55, 0xdd, 0x48, 0x36,
+	0x54, 0x70, 0x27, 0xc5, 0xbb, 0xb0, 0xa7, 0xda, 0x07, 0xab, 0x5a, 0xc1, 0x03, 0x02, 0x3b, 0x0f,
+	0x6a, 0xc4, 0xe9, 0xc0, 0xe4, 0x71, 0xa0, 0x70, 0x5f, 0xe3, 0xf6, 0x63, 0xeb, 0xac, 0x81, 0x79,
+	0xf4, 0x65, 0x4f, 0x80, 0x99, 0xd3, 0x2c, 0xc5, 0x73, 0x12, 0x10, 0xec, 0x5b, 0x67, 0xb6, 0x09,
+	0x2e, 0x73, 0xba, 0xa0, 0xc9, 0x13, 0xb5, 0x0c, 0xfb, 0x16, 0xdc, 0x10, 0x5a, 0xa0, 0x88, 0xf8,
+	0x2c, 0x4a, 0x42, 0x42, 0xd9, 0x3c, 0xcf, 0x56, 0x49, 0x8c, 0x97, 0x8c, 0xf8, 0xd6, 0xd8, 0xbe,
+	0x06, 0x57, 0x31, 0x8a, 0x82, 0x64, 0x19, 0x63, 0x9f, 0xad, 0x50, 0xb6, 0x60, 0x84, 0x06, 0x89,
+	0x75, 0x3e, 0xfb, 0x36, 0x80, 0xb3, 0x16, 0x5b, 0x78, 0x7a, 0xbd, 0x99, 0x75, 0xb4, 0x49, 0xda,
+	0x1f, 0x94, 0x1a, 0xcf, 0xfe, 0x1f, 0xc3, 0xc5, 0xa6, 0x6a, 0x39, 0x14, 0x92, 0xbb, 0xbc, 0x69,
+	0x87, 0x73, 0xf7, 0xa9, 0xec, 0xde, 0xd4, 0x7f, 0x21, 0x3d, 0xe8, 0xe7, 0x73, 0x34, 0x0e, 0x11,
+	0xfa, 0x1a, 0x4d, 0x43, 0xdd, 0x0c, 0xd5, 0x0a, 0x6a, 0xd9, 0xab, 0xc2, 0x83, 0xc3, 0x48, 0xf5,
+	0xb3, 0x37, 0x94, 0xa8, 0x56, 0xe5, 0xc1, 0x50, 0x16, 0x5e, 0xa9, 0x0d, 0x2f, 0x17, 0xc3, 0xe0,
+	0xfb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x42, 0x27, 0xed, 0x8b, 0x9c, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/id_error.pb.go b/googleapis/ads/googleads/v0/errors/id_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4396b878ff429898686020389d84470ba7981fc3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/id_error.pb.go
@@ -0,0 +1,109 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/id_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible id errors.
+type IdErrorEnum_IdError int32
+
+const (
+	// Enum unspecified.
+	IdErrorEnum_UNSPECIFIED IdErrorEnum_IdError = 0
+	// The received error code is not known in this version.
+	IdErrorEnum_UNKNOWN IdErrorEnum_IdError = 1
+	// Id not found
+	IdErrorEnum_NOT_FOUND IdErrorEnum_IdError = 2
+)
+
+var IdErrorEnum_IdError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NOT_FOUND",
+}
+var IdErrorEnum_IdError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"NOT_FOUND":   2,
+}
+
+func (x IdErrorEnum_IdError) String() string {
+	return proto.EnumName(IdErrorEnum_IdError_name, int32(x))
+}
+func (IdErrorEnum_IdError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_id_error_830ff368cfbe18b8, []int{0, 0}
+}
+
+// Container for enum describing possible id errors.
+type IdErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *IdErrorEnum) Reset()         { *m = IdErrorEnum{} }
+func (m *IdErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*IdErrorEnum) ProtoMessage()    {}
+func (*IdErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_id_error_830ff368cfbe18b8, []int{0}
+}
+func (m *IdErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IdErrorEnum.Unmarshal(m, b)
+}
+func (m *IdErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IdErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *IdErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IdErrorEnum.Merge(dst, src)
+}
+func (m *IdErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_IdErrorEnum.Size(m)
+}
+func (m *IdErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_IdErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IdErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*IdErrorEnum)(nil), "google.ads.googleads.v0.errors.IdErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.IdErrorEnum_IdError", IdErrorEnum_IdError_name, IdErrorEnum_IdError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/id_error.proto", fileDescriptor_id_error_830ff368cfbe18b8)
+}
+
+var fileDescriptor_id_error_830ff368cfbe18b8 = []byte{
+	// 241 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xcc, 0x94, 0x78, 0x30, 0x4b, 0xaf, 0xa0, 0x28, 0xbf, 0x24, 0x5f,
+	0x48, 0x0e, 0xa2, 0x46, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x5c, 0xaf, 0xcc, 0x40, 0x0f, 0xa2,
+	0x5c, 0xc9, 0x95, 0x8b, 0xdb, 0x33, 0xc5, 0x15, 0xc4, 0x76, 0xcd, 0x2b, 0xcd, 0x55, 0x32, 0xe3,
+	0x62, 0x87, 0x72, 0x85, 0xf8, 0xb9, 0xb8, 0x43, 0xfd, 0x82, 0x03, 0x5c, 0x9d, 0x3d, 0xdd, 0x3c,
+	0x5d, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb9, 0xd8, 0x43, 0xfd, 0xbc, 0xfd, 0xfc, 0xc3, 0xfd, 0x04,
+	0x18, 0x85, 0x78, 0xb9, 0x38, 0xfd, 0xfc, 0x43, 0xe2, 0xdd, 0xfc, 0x43, 0xfd, 0x5c, 0x04, 0x98,
+	0x9c, 0x0e, 0x31, 0x72, 0x29, 0x25, 0xe7, 0xe7, 0xea, 0xe1, 0xb7, 0xcd, 0x89, 0x07, 0x6a, 0x78,
+	0x00, 0xc8, 0x6d, 0x01, 0x8c, 0x51, 0x2e, 0x50, 0xf5, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a,
+	0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79, 0x60, 0x97, 0xc3, 0x3c, 0x57, 0x90, 0x59, 0x8c, 0xcb,
+	0xaf, 0xd6, 0x10, 0x6a, 0x11, 0x13, 0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0x61,
+	0x8e, 0x29, 0xc5, 0x7a, 0x10, 0x26, 0x88, 0x15, 0x66, 0xa0, 0x07, 0xb6, 0xb2, 0xf8, 0x14, 0x4c,
+	0x41, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x41, 0x4c, 0x98, 0x41, 0x0c, 0x44, 0x41, 0x12, 0x1b,
+	0xd8, 0x62, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xc3, 0x73, 0x1b, 0x63, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/image_error.pb.go b/googleapis/ads/googleads/v0/errors/image_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e97f7838de124e3ec1b41dcac1e546ad00c28a07
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/image_error.pb.go
@@ -0,0 +1,285 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/image_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible image errors.
+type ImageErrorEnum_ImageError int32
+
+const (
+	// Enum unspecified.
+	ImageErrorEnum_UNSPECIFIED ImageErrorEnum_ImageError = 0
+	// The received error code is not known in this version.
+	ImageErrorEnum_UNKNOWN ImageErrorEnum_ImageError = 1
+	// The image is not valid.
+	ImageErrorEnum_INVALID_IMAGE ImageErrorEnum_ImageError = 2
+	// The image could not be stored.
+	ImageErrorEnum_STORAGE_ERROR ImageErrorEnum_ImageError = 3
+	// There was a problem with the request.
+	ImageErrorEnum_BAD_REQUEST ImageErrorEnum_ImageError = 4
+	// The image is not of legal dimensions.
+	ImageErrorEnum_UNEXPECTED_SIZE ImageErrorEnum_ImageError = 5
+	// Animated image are not permitted.
+	ImageErrorEnum_ANIMATED_NOT_ALLOWED ImageErrorEnum_ImageError = 6
+	// Animation is too long.
+	ImageErrorEnum_ANIMATION_TOO_LONG ImageErrorEnum_ImageError = 7
+	// There was an error on the server.
+	ImageErrorEnum_SERVER_ERROR ImageErrorEnum_ImageError = 8
+	// Image cannot be in CMYK color format.
+	ImageErrorEnum_CMYK_JPEG_NOT_ALLOWED ImageErrorEnum_ImageError = 9
+	// Flash images are not permitted.
+	ImageErrorEnum_FLASH_NOT_ALLOWED ImageErrorEnum_ImageError = 10
+	// Flash images must support clickTag.
+	ImageErrorEnum_FLASH_WITHOUT_CLICKTAG ImageErrorEnum_ImageError = 11
+	// A flash error has occurred after fixing the click tag.
+	ImageErrorEnum_FLASH_ERROR_AFTER_FIXING_CLICK_TAG ImageErrorEnum_ImageError = 12
+	// Unacceptable visual effects.
+	ImageErrorEnum_ANIMATED_VISUAL_EFFECT ImageErrorEnum_ImageError = 13
+	// There was a problem with the flash image.
+	ImageErrorEnum_FLASH_ERROR ImageErrorEnum_ImageError = 14
+	// Incorrect image layout.
+	ImageErrorEnum_LAYOUT_PROBLEM ImageErrorEnum_ImageError = 15
+	// There was a problem reading the image file.
+	ImageErrorEnum_PROBLEM_READING_IMAGE_FILE ImageErrorEnum_ImageError = 16
+	// There was an error storing the image.
+	ImageErrorEnum_ERROR_STORING_IMAGE ImageErrorEnum_ImageError = 17
+	// The aspect ratio of the image is not allowed.
+	ImageErrorEnum_ASPECT_RATIO_NOT_ALLOWED ImageErrorEnum_ImageError = 18
+	// Flash cannot have network objects.
+	ImageErrorEnum_FLASH_HAS_NETWORK_OBJECTS ImageErrorEnum_ImageError = 19
+	// Flash cannot have network methods.
+	ImageErrorEnum_FLASH_HAS_NETWORK_METHODS ImageErrorEnum_ImageError = 20
+	// Flash cannot have a Url.
+	ImageErrorEnum_FLASH_HAS_URL ImageErrorEnum_ImageError = 21
+	// Flash cannot use mouse tracking.
+	ImageErrorEnum_FLASH_HAS_MOUSE_TRACKING ImageErrorEnum_ImageError = 22
+	// Flash cannot have a random number.
+	ImageErrorEnum_FLASH_HAS_RANDOM_NUM ImageErrorEnum_ImageError = 23
+	// Ad click target cannot be '_self'.
+	ImageErrorEnum_FLASH_SELF_TARGETS ImageErrorEnum_ImageError = 24
+	// GetUrl method should only use '_blank'.
+	ImageErrorEnum_FLASH_BAD_GETURL_TARGET ImageErrorEnum_ImageError = 25
+	// Flash version is not supported.
+	ImageErrorEnum_FLASH_VERSION_NOT_SUPPORTED ImageErrorEnum_ImageError = 26
+	// Flash movies need to have hard coded click URL or clickTAG
+	ImageErrorEnum_FLASH_WITHOUT_HARD_CODED_CLICK_URL ImageErrorEnum_ImageError = 27
+	// Uploaded flash file is corrupted.
+	ImageErrorEnum_INVALID_FLASH_FILE ImageErrorEnum_ImageError = 28
+	// Uploaded flash file can be parsed, but the click tag can not be fixed
+	// properly.
+	ImageErrorEnum_FAILED_TO_FIX_CLICK_TAG_IN_FLASH ImageErrorEnum_ImageError = 29
+	// Flash movie accesses network resources
+	ImageErrorEnum_FLASH_ACCESSES_NETWORK_RESOURCES ImageErrorEnum_ImageError = 30
+	// Flash movie attempts to call external javascript code
+	ImageErrorEnum_FLASH_EXTERNAL_JS_CALL ImageErrorEnum_ImageError = 31
+	// Flash movie attempts to call flash system commands
+	ImageErrorEnum_FLASH_EXTERNAL_FS_CALL ImageErrorEnum_ImageError = 32
+	// Image file is too large.
+	ImageErrorEnum_FILE_TOO_LARGE ImageErrorEnum_ImageError = 33
+	// Image data is too large.
+	ImageErrorEnum_IMAGE_DATA_TOO_LARGE ImageErrorEnum_ImageError = 34
+	// Error while processing the image.
+	ImageErrorEnum_IMAGE_PROCESSING_ERROR ImageErrorEnum_ImageError = 35
+	// Image is too small.
+	ImageErrorEnum_IMAGE_TOO_SMALL ImageErrorEnum_ImageError = 36
+	// Input was invalid.
+	ImageErrorEnum_INVALID_INPUT ImageErrorEnum_ImageError = 37
+	// There was a problem reading the image file.
+	ImageErrorEnum_PROBLEM_READING_FILE ImageErrorEnum_ImageError = 38
+)
+
+var ImageErrorEnum_ImageError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_IMAGE",
+	3:  "STORAGE_ERROR",
+	4:  "BAD_REQUEST",
+	5:  "UNEXPECTED_SIZE",
+	6:  "ANIMATED_NOT_ALLOWED",
+	7:  "ANIMATION_TOO_LONG",
+	8:  "SERVER_ERROR",
+	9:  "CMYK_JPEG_NOT_ALLOWED",
+	10: "FLASH_NOT_ALLOWED",
+	11: "FLASH_WITHOUT_CLICKTAG",
+	12: "FLASH_ERROR_AFTER_FIXING_CLICK_TAG",
+	13: "ANIMATED_VISUAL_EFFECT",
+	14: "FLASH_ERROR",
+	15: "LAYOUT_PROBLEM",
+	16: "PROBLEM_READING_IMAGE_FILE",
+	17: "ERROR_STORING_IMAGE",
+	18: "ASPECT_RATIO_NOT_ALLOWED",
+	19: "FLASH_HAS_NETWORK_OBJECTS",
+	20: "FLASH_HAS_NETWORK_METHODS",
+	21: "FLASH_HAS_URL",
+	22: "FLASH_HAS_MOUSE_TRACKING",
+	23: "FLASH_HAS_RANDOM_NUM",
+	24: "FLASH_SELF_TARGETS",
+	25: "FLASH_BAD_GETURL_TARGET",
+	26: "FLASH_VERSION_NOT_SUPPORTED",
+	27: "FLASH_WITHOUT_HARD_CODED_CLICK_URL",
+	28: "INVALID_FLASH_FILE",
+	29: "FAILED_TO_FIX_CLICK_TAG_IN_FLASH",
+	30: "FLASH_ACCESSES_NETWORK_RESOURCES",
+	31: "FLASH_EXTERNAL_JS_CALL",
+	32: "FLASH_EXTERNAL_FS_CALL",
+	33: "FILE_TOO_LARGE",
+	34: "IMAGE_DATA_TOO_LARGE",
+	35: "IMAGE_PROCESSING_ERROR",
+	36: "IMAGE_TOO_SMALL",
+	37: "INVALID_INPUT",
+	38: "PROBLEM_READING_FILE",
+}
+var ImageErrorEnum_ImageError_value = map[string]int32{
+	"UNSPECIFIED":                        0,
+	"UNKNOWN":                            1,
+	"INVALID_IMAGE":                      2,
+	"STORAGE_ERROR":                      3,
+	"BAD_REQUEST":                        4,
+	"UNEXPECTED_SIZE":                    5,
+	"ANIMATED_NOT_ALLOWED":               6,
+	"ANIMATION_TOO_LONG":                 7,
+	"SERVER_ERROR":                       8,
+	"CMYK_JPEG_NOT_ALLOWED":              9,
+	"FLASH_NOT_ALLOWED":                  10,
+	"FLASH_WITHOUT_CLICKTAG":             11,
+	"FLASH_ERROR_AFTER_FIXING_CLICK_TAG": 12,
+	"ANIMATED_VISUAL_EFFECT":             13,
+	"FLASH_ERROR":                        14,
+	"LAYOUT_PROBLEM":                     15,
+	"PROBLEM_READING_IMAGE_FILE":         16,
+	"ERROR_STORING_IMAGE":                17,
+	"ASPECT_RATIO_NOT_ALLOWED":           18,
+	"FLASH_HAS_NETWORK_OBJECTS":          19,
+	"FLASH_HAS_NETWORK_METHODS":          20,
+	"FLASH_HAS_URL":                      21,
+	"FLASH_HAS_MOUSE_TRACKING":           22,
+	"FLASH_HAS_RANDOM_NUM":               23,
+	"FLASH_SELF_TARGETS":                 24,
+	"FLASH_BAD_GETURL_TARGET":            25,
+	"FLASH_VERSION_NOT_SUPPORTED":        26,
+	"FLASH_WITHOUT_HARD_CODED_CLICK_URL": 27,
+	"INVALID_FLASH_FILE":                 28,
+	"FAILED_TO_FIX_CLICK_TAG_IN_FLASH":   29,
+	"FLASH_ACCESSES_NETWORK_RESOURCES":   30,
+	"FLASH_EXTERNAL_JS_CALL":             31,
+	"FLASH_EXTERNAL_FS_CALL":             32,
+	"FILE_TOO_LARGE":                     33,
+	"IMAGE_DATA_TOO_LARGE":               34,
+	"IMAGE_PROCESSING_ERROR":             35,
+	"IMAGE_TOO_SMALL":                    36,
+	"INVALID_INPUT":                      37,
+	"PROBLEM_READING_FILE":               38,
+}
+
+func (x ImageErrorEnum_ImageError) String() string {
+	return proto.EnumName(ImageErrorEnum_ImageError_name, int32(x))
+}
+func (ImageErrorEnum_ImageError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_image_error_ebc5093c3fe82b29, []int{0, 0}
+}
+
+// Container for enum describing possible image errors.
+type ImageErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ImageErrorEnum) Reset()         { *m = ImageErrorEnum{} }
+func (m *ImageErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ImageErrorEnum) ProtoMessage()    {}
+func (*ImageErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_image_error_ebc5093c3fe82b29, []int{0}
+}
+func (m *ImageErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageErrorEnum.Unmarshal(m, b)
+}
+func (m *ImageErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *ImageErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageErrorEnum.Merge(dst, src)
+}
+func (m *ImageErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ImageErrorEnum.Size(m)
+}
+func (m *ImageErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ImageErrorEnum)(nil), "google.ads.googleads.v0.errors.ImageErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.ImageErrorEnum_ImageError", ImageErrorEnum_ImageError_name, ImageErrorEnum_ImageError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/image_error.proto", fileDescriptor_image_error_ebc5093c3fe82b29)
+}
+
+var fileDescriptor_image_error_ebc5093c3fe82b29 = []byte{
+	// 745 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcd, 0x8e, 0xdb, 0x36,
+	0x10, 0xee, 0x6e, 0xda, 0x6c, 0xca, 0x4d, 0xd6, 0x5c, 0x6e, 0xf6, 0x3f, 0x71, 0x52, 0x37, 0xcd,
+	0x51, 0x36, 0xd0, 0x63, 0x4f, 0xb4, 0x34, 0x92, 0xb9, 0xa6, 0x48, 0x95, 0xa4, 0xec, 0x4d, 0x60,
+	0x80, 0x70, 0x6b, 0xc3, 0x08, 0x90, 0x5d, 0x05, 0x76, 0x9b, 0x87, 0xe8, 0x63, 0xf4, 0xd8, 0xf7,
+	0xe8, 0xa5, 0x2f, 0xd4, 0x6b, 0x31, 0xa2, 0x6d, 0xc5, 0x45, 0xda, 0x93, 0xc8, 0xf9, 0x66, 0xbe,
+	0x19, 0xce, 0x37, 0x1a, 0xd2, 0x5b, 0x54, 0xd5, 0xe2, 0xfd, 0xbc, 0x3b, 0x9d, 0xad, 0xba, 0xe1,
+	0x88, 0xa7, 0x8f, 0xbd, 0xee, 0x7c, 0xb9, 0xac, 0x96, 0xab, 0xee, 0xbb, 0xbb, 0xe9, 0x62, 0xee,
+	0xeb, 0x4b, 0xf4, 0x61, 0x59, 0xfd, 0x52, 0xb1, 0x76, 0x70, 0x8b, 0xa6, 0xb3, 0x55, 0xb4, 0x8d,
+	0x88, 0x3e, 0xf6, 0xa2, 0x10, 0xd1, 0xf9, 0xed, 0x11, 0x39, 0x12, 0x18, 0x05, 0x78, 0x87, 0xfb,
+	0x5f, 0xef, 0x3a, 0x7f, 0x1f, 0x10, 0xd2, 0x98, 0x58, 0x8b, 0x1c, 0x96, 0xca, 0x16, 0x10, 0x8b,
+	0x54, 0x40, 0x42, 0xbf, 0x60, 0x87, 0xe4, 0xa0, 0x54, 0x43, 0xa5, 0xc7, 0x8a, 0xee, 0xb1, 0x63,
+	0xf2, 0x44, 0xa8, 0x11, 0x97, 0x22, 0xf1, 0x22, 0xe7, 0x19, 0xd0, 0x7d, 0x34, 0x59, 0xa7, 0x0d,
+	0xcf, 0xc0, 0x83, 0x31, 0xda, 0xd0, 0x07, 0xc8, 0xd1, 0xe7, 0x89, 0x37, 0xf0, 0x63, 0x09, 0xd6,
+	0xd1, 0x2f, 0xd9, 0x09, 0x69, 0x95, 0x0a, 0x6e, 0x0b, 0x88, 0x1d, 0x24, 0xde, 0x8a, 0xb7, 0x40,
+	0xbf, 0x62, 0x17, 0xe4, 0x29, 0x57, 0x22, 0xe7, 0x68, 0x52, 0xda, 0x79, 0x2e, 0xa5, 0x1e, 0x43,
+	0x42, 0x1f, 0xb2, 0x33, 0xc2, 0x02, 0x22, 0xb4, 0xf2, 0x4e, 0x6b, 0x2f, 0xb5, 0xca, 0xe8, 0x01,
+	0xa3, 0xe4, 0xb1, 0x05, 0x33, 0x02, 0xb3, 0xce, 0xf4, 0x88, 0x5d, 0x92, 0xd3, 0x38, 0x7f, 0x33,
+	0xf4, 0x37, 0x05, 0x64, 0x3b, 0x24, 0x5f, 0xb3, 0x53, 0x72, 0x9c, 0x4a, 0x6e, 0x07, 0x3b, 0x66,
+	0xc2, 0xae, 0xc8, 0x59, 0x30, 0x8f, 0x85, 0x1b, 0xe8, 0xd2, 0xf9, 0x58, 0x8a, 0x78, 0xe8, 0x78,
+	0x46, 0x0f, 0xd9, 0x6b, 0xd2, 0x09, 0x58, 0x4d, 0xef, 0x79, 0xea, 0xc0, 0xf8, 0x54, 0xdc, 0x0a,
+	0x95, 0x05, 0x37, 0x8f, 0x7e, 0x8f, 0x91, 0x63, 0x5b, 0xf9, 0x48, 0xd8, 0x92, 0x4b, 0x0f, 0x69,
+	0x0a, 0xb1, 0xa3, 0x4f, 0xf0, 0xed, 0x9f, 0x70, 0xd0, 0x23, 0xc6, 0xc8, 0x91, 0xe4, 0x6f, 0x30,
+	0x53, 0x61, 0x74, 0x5f, 0x42, 0x4e, 0x5b, 0xac, 0x4d, 0xae, 0xd6, 0x17, 0x6f, 0x80, 0x27, 0xc8,
+	0x5f, 0xb7, 0xd3, 0xa7, 0x42, 0x02, 0xa5, 0xec, 0x9c, 0x9c, 0x84, 0x12, 0xb0, 0xb3, 0x5b, 0x94,
+	0x1e, 0xb3, 0x67, 0xe4, 0x82, 0xa3, 0x38, 0xce, 0x1b, 0xec, 0xce, 0xce, 0xdb, 0x18, 0x7b, 0x4e,
+	0x2e, 0x43, 0xee, 0x01, 0xb7, 0x5e, 0x81, 0x1b, 0x6b, 0x33, 0xf4, 0xba, 0x7f, 0x03, 0xb1, 0xb3,
+	0xf4, 0xe4, 0xf3, 0x70, 0x0e, 0x6e, 0xa0, 0x13, 0x4b, 0x9f, 0xa2, 0x90, 0x0d, 0x5c, 0x1a, 0x49,
+	0x4f, 0x31, 0x5d, 0x63, 0xca, 0x75, 0x69, 0xc1, 0x3b, 0xc3, 0xe3, 0xa1, 0x50, 0x19, 0x3d, 0x43,
+	0x01, 0x1b, 0xd4, 0x70, 0x95, 0xe8, 0xdc, 0xab, 0x32, 0xa7, 0xe7, 0x28, 0x60, 0x40, 0x2c, 0xc8,
+	0xd4, 0x3b, 0x6e, 0x32, 0x70, 0x96, 0x5e, 0xb0, 0x6b, 0x72, 0x1e, 0xec, 0x38, 0x1e, 0x19, 0xb8,
+	0xd2, 0xc8, 0x35, 0x4a, 0x2f, 0xd9, 0x0b, 0x72, 0x1d, 0xc0, 0x11, 0x18, 0x8b, 0xca, 0xe3, 0xe3,
+	0x6c, 0x59, 0x14, 0xda, 0x38, 0x48, 0xe8, 0x55, 0x23, 0xcf, 0x46, 0xba, 0x01, 0x37, 0x89, 0x8f,
+	0x75, 0x02, 0xc9, 0x5a, 0x1e, 0xac, 0xfa, 0x1a, 0xb3, 0x6f, 0x86, 0x34, 0xf8, 0xd7, 0x5d, 0x7d,
+	0xc6, 0x5e, 0x91, 0x97, 0x29, 0x17, 0x12, 0x12, 0xef, 0x34, 0xca, 0xda, 0x68, 0xea, 0x85, 0x0a,
+	0xae, 0xf4, 0x79, 0xed, 0x55, 0x47, 0xf1, 0x38, 0x06, 0x6b, 0xa1, 0x69, 0x95, 0x01, 0xab, 0x4b,
+	0x13, 0x83, 0xa5, 0xed, 0x66, 0x8c, 0xe0, 0xd6, 0x81, 0x51, 0x5c, 0xfa, 0x1b, 0xeb, 0x63, 0x2e,
+	0x25, 0x7d, 0xf1, 0x19, 0x2c, 0x5d, 0x63, 0x2f, 0x71, 0x1a, 0xb0, 0x9a, 0x30, 0xd5, 0xf8, 0x72,
+	0xfa, 0x0d, 0xf6, 0x31, 0xa8, 0x9f, 0x70, 0xc7, 0x3f, 0x41, 0x3a, 0xc8, 0x14, 0x90, 0xc2, 0x68,
+	0x2c, 0x06, 0x47, 0x21, 0xcc, 0xd5, 0xb7, 0xf8, 0x4f, 0x05, 0x0c, 0x03, 0x6c, 0x8e, 0xf4, 0xaf,
+	0x76, 0xfe, 0x4f, 0x55, 0x94, 0x8e, 0x7e, 0x87, 0xec, 0xff, 0x9e, 0xb5, 0xba, 0x1f, 0xaf, 0xfb,
+	0x7f, 0xee, 0x91, 0xce, 0xcf, 0xd5, 0x5d, 0xf4, 0xff, 0x3b, 0xa3, 0xdf, 0x6a, 0xb6, 0x43, 0x81,
+	0x4b, 0xa6, 0xd8, 0x7b, 0x9b, 0xac, 0x43, 0x16, 0xd5, 0xfb, 0xe9, 0xfd, 0x22, 0xaa, 0x96, 0x8b,
+	0xee, 0x62, 0x7e, 0x5f, 0xaf, 0xa0, 0xcd, 0xa2, 0xfa, 0xf0, 0x6e, 0xf5, 0x5f, 0x7b, 0xeb, 0x87,
+	0xf0, 0xf9, 0x7d, 0xff, 0x41, 0xc6, 0xf9, 0x1f, 0xfb, 0xed, 0x2c, 0x90, 0xf1, 0xd9, 0x2a, 0x0a,
+	0x47, 0x3c, 0x8d, 0x7a, 0x51, 0x9d, 0x72, 0xf5, 0xd7, 0xc6, 0x61, 0xc2, 0x67, 0xab, 0xc9, 0xd6,
+	0x61, 0x32, 0xea, 0x4d, 0x82, 0xc3, 0x4f, 0x0f, 0xeb, 0xc4, 0xdf, 0xff, 0x13, 0x00, 0x00, 0xff,
+	0xff, 0x7f, 0xbf, 0x42, 0x86, 0x2f, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/internal_error.pb.go b/googleapis/ads/googleads/v0/errors/internal_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d5b815f5a31e2630fbb48a7fb681f5bd19518d40
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/internal_error.pb.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/internal_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible internal errors.
+type InternalErrorEnum_InternalError int32
+
+const (
+	// Enum unspecified.
+	InternalErrorEnum_UNSPECIFIED InternalErrorEnum_InternalError = 0
+	// The received error code is not known in this version.
+	InternalErrorEnum_UNKNOWN InternalErrorEnum_InternalError = 1
+	// Google Ads API encountered unexpected internal error.
+	InternalErrorEnum_INTERNAL_ERROR InternalErrorEnum_InternalError = 2
+	// The intended error code doesn't exist in any API version. This will be
+	// fixed by adding a new error code as soon as possible.
+	InternalErrorEnum_ERROR_CODE_NOT_PUBLISHED InternalErrorEnum_InternalError = 3
+	// Google Ads API encountered an unexpected transient error. The user
+	// should retry their request in these cases.
+	InternalErrorEnum_TRANSIENT_ERROR InternalErrorEnum_InternalError = 4
+)
+
+var InternalErrorEnum_InternalError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INTERNAL_ERROR",
+	3: "ERROR_CODE_NOT_PUBLISHED",
+	4: "TRANSIENT_ERROR",
+}
+var InternalErrorEnum_InternalError_value = map[string]int32{
+	"UNSPECIFIED":              0,
+	"UNKNOWN":                  1,
+	"INTERNAL_ERROR":           2,
+	"ERROR_CODE_NOT_PUBLISHED": 3,
+	"TRANSIENT_ERROR":          4,
+}
+
+func (x InternalErrorEnum_InternalError) String() string {
+	return proto.EnumName(InternalErrorEnum_InternalError_name, int32(x))
+}
+func (InternalErrorEnum_InternalError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_internal_error_e2abdd822d282a61, []int{0, 0}
+}
+
+// Container for enum describing possible internal errors.
+type InternalErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InternalErrorEnum) Reset()         { *m = InternalErrorEnum{} }
+func (m *InternalErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*InternalErrorEnum) ProtoMessage()    {}
+func (*InternalErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_internal_error_e2abdd822d282a61, []int{0}
+}
+func (m *InternalErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InternalErrorEnum.Unmarshal(m, b)
+}
+func (m *InternalErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InternalErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *InternalErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InternalErrorEnum.Merge(dst, src)
+}
+func (m *InternalErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_InternalErrorEnum.Size(m)
+}
+func (m *InternalErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_InternalErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InternalErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*InternalErrorEnum)(nil), "google.ads.googleads.v0.errors.InternalErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.InternalErrorEnum_InternalError", InternalErrorEnum_InternalError_name, InternalErrorEnum_InternalError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/internal_error.proto", fileDescriptor_internal_error_e2abdd822d282a61)
+}
+
+var fileDescriptor_internal_error_e2abdd822d282a61 = []byte{
+	// 295 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x14, 0x87, 0x6d, 0x27, 0x0a, 0x19, 0xba, 0x1a, 0x6f, 0xbc, 0x90, 0x5d, 0xf4, 0x01, 0xd2, 0xc2,
+	0x2e, 0xbd, 0x4a, 0xd7, 0x38, 0x83, 0x23, 0x2d, 0xfd, 0x33, 0x41, 0x0a, 0xa5, 0xda, 0x12, 0x06,
+	0x5d, 0x33, 0x92, 0xba, 0x77, 0xf0, 0x35, 0xbc, 0xf4, 0x49, 0xc4, 0xa7, 0x92, 0x36, 0xdd, 0x60,
+	0x17, 0xee, 0x2a, 0x5f, 0x0e, 0xbf, 0x2f, 0xe7, 0xe4, 0x80, 0x19, 0x17, 0x82, 0xd7, 0x95, 0x53,
+	0x94, 0xca, 0xd1, 0xd8, 0xd1, 0xce, 0x75, 0x2a, 0x29, 0x85, 0x54, 0xce, 0xba, 0x69, 0x2b, 0xd9,
+	0x14, 0x75, 0xde, 0xdf, 0xd1, 0x56, 0x8a, 0x56, 0xc0, 0xa9, 0x4e, 0xa2, 0xa2, 0x54, 0xe8, 0x20,
+	0xa1, 0x9d, 0x8b, 0xb4, 0x64, 0x7f, 0x1a, 0xe0, 0x86, 0x0e, 0x22, 0xe9, 0x4a, 0xa4, 0xf9, 0xd8,
+	0xd8, 0x2d, 0xb8, 0x3a, 0x2a, 0xc2, 0x09, 0x18, 0xa7, 0x2c, 0x0e, 0xc9, 0x9c, 0x3e, 0x52, 0xe2,
+	0x5b, 0x67, 0x70, 0x0c, 0x2e, 0x53, 0xf6, 0xcc, 0x82, 0x17, 0x66, 0x19, 0x10, 0x82, 0x6b, 0xca,
+	0x12, 0x12, 0x31, 0xbc, 0xcc, 0x49, 0x14, 0x05, 0x91, 0x65, 0xc2, 0x7b, 0x70, 0xd7, 0x63, 0x3e,
+	0x0f, 0x7c, 0x92, 0xb3, 0x20, 0xc9, 0xc3, 0xd4, 0x5b, 0xd2, 0xf8, 0x89, 0xf8, 0xd6, 0x08, 0xde,
+	0x82, 0x49, 0x12, 0x61, 0x16, 0x53, 0xc2, 0x92, 0x41, 0x39, 0xf7, 0x7e, 0x0c, 0x60, 0xbf, 0x8b,
+	0x0d, 0x3a, 0x3d, 0xb2, 0x07, 0x8f, 0x46, 0x0b, 0xbb, 0x6f, 0x86, 0xc6, 0xab, 0x3f, 0x58, 0x5c,
+	0xd4, 0x45, 0xc3, 0x91, 0x90, 0xdc, 0xe1, 0x55, 0xd3, 0x2f, 0x61, 0xbf, 0xad, 0xed, 0x5a, 0xfd,
+	0xb7, 0xbc, 0x07, 0x7d, 0x7c, 0x99, 0xa3, 0x05, 0xc6, 0xdf, 0xe6, 0x74, 0xa1, 0x1f, 0xc3, 0xa5,
+	0x42, 0x1a, 0x3b, 0x5a, 0xb9, 0xa8, 0x6f, 0xa9, 0x7e, 0xf7, 0x81, 0x0c, 0x97, 0x2a, 0x3b, 0x04,
+	0xb2, 0x95, 0x9b, 0xe9, 0xc0, 0xdb, 0x45, 0xdf, 0x78, 0xf6, 0x17, 0x00, 0x00, 0xff, 0xff, 0xde,
+	0xc7, 0xf6, 0x6e, 0xb4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/keyword_plan_ad_group_error.pb.go b/googleapis/ads/googleads/v0/errors/keyword_plan_ad_group_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9a573641f2acce098f55f3ded6acf41894554ab9
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/keyword_plan_ad_group_error.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/keyword_plan_ad_group_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan ad group.
+type KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanAdGroupErrorEnum_UNSPECIFIED KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 0
+	// The received error code is not known in this version.
+	KeywordPlanAdGroupErrorEnum_UNKNOWN KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 1
+	// The keyword plan ad group name is missing, empty, longer than allowed
+	// limit or contains invalid chars.
+	KeywordPlanAdGroupErrorEnum_INVALID_NAME KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 2
+	// The keyword plan ad group name is duplicate to an existing keyword plan
+	// AdGroup name or other keyword plan AdGroup name in the request.
+	KeywordPlanAdGroupErrorEnum_DUPLICATE_NAME KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError = 3
+)
+
+var KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_NAME",
+	3: "DUPLICATE_NAME",
+}
+var KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"INVALID_NAME":   2,
+	"DUPLICATE_NAME": 3,
+}
+
+func (x KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError) String() string {
+	return proto.EnumName(KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_name, int32(x))
+}
+func (KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_error_316b3c2b5e41568d, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// ad group.
+type KeywordPlanAdGroupErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanAdGroupErrorEnum) Reset()         { *m = KeywordPlanAdGroupErrorEnum{} }
+func (m *KeywordPlanAdGroupErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroupErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanAdGroupErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_error_316b3c2b5e41568d, []int{0}
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanAdGroupErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Merge(dst, src)
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroupErrorEnum.Size(m)
+}
+func (m *KeywordPlanAdGroupErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroupErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroupErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanAdGroupErrorEnum)(nil), "google.ads.googleads.v0.errors.KeywordPlanAdGroupErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError", KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_name, KeywordPlanAdGroupErrorEnum_KeywordPlanAdGroupError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/keyword_plan_ad_group_error.proto", fileDescriptor_keyword_plan_ad_group_error_316b3c2b5e41568d)
+}
+
+var fileDescriptor_keyword_plan_ad_group_error_316b3c2b5e41568d = []byte{
+	// 289 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4b, 0xc3, 0x30,
+	0x18, 0x86, 0x6d, 0x07, 0x0a, 0x99, 0x68, 0xc9, 0xc5, 0x83, 0xb2, 0x43, 0x7f, 0x40, 0x5a, 0xf0,
+	0xe8, 0xc5, 0x6c, 0x8d, 0xa5, 0x6c, 0xc6, 0x82, 0xb6, 0x82, 0x54, 0x4a, 0x34, 0x25, 0x88, 0x5d,
+	0xbf, 0x92, 0xb8, 0x89, 0xe0, 0xaf, 0xf1, 0xe8, 0x4f, 0xf1, 0xe8, 0x2f, 0x92, 0x36, 0x6e, 0xb7,
+	0xee, 0xd4, 0x97, 0xbe, 0xef, 0xf7, 0x7c, 0x5f, 0x5e, 0x74, 0xa9, 0x00, 0x54, 0x5d, 0x05, 0x42,
+	0x9a, 0xc0, 0xca, 0x4e, 0xad, 0xc3, 0xa0, 0xd2, 0x1a, 0xb4, 0x09, 0x5e, 0xab, 0x8f, 0x77, 0xd0,
+	0xb2, 0x6c, 0x6b, 0xd1, 0x94, 0x42, 0x96, 0x4a, 0xc3, 0xaa, 0x2d, 0x7b, 0x93, 0xb4, 0x1a, 0xde,
+	0x00, 0x4f, 0xec, 0x18, 0x11, 0xd2, 0x90, 0x2d, 0x81, 0xac, 0x43, 0x62, 0x09, 0xfe, 0x27, 0x3a,
+	0x9d, 0x5b, 0x48, 0x5a, 0x8b, 0x86, 0xca, 0xb8, 0x23, 0xb0, 0xce, 0x63, 0xcd, 0x6a, 0xe9, 0x3f,
+	0xa2, 0x93, 0x01, 0x1b, 0x1f, 0xa3, 0x71, 0xc6, 0x6f, 0x53, 0x36, 0x4b, 0xae, 0x12, 0x16, 0x79,
+	0x7b, 0x78, 0x8c, 0x0e, 0x32, 0x3e, 0xe7, 0x37, 0xf7, 0xdc, 0x73, 0xb0, 0x87, 0x0e, 0x13, 0x9e,
+	0xd3, 0x45, 0x12, 0x95, 0x9c, 0x5e, 0x33, 0xcf, 0xc5, 0x18, 0x1d, 0x45, 0x59, 0xba, 0x48, 0x66,
+	0xf4, 0x8e, 0xd9, 0x7f, 0xa3, 0xe9, 0xaf, 0x83, 0xfc, 0x67, 0x58, 0x92, 0xdd, 0x47, 0x4e, 0xcf,
+	0x06, 0x6e, 0x48, 0xbb, 0x27, 0xa6, 0xce, 0x43, 0xf4, 0x3f, 0xaf, 0xa0, 0x16, 0x8d, 0x22, 0xa0,
+	0x55, 0xa0, 0xaa, 0xa6, 0x2f, 0x60, 0x53, 0x5b, 0xfb, 0x62, 0x86, 0x5a, 0xbc, 0xb0, 0x9f, 0x2f,
+	0x77, 0x14, 0x53, 0xfa, 0xed, 0x4e, 0x62, 0x0b, 0xa3, 0xd2, 0x10, 0x2b, 0x3b, 0x95, 0x87, 0xa4,
+	0x5f, 0x69, 0x7e, 0x36, 0x81, 0x82, 0x4a, 0x53, 0x6c, 0x03, 0x45, 0x1e, 0x16, 0x36, 0xf0, 0xb4,
+	0xdf, 0x2f, 0x3e, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x83, 0x02, 0x58, 0xe4, 0xbd, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/keyword_plan_campaign_error.pb.go b/googleapis/ads/googleads/v0/errors/keyword_plan_campaign_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5f959ba02b2bc0aa95f272dbe5a1361b0adb07ee
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/keyword_plan_campaign_error.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/keyword_plan_campaign_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan campaign.
+type KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanCampaignErrorEnum_UNSPECIFIED KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 0
+	// The received error code is not known in this version.
+	KeywordPlanCampaignErrorEnum_UNKNOWN KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 1
+	// A keyword plan campaign name is missing, empty, longer than allowed limit
+	// or contains invalid chars.
+	KeywordPlanCampaignErrorEnum_INVALID_NAME KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 2
+	// A keyword plan campaign contains one or more untargetable languages.
+	KeywordPlanCampaignErrorEnum_INVALID_LANGUAGES KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 3
+	// A keyword plan campaign contains one or more invalid geo targets.
+	KeywordPlanCampaignErrorEnum_INVALID_GEOS KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 4
+	// The keyword plan campaign name is duplicate to an existing keyword plan
+	// campaign name or other keyword plan campaign name in the request.
+	KeywordPlanCampaignErrorEnum_DUPLICATE_NAME KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 5
+	// The number of geo targets in the keyword plan campaign exceeds limits.
+	KeywordPlanCampaignErrorEnum_MAX_GEOS_EXCEEDED KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError = 6
+)
+
+var KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_NAME",
+	3: "INVALID_LANGUAGES",
+	4: "INVALID_GEOS",
+	5: "DUPLICATE_NAME",
+	6: "MAX_GEOS_EXCEEDED",
+}
+var KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_value = map[string]int32{
+	"UNSPECIFIED":       0,
+	"UNKNOWN":           1,
+	"INVALID_NAME":      2,
+	"INVALID_LANGUAGES": 3,
+	"INVALID_GEOS":      4,
+	"DUPLICATE_NAME":    5,
+	"MAX_GEOS_EXCEEDED": 6,
+}
+
+func (x KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError) String() string {
+	return proto.EnumName(KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_name, int32(x))
+}
+func (KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_error_2abe709d47e6a6ba, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// campaign.
+type KeywordPlanCampaignErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanCampaignErrorEnum) Reset()         { *m = KeywordPlanCampaignErrorEnum{} }
+func (m *KeywordPlanCampaignErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaignErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanCampaignErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_error_2abe709d47e6a6ba, []int{0}
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaignErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaignErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanCampaignErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaignErrorEnum.Merge(dst, src)
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaignErrorEnum.Size(m)
+}
+func (m *KeywordPlanCampaignErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaignErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaignErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanCampaignErrorEnum)(nil), "google.ads.googleads.v0.errors.KeywordPlanCampaignErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError", KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_name, KeywordPlanCampaignErrorEnum_KeywordPlanCampaignError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/keyword_plan_campaign_error.proto", fileDescriptor_keyword_plan_campaign_error_2abe709d47e6a6ba)
+}
+
+var fileDescriptor_keyword_plan_campaign_error_2abe709d47e6a6ba = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4b, 0xc3, 0x30,
+	0x14, 0xc7, 0xed, 0xa6, 0x13, 0x32, 0xd1, 0x18, 0x10, 0x3c, 0xe8, 0x0e, 0xfb, 0x00, 0x69, 0xc1,
+	0xa3, 0x17, 0xb3, 0x36, 0x96, 0xb2, 0x2d, 0x2b, 0xcc, 0xce, 0x21, 0x85, 0x12, 0xd7, 0x12, 0x86,
+	0x5d, 0x53, 0x12, 0x9d, 0xf8, 0x65, 0x3c, 0x78, 0xf4, 0x4b, 0x78, 0xf7, 0xea, 0x17, 0x92, 0x36,
+	0xdb, 0xf0, 0x52, 0x4f, 0xfd, 0xd3, 0xf7, 0x7b, 0xbf, 0xc7, 0x7b, 0x01, 0x37, 0x42, 0x4a, 0x91,
+	0x67, 0x36, 0x4f, 0xb5, 0x6d, 0x62, 0x95, 0xd6, 0x8e, 0x9d, 0x29, 0x25, 0x95, 0xb6, 0x9f, 0xb2,
+	0xb7, 0x57, 0xa9, 0xd2, 0xa4, 0xcc, 0x79, 0x91, 0x2c, 0xf8, 0xaa, 0xe4, 0x4b, 0x51, 0x24, 0x75,
+	0x11, 0x97, 0x4a, 0x3e, 0x4b, 0xd4, 0x33, 0x6d, 0x98, 0xa7, 0x1a, 0xef, 0x0c, 0x78, 0xed, 0x60,
+	0x63, 0xe8, 0x7f, 0x59, 0xe0, 0x62, 0x68, 0x2c, 0x61, 0xce, 0x0b, 0x77, 0xe3, 0xa0, 0x55, 0x95,
+	0x16, 0x2f, 0xab, 0xfe, 0xbb, 0x05, 0xce, 0x9b, 0x00, 0x74, 0x02, 0xba, 0x11, 0x9b, 0x86, 0xd4,
+	0x0d, 0x6e, 0x03, 0xea, 0xc1, 0x3d, 0xd4, 0x05, 0x87, 0x11, 0x1b, 0xb2, 0xc9, 0x3d, 0x83, 0x16,
+	0x82, 0xe0, 0x28, 0x60, 0x33, 0x32, 0x0a, 0xbc, 0x84, 0x91, 0x31, 0x85, 0x2d, 0x74, 0x06, 0x4e,
+	0xb7, 0x7f, 0x46, 0x84, 0xf9, 0x11, 0xf1, 0xe9, 0x14, 0xb6, 0xff, 0x82, 0x3e, 0x9d, 0x4c, 0xe1,
+	0x3e, 0x42, 0xe0, 0xd8, 0x8b, 0xc2, 0x51, 0xe0, 0x92, 0x3b, 0x6a, 0x9a, 0x0f, 0xaa, 0xe6, 0x31,
+	0x99, 0xd7, 0x44, 0x42, 0xe7, 0x2e, 0xa5, 0x1e, 0xf5, 0x60, 0x67, 0xf0, 0x63, 0x81, 0xfe, 0x42,
+	0xae, 0xf0, 0xff, 0x8b, 0x0e, 0x2e, 0x9b, 0x96, 0x08, 0xab, 0x3b, 0x85, 0xd6, 0x83, 0xb7, 0x11,
+	0x08, 0x99, 0xf3, 0x42, 0x60, 0xa9, 0x84, 0x2d, 0xb2, 0xa2, 0xbe, 0xe2, 0xf6, 0xf6, 0xe5, 0x52,
+	0x37, 0x3d, 0xc5, 0xb5, 0xf9, 0x7c, 0xb4, 0xda, 0x3e, 0x21, 0x9f, 0xad, 0x9e, 0x6f, 0x64, 0x24,
+	0xd5, 0xd8, 0xc4, 0x2a, 0xcd, 0x1c, 0x5c, 0x8f, 0xd4, 0xdf, 0x5b, 0x20, 0x26, 0xa9, 0x8e, 0x77,
+	0x40, 0x3c, 0x73, 0x62, 0x03, 0x3c, 0x76, 0xea, 0xc1, 0x57, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x73, 0x6c, 0xa6, 0x10, 0x02, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/keyword_plan_error.pb.go b/googleapis/ads/googleads/v0/errors/keyword_plan_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5260c0a5ee5c066f7f530bf3a45615cef6e3293b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/keyword_plan_error.pb.go
@@ -0,0 +1,178 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/keyword_plan_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan.
+type KeywordPlanErrorEnum_KeywordPlanError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanErrorEnum_UNSPECIFIED KeywordPlanErrorEnum_KeywordPlanError = 0
+	// The received error code is not known in this version.
+	KeywordPlanErrorEnum_UNKNOWN KeywordPlanErrorEnum_KeywordPlanError = 1
+	// The plan's bid multiplier value is outside the valid range.
+	KeywordPlanErrorEnum_BID_MULTIPLIER_OUT_OF_RANGE KeywordPlanErrorEnum_KeywordPlanError = 2
+	// The plan's bid value is too high.
+	KeywordPlanErrorEnum_BID_TOO_HIGH KeywordPlanErrorEnum_KeywordPlanError = 3
+	// The plan's bid value is too low.
+	KeywordPlanErrorEnum_BID_TOO_LOW KeywordPlanErrorEnum_KeywordPlanError = 4
+	// The plan's cpc bid is not a multiple of the minimum billable unit.
+	KeywordPlanErrorEnum_BID_TOO_MANY_FRACTIONAL_DIGITS KeywordPlanErrorEnum_KeywordPlanError = 5
+	// The plan's daily budget value is too low.
+	KeywordPlanErrorEnum_DAILY_BUDGET_TOO_LOW KeywordPlanErrorEnum_KeywordPlanError = 6
+	// The plan's daily budget is not a multiple of the minimum billable unit.
+	KeywordPlanErrorEnum_DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS KeywordPlanErrorEnum_KeywordPlanError = 7
+	// The input has an invalid value.
+	KeywordPlanErrorEnum_INVALID_VALUE KeywordPlanErrorEnum_KeywordPlanError = 8
+	// The plan has no keyword.
+	KeywordPlanErrorEnum_KEYWORD_PLAN_HAS_NO_KEYWORDS KeywordPlanErrorEnum_KeywordPlanError = 9
+	// The plan is not enabled and API cannot provide mutation, forecast or
+	// stats.
+	KeywordPlanErrorEnum_KEYWORD_PLAN_NOT_ENABLED KeywordPlanErrorEnum_KeywordPlanError = 10
+	// The requested plan cannot be found for providing forecast or stats.
+	KeywordPlanErrorEnum_KEYWORD_PLAN_NOT_FOUND KeywordPlanErrorEnum_KeywordPlanError = 11
+	// The plan is missing a cpc bid.
+	KeywordPlanErrorEnum_MISSING_BID KeywordPlanErrorEnum_KeywordPlanError = 13
+	// The plan is missing required forecast_period field.
+	KeywordPlanErrorEnum_MISSING_FORECAST_PERIOD KeywordPlanErrorEnum_KeywordPlanError = 14
+	// The plan's forecast_period has invalid forecast date range.
+	KeywordPlanErrorEnum_INVALID_FORECAST_DATE_RANGE KeywordPlanErrorEnum_KeywordPlanError = 15
+	// The plan's name is invalid.
+	KeywordPlanErrorEnum_INVALID_NAME KeywordPlanErrorEnum_KeywordPlanError = 16
+)
+
+var KeywordPlanErrorEnum_KeywordPlanError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BID_MULTIPLIER_OUT_OF_RANGE",
+	3:  "BID_TOO_HIGH",
+	4:  "BID_TOO_LOW",
+	5:  "BID_TOO_MANY_FRACTIONAL_DIGITS",
+	6:  "DAILY_BUDGET_TOO_LOW",
+	7:  "DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS",
+	8:  "INVALID_VALUE",
+	9:  "KEYWORD_PLAN_HAS_NO_KEYWORDS",
+	10: "KEYWORD_PLAN_NOT_ENABLED",
+	11: "KEYWORD_PLAN_NOT_FOUND",
+	13: "MISSING_BID",
+	14: "MISSING_FORECAST_PERIOD",
+	15: "INVALID_FORECAST_DATE_RANGE",
+	16: "INVALID_NAME",
+}
+var KeywordPlanErrorEnum_KeywordPlanError_value = map[string]int32{
+	"UNSPECIFIED":                             0,
+	"UNKNOWN":                                 1,
+	"BID_MULTIPLIER_OUT_OF_RANGE":             2,
+	"BID_TOO_HIGH":                            3,
+	"BID_TOO_LOW":                             4,
+	"BID_TOO_MANY_FRACTIONAL_DIGITS":          5,
+	"DAILY_BUDGET_TOO_LOW":                    6,
+	"DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS": 7,
+	"INVALID_VALUE":                           8,
+	"KEYWORD_PLAN_HAS_NO_KEYWORDS":            9,
+	"KEYWORD_PLAN_NOT_ENABLED":                10,
+	"KEYWORD_PLAN_NOT_FOUND":                  11,
+	"MISSING_BID":                             13,
+	"MISSING_FORECAST_PERIOD":                 14,
+	"INVALID_FORECAST_DATE_RANGE":             15,
+	"INVALID_NAME":                            16,
+}
+
+func (x KeywordPlanErrorEnum_KeywordPlanError) String() string {
+	return proto.EnumName(KeywordPlanErrorEnum_KeywordPlanError_name, int32(x))
+}
+func (KeywordPlanErrorEnum_KeywordPlanError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_error_e0f5dce844afa4cf, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// resource (keyword plan, keyword plan campaign, keyword plan ad group or
+// keyword plan keyword) or KeywordPlanService RPC.
+type KeywordPlanErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanErrorEnum) Reset()         { *m = KeywordPlanErrorEnum{} }
+func (m *KeywordPlanErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_error_e0f5dce844afa4cf, []int{0}
+}
+func (m *KeywordPlanErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanErrorEnum.Merge(dst, src)
+}
+func (m *KeywordPlanErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanErrorEnum.Size(m)
+}
+func (m *KeywordPlanErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanErrorEnum)(nil), "google.ads.googleads.v0.errors.KeywordPlanErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.KeywordPlanErrorEnum_KeywordPlanError", KeywordPlanErrorEnum_KeywordPlanError_name, KeywordPlanErrorEnum_KeywordPlanError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/keyword_plan_error.proto", fileDescriptor_keyword_plan_error_e0f5dce844afa4cf)
+}
+
+var fileDescriptor_keyword_plan_error_e0f5dce844afa4cf = []byte{
+	// 467 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0x6f, 0xd3, 0x30,
+	0x18, 0xa6, 0x2d, 0x6c, 0xe0, 0x32, 0x66, 0xac, 0x01, 0x13, 0x9b, 0x0a, 0xea, 0x85, 0x03, 0x52,
+	0x5a, 0x89, 0x03, 0x07, 0x4e, 0x4e, 0xed, 0xa4, 0x56, 0x53, 0x3b, 0x4a, 0x9c, 0x56, 0x45, 0x95,
+	0x5e, 0x05, 0x52, 0x45, 0x88, 0x2e, 0xae, 0x12, 0x18, 0xe2, 0xef, 0x70, 0xe4, 0xc2, 0xdf, 0x40,
+	0xf0, 0xa7, 0x90, 0x9b, 0xa6, 0x12, 0x9b, 0xb6, 0x53, 0x1e, 0x3d, 0x1f, 0xaf, 0xe3, 0xd7, 0x0f,
+	0x7a, 0x9b, 0x1b, 0x93, 0xaf, 0x57, 0x83, 0x34, 0xab, 0x06, 0x35, 0xb4, 0xe8, 0x72, 0x38, 0x58,
+	0x95, 0xa5, 0x29, 0xab, 0xc1, 0xe7, 0xd5, 0xf7, 0x6f, 0xa6, 0xcc, 0x60, 0xb3, 0x4e, 0x0b, 0xd8,
+	0x72, 0xce, 0xa6, 0x34, 0x5f, 0x0c, 0xe9, 0xd5, 0x6e, 0x27, 0xcd, 0x2a, 0x67, 0x1f, 0x74, 0x2e,
+	0x87, 0x4e, 0x1d, 0xec, 0xff, 0xee, 0xa0, 0x93, 0x49, 0x1d, 0x0e, 0xd7, 0x69, 0xc1, 0x2d, 0xcb,
+	0x8b, 0xaf, 0x17, 0xfd, 0x5f, 0x1d, 0x84, 0xaf, 0x0a, 0xe4, 0x18, 0x75, 0x13, 0x19, 0x87, 0x7c,
+	0x24, 0x3c, 0xc1, 0x19, 0xbe, 0x43, 0xba, 0xe8, 0x30, 0x91, 0x13, 0xa9, 0xe6, 0x12, 0xb7, 0xc8,
+	0x0b, 0x74, 0xe6, 0x0a, 0x06, 0xd3, 0x24, 0xd0, 0x22, 0x0c, 0x04, 0x8f, 0x40, 0x25, 0x1a, 0x94,
+	0x07, 0x11, 0x95, 0x3e, 0xc7, 0x6d, 0x82, 0xd1, 0x43, 0x6b, 0xd0, 0x4a, 0xc1, 0x58, 0xf8, 0x63,
+	0xdc, 0xb1, 0x03, 0x1b, 0x26, 0x50, 0x73, 0x7c, 0x97, 0xf4, 0x51, 0xaf, 0x21, 0xa6, 0x54, 0x2e,
+	0xc0, 0x8b, 0xe8, 0x48, 0x0b, 0x25, 0x69, 0x00, 0x4c, 0xf8, 0x42, 0xc7, 0xf8, 0x1e, 0x39, 0x45,
+	0x27, 0x8c, 0x8a, 0x60, 0x01, 0x6e, 0xc2, 0x7c, 0xae, 0xf7, 0xe9, 0x03, 0xf2, 0x1a, 0xbd, 0xba,
+	0xa6, 0xdc, 0x30, 0xe6, 0x90, 0x3c, 0x46, 0x47, 0x42, 0xce, 0x68, 0x20, 0x18, 0xcc, 0x68, 0x90,
+	0x70, 0x7c, 0x9f, 0xbc, 0x44, 0xe7, 0x13, 0xbe, 0x98, 0xab, 0x88, 0x41, 0x18, 0x50, 0x09, 0x63,
+	0x1a, 0x83, 0x54, 0xb0, 0xe3, 0x62, 0xfc, 0x80, 0x9c, 0xa3, 0xd3, 0xff, 0x1c, 0x52, 0x69, 0xe0,
+	0x92, 0xba, 0x01, 0x67, 0x18, 0x91, 0xe7, 0xe8, 0xe9, 0x35, 0xd5, 0x53, 0x89, 0x64, 0xb8, 0x6b,
+	0xaf, 0x3a, 0x15, 0x71, 0x2c, 0xa4, 0x0f, 0xae, 0x60, 0xf8, 0x88, 0x9c, 0xa1, 0x67, 0x0d, 0xe1,
+	0xa9, 0x88, 0x8f, 0x68, 0xac, 0x21, 0xe4, 0x91, 0x50, 0x0c, 0x3f, 0xb2, 0xbb, 0x6c, 0x7e, 0x6e,
+	0x2f, 0x32, 0xaa, 0xf9, 0x6e, 0x97, 0xc7, 0x76, 0x97, 0x8d, 0x41, 0xd2, 0x29, 0xc7, 0xd8, 0xfd,
+	0xdb, 0x42, 0xfd, 0x8f, 0xe6, 0xc2, 0xb9, 0xfd, 0xc5, 0xdd, 0x27, 0x57, 0x5f, 0x35, 0xb4, 0x45,
+	0x09, 0x5b, 0xef, 0xd9, 0x2e, 0x98, 0x9b, 0x75, 0x5a, 0xe4, 0x8e, 0x29, 0xf3, 0x41, 0xbe, 0x2a,
+	0xb6, 0x35, 0x6a, 0x3a, 0xb7, 0xf9, 0x54, 0xdd, 0x54, 0xc1, 0x77, 0xf5, 0xe7, 0x47, 0xbb, 0xe3,
+	0x53, 0xfa, 0xb3, 0xdd, 0xf3, 0xeb, 0x61, 0x34, 0xab, 0x9c, 0x1a, 0x5a, 0x34, 0x1b, 0x3a, 0xdb,
+	0x23, 0xab, 0x3f, 0x8d, 0x61, 0x49, 0xb3, 0x6a, 0xb9, 0x37, 0x2c, 0x67, 0xc3, 0x65, 0x6d, 0xf8,
+	0x70, 0xb0, 0x3d, 0xf8, 0xcd, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x2f, 0x8e, 0x16, 0xfa,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/keyword_plan_idea_error.pb.go b/googleapis/ads/googleads/v0/errors/keyword_plan_idea_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..304b184e514e64a28ab1cccb5620f29e591dbbe0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/keyword_plan_idea_error.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/keyword_plan_idea_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible errors from KeywordPlanIdeaService.
+type KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanIdeaErrorEnum_UNSPECIFIED KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 0
+	// The received error code is not known in this version.
+	KeywordPlanIdeaErrorEnum_UNKNOWN KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 1
+	// Error when crawling the input URL.
+	KeywordPlanIdeaErrorEnum_URL_CRAWL_ERROR KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 2
+	// The input has an invalid value.
+	KeywordPlanIdeaErrorEnum_INVALID_VALUE KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError = 3
+)
+
+var KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "URL_CRAWL_ERROR",
+	3: "INVALID_VALUE",
+}
+var KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_value = map[string]int32{
+	"UNSPECIFIED":     0,
+	"UNKNOWN":         1,
+	"URL_CRAWL_ERROR": 2,
+	"INVALID_VALUE":   3,
+}
+
+func (x KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError) String() string {
+	return proto.EnumName(KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_name, int32(x))
+}
+func (KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_error_c1825bc9235d52d9, []int{0, 0}
+}
+
+// Container for enum describing possible errors from KeywordPlanIdeaService.
+type KeywordPlanIdeaErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanIdeaErrorEnum) Reset()         { *m = KeywordPlanIdeaErrorEnum{} }
+func (m *KeywordPlanIdeaErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanIdeaErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanIdeaErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_error_c1825bc9235d52d9, []int{0}
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanIdeaErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanIdeaErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanIdeaErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanIdeaErrorEnum.Merge(dst, src)
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanIdeaErrorEnum.Size(m)
+}
+func (m *KeywordPlanIdeaErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanIdeaErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanIdeaErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanIdeaErrorEnum)(nil), "google.ads.googleads.v0.errors.KeywordPlanIdeaErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError", KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_name, KeywordPlanIdeaErrorEnum_KeywordPlanIdeaError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/keyword_plan_idea_error.proto", fileDescriptor_keyword_plan_idea_error_c1825bc9235d52d9)
+}
+
+var fileDescriptor_keyword_plan_idea_error_c1825bc9235d52d9 = []byte{
+	// 289 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4b, 0xc3, 0x30,
+	0x18, 0xc6, 0x6d, 0x07, 0x0a, 0x19, 0xb2, 0x5a, 0x3d, 0xe8, 0x65, 0x87, 0x7e, 0x80, 0xb4, 0xe0,
+	0x51, 0x2f, 0xd9, 0x1a, 0x47, 0x59, 0xe9, 0x4a, 0xa5, 0x1d, 0x48, 0x21, 0x44, 0x13, 0xc2, 0xb0,
+	0x4b, 0x4a, 0xa2, 0x53, 0xbf, 0x8e, 0x47, 0x3f, 0x8a, 0x17, 0xbf, 0x92, 0xb4, 0x71, 0x3b, 0xcd,
+	0x9d, 0xde, 0x07, 0x9e, 0xe7, 0xf7, 0xfe, 0x03, 0xb7, 0x42, 0x29, 0xd1, 0xf0, 0x90, 0x32, 0x13,
+	0x5a, 0xd9, 0xa9, 0x4d, 0x14, 0x72, 0xad, 0x95, 0x36, 0xe1, 0x33, 0xff, 0x78, 0x53, 0x9a, 0x91,
+	0xb6, 0xa1, 0x92, 0xac, 0x18, 0xa7, 0xa4, 0x37, 0x60, 0xab, 0xd5, 0x8b, 0xf2, 0xc7, 0x16, 0x81,
+	0x94, 0x19, 0xb8, 0xa3, 0xe1, 0x26, 0x82, 0x96, 0x0e, 0xde, 0xc1, 0xe5, 0xdc, 0x36, 0xc8, 0x1b,
+	0x2a, 0x13, 0xc6, 0x29, 0xee, 0x0c, 0x2c, 0x5f, 0xd7, 0x41, 0x0d, 0x2e, 0xf6, 0x79, 0xfe, 0x08,
+	0x0c, 0xcb, 0xec, 0x3e, 0xc7, 0xd3, 0xe4, 0x2e, 0xc1, 0xb1, 0x77, 0xe4, 0x0f, 0xc1, 0x49, 0x99,
+	0xcd, 0xb3, 0xc5, 0x32, 0xf3, 0x1c, 0xff, 0x1c, 0x8c, 0xca, 0x22, 0x25, 0xd3, 0x02, 0x2d, 0x53,
+	0x82, 0x8b, 0x62, 0x51, 0x78, 0xae, 0x7f, 0x06, 0x4e, 0x93, 0xac, 0x42, 0x69, 0x12, 0x93, 0x0a,
+	0xa5, 0x25, 0xf6, 0x06, 0x93, 0x1f, 0x07, 0x04, 0x4f, 0x6a, 0x0d, 0x0f, 0x2f, 0x38, 0xb9, 0xda,
+	0xb7, 0x42, 0xde, 0xdd, 0x96, 0x3b, 0x0f, 0xf1, 0x1f, 0x2c, 0x54, 0x43, 0xa5, 0x80, 0x4a, 0x8b,
+	0x50, 0x70, 0xd9, 0x5f, 0xbe, 0xfd, 0x55, 0xbb, 0x32, 0xff, 0xbd, 0xee, 0xc6, 0x96, 0x4f, 0x77,
+	0x30, 0x43, 0xe8, 0xcb, 0x1d, 0xcf, 0x6c, 0x33, 0xc4, 0x0c, 0xb4, 0xb2, 0x53, 0x55, 0x04, 0xfb,
+	0x91, 0xe6, 0x7b, 0x1b, 0xa8, 0x11, 0x33, 0xf5, 0x2e, 0x50, 0x57, 0x51, 0x6d, 0x03, 0x8f, 0xc7,
+	0xfd, 0xe0, 0xeb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x17, 0x69, 0x77, 0xb2, 0x01, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/keyword_plan_keyword_error.pb.go b/googleapis/ads/googleads/v0/errors/keyword_plan_keyword_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..53e3caf74057523e82222fde832723b058bc096a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/keyword_plan_keyword_error.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/keyword_plan_keyword_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan keyword.
+type KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanKeywordErrorEnum_UNSPECIFIED KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 0
+	// The received error code is not known in this version.
+	KeywordPlanKeywordErrorEnum_UNKNOWN KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 1
+	// A keyword or negative keyword has invalid match type.
+	KeywordPlanKeywordErrorEnum_INVALID_KEYWORD_MATCH_TYPE KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 2
+	// A keyword or negative keyword with same text and match type already
+	// exists.
+	KeywordPlanKeywordErrorEnum_DUPLICATE_KEYWORD KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 3
+	// Keyword or negative keyword text exceeds the allowed limit.
+	KeywordPlanKeywordErrorEnum_KEYWORD_TEXT_TOO_LONG KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 4
+	// Keyword or negative keyword text has invalid characters or symbols.
+	KeywordPlanKeywordErrorEnum_KEYWORD_HAS_INVALID_CHARS KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 5
+	// Keyword or negative keyword text has too many words.
+	KeywordPlanKeywordErrorEnum_KEYWORD_HAS_TOO_MANY_WORDS KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 6
+	// Keyword or negative keyword has invalid text.
+	KeywordPlanKeywordErrorEnum_INVALID_KEYWORD_TEXT KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError = 7
+)
+
+var KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_KEYWORD_MATCH_TYPE",
+	3: "DUPLICATE_KEYWORD",
+	4: "KEYWORD_TEXT_TOO_LONG",
+	5: "KEYWORD_HAS_INVALID_CHARS",
+	6: "KEYWORD_HAS_TOO_MANY_WORDS",
+	7: "INVALID_KEYWORD_TEXT",
+}
+var KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"INVALID_KEYWORD_MATCH_TYPE": 2,
+	"DUPLICATE_KEYWORD":          3,
+	"KEYWORD_TEXT_TOO_LONG":      4,
+	"KEYWORD_HAS_INVALID_CHARS":  5,
+	"KEYWORD_HAS_TOO_MANY_WORDS": 6,
+	"INVALID_KEYWORD_TEXT":       7,
+}
+
+func (x KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError) String() string {
+	return proto.EnumName(KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_name, int32(x))
+}
+func (KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_error_89795332c468dd89, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword or a
+// negative keyword from a keyword plan.
+type KeywordPlanKeywordErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanKeywordErrorEnum) Reset()         { *m = KeywordPlanKeywordErrorEnum{} }
+func (m *KeywordPlanKeywordErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanKeywordErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_error_89795332c468dd89, []int{0}
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanKeywordErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordErrorEnum.Merge(dst, src)
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordErrorEnum.Size(m)
+}
+func (m *KeywordPlanKeywordErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanKeywordErrorEnum)(nil), "google.ads.googleads.v0.errors.KeywordPlanKeywordErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError", KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_name, KeywordPlanKeywordErrorEnum_KeywordPlanKeywordError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/keyword_plan_keyword_error.proto", fileDescriptor_keyword_plan_keyword_error_89795332c468dd89)
+}
+
+var fileDescriptor_keyword_plan_keyword_error_89795332c468dd89 = []byte{
+	// 358 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x51, 0xdd, 0x4e, 0xea, 0x30,
+	0x1c, 0x3f, 0x1b, 0xe7, 0x40, 0x52, 0x2e, 0x4e, 0x6d, 0x24, 0x8a, 0x1f, 0x5c, 0xf0, 0x00, 0xdd,
+	0x12, 0x2f, 0xbd, 0x30, 0x65, 0xab, 0xb0, 0x00, 0xdb, 0xc2, 0x06, 0x88, 0x59, 0xd2, 0x4c, 0xb7,
+	0x2c, 0xc6, 0xb1, 0x92, 0x4d, 0x31, 0xde, 0xfa, 0x28, 0x5e, 0xfa, 0x28, 0x5e, 0xfa, 0x08, 0x3e,
+	0x89, 0xe9, 0xca, 0x88, 0x31, 0xc1, 0xab, 0xfe, 0xda, 0xdf, 0x57, 0xf3, 0xff, 0x83, 0x8b, 0x84,
+	0xf3, 0x24, 0x8d, 0xb5, 0x30, 0x2a, 0x34, 0x09, 0x05, 0x5a, 0xeb, 0x5a, 0x9c, 0xe7, 0x3c, 0x2f,
+	0xb4, 0xfb, 0xf8, 0xf9, 0x89, 0xe7, 0x11, 0x5b, 0xa5, 0x61, 0xc6, 0xaa, 0x4b, 0xc9, 0xe1, 0x55,
+	0xce, 0x1f, 0x38, 0xea, 0x48, 0x17, 0x0e, 0xa3, 0x02, 0x6f, 0x03, 0xf0, 0x5a, 0xc7, 0x32, 0xa0,
+	0xfb, 0xa2, 0x82, 0xe3, 0xa1, 0xf4, 0xb9, 0x69, 0x98, 0x6d, 0x20, 0x15, 0x24, 0xcd, 0x1e, 0x97,
+	0xdd, 0x4f, 0x05, 0x1c, 0xec, 0xe0, 0xd1, 0x7f, 0xd0, 0x9c, 0xda, 0x9e, 0x4b, 0x0d, 0xeb, 0xd2,
+	0xa2, 0x26, 0xfc, 0x83, 0x9a, 0xa0, 0x31, 0xb5, 0x87, 0xb6, 0x33, 0xb7, 0xa1, 0x82, 0x3a, 0xe0,
+	0xc8, 0xb2, 0x67, 0x64, 0x64, 0x99, 0x6c, 0x48, 0x17, 0x73, 0x67, 0x62, 0xb2, 0x31, 0xf1, 0x8d,
+	0x01, 0xf3, 0x17, 0x2e, 0x85, 0x2a, 0x6a, 0x81, 0x3d, 0x73, 0xea, 0x8e, 0x2c, 0x83, 0xf8, 0xb4,
+	0x52, 0xc0, 0x1a, 0x6a, 0x83, 0x56, 0x25, 0xf7, 0xe9, 0x95, 0xcf, 0x7c, 0xc7, 0x61, 0x23, 0xc7,
+	0xee, 0xc3, 0xbf, 0xe8, 0x14, 0xb4, 0x2b, 0x6a, 0x40, 0x3c, 0x56, 0xa5, 0x1b, 0x03, 0x32, 0xf1,
+	0xe0, 0x3f, 0x51, 0xf8, 0x9d, 0x16, 0xc6, 0x31, 0xb1, 0x17, 0x4c, 0xbc, 0x78, 0xb0, 0x8e, 0x0e,
+	0xc1, 0xfe, 0xcf, 0x0f, 0x89, 0x06, 0xd8, 0xe8, 0x7d, 0x28, 0xa0, 0x7b, 0xcb, 0x97, 0xf8, 0xf7,
+	0x59, 0xf5, 0x4e, 0x76, 0x0c, 0xc2, 0x15, 0x93, 0x76, 0x95, 0x6b, 0x73, 0xe3, 0x4f, 0x78, 0x1a,
+	0x66, 0x09, 0xe6, 0x79, 0xa2, 0x25, 0x71, 0x56, 0xee, 0xa1, 0x5a, 0xde, 0xea, 0xae, 0xd8, 0xb5,
+	0xcb, 0x73, 0x79, 0xbc, 0xaa, 0xb5, 0x3e, 0x21, 0x6f, 0x6a, 0xa7, 0x2f, 0xc3, 0x48, 0x54, 0x60,
+	0x09, 0x05, 0x9a, 0xe9, 0xb8, 0xac, 0x2c, 0xde, 0x2b, 0x41, 0x40, 0xa2, 0x22, 0xd8, 0x0a, 0x82,
+	0x99, 0x1e, 0x48, 0xc1, 0x4d, 0xbd, 0x2c, 0x3e, 0xfb, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x47, 0x8a,
+	0x95, 0xb0, 0x43, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/keyword_plan_negative_keyword_error.pb.go b/googleapis/ads/googleads/v0/errors/keyword_plan_negative_keyword_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9efd211ce7d3d1dc2a9d41c8a9c64814bb988aae
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/keyword_plan_negative_keyword_error.pb.go
@@ -0,0 +1,108 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/keyword_plan_negative_keyword_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible errors from applying a keyword plan negative
+// keyword.
+type KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError int32
+
+const (
+	// Enum unspecified.
+	KeywordPlanNegativeKeywordErrorEnum_UNSPECIFIED KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError = 0
+	// The received error code is not known in this version.
+	KeywordPlanNegativeKeywordErrorEnum_UNKNOWN KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError = 1
+)
+
+var KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+}
+var KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+}
+
+func (x KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError) String() string {
+	return proto.EnumName(KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_name, int32(x))
+}
+func (KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_error_82bc2dba02d6e017, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a keyword plan
+// negative keyword.
+type KeywordPlanNegativeKeywordErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordPlanNegativeKeywordErrorEnum) Reset()         { *m = KeywordPlanNegativeKeywordErrorEnum{} }
+func (m *KeywordPlanNegativeKeywordErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNegativeKeywordErrorEnum) ProtoMessage()    {}
+func (*KeywordPlanNegativeKeywordErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_error_82bc2dba02d6e017, []int{0}
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Unmarshal(m, b)
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanNegativeKeywordErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Merge(dst, src)
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.Size(m)
+}
+func (m *KeywordPlanNegativeKeywordErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNegativeKeywordErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*KeywordPlanNegativeKeywordErrorEnum)(nil), "google.ads.googleads.v0.errors.KeywordPlanNegativeKeywordErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError", KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_name, KeywordPlanNegativeKeywordErrorEnum_KeywordPlanNegativeKeywordError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/keyword_plan_negative_keyword_error.proto", fileDescriptor_keyword_plan_negative_keyword_error_82bc2dba02d6e017)
+}
+
+var fileDescriptor_keyword_plan_negative_keyword_error_82bc2dba02d6e017 = []byte{
+	// 258 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xf2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xec, 0xd4, 0xca, 0xf2, 0xfc, 0xa2, 0x94, 0xf8, 0x82, 0x9c, 0xc4,
+	0xbc, 0xf8, 0xbc, 0xd4, 0xf4, 0xc4, 0x92, 0xcc, 0xb2, 0xd4, 0x78, 0x98, 0x28, 0x58, 0x91, 0x5e,
+	0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x1c, 0x44, 0xbb, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0xdc, 0x24,
+	0xbd, 0x32, 0x03, 0x3d, 0x88, 0x49, 0x4a, 0x69, 0x5c, 0xca, 0xde, 0x10, 0x6d, 0x01, 0x39, 0x89,
+	0x79, 0x7e, 0x50, 0xa3, 0xa0, 0x42, 0xae, 0x20, 0x35, 0xae, 0x79, 0xa5, 0xb9, 0x4a, 0xf6, 0x5c,
+	0xf2, 0x04, 0x94, 0x09, 0xf1, 0x73, 0x71, 0x87, 0xfa, 0x05, 0x07, 0xb8, 0x3a, 0x7b, 0xba, 0x79,
+	0xba, 0xba, 0x08, 0x30, 0x08, 0x71, 0x73, 0xb1, 0x87, 0xfa, 0x79, 0xfb, 0xf9, 0x87, 0xfb, 0x09,
+	0x30, 0x3a, 0xdd, 0x62, 0xe4, 0x52, 0x4a, 0xce, 0xcf, 0xd5, 0xc3, 0xef, 0x1c, 0x27, 0x15, 0x02,
+	0xb6, 0x04, 0x80, 0x3c, 0x15, 0xc0, 0x18, 0xe5, 0x02, 0x35, 0x27, 0x3d, 0x3f, 0x27, 0x31, 0x2f,
+	0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x65, 0x58, 0x80, 0x15, 0x64, 0x16,
+	0xe3, 0x0a, 0x3f, 0x6b, 0x08, 0xb5, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0x9c, 0x3b,
+	0xc4, 0x30, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x03, 0x5b, 0x59, 0x7c,
+	0x0a, 0xa6, 0x20, 0xc6, 0x31, 0xa5, 0x38, 0x06, 0xae, 0x20, 0x26, 0xcc, 0x20, 0x06, 0xa2, 0x20,
+	0x89, 0x0d, 0x6c, 0xb1, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x21, 0x8a, 0x64, 0xf8, 0xb7, 0x01,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/list_operation_error.pb.go b/googleapis/ads/googleads/v0/errors/list_operation_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c019b2a93c8af5c50c163a9397ecd1e98fd87b57
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/list_operation_error.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/list_operation_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible list operation errors.
+type ListOperationErrorEnum_ListOperationError int32
+
+const (
+	// Enum unspecified.
+	ListOperationErrorEnum_UNSPECIFIED ListOperationErrorEnum_ListOperationError = 0
+	// The received error code is not known in this version.
+	ListOperationErrorEnum_UNKNOWN ListOperationErrorEnum_ListOperationError = 1
+	// Field required in value is missing.
+	ListOperationErrorEnum_REQUIRED_FIELD_MISSING ListOperationErrorEnum_ListOperationError = 7
+	// Duplicate or identical value is sent in multiple list operations.
+	ListOperationErrorEnum_DUPLICATE_VALUES ListOperationErrorEnum_ListOperationError = 8
+)
+
+var ListOperationErrorEnum_ListOperationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	7: "REQUIRED_FIELD_MISSING",
+	8: "DUPLICATE_VALUES",
+}
+var ListOperationErrorEnum_ListOperationError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"REQUIRED_FIELD_MISSING": 7,
+	"DUPLICATE_VALUES":       8,
+}
+
+func (x ListOperationErrorEnum_ListOperationError) String() string {
+	return proto.EnumName(ListOperationErrorEnum_ListOperationError_name, int32(x))
+}
+func (ListOperationErrorEnum_ListOperationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_list_operation_error_2f6e3c2f7387aa7b, []int{0, 0}
+}
+
+// Container for enum describing possible list operation errors.
+type ListOperationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListOperationErrorEnum) Reset()         { *m = ListOperationErrorEnum{} }
+func (m *ListOperationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ListOperationErrorEnum) ProtoMessage()    {}
+func (*ListOperationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_list_operation_error_2f6e3c2f7387aa7b, []int{0}
+}
+func (m *ListOperationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListOperationErrorEnum.Unmarshal(m, b)
+}
+func (m *ListOperationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListOperationErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *ListOperationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOperationErrorEnum.Merge(dst, src)
+}
+func (m *ListOperationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ListOperationErrorEnum.Size(m)
+}
+func (m *ListOperationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOperationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOperationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ListOperationErrorEnum)(nil), "google.ads.googleads.v0.errors.ListOperationErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.ListOperationErrorEnum_ListOperationError", ListOperationErrorEnum_ListOperationError_name, ListOperationErrorEnum_ListOperationError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/list_operation_error.proto", fileDescriptor_list_operation_error_2f6e3c2f7387aa7b)
+}
+
+var fileDescriptor_list_operation_error_2f6e3c2f7387aa7b = []byte{
+	// 294 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4a, 0xf3, 0x40,
+	0x14, 0xc5, 0xbf, 0xf4, 0x03, 0x2b, 0xd3, 0x85, 0x61, 0x90, 0x0a, 0x2e, 0xba, 0xc8, 0x03, 0x4c,
+	0x02, 0xae, 0xc4, 0xd5, 0xb4, 0x99, 0x86, 0xc1, 0x98, 0xc6, 0xc6, 0x44, 0x90, 0x40, 0x88, 0x26,
+	0x0c, 0x81, 0x34, 0x37, 0xcc, 0xc4, 0x2e, 0x7d, 0x18, 0x97, 0x3e, 0x8a, 0xe0, 0x3b, 0x49, 0x32,
+	0xa6, 0x9b, 0xa2, 0xab, 0x39, 0xdc, 0x39, 0xbf, 0xfb, 0xe7, 0xa0, 0x6b, 0x01, 0x20, 0xea, 0xd2,
+	0xce, 0x0b, 0x65, 0x6b, 0xd9, 0xab, 0xbd, 0x63, 0x97, 0x52, 0x82, 0x54, 0x76, 0x5d, 0xa9, 0x2e,
+	0x83, 0xb6, 0x94, 0x79, 0x57, 0x41, 0x93, 0x0d, 0x55, 0xd2, 0x4a, 0xe8, 0x00, 0x2f, 0xb4, 0x9f,
+	0xe4, 0x85, 0x22, 0x07, 0x94, 0xec, 0x1d, 0xa2, 0x51, 0xeb, 0x0d, 0xcd, 0xfd, 0x4a, 0x75, 0x9b,
+	0x11, 0x66, 0x7d, 0x99, 0x35, 0xaf, 0x3b, 0xab, 0x40, 0xf8, 0xf8, 0x07, 0x9f, 0xa1, 0x59, 0x1c,
+	0x44, 0x21, 0x5b, 0xf1, 0x35, 0x67, 0xae, 0xf9, 0x0f, 0xcf, 0xd0, 0x34, 0x0e, 0x6e, 0x83, 0xcd,
+	0x63, 0x60, 0x1a, 0xf8, 0x12, 0xcd, 0xb7, 0xec, 0x3e, 0xe6, 0x5b, 0xe6, 0x66, 0x6b, 0xce, 0x7c,
+	0x37, 0xbb, 0xe3, 0x51, 0xc4, 0x03, 0xcf, 0x9c, 0xe2, 0x73, 0x64, 0xba, 0x71, 0xe8, 0xf3, 0x15,
+	0x7d, 0x60, 0x59, 0x42, 0xfd, 0x98, 0x45, 0xe6, 0xe9, 0xf2, 0xcb, 0x40, 0xd6, 0x0b, 0xec, 0xc8,
+	0xdf, 0x6b, 0x2e, 0x2f, 0x8e, 0x57, 0x09, 0xfb, 0xfb, 0x42, 0xe3, 0xc9, 0xfd, 0x41, 0x05, 0xd4,
+	0x79, 0x23, 0x08, 0x48, 0x61, 0x8b, 0xb2, 0x19, 0xae, 0x1f, 0xc3, 0x6a, 0x2b, 0xf5, 0x5b, 0x76,
+	0x37, 0xfa, 0x79, 0x9f, 0xfc, 0xf7, 0x28, 0xfd, 0x98, 0x2c, 0x3c, 0xdd, 0x8c, 0x16, 0x8a, 0x68,
+	0xd9, 0xab, 0xc4, 0x21, 0xc3, 0x48, 0xf5, 0x39, 0x1a, 0x52, 0x5a, 0xa8, 0xf4, 0x60, 0x48, 0x13,
+	0x27, 0xd5, 0x86, 0xe7, 0x93, 0x61, 0xf0, 0xd5, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x1d,
+	0x71, 0x9f, 0xb3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/media_bundle_error.pb.go b/googleapis/ads/googleads/v0/errors/media_bundle_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ed2cd1cfb5072dab2927356da190dd84f4d76324
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/media_bundle_error.pb.go
@@ -0,0 +1,215 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/media_bundle_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible media bundle errors.
+type MediaBundleErrorEnum_MediaBundleError int32
+
+const (
+	// Enum unspecified.
+	MediaBundleErrorEnum_UNSPECIFIED MediaBundleErrorEnum_MediaBundleError = 0
+	// The received error code is not known in this version.
+	MediaBundleErrorEnum_UNKNOWN MediaBundleErrorEnum_MediaBundleError = 1
+	// There was a problem with the request.
+	MediaBundleErrorEnum_BAD_REQUEST MediaBundleErrorEnum_MediaBundleError = 3
+	// HTML5 ads using DoubleClick Studio created ZIP files are not supported.
+	MediaBundleErrorEnum_DOUBLECLICK_BUNDLE_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 4
+	// Cannot reference URL external to the media bundle.
+	MediaBundleErrorEnum_EXTERNAL_URL_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 5
+	// Media bundle file is too large.
+	MediaBundleErrorEnum_FILE_TOO_LARGE MediaBundleErrorEnum_MediaBundleError = 6
+	// ZIP file from Google Web Designer is not published.
+	MediaBundleErrorEnum_GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED MediaBundleErrorEnum_MediaBundleError = 7
+	// Input was invalid.
+	MediaBundleErrorEnum_INVALID_INPUT MediaBundleErrorEnum_MediaBundleError = 8
+	// There was a problem with the media bundle.
+	MediaBundleErrorEnum_INVALID_MEDIA_BUNDLE MediaBundleErrorEnum_MediaBundleError = 9
+	// There was a problem with one or more of the media bundle entries.
+	MediaBundleErrorEnum_INVALID_MEDIA_BUNDLE_ENTRY MediaBundleErrorEnum_MediaBundleError = 10
+	// The media bundle contains a file with an unknown mime type
+	MediaBundleErrorEnum_INVALID_MIME_TYPE MediaBundleErrorEnum_MediaBundleError = 11
+	// The media bundle contain an invalid asset path.
+	MediaBundleErrorEnum_INVALID_PATH MediaBundleErrorEnum_MediaBundleError = 12
+	// HTML5 ad is trying to reference an asset not in .ZIP file
+	MediaBundleErrorEnum_INVALID_URL_REFERENCE MediaBundleErrorEnum_MediaBundleError = 13
+	// Media data is too large.
+	MediaBundleErrorEnum_MEDIA_DATA_TOO_LARGE MediaBundleErrorEnum_MediaBundleError = 14
+	// The media bundle contains no primary entry.
+	MediaBundleErrorEnum_MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY MediaBundleErrorEnum_MediaBundleError = 15
+	// There was an error on the server.
+	MediaBundleErrorEnum_SERVER_ERROR MediaBundleErrorEnum_MediaBundleError = 16
+	// The image could not be stored.
+	MediaBundleErrorEnum_STORAGE_ERROR MediaBundleErrorEnum_MediaBundleError = 17
+	// Media bundle created with the Swiffy tool is not allowed.
+	MediaBundleErrorEnum_SWIFFY_BUNDLE_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 18
+	// The media bundle contains too many files.
+	MediaBundleErrorEnum_TOO_MANY_FILES MediaBundleErrorEnum_MediaBundleError = 19
+	// The media bundle is not of legal dimensions.
+	MediaBundleErrorEnum_UNEXPECTED_SIZE MediaBundleErrorEnum_MediaBundleError = 20
+	// Google Web Designer not created for "Google Ads" environment.
+	MediaBundleErrorEnum_UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT MediaBundleErrorEnum_MediaBundleError = 21
+	// Unsupported HTML5 feature in HTML5 asset.
+	MediaBundleErrorEnum_UNSUPPORTED_HTML5_FEATURE MediaBundleErrorEnum_MediaBundleError = 22
+	// URL in HTML5 entry is not ssl compliant.
+	MediaBundleErrorEnum_URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT MediaBundleErrorEnum_MediaBundleError = 23
+	// Custom exits not allowed in HTML5 entry.
+	MediaBundleErrorEnum_CUSTOM_EXIT_NOT_ALLOWED MediaBundleErrorEnum_MediaBundleError = 24
+)
+
+var MediaBundleErrorEnum_MediaBundleError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "BAD_REQUEST",
+	4:  "DOUBLECLICK_BUNDLE_NOT_ALLOWED",
+	5:  "EXTERNAL_URL_NOT_ALLOWED",
+	6:  "FILE_TOO_LARGE",
+	7:  "GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED",
+	8:  "INVALID_INPUT",
+	9:  "INVALID_MEDIA_BUNDLE",
+	10: "INVALID_MEDIA_BUNDLE_ENTRY",
+	11: "INVALID_MIME_TYPE",
+	12: "INVALID_PATH",
+	13: "INVALID_URL_REFERENCE",
+	14: "MEDIA_DATA_TOO_LARGE",
+	15: "MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY",
+	16: "SERVER_ERROR",
+	17: "STORAGE_ERROR",
+	18: "SWIFFY_BUNDLE_NOT_ALLOWED",
+	19: "TOO_MANY_FILES",
+	20: "UNEXPECTED_SIZE",
+	21: "UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT",
+	22: "UNSUPPORTED_HTML5_FEATURE",
+	23: "URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT",
+	24: "CUSTOM_EXIT_NOT_ALLOWED",
+}
+var MediaBundleErrorEnum_MediaBundleError_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"BAD_REQUEST":                    3,
+	"DOUBLECLICK_BUNDLE_NOT_ALLOWED": 4,
+	"EXTERNAL_URL_NOT_ALLOWED":       5,
+	"FILE_TOO_LARGE":                 6,
+	"GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED": 7,
+	"INVALID_INPUT":                               8,
+	"INVALID_MEDIA_BUNDLE":                        9,
+	"INVALID_MEDIA_BUNDLE_ENTRY":                  10,
+	"INVALID_MIME_TYPE":                           11,
+	"INVALID_PATH":                                12,
+	"INVALID_URL_REFERENCE":                       13,
+	"MEDIA_DATA_TOO_LARGE":                        14,
+	"MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY":          15,
+	"SERVER_ERROR":                                16,
+	"STORAGE_ERROR":                               17,
+	"SWIFFY_BUNDLE_NOT_ALLOWED":                   18,
+	"TOO_MANY_FILES":                              19,
+	"UNEXPECTED_SIZE":                             20,
+	"UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT": 21,
+	"UNSUPPORTED_HTML5_FEATURE":                   22,
+	"URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT":       23,
+	"CUSTOM_EXIT_NOT_ALLOWED":                     24,
+}
+
+func (x MediaBundleErrorEnum_MediaBundleError) String() string {
+	return proto.EnumName(MediaBundleErrorEnum_MediaBundleError_name, int32(x))
+}
+func (MediaBundleErrorEnum_MediaBundleError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_media_bundle_error_5156370a3b217af5, []int{0, 0}
+}
+
+// Container for enum describing possible media bundle errors.
+type MediaBundleErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MediaBundleErrorEnum) Reset()         { *m = MediaBundleErrorEnum{} }
+func (m *MediaBundleErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MediaBundleErrorEnum) ProtoMessage()    {}
+func (*MediaBundleErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_bundle_error_5156370a3b217af5, []int{0}
+}
+func (m *MediaBundleErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaBundleErrorEnum.Unmarshal(m, b)
+}
+func (m *MediaBundleErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaBundleErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *MediaBundleErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaBundleErrorEnum.Merge(dst, src)
+}
+func (m *MediaBundleErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MediaBundleErrorEnum.Size(m)
+}
+func (m *MediaBundleErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaBundleErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaBundleErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MediaBundleErrorEnum)(nil), "google.ads.googleads.v0.errors.MediaBundleErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.MediaBundleErrorEnum_MediaBundleError", MediaBundleErrorEnum_MediaBundleError_name, MediaBundleErrorEnum_MediaBundleError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/media_bundle_error.proto", fileDescriptor_media_bundle_error_5156370a3b217af5)
+}
+
+var fileDescriptor_media_bundle_error_5156370a3b217af5 = []byte{
+	// 599 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xdb, 0x4e, 0x1b, 0x31,
+	0x10, 0x2d, 0x50, 0xa0, 0x35, 0x37, 0x63, 0x48, 0x81, 0x5e, 0xf2, 0x10, 0xa9, 0x95, 0xda, 0x4a,
+	0x9b, 0x48, 0x55, 0xd5, 0x87, 0x3e, 0x79, 0x77, 0x27, 0x8b, 0x85, 0xd7, 0xde, 0xfa, 0x92, 0x10,
+	0x14, 0xc9, 0x0a, 0x4d, 0x14, 0x21, 0x41, 0x16, 0x65, 0x0b, 0xbf, 0x53, 0xa9, 0x8f, 0xfd, 0x82,
+	0x7e, 0x43, 0xfb, 0x53, 0x95, 0x77, 0x09, 0x02, 0x94, 0xf6, 0xc9, 0xa3, 0x33, 0x73, 0xe6, 0xcc,
+	0x1c, 0x79, 0xd0, 0xa7, 0x71, 0x9e, 0x8f, 0xcf, 0x47, 0xcd, 0xc1, 0xb0, 0x68, 0x56, 0xa1, 0x8f,
+	0xae, 0x5b, 0xcd, 0xd1, 0x74, 0x9a, 0x4f, 0x8b, 0xe6, 0xc5, 0x68, 0x78, 0x36, 0x70, 0xa7, 0x57,
+	0x93, 0xe1, 0xf9, 0xc8, 0x95, 0x58, 0x70, 0x39, 0xcd, 0xbf, 0xe5, 0xa4, 0x5e, 0x55, 0x07, 0x83,
+	0x61, 0x11, 0xdc, 0x12, 0x83, 0xeb, 0x56, 0x50, 0x11, 0x1b, 0xbf, 0x96, 0xd1, 0x6e, 0xea, 0xc9,
+	0x61, 0xc9, 0x05, 0x8f, 0xc2, 0xe4, 0xea, 0xa2, 0xf1, 0x7d, 0x19, 0xe1, 0x87, 0x09, 0xb2, 0x85,
+	0xd6, 0xac, 0xd0, 0x19, 0x44, 0xac, 0xcd, 0x20, 0xc6, 0x8f, 0xc8, 0x1a, 0x5a, 0xb5, 0xe2, 0x48,
+	0xc8, 0xae, 0xc0, 0x0b, 0x3e, 0x1b, 0xd2, 0xd8, 0x29, 0xf8, 0x62, 0x41, 0x1b, 0xbc, 0x44, 0x1a,
+	0xa8, 0x1e, 0x4b, 0x1b, 0x72, 0x88, 0x38, 0x8b, 0x8e, 0x5c, 0x68, 0x45, 0xcc, 0xc1, 0x09, 0x69,
+	0x1c, 0xe5, 0x5c, 0x76, 0x21, 0xc6, 0x8f, 0xc9, 0x4b, 0xb4, 0x0f, 0xc7, 0x06, 0x94, 0xa0, 0xdc,
+	0x59, 0xc5, 0xef, 0x65, 0x97, 0x09, 0x41, 0x9b, 0x6d, 0xc6, 0xc1, 0x19, 0x29, 0x1d, 0xa7, 0x2a,
+	0x01, 0xbc, 0x42, 0x02, 0xf4, 0x2e, 0x91, 0x32, 0xe1, 0xe0, 0xba, 0x10, 0xba, 0x18, 0x34, 0x4b,
+	0x04, 0x28, 0x77, 0xc2, 0x32, 0x57, 0xd6, 0xfa, 0x0e, 0x99, 0x0d, 0x39, 0xd3, 0x87, 0x10, 0xe3,
+	0x55, 0xb2, 0x8d, 0x36, 0x98, 0xe8, 0x50, 0xce, 0x62, 0xc7, 0x44, 0x66, 0x0d, 0x7e, 0x42, 0xf6,
+	0xd1, 0xee, 0x0c, 0x4a, 0x21, 0x66, 0xf4, 0x66, 0x34, 0xfc, 0x94, 0xd4, 0xd1, 0xf3, 0x79, 0x19,
+	0x07, 0xc2, 0xa8, 0x1e, 0x46, 0xa4, 0x86, 0xb6, 0x6f, 0xf3, 0x2c, 0x05, 0x67, 0x7a, 0x19, 0xe0,
+	0x35, 0x82, 0xd1, 0xfa, 0x0c, 0xce, 0xa8, 0x39, 0xc4, 0xeb, 0xe4, 0x00, 0xd5, 0x66, 0x88, 0x5f,
+	0x4b, 0x41, 0x1b, 0x14, 0x88, 0x08, 0xf0, 0x86, 0x57, 0xaf, 0x7a, 0xc7, 0xd4, 0xd0, 0x3b, 0xab,
+	0x6d, 0x92, 0x37, 0xa8, 0x91, 0x32, 0xad, 0x99, 0x48, 0x5c, 0xa6, 0x58, 0x4a, 0x55, 0x6f, 0xde,
+	0x14, 0x5b, 0x5e, 0x4e, 0x83, 0xea, 0x80, 0x72, 0xa0, 0x94, 0x54, 0x18, 0xfb, 0x25, 0xb5, 0x91,
+	0x8a, 0x26, 0x70, 0x03, 0x6d, 0x93, 0x57, 0xe8, 0x40, 0x77, 0x59, 0xbb, 0xdd, 0x9b, 0x67, 0x3c,
+	0xf1, 0xd6, 0x7a, 0xe9, 0x94, 0x8a, 0x5e, 0xe9, 0x9b, 0xc6, 0x3b, 0x64, 0x07, 0x6d, 0x59, 0x01,
+	0xc7, 0x19, 0x44, 0x06, 0x62, 0xa7, 0xd9, 0x09, 0xe0, 0x5d, 0xd2, 0x44, 0xef, 0xad, 0xd0, 0x36,
+	0xcb, 0xa4, 0xf2, 0xe8, 0x3c, 0xef, 0x41, 0x74, 0x98, 0x92, 0x22, 0x05, 0x61, 0x70, 0xcd, 0x0b,
+	0xdf, 0x25, 0x1c, 0x9a, 0x94, 0x7f, 0x74, 0x6d, 0xa0, 0xc6, 0x2a, 0xc0, 0xcf, 0xc8, 0x5b, 0xf4,
+	0xda, 0x3b, 0xc2, 0xc4, 0xfd, 0xdd, 0xfc, 0x74, 0x5a, 0x73, 0x17, 0xc9, 0x34, 0xe3, 0x8c, 0x0a,
+	0x83, 0xf7, 0xc8, 0x0b, 0xb4, 0x17, 0x59, 0x6d, 0x64, 0xea, 0xe0, 0x98, 0x99, 0x7b, 0x0b, 0xec,
+	0x87, 0x7f, 0x16, 0x50, 0xe3, 0x6b, 0x7e, 0x11, 0xfc, 0xff, 0x87, 0x87, 0xb5, 0x87, 0xbf, 0x38,
+	0xf3, 0x87, 0x91, 0x2d, 0x9c, 0xc4, 0x37, 0xc4, 0x71, 0x7e, 0x3e, 0x98, 0x8c, 0x83, 0x7c, 0x3a,
+	0x6e, 0x8e, 0x47, 0x93, 0xf2, 0x6c, 0x66, 0x37, 0x76, 0x79, 0x56, 0xfc, 0xeb, 0xe4, 0x3e, 0x57,
+	0xcf, 0x8f, 0xc5, 0xa5, 0x84, 0xd2, 0x9f, 0x8b, 0xf5, 0xa4, 0x6a, 0x46, 0x87, 0x45, 0x50, 0x85,
+	0x3e, 0xea, 0xb4, 0x82, 0x52, 0xb2, 0xf8, 0x3d, 0x2b, 0xe8, 0xd3, 0x61, 0xd1, 0xbf, 0x2d, 0xe8,
+	0x77, 0x5a, 0xfd, 0xaa, 0xe0, 0x74, 0xa5, 0x14, 0xfe, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x6a,
+	0xb2, 0xae, 0x49, 0xea, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/media_file_error.pb.go b/googleapis/ads/googleads/v0/errors/media_file_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1d535b5e872fbe6707528a8152276820699605a9
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/media_file_error.pb.go
@@ -0,0 +1,221 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/media_file_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible media file errors.
+type MediaFileErrorEnum_MediaFileError int32
+
+const (
+	// Enum unspecified.
+	MediaFileErrorEnum_UNSPECIFIED MediaFileErrorEnum_MediaFileError = 0
+	// The received error code is not known in this version.
+	MediaFileErrorEnum_UNKNOWN MediaFileErrorEnum_MediaFileError = 1
+	// Cannot create a standard icon type.
+	MediaFileErrorEnum_CANNOT_CREATE_STANDARD_ICON MediaFileErrorEnum_MediaFileError = 2
+	// May only select Standard Icons alone.
+	MediaFileErrorEnum_CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES MediaFileErrorEnum_MediaFileError = 3
+	// Image contains both a media file ID and data.
+	MediaFileErrorEnum_CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA MediaFileErrorEnum_MediaFileError = 4
+	// A media file with given type and reference ID already exists.
+	MediaFileErrorEnum_DUPLICATE_MEDIA MediaFileErrorEnum_MediaFileError = 5
+	// A required field was not specified or is an empty string.
+	MediaFileErrorEnum_EMPTY_FIELD MediaFileErrorEnum_MediaFileError = 6
+	// A media file may only be modified once per call.
+	MediaFileErrorEnum_RESOURCE_REFERENCED_IN_MULTIPLE_OPS MediaFileErrorEnum_MediaFileError = 7
+	// Field is not supported for the media sub type.
+	MediaFileErrorEnum_FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE MediaFileErrorEnum_MediaFileError = 8
+	// The media file ID is invalid.
+	MediaFileErrorEnum_INVALID_MEDIA_FILE_ID MediaFileErrorEnum_MediaFileError = 9
+	// The media subtype is invalid.
+	MediaFileErrorEnum_INVALID_MEDIA_SUB_TYPE MediaFileErrorEnum_MediaFileError = 10
+	// The media file type is invalid.
+	MediaFileErrorEnum_INVALID_MEDIA_FILE_TYPE MediaFileErrorEnum_MediaFileError = 11
+	// The mimetype is invalid.
+	MediaFileErrorEnum_INVALID_MIME_TYPE MediaFileErrorEnum_MediaFileError = 12
+	// The media reference ID is invalid.
+	MediaFileErrorEnum_INVALID_REFERENCE_ID MediaFileErrorEnum_MediaFileError = 13
+	// The YouTube video ID is invalid.
+	MediaFileErrorEnum_INVALID_YOU_TUBE_ID MediaFileErrorEnum_MediaFileError = 14
+	// Media file has failed transcoding
+	MediaFileErrorEnum_MEDIA_FILE_FAILED_TRANSCODING MediaFileErrorEnum_MediaFileError = 15
+	// Media file has not been transcoded.
+	MediaFileErrorEnum_MEDIA_NOT_TRANSCODED MediaFileErrorEnum_MediaFileError = 16
+	// The media type does not match the actual media file's type.
+	MediaFileErrorEnum_MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE MediaFileErrorEnum_MediaFileError = 17
+	// None of the fields have been specified.
+	MediaFileErrorEnum_NO_FIELDS_SPECIFIED MediaFileErrorEnum_MediaFileError = 18
+	// One of reference ID or media file ID must be specified.
+	MediaFileErrorEnum_NULL_REFERENCE_ID_AND_MEDIA_ID MediaFileErrorEnum_MediaFileError = 19
+	// The string has too many characters.
+	MediaFileErrorEnum_TOO_LONG MediaFileErrorEnum_MediaFileError = 20
+	// The specified type is not supported.
+	MediaFileErrorEnum_UNSUPPORTED_TYPE MediaFileErrorEnum_MediaFileError = 21
+	// YouTube is unavailable for requesting video data.
+	MediaFileErrorEnum_YOU_TUBE_SERVICE_UNAVAILABLE MediaFileErrorEnum_MediaFileError = 22
+	// The YouTube video has a non positive duration.
+	MediaFileErrorEnum_YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION MediaFileErrorEnum_MediaFileError = 23
+	// The YouTube video ID is syntactically valid but the video was not found.
+	MediaFileErrorEnum_YOU_TUBE_VIDEO_NOT_FOUND MediaFileErrorEnum_MediaFileError = 24
+)
+
+var MediaFileErrorEnum_MediaFileError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "CANNOT_CREATE_STANDARD_ICON",
+	3:  "CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES",
+	4:  "CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA",
+	5:  "DUPLICATE_MEDIA",
+	6:  "EMPTY_FIELD",
+	7:  "RESOURCE_REFERENCED_IN_MULTIPLE_OPS",
+	8:  "FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE",
+	9:  "INVALID_MEDIA_FILE_ID",
+	10: "INVALID_MEDIA_SUB_TYPE",
+	11: "INVALID_MEDIA_FILE_TYPE",
+	12: "INVALID_MIME_TYPE",
+	13: "INVALID_REFERENCE_ID",
+	14: "INVALID_YOU_TUBE_ID",
+	15: "MEDIA_FILE_FAILED_TRANSCODING",
+	16: "MEDIA_NOT_TRANSCODED",
+	17: "MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE",
+	18: "NO_FIELDS_SPECIFIED",
+	19: "NULL_REFERENCE_ID_AND_MEDIA_ID",
+	20: "TOO_LONG",
+	21: "UNSUPPORTED_TYPE",
+	22: "YOU_TUBE_SERVICE_UNAVAILABLE",
+	23: "YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION",
+	24: "YOU_TUBE_VIDEO_NOT_FOUND",
+}
+var MediaFileErrorEnum_MediaFileError_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"CANNOT_CREATE_STANDARD_ICON": 2,
+	"CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES": 3,
+	"CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA":        4,
+	"DUPLICATE_MEDIA":                              5,
+	"EMPTY_FIELD":                                  6,
+	"RESOURCE_REFERENCED_IN_MULTIPLE_OPS":          7,
+	"FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE":       8,
+	"INVALID_MEDIA_FILE_ID":                        9,
+	"INVALID_MEDIA_SUB_TYPE":                       10,
+	"INVALID_MEDIA_FILE_TYPE":                      11,
+	"INVALID_MIME_TYPE":                            12,
+	"INVALID_REFERENCE_ID":                         13,
+	"INVALID_YOU_TUBE_ID":                          14,
+	"MEDIA_FILE_FAILED_TRANSCODING":                15,
+	"MEDIA_NOT_TRANSCODED":                         16,
+	"MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE":    17,
+	"NO_FIELDS_SPECIFIED":                          18,
+	"NULL_REFERENCE_ID_AND_MEDIA_ID":               19,
+	"TOO_LONG":                                     20,
+	"UNSUPPORTED_TYPE":                             21,
+	"YOU_TUBE_SERVICE_UNAVAILABLE":                 22,
+	"YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION":     23,
+	"YOU_TUBE_VIDEO_NOT_FOUND":                     24,
+}
+
+func (x MediaFileErrorEnum_MediaFileError) String() string {
+	return proto.EnumName(MediaFileErrorEnum_MediaFileError_name, int32(x))
+}
+func (MediaFileErrorEnum_MediaFileError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_error_84addac25c50f409, []int{0, 0}
+}
+
+// Container for enum describing possible media file errors.
+type MediaFileErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MediaFileErrorEnum) Reset()         { *m = MediaFileErrorEnum{} }
+func (m *MediaFileErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MediaFileErrorEnum) ProtoMessage()    {}
+func (*MediaFileErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_error_84addac25c50f409, []int{0}
+}
+func (m *MediaFileErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaFileErrorEnum.Unmarshal(m, b)
+}
+func (m *MediaFileErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaFileErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *MediaFileErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaFileErrorEnum.Merge(dst, src)
+}
+func (m *MediaFileErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MediaFileErrorEnum.Size(m)
+}
+func (m *MediaFileErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaFileErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaFileErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MediaFileErrorEnum)(nil), "google.ads.googleads.v0.errors.MediaFileErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.MediaFileErrorEnum_MediaFileError", MediaFileErrorEnum_MediaFileError_name, MediaFileErrorEnum_MediaFileError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/media_file_error.proto", fileDescriptor_media_file_error_84addac25c50f409)
+}
+
+var fileDescriptor_media_file_error_84addac25c50f409 = []byte{
+	// 632 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xdd, 0x6e, 0xd3, 0x4c,
+	0x10, 0xfd, 0xda, 0x7e, 0xa4, 0x65, 0x5b, 0xda, 0xed, 0xa6, 0x7f, 0xd0, 0x52, 0x20, 0x88, 0x9f,
+	0xa2, 0xe2, 0x44, 0x42, 0x5c, 0x71, 0xb5, 0xf1, 0x8e, 0x93, 0x15, 0xce, 0xae, 0x65, 0xaf, 0x53,
+	0x05, 0x45, 0x1a, 0x05, 0x12, 0xa2, 0x48, 0x69, 0x5d, 0x25, 0xd0, 0x6b, 0xde, 0x82, 0x7b, 0x2e,
+	0x79, 0x13, 0x78, 0x2a, 0xb4, 0xeb, 0xc4, 0x25, 0xfc, 0x5d, 0x65, 0x34, 0xe7, 0x9c, 0x39, 0x67,
+	0x36, 0x1e, 0xf2, 0x72, 0x98, 0x65, 0xc3, 0xf1, 0xa0, 0xda, 0xeb, 0x4f, 0xab, 0x79, 0x69, 0xab,
+	0xab, 0x5a, 0x75, 0x30, 0x99, 0x64, 0x93, 0x69, 0xf5, 0x7c, 0xd0, 0x1f, 0xf5, 0xf0, 0xfd, 0x68,
+	0x3c, 0x40, 0xd7, 0xf1, 0x2e, 0x27, 0xd9, 0x87, 0x8c, 0x1d, 0xe7, 0x5c, 0xaf, 0xd7, 0x9f, 0x7a,
+	0x85, 0xcc, 0xbb, 0xaa, 0x79, 0xb9, 0xac, 0xf2, 0xb9, 0x44, 0x58, 0xcb, 0x4a, 0x83, 0xd1, 0x78,
+	0x00, 0xb6, 0x07, 0x17, 0x1f, 0xcf, 0x2b, 0x9f, 0x4a, 0x64, 0x73, 0xb1, 0xcd, 0xb6, 0xc8, 0x7a,
+	0xaa, 0x92, 0x08, 0x7c, 0x19, 0x48, 0x10, 0xf4, 0x3f, 0xb6, 0x4e, 0x56, 0x53, 0xf5, 0x5a, 0xe9,
+	0x33, 0x45, 0x97, 0xd8, 0x3d, 0x72, 0xe8, 0x73, 0xa5, 0xb4, 0x41, 0x3f, 0x06, 0x6e, 0x00, 0x13,
+	0xc3, 0x95, 0xe0, 0xb1, 0x40, 0xe9, 0x6b, 0x45, 0x97, 0x59, 0x8d, 0x9c, 0xce, 0x08, 0x09, 0x84,
+	0xe0, 0x9b, 0x45, 0x02, 0x9e, 0x49, 0xd3, 0x44, 0x6d, 0x9a, 0x10, 0xa3, 0xe9, 0x44, 0x90, 0xd0,
+	0x15, 0x76, 0x42, 0x1e, 0xcd, 0x15, 0xce, 0xb5, 0x83, 0x2d, 0x10, 0x92, 0x63, 0x20, 0x43, 0x40,
+	0x29, 0x90, 0x2b, 0x81, 0x82, 0x1b, 0x4e, 0xff, 0x67, 0x65, 0xb2, 0x25, 0xd2, 0x28, 0x94, 0xbe,
+	0x75, 0x76, 0x2c, 0x7a, 0xc3, 0x06, 0x86, 0x56, 0x64, 0x3a, 0x18, 0x48, 0x08, 0x05, 0x2d, 0xb1,
+	0x27, 0xe4, 0x61, 0x0c, 0x89, 0x4e, 0x63, 0x1f, 0x30, 0x86, 0x00, 0x62, 0x50, 0x3e, 0x08, 0x94,
+	0x0a, 0x5b, 0x69, 0x68, 0x64, 0x14, 0x02, 0xea, 0x28, 0xa1, 0xab, 0xec, 0x19, 0x79, 0xec, 0x34,
+	0xe8, 0xcc, 0xd3, 0x28, 0xd2, 0xb1, 0x01, 0x81, 0x81, 0x8e, 0x67, 0x11, 0x92, 0xb4, 0xee, 0x62,
+	0xd2, 0x35, 0x76, 0x9b, 0xec, 0x4a, 0xd5, 0xe6, 0xa1, 0x14, 0x8b, 0xf1, 0xe8, 0x4d, 0x76, 0x87,
+	0xec, 0x2d, 0x42, 0x85, 0x8c, 0xb0, 0x43, 0xb2, 0xff, 0x07, 0x99, 0x03, 0xd7, 0xd9, 0x2e, 0xd9,
+	0x2e, 0x40, 0xd9, 0x9a, 0xb5, 0x37, 0xd8, 0x01, 0xd9, 0x99, 0xb7, 0x8b, 0xf8, 0xd6, 0xe9, 0x16,
+	0xdb, 0x27, 0xe5, 0x39, 0xd2, 0xd1, 0x29, 0x9a, 0xb4, 0xee, 0x80, 0x4d, 0xf6, 0x80, 0xdc, 0xfd,
+	0x69, 0x7c, 0xc0, 0x65, 0x08, 0x02, 0x4d, 0xcc, 0x55, 0xe2, 0x6b, 0x21, 0x55, 0x83, 0x6e, 0xd9,
+	0xa9, 0x39, 0xc5, 0x2e, 0x3b, 0x87, 0x40, 0x50, 0xca, 0x9e, 0x93, 0x93, 0x1c, 0xb1, 0xfe, 0x28,
+	0x34, 0x24, 0x8e, 0xd3, 0xe2, 0xc6, 0x6f, 0xfe, 0x96, 0x7a, 0xdb, 0x86, 0x50, 0x3a, 0x7f, 0xec,
+	0x04, 0xaf, 0x3f, 0x14, 0xc6, 0x2a, 0xe4, 0x58, 0xa5, 0x61, 0xb8, 0x10, 0xda, 0xfd, 0x7b, 0xf9,
+	0x0c, 0x29, 0x68, 0x99, 0x6d, 0x90, 0x35, 0xa3, 0x35, 0x86, 0x5a, 0x35, 0xe8, 0x0e, 0xdb, 0x21,
+	0x34, 0x55, 0xd7, 0x0f, 0xef, 0x0c, 0x76, 0xd9, 0x7d, 0x72, 0x54, 0x6c, 0x97, 0x40, 0xdc, 0x96,
+	0x3e, 0x60, 0xaa, 0x78, 0x9b, 0xcb, 0x90, 0xd7, 0x43, 0xa0, 0x7b, 0xec, 0x94, 0x3c, 0x2d, 0x18,
+	0x6d, 0x29, 0x40, 0x63, 0x93, 0xdb, 0xd0, 0x0a, 0x23, 0x9d, 0x48, 0x23, 0xdb, 0x80, 0x22, 0x8d,
+	0xb9, 0x91, 0x5a, 0xd1, 0x7d, 0x76, 0x44, 0x0e, 0x7e, 0x61, 0xdb, 0xf5, 0x02, 0x9d, 0x2a, 0x41,
+	0x0f, 0xea, 0xdf, 0x96, 0x48, 0xe5, 0x5d, 0x76, 0xee, 0xfd, 0xfb, 0x80, 0xea, 0xe5, 0xc5, 0x33,
+	0x89, 0xec, 0xd5, 0x45, 0x4b, 0x6f, 0xc4, 0x4c, 0x36, 0xcc, 0xc6, 0xbd, 0x8b, 0xa1, 0x97, 0x4d,
+	0x86, 0xd5, 0xe1, 0xe0, 0xc2, 0xdd, 0xe4, 0xfc, 0x7c, 0x2f, 0x47, 0xd3, 0xbf, 0x5d, 0xf3, 0xab,
+	0xfc, 0xe7, 0xcb, 0xf2, 0x4a, 0x83, 0xf3, 0xaf, 0xcb, 0xc7, 0x8d, 0x7c, 0x18, 0xef, 0x4f, 0xbd,
+	0xbc, 0xb4, 0x55, 0xbb, 0xe6, 0x39, 0xcb, 0xe9, 0xf7, 0x39, 0xa1, 0xcb, 0xfb, 0xd3, 0x6e, 0x41,
+	0xe8, 0xb6, 0x6b, 0xdd, 0x9c, 0xf0, 0xb6, 0xe4, 0x8c, 0x5f, 0xfc, 0x08, 0x00, 0x00, 0xff, 0xff,
+	0x5b, 0x29, 0xd6, 0xd9, 0x45, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/multiplier_error.pb.go b/googleapis/ads/googleads/v0/errors/multiplier_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..2802c3c83a66877a59a792d781897fe2326f31a1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/multiplier_error.pb.go
@@ -0,0 +1,169 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/multiplier_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible multiplier errors.
+type MultiplierErrorEnum_MultiplierError int32
+
+const (
+	// Enum unspecified.
+	MultiplierErrorEnum_UNSPECIFIED MultiplierErrorEnum_MultiplierError = 0
+	// The received error code is not known in this version.
+	MultiplierErrorEnum_UNKNOWN MultiplierErrorEnum_MultiplierError = 1
+	// Multiplier value is too high
+	MultiplierErrorEnum_MULTIPLIER_TOO_HIGH MultiplierErrorEnum_MultiplierError = 2
+	// Multiplier value is too low
+	MultiplierErrorEnum_MULTIPLIER_TOO_LOW MultiplierErrorEnum_MultiplierError = 3
+	// Too many fractional digits
+	MultiplierErrorEnum_TOO_MANY_FRACTIONAL_DIGITS MultiplierErrorEnum_MultiplierError = 4
+	// A multiplier cannot be set for this bidding strategy
+	MultiplierErrorEnum_MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY MultiplierErrorEnum_MultiplierError = 5
+	// A multiplier cannot be set when there is no base bid (e.g., content max
+	// cpc)
+	MultiplierErrorEnum_MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING MultiplierErrorEnum_MultiplierError = 6
+	// A bid multiplier must be specified
+	MultiplierErrorEnum_NO_MULTIPLIER_SPECIFIED MultiplierErrorEnum_MultiplierError = 7
+	// Multiplier causes bid to exceed daily budget
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET MultiplierErrorEnum_MultiplierError = 8
+	// Multiplier causes bid to exceed monthly budget
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET MultiplierErrorEnum_MultiplierError = 9
+	// Multiplier causes bid to exceed custom budget
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET MultiplierErrorEnum_MultiplierError = 10
+	// Multiplier causes bid to exceed maximum allowed bid
+	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID MultiplierErrorEnum_MultiplierError = 11
+	// Multiplier causes bid to become less than the minimum bid allowed
+	MultiplierErrorEnum_BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER MultiplierErrorEnum_MultiplierError = 12
+	// Multiplier type (cpc vs. cpm) needs to match campaign's bidding strategy
+	MultiplierErrorEnum_MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH MultiplierErrorEnum_MultiplierError = 13
+)
+
+var MultiplierErrorEnum_MultiplierError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "MULTIPLIER_TOO_HIGH",
+	3:  "MULTIPLIER_TOO_LOW",
+	4:  "TOO_MANY_FRACTIONAL_DIGITS",
+	5:  "MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY",
+	6:  "MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING",
+	7:  "NO_MULTIPLIER_SPECIFIED",
+	8:  "MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET",
+	9:  "MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET",
+	10: "MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET",
+	11: "MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID",
+	12: "BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER",
+	13: "MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH",
+}
+var MultiplierErrorEnum_MultiplierError_value = map[string]int32{
+	"UNSPECIFIED":                0,
+	"UNKNOWN":                    1,
+	"MULTIPLIER_TOO_HIGH":        2,
+	"MULTIPLIER_TOO_LOW":         3,
+	"TOO_MANY_FRACTIONAL_DIGITS": 4,
+	"MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY":     5,
+	"MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING": 6,
+	"NO_MULTIPLIER_SPECIFIED":                         7,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET":    8,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET":  9,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET":   10,
+	"MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID": 11,
+	"BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER":   12,
+	"MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH":   13,
+}
+
+func (x MultiplierErrorEnum_MultiplierError) String() string {
+	return proto.EnumName(MultiplierErrorEnum_MultiplierError_name, int32(x))
+}
+func (MultiplierErrorEnum_MultiplierError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_multiplier_error_b4af260a1d032c63, []int{0, 0}
+}
+
+// Container for enum describing possible multiplier errors.
+type MultiplierErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MultiplierErrorEnum) Reset()         { *m = MultiplierErrorEnum{} }
+func (m *MultiplierErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MultiplierErrorEnum) ProtoMessage()    {}
+func (*MultiplierErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_multiplier_error_b4af260a1d032c63, []int{0}
+}
+func (m *MultiplierErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MultiplierErrorEnum.Unmarshal(m, b)
+}
+func (m *MultiplierErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MultiplierErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *MultiplierErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MultiplierErrorEnum.Merge(dst, src)
+}
+func (m *MultiplierErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MultiplierErrorEnum.Size(m)
+}
+func (m *MultiplierErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MultiplierErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MultiplierErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MultiplierErrorEnum)(nil), "google.ads.googleads.v0.errors.MultiplierErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.MultiplierErrorEnum_MultiplierError", MultiplierErrorEnum_MultiplierError_name, MultiplierErrorEnum_MultiplierError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/multiplier_error.proto", fileDescriptor_multiplier_error_b4af260a1d032c63)
+}
+
+var fileDescriptor_multiplier_error_b4af260a1d032c63 = []byte{
+	// 481 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xd1, 0x6e, 0xd3, 0x30,
+	0x14, 0x86, 0x59, 0x57, 0x36, 0x70, 0x41, 0xb3, 0x3c, 0xc4, 0x24, 0x90, 0x7a, 0xd1, 0x5b, 0xc0,
+	0x29, 0x4c, 0x5c, 0x71, 0xe5, 0xc4, 0x6e, 0x62, 0x91, 0xd8, 0x55, 0xed, 0xac, 0x2b, 0xaa, 0x74,
+	0x54, 0x68, 0x15, 0x55, 0x6a, 0x9b, 0x2a, 0xd9, 0xf6, 0x40, 0x5c, 0xf2, 0x02, 0xbc, 0xc3, 0x6e,
+	0x78, 0x25, 0x94, 0x84, 0x76, 0x51, 0x60, 0xec, 0x2a, 0x27, 0xc7, 0xff, 0xe7, 0x3f, 0xe7, 0xe8,
+	0x0f, 0xfa, 0x98, 0xa4, 0x69, 0xb2, 0x5a, 0x38, 0xb3, 0x79, 0xee, 0x54, 0x65, 0x51, 0xdd, 0xf4,
+	0x9d, 0x45, 0x96, 0xa5, 0x59, 0xee, 0xac, 0xaf, 0x57, 0x57, 0xcb, 0xed, 0x6a, 0xb9, 0xc8, 0xa0,
+	0xec, 0xd0, 0x6d, 0x96, 0x5e, 0xa5, 0xa4, 0x5b, 0x69, 0xe9, 0x6c, 0x9e, 0xd3, 0x3d, 0x46, 0x6f,
+	0xfa, 0xb4, 0xc2, 0x7a, 0xbf, 0xda, 0xe8, 0x34, 0xda, 0xa3, 0xa2, 0x68, 0x8a, 0xcd, 0xf5, 0xba,
+	0xf7, 0xb3, 0x8d, 0x4e, 0x1a, 0x7d, 0x72, 0x82, 0x3a, 0xb1, 0x32, 0x43, 0xe1, 0xc9, 0x81, 0x14,
+	0x1c, 0x3f, 0x22, 0x1d, 0x74, 0x1c, 0xab, 0xcf, 0x4a, 0x8f, 0x15, 0x3e, 0x20, 0x67, 0xe8, 0x34,
+	0x8a, 0x43, 0x2b, 0x87, 0xa1, 0x14, 0x23, 0xb0, 0x5a, 0x43, 0x20, 0xfd, 0x00, 0xb7, 0xc8, 0x4b,
+	0x44, 0x1a, 0x07, 0xa1, 0x1e, 0xe3, 0x43, 0xd2, 0x45, 0xaf, 0x8a, 0x97, 0x88, 0xa9, 0x09, 0x0c,
+	0x46, 0xcc, 0xb3, 0x52, 0x2b, 0x16, 0x02, 0x97, 0xbe, 0xb4, 0x06, 0xb7, 0x89, 0x83, 0xde, 0xd4,
+	0x38, 0xa5, 0x2d, 0xb0, 0x30, 0xd4, 0x63, 0xc1, 0x61, 0xa0, 0x47, 0xe0, 0x4a, 0xce, 0xa5, 0xf2,
+	0xc1, 0xd8, 0x11, 0xb3, 0xc2, 0x9f, 0xe0, 0xc7, 0xe4, 0x1c, 0x39, 0xf7, 0x00, 0xe3, 0x40, 0x28,
+	0x70, 0x99, 0x11, 0x05, 0x06, 0xd2, 0x40, 0x24, 0x8d, 0x91, 0xca, 0xc7, 0x47, 0xe4, 0x35, 0x3a,
+	0x53, 0x1a, 0x6a, 0xdc, 0xdd, 0x80, 0xc7, 0xa4, 0x8f, 0xde, 0xd6, 0x4e, 0x3c, 0x16, 0x1b, 0x61,
+	0xca, 0x2b, 0xac, 0x06, 0x71, 0xe9, 0x09, 0xc1, 0x81, 0x33, 0x19, 0x4e, 0xc0, 0x8d, 0xb9, 0x2f,
+	0x2c, 0x7e, 0x42, 0x3e, 0x20, 0xfa, 0x10, 0x11, 0x69, 0x65, 0x83, 0x3b, 0xe6, 0x29, 0x79, 0x8f,
+	0xde, 0x3d, 0xc4, 0x78, 0xb1, 0xb1, 0x3a, 0xda, 0x21, 0xa8, 0x31, 0xea, 0xbf, 0x6d, 0xd8, 0xe5,
+	0x7e, 0x7e, 0x57, 0x72, 0xdc, 0x29, 0x7c, 0x0a, 0x49, 0x28, 0x8c, 0x01, 0x1b, 0x30, 0x05, 0x91,
+	0x54, 0x75, 0x09, 0x8c, 0xa5, 0x0d, 0x6a, 0xab, 0xc0, 0xcf, 0x1a, 0x9f, 0xc6, 0x14, 0xff, 0x6b,
+	0xef, 0x60, 0x27, 0x43, 0x51, 0xec, 0x33, 0x62, 0xd6, 0x0b, 0xf0, 0x73, 0xf7, 0xf6, 0x00, 0xf5,
+	0xbe, 0xa5, 0x6b, 0xfa, 0xff, 0xe0, 0xb9, 0x2f, 0x1a, 0xe9, 0x1a, 0x16, 0x71, 0x1d, 0x1e, 0x7c,
+	0xe1, 0x7f, 0xb8, 0x24, 0x5d, 0xcd, 0x36, 0x09, 0x4d, 0xb3, 0xc4, 0x49, 0x16, 0x9b, 0x32, 0xcc,
+	0xbb, 0xdc, 0x6f, 0x97, 0xf9, 0x7d, 0xbf, 0xc1, 0xa7, 0xea, 0xf1, 0xbd, 0x75, 0xe8, 0x33, 0xf6,
+	0xa3, 0xd5, 0xf5, 0xab, 0xcb, 0xd8, 0x3c, 0xa7, 0x55, 0x59, 0x54, 0x17, 0x7d, 0x5a, 0x5a, 0xe6,
+	0xb7, 0x3b, 0xc1, 0x94, 0xcd, 0xf3, 0xe9, 0x5e, 0x30, 0xbd, 0xe8, 0x4f, 0x2b, 0xc1, 0xd7, 0xa3,
+	0xd2, 0xf8, 0xfc, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0xa1, 0x55, 0x16, 0x7e, 0x03, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/mutate_error.pb.go b/googleapis/ads/googleads/v0/errors/mutate_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d75e3df22772afc9d66a8c7c62665d357afa97bf
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/mutate_error.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/mutate_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible mutate errors.
+type MutateErrorEnum_MutateError int32
+
+const (
+	// Enum unspecified.
+	MutateErrorEnum_UNSPECIFIED MutateErrorEnum_MutateError = 0
+	// The received error code is not known in this version.
+	MutateErrorEnum_UNKNOWN MutateErrorEnum_MutateError = 1
+	// Requested resource was not found.
+	MutateErrorEnum_RESOURCE_NOT_FOUND MutateErrorEnum_MutateError = 3
+	// Cannot mutate the same resource twice in one request.
+	MutateErrorEnum_ID_EXISTS_IN_MULTIPLE_MUTATES MutateErrorEnum_MutateError = 7
+	// The field's contents don't match another field that represents the same
+	// data.
+	MutateErrorEnum_INCONSISTENT_FIELD_VALUES MutateErrorEnum_MutateError = 8
+	// Mutates are not allowed for the requested resource.
+	MutateErrorEnum_MUTATE_NOT_ALLOWED MutateErrorEnum_MutateError = 9
+)
+
+var MutateErrorEnum_MutateError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "RESOURCE_NOT_FOUND",
+	7: "ID_EXISTS_IN_MULTIPLE_MUTATES",
+	8: "INCONSISTENT_FIELD_VALUES",
+	9: "MUTATE_NOT_ALLOWED",
+}
+var MutateErrorEnum_MutateError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"RESOURCE_NOT_FOUND":            3,
+	"ID_EXISTS_IN_MULTIPLE_MUTATES": 7,
+	"INCONSISTENT_FIELD_VALUES":     8,
+	"MUTATE_NOT_ALLOWED":            9,
+}
+
+func (x MutateErrorEnum_MutateError) String() string {
+	return proto.EnumName(MutateErrorEnum_MutateError_name, int32(x))
+}
+func (MutateErrorEnum_MutateError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_mutate_error_662b71f580e25d75, []int{0, 0}
+}
+
+// Container for enum describing possible mutate errors.
+type MutateErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateErrorEnum) Reset()         { *m = MutateErrorEnum{} }
+func (m *MutateErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*MutateErrorEnum) ProtoMessage()    {}
+func (*MutateErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_mutate_error_662b71f580e25d75, []int{0}
+}
+func (m *MutateErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateErrorEnum.Unmarshal(m, b)
+}
+func (m *MutateErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *MutateErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateErrorEnum.Merge(dst, src)
+}
+func (m *MutateErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_MutateErrorEnum.Size(m)
+}
+func (m *MutateErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*MutateErrorEnum)(nil), "google.ads.googleads.v0.errors.MutateErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.MutateErrorEnum_MutateError", MutateErrorEnum_MutateError_name, MutateErrorEnum_MutateError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/mutate_error.proto", fileDescriptor_mutate_error_662b71f580e25d75)
+}
+
+var fileDescriptor_mutate_error_662b71f580e25d75 = []byte{
+	// 329 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x6e, 0xea, 0x30,
+	0x18, 0x85, 0x6f, 0x40, 0xba, 0xdc, 0x6b, 0x06, 0x2c, 0x0f, 0x95, 0x3a, 0x80, 0x54, 0x1e, 0xc0,
+	0x49, 0xd5, 0xb1, 0x93, 0x21, 0x06, 0x59, 0x0d, 0x4e, 0x84, 0x6d, 0xa8, 0xaa, 0x48, 0x56, 0xda,
+	0x44, 0x51, 0x25, 0xc0, 0x28, 0x06, 0xde, 0xa6, 0x4b, 0xc7, 0x6e, 0x7d, 0x89, 0x0e, 0x7d, 0xaa,
+	0x2a, 0x71, 0x41, 0x2c, 0xed, 0xe4, 0xe3, 0x5f, 0xdf, 0x39, 0xbf, 0xfe, 0x03, 0xae, 0x4b, 0x63,
+	0xca, 0x55, 0xe1, 0x67, 0xb9, 0xf5, 0x9d, 0xac, 0xd5, 0x21, 0xf0, 0x8b, 0xaa, 0x32, 0x95, 0xf5,
+	0xd7, 0xfb, 0x5d, 0xb6, 0x2b, 0x74, 0xf3, 0xc3, 0xdb, 0xca, 0xec, 0x0c, 0x1a, 0x38, 0x0e, 0x67,
+	0xb9, 0xc5, 0x27, 0x0b, 0x3e, 0x04, 0xd8, 0x59, 0x86, 0xef, 0x1e, 0xe8, 0xcd, 0x1a, 0x1b, 0xad,
+	0x07, 0x74, 0xb3, 0x5f, 0x0f, 0x5f, 0x3c, 0xd0, 0x3d, 0x9b, 0xa1, 0x1e, 0xe8, 0x2a, 0x2e, 0x12,
+	0x3a, 0x66, 0x13, 0x46, 0x43, 0xf8, 0x07, 0x75, 0x41, 0x47, 0xf1, 0x3b, 0x1e, 0x2f, 0x39, 0xf4,
+	0xd0, 0x05, 0x40, 0x73, 0x2a, 0x62, 0x35, 0x1f, 0x53, 0xcd, 0x63, 0xa9, 0x27, 0xb1, 0xe2, 0x21,
+	0x6c, 0xa3, 0x2b, 0xd0, 0x67, 0xa1, 0xa6, 0xf7, 0x4c, 0x48, 0xa1, 0x19, 0xd7, 0x33, 0x15, 0x49,
+	0x96, 0x44, 0x54, 0xcf, 0x94, 0x24, 0x92, 0x0a, 0xd8, 0x41, 0x7d, 0x70, 0xc9, 0xf8, 0x38, 0xe6,
+	0x82, 0x09, 0x49, 0xb9, 0xd4, 0x13, 0x46, 0xa3, 0x50, 0x2f, 0x48, 0xa4, 0xa8, 0x80, 0xff, 0xea,
+	0x64, 0xc7, 0x36, 0xb9, 0x24, 0x8a, 0xe2, 0x25, 0x0d, 0xe1, 0xff, 0xd1, 0x87, 0x07, 0x86, 0x4f,
+	0x66, 0x8d, 0x7f, 0x3f, 0x6d, 0x04, 0xcf, 0x6e, 0x48, 0xea, 0x32, 0x12, 0xef, 0x21, 0xfc, 0xf6,
+	0x94, 0x66, 0x95, 0x6d, 0x4a, 0x6c, 0xaa, 0xd2, 0x2f, 0x8b, 0x4d, 0x53, 0xd5, 0xb1, 0xd1, 0xed,
+	0xb3, 0xfd, 0xa9, 0xe0, 0x5b, 0xf7, 0xbc, 0xb6, 0xda, 0x53, 0x42, 0xde, 0x5a, 0x83, 0xa9, 0x0b,
+	0x23, 0xb9, 0xc5, 0x4e, 0xd6, 0x6a, 0x11, 0xe0, 0x66, 0xa5, 0xfd, 0x3c, 0x02, 0x29, 0xc9, 0x6d,
+	0x7a, 0x02, 0xd2, 0x45, 0x90, 0x3a, 0xe0, 0xf1, 0x6f, 0xb3, 0xf8, 0xe6, 0x2b, 0x00, 0x00, 0xff,
+	0xff, 0x79, 0xae, 0x21, 0x09, 0xd8, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/new_resource_creation_error.pb.go b/googleapis/ads/googleads/v0/errors/new_resource_creation_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4da2a4516e4f4a43719a664545752410cd374963
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/new_resource_creation_error.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/new_resource_creation_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible new resource creation errors.
+type NewResourceCreationErrorEnum_NewResourceCreationError int32
+
+const (
+	// Enum unspecified.
+	NewResourceCreationErrorEnum_UNSPECIFIED NewResourceCreationErrorEnum_NewResourceCreationError = 0
+	// The received error code is not known in this version.
+	NewResourceCreationErrorEnum_UNKNOWN NewResourceCreationErrorEnum_NewResourceCreationError = 1
+	// Do not set the id field while creating new resources.
+	NewResourceCreationErrorEnum_CANNOT_SET_ID_FOR_CREATE NewResourceCreationErrorEnum_NewResourceCreationError = 2
+	// Creating more than one resource with the same temp ID is not allowed.
+	NewResourceCreationErrorEnum_DUPLICATE_TEMP_IDS NewResourceCreationErrorEnum_NewResourceCreationError = 3
+	// Parent resource with specified temp ID failed validation, so no
+	// validation will be done for this child resource.
+	NewResourceCreationErrorEnum_TEMP_ID_RESOURCE_HAD_ERRORS NewResourceCreationErrorEnum_NewResourceCreationError = 4
+)
+
+var NewResourceCreationErrorEnum_NewResourceCreationError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CANNOT_SET_ID_FOR_CREATE",
+	3: "DUPLICATE_TEMP_IDS",
+	4: "TEMP_ID_RESOURCE_HAD_ERRORS",
+}
+var NewResourceCreationErrorEnum_NewResourceCreationError_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"CANNOT_SET_ID_FOR_CREATE":    2,
+	"DUPLICATE_TEMP_IDS":          3,
+	"TEMP_ID_RESOURCE_HAD_ERRORS": 4,
+}
+
+func (x NewResourceCreationErrorEnum_NewResourceCreationError) String() string {
+	return proto.EnumName(NewResourceCreationErrorEnum_NewResourceCreationError_name, int32(x))
+}
+func (NewResourceCreationErrorEnum_NewResourceCreationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_new_resource_creation_error_1adcb44311ee3769, []int{0, 0}
+}
+
+// Container for enum describing possible new resource creation errors.
+type NewResourceCreationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NewResourceCreationErrorEnum) Reset()         { *m = NewResourceCreationErrorEnum{} }
+func (m *NewResourceCreationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*NewResourceCreationErrorEnum) ProtoMessage()    {}
+func (*NewResourceCreationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_new_resource_creation_error_1adcb44311ee3769, []int{0}
+}
+func (m *NewResourceCreationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NewResourceCreationErrorEnum.Unmarshal(m, b)
+}
+func (m *NewResourceCreationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NewResourceCreationErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *NewResourceCreationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NewResourceCreationErrorEnum.Merge(dst, src)
+}
+func (m *NewResourceCreationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_NewResourceCreationErrorEnum.Size(m)
+}
+func (m *NewResourceCreationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NewResourceCreationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NewResourceCreationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*NewResourceCreationErrorEnum)(nil), "google.ads.googleads.v0.errors.NewResourceCreationErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.NewResourceCreationErrorEnum_NewResourceCreationError", NewResourceCreationErrorEnum_NewResourceCreationError_name, NewResourceCreationErrorEnum_NewResourceCreationError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/new_resource_creation_error.proto", fileDescriptor_new_resource_creation_error_1adcb44311ee3769)
+}
+
+var fileDescriptor_new_resource_creation_error_1adcb44311ee3769 = []byte{
+	// 329 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4b, 0xfb, 0x30,
+	0x1c, 0xc6, 0x7f, 0xdd, 0x7e, 0x28, 0x64, 0x07, 0x4b, 0x0e, 0x32, 0x70, 0x4e, 0xd8, 0x0b, 0x48,
+	0x0b, 0x1e, 0xbd, 0x98, 0xb5, 0xd9, 0x2c, 0x6a, 0x5a, 0xd2, 0x76, 0x82, 0x14, 0x42, 0x5d, 0x43,
+	0x19, 0x6c, 0xcd, 0x48, 0xf6, 0xe7, 0x65, 0xf8, 0x1e, 0x3c, 0x7a, 0xf2, 0x75, 0x78, 0xf5, 0x0d,
+	0x49, 0x9b, 0x6e, 0xb7, 0x79, 0xca, 0x13, 0xbe, 0x4f, 0x3e, 0x4f, 0xbe, 0x0f, 0xb8, 0x2f, 0xa5,
+	0x2c, 0x97, 0xc2, 0xc9, 0x0b, 0xed, 0x18, 0x59, 0xab, 0x9d, 0xeb, 0x08, 0xa5, 0xa4, 0xd2, 0x4e,
+	0x25, 0xf6, 0x5c, 0x09, 0x2d, 0xb7, 0x6a, 0x2e, 0xf8, 0x5c, 0x89, 0x7c, 0xb3, 0x90, 0x15, 0x6f,
+	0x86, 0x68, 0xad, 0xe4, 0x46, 0xc2, 0xa1, 0x79, 0x86, 0xf2, 0x42, 0xa3, 0x23, 0x01, 0xed, 0x5c,
+	0x64, 0x08, 0xa3, 0x2f, 0x0b, 0x0c, 0xa8, 0xd8, 0xb3, 0x16, 0xe2, 0xb5, 0x0c, 0x52, 0x4f, 0x49,
+	0xb5, 0x5d, 0x8d, 0xde, 0x2d, 0xd0, 0x3f, 0x65, 0x80, 0x17, 0xa0, 0x97, 0xd2, 0x38, 0x22, 0x5e,
+	0x30, 0x09, 0x88, 0x6f, 0xff, 0x83, 0x3d, 0x70, 0x9e, 0xd2, 0x47, 0x1a, 0xbe, 0x50, 0xdb, 0x82,
+	0x03, 0xd0, 0xf7, 0x30, 0xa5, 0x61, 0xc2, 0x63, 0x92, 0xf0, 0xc0, 0xe7, 0x93, 0x90, 0x71, 0x8f,
+	0x11, 0x9c, 0x10, 0xbb, 0x03, 0x2f, 0x01, 0xf4, 0xd3, 0xe8, 0x29, 0xf0, 0x70, 0x42, 0x78, 0x42,
+	0x9e, 0x23, 0x1e, 0xf8, 0xb1, 0xdd, 0x85, 0x37, 0xe0, 0xaa, 0xbd, 0x71, 0x46, 0xe2, 0x30, 0x65,
+	0x1e, 0xe1, 0x0f, 0xd8, 0xe7, 0x84, 0xb1, 0x90, 0xc5, 0xf6, 0xff, 0xf1, 0x8f, 0x05, 0x46, 0x73,
+	0xb9, 0x42, 0x7f, 0x6f, 0x36, 0xbe, 0x3e, 0xf5, 0xeb, 0xa8, 0x2e, 0x26, 0xb2, 0x5e, 0xfd, 0x16,
+	0x50, 0xca, 0x65, 0x5e, 0x95, 0x48, 0xaa, 0xd2, 0x29, 0x45, 0xd5, 0xd4, 0x76, 0x28, 0x7b, 0xbd,
+	0xd0, 0xa7, 0xba, 0xbf, 0x33, 0xc7, 0x47, 0xa7, 0x3b, 0xc5, 0xf8, 0xb3, 0x33, 0x9c, 0x1a, 0x18,
+	0x2e, 0x34, 0x32, 0xb2, 0x56, 0x33, 0x17, 0x35, 0x91, 0xfa, 0xfb, 0x60, 0xc8, 0x70, 0xa1, 0xb3,
+	0xa3, 0x21, 0x9b, 0xb9, 0x99, 0x31, 0xbc, 0x9d, 0x35, 0xc1, 0xb7, 0xbf, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0x60, 0xb1, 0xef, 0x4e, 0xf3, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/not_empty_error.pb.go b/googleapis/ads/googleads/v0/errors/not_empty_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..372a330adf75b0fae13a39701b9a8fe1c9400143
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/not_empty_error.pb.go
@@ -0,0 +1,109 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/not_empty_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible not empty errors.
+type NotEmptyErrorEnum_NotEmptyError int32
+
+const (
+	// Enum unspecified.
+	NotEmptyErrorEnum_UNSPECIFIED NotEmptyErrorEnum_NotEmptyError = 0
+	// The received error code is not known in this version.
+	NotEmptyErrorEnum_UNKNOWN NotEmptyErrorEnum_NotEmptyError = 1
+	// Empty list.
+	NotEmptyErrorEnum_EMPTY_LIST NotEmptyErrorEnum_NotEmptyError = 2
+)
+
+var NotEmptyErrorEnum_NotEmptyError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "EMPTY_LIST",
+}
+var NotEmptyErrorEnum_NotEmptyError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EMPTY_LIST":  2,
+}
+
+func (x NotEmptyErrorEnum_NotEmptyError) String() string {
+	return proto.EnumName(NotEmptyErrorEnum_NotEmptyError_name, int32(x))
+}
+func (NotEmptyErrorEnum_NotEmptyError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_not_empty_error_68be394d8b4cf555, []int{0, 0}
+}
+
+// Container for enum describing possible not empty errors.
+type NotEmptyErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NotEmptyErrorEnum) Reset()         { *m = NotEmptyErrorEnum{} }
+func (m *NotEmptyErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*NotEmptyErrorEnum) ProtoMessage()    {}
+func (*NotEmptyErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_not_empty_error_68be394d8b4cf555, []int{0}
+}
+func (m *NotEmptyErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NotEmptyErrorEnum.Unmarshal(m, b)
+}
+func (m *NotEmptyErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NotEmptyErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *NotEmptyErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NotEmptyErrorEnum.Merge(dst, src)
+}
+func (m *NotEmptyErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_NotEmptyErrorEnum.Size(m)
+}
+func (m *NotEmptyErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NotEmptyErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NotEmptyErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*NotEmptyErrorEnum)(nil), "google.ads.googleads.v0.errors.NotEmptyErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.NotEmptyErrorEnum_NotEmptyError", NotEmptyErrorEnum_NotEmptyError_name, NotEmptyErrorEnum_NotEmptyError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/not_empty_error.proto", fileDescriptor_not_empty_error_68be394d8b4cf555)
+}
+
+var fileDescriptor_not_empty_error_68be394d8b4cf555 = []byte{
+	// 253 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xbc, 0xfc, 0x92, 0xf8, 0xd4, 0xdc, 0x82, 0x92, 0xca, 0x78, 0xb0,
+	0x80, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x1c, 0x44, 0xa9, 0x5e, 0x62, 0x4a, 0xb1, 0x1e,
+	0x5c, 0x97, 0x5e, 0x99, 0x81, 0x1e, 0x44, 0x97, 0x52, 0x10, 0x97, 0xa0, 0x5f, 0x7e, 0x89, 0x2b,
+	0x48, 0x9f, 0x2b, 0x48, 0xc4, 0x35, 0xaf, 0x34, 0x57, 0xc9, 0x96, 0x8b, 0x17, 0x45, 0x50, 0x88,
+	0x9f, 0x8b, 0x3b, 0xd4, 0x2f, 0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3, 0xd5, 0x45, 0x80, 0x41,
+	0x88, 0x9b, 0x8b, 0x3d, 0xd4, 0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80, 0x51, 0x88, 0x8f, 0x8b,
+	0xcb, 0xd5, 0x37, 0x20, 0x24, 0x32, 0xde, 0xc7, 0x33, 0x38, 0x44, 0x80, 0xc9, 0xe9, 0x04, 0x23,
+	0x97, 0x52, 0x72, 0x7e, 0xae, 0x1e, 0x7e, 0xab, 0x9d, 0x84, 0x50, 0xec, 0x08, 0x00, 0x39, 0x37,
+	0x80, 0x31, 0xca, 0x05, 0xaa, 0x2b, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d,
+	0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x19, 0x98, 0xb7, 0x0b, 0x32, 0x8b, 0x71, 0x85, 0x82, 0x35, 0x84,
+	0x5a, 0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x98, 0x63, 0x4a, 0xb1,
+	0x1e, 0x84, 0x09, 0x62, 0x85, 0x19, 0xe8, 0x81, 0xad, 0x2c, 0x3e, 0x05, 0x53, 0x10, 0xe3, 0x98,
+	0x52, 0x1c, 0x03, 0x57, 0x10, 0x13, 0x66, 0x10, 0x03, 0x51, 0x90, 0xc4, 0x06, 0xb6, 0xd8, 0x18,
+	0x10, 0x00, 0x00, 0xff, 0xff, 0x91, 0x69, 0x2e, 0x63, 0x7d, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/null_error.pb.go b/googleapis/ads/googleads/v0/errors/null_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ff58164bd58696d7e60e30d5fe89fb1988e485fe
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/null_error.pb.go
@@ -0,0 +1,109 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/null_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible null errors.
+type NullErrorEnum_NullError int32
+
+const (
+	// Enum unspecified.
+	NullErrorEnum_UNSPECIFIED NullErrorEnum_NullError = 0
+	// The received error code is not known in this version.
+	NullErrorEnum_UNKNOWN NullErrorEnum_NullError = 1
+	// Specified list/container must not contain any null elements
+	NullErrorEnum_NULL_CONTENT NullErrorEnum_NullError = 2
+)
+
+var NullErrorEnum_NullError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "NULL_CONTENT",
+}
+var NullErrorEnum_NullError_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"UNKNOWN":      1,
+	"NULL_CONTENT": 2,
+}
+
+func (x NullErrorEnum_NullError) String() string {
+	return proto.EnumName(NullErrorEnum_NullError_name, int32(x))
+}
+func (NullErrorEnum_NullError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_null_error_fd3a1ae5b7a6b83e, []int{0, 0}
+}
+
+// Container for enum describing possible null errors.
+type NullErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NullErrorEnum) Reset()         { *m = NullErrorEnum{} }
+func (m *NullErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*NullErrorEnum) ProtoMessage()    {}
+func (*NullErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_null_error_fd3a1ae5b7a6b83e, []int{0}
+}
+func (m *NullErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NullErrorEnum.Unmarshal(m, b)
+}
+func (m *NullErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NullErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *NullErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NullErrorEnum.Merge(dst, src)
+}
+func (m *NullErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_NullErrorEnum.Size(m)
+}
+func (m *NullErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_NullErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NullErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*NullErrorEnum)(nil), "google.ads.googleads.v0.errors.NullErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.NullErrorEnum_NullError", NullErrorEnum_NullError_name, NullErrorEnum_NullError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/null_error.proto", fileDescriptor_null_error_fd3a1ae5b7a6b83e)
+}
+
+var fileDescriptor_null_error_fd3a1ae5b7a6b83e = []byte{
+	// 247 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0x86, 0x32, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2, 0xa2,
+	0xfc, 0xa2, 0x62, 0xfd, 0xbc, 0xd2, 0x9c, 0x9c, 0x78, 0x30, 0x5b, 0xaf, 0xa0, 0x28, 0xbf, 0x24,
+	0x5f, 0x48, 0x0e, 0xa2, 0x4a, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x41, 0xaf, 0xcc, 0x40, 0x0f,
+	0xa2, 0x41, 0xc9, 0x87, 0x8b, 0xd7, 0xaf, 0x34, 0x27, 0xc7, 0x15, 0xc4, 0x73, 0xcd, 0x2b, 0xcd,
+	0x55, 0xb2, 0xe6, 0xe2, 0x84, 0x0b, 0x08, 0xf1, 0x73, 0x71, 0x87, 0xfa, 0x05, 0x07, 0xb8, 0x3a,
+	0x7b, 0xba, 0x79, 0xba, 0xba, 0x08, 0x30, 0x08, 0x71, 0x73, 0xb1, 0x87, 0xfa, 0x79, 0xfb, 0xf9,
+	0x87, 0xfb, 0x09, 0x30, 0x0a, 0x09, 0x70, 0xf1, 0xf8, 0x85, 0xfa, 0xf8, 0xc4, 0x3b, 0xfb, 0xfb,
+	0x85, 0xb8, 0xfa, 0x85, 0x08, 0x30, 0x39, 0x1d, 0x61, 0xe4, 0x52, 0x4a, 0xce, 0xcf, 0xd5, 0xc3,
+	0x6f, 0xa9, 0x13, 0x1f, 0xdc, 0x86, 0x00, 0x90, 0x23, 0x03, 0x18, 0xa3, 0x5c, 0xa0, 0x3a, 0xd2,
+	0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x5e, 0x80,
+	0xf9, 0xb3, 0x20, 0xb3, 0x18, 0x97, 0xb7, 0xad, 0x21, 0xd4, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7,
+	0x55, 0x4c, 0x72, 0xee, 0x10, 0xc3, 0x1c, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40,
+	0x0f, 0x6c, 0x65, 0xf1, 0x29, 0x98, 0x82, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x82, 0x98, 0x30,
+	0x83, 0x18, 0x88, 0x82, 0x24, 0x36, 0xb0, 0xc5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe,
+	0xf4, 0xdb, 0xb6, 0x6e, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/operation_access_denied_error.pb.go b/googleapis/ads/googleads/v0/errors/operation_access_denied_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c3bd18c70e695a3dce87492b93136fe5d9649a7f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/operation_access_denied_error.pb.go
@@ -0,0 +1,155 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/operation_access_denied_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible operation access denied errors.
+type OperationAccessDeniedErrorEnum_OperationAccessDeniedError int32
+
+const (
+	// Enum unspecified.
+	OperationAccessDeniedErrorEnum_UNSPECIFIED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 0
+	// The received error code is not known in this version.
+	OperationAccessDeniedErrorEnum_UNKNOWN OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 1
+	// Unauthorized invocation of a service's method (get, mutate, etc.)
+	OperationAccessDeniedErrorEnum_ACTION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 2
+	// Unauthorized CREATE operation in invoking a service's mutate method.
+	OperationAccessDeniedErrorEnum_CREATE_OPERATION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 3
+	// Unauthorized REMOVE operation in invoking a service's mutate method.
+	OperationAccessDeniedErrorEnum_REMOVE_OPERATION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 4
+	// Unauthorized UPDATE operation in invoking a service's mutate method.
+	OperationAccessDeniedErrorEnum_UPDATE_OPERATION_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 5
+	// A mutate action is not allowed on this campaign, from this client.
+	OperationAccessDeniedErrorEnum_MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 6
+	// This operation is not permitted on this campaign type
+	OperationAccessDeniedErrorEnum_OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 7
+	// A CREATE operation may not set status to REMOVED.
+	OperationAccessDeniedErrorEnum_CREATE_AS_REMOVED_NOT_PERMITTED OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 8
+	// This operation is not allowed because the campaign or adgroup is removed.
+	OperationAccessDeniedErrorEnum_OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 9
+	// This operation is not permitted on this ad group type.
+	OperationAccessDeniedErrorEnum_OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 10
+	// The mutate is not allowed for this customer.
+	OperationAccessDeniedErrorEnum_MUTATE_NOT_PERMITTED_FOR_CUSTOMER OperationAccessDeniedErrorEnum_OperationAccessDeniedError = 11
+)
+
+var OperationAccessDeniedErrorEnum_OperationAccessDeniedError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "ACTION_NOT_PERMITTED",
+	3:  "CREATE_OPERATION_NOT_PERMITTED",
+	4:  "REMOVE_OPERATION_NOT_PERMITTED",
+	5:  "UPDATE_OPERATION_NOT_PERMITTED",
+	6:  "MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT",
+	7:  "OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE",
+	8:  "CREATE_AS_REMOVED_NOT_PERMITTED",
+	9:  "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE",
+	10: "OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE",
+	11: "MUTATE_NOT_PERMITTED_FOR_CUSTOMER",
+}
+var OperationAccessDeniedErrorEnum_OperationAccessDeniedError_value = map[string]int32{
+	"UNSPECIFIED":                                  0,
+	"UNKNOWN":                                      1,
+	"ACTION_NOT_PERMITTED":                         2,
+	"CREATE_OPERATION_NOT_PERMITTED":               3,
+	"REMOVE_OPERATION_NOT_PERMITTED":               4,
+	"UPDATE_OPERATION_NOT_PERMITTED":               5,
+	"MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT":       6,
+	"OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE":    7,
+	"CREATE_AS_REMOVED_NOT_PERMITTED":              8,
+	"OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE": 9,
+	"OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE":    10,
+	"MUTATE_NOT_PERMITTED_FOR_CUSTOMER":            11,
+}
+
+func (x OperationAccessDeniedErrorEnum_OperationAccessDeniedError) String() string {
+	return proto.EnumName(OperationAccessDeniedErrorEnum_OperationAccessDeniedError_name, int32(x))
+}
+func (OperationAccessDeniedErrorEnum_OperationAccessDeniedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_operation_access_denied_error_07fb74df990e60d7, []int{0, 0}
+}
+
+// Container for enum describing possible operation access denied errors.
+type OperationAccessDeniedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OperationAccessDeniedErrorEnum) Reset()         { *m = OperationAccessDeniedErrorEnum{} }
+func (m *OperationAccessDeniedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*OperationAccessDeniedErrorEnum) ProtoMessage()    {}
+func (*OperationAccessDeniedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_operation_access_denied_error_07fb74df990e60d7, []int{0}
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperationAccessDeniedErrorEnum.Unmarshal(m, b)
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperationAccessDeniedErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *OperationAccessDeniedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperationAccessDeniedErrorEnum.Merge(dst, src)
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_OperationAccessDeniedErrorEnum.Size(m)
+}
+func (m *OperationAccessDeniedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperationAccessDeniedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperationAccessDeniedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*OperationAccessDeniedErrorEnum)(nil), "google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum_OperationAccessDeniedError", OperationAccessDeniedErrorEnum_OperationAccessDeniedError_name, OperationAccessDeniedErrorEnum_OperationAccessDeniedError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/operation_access_denied_error.proto", fileDescriptor_operation_access_denied_error_07fb74df990e60d7)
+}
+
+var fileDescriptor_operation_access_denied_error_07fb74df990e60d7 = []byte{
+	// 413 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x8a, 0xd4, 0x30,
+	0x18, 0xc7, 0x9d, 0x19, 0xdd, 0xd5, 0xcc, 0xc1, 0x12, 0x3c, 0x88, 0x87, 0x2e, 0x56, 0x14, 0x14,
+	0x4d, 0x0b, 0x1e, 0x3d, 0x65, 0xda, 0x6c, 0x29, 0xda, 0x24, 0xa4, 0xe9, 0x88, 0x52, 0x08, 0x75,
+	0x5a, 0xca, 0xc0, 0x6e, 0x33, 0x34, 0xeb, 0x3e, 0x90, 0x47, 0x9f, 0x44, 0xbc, 0xfb, 0x14, 0xbe,
+	0x84, 0xb4, 0x99, 0xce, 0x41, 0xa6, 0xb3, 0xa7, 0x7e, 0x90, 0x5f, 0x7e, 0xdf, 0x3f, 0xf4, 0x0f,
+	0x56, 0x8d, 0xd6, 0xcd, 0x55, 0xed, 0x97, 0x95, 0xf1, 0xed, 0xd8, 0x4f, 0xb7, 0x81, 0x5f, 0x77,
+	0x9d, 0xee, 0x8c, 0xaf, 0x77, 0x75, 0x57, 0xde, 0x6c, 0x75, 0xab, 0xca, 0xcd, 0xa6, 0x36, 0x46,
+	0x55, 0x75, 0xbb, 0xad, 0x2b, 0x35, 0x1c, 0xa3, 0x5d, 0xa7, 0x6f, 0x34, 0x74, 0xed, 0x45, 0x54,
+	0x56, 0x06, 0x1d, 0x1c, 0xe8, 0x36, 0x40, 0xd6, 0xe1, 0xfd, 0x5d, 0x00, 0x97, 0x8d, 0x1e, 0x3c,
+	0x68, 0xa2, 0xc1, 0x42, 0xfa, 0x73, 0xd2, 0x7e, 0xbf, 0xf6, 0x7e, 0x2d, 0xc0, 0xb3, 0x69, 0x04,
+	0x3e, 0x06, 0xcb, 0x9c, 0x66, 0x9c, 0x84, 0xc9, 0x65, 0x42, 0x22, 0xe7, 0x1e, 0x5c, 0x82, 0xf3,
+	0x9c, 0x7e, 0xa4, 0xec, 0x33, 0x75, 0x66, 0xf0, 0x29, 0x78, 0x82, 0x43, 0x99, 0x30, 0xaa, 0x28,
+	0x93, 0x8a, 0x13, 0x91, 0x26, 0x52, 0x92, 0xc8, 0x99, 0x43, 0x0f, 0xb8, 0xa1, 0x20, 0x58, 0x12,
+	0xc5, 0x38, 0x11, 0xf8, 0x08, 0xb3, 0xe8, 0x19, 0x41, 0x52, 0xb6, 0x9e, 0x66, 0xee, 0xf7, 0x4c,
+	0xce, 0xa3, 0x53, 0x9e, 0x07, 0xf0, 0x0d, 0x78, 0x95, 0xe6, 0xb2, 0x67, 0x8e, 0x85, 0x51, 0x97,
+	0x4c, 0xa8, 0xf0, 0x53, 0x42, 0xa8, 0x74, 0xce, 0xe0, 0x3b, 0xf0, 0x7a, 0x42, 0x64, 0x39, 0x9c,
+	0x72, 0x9c, 0xc4, 0x54, 0xc9, 0x2f, 0x9c, 0x38, 0xe7, 0xf0, 0x05, 0xb8, 0xd8, 0x3f, 0x03, 0x67,
+	0xca, 0x86, 0x8d, 0xfe, 0xdb, 0xff, 0x10, 0x06, 0xe0, 0xed, 0x29, 0xe7, 0x78, 0x4d, 0x90, 0x8c,
+	0xe5, 0x22, 0x24, 0xce, 0xa3, 0xbb, 0x52, 0xe0, 0x48, 0xc5, 0x82, 0xe5, 0xdc, 0xa6, 0x00, 0xf0,
+	0x25, 0x78, 0xbe, 0x7f, 0xe0, 0x91, 0xc4, 0x79, 0x26, 0x59, 0x4a, 0x84, 0xb3, 0x5c, 0xfd, 0x99,
+	0x01, 0x6f, 0xa3, 0xaf, 0xd1, 0xe9, 0x52, 0xac, 0x2e, 0xa6, 0x7f, 0x37, 0xef, 0x5b, 0xc5, 0x67,
+	0x5f, 0xa3, 0xbd, 0xa2, 0xd1, 0x57, 0x65, 0xdb, 0x20, 0xdd, 0x35, 0x7e, 0x53, 0xb7, 0x43, 0xe7,
+	0xc6, 0xae, 0xee, 0xb6, 0x66, 0xaa, 0xba, 0x1f, 0xec, 0xe7, 0xc7, 0x7c, 0x11, 0x63, 0xfc, 0x73,
+	0xee, 0xc6, 0x56, 0x86, 0x2b, 0x83, 0xec, 0xd8, 0x4f, 0xeb, 0x00, 0x0d, 0x2b, 0xcd, 0xef, 0x11,
+	0x28, 0x70, 0x65, 0x8a, 0x03, 0x50, 0xac, 0x83, 0xc2, 0x02, 0xdf, 0xce, 0x86, 0xc5, 0xef, 0xff,
+	0x05, 0x00, 0x00, 0xff, 0xff, 0x14, 0xb6, 0x57, 0x19, 0x32, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/operator_error.pb.go b/googleapis/ads/googleads/v0/errors/operator_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..47a7c081625c034694c94fd35eb666d7c605e35b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/operator_error.pb.go
@@ -0,0 +1,110 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/operator_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible operator errors.
+type OperatorErrorEnum_OperatorError int32
+
+const (
+	// Enum unspecified.
+	OperatorErrorEnum_UNSPECIFIED OperatorErrorEnum_OperatorError = 0
+	// The received error code is not known in this version.
+	OperatorErrorEnum_UNKNOWN OperatorErrorEnum_OperatorError = 1
+	// Operator not supported.
+	OperatorErrorEnum_OPERATOR_NOT_SUPPORTED OperatorErrorEnum_OperatorError = 2
+)
+
+var OperatorErrorEnum_OperatorError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "OPERATOR_NOT_SUPPORTED",
+}
+var OperatorErrorEnum_OperatorError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"OPERATOR_NOT_SUPPORTED": 2,
+}
+
+func (x OperatorErrorEnum_OperatorError) String() string {
+	return proto.EnumName(OperatorErrorEnum_OperatorError_name, int32(x))
+}
+func (OperatorErrorEnum_OperatorError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_operator_error_e214472ec4870bc9, []int{0, 0}
+}
+
+// Container for enum describing possible operator errors.
+type OperatorErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OperatorErrorEnum) Reset()         { *m = OperatorErrorEnum{} }
+func (m *OperatorErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*OperatorErrorEnum) ProtoMessage()    {}
+func (*OperatorErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_operator_error_e214472ec4870bc9, []int{0}
+}
+func (m *OperatorErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperatorErrorEnum.Unmarshal(m, b)
+}
+func (m *OperatorErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperatorErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *OperatorErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperatorErrorEnum.Merge(dst, src)
+}
+func (m *OperatorErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_OperatorErrorEnum.Size(m)
+}
+func (m *OperatorErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperatorErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperatorErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*OperatorErrorEnum)(nil), "google.ads.googleads.v0.errors.OperatorErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.OperatorErrorEnum_OperatorError", OperatorErrorEnum_OperatorError_name, OperatorErrorEnum_OperatorError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/operator_error.proto", fileDescriptor_operator_error_e214472ec4870bc9)
+}
+
+var fileDescriptor_operator_error_e214472ec4870bc9 = []byte{
+	// 261 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xfc, 0x82, 0xd4, 0xa2, 0xc4, 0x92, 0xfc, 0xa2, 0x78, 0x30, 0x5f,
+	0xaf, 0xa0, 0x28, 0xbf, 0x24, 0x5f, 0x48, 0x0e, 0xa2, 0x52, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae,
+	0x49, 0xaf, 0xcc, 0x40, 0x0f, 0xa2, 0x49, 0x29, 0x8e, 0x4b, 0xd0, 0x1f, 0xaa, 0xcf, 0x15, 0x24,
+	0xe2, 0x9a, 0x57, 0x9a, 0xab, 0xe4, 0xc9, 0xc5, 0x8b, 0x22, 0x28, 0xc4, 0xcf, 0xc5, 0x1d, 0xea,
+	0x17, 0x1c, 0xe0, 0xea, 0xec, 0xe9, 0xe6, 0xe9, 0xea, 0x22, 0xc0, 0x20, 0xc4, 0xcd, 0xc5, 0x1e,
+	0xea, 0xe7, 0xed, 0xe7, 0x1f, 0xee, 0x27, 0xc0, 0x28, 0x24, 0xc5, 0x25, 0xe6, 0x1f, 0xe0, 0x1a,
+	0xe4, 0x18, 0xe2, 0x1f, 0x14, 0xef, 0xe7, 0x1f, 0x12, 0x1f, 0x1c, 0x1a, 0x10, 0xe0, 0x1f, 0x14,
+	0xe2, 0xea, 0x22, 0xc0, 0xe4, 0x74, 0x82, 0x91, 0x4b, 0x29, 0x39, 0x3f, 0x57, 0x0f, 0xbf, 0x33,
+	0x9c, 0x84, 0x50, 0xec, 0x0b, 0x00, 0x39, 0x3d, 0x80, 0x31, 0xca, 0x05, 0xaa, 0x2b, 0x3d, 0x3f,
+	0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x31, 0x58, 0x08,
+	0x14, 0x64, 0x16, 0xe3, 0x0a, 0x10, 0x6b, 0x08, 0xb5, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15,
+	0x93, 0x9c, 0x3b, 0xc4, 0x30, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x03,
+	0x5b, 0x59, 0x7c, 0x0a, 0xa6, 0x20, 0xc6, 0x31, 0xa5, 0x38, 0x06, 0xae, 0x20, 0x26, 0xcc, 0x20,
+	0x06, 0xa2, 0x20, 0x89, 0x0d, 0x6c, 0xb1, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xea, 0x71, 0xee,
+	0x87, 0x88, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/policy_finding_error.pb.go b/googleapis/ads/googleads/v0/errors/policy_finding_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b1abc050227dde366e64f4a1f7b5eebc806b9d7e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/policy_finding_error.pb.go
@@ -0,0 +1,116 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/policy_finding_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible policy finding errors.
+type PolicyFindingErrorEnum_PolicyFindingError int32
+
+const (
+	// Enum unspecified.
+	PolicyFindingErrorEnum_UNSPECIFIED PolicyFindingErrorEnum_PolicyFindingError = 0
+	// The received error code is not known in this version.
+	PolicyFindingErrorEnum_UNKNOWN PolicyFindingErrorEnum_PolicyFindingError = 1
+	// The resource has been disapproved since the policy summary includes
+	// policy topics of type PROHIBITED.
+	PolicyFindingErrorEnum_POLICY_FINDING PolicyFindingErrorEnum_PolicyFindingError = 2
+	// The given policy topic does not exist.
+	PolicyFindingErrorEnum_POLICY_TOPIC_NOT_FOUND PolicyFindingErrorEnum_PolicyFindingError = 3
+)
+
+var PolicyFindingErrorEnum_PolicyFindingError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "POLICY_FINDING",
+	3: "POLICY_TOPIC_NOT_FOUND",
+}
+var PolicyFindingErrorEnum_PolicyFindingError_value = map[string]int32{
+	"UNSPECIFIED":            0,
+	"UNKNOWN":                1,
+	"POLICY_FINDING":         2,
+	"POLICY_TOPIC_NOT_FOUND": 3,
+}
+
+func (x PolicyFindingErrorEnum_PolicyFindingError) String() string {
+	return proto.EnumName(PolicyFindingErrorEnum_PolicyFindingError_name, int32(x))
+}
+func (PolicyFindingErrorEnum_PolicyFindingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_policy_finding_error_85bd0bfad47f6f0e, []int{0, 0}
+}
+
+// Container for enum describing possible policy finding errors.
+type PolicyFindingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PolicyFindingErrorEnum) Reset()         { *m = PolicyFindingErrorEnum{} }
+func (m *PolicyFindingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*PolicyFindingErrorEnum) ProtoMessage()    {}
+func (*PolicyFindingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_policy_finding_error_85bd0bfad47f6f0e, []int{0}
+}
+func (m *PolicyFindingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PolicyFindingErrorEnum.Unmarshal(m, b)
+}
+func (m *PolicyFindingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PolicyFindingErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *PolicyFindingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PolicyFindingErrorEnum.Merge(dst, src)
+}
+func (m *PolicyFindingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_PolicyFindingErrorEnum.Size(m)
+}
+func (m *PolicyFindingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_PolicyFindingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PolicyFindingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*PolicyFindingErrorEnum)(nil), "google.ads.googleads.v0.errors.PolicyFindingErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.PolicyFindingErrorEnum_PolicyFindingError", PolicyFindingErrorEnum_PolicyFindingError_name, PolicyFindingErrorEnum_PolicyFindingError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/policy_finding_error.proto", fileDescriptor_policy_finding_error_85bd0bfad47f6f0e)
+}
+
+var fileDescriptor_policy_finding_error_85bd0bfad47f6f0e = []byte{
+	// 285 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4d, 0x4b, 0xc3, 0x30,
+	0x1c, 0xc6, 0x5d, 0x07, 0x0a, 0x19, 0x68, 0xc9, 0x61, 0x82, 0x87, 0x1d, 0xfa, 0x01, 0xd2, 0x82,
+	0x27, 0xf1, 0xd4, 0xf5, 0x8d, 0xa0, 0xa4, 0x01, 0xd7, 0x89, 0x52, 0x28, 0xdd, 0x52, 0x43, 0xa1,
+	0x4b, 0x4a, 0xa2, 0x03, 0xc1, 0x4f, 0xe3, 0xd1, 0x8f, 0x22, 0xf8, 0x9d, 0xa4, 0xc9, 0xb6, 0xcb,
+	0xd0, 0x53, 0x1e, 0x9e, 0x3c, 0xbf, 0xff, 0x1b, 0xb8, 0xe1, 0x52, 0xf2, 0xae, 0xf1, 0x6b, 0xa6,
+	0x7d, 0x2b, 0x07, 0xb5, 0x0d, 0xfc, 0x46, 0x29, 0xa9, 0xb4, 0xdf, 0xcb, 0xae, 0x5d, 0xbf, 0x57,
+	0x2f, 0xad, 0x60, 0xad, 0xe0, 0x95, 0x71, 0x51, 0xaf, 0xe4, 0xab, 0x84, 0x33, 0x9b, 0x47, 0x35,
+	0xd3, 0xe8, 0x80, 0xa2, 0x6d, 0x80, 0x2c, 0xea, 0x7d, 0x80, 0x29, 0x35, 0x74, 0x6a, 0xe1, 0x64,
+	0xb0, 0x13, 0xf1, 0xb6, 0xf1, 0x56, 0x00, 0x1e, 0xff, 0xc0, 0x0b, 0x30, 0x29, 0xc8, 0x03, 0x4d,
+	0x22, 0x9c, 0xe2, 0x24, 0x76, 0x4f, 0xe0, 0x04, 0x9c, 0x15, 0xe4, 0x8e, 0xe4, 0x8f, 0xc4, 0x1d,
+	0x41, 0x08, 0xce, 0x69, 0x7e, 0x8f, 0xa3, 0xa7, 0x2a, 0xc5, 0x24, 0xc6, 0x24, 0x73, 0x1d, 0x78,
+	0x05, 0xa6, 0x3b, 0x6f, 0x91, 0x53, 0x1c, 0x55, 0x24, 0x5f, 0x54, 0x69, 0x5e, 0x90, 0xd8, 0x1d,
+	0xcf, 0x7f, 0x46, 0xc0, 0x5b, 0xcb, 0x0d, 0xfa, 0x7f, 0xc8, 0xf9, 0xe5, 0xf1, 0x20, 0x74, 0xd8,
+	0x8e, 0x8e, 0x9e, 0xe3, 0x1d, 0xca, 0x65, 0x57, 0x0b, 0x8e, 0xa4, 0xe2, 0x3e, 0x6f, 0x84, 0xd9,
+	0x7d, 0x7f, 0xaa, 0xbe, 0xd5, 0x7f, 0x5d, 0xee, 0xd6, 0x3e, 0x9f, 0xce, 0x38, 0x0b, 0xc3, 0x2f,
+	0x67, 0x96, 0xd9, 0x62, 0x21, 0xd3, 0xc8, 0xca, 0x41, 0x2d, 0x03, 0x64, 0x5a, 0xea, 0xef, 0x7d,
+	0xa0, 0x0c, 0x99, 0x2e, 0x0f, 0x81, 0x72, 0x19, 0x94, 0x36, 0xb0, 0x3a, 0x35, 0x8d, 0xaf, 0x7f,
+	0x03, 0x00, 0x00, 0xff, 0xff, 0x25, 0x19, 0x48, 0x61, 0xb1, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/query_error.pb.go b/googleapis/ads/googleads/v0/errors/query_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4ef6ff492b6a69cd9d281107cb460950cf14d09e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/query_error.pb.go
@@ -0,0 +1,353 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/query_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible query errors.
+type QueryErrorEnum_QueryError int32
+
+const (
+	// Name unspecified.
+	QueryErrorEnum_UNSPECIFIED QueryErrorEnum_QueryError = 0
+	// The received error code is not known in this version.
+	QueryErrorEnum_UNKNOWN QueryErrorEnum_QueryError = 1
+	// Returned if all other query error reasons are not applicable.
+	QueryErrorEnum_QUERY_ERROR QueryErrorEnum_QueryError = 50
+	// A condition used in the query references an invalid enum constant.
+	QueryErrorEnum_BAD_ENUM_CONSTANT QueryErrorEnum_QueryError = 18
+	// Query contains an invalid escape sequence.
+	QueryErrorEnum_BAD_ESCAPE_SEQUENCE QueryErrorEnum_QueryError = 7
+	// Field name is invalid.
+	QueryErrorEnum_BAD_FIELD_NAME QueryErrorEnum_QueryError = 12
+	// Limit value is invalid (i.e. not a number)
+	QueryErrorEnum_BAD_LIMIT_VALUE QueryErrorEnum_QueryError = 15
+	// Encountered number can not be parsed.
+	QueryErrorEnum_BAD_NUMBER QueryErrorEnum_QueryError = 5
+	// Invalid operator encountered.
+	QueryErrorEnum_BAD_OPERATOR QueryErrorEnum_QueryError = 3
+	// Invalid resource type was specified in the FROM clause.
+	QueryErrorEnum_BAD_RESOURCE_TYPE_IN_FROM_CLAUSE QueryErrorEnum_QueryError = 45
+	// Non-ASCII symbol encountered outside of strings.
+	QueryErrorEnum_BAD_SYMBOL QueryErrorEnum_QueryError = 2
+	// Value is invalid.
+	QueryErrorEnum_BAD_VALUE QueryErrorEnum_QueryError = 4
+	// Date filters fail to restrict date to a range smaller than 31 days.
+	// Applicable if the query is segmented by date.
+	QueryErrorEnum_DATE_RANGE_TOO_WIDE QueryErrorEnum_QueryError = 36
+	// Expected AND between values with BETWEEN operator.
+	QueryErrorEnum_EXPECTED_AND QueryErrorEnum_QueryError = 30
+	// Expecting ORDER BY to have BY.
+	QueryErrorEnum_EXPECTED_BY QueryErrorEnum_QueryError = 14
+	// There was no dimension field selected.
+	QueryErrorEnum_EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 37
+	// Missing filters on date related fields.
+	QueryErrorEnum_EXPECTED_FILTERS_ON_DATE_RANGE QueryErrorEnum_QueryError = 55
+	// Missing FROM clause.
+	QueryErrorEnum_EXPECTED_FROM QueryErrorEnum_QueryError = 44
+	// The operator used in the conditions requires the value to be a list.
+	QueryErrorEnum_EXPECTED_LIST QueryErrorEnum_QueryError = 41
+	// Fields used in WHERE or ORDER BY clauses are missing from the SELECT
+	// clause.
+	QueryErrorEnum_EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 16
+	// SELECT is missing at the beginning of query.
+	QueryErrorEnum_EXPECTED_SELECT QueryErrorEnum_QueryError = 13
+	// A list was passed as a value to a condition whose operator expects a
+	// single value.
+	QueryErrorEnum_EXPECTED_SINGLE_VALUE QueryErrorEnum_QueryError = 42
+	// Missing one or both values with BETWEEN operator.
+	QueryErrorEnum_EXPECTED_VALUE_WITH_BETWEEN_OPERATOR QueryErrorEnum_QueryError = 29
+	// Invalid date format. Expected 'YYYY-MM-DD'.
+	QueryErrorEnum_INVALID_DATE_FORMAT QueryErrorEnum_QueryError = 38
+	// Value passed was not a string when it should have been. I.e., it was a
+	// number or unquoted literal.
+	QueryErrorEnum_INVALID_STRING_VALUE QueryErrorEnum_QueryError = 57
+	// A String value passed to the BETWEEN operator does not parse as a date.
+	QueryErrorEnum_INVALID_VALUE_WITH_BETWEEN_OPERATOR QueryErrorEnum_QueryError = 26
+	// The value passed to the DURING operator is not a Date range literal
+	QueryErrorEnum_INVALID_VALUE_WITH_DURING_OPERATOR QueryErrorEnum_QueryError = 22
+	// A non-string value was passed to the LIKE operator.
+	QueryErrorEnum_INVALID_VALUE_WITH_LIKE_OPERATOR QueryErrorEnum_QueryError = 56
+	// An operator was provided that is inapplicable to the field being
+	// filtered.
+	QueryErrorEnum_OPERATOR_FIELD_MISMATCH QueryErrorEnum_QueryError = 35
+	// A Condition was found with an empty list.
+	QueryErrorEnum_PROHIBITED_EMPTY_LIST_IN_CONDITION QueryErrorEnum_QueryError = 28
+	// A condition used in the query references an unsupported enum constant.
+	QueryErrorEnum_PROHIBITED_ENUM_CONSTANT QueryErrorEnum_QueryError = 54
+	// Fields that are not allowed to be selected together were included in
+	// the SELECT clause.
+	QueryErrorEnum_PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 31
+	// A field that is not orderable was included in the ORDER BY clause.
+	QueryErrorEnum_PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE QueryErrorEnum_QueryError = 40
+	// A field that is not selectable was included in the SELECT clause.
+	QueryErrorEnum_PROHIBITED_FIELD_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 23
+	// A field that is not filterable was included in the WHERE clause.
+	QueryErrorEnum_PROHIBITED_FIELD_IN_WHERE_CLAUSE QueryErrorEnum_QueryError = 24
+	// Resource type specified in the FROM clause is not supported by this
+	// service.
+	QueryErrorEnum_PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE QueryErrorEnum_QueryError = 43
+	// A field that comes from an incompatible resource was included in the
+	// SELECT clause.
+	QueryErrorEnum_PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE QueryErrorEnum_QueryError = 48
+	// A field that comes from an incompatible resource was included in the
+	// WHERE clause.
+	QueryErrorEnum_PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE QueryErrorEnum_QueryError = 58
+	// A metric incompatible with the main resource or other selected
+	// segmenting resources was included in the SELECT or WHERE clause.
+	QueryErrorEnum_PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE QueryErrorEnum_QueryError = 49
+	// A segment incompatible with the main resource or other selected
+	// segmenting resources was included in the SELECT or WHERE clause.
+	QueryErrorEnum_PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE QueryErrorEnum_QueryError = 51
+	// A segment in the SELECT clause is incompatible with a metric in the
+	// SELECT or WHERE clause.
+	QueryErrorEnum_PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE QueryErrorEnum_QueryError = 53
+	// The value passed to the limit clause is too low.
+	QueryErrorEnum_LIMIT_VALUE_TOO_LOW QueryErrorEnum_QueryError = 25
+	// Query has a string containing a newline character.
+	QueryErrorEnum_PROHIBITED_NEWLINE_IN_STRING QueryErrorEnum_QueryError = 8
+	// List contains values of different types.
+	QueryErrorEnum_PROHIBITED_VALUE_COMBINATION_IN_LIST QueryErrorEnum_QueryError = 10
+	// The values passed to the BETWEEN operator are not of the same type.
+	QueryErrorEnum_PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR QueryErrorEnum_QueryError = 21
+	// Query contains unterminated string.
+	QueryErrorEnum_STRING_NOT_TERMINATED QueryErrorEnum_QueryError = 6
+	// Too many segments are specified in SELECT clause.
+	QueryErrorEnum_TOO_MANY_SEGMENTS QueryErrorEnum_QueryError = 34
+	// Query is incomplete and cannot be parsed.
+	QueryErrorEnum_UNEXPECTED_END_OF_QUERY QueryErrorEnum_QueryError = 9
+	// FROM clause cannot be specified in this query.
+	QueryErrorEnum_UNEXPECTED_FROM_CLAUSE QueryErrorEnum_QueryError = 47
+	// Query contains one or more unrecognized fields.
+	QueryErrorEnum_UNRECOGNIZED_FIELD QueryErrorEnum_QueryError = 32
+	// Query has an unexpected extra part.
+	QueryErrorEnum_UNEXPECTED_INPUT QueryErrorEnum_QueryError = 11
+)
+
+var QueryErrorEnum_QueryError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	50: "QUERY_ERROR",
+	18: "BAD_ENUM_CONSTANT",
+	7:  "BAD_ESCAPE_SEQUENCE",
+	12: "BAD_FIELD_NAME",
+	15: "BAD_LIMIT_VALUE",
+	5:  "BAD_NUMBER",
+	3:  "BAD_OPERATOR",
+	45: "BAD_RESOURCE_TYPE_IN_FROM_CLAUSE",
+	2:  "BAD_SYMBOL",
+	4:  "BAD_VALUE",
+	36: "DATE_RANGE_TOO_WIDE",
+	30: "EXPECTED_AND",
+	14: "EXPECTED_BY",
+	37: "EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE",
+	55: "EXPECTED_FILTERS_ON_DATE_RANGE",
+	44: "EXPECTED_FROM",
+	41: "EXPECTED_LIST",
+	16: "EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE",
+	13: "EXPECTED_SELECT",
+	42: "EXPECTED_SINGLE_VALUE",
+	29: "EXPECTED_VALUE_WITH_BETWEEN_OPERATOR",
+	38: "INVALID_DATE_FORMAT",
+	57: "INVALID_STRING_VALUE",
+	26: "INVALID_VALUE_WITH_BETWEEN_OPERATOR",
+	22: "INVALID_VALUE_WITH_DURING_OPERATOR",
+	56: "INVALID_VALUE_WITH_LIKE_OPERATOR",
+	35: "OPERATOR_FIELD_MISMATCH",
+	28: "PROHIBITED_EMPTY_LIST_IN_CONDITION",
+	54: "PROHIBITED_ENUM_CONSTANT",
+	31: "PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE",
+	40: "PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE",
+	23: "PROHIBITED_FIELD_IN_SELECT_CLAUSE",
+	24: "PROHIBITED_FIELD_IN_WHERE_CLAUSE",
+	43: "PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE",
+	48: "PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE",
+	58: "PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE",
+	49: "PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE",
+	51: "PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE",
+	53: "PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE",
+	25: "LIMIT_VALUE_TOO_LOW",
+	8:  "PROHIBITED_NEWLINE_IN_STRING",
+	10: "PROHIBITED_VALUE_COMBINATION_IN_LIST",
+	21: "PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR",
+	6:  "STRING_NOT_TERMINATED",
+	34: "TOO_MANY_SEGMENTS",
+	9:  "UNEXPECTED_END_OF_QUERY",
+	47: "UNEXPECTED_FROM_CLAUSE",
+	32: "UNRECOGNIZED_FIELD",
+	11: "UNEXPECTED_INPUT",
+}
+var QueryErrorEnum_QueryError_value = map[string]int32{
+	"UNSPECIFIED":                      0,
+	"UNKNOWN":                          1,
+	"QUERY_ERROR":                      50,
+	"BAD_ENUM_CONSTANT":                18,
+	"BAD_ESCAPE_SEQUENCE":              7,
+	"BAD_FIELD_NAME":                   12,
+	"BAD_LIMIT_VALUE":                  15,
+	"BAD_NUMBER":                       5,
+	"BAD_OPERATOR":                     3,
+	"BAD_RESOURCE_TYPE_IN_FROM_CLAUSE": 45,
+	"BAD_SYMBOL":                       2,
+	"BAD_VALUE":                        4,
+	"DATE_RANGE_TOO_WIDE":              36,
+	"EXPECTED_AND":                     30,
+	"EXPECTED_BY":                      14,
+	"EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE":                37,
+	"EXPECTED_FILTERS_ON_DATE_RANGE":                           55,
+	"EXPECTED_FROM":                                            44,
+	"EXPECTED_LIST":                                            41,
+	"EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE":               16,
+	"EXPECTED_SELECT":                                          13,
+	"EXPECTED_SINGLE_VALUE":                                    42,
+	"EXPECTED_VALUE_WITH_BETWEEN_OPERATOR":                     29,
+	"INVALID_DATE_FORMAT":                                      38,
+	"INVALID_STRING_VALUE":                                     57,
+	"INVALID_VALUE_WITH_BETWEEN_OPERATOR":                      26,
+	"INVALID_VALUE_WITH_DURING_OPERATOR":                       22,
+	"INVALID_VALUE_WITH_LIKE_OPERATOR":                         56,
+	"OPERATOR_FIELD_MISMATCH":                                  35,
+	"PROHIBITED_EMPTY_LIST_IN_CONDITION":                       28,
+	"PROHIBITED_ENUM_CONSTANT":                                 54,
+	"PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE":            31,
+	"PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE":                      40,
+	"PROHIBITED_FIELD_IN_SELECT_CLAUSE":                        23,
+	"PROHIBITED_FIELD_IN_WHERE_CLAUSE":                         24,
+	"PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE":                  43,
+	"PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE":                48,
+	"PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE":                 58,
+	"PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE":              49,
+	"PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE":             51,
+	"PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE": 53,
+	"LIMIT_VALUE_TOO_LOW":                                      25,
+	"PROHIBITED_NEWLINE_IN_STRING":                             8,
+	"PROHIBITED_VALUE_COMBINATION_IN_LIST":                     10,
+	"PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR":       21,
+	"STRING_NOT_TERMINATED":                                    6,
+	"TOO_MANY_SEGMENTS":                                        34,
+	"UNEXPECTED_END_OF_QUERY":                                  9,
+	"UNEXPECTED_FROM_CLAUSE":                                   47,
+	"UNRECOGNIZED_FIELD":                                       32,
+	"UNEXPECTED_INPUT":                                         11,
+}
+
+func (x QueryErrorEnum_QueryError) String() string {
+	return proto.EnumName(QueryErrorEnum_QueryError_name, int32(x))
+}
+func (QueryErrorEnum_QueryError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_query_error_05d7949cfbd507aa, []int{0, 0}
+}
+
+// Container for enum describing possible query errors.
+type QueryErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *QueryErrorEnum) Reset()         { *m = QueryErrorEnum{} }
+func (m *QueryErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*QueryErrorEnum) ProtoMessage()    {}
+func (*QueryErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_query_error_05d7949cfbd507aa, []int{0}
+}
+func (m *QueryErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_QueryErrorEnum.Unmarshal(m, b)
+}
+func (m *QueryErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_QueryErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *QueryErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryErrorEnum.Merge(dst, src)
+}
+func (m *QueryErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_QueryErrorEnum.Size(m)
+}
+func (m *QueryErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*QueryErrorEnum)(nil), "google.ads.googleads.v0.errors.QueryErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.QueryErrorEnum_QueryError", QueryErrorEnum_QueryError_name, QueryErrorEnum_QueryError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/query_error.proto", fileDescriptor_query_error_05d7949cfbd507aa)
+}
+
+var fileDescriptor_query_error_05d7949cfbd507aa = []byte{
+	// 891 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6d, 0x73, 0xd3, 0x46,
+	0x10, 0x2e, 0xd0, 0x42, 0xd9, 0xbc, 0x1d, 0x0b, 0x79, 0x81, 0xa6, 0x69, 0x6a, 0x02, 0x04, 0x92,
+	0xc8, 0x06, 0xa6, 0x94, 0xbe, 0x7c, 0x39, 0x49, 0x6b, 0xe7, 0x06, 0xe9, 0x4e, 0x39, 0x9d, 0xe2,
+	0x9a, 0xc9, 0xcc, 0x4d, 0xda, 0x64, 0x3c, 0x9d, 0x81, 0x98, 0xda, 0x85, 0x99, 0xfe, 0x9d, 0x7e,
+	0xec, 0xff, 0xe8, 0x97, 0x7e, 0xeb, 0x7f, 0xe8, 0x0f, 0xe9, 0x9c, 0x64, 0xc9, 0x72, 0x31, 0xee,
+	0x27, 0xdd, 0x3d, 0xfb, 0x3c, 0xbb, 0x77, 0xab, 0xdd, 0x5b, 0x68, 0xf5, 0x07, 0x83, 0xfe, 0xab,
+	0xf3, 0xe6, 0xe9, 0xd9, 0xa8, 0x59, 0x2c, 0xdd, 0xea, 0x5d, 0xab, 0x79, 0x3e, 0x1c, 0x0e, 0x86,
+	0xa3, 0xe6, 0x2f, 0x6f, 0xcf, 0x87, 0xbf, 0xd9, 0x7c, 0xe3, 0xbd, 0x19, 0x0e, 0x7e, 0x1d, 0xe0,
+	0x56, 0x41, 0xf3, 0x4e, 0xcf, 0x46, 0x5e, 0xa5, 0xf0, 0xde, 0xb5, 0xbc, 0x42, 0xd1, 0xf8, 0x67,
+	0x11, 0x96, 0x8f, 0x9c, 0x8a, 0xdc, 0x9e, 0x2e, 0xde, 0xbe, 0x6e, 0xfc, 0xbd, 0x08, 0x30, 0x81,
+	0x70, 0x05, 0x16, 0x32, 0x99, 0x26, 0x14, 0x88, 0xb6, 0xa0, 0x90, 0x7d, 0x84, 0x0b, 0x70, 0x2d,
+	0x93, 0x2f, 0xa4, 0xea, 0x4a, 0x76, 0xc9, 0x59, 0x8f, 0x32, 0xd2, 0x3d, 0x4b, 0x5a, 0x2b, 0xcd,
+	0x9e, 0xe0, 0x2a, 0xdc, 0xf0, 0x79, 0x68, 0x49, 0x66, 0xb1, 0x0d, 0x94, 0x4c, 0x0d, 0x97, 0x86,
+	0x21, 0xae, 0xc3, 0xcd, 0x1c, 0x4e, 0x03, 0x9e, 0x90, 0x4d, 0xe9, 0x28, 0x23, 0x19, 0x10, 0xbb,
+	0x86, 0x08, 0xcb, 0xce, 0xd0, 0x16, 0x14, 0x85, 0x56, 0xf2, 0x98, 0xd8, 0x22, 0xde, 0x84, 0x15,
+	0x87, 0x45, 0x22, 0x16, 0xc6, 0x1e, 0xf3, 0x28, 0x23, 0xb6, 0x82, 0xcb, 0x00, 0x0e, 0x94, 0x59,
+	0xec, 0x93, 0x66, 0x9f, 0x20, 0x83, 0x45, 0xb7, 0x57, 0x09, 0x69, 0x6e, 0x94, 0x66, 0x57, 0x70,
+	0x07, 0xb6, 0x1d, 0xa2, 0x29, 0x55, 0x99, 0x0e, 0xc8, 0x9a, 0x5e, 0x42, 0x56, 0x48, 0xdb, 0xd6,
+	0x2a, 0xb6, 0x41, 0xc4, 0xb3, 0x94, 0xd8, 0x41, 0xe9, 0x27, 0xed, 0xc5, 0xbe, 0x8a, 0xd8, 0x65,
+	0x5c, 0x82, 0xeb, 0x6e, 0x5f, 0x84, 0xf9, 0xd8, 0x1d, 0x34, 0xe4, 0x86, 0xac, 0xe6, 0xb2, 0x43,
+	0xd6, 0x28, 0x65, 0xbb, 0x22, 0x24, 0xb6, 0xe3, 0xe2, 0xd1, 0x0f, 0x09, 0x05, 0x86, 0x42, 0xcb,
+	0x65, 0xc8, 0xb6, 0xdc, 0xdd, 0x2b, 0xc4, 0xef, 0xb1, 0x65, 0x3c, 0x80, 0x87, 0x15, 0x10, 0x8a,
+	0x98, 0x64, 0x2a, 0x94, 0x1c, 0x5f, 0x4d, 0x48, 0x9b, 0x52, 0x44, 0x81, 0x29, 0x4f, 0x72, 0x0f,
+	0x1b, 0xb0, 0x55, 0xd1, 0xdb, 0x22, 0x32, 0xa4, 0x53, 0xab, 0xa4, 0x9d, 0x84, 0x67, 0x5f, 0xe3,
+	0x0d, 0x58, 0x9a, 0x70, 0xb4, 0x8a, 0xd9, 0xfe, 0x14, 0x14, 0x89, 0xd4, 0xb0, 0x87, 0xe8, 0xc1,
+	0xa3, 0x0a, 0xd2, 0xd4, 0x26, 0xed, 0x92, 0x1b, 0x7e, 0x28, 0x32, 0x73, 0x09, 0xae, 0xf8, 0x85,
+	0x8d, 0x2d, 0xe1, 0x6d, 0x58, 0x9d, 0x80, 0x42, 0x76, 0x22, 0x1a, 0x27, 0xe5, 0x11, 0xee, 0xc2,
+	0x4e, 0x65, 0xca, 0x31, 0xdb, 0x15, 0xe6, 0xd0, 0xfa, 0x64, 0xba, 0x44, 0x72, 0xf2, 0x0f, 0x3e,
+	0x77, 0xe9, 0x13, 0xf2, 0x98, 0x47, 0x22, 0x2c, 0xee, 0xd1, 0x56, 0x3a, 0xe6, 0x86, 0xdd, 0xc7,
+	0x0d, 0xb8, 0x55, 0x1a, 0x52, 0xa3, 0x85, 0xec, 0x8c, 0x9d, 0x7f, 0x83, 0x0f, 0xe0, 0x6e, 0x69,
+	0x99, 0xe7, 0xfb, 0x0e, 0xde, 0x87, 0xc6, 0x0c, 0x62, 0x98, 0xe5, 0xde, 0x2a, 0xde, 0x9a, 0xab,
+	0x83, 0x19, 0xbc, 0x48, 0xbc, 0xa0, 0x09, 0xeb, 0x39, 0x7e, 0x06, 0xeb, 0xe5, 0x6e, 0x9c, 0xa8,
+	0x58, 0xa4, 0x31, 0x37, 0xc1, 0x21, 0xbb, 0xeb, 0x42, 0x25, 0x5a, 0x1d, 0x0a, 0x5f, 0xb8, 0x2b,
+	0x53, 0x9c, 0x98, 0x5e, 0x9e, 0x6b, 0x97, 0xcc, 0x40, 0xc9, 0x50, 0x18, 0xa1, 0x24, 0xdb, 0xc4,
+	0x4d, 0xd8, 0xa8, 0xf3, 0xa6, 0x8a, 0xfe, 0x19, 0x3e, 0x86, 0x83, 0x9a, 0xb5, 0x08, 0x12, 0xa8,
+	0xd8, 0x17, 0x92, 0x3b, 0xfd, 0xfb, 0x7f, 0xe6, 0x0b, 0x97, 0x8c, 0xf7, 0x24, 0x42, 0x5a, 0xa5,
+	0x43, 0xd2, 0xd6, 0xef, 0x95, 0xc4, 0x5d, 0xbc, 0x07, 0x5f, 0xce, 0x22, 0x4e, 0xfb, 0x5b, 0x77,
+	0xb9, 0x98, 0x45, 0xeb, 0x1e, 0x92, 0xa6, 0x92, 0xb5, 0x81, 0x7b, 0xf0, 0xa0, 0xc6, 0x9a, 0xdb,
+	0x40, 0x7b, 0xae, 0xca, 0xe7, 0x91, 0xa7, 0x4f, 0xd0, 0xc2, 0x7d, 0xd8, 0x9d, 0x47, 0x9f, 0x3a,
+	0xc9, 0xb7, 0xd8, 0x84, 0xbd, 0x1a, 0x3b, 0x26, 0xa3, 0x45, 0x50, 0xf3, 0xaa, 0xf4, 0xb4, 0xe0,
+	0x31, 0xb6, 0x60, 0xbf, 0x26, 0x48, 0xa9, 0x13, 0x93, 0x34, 0x73, 0x14, 0x4f, 0xf1, 0x7b, 0x78,
+	0x3e, 0x43, 0x91, 0xd7, 0xc8, 0xff, 0xc6, 0xfb, 0xca, 0x15, 0x78, 0xed, 0x5d, 0xca, 0x1f, 0x88,
+	0x48, 0x75, 0xd9, 0x6d, 0xdc, 0x86, 0xcd, 0x9a, 0x5b, 0x49, 0xdd, 0x48, 0xc8, 0x22, 0x21, 0x79,
+	0xb9, 0xb3, 0x4f, 0x5d, 0x17, 0xd5, 0x18, 0x85, 0xfe, 0x3f, 0xe5, 0x90, 0xf7, 0x33, 0xe0, 0x33,
+	0x78, 0x32, 0x97, 0x39, 0xbb, 0x43, 0x56, 0x5d, 0x0b, 0x8f, 0x9b, 0x4b, 0x2a, 0x63, 0x0d, 0xe9,
+	0xd8, 0x29, 0x28, 0x64, 0x57, 0xdd, 0xbb, 0xec, 0xce, 0x1a, 0x73, 0xd9, 0x2b, 0xef, 0x9c, 0xb2,
+	0x86, 0xeb, 0x82, 0x4c, 0x56, 0xbd, 0x4d, 0x32, 0xb4, 0xaa, 0x6d, 0xf3, 0x17, 0x9d, 0x5d, 0xc7,
+	0x3b, 0xb0, 0x56, 0x33, 0xd6, 0xab, 0xa0, 0x89, 0x6b, 0x80, 0x99, 0xd4, 0x14, 0xa8, 0x8e, 0x14,
+	0x2f, 0xcb, 0xd2, 0x62, 0xdb, 0x78, 0x0b, 0x58, 0x4d, 0x23, 0x64, 0x92, 0x19, 0xb6, 0xe0, 0xff,
+	0x79, 0x09, 0x1a, 0x3f, 0x0d, 0x5e, 0x7b, 0xf3, 0xa7, 0x91, 0xbf, 0x32, 0x99, 0x3b, 0x89, 0x1b,
+	0x5f, 0xc9, 0xa5, 0x97, 0xe1, 0x58, 0xd2, 0x1f, 0xbc, 0x3a, 0xbd, 0xe8, 0x7b, 0x83, 0x61, 0xbf,
+	0xd9, 0x3f, 0xbf, 0xc8, 0x87, 0x5b, 0x39, 0x02, 0xdf, 0xfc, 0x3c, 0xfa, 0xd0, 0x44, 0xfc, 0xae,
+	0xf8, 0xfc, 0x7e, 0xf9, 0x4a, 0x87, 0xf3, 0x3f, 0x2e, 0x6f, 0x75, 0x0a, 0x67, 0xfc, 0x6c, 0xe4,
+	0x15, 0x4b, 0xb7, 0x3a, 0x6e, 0x79, 0x79, 0xc8, 0xd1, 0x5f, 0x25, 0xe1, 0x84, 0x9f, 0x8d, 0x4e,
+	0x2a, 0xc2, 0xc9, 0x71, 0xeb, 0xa4, 0x20, 0xfc, 0x78, 0x35, 0x0f, 0xfc, 0xf4, 0xdf, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x91, 0x95, 0x3d, 0x58, 0x89, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/quota_error.pb.go b/googleapis/ads/googleads/v0/errors/quota_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e1cd9e3b40b847091e11a4866f35628e673fa749
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/quota_error.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/quota_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible quota errors.
+type QuotaErrorEnum_QuotaError int32
+
+const (
+	// Enum unspecified.
+	QuotaErrorEnum_UNSPECIFIED QuotaErrorEnum_QuotaError = 0
+	// The received error code is not known in this version.
+	QuotaErrorEnum_UNKNOWN QuotaErrorEnum_QuotaError = 1
+	// Too many requests.
+	QuotaErrorEnum_RESOURCE_EXHAUSTED QuotaErrorEnum_QuotaError = 2
+	// Access is prohibited.
+	QuotaErrorEnum_ACCESS_PROHIBITED QuotaErrorEnum_QuotaError = 3
+	// Too many requests in a short amount of time.
+	QuotaErrorEnum_RESOURCE_TEMPORARILY_EXHAUSTED QuotaErrorEnum_QuotaError = 4
+)
+
+var QuotaErrorEnum_QuotaError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "RESOURCE_EXHAUSTED",
+	3: "ACCESS_PROHIBITED",
+	4: "RESOURCE_TEMPORARILY_EXHAUSTED",
+}
+var QuotaErrorEnum_QuotaError_value = map[string]int32{
+	"UNSPECIFIED":                    0,
+	"UNKNOWN":                        1,
+	"RESOURCE_EXHAUSTED":             2,
+	"ACCESS_PROHIBITED":              3,
+	"RESOURCE_TEMPORARILY_EXHAUSTED": 4,
+}
+
+func (x QuotaErrorEnum_QuotaError) String() string {
+	return proto.EnumName(QuotaErrorEnum_QuotaError_name, int32(x))
+}
+func (QuotaErrorEnum_QuotaError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_quota_error_9801f34daa09281d, []int{0, 0}
+}
+
+// Container for enum describing possible quota errors.
+type QuotaErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *QuotaErrorEnum) Reset()         { *m = QuotaErrorEnum{} }
+func (m *QuotaErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*QuotaErrorEnum) ProtoMessage()    {}
+func (*QuotaErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_quota_error_9801f34daa09281d, []int{0}
+}
+func (m *QuotaErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_QuotaErrorEnum.Unmarshal(m, b)
+}
+func (m *QuotaErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_QuotaErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *QuotaErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QuotaErrorEnum.Merge(dst, src)
+}
+func (m *QuotaErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_QuotaErrorEnum.Size(m)
+}
+func (m *QuotaErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_QuotaErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QuotaErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*QuotaErrorEnum)(nil), "google.ads.googleads.v0.errors.QuotaErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.QuotaErrorEnum_QuotaError", QuotaErrorEnum_QuotaError_name, QuotaErrorEnum_QuotaError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/quota_error.proto", fileDescriptor_quota_error_9801f34daa09281d)
+}
+
+var fileDescriptor_quota_error_9801f34daa09281d = []byte{
+	// 296 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xc2, 0xd2, 0xfc, 0x92, 0xc4, 0x78, 0x30, 0x47, 0xaf, 0xa0, 0x28,
+	0xbf, 0x24, 0x5f, 0x48, 0x0e, 0xa2, 0x4c, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x43, 0xaf, 0xcc,
+	0x40, 0x0f, 0xa2, 0x43, 0xa9, 0x9f, 0x91, 0x8b, 0x2f, 0x10, 0xa4, 0xcb, 0x15, 0xc4, 0x77, 0xcd,
+	0x2b, 0xcd, 0x55, 0xaa, 0xe5, 0xe2, 0x42, 0x88, 0x08, 0xf1, 0x73, 0x71, 0x87, 0xfa, 0x05, 0x07,
+	0xb8, 0x3a, 0x7b, 0xba, 0x79, 0xba, 0xba, 0x08, 0x30, 0x08, 0x71, 0x73, 0xb1, 0x87, 0xfa, 0x79,
+	0xfb, 0xf9, 0x87, 0xfb, 0x09, 0x30, 0x0a, 0x89, 0x71, 0x09, 0x05, 0xb9, 0x06, 0xfb, 0x87, 0x06,
+	0x39, 0xbb, 0xc6, 0xbb, 0x46, 0x78, 0x38, 0x86, 0x06, 0x87, 0xb8, 0xba, 0x08, 0x30, 0x09, 0x89,
+	0x72, 0x09, 0x3a, 0x3a, 0x3b, 0xbb, 0x06, 0x07, 0xc7, 0x07, 0x04, 0xf9, 0x7b, 0x78, 0x3a, 0x79,
+	0x82, 0x84, 0x99, 0x85, 0x94, 0xb8, 0xe4, 0xe0, 0xca, 0x43, 0x5c, 0x7d, 0x03, 0xfc, 0x83, 0x1c,
+	0x83, 0x3c, 0x7d, 0x22, 0x91, 0xb4, 0xb2, 0x38, 0x1d, 0x65, 0xe4, 0x52, 0x4a, 0xce, 0xcf, 0xd5,
+	0xc3, 0xef, 0x70, 0x27, 0x7e, 0x84, 0x1b, 0x03, 0x40, 0x3e, 0x0d, 0x60, 0x8c, 0x72, 0x81, 0x6a,
+	0x49, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0x87,
+	0x03, 0x2c, 0xb4, 0x0a, 0x32, 0x8b, 0x71, 0x05, 0x9e, 0x35, 0x84, 0x5a, 0xc4, 0xc4, 0xec, 0xee,
+	0xe8, 0xb8, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x98, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85,
+	0x19, 0xe8, 0x81, 0xad, 0x2c, 0x3e, 0x05, 0x53, 0x10, 0xe3, 0x98, 0x52, 0x1c, 0x03, 0x57, 0x10,
+	0x13, 0x66, 0x10, 0x03, 0x51, 0x90, 0xc4, 0x06, 0xb6, 0xd8, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff,
+	0x3d, 0x54, 0x2f, 0x04, 0xb4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/range_error.pb.go b/googleapis/ads/googleads/v0/errors/range_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0cb47f94e00062d25652e0c0f6d54f70fe024757
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/range_error.pb.go
@@ -0,0 +1,113 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/range_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible range errors.
+type RangeErrorEnum_RangeError int32
+
+const (
+	// Enum unspecified.
+	RangeErrorEnum_UNSPECIFIED RangeErrorEnum_RangeError = 0
+	// The received error code is not known in this version.
+	RangeErrorEnum_UNKNOWN RangeErrorEnum_RangeError = 1
+	// Too low.
+	RangeErrorEnum_TOO_LOW RangeErrorEnum_RangeError = 2
+	// Too high.
+	RangeErrorEnum_TOO_HIGH RangeErrorEnum_RangeError = 3
+)
+
+var RangeErrorEnum_RangeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "TOO_LOW",
+	3: "TOO_HIGH",
+}
+var RangeErrorEnum_RangeError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"TOO_LOW":     2,
+	"TOO_HIGH":    3,
+}
+
+func (x RangeErrorEnum_RangeError) String() string {
+	return proto.EnumName(RangeErrorEnum_RangeError_name, int32(x))
+}
+func (RangeErrorEnum_RangeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_range_error_ead582fc3159a23a, []int{0, 0}
+}
+
+// Container for enum describing possible range errors.
+type RangeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RangeErrorEnum) Reset()         { *m = RangeErrorEnum{} }
+func (m *RangeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RangeErrorEnum) ProtoMessage()    {}
+func (*RangeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_range_error_ead582fc3159a23a, []int{0}
+}
+func (m *RangeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RangeErrorEnum.Unmarshal(m, b)
+}
+func (m *RangeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RangeErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *RangeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RangeErrorEnum.Merge(dst, src)
+}
+func (m *RangeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RangeErrorEnum.Size(m)
+}
+func (m *RangeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RangeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RangeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*RangeErrorEnum)(nil), "google.ads.googleads.v0.errors.RangeErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.RangeErrorEnum_RangeError", RangeErrorEnum_RangeError_name, RangeErrorEnum_RangeError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/range_error.proto", fileDescriptor_range_error_ead582fc3159a23a)
+}
+
+var fileDescriptor_range_error_ead582fc3159a23a = []byte{
+	// 252 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xa2, 0xc4, 0xbc, 0xf4, 0xd4, 0x78, 0x30, 0x47, 0xaf, 0xa0, 0x28,
+	0xbf, 0x24, 0x5f, 0x48, 0x0e, 0xa2, 0x4c, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x43, 0xaf, 0xcc,
+	0x40, 0x0f, 0xa2, 0x43, 0x29, 0x9c, 0x8b, 0x2f, 0x08, 0xa4, 0xc9, 0x15, 0xc4, 0x75, 0xcd, 0x2b,
+	0xcd, 0x55, 0x72, 0xe5, 0xe2, 0x42, 0x88, 0x08, 0xf1, 0x73, 0x71, 0x87, 0xfa, 0x05, 0x07, 0xb8,
+	0x3a, 0x7b, 0xba, 0x79, 0xba, 0xba, 0x08, 0x30, 0x08, 0x71, 0x73, 0xb1, 0x87, 0xfa, 0x79, 0xfb,
+	0xf9, 0x87, 0xfb, 0x09, 0x30, 0x82, 0x38, 0x21, 0xfe, 0xfe, 0xf1, 0x3e, 0xfe, 0xe1, 0x02, 0x4c,
+	0x42, 0x3c, 0x5c, 0x1c, 0x20, 0x8e, 0x87, 0xa7, 0xbb, 0x87, 0x00, 0xb3, 0xd3, 0x51, 0x46, 0x2e,
+	0xa5, 0xe4, 0xfc, 0x5c, 0x3d, 0xfc, 0xf6, 0x3b, 0xf1, 0x23, 0xec, 0x0a, 0x00, 0x39, 0x38, 0x80,
+	0x31, 0xca, 0x05, 0xaa, 0x25, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f,
+	0x3d, 0x35, 0x0f, 0xec, 0x1d, 0x98, 0xa7, 0x0b, 0x32, 0x8b, 0x71, 0x85, 0x81, 0x35, 0x84, 0x5a,
+	0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x98, 0x63, 0x4a, 0xb1, 0x1e,
+	0x84, 0x09, 0x62, 0x85, 0x19, 0xe8, 0x81, 0xad, 0x2c, 0x3e, 0x05, 0x53, 0x10, 0xe3, 0x98, 0x52,
+	0x1c, 0x03, 0x57, 0x10, 0x13, 0x66, 0x10, 0x03, 0x51, 0x90, 0xc4, 0x06, 0xb6, 0xd8, 0x18, 0x10,
+	0x00, 0x00, 0xff, 0xff, 0x08, 0xef, 0x18, 0x16, 0x7b, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/recommendation_error.pb.go b/googleapis/ads/googleads/v0/errors/recommendation_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d84fb1fea270b303cdc653259e26fc01215da86a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/recommendation_error.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/recommendation_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible errors from applying a recommendation.
+type RecommendationErrorEnum_RecommendationError int32
+
+const (
+	// Enum unspecified.
+	RecommendationErrorEnum_UNSPECIFIED RecommendationErrorEnum_RecommendationError = 0
+	// The received error code is not known in this version.
+	RecommendationErrorEnum_UNKNOWN RecommendationErrorEnum_RecommendationError = 1
+	// The specified budget amount is too low e.g. lower than minimum currency
+	// unit or lower than ad group minimum cost-per-click.
+	RecommendationErrorEnum_BUDGET_AMOUNT_TOO_SMALL RecommendationErrorEnum_RecommendationError = 2
+	// The specified budget amount is too large.
+	RecommendationErrorEnum_BUDGET_AMOUNT_TOO_LARGE RecommendationErrorEnum_RecommendationError = 3
+	// The specified budget amount is not a valid amount. e.g. not a multiple
+	// of minimum currency unit.
+	RecommendationErrorEnum_INVALID_BUDGET_AMOUNT RecommendationErrorEnum_RecommendationError = 4
+	// The specified keyword or ad violates ad policy.
+	RecommendationErrorEnum_POLICY_ERROR RecommendationErrorEnum_RecommendationError = 5
+	// The specified bid amount is not valid. e.g. too many fractional digits,
+	// or negative amount.
+	RecommendationErrorEnum_INVALID_BID_AMOUNT RecommendationErrorEnum_RecommendationError = 6
+	// The number of keywords in ad group have reached the maximum allowed.
+	RecommendationErrorEnum_ADGROUP_KEYWORD_LIMIT RecommendationErrorEnum_RecommendationError = 7
+	// The recommendation requested to apply has already been applied.
+	RecommendationErrorEnum_RECOMMENDATION_ALREADY_APPLIED RecommendationErrorEnum_RecommendationError = 8
+	// The recommendation requested to apply has been invalidated.
+	RecommendationErrorEnum_RECOMMENDATION_INVALIDATED RecommendationErrorEnum_RecommendationError = 9
+	// The number of operations in a single request exceeds the maximum allowed.
+	RecommendationErrorEnum_TOO_MANY_OPERATIONS RecommendationErrorEnum_RecommendationError = 10
+	// There are no operations in the request.
+	RecommendationErrorEnum_NO_OPERATIONS RecommendationErrorEnum_RecommendationError = 11
+	// Operations with multiple recommendation types are not supported when
+	// partial failure mode is not enabled.
+	RecommendationErrorEnum_DIFFERENT_TYPES_NOT_SUPPORTED RecommendationErrorEnum_RecommendationError = 12
+	// Request contains multiple operations with the same resource_name.
+	RecommendationErrorEnum_DUPLICATE_RESOURCE_NAME RecommendationErrorEnum_RecommendationError = 13
+	// The recommendation requested to dismiss has already been dismissed.
+	RecommendationErrorEnum_RECOMMENDATION_ALREADY_DISMISSED RecommendationErrorEnum_RecommendationError = 14
+)
+
+var RecommendationErrorEnum_RecommendationError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "BUDGET_AMOUNT_TOO_SMALL",
+	3:  "BUDGET_AMOUNT_TOO_LARGE",
+	4:  "INVALID_BUDGET_AMOUNT",
+	5:  "POLICY_ERROR",
+	6:  "INVALID_BID_AMOUNT",
+	7:  "ADGROUP_KEYWORD_LIMIT",
+	8:  "RECOMMENDATION_ALREADY_APPLIED",
+	9:  "RECOMMENDATION_INVALIDATED",
+	10: "TOO_MANY_OPERATIONS",
+	11: "NO_OPERATIONS",
+	12: "DIFFERENT_TYPES_NOT_SUPPORTED",
+	13: "DUPLICATE_RESOURCE_NAME",
+	14: "RECOMMENDATION_ALREADY_DISMISSED",
+}
+var RecommendationErrorEnum_RecommendationError_value = map[string]int32{
+	"UNSPECIFIED":                      0,
+	"UNKNOWN":                          1,
+	"BUDGET_AMOUNT_TOO_SMALL":          2,
+	"BUDGET_AMOUNT_TOO_LARGE":          3,
+	"INVALID_BUDGET_AMOUNT":            4,
+	"POLICY_ERROR":                     5,
+	"INVALID_BID_AMOUNT":               6,
+	"ADGROUP_KEYWORD_LIMIT":            7,
+	"RECOMMENDATION_ALREADY_APPLIED":   8,
+	"RECOMMENDATION_INVALIDATED":       9,
+	"TOO_MANY_OPERATIONS":              10,
+	"NO_OPERATIONS":                    11,
+	"DIFFERENT_TYPES_NOT_SUPPORTED":    12,
+	"DUPLICATE_RESOURCE_NAME":          13,
+	"RECOMMENDATION_ALREADY_DISMISSED": 14,
+}
+
+func (x RecommendationErrorEnum_RecommendationError) String() string {
+	return proto.EnumName(RecommendationErrorEnum_RecommendationError_name, int32(x))
+}
+func (RecommendationErrorEnum_RecommendationError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_error_a079eff07de8f83e, []int{0, 0}
+}
+
+// Container for enum describing possible errors from applying a recommendation.
+type RecommendationErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RecommendationErrorEnum) Reset()         { *m = RecommendationErrorEnum{} }
+func (m *RecommendationErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RecommendationErrorEnum) ProtoMessage()    {}
+func (*RecommendationErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_error_a079eff07de8f83e, []int{0}
+}
+func (m *RecommendationErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RecommendationErrorEnum.Unmarshal(m, b)
+}
+func (m *RecommendationErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RecommendationErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *RecommendationErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RecommendationErrorEnum.Merge(dst, src)
+}
+func (m *RecommendationErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RecommendationErrorEnum.Size(m)
+}
+func (m *RecommendationErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RecommendationErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RecommendationErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*RecommendationErrorEnum)(nil), "google.ads.googleads.v0.errors.RecommendationErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.RecommendationErrorEnum_RecommendationError", RecommendationErrorEnum_RecommendationError_name, RecommendationErrorEnum_RecommendationError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/recommendation_error.proto", fileDescriptor_recommendation_error_a079eff07de8f83e)
+}
+
+var fileDescriptor_recommendation_error_a079eff07de8f83e = []byte{
+	// 464 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x59, 0x0b, 0x1b, 0xb8, 0x1b, 0x18, 0x4f, 0x50, 0xfe, 0x88, 0x0a, 0x2a, 0xae, 0xd3,
+	0x4a, 0x5c, 0x21, 0xae, 0xdc, 0xf8, 0x34, 0xb2, 0x96, 0xd8, 0x96, 0x93, 0x74, 0x0a, 0xaa, 0x64,
+	0x95, 0x25, 0x8a, 0x26, 0xad, 0xf1, 0x94, 0x8c, 0x3d, 0x10, 0xdc, 0xf1, 0x12, 0xdc, 0x73, 0xc1,
+	0x33, 0x21, 0x27, 0x6b, 0xc5, 0x50, 0xc7, 0x55, 0x3e, 0xf9, 0xfc, 0xbe, 0x73, 0xec, 0x9c, 0x0f,
+	0x7d, 0x2c, 0xad, 0x2d, 0x2f, 0x8a, 0xc9, 0x2a, 0x6f, 0x26, 0x9d, 0x74, 0xea, 0x7a, 0x3a, 0x29,
+	0xea, 0xda, 0xd6, 0xcd, 0xa4, 0x2e, 0xce, 0xec, 0x7a, 0x5d, 0x54, 0xf9, 0xea, 0xea, 0xdc, 0x56,
+	0xa6, 0x3d, 0xf5, 0x2e, 0x6b, 0x7b, 0x65, 0xc9, 0xa8, 0xe3, 0xbd, 0x55, 0xde, 0x78, 0x5b, 0xab,
+	0x77, 0x3d, 0xf5, 0x3a, 0xeb, 0xf8, 0x67, 0x1f, 0x0d, 0xf5, 0x2d, 0x3b, 0xb8, 0x02, 0x54, 0x5f,
+	0xd7, 0xe3, 0xef, 0x7d, 0x74, 0xbc, 0xa3, 0x46, 0x9e, 0xa0, 0x41, 0x2a, 0x62, 0x05, 0x3e, 0x9f,
+	0x73, 0x60, 0xf8, 0x1e, 0x19, 0xa0, 0x83, 0x54, 0x9c, 0x08, 0x79, 0x2a, 0xf0, 0x1e, 0x79, 0x8d,
+	0x86, 0xb3, 0x94, 0x05, 0x90, 0x18, 0x1a, 0xc9, 0x54, 0x24, 0x26, 0x91, 0xd2, 0xc4, 0x11, 0x0d,
+	0x43, 0xdc, 0xdb, 0x5d, 0x0c, 0xa9, 0x0e, 0x00, 0xf7, 0xc9, 0x4b, 0xf4, 0x8c, 0x8b, 0x05, 0x0d,
+	0x39, 0x33, 0xb7, 0x20, 0x7c, 0x9f, 0x60, 0x74, 0xa8, 0x64, 0xc8, 0xfd, 0xcc, 0x80, 0xd6, 0x52,
+	0xe3, 0x07, 0xe4, 0x39, 0x22, 0x5b, 0x98, 0xb3, 0x0d, 0xb9, 0xef, 0x9a, 0x50, 0x16, 0x68, 0x99,
+	0x2a, 0x73, 0x02, 0xd9, 0xa9, 0xd4, 0xcc, 0x84, 0x3c, 0xe2, 0x09, 0x3e, 0x20, 0x63, 0x34, 0xd2,
+	0xe0, 0xcb, 0x28, 0x02, 0xc1, 0x68, 0xc2, 0xa5, 0x30, 0x34, 0xd4, 0x40, 0x59, 0x66, 0xa8, 0x52,
+	0xa1, 0x7b, 0xca, 0x43, 0x32, 0x42, 0xaf, 0xfe, 0x61, 0x6e, 0xa6, 0xd0, 0x04, 0x18, 0x7e, 0x44,
+	0x86, 0xe8, 0xd8, 0x5d, 0x39, 0xa2, 0x22, 0x33, 0x52, 0x81, 0x6e, 0x99, 0x18, 0x23, 0xf2, 0x14,
+	0x1d, 0x09, 0xf9, 0xf7, 0xd1, 0x80, 0xbc, 0x43, 0x6f, 0x18, 0x9f, 0xcf, 0x41, 0x83, 0x7b, 0x68,
+	0xa6, 0x20, 0x36, 0x42, 0x26, 0x26, 0x4e, 0x95, 0x92, 0xda, 0xb5, 0x3b, 0x74, 0xff, 0x83, 0xa5,
+	0x2a, 0xe4, 0x3e, 0x4d, 0xc0, 0x68, 0x88, 0x65, 0xaa, 0x7d, 0x30, 0x82, 0x46, 0x80, 0x8f, 0xc8,
+	0x7b, 0xf4, 0xf6, 0x8e, 0xfb, 0x32, 0x1e, 0x47, 0x3c, 0x8e, 0x81, 0xe1, 0xc7, 0xb3, 0xdf, 0x7b,
+	0x68, 0x7c, 0x66, 0xd7, 0xde, 0xff, 0x17, 0x3d, 0x7b, 0xb1, 0x63, 0x93, 0xca, 0x45, 0x44, 0xed,
+	0x7d, 0x66, 0x37, 0xde, 0xd2, 0x5e, 0xac, 0xaa, 0xd2, 0xb3, 0x75, 0x39, 0x29, 0x8b, 0xaa, 0x0d,
+	0xd0, 0x26, 0x6f, 0x97, 0xe7, 0xcd, 0x5d, 0xf1, 0xfb, 0xd4, 0x7d, 0xbe, 0xf5, 0xfa, 0x01, 0xa5,
+	0x3f, 0x7a, 0xa3, 0xa0, 0x6b, 0x46, 0xf3, 0xc6, 0xeb, 0xa4, 0x53, 0x8b, 0xa9, 0xd7, 0x8e, 0x6c,
+	0x7e, 0x6d, 0x80, 0x25, 0xcd, 0x9b, 0xe5, 0x16, 0x58, 0x2e, 0xa6, 0xcb, 0x0e, 0xf8, 0xb2, 0xdf,
+	0x0e, 0xfe, 0xf0, 0x27, 0x00, 0x00, 0xff, 0xff, 0xba, 0xfb, 0xc9, 0x17, 0xf6, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/region_code_error.pb.go b/googleapis/ads/googleads/v0/errors/region_code_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b8a7f2acd84abaa3e25657b11b2b169b447fff46
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/region_code_error.pb.go
@@ -0,0 +1,110 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/region_code_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible region code errors.
+type RegionCodeErrorEnum_RegionCodeError int32
+
+const (
+	// Enum unspecified.
+	RegionCodeErrorEnum_UNSPECIFIED RegionCodeErrorEnum_RegionCodeError = 0
+	// The received error code is not known in this version.
+	RegionCodeErrorEnum_UNKNOWN RegionCodeErrorEnum_RegionCodeError = 1
+	// Invalid region code.
+	RegionCodeErrorEnum_INVALID_REGION_CODE RegionCodeErrorEnum_RegionCodeError = 2
+)
+
+var RegionCodeErrorEnum_RegionCodeError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "INVALID_REGION_CODE",
+}
+var RegionCodeErrorEnum_RegionCodeError_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"INVALID_REGION_CODE": 2,
+}
+
+func (x RegionCodeErrorEnum_RegionCodeError) String() string {
+	return proto.EnumName(RegionCodeErrorEnum_RegionCodeError_name, int32(x))
+}
+func (RegionCodeErrorEnum_RegionCodeError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_region_code_error_2e633c8a092599b8, []int{0, 0}
+}
+
+// Container for enum describing possible region code errors.
+type RegionCodeErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RegionCodeErrorEnum) Reset()         { *m = RegionCodeErrorEnum{} }
+func (m *RegionCodeErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RegionCodeErrorEnum) ProtoMessage()    {}
+func (*RegionCodeErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_region_code_error_2e633c8a092599b8, []int{0}
+}
+func (m *RegionCodeErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RegionCodeErrorEnum.Unmarshal(m, b)
+}
+func (m *RegionCodeErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RegionCodeErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *RegionCodeErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RegionCodeErrorEnum.Merge(dst, src)
+}
+func (m *RegionCodeErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RegionCodeErrorEnum.Size(m)
+}
+func (m *RegionCodeErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RegionCodeErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RegionCodeErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*RegionCodeErrorEnum)(nil), "google.ads.googleads.v0.errors.RegionCodeErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.RegionCodeErrorEnum_RegionCodeError", RegionCodeErrorEnum_RegionCodeError_name, RegionCodeErrorEnum_RegionCodeError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/region_code_error.proto", fileDescriptor_region_code_error_2e633c8a092599b8)
+}
+
+var fileDescriptor_region_code_error_2e633c8a092599b8 = []byte{
+	// 266 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xa2, 0xd4, 0xf4, 0xcc, 0xfc, 0xbc, 0xf8, 0xe4, 0xfc, 0x94, 0xd4,
+	0x78, 0xb0, 0x90, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x1c, 0x44, 0xb1, 0x5e, 0x62, 0x4a,
+	0xb1, 0x1e, 0x5c, 0x9f, 0x5e, 0x99, 0x81, 0x1e, 0x44, 0x9f, 0x52, 0x3c, 0x97, 0x70, 0x10, 0x58,
+	0xab, 0x73, 0x7e, 0x4a, 0xaa, 0x2b, 0x48, 0xcc, 0x35, 0xaf, 0x34, 0x57, 0xc9, 0x83, 0x8b, 0x1f,
+	0x4d, 0x58, 0x88, 0x9f, 0x8b, 0x3b, 0xd4, 0x2f, 0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3, 0xd5,
+	0x45, 0x80, 0x41, 0x88, 0x9b, 0x8b, 0x3d, 0xd4, 0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80, 0x51,
+	0x48, 0x9c, 0x4b, 0xd8, 0xd3, 0x2f, 0xcc, 0xd1, 0xc7, 0xd3, 0x25, 0x3e, 0xc8, 0xd5, 0xdd, 0xd3,
+	0xdf, 0x2f, 0xde, 0xd9, 0xdf, 0xc5, 0x55, 0x80, 0xc9, 0xe9, 0x14, 0x23, 0x97, 0x52, 0x72, 0x7e,
+	0xae, 0x1e, 0x7e, 0x77, 0x38, 0x89, 0xa0, 0x59, 0x17, 0x00, 0x72, 0x7d, 0x00, 0x63, 0x94, 0x0b,
+	0x54, 0x5f, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e,
+	0xd8, 0x6f, 0xb0, 0x70, 0x28, 0xc8, 0x2c, 0xc6, 0x15, 0x2c, 0xd6, 0x10, 0x6a, 0x11, 0x13, 0xb3,
+	0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0x61, 0x8e, 0x29, 0xc5, 0x7a, 0x10, 0x26, 0x88,
+	0x15, 0x66, 0xa0, 0x07, 0xb6, 0xb2, 0xf8, 0x14, 0x4c, 0x41, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c,
+	0x41, 0x4c, 0x98, 0x41, 0x0c, 0x44, 0x41, 0x12, 0x1b, 0xd8, 0x62, 0x63, 0x40, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x37, 0x1f, 0x25, 0x84, 0x8e, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/request_error.pb.go b/googleapis/ads/googleads/v0/errors/request_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0e13604d0a4b429d5bd81c25e18596b0200cdd27
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/request_error.pb.go
@@ -0,0 +1,188 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/request_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible request errors.
+type RequestErrorEnum_RequestError int32
+
+const (
+	// Enum unspecified.
+	RequestErrorEnum_UNSPECIFIED RequestErrorEnum_RequestError = 0
+	// The received error code is not known in this version.
+	RequestErrorEnum_UNKNOWN RequestErrorEnum_RequestError = 1
+	// Resource name is required for this request.
+	RequestErrorEnum_RESOURCE_NAME_MISSING RequestErrorEnum_RequestError = 3
+	// Resource name provided is malformed.
+	RequestErrorEnum_RESOURCE_NAME_MALFORMED RequestErrorEnum_RequestError = 4
+	// Resource name provided is malformed.
+	RequestErrorEnum_BAD_RESOURCE_ID RequestErrorEnum_RequestError = 17
+	// Customer ID is invalid.
+	RequestErrorEnum_INVALID_CUSTOMER_ID RequestErrorEnum_RequestError = 16
+	// Mutate operation should have either create, update, or remove specified.
+	RequestErrorEnum_OPERATION_REQUIRED RequestErrorEnum_RequestError = 5
+	// Requested resource not found.
+	RequestErrorEnum_RESOURCE_NOT_FOUND RequestErrorEnum_RequestError = 6
+	// Next page token specified in user request is invalid.
+	RequestErrorEnum_INVALID_PAGE_TOKEN RequestErrorEnum_RequestError = 7
+	// Next page token specified in user request has expired.
+	RequestErrorEnum_EXPIRED_PAGE_TOKEN RequestErrorEnum_RequestError = 8
+	// Required field is missing.
+	RequestErrorEnum_REQUIRED_FIELD_MISSING RequestErrorEnum_RequestError = 9
+	// The field cannot be modified because it's immutable. It's also possible
+	// that the field can be modified using 'create' operation but not 'update'.
+	RequestErrorEnum_IMMUTABLE_FIELD RequestErrorEnum_RequestError = 11
+	// Received too many entries in request.
+	RequestErrorEnum_TOO_MANY_MUTATE_OPERATIONS RequestErrorEnum_RequestError = 13
+	// Request cannot be executed by a manager account.
+	RequestErrorEnum_CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT RequestErrorEnum_RequestError = 14
+	// Mutate request was attempting to modify a readonly field.
+	// For instance, Budget fields can be requested for Ad Group,
+	// but are read-only for adGroups:mutate.
+	RequestErrorEnum_CANNOT_MODIFY_FOREIGN_FIELD RequestErrorEnum_RequestError = 15
+	// Enum value is not permitted.
+	RequestErrorEnum_INVALID_ENUM_VALUE RequestErrorEnum_RequestError = 18
+	// The developer-token parameter is required for all requests.
+	RequestErrorEnum_DEVELOPER_TOKEN_PARAMETER_MISSING RequestErrorEnum_RequestError = 19
+	// The login-customer-id parameter is required for this request.
+	RequestErrorEnum_LOGIN_CUSTOMER_ID_PARAMETER_MISSING RequestErrorEnum_RequestError = 20
+)
+
+var RequestErrorEnum_RequestError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "RESOURCE_NAME_MISSING",
+	4:  "RESOURCE_NAME_MALFORMED",
+	17: "BAD_RESOURCE_ID",
+	16: "INVALID_CUSTOMER_ID",
+	5:  "OPERATION_REQUIRED",
+	6:  "RESOURCE_NOT_FOUND",
+	7:  "INVALID_PAGE_TOKEN",
+	8:  "EXPIRED_PAGE_TOKEN",
+	9:  "REQUIRED_FIELD_MISSING",
+	11: "IMMUTABLE_FIELD",
+	13: "TOO_MANY_MUTATE_OPERATIONS",
+	14: "CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT",
+	15: "CANNOT_MODIFY_FOREIGN_FIELD",
+	18: "INVALID_ENUM_VALUE",
+	19: "DEVELOPER_TOKEN_PARAMETER_MISSING",
+	20: "LOGIN_CUSTOMER_ID_PARAMETER_MISSING",
+}
+var RequestErrorEnum_RequestError_value = map[string]int32{
+	"UNSPECIFIED":                           0,
+	"UNKNOWN":                               1,
+	"RESOURCE_NAME_MISSING":                 3,
+	"RESOURCE_NAME_MALFORMED":               4,
+	"BAD_RESOURCE_ID":                       17,
+	"INVALID_CUSTOMER_ID":                   16,
+	"OPERATION_REQUIRED":                    5,
+	"RESOURCE_NOT_FOUND":                    6,
+	"INVALID_PAGE_TOKEN":                    7,
+	"EXPIRED_PAGE_TOKEN":                    8,
+	"REQUIRED_FIELD_MISSING":                9,
+	"IMMUTABLE_FIELD":                       11,
+	"TOO_MANY_MUTATE_OPERATIONS":            13,
+	"CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT": 14,
+	"CANNOT_MODIFY_FOREIGN_FIELD":           15,
+	"INVALID_ENUM_VALUE":                    18,
+	"DEVELOPER_TOKEN_PARAMETER_MISSING":     19,
+	"LOGIN_CUSTOMER_ID_PARAMETER_MISSING":   20,
+}
+
+func (x RequestErrorEnum_RequestError) String() string {
+	return proto.EnumName(RequestErrorEnum_RequestError_name, int32(x))
+}
+func (RequestErrorEnum_RequestError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_request_error_7fde1cab6fa86182, []int{0, 0}
+}
+
+// Container for enum describing possible request errors.
+type RequestErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RequestErrorEnum) Reset()         { *m = RequestErrorEnum{} }
+func (m *RequestErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*RequestErrorEnum) ProtoMessage()    {}
+func (*RequestErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_request_error_7fde1cab6fa86182, []int{0}
+}
+func (m *RequestErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RequestErrorEnum.Unmarshal(m, b)
+}
+func (m *RequestErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RequestErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *RequestErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RequestErrorEnum.Merge(dst, src)
+}
+func (m *RequestErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_RequestErrorEnum.Size(m)
+}
+func (m *RequestErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_RequestErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RequestErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*RequestErrorEnum)(nil), "google.ads.googleads.v0.errors.RequestErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.RequestErrorEnum_RequestError", RequestErrorEnum_RequestError_name, RequestErrorEnum_RequestError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/request_error.proto", fileDescriptor_request_error_7fde1cab6fa86182)
+}
+
+var fileDescriptor_request_error_7fde1cab6fa86182 = []byte{
+	// 503 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x51, 0x6f, 0xd3, 0x3c,
+	0x14, 0xfd, 0xba, 0xee, 0xdb, 0xc0, 0x05, 0xea, 0xb9, 0xb0, 0x89, 0x4d, 0x2a, 0xa2, 0x68, 0x42,
+	0xbc, 0xa4, 0x15, 0x3c, 0xf2, 0xe4, 0xc4, 0x37, 0x91, 0xb5, 0xc4, 0x0e, 0x4e, 0x5c, 0x56, 0x54,
+	0xc9, 0x2a, 0xb4, 0x8a, 0x90, 0xb6, 0x66, 0x24, 0xdb, 0x7e, 0x05, 0xbf, 0x82, 0x47, 0xfe, 0x08,
+	0x12, 0x7f, 0x88, 0x57, 0xe4, 0xba, 0x0d, 0x15, 0x02, 0x9e, 0x72, 0x73, 0xee, 0x39, 0xf7, 0xdc,
+	0x6b, 0x1d, 0xf4, 0xb2, 0x28, 0xcb, 0xe2, 0x62, 0x31, 0x9c, 0xcd, 0xeb, 0xa1, 0x2b, 0x6d, 0x75,
+	0x3b, 0x1a, 0x2e, 0xaa, 0xaa, 0xac, 0xea, 0x61, 0xb5, 0xf8, 0x74, 0xb3, 0xa8, 0xaf, 0xcd, 0xea,
+	0xd7, 0xbb, 0xaa, 0xca, 0xeb, 0x92, 0xf4, 0x1d, 0xd1, 0x9b, 0xcd, 0x6b, 0xaf, 0xd1, 0x78, 0xb7,
+	0x23, 0xcf, 0x69, 0x06, 0x9f, 0x77, 0x11, 0x56, 0x4e, 0x07, 0x16, 0x81, 0xe5, 0xcd, 0xe5, 0xe0,
+	0x47, 0x1b, 0xdd, 0xdb, 0x06, 0x49, 0x17, 0x75, 0xb4, 0xc8, 0x52, 0x08, 0x78, 0xc8, 0x81, 0xe1,
+	0xff, 0x48, 0x07, 0xed, 0x6b, 0x71, 0x26, 0xe4, 0x5b, 0x81, 0x5b, 0xe4, 0x31, 0x7a, 0xa4, 0x20,
+	0x93, 0x5a, 0x05, 0x60, 0x04, 0x4d, 0xc0, 0x24, 0x3c, 0xcb, 0xb8, 0x88, 0x70, 0x9b, 0x9c, 0xa0,
+	0xa3, 0xdf, 0x5a, 0x34, 0x0e, 0xa5, 0x4a, 0x80, 0xe1, 0x5d, 0xd2, 0x43, 0x5d, 0x9f, 0x32, 0xd3,
+	0x10, 0x38, 0xc3, 0x07, 0xe4, 0x08, 0xf5, 0xb8, 0x18, 0xd3, 0x98, 0x33, 0x13, 0xe8, 0x2c, 0x97,
+	0x09, 0x28, 0xdb, 0xc0, 0xe4, 0x10, 0x11, 0x99, 0x82, 0xa2, 0x39, 0x97, 0xc2, 0x28, 0x78, 0xa3,
+	0xb9, 0x02, 0x86, 0xff, 0xb7, 0xf8, 0x2f, 0x0b, 0x99, 0x9b, 0x50, 0x6a, 0xc1, 0xf0, 0x9e, 0xc5,
+	0x37, 0x83, 0x52, 0x1a, 0x81, 0xc9, 0xe5, 0x19, 0x08, 0xbc, 0x6f, 0x71, 0x38, 0x4f, 0xad, 0x78,
+	0x1b, 0xbf, 0x43, 0x8e, 0xd1, 0xe1, 0x66, 0xaa, 0x09, 0x39, 0xc4, 0xac, 0x39, 0xe3, 0xae, 0xdd,
+	0x94, 0x27, 0x89, 0xce, 0xa9, 0x1f, 0x83, 0x6b, 0xe2, 0x0e, 0xe9, 0xa3, 0xe3, 0x5c, 0x4a, 0x93,
+	0x50, 0x31, 0x31, 0xb6, 0x97, 0x83, 0x69, 0x16, 0xcc, 0xf0, 0x7d, 0xf2, 0x02, 0x9d, 0x06, 0x54,
+	0xd8, 0x95, 0x7c, 0x30, 0x70, 0x0e, 0x81, 0xce, 0x81, 0x19, 0x7f, 0x62, 0x15, 0x34, 0x02, 0x65,
+	0x68, 0x10, 0x48, 0x2d, 0x72, 0xfc, 0x80, 0x3c, 0x41, 0x27, 0x6b, 0x6a, 0x22, 0x19, 0x0f, 0x27,
+	0x26, 0x94, 0x0a, 0x78, 0x24, 0xd6, 0x5e, 0xdd, 0xed, 0x63, 0x40, 0xe8, 0xc4, 0x8c, 0x69, 0xac,
+	0x01, 0x13, 0x72, 0x8a, 0x9e, 0x32, 0x18, 0x43, 0x6c, 0x8d, 0xdd, 0x25, 0x26, 0xa5, 0x8a, 0x26,
+	0x90, 0x83, 0x6a, 0xf6, 0xef, 0x91, 0xe7, 0xe8, 0x59, 0x2c, 0x23, 0x2e, 0xb6, 0x9f, 0xf4, 0x0f,
+	0xc4, 0x87, 0xfe, 0xb7, 0x16, 0x1a, 0x7c, 0x28, 0x2f, 0xbd, 0x7f, 0xa7, 0xc6, 0x3f, 0xd8, 0x4e,
+	0x47, 0x6a, 0x83, 0x96, 0xb6, 0xde, 0xb1, 0xb5, 0xa8, 0x28, 0x2f, 0x66, 0xcb, 0xc2, 0x2b, 0xab,
+	0x62, 0x58, 0x2c, 0x96, 0xab, 0x18, 0x6e, 0xe2, 0x7a, 0xf5, 0xb1, 0xfe, 0x5b, 0x7a, 0x5f, 0xbb,
+	0xcf, 0x97, 0x9d, 0x76, 0x44, 0xe9, 0xd7, 0x9d, 0x7e, 0xe4, 0x86, 0xd1, 0x79, 0xed, 0xb9, 0xd2,
+	0x56, 0xe3, 0x91, 0xb7, 0xb2, 0xac, 0xbf, 0x6f, 0x08, 0x53, 0x3a, 0xaf, 0xa7, 0x0d, 0x61, 0x3a,
+	0x1e, 0x4d, 0x1d, 0xe1, 0xfd, 0xde, 0xca, 0xf8, 0xd5, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58,
+	0xab, 0xbb, 0xa7, 0x35, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/resource_access_denied_error.pb.go b/googleapis/ads/googleads/v0/errors/resource_access_denied_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3e79a521d28154acf44a25ec7160e32db7968963
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/resource_access_denied_error.pb.go
@@ -0,0 +1,111 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/resource_access_denied_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible resource access denied errors.
+type ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError int32
+
+const (
+	// Enum unspecified.
+	ResourceAccessDeniedErrorEnum_UNSPECIFIED ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError = 0
+	// The received error code is not known in this version.
+	ResourceAccessDeniedErrorEnum_UNKNOWN ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError = 1
+	// User did not have write access.
+	ResourceAccessDeniedErrorEnum_WRITE_ACCESS_DENIED ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError = 3
+)
+
+var ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	3: "WRITE_ACCESS_DENIED",
+}
+var ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"UNKNOWN":             1,
+	"WRITE_ACCESS_DENIED": 3,
+}
+
+func (x ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError) String() string {
+	return proto.EnumName(ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_name, int32(x))
+}
+func (ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_resource_access_denied_error_b80c60a02ee829fa, []int{0, 0}
+}
+
+// Container for enum describing possible resource access denied errors.
+type ResourceAccessDeniedErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResourceAccessDeniedErrorEnum) Reset()         { *m = ResourceAccessDeniedErrorEnum{} }
+func (m *ResourceAccessDeniedErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ResourceAccessDeniedErrorEnum) ProtoMessage()    {}
+func (*ResourceAccessDeniedErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_resource_access_denied_error_b80c60a02ee829fa, []int{0}
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceAccessDeniedErrorEnum.Unmarshal(m, b)
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceAccessDeniedErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *ResourceAccessDeniedErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceAccessDeniedErrorEnum.Merge(dst, src)
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ResourceAccessDeniedErrorEnum.Size(m)
+}
+func (m *ResourceAccessDeniedErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceAccessDeniedErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResourceAccessDeniedErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ResourceAccessDeniedErrorEnum)(nil), "google.ads.googleads.v0.errors.ResourceAccessDeniedErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError", ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_name, ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/resource_access_denied_error.proto", fileDescriptor_resource_access_denied_error_b80c60a02ee829fa)
+}
+
+var fileDescriptor_resource_access_denied_error_b80c60a02ee829fa = []byte{
+	// 275 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
+	0x18, 0xc7, 0xed, 0x06, 0x0a, 0xd9, 0xc1, 0x51, 0x0f, 0xe2, 0xc1, 0x1e, 0xfa, 0x00, 0x69, 0xc1,
+	0xa3, 0xa7, 0xac, 0x8d, 0xa3, 0x08, 0xb1, 0xb4, 0x6e, 0x03, 0x29, 0x84, 0xda, 0x84, 0x30, 0xd8,
+	0x9a, 0x91, 0xcf, 0xed, 0x81, 0x3c, 0xfa, 0x28, 0x9e, 0x7d, 0x20, 0x49, 0xb2, 0xed, 0xd6, 0x9d,
+	0xfa, 0x87, 0xef, 0xd7, 0xdf, 0x3f, 0xdf, 0x87, 0x88, 0xd2, 0x5a, 0x6d, 0x64, 0xd2, 0x0a, 0x48,
+	0x7c, 0xb4, 0xe9, 0x90, 0x26, 0xd2, 0x18, 0x6d, 0x20, 0x31, 0x12, 0xf4, 0xde, 0x74, 0x92, 0xb7,
+	0x5d, 0x27, 0x01, 0xb8, 0x90, 0xfd, 0x5a, 0x0a, 0xee, 0xa6, 0x78, 0x67, 0xf4, 0x97, 0x0e, 0x23,
+	0xff, 0x1f, 0x6e, 0x05, 0xe0, 0xb3, 0x02, 0x1f, 0x52, 0xec, 0x15, 0x31, 0xa0, 0xc7, 0xea, 0x68,
+	0x21, 0x4e, 0x92, 0x3b, 0x07, 0xb5, 0x53, 0xda, 0xef, 0xb7, 0x71, 0x85, 0x1e, 0x06, 0x81, 0xf0,
+	0x16, 0x4d, 0x16, 0xac, 0x2e, 0x69, 0x56, 0xbc, 0x14, 0x34, 0x9f, 0x5e, 0x85, 0x13, 0x74, 0xb3,
+	0x60, 0xaf, 0xec, 0x6d, 0xc5, 0xa6, 0x41, 0x78, 0x8f, 0xee, 0x56, 0x55, 0xf1, 0x4e, 0x39, 0xc9,
+	0x32, 0x5a, 0xd7, 0x3c, 0xa7, 0xcc, 0x52, 0xe3, 0xd9, 0x5f, 0x80, 0xe2, 0x4e, 0x6f, 0xf1, 0xe5,
+	0xb7, 0xcd, 0xa2, 0xc1, 0xe2, 0xd2, 0xee, 0x56, 0x06, 0x1f, 0xf9, 0xd1, 0xa0, 0xf4, 0xa6, 0xed,
+	0x15, 0xd6, 0x46, 0x25, 0x4a, 0xf6, 0x6e, 0xf3, 0xd3, 0xc1, 0x76, 0x6b, 0x18, 0xba, 0xdf, 0xb3,
+	0xff, 0x7c, 0x8f, 0xc6, 0x73, 0x42, 0x7e, 0x46, 0xd1, 0xdc, 0xcb, 0x88, 0x00, 0xec, 0xa3, 0x4d,
+	0xcb, 0x14, 0xbb, 0x4a, 0xf8, 0x3d, 0x01, 0x0d, 0x11, 0xd0, 0x9c, 0x81, 0x66, 0x99, 0x36, 0x1e,
+	0xf8, 0xbc, 0x76, 0xc5, 0x4f, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x64, 0xcb, 0xa6, 0x9e, 0xb7,
+	0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/resource_count_limit_exceeded_error.pb.go b/googleapis/ads/googleads/v0/errors/resource_count_limit_exceeded_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..28230b158074e46b25c88f0b639b1fbdddb28e30
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/resource_count_limit_exceeded_error.pb.go
@@ -0,0 +1,167 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/resource_count_limit_exceeded_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible resource count limit exceeded errors.
+type ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError int32
+
+const (
+	// Enum unspecified.
+	ResourceCountLimitExceededErrorEnum_UNSPECIFIED ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 0
+	// The received error code is not known in this version.
+	ResourceCountLimitExceededErrorEnum_UNKNOWN ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 1
+	// Indicates that this request would exceed the number of allowed resources
+	// for the Google Ads account. The exact resource type and limit being
+	// checked
+	// can be inferred from accountLimitType.
+	ResourceCountLimitExceededErrorEnum_ACCOUNT_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 2
+	// Indicates that this request would exceed the number of allowed resources
+	// in a Campaign. The exact resource type and limit being checked can be
+	// inferred from accountLimitType, and the numeric id of the
+	// Campaign involved is given by enclosingId.
+	ResourceCountLimitExceededErrorEnum_CAMPAIGN_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 3
+	// Indicates that this request would exceed the number of allowed resources
+	// in an ad group. The exact resource type and limit being checked can be
+	// inferred from accountLimitType, and the numeric id of the
+	// ad group involved is given by enclosingId.
+	ResourceCountLimitExceededErrorEnum_ADGROUP_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 4
+	// Indicates that this request would exceed the number of allowed resources
+	// in an ad group ad. The exact resource type and limit being checked can
+	// be inferred from accountLimitType, and the enclosingId
+	// contains the ad group id followed by the ad id, separated by a single
+	// comma (,).
+	ResourceCountLimitExceededErrorEnum_AD_GROUP_AD_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 5
+	// Indicates that this request would exceed the number of allowed resources
+	// in an ad group criterion. The exact resource type and limit being checked
+	// can be inferred from accountLimitType, and the
+	// enclosingId contains the ad group id followed by the
+	// criterion id, separated by a single comma (,).
+	ResourceCountLimitExceededErrorEnum_AD_GROUP_CRITERION_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 6
+	// Indicates that this request would exceed the number of allowed resources
+	// in this shared set. The exact resource type and limit being checked can
+	// be inferred from accountLimitType, and the numeric id of the
+	// shared set involved is given by enclosingId.
+	ResourceCountLimitExceededErrorEnum_SHARED_SET_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 7
+	// Exceeds a limit related to a matching function.
+	ResourceCountLimitExceededErrorEnum_MATCHING_FUNCTION_LIMIT ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 8
+	// The response for this request would exceed the maximum number of rows
+	// that can be returned.
+	ResourceCountLimitExceededErrorEnum_RESPONSE_ROW_LIMIT_EXCEEDED ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError = 9
+)
+
+var ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ACCOUNT_LIMIT",
+	3: "CAMPAIGN_LIMIT",
+	4: "ADGROUP_LIMIT",
+	5: "AD_GROUP_AD_LIMIT",
+	6: "AD_GROUP_CRITERION_LIMIT",
+	7: "SHARED_SET_LIMIT",
+	8: "MATCHING_FUNCTION_LIMIT",
+	9: "RESPONSE_ROW_LIMIT_EXCEEDED",
+}
+var ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_value = map[string]int32{
+	"UNSPECIFIED":                 0,
+	"UNKNOWN":                     1,
+	"ACCOUNT_LIMIT":               2,
+	"CAMPAIGN_LIMIT":              3,
+	"ADGROUP_LIMIT":               4,
+	"AD_GROUP_AD_LIMIT":           5,
+	"AD_GROUP_CRITERION_LIMIT":    6,
+	"SHARED_SET_LIMIT":            7,
+	"MATCHING_FUNCTION_LIMIT":     8,
+	"RESPONSE_ROW_LIMIT_EXCEEDED": 9,
+}
+
+func (x ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError) String() string {
+	return proto.EnumName(ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_name, int32(x))
+}
+func (ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_resource_count_limit_exceeded_error_f3bc7c2ea6e6b0d7, []int{0, 0}
+}
+
+// Container for enum describing possible resource count limit exceeded errors.
+type ResourceCountLimitExceededErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResourceCountLimitExceededErrorEnum) Reset()         { *m = ResourceCountLimitExceededErrorEnum{} }
+func (m *ResourceCountLimitExceededErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*ResourceCountLimitExceededErrorEnum) ProtoMessage()    {}
+func (*ResourceCountLimitExceededErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_resource_count_limit_exceeded_error_f3bc7c2ea6e6b0d7, []int{0}
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Unmarshal(m, b)
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *ResourceCountLimitExceededErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Merge(dst, src)
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_ResourceCountLimitExceededErrorEnum.Size(m)
+}
+func (m *ResourceCountLimitExceededErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceCountLimitExceededErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResourceCountLimitExceededErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*ResourceCountLimitExceededErrorEnum)(nil), "google.ads.googleads.v0.errors.ResourceCountLimitExceededErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError", ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_name, ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/resource_count_limit_exceeded_error.proto", fileDescriptor_resource_count_limit_exceeded_error_f3bc7c2ea6e6b0d7)
+}
+
+var fileDescriptor_resource_count_limit_exceeded_error_f3bc7c2ea6e6b0d7 = []byte{
+	// 392 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x4f, 0x8b, 0xd3, 0x40,
+	0x18, 0xc6, 0x6d, 0x56, 0x77, 0x75, 0x16, 0x35, 0x3b, 0x28, 0x0a, 0x2b, 0xbb, 0x50, 0x3d, 0x4f,
+	0x02, 0x1e, 0x3d, 0xcd, 0xce, 0xcc, 0xa6, 0x83, 0xdb, 0x49, 0xc8, 0x9f, 0x56, 0x24, 0x30, 0xd4,
+	0x64, 0x08, 0x85, 0x36, 0x53, 0x32, 0x6d, 0xf1, 0xec, 0x47, 0xf1, 0xd8, 0x8f, 0xe2, 0x47, 0xf0,
+	0xd3, 0x48, 0x32, 0x49, 0x3d, 0x69, 0x4f, 0x79, 0x78, 0xf8, 0xcd, 0xef, 0x85, 0xf7, 0x0d, 0x98,
+	0x54, 0x5a, 0x57, 0x2b, 0xe5, 0x2d, 0x4a, 0xe3, 0xd9, 0xd8, 0xa6, 0xbd, 0xef, 0xa9, 0xa6, 0xd1,
+	0x8d, 0xf1, 0x1a, 0x65, 0xf4, 0xae, 0x29, 0x94, 0x2c, 0xf4, 0xae, 0xde, 0xca, 0xd5, 0x72, 0xbd,
+	0xdc, 0x4a, 0xf5, 0xbd, 0x50, 0xaa, 0x54, 0xa5, 0xec, 0x20, 0xb4, 0x69, 0xf4, 0x56, 0xc3, 0x1b,
+	0xfb, 0x1c, 0x2d, 0x4a, 0x83, 0x8e, 0x26, 0xb4, 0xf7, 0x91, 0x35, 0x8d, 0x0f, 0x0e, 0x78, 0x1f,
+	0xf7, 0x36, 0xd2, 0xca, 0x1e, 0x5a, 0x17, 0xeb, 0x55, 0xac, 0x85, 0x58, 0xbd, 0x5b, 0x8f, 0x7f,
+	0x38, 0xe0, 0xf6, 0x04, 0x07, 0x5f, 0x82, 0xcb, 0x4c, 0x24, 0x11, 0x23, 0xfc, 0x9e, 0x33, 0xea,
+	0x3e, 0x82, 0x97, 0xe0, 0x22, 0x13, 0x9f, 0x45, 0x38, 0x17, 0xee, 0x08, 0x5e, 0x81, 0xe7, 0x98,
+	0x90, 0x30, 0x13, 0xa9, 0x7c, 0xe0, 0x53, 0x9e, 0xba, 0x0e, 0x84, 0xe0, 0x05, 0xc1, 0xd3, 0x08,
+	0xf3, 0x40, 0xf4, 0xdd, 0x59, 0x87, 0xd1, 0x20, 0x0e, 0xb3, 0xa8, 0xaf, 0x1e, 0xc3, 0xd7, 0xe0,
+	0x0a, 0x53, 0x69, 0x3b, 0x4c, 0xfb, 0xfa, 0x09, 0x7c, 0x07, 0xde, 0x1e, 0x6b, 0x12, 0xf3, 0x94,
+	0xc5, 0x3c, 0x1c, 0x3c, 0xe7, 0xf0, 0x15, 0x70, 0x93, 0x09, 0x8e, 0x19, 0x95, 0x09, 0x1b, 0x26,
+	0x5e, 0xc0, 0x6b, 0xf0, 0x66, 0x8a, 0x53, 0x32, 0xe1, 0x22, 0x90, 0xf7, 0x99, 0x20, 0xe9, 0xdf,
+	0x27, 0x4f, 0xe1, 0x2d, 0xb8, 0x8e, 0x59, 0x12, 0x85, 0x22, 0x61, 0x32, 0x0e, 0xe7, 0xb6, 0x97,
+	0xec, 0x0b, 0x61, 0x8c, 0x32, 0xea, 0x3e, 0xbb, 0xfb, 0x3d, 0x02, 0xe3, 0x42, 0xaf, 0xd1, 0xff,
+	0x77, 0x7a, 0xf7, 0xe1, 0xc4, 0xa2, 0xa2, 0xf6, 0x32, 0xd1, 0xe8, 0x2b, 0xed, 0x3d, 0x95, 0x5e,
+	0x2d, 0xea, 0x0a, 0xe9, 0xa6, 0xf2, 0x2a, 0x55, 0x77, 0x77, 0x1b, 0xae, 0xbe, 0x59, 0x9a, 0x7f,
+	0xfd, 0x04, 0x9f, 0xec, 0xe7, 0xa7, 0x73, 0x16, 0x60, 0x7c, 0x70, 0x6e, 0x02, 0x2b, 0xc3, 0xa5,
+	0x41, 0x36, 0xb6, 0x69, 0xe6, 0xa3, 0x6e, 0xa4, 0xf9, 0x35, 0x00, 0x39, 0x2e, 0x4d, 0x7e, 0x04,
+	0xf2, 0x99, 0x9f, 0x5b, 0xe0, 0xdb, 0x79, 0x37, 0xf8, 0xe3, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0xd2, 0x18, 0x76, 0xc6, 0x7c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/setting_error.pb.go b/googleapis/ads/googleads/v0/errors/setting_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0669c7ab6b2d427df363991af9919bdf59eb60d2
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/setting_error.pb.go
@@ -0,0 +1,208 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/setting_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible setting errors.
+type SettingErrorEnum_SettingError int32
+
+const (
+	// Enum unspecified.
+	SettingErrorEnum_UNSPECIFIED SettingErrorEnum_SettingError = 0
+	// The received error code is not known in this version.
+	SettingErrorEnum_UNKNOWN SettingErrorEnum_SettingError = 1
+	// The campaign setting is not available for this Google Ads account.
+	SettingErrorEnum_SETTING_TYPE_IS_NOT_AVAILABLE SettingErrorEnum_SettingError = 3
+	// The setting is not compatible with the campaign.
+	SettingErrorEnum_SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN SettingErrorEnum_SettingError = 4
+	// The supplied TargetingSetting contains an invalid CriterionTypeGroup. See
+	// CriterionTypeGroup documentation for CriterionTypeGroups allowed
+	// in Campaign or AdGroup TargetingSettings.
+	SettingErrorEnum_TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP SettingErrorEnum_SettingError = 5
+	// TargetingSetting must not explicitly
+	// set any of the Demographic CriterionTypeGroups (AGE_RANGE, GENDER,
+	// PARENT, INCOME_RANGE) to false (it's okay to not set them at all, in
+	// which case the system will set them to true automatically).
+	SettingErrorEnum_TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL SettingErrorEnum_SettingError = 6
+	// TargetingSetting cannot change any of
+	// the Demographic CriterionTypeGroups (AGE_RANGE, GENDER, PARENT,
+	// INCOME_RANGE) from true to false.
+	SettingErrorEnum_TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP SettingErrorEnum_SettingError = 7
+	// At least one feed id should be present.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT SettingErrorEnum_SettingError = 8
+	// The supplied DynamicSearchAdsSetting contains an invalid domain name.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME SettingErrorEnum_SettingError = 9
+	// The supplied DynamicSearchAdsSetting contains a subdomain name.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME SettingErrorEnum_SettingError = 10
+	// The supplied DynamicSearchAdsSetting contains an invalid language code.
+	SettingErrorEnum_DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE SettingErrorEnum_SettingError = 11
+	// TargetingSettings in search campaigns should not have
+	// CriterionTypeGroup.PLACEMENT set to targetAll.
+	SettingErrorEnum_TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN SettingErrorEnum_SettingError = 12
+	// Duplicate description in universal app setting description field.
+	SettingErrorEnum_UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION SettingErrorEnum_SettingError = 13
+	// Description line width is too long in universal app setting description
+	// field.
+	SettingErrorEnum_UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG SettingErrorEnum_SettingError = 14
+	// Universal app setting appId field cannot be modified for COMPLETE
+	// campaigns.
+	SettingErrorEnum_UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED SettingErrorEnum_SettingError = 15
+	// YoutubeVideoMediaIds in universal app setting cannot exceed size limit.
+	SettingErrorEnum_TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN SettingErrorEnum_SettingError = 16
+	// ImageMediaIds in universal app setting cannot exceed size limit.
+	SettingErrorEnum_TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN SettingErrorEnum_SettingError = 17
+	// Media is incompatible for universal app campaign.
+	SettingErrorEnum_MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN SettingErrorEnum_SettingError = 18
+	// Too many exclamation marks in universal app campaign ad text ideas.
+	SettingErrorEnum_TOO_MANY_EXCLAMATION_MARKS SettingErrorEnum_SettingError = 19
+)
+
+var SettingErrorEnum_SettingError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	3:  "SETTING_TYPE_IS_NOT_AVAILABLE",
+	4:  "SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN",
+	5:  "TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP",
+	6:  "TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL",
+	7:  "TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP",
+	8:  "DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT",
+	9:  "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME",
+	10: "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME",
+	11: "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE",
+	12: "TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN",
+	13: "UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION",
+	14: "UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG",
+	15: "UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED",
+	16: "TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN",
+	17: "TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN",
+	18: "MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN",
+	19: "TOO_MANY_EXCLAMATION_MARKS",
+}
+var SettingErrorEnum_SettingError_value = map[string]int32{
+	"UNSPECIFIED":                   0,
+	"UNKNOWN":                       1,
+	"SETTING_TYPE_IS_NOT_AVAILABLE": 3,
+	"SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN":                                             4,
+	"TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP":                                  5,
+	"TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL":            6,
+	"TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP": 7,
+	"DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT":                          8,
+	"DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME":                                  9,
+	"DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME":                                       10,
+	"DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE":                                11,
+	"TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN":                               12,
+	"UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION":                                     13,
+	"UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG":                           14,
+	"UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED":                                 15,
+	"TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN":                                     16,
+	"TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN":                                       17,
+	"MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN":                                            18,
+	"TOO_MANY_EXCLAMATION_MARKS":                                                               19,
+}
+
+func (x SettingErrorEnum_SettingError) String() string {
+	return proto.EnumName(SettingErrorEnum_SettingError_name, int32(x))
+}
+func (SettingErrorEnum_SettingError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_setting_error_eba8811c43ea9e48, []int{0, 0}
+}
+
+// Container for enum describing possible setting errors.
+type SettingErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SettingErrorEnum) Reset()         { *m = SettingErrorEnum{} }
+func (m *SettingErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*SettingErrorEnum) ProtoMessage()    {}
+func (*SettingErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_setting_error_eba8811c43ea9e48, []int{0}
+}
+func (m *SettingErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SettingErrorEnum.Unmarshal(m, b)
+}
+func (m *SettingErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SettingErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *SettingErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SettingErrorEnum.Merge(dst, src)
+}
+func (m *SettingErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_SettingErrorEnum.Size(m)
+}
+func (m *SettingErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SettingErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SettingErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SettingErrorEnum)(nil), "google.ads.googleads.v0.errors.SettingErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.SettingErrorEnum_SettingError", SettingErrorEnum_SettingError_name, SettingErrorEnum_SettingError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/setting_error.proto", fileDescriptor_setting_error_eba8811c43ea9e48)
+}
+
+var fileDescriptor_setting_error_eba8811c43ea9e48 = []byte{
+	// 655 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdf, 0x6f, 0x23, 0x35,
+	0x10, 0xc7, 0xe9, 0x1d, 0xdc, 0x15, 0xf7, 0xe0, 0x7c, 0xe6, 0x0d, 0x89, 0x4a, 0xf4, 0x19, 0x36,
+	0xe1, 0x40, 0x50, 0x28, 0x14, 0xcd, 0xae, 0x27, 0x1b, 0xab, 0x5e, 0x7b, 0x59, 0x7b, 0xd3, 0x06,
+	0x45, 0x1a, 0x15, 0x12, 0x45, 0x95, 0xda, 0x6c, 0x95, 0x2d, 0xfd, 0x83, 0x78, 0x83, 0x3f, 0x82,
+	0x57, 0x24, 0xfe, 0x2a, 0xe4, 0xdd, 0x66, 0x1b, 0xa9, 0xe9, 0x8f, 0x7b, 0xca, 0xc4, 0xfe, 0x7e,
+	0x66, 0xbc, 0x5f, 0x8f, 0x87, 0xbd, 0x9d, 0x57, 0xd5, 0xfc, 0x7c, 0xd6, 0x3b, 0x9d, 0xd6, 0xbd,
+	0x36, 0x0c, 0xd1, 0x75, 0xbf, 0x37, 0x5b, 0x2e, 0xab, 0x65, 0xdd, 0xab, 0x67, 0x57, 0x57, 0x67,
+	0x8b, 0x39, 0x35, 0x7f, 0xa3, 0xcb, 0x65, 0x75, 0x55, 0x89, 0xdd, 0x56, 0x18, 0x9d, 0x4e, 0xeb,
+	0xa8, 0x63, 0xa2, 0xeb, 0x7e, 0xd4, 0x32, 0x7b, 0xff, 0x6c, 0x33, 0xee, 0x5a, 0x0e, 0xc3, 0x0a,
+	0x2e, 0xfe, 0xb8, 0xd8, 0xfb, 0x6b, 0x9b, 0xbd, 0x5a, 0x5f, 0x14, 0xaf, 0xd9, 0x4e, 0x69, 0x5c,
+	0x8e, 0x89, 0x1a, 0x28, 0x94, 0xfc, 0x3d, 0xb1, 0xc3, 0x5e, 0x96, 0xe6, 0xc8, 0xd8, 0x63, 0xc3,
+	0xb7, 0xc4, 0xe7, 0xec, 0x33, 0x87, 0xde, 0x2b, 0x93, 0x92, 0x1f, 0xe7, 0x48, 0xca, 0x91, 0xb1,
+	0x9e, 0x60, 0x04, 0x4a, 0x43, 0xac, 0x91, 0x3f, 0x17, 0x7d, 0xf6, 0xc5, 0x26, 0x49, 0x62, 0xb3,
+	0x1c, 0xbc, 0x8a, 0x35, 0xd2, 0xb1, 0xf2, 0x43, 0x4a, 0x20, 0xcb, 0x41, 0xa5, 0x86, 0xbf, 0x2f,
+	0x0e, 0xd8, 0x77, 0x1e, 0x8a, 0x14, 0x1b, 0x66, 0xc5, 0x26, 0xd6, 0x78, 0x50, 0xc6, 0x91, 0x32,
+	0x23, 0xd0, 0x4a, 0x52, 0x52, 0x28, 0x8f, 0x85, 0xb2, 0xa6, 0x4d, 0x9b, 0x16, 0xb6, 0xcc, 0xf9,
+	0x07, 0xe2, 0x17, 0x96, 0xdd, 0x85, 0x25, 0x66, 0x36, 0x2d, 0x20, 0x1f, 0xaa, 0x64, 0x23, 0xe7,
+	0x28, 0x2b, 0x9d, 0xa7, 0x18, 0x03, 0x41, 0xde, 0x52, 0x9b, 0x82, 0x40, 0x6b, 0xfe, 0x42, 0x4c,
+	0xd8, 0xc9, 0x86, 0xf3, 0x80, 0x69, 0x3e, 0x63, 0x08, 0x26, 0xc5, 0x35, 0x7d, 0xa0, 0x07, 0xa0,
+	0x1d, 0xd2, 0xc0, 0x16, 0x8f, 0x16, 0xe6, 0x2f, 0x45, 0xc2, 0x7e, 0x96, 0x63, 0x03, 0x99, 0x4a,
+	0xc8, 0x21, 0x14, 0xc9, 0x90, 0x40, 0xba, 0xae, 0x0c, 0x78, 0xd2, 0x08, 0xce, 0x93, 0x35, 0x48,
+	0x03, 0x44, 0x49, 0x4a, 0x76, 0x87, 0xcd, 0x0b, 0x74, 0x68, 0x3c, 0xdf, 0x0e, 0x96, 0x3d, 0x90,
+	0xe4, 0x8e, 0x77, 0xd2, 0x66, 0xa0, 0x0c, 0x19, 0xc8, 0x90, 0x7f, 0x28, 0xbe, 0x65, 0x6f, 0x9f,
+	0x02, 0xbb, 0x32, 0x5e, 0xe7, 0x98, 0xf8, 0x89, 0x7d, 0xff, 0x2e, 0x45, 0x35, 0x98, 0xb4, 0x84,
+	0x14, 0x29, 0xb1, 0x12, 0xf9, 0x8e, 0x38, 0x64, 0x3f, 0xac, 0xd9, 0xb6, 0xea, 0x1c, 0xad, 0xed,
+	0x31, 0xca, 0xc6, 0xbc, 0x5c, 0x43, 0x82, 0x19, 0x1a, 0x4f, 0xca, 0xac, 0x2a, 0x74, 0x6d, 0xf2,
+	0x4a, 0xec, 0xb3, 0x6f, 0x4a, 0xa3, 0x46, 0x58, 0x38, 0xd0, 0x04, 0x79, 0xde, 0xed, 0xdd, 0x5e,
+	0x7b, 0x99, 0x6b, 0x95, 0x80, 0x47, 0x92, 0xe8, 0x92, 0x42, 0xe5, 0x5e, 0x59, 0xc3, 0x3f, 0x12,
+	0x31, 0x3b, 0x7c, 0x8c, 0xbc, 0xd5, 0x93, 0x56, 0x26, 0xf4, 0xa8, 0xf4, 0x43, 0xf2, 0xd6, 0x92,
+	0xb6, 0x26, 0xe5, 0x1f, 0x8b, 0x1f, 0xd9, 0xfe, 0x23, 0x39, 0xc2, 0x62, 0xe8, 0xd3, 0xb6, 0x51,
+	0x62, 0xa4, 0xcc, 0xca, 0xf6, 0x11, 0xbd, 0x0e, 0x67, 0x0f, 0xb9, 0x32, 0x30, 0x63, 0x1a, 0xdb,
+	0xd2, 0x97, 0x61, 0x1b, 0xa5, 0x02, 0x52, 0x32, 0x38, 0x46, 0x9b, 0x73, 0x73, 0x1e, 0x2e, 0xab,
+	0x23, 0x55, 0x16, 0xec, 0x7c, 0x0a, 0xf7, 0x46, 0x7c, 0xc5, 0xbe, 0xbc, 0x11, 0x9a, 0xb5, 0xa7,
+	0x17, 0x6c, 0xbe, 0x07, 0x11, 0x62, 0x97, 0x7d, 0xda, 0x95, 0xc2, 0x93, 0x44, 0x43, 0x06, 0x8d,
+	0x21, 0x19, 0x14, 0x47, 0x8e, 0x7f, 0x12, 0xff, 0xbb, 0xc5, 0xf6, 0x7e, 0xaf, 0x2e, 0xa2, 0x87,
+	0xe7, 0x4c, 0xfc, 0x66, 0x7d, 0x9e, 0xe4, 0x61, 0x34, 0xe5, 0x5b, 0xbf, 0xca, 0x1b, 0x68, 0x5e,
+	0x9d, 0x9f, 0x2e, 0xe6, 0x51, 0xb5, 0x9c, 0xf7, 0xe6, 0xb3, 0x45, 0x33, 0xb8, 0x56, 0x03, 0xee,
+	0xf2, 0xac, 0xbe, 0x6f, 0xde, 0x1d, 0xb4, 0x3f, 0x7f, 0x3e, 0x7b, 0x9e, 0x02, 0xfc, 0xfd, 0x6c,
+	0x37, 0x6d, 0x93, 0xc1, 0xb4, 0x8e, 0xda, 0x30, 0x44, 0xa3, 0x7e, 0xd4, 0x94, 0xac, 0xff, 0x5b,
+	0x09, 0x26, 0x30, 0xad, 0x27, 0x9d, 0x60, 0x32, 0xea, 0x4f, 0x5a, 0xc1, 0x6f, 0x2f, 0x9a, 0xc2,
+	0x5f, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xff, 0x66, 0x02, 0xb2, 0x67, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/shared_criterion_error.pb.go b/googleapis/ads/googleads/v0/errors/shared_criterion_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3aa3e173571f439112bde62c339982e4a59c1738
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/shared_criterion_error.pb.go
@@ -0,0 +1,112 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/shared_criterion_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible shared criterion errors.
+type SharedCriterionErrorEnum_SharedCriterionError int32
+
+const (
+	// Enum unspecified.
+	SharedCriterionErrorEnum_UNSPECIFIED SharedCriterionErrorEnum_SharedCriterionError = 0
+	// The received error code is not known in this version.
+	SharedCriterionErrorEnum_UNKNOWN SharedCriterionErrorEnum_SharedCriterionError = 1
+	// The criterion is not appropriate for the shared set type.
+	SharedCriterionErrorEnum_CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE SharedCriterionErrorEnum_SharedCriterionError = 2
+)
+
+var SharedCriterionErrorEnum_SharedCriterionError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE",
+}
+var SharedCriterionErrorEnum_SharedCriterionError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE": 2,
+}
+
+func (x SharedCriterionErrorEnum_SharedCriterionError) String() string {
+	return proto.EnumName(SharedCriterionErrorEnum_SharedCriterionError_name, int32(x))
+}
+func (SharedCriterionErrorEnum_SharedCriterionError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_error_29250238080bbe7a, []int{0, 0}
+}
+
+// Container for enum describing possible shared criterion errors.
+type SharedCriterionErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedCriterionErrorEnum) Reset()         { *m = SharedCriterionErrorEnum{} }
+func (m *SharedCriterionErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedCriterionErrorEnum) ProtoMessage()    {}
+func (*SharedCriterionErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_error_29250238080bbe7a, []int{0}
+}
+func (m *SharedCriterionErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedCriterionErrorEnum.Unmarshal(m, b)
+}
+func (m *SharedCriterionErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedCriterionErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *SharedCriterionErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedCriterionErrorEnum.Merge(dst, src)
+}
+func (m *SharedCriterionErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedCriterionErrorEnum.Size(m)
+}
+func (m *SharedCriterionErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedCriterionErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedCriterionErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SharedCriterionErrorEnum)(nil), "google.ads.googleads.v0.errors.SharedCriterionErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.SharedCriterionErrorEnum_SharedCriterionError", SharedCriterionErrorEnum_SharedCriterionError_name, SharedCriterionErrorEnum_SharedCriterionError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/shared_criterion_error.proto", fileDescriptor_shared_criterion_error_29250238080bbe7a)
+}
+
+var fileDescriptor_shared_criterion_error_29250238080bbe7a = []byte{
+	// 294 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0x83, 0x30,
+	0x1c, 0xc6, 0x05, 0x13, 0x4d, 0xba, 0x83, 0x84, 0x78, 0xd0, 0xcb, 0x0e, 0x3c, 0x40, 0x21, 0x7a,
+	0xdc, 0xa9, 0x83, 0x6e, 0x12, 0x97, 0x42, 0x80, 0x6d, 0xd1, 0x90, 0x34, 0x38, 0x9a, 0x8e, 0x64,
+	0xa3, 0x4b, 0x3b, 0xf7, 0x04, 0x3e, 0x89, 0x47, 0x1f, 0xc5, 0x8b, 0xaf, 0x64, 0x68, 0x65, 0xa7,
+	0xb9, 0x13, 0x5f, 0xf8, 0xbe, 0xdf, 0xff, 0xff, 0xef, 0x07, 0x46, 0x5c, 0x08, 0xbe, 0x61, 0x7e,
+	0x55, 0x2b, 0xdf, 0xc8, 0x4e, 0x1d, 0x02, 0x9f, 0x49, 0x29, 0xa4, 0xf2, 0xd5, 0xba, 0x92, 0xac,
+	0xa6, 0x2b, 0xd9, 0xec, 0x99, 0x6c, 0x44, 0x4b, 0xf5, 0x7f, 0xb8, 0x93, 0x62, 0x2f, 0xdc, 0xa1,
+	0x21, 0x60, 0x55, 0x2b, 0x78, 0x84, 0xe1, 0x21, 0x80, 0x06, 0xf6, 0x3e, 0x2c, 0x70, 0x97, 0xeb,
+	0x01, 0x61, 0xcf, 0xe3, 0xce, 0xc1, 0xed, 0xfb, 0xd6, 0x5b, 0x83, 0xdb, 0x53, 0x9e, 0x7b, 0x03,
+	0x06, 0x73, 0x92, 0xa7, 0x38, 0x8c, 0x27, 0x31, 0x8e, 0x9c, 0x0b, 0x77, 0x00, 0xae, 0xe7, 0xe4,
+	0x99, 0x24, 0x4b, 0xe2, 0x58, 0xee, 0x03, 0x80, 0x61, 0x16, 0x17, 0x38, 0x8b, 0x13, 0x42, 0x8b,
+	0x97, 0x14, 0x53, 0x92, 0x14, 0x14, 0xcd, 0x66, 0xc9, 0x12, 0x47, 0x74, 0x92, 0x64, 0x34, 0x7f,
+	0x42, 0x19, 0x8e, 0x68, 0x8e, 0x0b, 0xed, 0x3b, 0xf6, 0xf8, 0xc7, 0x02, 0xde, 0x4a, 0x6c, 0xe1,
+	0xf9, 0x6b, 0xc7, 0xf7, 0xa7, 0xce, 0x49, 0xbb, 0x87, 0xa6, 0xd6, 0x6b, 0xf4, 0x07, 0x73, 0xb1,
+	0xa9, 0x5a, 0x0e, 0x85, 0xe4, 0x3e, 0x67, 0xad, 0xae, 0xa1, 0xef, 0x6d, 0xd7, 0xa8, 0xff, 0x6a,
+	0x1c, 0x99, 0xcf, 0xa7, 0x7d, 0x39, 0x45, 0xe8, 0xcb, 0x1e, 0x4e, 0xcd, 0x30, 0x54, 0x2b, 0x68,
+	0x64, 0xa7, 0x16, 0x01, 0xd4, 0x2b, 0xd5, 0x77, 0x1f, 0x28, 0x51, 0xad, 0xca, 0x63, 0xa0, 0x5c,
+	0x04, 0xa5, 0x09, 0xbc, 0x5d, 0xe9, 0xc5, 0x8f, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x15,
+	0x2d, 0x19, 0xbe, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/shared_set_error.pb.go b/googleapis/ads/googleads/v0/errors/shared_set_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..33647a17679e0a29d14ad593a96633bd2d852cd8
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/shared_set_error.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/shared_set_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible shared set errors.
+type SharedSetErrorEnum_SharedSetError int32
+
+const (
+	// Enum unspecified.
+	SharedSetErrorEnum_UNSPECIFIED SharedSetErrorEnum_SharedSetError = 0
+	// The received error code is not known in this version.
+	SharedSetErrorEnum_UNKNOWN SharedSetErrorEnum_SharedSetError = 1
+	// The customer cannot create this type of shared set.
+	SharedSetErrorEnum_CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE SharedSetErrorEnum_SharedSetError = 2
+	// A shared set with this name already exists.
+	SharedSetErrorEnum_DUPLICATE_NAME SharedSetErrorEnum_SharedSetError = 3
+	// Removed shared sets cannot be mutated.
+	SharedSetErrorEnum_SHARED_SET_REMOVED SharedSetErrorEnum_SharedSetError = 4
+	// The shared set cannot be removed because it is in use.
+	SharedSetErrorEnum_SHARED_SET_IN_USE SharedSetErrorEnum_SharedSetError = 5
+)
+
+var SharedSetErrorEnum_SharedSetError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE",
+	3: "DUPLICATE_NAME",
+	4: "SHARED_SET_REMOVED",
+	5: "SHARED_SET_IN_USE",
+}
+var SharedSetErrorEnum_SharedSetError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE": 2,
+	"DUPLICATE_NAME":     3,
+	"SHARED_SET_REMOVED": 4,
+	"SHARED_SET_IN_USE":  5,
+}
+
+func (x SharedSetErrorEnum_SharedSetError) String() string {
+	return proto.EnumName(SharedSetErrorEnum_SharedSetError_name, int32(x))
+}
+func (SharedSetErrorEnum_SharedSetError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_error_15982e85f8f1e082, []int{0, 0}
+}
+
+// Container for enum describing possible shared set errors.
+type SharedSetErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SharedSetErrorEnum) Reset()         { *m = SharedSetErrorEnum{} }
+func (m *SharedSetErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*SharedSetErrorEnum) ProtoMessage()    {}
+func (*SharedSetErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_error_15982e85f8f1e082, []int{0}
+}
+func (m *SharedSetErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetErrorEnum.Unmarshal(m, b)
+}
+func (m *SharedSetErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *SharedSetErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetErrorEnum.Merge(dst, src)
+}
+func (m *SharedSetErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_SharedSetErrorEnum.Size(m)
+}
+func (m *SharedSetErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*SharedSetErrorEnum)(nil), "google.ads.googleads.v0.errors.SharedSetErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.SharedSetErrorEnum_SharedSetError", SharedSetErrorEnum_SharedSetError_name, SharedSetErrorEnum_SharedSetError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/shared_set_error.proto", fileDescriptor_shared_set_error_15982e85f8f1e082)
+}
+
+var fileDescriptor_shared_set_error_15982e85f8f1e082 = []byte{
+	// 328 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xdf, 0x4a, 0xc3, 0x30,
+	0x18, 0xc5, 0xed, 0xe6, 0x1f, 0xc8, 0x60, 0xd6, 0x88, 0x5e, 0xee, 0x62, 0x0f, 0x90, 0x16, 0xc5,
+	0x2b, 0xaf, 0xb2, 0xf6, 0xdb, 0x56, 0x74, 0x69, 0x69, 0xda, 0x89, 0x52, 0x08, 0xd5, 0x96, 0x2a,
+	0x6c, 0xcb, 0x68, 0xea, 0x1e, 0x48, 0xf0, 0xc6, 0x67, 0xf0, 0x05, 0xf4, 0xa9, 0xa4, 0x8d, 0x1b,
+	0xdb, 0x85, 0x5e, 0xe5, 0x70, 0x38, 0xbf, 0x7c, 0x9c, 0x83, 0xae, 0x0a, 0x29, 0x8b, 0x59, 0x6e,
+	0xa5, 0x99, 0xb2, 0xb4, 0xac, 0xd5, 0xca, 0xb6, 0xf2, 0xb2, 0x94, 0xa5, 0xb2, 0xd4, 0x73, 0x5a,
+	0xe6, 0x99, 0x50, 0x79, 0x25, 0x1a, 0x87, 0x2c, 0x4b, 0x59, 0x49, 0xdc, 0xd3, 0x59, 0x92, 0x66,
+	0x8a, 0x6c, 0x30, 0xb2, 0xb2, 0x89, 0xc6, 0xfa, 0x9f, 0x06, 0xc2, 0xbc, 0x41, 0x79, 0x5e, 0x41,
+	0xed, 0xc1, 0xe2, 0x75, 0xde, 0x7f, 0x37, 0x50, 0x77, 0xd7, 0xc6, 0xc7, 0xa8, 0x13, 0x33, 0x1e,
+	0x80, 0xe3, 0x0d, 0x3d, 0x70, 0xcd, 0x3d, 0xdc, 0x41, 0x47, 0x31, 0xbb, 0x61, 0xfe, 0x1d, 0x33,
+	0x0d, 0x7c, 0x81, 0x88, 0x13, 0xf3, 0xc8, 0x9f, 0x40, 0x28, 0x1c, 0xca, 0x98, 0x1f, 0x09, 0x27,
+	0x04, 0x1a, 0x81, 0xe0, 0x63, 0x1a, 0x82, 0x2b, 0x38, 0x44, 0xc2, 0x1f, 0x8a, 0x68, 0xec, 0x71,
+	0x11, 0xdd, 0x07, 0x60, 0xb6, 0x30, 0x46, 0x5d, 0x37, 0x0e, 0x6e, 0x3d, 0xa7, 0x8e, 0x31, 0x3a,
+	0x01, 0xb3, 0x8d, 0xcf, 0x11, 0xde, 0x02, 0x42, 0x98, 0xf8, 0x53, 0x70, 0xcd, 0x7d, 0x7c, 0x86,
+	0x4e, 0xb6, 0x7c, 0x8f, 0x89, 0x98, 0x83, 0x79, 0x30, 0xf8, 0x32, 0x50, 0xff, 0x49, 0xce, 0xc9,
+	0xff, 0x2d, 0x07, 0xa7, 0xbb, 0x5d, 0x82, 0x7a, 0x9a, 0xc0, 0x78, 0x70, 0x7f, 0xb1, 0x42, 0xce,
+	0xd2, 0x45, 0x41, 0x64, 0x59, 0x58, 0x45, 0xbe, 0x68, 0x86, 0x5b, 0x6f, 0xbc, 0x7c, 0x51, 0x7f,
+	0x4d, 0x7e, 0xad, 0x9f, 0xb7, 0x56, 0x7b, 0x44, 0xe9, 0x47, 0xab, 0x37, 0xd2, 0x9f, 0xd1, 0x4c,
+	0x11, 0x2d, 0x6b, 0x35, 0xb5, 0x49, 0x73, 0x52, 0x7d, 0xaf, 0x03, 0x09, 0xcd, 0x54, 0xb2, 0x09,
+	0x24, 0x53, 0x3b, 0xd1, 0x81, 0xc7, 0xc3, 0xe6, 0xf0, 0xe5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x6c, 0xdd, 0x1f, 0xfe, 0xea, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/string_format_error.pb.go b/googleapis/ads/googleads/v0/errors/string_format_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..30e558cc65b692bec17a49afe931c0e66de91c5c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/string_format_error.pb.go
@@ -0,0 +1,115 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/string_format_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible string format errors.
+type StringFormatErrorEnum_StringFormatError int32
+
+const (
+	// Enum unspecified.
+	StringFormatErrorEnum_UNSPECIFIED StringFormatErrorEnum_StringFormatError = 0
+	// The received error code is not known in this version.
+	StringFormatErrorEnum_UNKNOWN StringFormatErrorEnum_StringFormatError = 1
+	// The input string value contains disallowed characters.
+	StringFormatErrorEnum_ILLEGAL_CHARS StringFormatErrorEnum_StringFormatError = 2
+	// The input string value is invalid for the associated field.
+	StringFormatErrorEnum_INVALID_FORMAT StringFormatErrorEnum_StringFormatError = 3
+)
+
+var StringFormatErrorEnum_StringFormatError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ILLEGAL_CHARS",
+	3: "INVALID_FORMAT",
+}
+var StringFormatErrorEnum_StringFormatError_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"UNKNOWN":        1,
+	"ILLEGAL_CHARS":  2,
+	"INVALID_FORMAT": 3,
+}
+
+func (x StringFormatErrorEnum_StringFormatError) String() string {
+	return proto.EnumName(StringFormatErrorEnum_StringFormatError_name, int32(x))
+}
+func (StringFormatErrorEnum_StringFormatError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_string_format_error_507abb9d06602679, []int{0, 0}
+}
+
+// Container for enum describing possible string format errors.
+type StringFormatErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StringFormatErrorEnum) Reset()         { *m = StringFormatErrorEnum{} }
+func (m *StringFormatErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*StringFormatErrorEnum) ProtoMessage()    {}
+func (*StringFormatErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_string_format_error_507abb9d06602679, []int{0}
+}
+func (m *StringFormatErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StringFormatErrorEnum.Unmarshal(m, b)
+}
+func (m *StringFormatErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StringFormatErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *StringFormatErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StringFormatErrorEnum.Merge(dst, src)
+}
+func (m *StringFormatErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_StringFormatErrorEnum.Size(m)
+}
+func (m *StringFormatErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_StringFormatErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StringFormatErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*StringFormatErrorEnum)(nil), "google.ads.googleads.v0.errors.StringFormatErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.StringFormatErrorEnum_StringFormatError", StringFormatErrorEnum_StringFormatError_name, StringFormatErrorEnum_StringFormatError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/string_format_error.proto", fileDescriptor_string_format_error_507abb9d06602679)
+}
+
+var fileDescriptor_string_format_error_507abb9d06602679 = []byte{
+	// 281 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xe2, 0x92, 0xa2, 0xcc, 0xbc, 0xf4, 0xf8, 0xb4, 0xfc, 0xa2, 0xdc,
+	0xc4, 0x92, 0x78, 0xb0, 0xa0, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x1c, 0x44, 0xb9, 0x5e,
+	0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xa7, 0x5e, 0x99, 0x81, 0x1e, 0x44, 0xa7, 0x52, 0x21, 0x97, 0x68,
+	0x30, 0x58, 0xb3, 0x1b, 0x58, 0xaf, 0x2b, 0x48, 0xd4, 0x35, 0xaf, 0x34, 0x57, 0x29, 0x82, 0x4b,
+	0x10, 0x43, 0x42, 0x88, 0x9f, 0x8b, 0x3b, 0xd4, 0x2f, 0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3,
+	0xd5, 0x45, 0x80, 0x41, 0x88, 0x9b, 0x8b, 0x3d, 0xd4, 0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80,
+	0x51, 0x48, 0x90, 0x8b, 0xd7, 0xd3, 0xc7, 0xc7, 0xd5, 0xdd, 0xd1, 0x27, 0xde, 0xd9, 0xc3, 0x31,
+	0x28, 0x58, 0x80, 0x49, 0x48, 0x88, 0x8b, 0xcf, 0xd3, 0x2f, 0xcc, 0xd1, 0xc7, 0xd3, 0x25, 0xde,
+	0xcd, 0x3f, 0xc8, 0xd7, 0x31, 0x44, 0x80, 0xd9, 0xe9, 0x0c, 0x23, 0x97, 0x52, 0x72, 0x7e, 0xae,
+	0x1e, 0x7e, 0x97, 0x39, 0x89, 0x61, 0x58, 0x1f, 0x00, 0xf2, 0x51, 0x00, 0x63, 0x94, 0x0b, 0x54,
+	0x67, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0xd8,
+	0xbf, 0xb0, 0xd0, 0x29, 0xc8, 0x2c, 0xc6, 0x15, 0x58, 0xd6, 0x10, 0x6a, 0x11, 0x13, 0xb3, 0xbb,
+	0xa3, 0xe3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0x61, 0x8e, 0x29, 0xc5, 0x7a, 0x10, 0x26, 0x88, 0x15,
+	0x66, 0xa0, 0x07, 0xb6, 0xb2, 0xf8, 0x14, 0x4c, 0x41, 0x8c, 0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x41,
+	0x4c, 0x98, 0x41, 0x0c, 0x44, 0x41, 0x12, 0x1b, 0xd8, 0x62, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x2a, 0x92, 0xc6, 0x00, 0xa4, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/string_length_error.pb.go b/googleapis/ads/googleads/v0/errors/string_length_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..88211b3c7f19570b4a901077588acad3642191dd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/string_length_error.pb.go
@@ -0,0 +1,114 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/string_length_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible string length errors.
+type StringLengthErrorEnum_StringLengthError int32
+
+const (
+	// Enum unspecified.
+	StringLengthErrorEnum_UNSPECIFIED StringLengthErrorEnum_StringLengthError = 0
+	// The received error code is not known in this version.
+	StringLengthErrorEnum_UNKNOWN StringLengthErrorEnum_StringLengthError = 1
+	// Too short.
+	StringLengthErrorEnum_TOO_SHORT StringLengthErrorEnum_StringLengthError = 2
+	// Too long.
+	StringLengthErrorEnum_TOO_LONG StringLengthErrorEnum_StringLengthError = 3
+)
+
+var StringLengthErrorEnum_StringLengthError_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "TOO_SHORT",
+	3: "TOO_LONG",
+}
+var StringLengthErrorEnum_StringLengthError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"TOO_SHORT":   2,
+	"TOO_LONG":    3,
+}
+
+func (x StringLengthErrorEnum_StringLengthError) String() string {
+	return proto.EnumName(StringLengthErrorEnum_StringLengthError_name, int32(x))
+}
+func (StringLengthErrorEnum_StringLengthError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_string_length_error_0467ecd3ba05d90e, []int{0, 0}
+}
+
+// Container for enum describing possible string length errors.
+type StringLengthErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StringLengthErrorEnum) Reset()         { *m = StringLengthErrorEnum{} }
+func (m *StringLengthErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*StringLengthErrorEnum) ProtoMessage()    {}
+func (*StringLengthErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_string_length_error_0467ecd3ba05d90e, []int{0}
+}
+func (m *StringLengthErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StringLengthErrorEnum.Unmarshal(m, b)
+}
+func (m *StringLengthErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StringLengthErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *StringLengthErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StringLengthErrorEnum.Merge(dst, src)
+}
+func (m *StringLengthErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_StringLengthErrorEnum.Size(m)
+}
+func (m *StringLengthErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_StringLengthErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StringLengthErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*StringLengthErrorEnum)(nil), "google.ads.googleads.v0.errors.StringLengthErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.StringLengthErrorEnum_StringLengthError", StringLengthErrorEnum_StringLengthError_name, StringLengthErrorEnum_StringLengthError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/string_length_error.proto", fileDescriptor_string_length_error_0467ecd3ba05d90e)
+}
+
+var fileDescriptor_string_length_error_0467ecd3ba05d90e = []byte{
+	// 268 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xd4, 0xa2,
+	0xa2, 0xfc, 0xa2, 0x62, 0xfd, 0xe2, 0x92, 0xa2, 0xcc, 0xbc, 0xf4, 0xf8, 0x9c, 0xd4, 0xbc, 0xf4,
+	0x92, 0x8c, 0x78, 0xb0, 0xa0, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x1c, 0x44, 0xb9, 0x5e,
+	0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xa7, 0x5e, 0x99, 0x81, 0x1e, 0x44, 0xa7, 0x52, 0x3a, 0x97, 0x68,
+	0x30, 0x58, 0xb3, 0x0f, 0x58, 0xaf, 0x2b, 0x48, 0xd4, 0x35, 0xaf, 0x34, 0x57, 0xc9, 0x8f, 0x4b,
+	0x10, 0x43, 0x42, 0x88, 0x9f, 0x8b, 0x3b, 0xd4, 0x2f, 0x38, 0xc0, 0xd5, 0xd9, 0xd3, 0xcd, 0xd3,
+	0xd5, 0x45, 0x80, 0x41, 0x88, 0x9b, 0x8b, 0x3d, 0xd4, 0xcf, 0xdb, 0xcf, 0x3f, 0xdc, 0x4f, 0x80,
+	0x51, 0x88, 0x97, 0x8b, 0x33, 0xc4, 0xdf, 0x3f, 0x3e, 0xd8, 0xc3, 0x3f, 0x28, 0x44, 0x80, 0x49,
+	0x88, 0x87, 0x8b, 0x03, 0xc4, 0xf5, 0xf1, 0xf7, 0x73, 0x17, 0x60, 0x76, 0x3a, 0xc3, 0xc8, 0xa5,
+	0x94, 0x9c, 0x9f, 0xab, 0x87, 0xdf, 0x3d, 0x4e, 0x62, 0x18, 0x96, 0x06, 0x80, 0xfc, 0x11, 0xc0,
+	0x18, 0xe5, 0x02, 0xd5, 0x99, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f,
+	0x9e, 0x9a, 0x07, 0xf6, 0x25, 0x2c, 0x4c, 0x0a, 0x32, 0x8b, 0x71, 0x05, 0x91, 0x35, 0x84, 0x5a,
+	0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x98, 0x63, 0x4a, 0xb1, 0x1e,
+	0x84, 0x09, 0x62, 0x85, 0x19, 0xe8, 0x81, 0xad, 0x2c, 0x3e, 0x05, 0x53, 0x10, 0xe3, 0x98, 0x52,
+	0x1c, 0x03, 0x57, 0x10, 0x13, 0x66, 0x10, 0x03, 0x51, 0x90, 0xc4, 0x06, 0xb6, 0xd8, 0x18, 0x10,
+	0x00, 0x00, 0xff, 0xff, 0x2f, 0x89, 0x28, 0x9f, 0x9a, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/url_field_error.pb.go b/googleapis/ads/googleads/v0/errors/url_field_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3f3e06f536b6394040686da1a6259c6f5c430718
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/url_field_error.pb.go
@@ -0,0 +1,359 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/url_field_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible url field errors.
+type UrlFieldErrorEnum_UrlFieldError int32
+
+const (
+	// Enum unspecified.
+	UrlFieldErrorEnum_UNSPECIFIED UrlFieldErrorEnum_UrlFieldError = 0
+	// The received error code is not known in this version.
+	UrlFieldErrorEnum_UNKNOWN UrlFieldErrorEnum_UrlFieldError = 1
+	// The tracking url template is invalid.
+	UrlFieldErrorEnum_INVALID_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 2
+	// The tracking url template contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 3
+	// The tracking url template must contain at least one tag (e.g. {lpurl}),
+	// This applies only to tracking url template associated with website ads or
+	// product ads.
+	UrlFieldErrorEnum_MISSING_TRACKING_URL_TEMPLATE_TAG UrlFieldErrorEnum_UrlFieldError = 4
+	// The tracking url template must start with a valid protocol (or lpurl
+	// tag).
+	UrlFieldErrorEnum_MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 5
+	// The tracking url template starts with an invalid protocol.
+	UrlFieldErrorEnum_INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 6
+	// The tracking url template contains illegal characters.
+	UrlFieldErrorEnum_MALFORMED_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 7
+	// The tracking url template must contain a host name (or lpurl tag).
+	UrlFieldErrorEnum_MISSING_HOST_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 8
+	// The tracking url template has an invalid or missing top level domain
+	// extension.
+	UrlFieldErrorEnum_INVALID_TLD_IN_TRACKING_URL_TEMPLATE UrlFieldErrorEnum_UrlFieldError = 9
+	// The tracking url template contains nested occurrences of the same
+	// conditional tag (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG UrlFieldErrorEnum_UrlFieldError = 10
+	// The final url is invalid.
+	UrlFieldErrorEnum_INVALID_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 11
+	// The final url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 12
+	// The final url contains nested occurrences of the same conditional tag
+	// (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_FINAL_URL_TAG UrlFieldErrorEnum_UrlFieldError = 13
+	// The final url must start with a valid protocol.
+	UrlFieldErrorEnum_MISSING_PROTOCOL_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 14
+	// The final url starts with an invalid protocol.
+	UrlFieldErrorEnum_INVALID_PROTOCOL_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 15
+	// The final url contains illegal characters.
+	UrlFieldErrorEnum_MALFORMED_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 16
+	// The final url must contain a host name.
+	UrlFieldErrorEnum_MISSING_HOST_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 17
+	// The tracking url template has an invalid or missing top level domain
+	// extension.
+	UrlFieldErrorEnum_INVALID_TLD_IN_FINAL_URL UrlFieldErrorEnum_UrlFieldError = 18
+	// The final mobile url is invalid.
+	UrlFieldErrorEnum_INVALID_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 19
+	// The final mobile url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 20
+	// The final mobile url contains nested occurrences of the same conditional
+	// tag (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG UrlFieldErrorEnum_UrlFieldError = 21
+	// The final mobile url must start with a valid protocol.
+	UrlFieldErrorEnum_MISSING_PROTOCOL_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 22
+	// The final mobile url starts with an invalid protocol.
+	UrlFieldErrorEnum_INVALID_PROTOCOL_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 23
+	// The final mobile url contains illegal characters.
+	UrlFieldErrorEnum_MALFORMED_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 24
+	// The final mobile url must contain a host name.
+	UrlFieldErrorEnum_MISSING_HOST_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 25
+	// The tracking url template has an invalid or missing top level domain
+	// extension.
+	UrlFieldErrorEnum_INVALID_TLD_IN_FINAL_MOBILE_URL UrlFieldErrorEnum_UrlFieldError = 26
+	// The final app url is invalid.
+	UrlFieldErrorEnum_INVALID_FINAL_APP_URL UrlFieldErrorEnum_UrlFieldError = 27
+	// The final app url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_APP_URL UrlFieldErrorEnum_UrlFieldError = 28
+	// The final app url contains nested occurrences of the same conditional tag
+	// (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_FINAL_APP_URL_TAG UrlFieldErrorEnum_UrlFieldError = 29
+	// More than one app url found for the same OS type.
+	UrlFieldErrorEnum_MULTIPLE_APP_URLS_FOR_OSTYPE UrlFieldErrorEnum_UrlFieldError = 30
+	// The OS type given for an app url is not valid.
+	UrlFieldErrorEnum_INVALID_OSTYPE UrlFieldErrorEnum_UrlFieldError = 31
+	// The protocol given for an app url is not valid. (E.g. "android-app://")
+	UrlFieldErrorEnum_INVALID_PROTOCOL_FOR_APP_URL UrlFieldErrorEnum_UrlFieldError = 32
+	// The package id (app id) given for an app url is not valid.
+	UrlFieldErrorEnum_INVALID_PACKAGE_ID_FOR_APP_URL UrlFieldErrorEnum_UrlFieldError = 33
+	// The number of url custom parameters for an resource exceeds the maximum
+	// limit allowed.
+	UrlFieldErrorEnum_URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT UrlFieldErrorEnum_UrlFieldError = 34
+	// An invalid character appears in the parameter key.
+	UrlFieldErrorEnum_INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY UrlFieldErrorEnum_UrlFieldError = 39
+	// An invalid character appears in the parameter value.
+	UrlFieldErrorEnum_INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE UrlFieldErrorEnum_UrlFieldError = 40
+	// The url custom parameter value fails url tag validation.
+	UrlFieldErrorEnum_INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE UrlFieldErrorEnum_UrlFieldError = 41
+	// The custom parameter contains nested occurrences of the same conditional
+	// tag (i.e. {ifmobile:{ifmobile:x}}).
+	UrlFieldErrorEnum_REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG UrlFieldErrorEnum_UrlFieldError = 42
+	// The protocol (http:// or https://) is missing.
+	UrlFieldErrorEnum_MISSING_PROTOCOL UrlFieldErrorEnum_UrlFieldError = 43
+	// Unsupported protocol in URL. Only http and https are supported.
+	UrlFieldErrorEnum_INVALID_PROTOCOL UrlFieldErrorEnum_UrlFieldError = 52
+	// The url is invalid.
+	UrlFieldErrorEnum_INVALID_URL UrlFieldErrorEnum_UrlFieldError = 44
+	// Destination Url is deprecated.
+	UrlFieldErrorEnum_DESTINATION_URL_DEPRECATED UrlFieldErrorEnum_UrlFieldError = 45
+	// The url contains invalid tag.
+	UrlFieldErrorEnum_INVALID_TAG_IN_URL UrlFieldErrorEnum_UrlFieldError = 46
+	// The url must contain at least one tag (e.g. {lpurl}), This applies only
+	// to urls associated with website ads or product ads.
+	UrlFieldErrorEnum_MISSING_URL_TAG UrlFieldErrorEnum_UrlFieldError = 47
+	// Duplicate url id.
+	UrlFieldErrorEnum_DUPLICATE_URL_ID UrlFieldErrorEnum_UrlFieldError = 48
+	// Invalid url id.
+	UrlFieldErrorEnum_INVALID_URL_ID UrlFieldErrorEnum_UrlFieldError = 49
+	// The final url suffix cannot begin with '?' or '&' characters and must be
+	// a valid query string.
+	UrlFieldErrorEnum_FINAL_URL_SUFFIX_MALFORMED UrlFieldErrorEnum_UrlFieldError = 50
+	// The final url suffix cannot contain {lpurl} related or {ignore} tags.
+	UrlFieldErrorEnum_INVALID_TAG_IN_FINAL_URL_SUFFIX UrlFieldErrorEnum_UrlFieldError = 51
+	// The top level domain is invalid, e.g, not a public top level domain
+	// listed in publicsuffix.org.
+	UrlFieldErrorEnum_INVALID_TOP_LEVEL_DOMAIN UrlFieldErrorEnum_UrlFieldError = 53
+	// Malformed top level domain in URL.
+	UrlFieldErrorEnum_MALFORMED_TOP_LEVEL_DOMAIN UrlFieldErrorEnum_UrlFieldError = 54
+	// Malformed URL.
+	UrlFieldErrorEnum_MALFORMED_URL UrlFieldErrorEnum_UrlFieldError = 55
+	// No host found in URL.
+	UrlFieldErrorEnum_MISSING_HOST UrlFieldErrorEnum_UrlFieldError = 56
+)
+
+var UrlFieldErrorEnum_UrlFieldError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "INVALID_TRACKING_URL_TEMPLATE",
+	3:  "INVALID_TAG_IN_TRACKING_URL_TEMPLATE",
+	4:  "MISSING_TRACKING_URL_TEMPLATE_TAG",
+	5:  "MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE",
+	6:  "INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE",
+	7:  "MALFORMED_TRACKING_URL_TEMPLATE",
+	8:  "MISSING_HOST_IN_TRACKING_URL_TEMPLATE",
+	9:  "INVALID_TLD_IN_TRACKING_URL_TEMPLATE",
+	10: "REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG",
+	11: "INVALID_FINAL_URL",
+	12: "INVALID_TAG_IN_FINAL_URL",
+	13: "REDUNDANT_NESTED_FINAL_URL_TAG",
+	14: "MISSING_PROTOCOL_IN_FINAL_URL",
+	15: "INVALID_PROTOCOL_IN_FINAL_URL",
+	16: "MALFORMED_FINAL_URL",
+	17: "MISSING_HOST_IN_FINAL_URL",
+	18: "INVALID_TLD_IN_FINAL_URL",
+	19: "INVALID_FINAL_MOBILE_URL",
+	20: "INVALID_TAG_IN_FINAL_MOBILE_URL",
+	21: "REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG",
+	22: "MISSING_PROTOCOL_IN_FINAL_MOBILE_URL",
+	23: "INVALID_PROTOCOL_IN_FINAL_MOBILE_URL",
+	24: "MALFORMED_FINAL_MOBILE_URL",
+	25: "MISSING_HOST_IN_FINAL_MOBILE_URL",
+	26: "INVALID_TLD_IN_FINAL_MOBILE_URL",
+	27: "INVALID_FINAL_APP_URL",
+	28: "INVALID_TAG_IN_FINAL_APP_URL",
+	29: "REDUNDANT_NESTED_FINAL_APP_URL_TAG",
+	30: "MULTIPLE_APP_URLS_FOR_OSTYPE",
+	31: "INVALID_OSTYPE",
+	32: "INVALID_PROTOCOL_FOR_APP_URL",
+	33: "INVALID_PACKAGE_ID_FOR_APP_URL",
+	34: "URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT",
+	39: "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY",
+	40: "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE",
+	41: "INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE",
+	42: "REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG",
+	43: "MISSING_PROTOCOL",
+	52: "INVALID_PROTOCOL",
+	44: "INVALID_URL",
+	45: "DESTINATION_URL_DEPRECATED",
+	46: "INVALID_TAG_IN_URL",
+	47: "MISSING_URL_TAG",
+	48: "DUPLICATE_URL_ID",
+	49: "INVALID_URL_ID",
+	50: "FINAL_URL_SUFFIX_MALFORMED",
+	51: "INVALID_TAG_IN_FINAL_URL_SUFFIX",
+	53: "INVALID_TOP_LEVEL_DOMAIN",
+	54: "MALFORMED_TOP_LEVEL_DOMAIN",
+	55: "MALFORMED_URL",
+	56: "MISSING_HOST",
+}
+var UrlFieldErrorEnum_UrlFieldError_value = map[string]int32{
+	"UNSPECIFIED":                                      0,
+	"UNKNOWN":                                          1,
+	"INVALID_TRACKING_URL_TEMPLATE":                    2,
+	"INVALID_TAG_IN_TRACKING_URL_TEMPLATE":             3,
+	"MISSING_TRACKING_URL_TEMPLATE_TAG":                4,
+	"MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE":        5,
+	"INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE":        6,
+	"MALFORMED_TRACKING_URL_TEMPLATE":                  7,
+	"MISSING_HOST_IN_TRACKING_URL_TEMPLATE":            8,
+	"INVALID_TLD_IN_TRACKING_URL_TEMPLATE":             9,
+	"REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG":       10,
+	"INVALID_FINAL_URL":                                11,
+	"INVALID_TAG_IN_FINAL_URL":                         12,
+	"REDUNDANT_NESTED_FINAL_URL_TAG":                   13,
+	"MISSING_PROTOCOL_IN_FINAL_URL":                    14,
+	"INVALID_PROTOCOL_IN_FINAL_URL":                    15,
+	"MALFORMED_FINAL_URL":                              16,
+	"MISSING_HOST_IN_FINAL_URL":                        17,
+	"INVALID_TLD_IN_FINAL_URL":                         18,
+	"INVALID_FINAL_MOBILE_URL":                         19,
+	"INVALID_TAG_IN_FINAL_MOBILE_URL":                  20,
+	"REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG":            21,
+	"MISSING_PROTOCOL_IN_FINAL_MOBILE_URL":             22,
+	"INVALID_PROTOCOL_IN_FINAL_MOBILE_URL":             23,
+	"MALFORMED_FINAL_MOBILE_URL":                       24,
+	"MISSING_HOST_IN_FINAL_MOBILE_URL":                 25,
+	"INVALID_TLD_IN_FINAL_MOBILE_URL":                  26,
+	"INVALID_FINAL_APP_URL":                            27,
+	"INVALID_TAG_IN_FINAL_APP_URL":                     28,
+	"REDUNDANT_NESTED_FINAL_APP_URL_TAG":               29,
+	"MULTIPLE_APP_URLS_FOR_OSTYPE":                     30,
+	"INVALID_OSTYPE":                                   31,
+	"INVALID_PROTOCOL_FOR_APP_URL":                     32,
+	"INVALID_PACKAGE_ID_FOR_APP_URL":                   33,
+	"URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT":        34,
+	"INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY":   39,
+	"INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE": 40,
+	"INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE":        41,
+	"REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG":        42,
+	"MISSING_PROTOCOL":                                 43,
+	"INVALID_PROTOCOL":                                 52,
+	"INVALID_URL":                                      44,
+	"DESTINATION_URL_DEPRECATED":                       45,
+	"INVALID_TAG_IN_URL":                               46,
+	"MISSING_URL_TAG":                                  47,
+	"DUPLICATE_URL_ID":                                 48,
+	"INVALID_URL_ID":                                   49,
+	"FINAL_URL_SUFFIX_MALFORMED":                       50,
+	"INVALID_TAG_IN_FINAL_URL_SUFFIX":                  51,
+	"INVALID_TOP_LEVEL_DOMAIN":                         53,
+	"MALFORMED_TOP_LEVEL_DOMAIN":                       54,
+	"MALFORMED_URL":                                    55,
+	"MISSING_HOST":                                     56,
+}
+
+func (x UrlFieldErrorEnum_UrlFieldError) String() string {
+	return proto.EnumName(UrlFieldErrorEnum_UrlFieldError_name, int32(x))
+}
+func (UrlFieldErrorEnum_UrlFieldError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_url_field_error_9d171e417763e4ac, []int{0, 0}
+}
+
+// Container for enum describing possible url field errors.
+type UrlFieldErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UrlFieldErrorEnum) Reset()         { *m = UrlFieldErrorEnum{} }
+func (m *UrlFieldErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*UrlFieldErrorEnum) ProtoMessage()    {}
+func (*UrlFieldErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_url_field_error_9d171e417763e4ac, []int{0}
+}
+func (m *UrlFieldErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UrlFieldErrorEnum.Unmarshal(m, b)
+}
+func (m *UrlFieldErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UrlFieldErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *UrlFieldErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UrlFieldErrorEnum.Merge(dst, src)
+}
+func (m *UrlFieldErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_UrlFieldErrorEnum.Size(m)
+}
+func (m *UrlFieldErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UrlFieldErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UrlFieldErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UrlFieldErrorEnum)(nil), "google.ads.googleads.v0.errors.UrlFieldErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.UrlFieldErrorEnum_UrlFieldError", UrlFieldErrorEnum_UrlFieldError_name, UrlFieldErrorEnum_UrlFieldError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/url_field_error.proto", fileDescriptor_url_field_error_9d171e417763e4ac)
+}
+
+var fileDescriptor_url_field_error_9d171e417763e4ac = []byte{
+	// 813 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0x6d, 0x4f, 0xe3, 0x46,
+	0x10, 0xc7, 0x0b, 0xd7, 0xde, 0xb5, 0xc3, 0x05, 0x36, 0xc3, 0x71, 0x77, 0x5c, 0x21, 0x07, 0x29,
+	0xb4, 0x40, 0x8b, 0x93, 0x02, 0x7d, 0x90, 0xfa, 0x6a, 0xb1, 0x37, 0x61, 0x15, 0x3f, 0xc9, 0x5e,
+	0xa7, 0x50, 0x45, 0x5a, 0xd1, 0x26, 0x8d, 0x90, 0x02, 0x46, 0x49, 0xe1, 0x9b, 0xf4, 0x0b, 0xf4,
+	0x65, 0x3f, 0x49, 0xd5, 0x2f, 0xd5, 0x6a, 0xed, 0x38, 0xb6, 0x13, 0x9b, 0xaa, 0xaf, 0xbc, 0x9a,
+	0xf9, 0xcd, 0xcc, 0xee, 0x7f, 0xbc, 0x3b, 0x70, 0x36, 0x0c, 0xc3, 0xe1, 0x68, 0xd0, 0xb8, 0xee,
+	0x4f, 0x1a, 0xf1, 0x52, 0xad, 0x1e, 0x9b, 0x8d, 0xc1, 0x78, 0x1c, 0x8e, 0x27, 0x8d, 0x87, 0xf1,
+	0x48, 0xfe, 0x7a, 0x33, 0x18, 0xf5, 0x65, 0x64, 0xd0, 0xee, 0xc7, 0xe1, 0x6f, 0x21, 0xd6, 0x62,
+	0x54, 0xbb, 0xee, 0x4f, 0xb4, 0x59, 0x94, 0xf6, 0xd8, 0xd4, 0xe2, 0xa8, 0xfa, 0xef, 0xab, 0x50,
+	0x0d, 0xc6, 0xa3, 0x96, 0x0a, 0x64, 0xca, 0xc4, 0xee, 0x1e, 0x6e, 0xeb, 0xff, 0x54, 0xa0, 0x92,
+	0xb3, 0xe2, 0x1a, 0xac, 0x04, 0xb6, 0xef, 0x32, 0x9d, 0xb7, 0x38, 0x33, 0xc8, 0x07, 0xb8, 0x02,
+	0x2f, 0x02, 0xbb, 0x63, 0x3b, 0x3f, 0xda, 0x64, 0x09, 0x77, 0x61, 0x9b, 0xdb, 0x5d, 0x6a, 0x72,
+	0x43, 0x0a, 0x8f, 0xea, 0x1d, 0x6e, 0xb7, 0x65, 0xe0, 0x99, 0x52, 0x30, 0xcb, 0x35, 0xa9, 0x60,
+	0x64, 0x19, 0x0f, 0x60, 0x6f, 0x86, 0xd0, 0xb6, 0xe4, 0x76, 0x09, 0xf9, 0x0c, 0xf7, 0x61, 0xd7,
+	0xe2, 0xbe, 0xaf, 0x3c, 0x85, 0x88, 0x8a, 0x27, 0x1f, 0xe2, 0x31, 0x1c, 0x26, 0x98, 0xeb, 0x39,
+	0xc2, 0xd1, 0x1d, 0xb3, 0x3c, 0xeb, 0x47, 0x0a, 0x4f, 0xea, 0xff, 0x37, 0xfe, 0x1c, 0x3f, 0x83,
+	0xf7, 0x16, 0x35, 0x5b, 0x8e, 0x67, 0xb1, 0xb2, 0x33, 0xbd, 0xc0, 0x43, 0xd8, 0x4f, 0xb6, 0x70,
+	0xe1, 0xf8, 0xa2, 0x3c, 0xdf, 0xc7, 0xb9, 0xe3, 0x9b, 0x46, 0x39, 0xf9, 0x09, 0x6a, 0x70, 0xe4,
+	0x31, 0x23, 0xb0, 0x0d, 0x6a, 0x0b, 0x69, 0x33, 0x5f, 0x94, 0x6d, 0x20, 0xd2, 0x01, 0x70, 0x03,
+	0xaa, 0x49, 0xe6, 0x16, 0xb7, 0xa9, 0xa9, 0x18, 0xb2, 0x82, 0x5b, 0xf0, 0x76, 0x4e, 0xef, 0xd4,
+	0xfb, 0x12, 0xeb, 0x50, 0x5b, 0x28, 0x32, 0xf3, 0x47, 0x89, 0x2b, 0xaa, 0xa9, 0x45, 0x02, 0xa7,
+	0x69, 0x56, 0xb3, 0x7d, 0x2f, 0x46, 0xd6, 0xf0, 0x0d, 0xac, 0xa7, 0x42, 0xa6, 0x0e, 0x82, 0xdb,
+	0xb0, 0x39, 0x2f, 0x5e, 0xea, 0xae, 0xe6, 0xf6, 0x1f, 0x0b, 0x96, 0x7a, 0x31, 0xeb, 0x8d, 0xcd,
+	0x96, 0x73, 0xce, 0x4d, 0x16, 0x79, 0xd7, 0x55, 0xf3, 0x0a, 0xcf, 0x9e, 0x81, 0x5e, 0xa9, 0xe6,
+	0x95, 0x48, 0x90, 0x62, 0x91, 0x12, 0x1b, 0xaa, 0x79, 0xe5, 0x4a, 0x64, 0x92, 0xbe, 0xce, 0xb6,
+	0xf9, 0x49, 0xf2, 0x0d, 0xd6, 0xe0, 0xdd, 0xbc, 0x2e, 0x19, 0xff, 0x5b, 0xdc, 0x83, 0x9d, 0x62,
+	0x79, 0x32, 0xd4, 0x66, 0xee, 0xa4, 0x59, 0x95, 0x32, 0xd0, 0x3b, 0xdc, 0x84, 0x8d, 0xbc, 0x58,
+	0xd4, 0x75, 0x23, 0xd7, 0xa7, 0xb8, 0x03, 0x5b, 0x85, 0x4a, 0x25, 0xc4, 0x16, 0x7e, 0x0e, 0xf5,
+	0x12, 0x99, 0xa6, 0x4c, 0xa4, 0xd1, 0xb6, 0xca, 0x64, 0x05, 0xa6, 0xe0, 0xae, 0xc9, 0x12, 0x8f,
+	0x2f, 0x5b, 0x8e, 0x27, 0x1d, 0x5f, 0x5c, 0xb9, 0x8c, 0xd4, 0x10, 0x61, 0x35, 0xa9, 0x35, 0xb5,
+	0xbd, 0xcf, 0xd6, 0x9f, 0xe9, 0xa5, 0x82, 0x92, 0xfa, 0x3b, 0xea, 0x4f, 0x9d, 0x11, 0x54, 0xef,
+	0xd0, 0x36, 0x93, 0xea, 0x1c, 0x19, 0x66, 0x57, 0xdd, 0x6d, 0xb5, 0x11, 0x3d, 0xf0, 0x85, 0x63,
+	0x49, 0x97, 0x7a, 0xd4, 0x62, 0x82, 0x79, 0xbe, 0xd4, 0x9d, 0xc0, 0x16, 0x92, 0x5d, 0xea, 0x8c,
+	0x19, 0xbe, 0x34, 0xb9, 0xc5, 0x05, 0xa9, 0xe3, 0x09, 0x68, 0x49, 0x4a, 0xfd, 0x82, 0x7a, 0x54,
+	0x8f, 0x58, 0x6e, 0xcb, 0xa2, 0x24, 0xb2, 0xc3, 0xae, 0xc8, 0x17, 0x78, 0x06, 0xcd, 0xff, 0x11,
+	0xd3, 0xa5, 0x66, 0xc0, 0xc8, 0x41, 0xf6, 0xd1, 0x99, 0xca, 0xfb, 0x04, 0x7e, 0xa8, 0xf0, 0x05,
+	0xad, 0x0b, 0x03, 0x94, 0xe4, 0x47, 0xf8, 0x0a, 0xc8, 0xfc, 0x6f, 0x49, 0xbe, 0x54, 0xd6, 0x79,
+	0x49, 0xc9, 0x99, 0x7a, 0xbf, 0x13, 0xab, 0xd2, 0xec, 0x2b, 0xf5, 0xff, 0x19, 0xcc, 0x17, 0xdc,
+	0xa6, 0x82, 0x3b, 0xf1, 0xbe, 0x0c, 0xe6, 0x7a, 0x4c, 0xa7, 0x82, 0x19, 0xe4, 0x18, 0x5f, 0x03,
+	0x2e, 0x6e, 0x9d, 0x68, 0xb8, 0x0e, 0x6b, 0x49, 0xd1, 0xa4, 0xf9, 0x0d, 0x55, 0xd3, 0x08, 0x5c,
+	0x93, 0xab, 0xe0, 0xc8, 0xcc, 0x0d, 0xd2, 0xcc, 0x36, 0x7c, 0x6a, 0xfb, 0x5a, 0x95, 0x4d, 0xdf,
+	0x19, 0x3f, 0x68, 0xb5, 0xf8, 0xa5, 0x9c, 0xdd, 0x03, 0x72, 0x52, 0x7a, 0x75, 0x53, 0x9c, 0x9c,
+	0xe6, 0xde, 0x06, 0xc7, 0x95, 0x26, 0xeb, 0x32, 0x53, 0x1a, 0x8e, 0x45, 0xb9, 0x4d, 0xbe, 0xc9,
+	0xdf, 0xac, 0x05, 0xff, 0xb7, 0x58, 0x85, 0x4a, 0xea, 0x57, 0x87, 0xfa, 0x0e, 0x09, 0xbc, 0xcc,
+	0x5e, 0x36, 0xf2, 0xfd, 0xf9, 0x5f, 0x4b, 0x50, 0xff, 0x25, 0xbc, 0xd5, 0x9e, 0x1e, 0x9f, 0xe7,
+	0x98, 0x9b, 0x92, 0xae, 0x1a, 0xb9, 0xee, 0xd2, 0x4f, 0xc6, 0x34, 0x6a, 0x18, 0x8e, 0xae, 0xef,
+	0x86, 0x5a, 0x38, 0x1e, 0x36, 0x86, 0x83, 0xbb, 0x68, 0x20, 0x27, 0xa3, 0xfb, 0xfe, 0x66, 0x52,
+	0x36, 0xc9, 0x7f, 0x88, 0x3f, 0x7f, 0x2c, 0x3f, 0x6b, 0x53, 0xfa, 0xe7, 0x72, 0xad, 0x1d, 0x27,
+	0xa3, 0xfd, 0x89, 0x16, 0x2f, 0xd5, 0xaa, 0xdb, 0xd4, 0xa2, 0x92, 0x93, 0xbf, 0x13, 0xa0, 0x47,
+	0xfb, 0x93, 0xde, 0x0c, 0xe8, 0x75, 0x9b, 0xbd, 0x18, 0xf8, 0xf9, 0x79, 0x54, 0xf8, 0xf4, 0xdf,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3f, 0x19, 0x6c, 0x41, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/errors/user_list_error.pb.go b/googleapis/ads/googleads/v0/errors/user_list_error.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6d38bc3bcc3f013de5d43a2c9289984e7cd24741
--- /dev/null
+++ b/googleapis/ads/googleads/v0/errors/user_list_error.pb.go
@@ -0,0 +1,227 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/errors/user_list_error.proto
+
+package errors // import "google.golang.org/genproto/googleapis/ads/googleads/v0/errors"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum describing possible user list errors.
+type UserListErrorEnum_UserListError int32
+
+const (
+	// Enum unspecified.
+	UserListErrorEnum_UNSPECIFIED UserListErrorEnum_UserListError = 0
+	// The received error code is not known in this version.
+	UserListErrorEnum_UNKNOWN UserListErrorEnum_UserListError = 1
+	// Creating and updating external remarketing user lists is not supported.
+	UserListErrorEnum_EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED UserListErrorEnum_UserListError = 2
+	// Concrete type of user list is required.
+	UserListErrorEnum_CONCRETE_TYPE_REQUIRED UserListErrorEnum_UserListError = 3
+	// Creating/updating user list conversion types requires specifying the
+	// conversion type Id.
+	UserListErrorEnum_CONVERSION_TYPE_ID_REQUIRED UserListErrorEnum_UserListError = 4
+	// Remarketing user list cannot have duplicate conversion types.
+	UserListErrorEnum_DUPLICATE_CONVERSION_TYPES UserListErrorEnum_UserListError = 5
+	// Conversion type is invalid/unknown.
+	UserListErrorEnum_INVALID_CONVERSION_TYPE UserListErrorEnum_UserListError = 6
+	// User list description is empty or invalid.
+	UserListErrorEnum_INVALID_DESCRIPTION UserListErrorEnum_UserListError = 7
+	// User list name is empty or invalid.
+	UserListErrorEnum_INVALID_NAME UserListErrorEnum_UserListError = 8
+	// Type of the UserList does not match.
+	UserListErrorEnum_INVALID_TYPE UserListErrorEnum_UserListError = 9
+	// Embedded logical user lists are not allowed.
+	UserListErrorEnum_CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND UserListErrorEnum_UserListError = 10
+	// User list rule operand is invalid.
+	UserListErrorEnum_INVALID_USER_LIST_LOGICAL_RULE_OPERAND UserListErrorEnum_UserListError = 11
+	// Name is already being used for another user list for the account.
+	UserListErrorEnum_NAME_ALREADY_USED UserListErrorEnum_UserListError = 12
+	// Name is required when creating a new conversion type.
+	UserListErrorEnum_NEW_CONVERSION_TYPE_NAME_REQUIRED UserListErrorEnum_UserListError = 13
+	// The given conversion type name has been used.
+	UserListErrorEnum_CONVERSION_TYPE_NAME_ALREADY_USED UserListErrorEnum_UserListError = 14
+	// Only an owner account may edit a user list.
+	UserListErrorEnum_OWNERSHIP_REQUIRED_FOR_SET UserListErrorEnum_UserListError = 15
+	// The user list of the type is not mutable.
+	UserListErrorEnum_USER_LIST_MUTATE_NOT_SUPPORTED UserListErrorEnum_UserListError = 16
+	// Rule is invalid.
+	UserListErrorEnum_INVALID_RULE UserListErrorEnum_UserListError = 17
+	// The specified date range is empty.
+	UserListErrorEnum_INVALID_DATE_RANGE UserListErrorEnum_UserListError = 27
+	// A UserList which is privacy sensitive or legal rejected cannot be mutated
+	// by external users.
+	UserListErrorEnum_CAN_NOT_MUTATE_SENSITIVE_USERLIST UserListErrorEnum_UserListError = 28
+	// Maximum number of rulebased user lists a customer can have.
+	UserListErrorEnum_MAX_NUM_RULEBASED_USERLISTS UserListErrorEnum_UserListError = 29
+	// BasicUserList's billable record field cannot be modified once it is set.
+	UserListErrorEnum_CANNOT_MODIFY_BILLABLE_RECORD_COUNT UserListErrorEnum_UserListError = 30
+	// crm_based_user_list.app_id field must be set when upload_key_type is
+	// MOBILE_ADVERTISING_ID.
+	UserListErrorEnum_APP_ID_NOT_SET UserListErrorEnum_UserListError = 31
+	// Name of the user list is reserved for system generated lists and cannot
+	// be used.
+	UserListErrorEnum_USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST UserListErrorEnum_UserListError = 32
+	// Advertiser needs to be whitelisted to use remarketing lists created from
+	// advertiser uploaded data (e.g., Customer Match lists).
+	UserListErrorEnum_ADVERTISER_NOT_WHITELISTED_FOR_USING_UPLOADED_DATA UserListErrorEnum_UserListError = 33
+)
+
+var UserListErrorEnum_UserListError_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "UNKNOWN",
+	2:  "EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED",
+	3:  "CONCRETE_TYPE_REQUIRED",
+	4:  "CONVERSION_TYPE_ID_REQUIRED",
+	5:  "DUPLICATE_CONVERSION_TYPES",
+	6:  "INVALID_CONVERSION_TYPE",
+	7:  "INVALID_DESCRIPTION",
+	8:  "INVALID_NAME",
+	9:  "INVALID_TYPE",
+	10: "CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND",
+	11: "INVALID_USER_LIST_LOGICAL_RULE_OPERAND",
+	12: "NAME_ALREADY_USED",
+	13: "NEW_CONVERSION_TYPE_NAME_REQUIRED",
+	14: "CONVERSION_TYPE_NAME_ALREADY_USED",
+	15: "OWNERSHIP_REQUIRED_FOR_SET",
+	16: "USER_LIST_MUTATE_NOT_SUPPORTED",
+	17: "INVALID_RULE",
+	27: "INVALID_DATE_RANGE",
+	28: "CAN_NOT_MUTATE_SENSITIVE_USERLIST",
+	29: "MAX_NUM_RULEBASED_USERLISTS",
+	30: "CANNOT_MODIFY_BILLABLE_RECORD_COUNT",
+	31: "APP_ID_NOT_SET",
+	32: "USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST",
+	33: "ADVERTISER_NOT_WHITELISTED_FOR_USING_UPLOADED_DATA",
+}
+var UserListErrorEnum_UserListError_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED": 2,
+	"CONCRETE_TYPE_REQUIRED":                              3,
+	"CONVERSION_TYPE_ID_REQUIRED":                         4,
+	"DUPLICATE_CONVERSION_TYPES":                          5,
+	"INVALID_CONVERSION_TYPE":                             6,
+	"INVALID_DESCRIPTION":                                 7,
+	"INVALID_NAME":                                        8,
+	"INVALID_TYPE":                                        9,
+	"CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND":    10,
+	"INVALID_USER_LIST_LOGICAL_RULE_OPERAND":              11,
+	"NAME_ALREADY_USED":                                   12,
+	"NEW_CONVERSION_TYPE_NAME_REQUIRED":                   13,
+	"CONVERSION_TYPE_NAME_ALREADY_USED":                   14,
+	"OWNERSHIP_REQUIRED_FOR_SET":                          15,
+	"USER_LIST_MUTATE_NOT_SUPPORTED":                      16,
+	"INVALID_RULE":                                        17,
+	"INVALID_DATE_RANGE":                                  27,
+	"CAN_NOT_MUTATE_SENSITIVE_USERLIST":                   28,
+	"MAX_NUM_RULEBASED_USERLISTS":                         29,
+	"CANNOT_MODIFY_BILLABLE_RECORD_COUNT":                 30,
+	"APP_ID_NOT_SET":                                      31,
+	"USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST":           32,
+	"ADVERTISER_NOT_WHITELISTED_FOR_USING_UPLOADED_DATA":  33,
+}
+
+func (x UserListErrorEnum_UserListError) String() string {
+	return proto.EnumName(UserListErrorEnum_UserListError_name, int32(x))
+}
+func (UserListErrorEnum_UserListError) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_error_3e90e40f8cd88dd5, []int{0, 0}
+}
+
+// Container for enum describing possible user list errors.
+type UserListErrorEnum struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserListErrorEnum) Reset()         { *m = UserListErrorEnum{} }
+func (m *UserListErrorEnum) String() string { return proto.CompactTextString(m) }
+func (*UserListErrorEnum) ProtoMessage()    {}
+func (*UserListErrorEnum) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_error_3e90e40f8cd88dd5, []int{0}
+}
+func (m *UserListErrorEnum) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListErrorEnum.Unmarshal(m, b)
+}
+func (m *UserListErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListErrorEnum.Marshal(b, m, deterministic)
+}
+func (dst *UserListErrorEnum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListErrorEnum.Merge(dst, src)
+}
+func (m *UserListErrorEnum) XXX_Size() int {
+	return xxx_messageInfo_UserListErrorEnum.Size(m)
+}
+func (m *UserListErrorEnum) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListErrorEnum.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListErrorEnum proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*UserListErrorEnum)(nil), "google.ads.googleads.v0.errors.UserListErrorEnum")
+	proto.RegisterEnum("google.ads.googleads.v0.errors.UserListErrorEnum_UserListError", UserListErrorEnum_UserListError_name, UserListErrorEnum_UserListError_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/errors/user_list_error.proto", fileDescriptor_user_list_error_3e90e40f8cd88dd5)
+}
+
+var fileDescriptor_user_list_error_3e90e40f8cd88dd5 = []byte{
+	// 645 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x5d, 0x4f, 0x13, 0x41,
+	0x14, 0x15, 0xd0, 0xa2, 0xc3, 0xd7, 0x30, 0x46, 0x48, 0x40, 0x8b, 0xd4, 0xa8, 0xd1, 0xc4, 0x6d,
+	0x23, 0x44, 0x1f, 0x7c, 0x9a, 0xee, 0x5c, 0xca, 0x84, 0xed, 0xcc, 0x3a, 0x33, 0xdb, 0x52, 0xd3,
+	0x64, 0x82, 0xb6, 0x69, 0x48, 0x80, 0x25, 0xbb, 0xc0, 0x0f, 0xf2, 0xd1, 0x1f, 0xe1, 0xb3, 0xf1,
+	0xd9, 0x1f, 0x64, 0x66, 0xb6, 0x5b, 0x28, 0xf1, 0xe3, 0xa9, 0xb7, 0xf7, 0x9e, 0x7b, 0xee, 0x9c,
+	0x33, 0x73, 0x17, 0xed, 0x8e, 0xd2, 0x74, 0x74, 0x32, 0xac, 0x1f, 0x0d, 0xf2, 0x7a, 0x11, 0xba,
+	0xe8, 0xaa, 0x51, 0x1f, 0x66, 0x59, 0x9a, 0xe5, 0xf5, 0xcb, 0x7c, 0x98, 0xd9, 0x93, 0xe3, 0xfc,
+	0xc2, 0xfa, 0x44, 0x70, 0x9e, 0xa5, 0x17, 0x29, 0xa9, 0x16, 0xd0, 0xe0, 0x68, 0x90, 0x07, 0x93,
+	0xae, 0xe0, 0xaa, 0x11, 0x14, 0x5d, 0xb5, 0x5f, 0x15, 0xb4, 0x9a, 0xe4, 0xc3, 0x2c, 0x3a, 0xce,
+	0x2f, 0xc0, 0xa5, 0xe0, 0xec, 0xf2, 0xb4, 0xf6, 0xbd, 0x82, 0x96, 0xa6, 0xb2, 0x64, 0x05, 0x2d,
+	0x24, 0x42, 0xc7, 0x10, 0xf2, 0x3d, 0x0e, 0x0c, 0xdf, 0x21, 0x0b, 0x68, 0x3e, 0x11, 0x07, 0x42,
+	0x76, 0x05, 0x9e, 0x21, 0xef, 0xd1, 0x0e, 0x1c, 0x1a, 0x50, 0x82, 0x46, 0x56, 0x41, 0x9b, 0xaa,
+	0x03, 0x30, 0x5c, 0xb4, 0x6c, 0xa2, 0x41, 0xd9, 0x88, 0x6b, 0x63, 0xdb, 0x89, 0xa1, 0x06, 0xac,
+	0x90, 0xc6, 0xea, 0x24, 0x8e, 0xa5, 0x32, 0xc0, 0xf0, 0x2c, 0xd9, 0x40, 0x6b, 0xa1, 0x14, 0xa1,
+	0x02, 0x03, 0xd6, 0xf4, 0x62, 0xb0, 0x0a, 0x3e, 0x26, 0x5c, 0x01, 0xc3, 0x73, 0x64, 0x0b, 0x6d,
+	0x86, 0x52, 0x74, 0x40, 0x69, 0x2e, 0x45, 0x51, 0xe5, 0xec, 0x1a, 0x70, 0x97, 0x54, 0xd1, 0x06,
+	0x4b, 0xe2, 0x88, 0x87, 0x8e, 0xf9, 0x16, 0x54, 0xe3, 0x7b, 0x64, 0x13, 0xad, 0x73, 0xd1, 0xa1,
+	0x11, 0x67, 0xb7, 0xab, 0xb8, 0x42, 0xd6, 0xd1, 0xc3, 0xb2, 0xc8, 0x40, 0x87, 0x8a, 0xc7, 0x86,
+	0x4b, 0x81, 0xe7, 0x09, 0x46, 0x8b, 0x65, 0x41, 0xd0, 0x36, 0xe0, 0xfb, 0x37, 0x33, 0xbe, 0xf9,
+	0x01, 0xd9, 0x45, 0x8d, 0x90, 0x0a, 0xaf, 0x86, 0x32, 0x66, 0x23, 0xd9, 0xe2, 0x21, 0x8d, 0x0a,
+	0xa5, 0x54, 0x4f, 0xff, 0x97, 0x31, 0x28, 0x2a, 0x18, 0x46, 0xe4, 0x35, 0x7a, 0x51, 0xf2, 0x5c,
+	0x1b, 0x53, 0x62, 0x55, 0x12, 0xc1, 0x04, 0xbb, 0x40, 0x1e, 0xa1, 0x55, 0x37, 0xdd, 0xd2, 0x48,
+	0x01, 0x65, 0x3d, 0xd7, 0xc0, 0xf0, 0x22, 0x79, 0x8e, 0xb6, 0x05, 0x74, 0x6f, 0xcb, 0xf1, 0x07,
+	0xbd, 0x76, 0x66, 0xc9, 0xc1, 0xfe, 0x08, 0x99, 0x62, 0x5b, 0x76, 0x06, 0xca, 0xae, 0x00, 0xa5,
+	0xf7, 0x79, 0x3c, 0x69, 0xb7, 0x7b, 0x52, 0x59, 0x0d, 0x06, 0xaf, 0x90, 0x1a, 0xaa, 0xfe, 0xe7,
+	0x06, 0xf1, 0x4d, 0x73, 0x9c, 0x04, 0xbc, 0x4a, 0xd6, 0x10, 0x99, 0x38, 0xeb, 0x3a, 0x14, 0x15,
+	0x2d, 0xc0, 0x9b, 0xfe, 0x50, 0x63, 0xd3, 0xc6, 0x5c, 0x1a, 0x84, 0xe6, 0x86, 0x77, 0xc0, 0xfb,
+	0xe1, 0xa6, 0xe0, 0xc7, 0xee, 0xda, 0xdb, 0xf4, 0xd0, 0x8a, 0xa4, 0xed, 0x09, 0x9b, 0x54, 0x03,
+	0x9b, 0xd4, 0x35, 0x7e, 0x42, 0x5e, 0xa2, 0x67, 0x21, 0x15, 0x9e, 0x46, 0x32, 0xbe, 0xd7, 0xb3,
+	0x4d, 0x1e, 0x45, 0xb4, 0x19, 0x39, 0x07, 0x42, 0xa9, 0xdc, 0x65, 0x27, 0xc2, 0xe0, 0x2a, 0x21,
+	0x68, 0x99, 0xc6, 0xb1, 0x7b, 0x34, 0xfe, 0xd0, 0x60, 0xf0, 0x16, 0x79, 0x83, 0x5e, 0x95, 0x5c,
+	0x85, 0x25, 0x5c, 0x5b, 0x05, 0x1a, 0x54, 0xa7, 0x54, 0xde, 0xd3, 0x06, 0xda, 0x5e, 0x32, 0x7e,
+	0x4a, 0xde, 0xa1, 0xb7, 0x94, 0x75, 0x40, 0x19, 0xee, 0x7c, 0x70, 0x34, 0xdd, 0x7d, 0x6e, 0xc0,
+	0x55, 0xc7, 0xf8, 0x44, 0xfb, 0x87, 0x1e, 0x47, 0x92, 0x32, 0xf0, 0x8a, 0x29, 0xde, 0x6e, 0xfe,
+	0x98, 0x41, 0xb5, 0x2f, 0xe9, 0x69, 0xf0, 0xef, 0xed, 0x6b, 0x92, 0xa9, 0x25, 0x8b, 0xdd, 0xc6,
+	0xc6, 0x33, 0x9f, 0xd8, 0xb8, 0x6b, 0x94, 0x9e, 0x1c, 0x9d, 0x8d, 0x82, 0x34, 0x1b, 0xd5, 0x47,
+	0xc3, 0x33, 0xbf, 0xcf, 0xe5, 0xe6, 0x9f, 0x1f, 0xe7, 0x7f, 0xfb, 0x10, 0x7c, 0x28, 0x7e, 0xbe,
+	0xce, 0xce, 0xb5, 0x28, 0xfd, 0x36, 0x5b, 0x6d, 0x15, 0x64, 0x74, 0x90, 0x07, 0x45, 0xe8, 0xa2,
+	0x4e, 0x23, 0xf0, 0x23, 0xf3, 0x9f, 0x25, 0xa0, 0x4f, 0x07, 0x79, 0x7f, 0x02, 0xe8, 0x77, 0x1a,
+	0xfd, 0x02, 0xf0, 0xb9, 0xe2, 0x07, 0xef, 0xfc, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x76, 0x6d, 0xea,
+	0x58, 0x80, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/account_budget.pb.go b/googleapis/ads/googleads/v0/resources/account_budget.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5fbde38453365dbdaef1e261f8e9f4060e94ffa5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/account_budget.pb.go
@@ -0,0 +1,1051 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/account_budget.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An account-level budget. It contains information about the budget itself,
+// as well as the most recently approved changes to the budget and proposed
+// changes that are pending approval. The proposed changes that are pending
+// approval, if any, are found in 'pending_proposal'.  Effective details about
+// the budget are found in fields prefixed 'approved_', 'adjusted_' and those
+// without a prefix.  Since some effective details may differ from what the user
+// had originally requested (e.g. spending limit), these differences are
+// juxtaposed via 'proposed_', 'approved_', and possibly 'adjusted_' fields.
+//
+// This resource is mutated using AccountBudgetProposal and cannot be mutated
+// directly. A budget may have at most one pending proposal at any given time.
+// It is read through pending_proposal.
+//
+// Once approved, a budget may be subject to adjustments, such as credit
+// adjustments.  Adjustments create differences between the 'approved' and
+// 'adjusted' fields, which would otherwise be identical.
+type AccountBudget struct {
+	// The resource name of the account-level budget.
+	// AccountBudget resource names have the form:
+	//
+	// `customers/{customer_id}/accountBudgets/{account_budget_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the account-level budget.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The resource name of the billing setup associated with this account-level
+	// budget.  BillingSetup resource names have the form:
+	//
+	// `customers/{customer_id}/billingSetups/{billing_setup_id}`
+	BillingSetup *wrappers.StringValue `protobuf:"bytes,3,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// The status of this account-level budget.
+	Status enums.AccountBudgetStatusEnum_AccountBudgetStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.AccountBudgetStatusEnum_AccountBudgetStatus" json:"status,omitempty"`
+	// The name of the account-level budget.
+	Name *wrappers.StringValue `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
+	// The proposed start time of the account-level budget in
+	// yyyy-MM-dd HH:mm:ss format.  If a start time type of NOW was proposed,
+	// this is the time of request.
+	ProposedStartDateTime *wrappers.StringValue `protobuf:"bytes,6,opt,name=proposed_start_date_time,json=proposedStartDateTime,proto3" json:"proposed_start_date_time,omitempty"`
+	// The approved start time of the account-level budget in yyyy-MM-dd HH:mm:ss
+	// format.
+	//
+	// For example, if a new budget is approved after the proposed start time,
+	// the approved start time is the time of approval.
+	ApprovedStartDateTime *wrappers.StringValue `protobuf:"bytes,7,opt,name=approved_start_date_time,json=approvedStartDateTime,proto3" json:"approved_start_date_time,omitempty"`
+	// The total adjustments amount.
+	//
+	// An example of an adjustment is courtesy credits.
+	TotalAdjustmentsMicros *wrappers.Int64Value `protobuf:"bytes,18,opt,name=total_adjustments_micros,json=totalAdjustmentsMicros,proto3" json:"total_adjustments_micros,omitempty"`
+	// The value of Ads that have been served, in micros.
+	//
+	// This includes overdelivery costs, in which case a credit might be
+	// automatically applied to the budget (see total_adjustments_micros).
+	AmountServedMicros *wrappers.Int64Value `protobuf:"bytes,19,opt,name=amount_served_micros,json=amountServedMicros,proto3" json:"amount_served_micros,omitempty"`
+	// A purchase order number is a value that helps users reference this budget
+	// in their monthly invoices.
+	PurchaseOrderNumber *wrappers.StringValue `protobuf:"bytes,20,opt,name=purchase_order_number,json=purchaseOrderNumber,proto3" json:"purchase_order_number,omitempty"`
+	// Notes associated with the budget.
+	Notes *wrappers.StringValue `protobuf:"bytes,21,opt,name=notes,proto3" json:"notes,omitempty"`
+	// The pending proposal to modify this budget, if applicable.
+	PendingProposal *AccountBudget_PendingAccountBudgetProposal `protobuf:"bytes,22,opt,name=pending_proposal,json=pendingProposal,proto3" json:"pending_proposal,omitempty"`
+	// The proposed end time of the account-level budget.
+	//
+	// Types that are valid to be assigned to ProposedEndTime:
+	//	*AccountBudget_ProposedEndDateTime
+	//	*AccountBudget_ProposedEndTimeType
+	ProposedEndTime isAccountBudget_ProposedEndTime `protobuf_oneof:"proposed_end_time"`
+	// The approved end time of the account-level budget.
+	//
+	// For example, if a budget's end time is updated and the proposal is approved
+	// after the proposed end time, the approved end time is the time of approval.
+	//
+	// Types that are valid to be assigned to ApprovedEndTime:
+	//	*AccountBudget_ApprovedEndDateTime
+	//	*AccountBudget_ApprovedEndTimeType
+	ApprovedEndTime isAccountBudget_ApprovedEndTime `protobuf_oneof:"approved_end_time"`
+	// The proposed spending limit.
+	//
+	// Types that are valid to be assigned to ProposedSpendingLimit:
+	//	*AccountBudget_ProposedSpendingLimitMicros
+	//	*AccountBudget_ProposedSpendingLimitType
+	ProposedSpendingLimit isAccountBudget_ProposedSpendingLimit `protobuf_oneof:"proposed_spending_limit"`
+	// The approved spending limit.
+	//
+	// For example, if the amount already spent by the account exceeds the
+	// proposed spending limit at the time the proposal is approved, the approved
+	// spending limit is set to the amount already spent.
+	//
+	// Types that are valid to be assigned to ApprovedSpendingLimit:
+	//	*AccountBudget_ApprovedSpendingLimitMicros
+	//	*AccountBudget_ApprovedSpendingLimitType
+	ApprovedSpendingLimit isAccountBudget_ApprovedSpendingLimit `protobuf_oneof:"approved_spending_limit"`
+	// The spending limit after adjustments have been applied.  Adjustments are
+	// stored in total_adjustments_micros.
+	//
+	// This value has the final say on how much the account is allowed to spend.
+	//
+	// Types that are valid to be assigned to AdjustedSpendingLimit:
+	//	*AccountBudget_AdjustedSpendingLimitMicros
+	//	*AccountBudget_AdjustedSpendingLimitType
+	AdjustedSpendingLimit isAccountBudget_AdjustedSpendingLimit `protobuf_oneof:"adjusted_spending_limit"`
+	XXX_NoUnkeyedLiteral  struct{}                              `json:"-"`
+	XXX_unrecognized      []byte                                `json:"-"`
+	XXX_sizecache         int32                                 `json:"-"`
+}
+
+func (m *AccountBudget) Reset()         { *m = AccountBudget{} }
+func (m *AccountBudget) String() string { return proto.CompactTextString(m) }
+func (*AccountBudget) ProtoMessage()    {}
+func (*AccountBudget) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_0b2aa8095fe7f986, []int{0}
+}
+func (m *AccountBudget) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudget.Unmarshal(m, b)
+}
+func (m *AccountBudget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudget.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudget) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudget.Merge(dst, src)
+}
+func (m *AccountBudget) XXX_Size() int {
+	return xxx_messageInfo_AccountBudget.Size(m)
+}
+func (m *AccountBudget) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudget.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudget proto.InternalMessageInfo
+
+func (m *AccountBudget) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AccountBudget) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetBillingSetup() *wrappers.StringValue {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetStatus() enums.AccountBudgetStatusEnum_AccountBudgetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AccountBudgetStatusEnum_UNSPECIFIED
+}
+
+func (m *AccountBudget) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ApprovedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetTotalAdjustmentsMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalAdjustmentsMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetAmountServedMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.AmountServedMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetPurchaseOrderNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PurchaseOrderNumber
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetNotes() *wrappers.StringValue {
+	if m != nil {
+		return m.Notes
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetPendingProposal() *AccountBudget_PendingAccountBudgetProposal {
+	if m != nil {
+		return m.PendingProposal
+	}
+	return nil
+}
+
+type isAccountBudget_ProposedEndTime interface {
+	isAccountBudget_ProposedEndTime()
+}
+
+type AccountBudget_ProposedEndDateTime struct {
+	ProposedEndDateTime *wrappers.StringValue `protobuf:"bytes,8,opt,name=proposed_end_date_time,json=proposedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudget_ProposedEndTimeType struct {
+	ProposedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,9,opt,name=proposed_end_time_type,json=proposedEndTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudget_ProposedEndDateTime) isAccountBudget_ProposedEndTime() {}
+
+func (*AccountBudget_ProposedEndTimeType) isAccountBudget_ProposedEndTime() {}
+
+func (m *AccountBudget) GetProposedEndTime() isAccountBudget_ProposedEndTime {
+	if m != nil {
+		return m.ProposedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetProposedEndTime().(*AccountBudget_ProposedEndDateTime); ok {
+		return x.ProposedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetProposedEndTime().(*AccountBudget_ProposedEndTimeType); ok {
+		return x.ProposedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_ApprovedEndTime interface {
+	isAccountBudget_ApprovedEndTime()
+}
+
+type AccountBudget_ApprovedEndDateTime struct {
+	ApprovedEndDateTime *wrappers.StringValue `protobuf:"bytes,10,opt,name=approved_end_date_time,json=approvedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudget_ApprovedEndTimeType struct {
+	ApprovedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,11,opt,name=approved_end_time_type,json=approvedEndTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudget_ApprovedEndDateTime) isAccountBudget_ApprovedEndTime() {}
+
+func (*AccountBudget_ApprovedEndTimeType) isAccountBudget_ApprovedEndTime() {}
+
+func (m *AccountBudget) GetApprovedEndTime() isAccountBudget_ApprovedEndTime {
+	if m != nil {
+		return m.ApprovedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudget_ApprovedEndDateTime); ok {
+		return x.ApprovedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudget_ApprovedEndTimeType); ok {
+		return x.ApprovedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_ProposedSpendingLimit interface {
+	isAccountBudget_ProposedSpendingLimit()
+}
+
+type AccountBudget_ProposedSpendingLimitMicros struct {
+	ProposedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,12,opt,name=proposed_spending_limit_micros,json=proposedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_ProposedSpendingLimitType struct {
+	ProposedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,13,opt,name=proposed_spending_limit_type,json=proposedSpendingLimitType,proto3,enum=google.ads.googleads.v0.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_ProposedSpendingLimitMicros) isAccountBudget_ProposedSpendingLimit() {}
+
+func (*AccountBudget_ProposedSpendingLimitType) isAccountBudget_ProposedSpendingLimit() {}
+
+func (m *AccountBudget) GetProposedSpendingLimit() isAccountBudget_ProposedSpendingLimit {
+	if m != nil {
+		return m.ProposedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudget_ProposedSpendingLimitMicros); ok {
+		return x.ProposedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetProposedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudget_ProposedSpendingLimitType); ok {
+		return x.ProposedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_ApprovedSpendingLimit interface {
+	isAccountBudget_ApprovedSpendingLimit()
+}
+
+type AccountBudget_ApprovedSpendingLimitMicros struct {
+	ApprovedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,14,opt,name=approved_spending_limit_micros,json=approvedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_ApprovedSpendingLimitType struct {
+	ApprovedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,15,opt,name=approved_spending_limit_type,json=approvedSpendingLimitType,proto3,enum=google.ads.googleads.v0.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_ApprovedSpendingLimitMicros) isAccountBudget_ApprovedSpendingLimit() {}
+
+func (*AccountBudget_ApprovedSpendingLimitType) isAccountBudget_ApprovedSpendingLimit() {}
+
+func (m *AccountBudget) GetApprovedSpendingLimit() isAccountBudget_ApprovedSpendingLimit {
+	if m != nil {
+		return m.ApprovedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudget_ApprovedSpendingLimitMicros); ok {
+		return x.ApprovedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetApprovedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudget_ApprovedSpendingLimitType); ok {
+		return x.ApprovedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_AdjustedSpendingLimit interface {
+	isAccountBudget_AdjustedSpendingLimit()
+}
+
+type AccountBudget_AdjustedSpendingLimitMicros struct {
+	AdjustedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,16,opt,name=adjusted_spending_limit_micros,json=adjustedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_AdjustedSpendingLimitType struct {
+	AdjustedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,17,opt,name=adjusted_spending_limit_type,json=adjustedSpendingLimitType,proto3,enum=google.ads.googleads.v0.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_AdjustedSpendingLimitMicros) isAccountBudget_AdjustedSpendingLimit() {}
+
+func (*AccountBudget_AdjustedSpendingLimitType) isAccountBudget_AdjustedSpendingLimit() {}
+
+func (m *AccountBudget) GetAdjustedSpendingLimit() isAccountBudget_AdjustedSpendingLimit {
+	if m != nil {
+		return m.AdjustedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetAdjustedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetAdjustedSpendingLimit().(*AccountBudget_AdjustedSpendingLimitMicros); ok {
+		return x.AdjustedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget) GetAdjustedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetAdjustedSpendingLimit().(*AccountBudget_AdjustedSpendingLimitType); ok {
+		return x.AdjustedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AccountBudget) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AccountBudget_OneofMarshaler, _AccountBudget_OneofUnmarshaler, _AccountBudget_OneofSizer, []interface{}{
+		(*AccountBudget_ProposedEndDateTime)(nil),
+		(*AccountBudget_ProposedEndTimeType)(nil),
+		(*AccountBudget_ApprovedEndDateTime)(nil),
+		(*AccountBudget_ApprovedEndTimeType)(nil),
+		(*AccountBudget_ProposedSpendingLimitMicros)(nil),
+		(*AccountBudget_ProposedSpendingLimitType)(nil),
+		(*AccountBudget_ApprovedSpendingLimitMicros)(nil),
+		(*AccountBudget_ApprovedSpendingLimitType)(nil),
+		(*AccountBudget_AdjustedSpendingLimitMicros)(nil),
+		(*AccountBudget_AdjustedSpendingLimitType)(nil),
+	}
+}
+
+func _AccountBudget_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AccountBudget)
+	// proposed_end_time
+	switch x := m.ProposedEndTime.(type) {
+	case *AccountBudget_ProposedEndDateTime:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProposedEndDateTime); err != nil {
+			return err
+		}
+	case *AccountBudget_ProposedEndTimeType:
+		b.EncodeVarint(9<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ProposedEndTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudget.ProposedEndTime has unexpected type %T", x)
+	}
+	// approved_end_time
+	switch x := m.ApprovedEndTime.(type) {
+	case *AccountBudget_ApprovedEndDateTime:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ApprovedEndDateTime); err != nil {
+			return err
+		}
+	case *AccountBudget_ApprovedEndTimeType:
+		b.EncodeVarint(11<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ApprovedEndTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudget.ApprovedEndTime has unexpected type %T", x)
+	}
+	// proposed_spending_limit
+	switch x := m.ProposedSpendingLimit.(type) {
+	case *AccountBudget_ProposedSpendingLimitMicros:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProposedSpendingLimitMicros); err != nil {
+			return err
+		}
+	case *AccountBudget_ProposedSpendingLimitType:
+		b.EncodeVarint(13<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ProposedSpendingLimitType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudget.ProposedSpendingLimit has unexpected type %T", x)
+	}
+	// approved_spending_limit
+	switch x := m.ApprovedSpendingLimit.(type) {
+	case *AccountBudget_ApprovedSpendingLimitMicros:
+		b.EncodeVarint(14<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ApprovedSpendingLimitMicros); err != nil {
+			return err
+		}
+	case *AccountBudget_ApprovedSpendingLimitType:
+		b.EncodeVarint(15<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ApprovedSpendingLimitType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudget.ApprovedSpendingLimit has unexpected type %T", x)
+	}
+	// adjusted_spending_limit
+	switch x := m.AdjustedSpendingLimit.(type) {
+	case *AccountBudget_AdjustedSpendingLimitMicros:
+		b.EncodeVarint(16<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdjustedSpendingLimitMicros); err != nil {
+			return err
+		}
+	case *AccountBudget_AdjustedSpendingLimitType:
+		b.EncodeVarint(17<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdjustedSpendingLimitType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudget.AdjustedSpendingLimit has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AccountBudget_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AccountBudget)
+	switch tag {
+	case 8: // proposed_end_time.proposed_end_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.ProposedEndTime = &AccountBudget_ProposedEndDateTime{msg}
+		return true, err
+	case 9: // proposed_end_time.proposed_end_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ProposedEndTime = &AccountBudget_ProposedEndTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	case 10: // approved_end_time.approved_end_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.ApprovedEndTime = &AccountBudget_ApprovedEndDateTime{msg}
+		return true, err
+	case 11: // approved_end_time.approved_end_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ApprovedEndTime = &AccountBudget_ApprovedEndTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	case 12: // proposed_spending_limit.proposed_spending_limit_micros
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.Int64Value)
+		err := b.DecodeMessage(msg)
+		m.ProposedSpendingLimit = &AccountBudget_ProposedSpendingLimitMicros{msg}
+		return true, err
+	case 13: // proposed_spending_limit.proposed_spending_limit_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ProposedSpendingLimit = &AccountBudget_ProposedSpendingLimitType{enums.SpendingLimitTypeEnum_SpendingLimitType(x)}
+		return true, err
+	case 14: // approved_spending_limit.approved_spending_limit_micros
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.Int64Value)
+		err := b.DecodeMessage(msg)
+		m.ApprovedSpendingLimit = &AccountBudget_ApprovedSpendingLimitMicros{msg}
+		return true, err
+	case 15: // approved_spending_limit.approved_spending_limit_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ApprovedSpendingLimit = &AccountBudget_ApprovedSpendingLimitType{enums.SpendingLimitTypeEnum_SpendingLimitType(x)}
+		return true, err
+	case 16: // adjusted_spending_limit.adjusted_spending_limit_micros
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.Int64Value)
+		err := b.DecodeMessage(msg)
+		m.AdjustedSpendingLimit = &AccountBudget_AdjustedSpendingLimitMicros{msg}
+		return true, err
+	case 17: // adjusted_spending_limit.adjusted_spending_limit_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.AdjustedSpendingLimit = &AccountBudget_AdjustedSpendingLimitType{enums.SpendingLimitTypeEnum_SpendingLimitType(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AccountBudget_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AccountBudget)
+	// proposed_end_time
+	switch x := m.ProposedEndTime.(type) {
+	case *AccountBudget_ProposedEndDateTime:
+		s := proto.Size(x.ProposedEndDateTime)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudget_ProposedEndTimeType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ProposedEndTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// approved_end_time
+	switch x := m.ApprovedEndTime.(type) {
+	case *AccountBudget_ApprovedEndDateTime:
+		s := proto.Size(x.ApprovedEndDateTime)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudget_ApprovedEndTimeType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ApprovedEndTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// proposed_spending_limit
+	switch x := m.ProposedSpendingLimit.(type) {
+	case *AccountBudget_ProposedSpendingLimitMicros:
+		s := proto.Size(x.ProposedSpendingLimitMicros)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudget_ProposedSpendingLimitType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ProposedSpendingLimitType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// approved_spending_limit
+	switch x := m.ApprovedSpendingLimit.(type) {
+	case *AccountBudget_ApprovedSpendingLimitMicros:
+		s := proto.Size(x.ApprovedSpendingLimitMicros)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudget_ApprovedSpendingLimitType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ApprovedSpendingLimitType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// adjusted_spending_limit
+	switch x := m.AdjustedSpendingLimit.(type) {
+	case *AccountBudget_AdjustedSpendingLimitMicros:
+		s := proto.Size(x.AdjustedSpendingLimitMicros)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudget_AdjustedSpendingLimitType:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdjustedSpendingLimitType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A pending proposal associated with the enclosing account-level budget,
+// if applicable.
+type AccountBudget_PendingAccountBudgetProposal struct {
+	// The resource name of the proposal.
+	// AccountBudgetProposal resource names have the form:
+	//
+	//
+	// `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`
+	AccountBudgetProposal *wrappers.StringValue `protobuf:"bytes,1,opt,name=account_budget_proposal,json=accountBudgetProposal,proto3" json:"account_budget_proposal,omitempty"`
+	// The type of this proposal, e.g. END to end the budget associated
+	// with this proposal.
+	ProposalType enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType `protobuf:"varint,2,opt,name=proposal_type,json=proposalType,proto3,enum=google.ads.googleads.v0.enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType" json:"proposal_type,omitempty"`
+	// The name to assign to the account-level budget.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The start time in yyyy-MM-dd HH:mm:ss format.
+	StartDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=start_date_time,json=startDateTime,proto3" json:"start_date_time,omitempty"`
+	// A purchase order number is a value that helps users reference this budget
+	// in their monthly invoices.
+	PurchaseOrderNumber *wrappers.StringValue `protobuf:"bytes,9,opt,name=purchase_order_number,json=purchaseOrderNumber,proto3" json:"purchase_order_number,omitempty"`
+	// Notes associated with this budget.
+	Notes *wrappers.StringValue `protobuf:"bytes,10,opt,name=notes,proto3" json:"notes,omitempty"`
+	// The time when this account-level budget proposal was created.
+	// Formatted as yyyy-MM-dd HH:mm:ss.
+	CreationDateTime *wrappers.StringValue `protobuf:"bytes,11,opt,name=creation_date_time,json=creationDateTime,proto3" json:"creation_date_time,omitempty"`
+	// The end time of the account-level budget.
+	//
+	// Types that are valid to be assigned to EndTime:
+	//	*AccountBudget_PendingAccountBudgetProposal_EndDateTime
+	//	*AccountBudget_PendingAccountBudgetProposal_EndTimeType
+	EndTime isAccountBudget_PendingAccountBudgetProposal_EndTime `protobuf_oneof:"end_time"`
+	// The spending limit.
+	//
+	// Types that are valid to be assigned to SpendingLimit:
+	//	*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros
+	//	*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType
+	SpendingLimit        isAccountBudget_PendingAccountBudgetProposal_SpendingLimit `protobuf_oneof:"spending_limit"`
+	XXX_NoUnkeyedLiteral struct{}                                                   `json:"-"`
+	XXX_unrecognized     []byte                                                     `json:"-"`
+	XXX_sizecache        int32                                                      `json:"-"`
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) Reset() {
+	*m = AccountBudget_PendingAccountBudgetProposal{}
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) String() string {
+	return proto.CompactTextString(m)
+}
+func (*AccountBudget_PendingAccountBudgetProposal) ProtoMessage() {}
+func (*AccountBudget_PendingAccountBudgetProposal) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_0b2aa8095fe7f986, []int{0, 0}
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Unmarshal(m, b)
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudget_PendingAccountBudgetProposal) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Merge(dst, src)
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_Size() int {
+	return xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.Size(m)
+}
+func (m *AccountBudget_PendingAccountBudgetProposal) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudget_PendingAccountBudgetProposal proto.InternalMessageInfo
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetAccountBudgetProposal() *wrappers.StringValue {
+	if m != nil {
+		return m.AccountBudgetProposal
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetProposalType() enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType {
+	if m != nil {
+		return m.ProposalType
+	}
+	return enums.AccountBudgetProposalTypeEnum_UNSPECIFIED
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetPurchaseOrderNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.PurchaseOrderNumber
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetNotes() *wrappers.StringValue {
+	if m != nil {
+		return m.Notes
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetCreationDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CreationDateTime
+	}
+	return nil
+}
+
+type isAccountBudget_PendingAccountBudgetProposal_EndTime interface {
+	isAccountBudget_PendingAccountBudgetProposal_EndTime()
+}
+
+type AccountBudget_PendingAccountBudgetProposal_EndDateTime struct {
+	EndDateTime *wrappers.StringValue `protobuf:"bytes,5,opt,name=end_date_time,json=endDateTime,proto3,oneof"`
+}
+
+type AccountBudget_PendingAccountBudgetProposal_EndTimeType struct {
+	EndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,6,opt,name=end_time_type,json=endTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_EndDateTime) isAccountBudget_PendingAccountBudgetProposal_EndTime() {
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_EndTimeType) isAccountBudget_PendingAccountBudgetProposal_EndTime() {
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetEndTime() isAccountBudget_PendingAccountBudgetProposal_EndTime {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetEndTime().(*AccountBudget_PendingAccountBudgetProposal_EndDateTime); ok {
+		return x.EndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetEndTime().(*AccountBudget_PendingAccountBudgetProposal_EndTimeType); ok {
+		return x.EndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudget_PendingAccountBudgetProposal_SpendingLimit interface {
+	isAccountBudget_PendingAccountBudgetProposal_SpendingLimit()
+}
+
+type AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros struct {
+	SpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,7,opt,name=spending_limit_micros,json=spendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudget_PendingAccountBudgetProposal_SpendingLimitType struct {
+	SpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,8,opt,name=spending_limit_type,json=spendingLimitType,proto3,enum=google.ads.googleads.v0.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros) isAccountBudget_PendingAccountBudgetProposal_SpendingLimit() {
+}
+
+func (*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType) isAccountBudget_PendingAccountBudgetProposal_SpendingLimit() {
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetSpendingLimit() isAccountBudget_PendingAccountBudgetProposal_SpendingLimit {
+	if m != nil {
+		return m.SpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetSpendingLimit().(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros); ok {
+		return x.SpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudget_PendingAccountBudgetProposal) GetSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetSpendingLimit().(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType); ok {
+		return x.SpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AccountBudget_PendingAccountBudgetProposal) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AccountBudget_PendingAccountBudgetProposal_OneofMarshaler, _AccountBudget_PendingAccountBudgetProposal_OneofUnmarshaler, _AccountBudget_PendingAccountBudgetProposal_OneofSizer, []interface{}{
+		(*AccountBudget_PendingAccountBudgetProposal_EndDateTime)(nil),
+		(*AccountBudget_PendingAccountBudgetProposal_EndTimeType)(nil),
+		(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros)(nil),
+		(*AccountBudget_PendingAccountBudgetProposal_SpendingLimitType)(nil),
+	}
+}
+
+func _AccountBudget_PendingAccountBudgetProposal_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AccountBudget_PendingAccountBudgetProposal)
+	// end_time
+	switch x := m.EndTime.(type) {
+	case *AccountBudget_PendingAccountBudgetProposal_EndDateTime:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.EndDateTime); err != nil {
+			return err
+		}
+	case *AccountBudget_PendingAccountBudgetProposal_EndTimeType:
+		b.EncodeVarint(6<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.EndTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudget_PendingAccountBudgetProposal.EndTime has unexpected type %T", x)
+	}
+	// spending_limit
+	switch x := m.SpendingLimit.(type) {
+	case *AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SpendingLimitMicros); err != nil {
+			return err
+		}
+	case *AccountBudget_PendingAccountBudgetProposal_SpendingLimitType:
+		b.EncodeVarint(8<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.SpendingLimitType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudget_PendingAccountBudgetProposal.SpendingLimit has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AccountBudget_PendingAccountBudgetProposal_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AccountBudget_PendingAccountBudgetProposal)
+	switch tag {
+	case 5: // end_time.end_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.EndTime = &AccountBudget_PendingAccountBudgetProposal_EndDateTime{msg}
+		return true, err
+	case 6: // end_time.end_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.EndTime = &AccountBudget_PendingAccountBudgetProposal_EndTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	case 7: // spending_limit.spending_limit_micros
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.Int64Value)
+		err := b.DecodeMessage(msg)
+		m.SpendingLimit = &AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros{msg}
+		return true, err
+	case 8: // spending_limit.spending_limit_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.SpendingLimit = &AccountBudget_PendingAccountBudgetProposal_SpendingLimitType{enums.SpendingLimitTypeEnum_SpendingLimitType(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AccountBudget_PendingAccountBudgetProposal_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AccountBudget_PendingAccountBudgetProposal)
+	// end_time
+	switch x := m.EndTime.(type) {
+	case *AccountBudget_PendingAccountBudgetProposal_EndDateTime:
+		s := proto.Size(x.EndDateTime)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudget_PendingAccountBudgetProposal_EndTimeType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.EndTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// spending_limit
+	switch x := m.SpendingLimit.(type) {
+	case *AccountBudget_PendingAccountBudgetProposal_SpendingLimitMicros:
+		s := proto.Size(x.SpendingLimitMicros)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudget_PendingAccountBudgetProposal_SpendingLimitType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.SpendingLimitType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*AccountBudget)(nil), "google.ads.googleads.v0.resources.AccountBudget")
+	proto.RegisterType((*AccountBudget_PendingAccountBudgetProposal)(nil), "google.ads.googleads.v0.resources.AccountBudget.PendingAccountBudgetProposal")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/account_budget.proto", fileDescriptor_account_budget_0b2aa8095fe7f986)
+}
+
+var fileDescriptor_account_budget_0b2aa8095fe7f986 = []byte{
+	// 976 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdb, 0x6e, 0xdb, 0x36,
+	0x18, 0x9e, 0x6c, 0xe7, 0xc4, 0xc4, 0x39, 0xc8, 0x4d, 0xaa, 0x1c, 0x50, 0xa4, 0x1b, 0x06, 0x04,
+	0x18, 0x26, 0x1b, 0x59, 0xd1, 0x61, 0xd8, 0xcd, 0x6c, 0xb4, 0x6b, 0x16, 0x2c, 0x5d, 0x46, 0x67,
+	0xb9, 0x28, 0x02, 0x08, 0xb4, 0xc5, 0x69, 0xda, 0x2c, 0x52, 0x20, 0xa9, 0xac, 0xc5, 0x9e, 0x60,
+	0xaf, 0xb1, 0x8b, 0x5d, 0xec, 0x41, 0x76, 0xb1, 0x17, 0xd8, 0xeb, 0x14, 0xa4, 0x44, 0xda, 0xb2,
+	0xa5, 0x48, 0x45, 0x72, 0x47, 0x51, 0xff, 0xf7, 0xfd, 0xff, 0x47, 0xfe, 0x07, 0x09, 0x3c, 0x0f,
+	0x28, 0x0d, 0x26, 0xb8, 0x8b, 0x7c, 0xde, 0x4d, 0x97, 0x72, 0x75, 0xdb, 0xeb, 0x32, 0xcc, 0x69,
+	0xc2, 0xc6, 0x98, 0x77, 0xd1, 0x78, 0x4c, 0x13, 0x22, 0xbc, 0x51, 0xe2, 0x07, 0x58, 0xb8, 0x31,
+	0xa3, 0x82, 0xda, 0x4f, 0x53, 0x63, 0x17, 0xf9, 0xdc, 0x35, 0x38, 0xf7, 0xb6, 0xe7, 0x1a, 0xdc,
+	0xc1, 0x37, 0x65, 0xd4, 0x98, 0x24, 0xd1, 0x3c, 0xad, 0x17, 0x33, 0x1a, 0x53, 0x8e, 0x26, 0x9e,
+	0x78, 0x17, 0xe3, 0xd4, 0xc9, 0xc1, 0x57, 0x1f, 0xc4, 0xc0, 0x05, 0x12, 0x09, 0xcf, 0xa0, 0x5f,
+	0xde, 0x0d, 0xe5, 0x31, 0x26, 0x7e, 0x48, 0x02, 0x6f, 0x12, 0x46, 0xa1, 0x98, 0xf5, 0xf9, 0xf9,
+	0xdd, 0x40, 0x11, 0x46, 0x78, 0xd6, 0xfc, 0x49, 0x66, 0xae, 0x9e, 0x46, 0xc9, 0xcf, 0xdd, 0xdf,
+	0x19, 0x8a, 0x63, 0xcc, 0xb2, 0x38, 0x3e, 0xfe, 0xdb, 0x01, 0xed, 0x7e, 0x1a, 0xe7, 0x40, 0x85,
+	0x69, 0x7f, 0x02, 0xda, 0xfa, 0x8c, 0x3c, 0x82, 0x22, 0xec, 0x58, 0xc7, 0xd6, 0xc9, 0x1a, 0xdc,
+	0xd0, 0x9b, 0xaf, 0x51, 0x84, 0xed, 0xcf, 0x40, 0x23, 0xf4, 0x9d, 0xc6, 0xb1, 0x75, 0xb2, 0x7e,
+	0x7a, 0x98, 0x1d, 0xb0, 0xab, 0x7d, 0xb8, 0xdf, 0x11, 0xf1, 0xfc, 0xd9, 0x35, 0x9a, 0x24, 0x18,
+	0x36, 0x42, 0xdf, 0xee, 0x83, 0xf6, 0x28, 0x9c, 0x4c, 0xa4, 0x1c, 0x8e, 0x45, 0x12, 0x3b, 0x4d,
+	0x85, 0x3b, 0x5a, 0xc0, 0x0d, 0x05, 0x0b, 0x49, 0x90, 0x02, 0x37, 0x32, 0xc8, 0x50, 0x22, 0xec,
+	0x11, 0x58, 0x4e, 0x8f, 0xcf, 0x69, 0x1d, 0x5b, 0x27, 0x9b, 0xa7, 0xe7, 0x6e, 0xd9, 0xfd, 0xaa,
+	0x63, 0x70, 0x73, 0x92, 0x86, 0x0a, 0xf9, 0x92, 0x24, 0x51, 0xd1, 0x3e, 0xcc, 0x98, 0xed, 0x1e,
+	0x68, 0x29, 0xbd, 0x4b, 0x35, 0xa2, 0x53, 0x96, 0xf6, 0x4f, 0xc0, 0x49, 0xd3, 0x02, 0xfb, 0xf2,
+	0x76, 0x99, 0xf0, 0x7c, 0x24, 0xb0, 0x27, 0xef, 0xc0, 0x59, 0xae, 0xc1, 0xb2, 0xab, 0xd1, 0x43,
+	0x09, 0x7e, 0x81, 0x04, 0xbe, 0x0a, 0x53, 0x5a, 0x14, 0xc7, 0x8c, 0xde, 0x16, 0xd0, 0xae, 0xd4,
+	0xa1, 0xd5, 0xe8, 0x05, 0x5a, 0x41, 0x05, 0x9a, 0x78, 0xc8, 0xff, 0x35, 0xe1, 0x22, 0xc2, 0x44,
+	0x70, 0x2f, 0x0a, 0xc7, 0x8c, 0x72, 0xc7, 0xae, 0xbe, 0xc9, 0x3d, 0x05, 0xee, 0x4f, 0xb1, 0x17,
+	0x0a, 0x6a, 0x5f, 0x80, 0x47, 0x28, 0x52, 0x79, 0xce, 0x31, 0x93, 0x21, 0x67, 0x94, 0x9d, 0x6a,
+	0x4a, 0x3b, 0x05, 0x0e, 0x15, 0x2e, 0xa3, 0xbb, 0x04, 0xbb, 0x71, 0xc2, 0xc6, 0xbf, 0x20, 0x8e,
+	0x3d, 0xca, 0x7c, 0xcc, 0x3c, 0x92, 0x44, 0x23, 0xcc, 0x9c, 0x47, 0x35, 0x94, 0x77, 0x34, 0xf4,
+	0x07, 0x89, 0x7c, 0xad, 0x80, 0xf6, 0x29, 0x58, 0x22, 0x54, 0x60, 0xee, 0xec, 0xd6, 0x60, 0x48,
+	0x4d, 0xed, 0xb7, 0x60, 0x5b, 0x57, 0xa0, 0x2e, 0x7c, 0x67, 0x4f, 0xc1, 0x2f, 0xdc, 0xca, 0xce,
+	0x92, 0xcf, 0x32, 0xf7, 0x32, 0x25, 0xca, 0x6d, 0x5e, 0x66, 0xa4, 0x70, 0x2b, 0x73, 0xa3, 0x37,
+	0xec, 0x21, 0xd8, 0x33, 0x39, 0x85, 0x89, 0x3f, 0x73, 0xf5, 0xab, 0xd5, 0xe1, 0x9f, 0x7d, 0x04,
+	0x3b, 0x1a, 0xfd, 0x92, 0xf8, 0xe6, 0xea, 0x7f, 0x9b, 0x23, 0x35, 0x5d, 0xc2, 0x59, 0x53, 0xe5,
+	0xf4, 0xac, 0xa2, 0x9c, 0x24, 0xc9, 0xd5, 0xbb, 0x18, 0xab, 0x1a, 0xd2, 0x0f, 0x73, 0xce, 0xf4,
+	0xb6, 0x54, 0x60, 0xd2, 0x37, 0xaf, 0x00, 0xd4, 0x50, 0x60, 0xc1, 0x8e, 0x46, 0xcf, 0x29, 0xc8,
+	0x91, 0x4e, 0x15, 0xac, 0xdf, 0x43, 0x41, 0xde, 0x99, 0x51, 0x30, 0x02, 0x4f, 0xa6, 0x75, 0x9d,
+	0xef, 0xc4, 0x59, 0x72, 0x6f, 0x54, 0x26, 0xf7, 0x59, 0x03, 0x1e, 0x9a, 0xf2, 0xce, 0x38, 0xbe,
+	0x97, 0x14, 0x59, 0x9e, 0xff, 0x69, 0x81, 0xa3, 0x32, 0x27, 0x4a, 0x57, 0x5b, 0xe9, 0xfa, 0xb6,
+	0x42, 0x57, 0x8e, 0xda, 0x08, 0x5c, 0xd8, 0x3d, 0x6b, 0xc0, 0xfd, 0xc2, 0x68, 0xb4, 0xde, 0x69,
+	0xc3, 0x29, 0xd4, 0xbb, 0x59, 0xad, 0xb7, 0x09, 0x0f, 0x4d, 0xdf, 0x29, 0xd1, 0x5b, 0xe6, 0x44,
+	0xe9, 0xdd, 0x7a, 0x50, 0xbd, 0x4d, 0xb8, 0x5f, 0x18, 0x8d, 0xd1, 0xab, 0xfa, 0x58, 0xa9, 0xde,
+	0xed, 0x6a, 0xbd, 0x2d, 0x78, 0xa8, 0x49, 0x4a, 0xf5, 0x96, 0x38, 0x51, 0x7a, 0x77, 0x1e, 0x54,
+	0x6f, 0x0b, 0xee, 0x17, 0x46, 0x23, 0x5f, 0x1e, 0xfc, 0xbb, 0x02, 0x8e, 0xee, 0xea, 0x42, 0xf6,
+	0x15, 0x78, 0x5c, 0xf2, 0xb9, 0xa3, 0xa6, 0x7f, 0xf5, 0xc0, 0x29, 0x64, 0xfd, 0x03, 0xb4, 0x73,
+	0x5f, 0x4d, 0xea, 0x7b, 0x61, 0xf3, 0xf4, 0xfa, 0x43, 0x66, 0xb7, 0x26, 0x33, 0xd2, 0x4b, 0xdf,
+	0xc2, 0x8d, 0x78, 0xe6, 0xc9, 0x4c, 0xf3, 0x66, 0xed, 0x69, 0xfe, 0x02, 0x6c, 0xcd, 0x4f, 0xdb,
+	0x56, 0x0d, 0x70, 0x9b, 0xe7, 0xa6, 0x6c, 0xe9, 0xfc, 0x5a, 0xbb, 0xf7, 0xfc, 0x02, 0xf5, 0xe7,
+	0xd7, 0x39, 0xb0, 0xc7, 0x0c, 0x23, 0x11, 0x52, 0x32, 0x23, 0x67, 0xbd, 0x06, 0xc1, 0xb6, 0xc6,
+	0x19, 0x45, 0x03, 0xd0, 0xce, 0xb7, 0xf1, 0xa5, 0x5a, 0x83, 0x68, 0x1d, 0xcf, 0xb4, 0xef, 0x37,
+	0x29, 0xc7, 0xb4, 0x6b, 0x2f, 0xdf, 0x6b, 0xee, 0x48, 0x6e, 0xd3, 0xad, 0x7f, 0x04, 0xbb, 0xc5,
+	0x45, 0xbc, 0x52, 0x5d, 0xc4, 0x16, 0xec, 0xf0, 0x82, 0xe2, 0x7d, 0x0b, 0x3a, 0x45, 0x25, 0xbb,
+	0xfa, 0xa0, 0x25, 0x6b, 0xc1, 0x1d, 0x3e, 0xbf, 0x39, 0x00, 0x60, 0x55, 0x1f, 0xd4, 0x60, 0x1b,
+	0x6c, 0xe6, 0xa3, 0x18, 0x74, 0xc0, 0xce, 0xc2, 0x1c, 0x97, 0x9b, 0x0b, 0xa3, 0x71, 0xb0, 0x0f,
+	0x1e, 0x97, 0x4c, 0x17, 0xf9, 0xaa, 0xa4, 0x11, 0xab, 0x57, 0xc5, 0x3d, 0x6b, 0xf0, 0xbf, 0x05,
+	0x3e, 0x1d, 0xd3, 0xa8, 0xfa, 0xeb, 0x67, 0x60, 0xcf, 0x97, 0xa8, 0xa0, 0x97, 0xd6, 0x9b, 0xf3,
+	0x0c, 0x18, 0xd0, 0x09, 0x22, 0x81, 0x4b, 0x59, 0xd0, 0x0d, 0x30, 0x51, 0x77, 0xa2, 0xff, 0x63,
+	0xe2, 0x90, 0xdf, 0xf1, 0x9f, 0xf7, 0xb5, 0x59, 0xfd, 0xd5, 0x68, 0xbe, 0xea, 0xf7, 0xff, 0x69,
+	0x3c, 0x7d, 0x95, 0x52, 0xf6, 0x7d, 0xee, 0xa6, 0x4b, 0xb9, 0xba, 0xee, 0xb9, 0x50, 0x5b, 0xfe,
+	0xa7, 0x6d, 0x6e, 0xfa, 0x3e, 0xbf, 0x31, 0x36, 0x37, 0xd7, 0xbd, 0x1b, 0x63, 0x33, 0x5a, 0x56,
+	0x41, 0x7c, 0xf1, 0x3e, 0x00, 0x00, 0xff, 0xff, 0x70, 0x45, 0x2e, 0xc2, 0x6b, 0x0e, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/account_budget_proposal.pb.go b/googleapis/ads/googleads/v0/resources/account_budget_proposal.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..2fcc4cf33a6928360bb6bb76e4ab5f429e37f877
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/account_budget_proposal.pb.go
@@ -0,0 +1,710 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/account_budget_proposal.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An account-level budget proposal.
+//
+// All fields prefixed with 'proposed' may not necessarily be applied directly.
+// For example, proposed spending limits may be adjusted before their
+// application.  This is true if the 'proposed' field has an 'approved'
+// counterpart, e.g. spending limits.
+//
+// Please note that the proposal type (proposal_type) changes which fields are
+// required and which must remain empty.
+type AccountBudgetProposal struct {
+	// The resource name of the proposal.
+	// AccountBudgetProposal resource names have the form:
+	//
+	//
+	// `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the proposal.
+	Id *wrappers.Int64Value `protobuf:"bytes,14,opt,name=id,proto3" json:"id,omitempty"`
+	// The resource name of the billing setup associated with this proposal.
+	BillingSetup *wrappers.StringValue `protobuf:"bytes,2,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// The resource name of the account-level budget associated with this
+	// proposal.
+	AccountBudget *wrappers.StringValue `protobuf:"bytes,3,opt,name=account_budget,json=accountBudget,proto3" json:"account_budget,omitempty"`
+	// The type of this proposal, e.g. END to end the budget associated with this
+	// proposal.
+	ProposalType enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType `protobuf:"varint,4,opt,name=proposal_type,json=proposalType,proto3,enum=google.ads.googleads.v0.enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType" json:"proposal_type,omitempty"`
+	// The status of this proposal.
+	// When a new proposal is created, the status defaults to PENDING.
+	Status enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus `protobuf:"varint,15,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus" json:"status,omitempty"`
+	// The name to assign to the account-level budget.
+	ProposedName *wrappers.StringValue `protobuf:"bytes,5,opt,name=proposed_name,json=proposedName,proto3" json:"proposed_name,omitempty"`
+	// The approved start date time in yyyy-mm-dd hh:mm:ss format.
+	ApprovedStartDateTime *wrappers.StringValue `protobuf:"bytes,20,opt,name=approved_start_date_time,json=approvedStartDateTime,proto3" json:"approved_start_date_time,omitempty"`
+	// A purchase order number is a value that enables the user to help them
+	// reference this budget in their monthly invoices.
+	ProposedPurchaseOrderNumber *wrappers.StringValue `protobuf:"bytes,12,opt,name=proposed_purchase_order_number,json=proposedPurchaseOrderNumber,proto3" json:"proposed_purchase_order_number,omitempty"`
+	// Notes associated with this budget.
+	ProposedNotes *wrappers.StringValue `protobuf:"bytes,13,opt,name=proposed_notes,json=proposedNotes,proto3" json:"proposed_notes,omitempty"`
+	// The date time when this account-level budget proposal was created, which is
+	// not the same as its approval date time, if applicable.
+	CreationDateTime *wrappers.StringValue `protobuf:"bytes,16,opt,name=creation_date_time,json=creationDateTime,proto3" json:"creation_date_time,omitempty"`
+	// The date time when this account-level budget was approved, if applicable.
+	ApprovalDateTime *wrappers.StringValue `protobuf:"bytes,17,opt,name=approval_date_time,json=approvalDateTime,proto3" json:"approval_date_time,omitempty"`
+	// The proposed start date time of the account-level budget, which cannot be
+	// in the past.
+	//
+	// Types that are valid to be assigned to ProposedStartTime:
+	//	*AccountBudgetProposal_ProposedStartDateTime
+	//	*AccountBudgetProposal_ProposedStartTimeType
+	ProposedStartTime isAccountBudgetProposal_ProposedStartTime `protobuf_oneof:"proposed_start_time"`
+	// The proposed end date time of the account-level budget, which cannot be in
+	// the past.
+	//
+	// Types that are valid to be assigned to ProposedEndTime:
+	//	*AccountBudgetProposal_ProposedEndDateTime
+	//	*AccountBudgetProposal_ProposedEndTimeType
+	ProposedEndTime isAccountBudgetProposal_ProposedEndTime `protobuf_oneof:"proposed_end_time"`
+	// The approved end date time of the account-level budget.
+	//
+	// Types that are valid to be assigned to ApprovedEndTime:
+	//	*AccountBudgetProposal_ApprovedEndDateTime
+	//	*AccountBudgetProposal_ApprovedEndTimeType
+	ApprovedEndTime isAccountBudgetProposal_ApprovedEndTime `protobuf_oneof:"approved_end_time"`
+	// The proposed spending limit.
+	//
+	// Types that are valid to be assigned to ProposedSpendingLimit:
+	//	*AccountBudgetProposal_ProposedSpendingLimitMicros
+	//	*AccountBudgetProposal_ProposedSpendingLimitType
+	ProposedSpendingLimit isAccountBudgetProposal_ProposedSpendingLimit `protobuf_oneof:"proposed_spending_limit"`
+	// The approved spending limit.
+	//
+	// Types that are valid to be assigned to ApprovedSpendingLimit:
+	//	*AccountBudgetProposal_ApprovedSpendingLimitMicros
+	//	*AccountBudgetProposal_ApprovedSpendingLimitType
+	ApprovedSpendingLimit isAccountBudgetProposal_ApprovedSpendingLimit `protobuf_oneof:"approved_spending_limit"`
+	XXX_NoUnkeyedLiteral  struct{}                                      `json:"-"`
+	XXX_unrecognized      []byte                                        `json:"-"`
+	XXX_sizecache         int32                                         `json:"-"`
+}
+
+func (m *AccountBudgetProposal) Reset()         { *m = AccountBudgetProposal{} }
+func (m *AccountBudgetProposal) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposal) ProtoMessage()    {}
+func (*AccountBudgetProposal) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_0a40c45df7b8d2e1, []int{0}
+}
+func (m *AccountBudgetProposal) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposal.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposal.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudgetProposal) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposal.Merge(dst, src)
+}
+func (m *AccountBudgetProposal) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposal.Size(m)
+}
+func (m *AccountBudgetProposal) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposal.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposal proto.InternalMessageInfo
+
+func (m *AccountBudgetProposal) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AccountBudgetProposal) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetBillingSetup() *wrappers.StringValue {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetAccountBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.AccountBudget
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposalType() enums.AccountBudgetProposalTypeEnum_AccountBudgetProposalType {
+	if m != nil {
+		return m.ProposalType
+	}
+	return enums.AccountBudgetProposalTypeEnum_UNSPECIFIED
+}
+
+func (m *AccountBudgetProposal) GetStatus() enums.AccountBudgetProposalStatusEnum_AccountBudgetProposalStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AccountBudgetProposalStatusEnum_UNSPECIFIED
+}
+
+func (m *AccountBudgetProposal) GetProposedName() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedName
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ApprovedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedPurchaseOrderNumber() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedPurchaseOrderNumber
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedNotes() *wrappers.StringValue {
+	if m != nil {
+		return m.ProposedNotes
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetCreationDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.CreationDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovalDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.ApprovalDateTime
+	}
+	return nil
+}
+
+type isAccountBudgetProposal_ProposedStartTime interface {
+	isAccountBudgetProposal_ProposedStartTime()
+}
+
+type AccountBudgetProposal_ProposedStartDateTime struct {
+	ProposedStartDateTime *wrappers.StringValue `protobuf:"bytes,18,opt,name=proposed_start_date_time,json=proposedStartDateTime,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ProposedStartTimeType struct {
+	ProposedStartTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,7,opt,name=proposed_start_time_type,json=proposedStartTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudgetProposal_ProposedStartDateTime) isAccountBudgetProposal_ProposedStartTime() {}
+
+func (*AccountBudgetProposal_ProposedStartTimeType) isAccountBudgetProposal_ProposedStartTime() {}
+
+func (m *AccountBudgetProposal) GetProposedStartTime() isAccountBudgetProposal_ProposedStartTime {
+	if m != nil {
+		return m.ProposedStartTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedStartDateTime() *wrappers.StringValue {
+	if x, ok := m.GetProposedStartTime().(*AccountBudgetProposal_ProposedStartDateTime); ok {
+		return x.ProposedStartDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedStartTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetProposedStartTime().(*AccountBudgetProposal_ProposedStartTimeType); ok {
+		return x.ProposedStartTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ProposedEndTime interface {
+	isAccountBudgetProposal_ProposedEndTime()
+}
+
+type AccountBudgetProposal_ProposedEndDateTime struct {
+	ProposedEndDateTime *wrappers.StringValue `protobuf:"bytes,19,opt,name=proposed_end_date_time,json=proposedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ProposedEndTimeType struct {
+	ProposedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,9,opt,name=proposed_end_time_type,json=proposedEndTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudgetProposal_ProposedEndDateTime) isAccountBudgetProposal_ProposedEndTime() {}
+
+func (*AccountBudgetProposal_ProposedEndTimeType) isAccountBudgetProposal_ProposedEndTime() {}
+
+func (m *AccountBudgetProposal) GetProposedEndTime() isAccountBudgetProposal_ProposedEndTime {
+	if m != nil {
+		return m.ProposedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetProposedEndTime().(*AccountBudgetProposal_ProposedEndDateTime); ok {
+		return x.ProposedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetProposedEndTime().(*AccountBudgetProposal_ProposedEndTimeType); ok {
+		return x.ProposedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ApprovedEndTime interface {
+	isAccountBudgetProposal_ApprovedEndTime()
+}
+
+type AccountBudgetProposal_ApprovedEndDateTime struct {
+	ApprovedEndDateTime *wrappers.StringValue `protobuf:"bytes,21,opt,name=approved_end_date_time,json=approvedEndDateTime,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ApprovedEndTimeType struct {
+	ApprovedEndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,22,opt,name=approved_end_time_type,json=approvedEndTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*AccountBudgetProposal_ApprovedEndDateTime) isAccountBudgetProposal_ApprovedEndTime() {}
+
+func (*AccountBudgetProposal_ApprovedEndTimeType) isAccountBudgetProposal_ApprovedEndTime() {}
+
+func (m *AccountBudgetProposal) GetApprovedEndTime() isAccountBudgetProposal_ApprovedEndTime {
+	if m != nil {
+		return m.ApprovedEndTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudgetProposal_ApprovedEndDateTime); ok {
+		return x.ApprovedEndDateTime
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetApprovedEndTime().(*AccountBudgetProposal_ApprovedEndTimeType); ok {
+		return x.ApprovedEndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ProposedSpendingLimit interface {
+	isAccountBudgetProposal_ProposedSpendingLimit()
+}
+
+type AccountBudgetProposal_ProposedSpendingLimitMicros struct {
+	ProposedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,10,opt,name=proposed_spending_limit_micros,json=proposedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ProposedSpendingLimitType struct {
+	ProposedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,11,opt,name=proposed_spending_limit_type,json=proposedSpendingLimitType,proto3,enum=google.ads.googleads.v0.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudgetProposal_ProposedSpendingLimitMicros) isAccountBudgetProposal_ProposedSpendingLimit() {
+}
+
+func (*AccountBudgetProposal_ProposedSpendingLimitType) isAccountBudgetProposal_ProposedSpendingLimit() {
+}
+
+func (m *AccountBudgetProposal) GetProposedSpendingLimit() isAccountBudgetProposal_ProposedSpendingLimit {
+	if m != nil {
+		return m.ProposedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudgetProposal_ProposedSpendingLimitMicros); ok {
+		return x.ProposedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetProposedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetProposedSpendingLimit().(*AccountBudgetProposal_ProposedSpendingLimitType); ok {
+		return x.ProposedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+type isAccountBudgetProposal_ApprovedSpendingLimit interface {
+	isAccountBudgetProposal_ApprovedSpendingLimit()
+}
+
+type AccountBudgetProposal_ApprovedSpendingLimitMicros struct {
+	ApprovedSpendingLimitMicros *wrappers.Int64Value `protobuf:"bytes,23,opt,name=approved_spending_limit_micros,json=approvedSpendingLimitMicros,proto3,oneof"`
+}
+
+type AccountBudgetProposal_ApprovedSpendingLimitType struct {
+	ApprovedSpendingLimitType enums.SpendingLimitTypeEnum_SpendingLimitType `protobuf:"varint,24,opt,name=approved_spending_limit_type,json=approvedSpendingLimitType,proto3,enum=google.ads.googleads.v0.enums.SpendingLimitTypeEnum_SpendingLimitType,oneof"`
+}
+
+func (*AccountBudgetProposal_ApprovedSpendingLimitMicros) isAccountBudgetProposal_ApprovedSpendingLimit() {
+}
+
+func (*AccountBudgetProposal_ApprovedSpendingLimitType) isAccountBudgetProposal_ApprovedSpendingLimit() {
+}
+
+func (m *AccountBudgetProposal) GetApprovedSpendingLimit() isAccountBudgetProposal_ApprovedSpendingLimit {
+	if m != nil {
+		return m.ApprovedSpendingLimit
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedSpendingLimitMicros() *wrappers.Int64Value {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudgetProposal_ApprovedSpendingLimitMicros); ok {
+		return x.ApprovedSpendingLimitMicros
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposal) GetApprovedSpendingLimitType() enums.SpendingLimitTypeEnum_SpendingLimitType {
+	if x, ok := m.GetApprovedSpendingLimit().(*AccountBudgetProposal_ApprovedSpendingLimitType); ok {
+		return x.ApprovedSpendingLimitType
+	}
+	return enums.SpendingLimitTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AccountBudgetProposal) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AccountBudgetProposal_OneofMarshaler, _AccountBudgetProposal_OneofUnmarshaler, _AccountBudgetProposal_OneofSizer, []interface{}{
+		(*AccountBudgetProposal_ProposedStartDateTime)(nil),
+		(*AccountBudgetProposal_ProposedStartTimeType)(nil),
+		(*AccountBudgetProposal_ProposedEndDateTime)(nil),
+		(*AccountBudgetProposal_ProposedEndTimeType)(nil),
+		(*AccountBudgetProposal_ApprovedEndDateTime)(nil),
+		(*AccountBudgetProposal_ApprovedEndTimeType)(nil),
+		(*AccountBudgetProposal_ProposedSpendingLimitMicros)(nil),
+		(*AccountBudgetProposal_ProposedSpendingLimitType)(nil),
+		(*AccountBudgetProposal_ApprovedSpendingLimitMicros)(nil),
+		(*AccountBudgetProposal_ApprovedSpendingLimitType)(nil),
+	}
+}
+
+func _AccountBudgetProposal_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AccountBudgetProposal)
+	// proposed_start_time
+	switch x := m.ProposedStartTime.(type) {
+	case *AccountBudgetProposal_ProposedStartDateTime:
+		b.EncodeVarint(18<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProposedStartDateTime); err != nil {
+			return err
+		}
+	case *AccountBudgetProposal_ProposedStartTimeType:
+		b.EncodeVarint(7<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ProposedStartTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudgetProposal.ProposedStartTime has unexpected type %T", x)
+	}
+	// proposed_end_time
+	switch x := m.ProposedEndTime.(type) {
+	case *AccountBudgetProposal_ProposedEndDateTime:
+		b.EncodeVarint(19<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProposedEndDateTime); err != nil {
+			return err
+		}
+	case *AccountBudgetProposal_ProposedEndTimeType:
+		b.EncodeVarint(9<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ProposedEndTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudgetProposal.ProposedEndTime has unexpected type %T", x)
+	}
+	// approved_end_time
+	switch x := m.ApprovedEndTime.(type) {
+	case *AccountBudgetProposal_ApprovedEndDateTime:
+		b.EncodeVarint(21<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ApprovedEndDateTime); err != nil {
+			return err
+		}
+	case *AccountBudgetProposal_ApprovedEndTimeType:
+		b.EncodeVarint(22<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ApprovedEndTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudgetProposal.ApprovedEndTime has unexpected type %T", x)
+	}
+	// proposed_spending_limit
+	switch x := m.ProposedSpendingLimit.(type) {
+	case *AccountBudgetProposal_ProposedSpendingLimitMicros:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProposedSpendingLimitMicros); err != nil {
+			return err
+		}
+	case *AccountBudgetProposal_ProposedSpendingLimitType:
+		b.EncodeVarint(11<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ProposedSpendingLimitType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudgetProposal.ProposedSpendingLimit has unexpected type %T", x)
+	}
+	// approved_spending_limit
+	switch x := m.ApprovedSpendingLimit.(type) {
+	case *AccountBudgetProposal_ApprovedSpendingLimitMicros:
+		b.EncodeVarint(23<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ApprovedSpendingLimitMicros); err != nil {
+			return err
+		}
+	case *AccountBudgetProposal_ApprovedSpendingLimitType:
+		b.EncodeVarint(24<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ApprovedSpendingLimitType))
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudgetProposal.ApprovedSpendingLimit has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AccountBudgetProposal_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AccountBudgetProposal)
+	switch tag {
+	case 18: // proposed_start_time.proposed_start_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.ProposedStartTime = &AccountBudgetProposal_ProposedStartDateTime{msg}
+		return true, err
+	case 7: // proposed_start_time.proposed_start_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ProposedStartTime = &AccountBudgetProposal_ProposedStartTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	case 19: // proposed_end_time.proposed_end_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.ProposedEndTime = &AccountBudgetProposal_ProposedEndDateTime{msg}
+		return true, err
+	case 9: // proposed_end_time.proposed_end_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ProposedEndTime = &AccountBudgetProposal_ProposedEndTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	case 21: // approved_end_time.approved_end_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.ApprovedEndTime = &AccountBudgetProposal_ApprovedEndDateTime{msg}
+		return true, err
+	case 22: // approved_end_time.approved_end_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ApprovedEndTime = &AccountBudgetProposal_ApprovedEndTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	case 10: // proposed_spending_limit.proposed_spending_limit_micros
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.Int64Value)
+		err := b.DecodeMessage(msg)
+		m.ProposedSpendingLimit = &AccountBudgetProposal_ProposedSpendingLimitMicros{msg}
+		return true, err
+	case 11: // proposed_spending_limit.proposed_spending_limit_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ProposedSpendingLimit = &AccountBudgetProposal_ProposedSpendingLimitType{enums.SpendingLimitTypeEnum_SpendingLimitType(x)}
+		return true, err
+	case 23: // approved_spending_limit.approved_spending_limit_micros
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.Int64Value)
+		err := b.DecodeMessage(msg)
+		m.ApprovedSpendingLimit = &AccountBudgetProposal_ApprovedSpendingLimitMicros{msg}
+		return true, err
+	case 24: // approved_spending_limit.approved_spending_limit_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.ApprovedSpendingLimit = &AccountBudgetProposal_ApprovedSpendingLimitType{enums.SpendingLimitTypeEnum_SpendingLimitType(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AccountBudgetProposal_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AccountBudgetProposal)
+	// proposed_start_time
+	switch x := m.ProposedStartTime.(type) {
+	case *AccountBudgetProposal_ProposedStartDateTime:
+		s := proto.Size(x.ProposedStartDateTime)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudgetProposal_ProposedStartTimeType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ProposedStartTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// proposed_end_time
+	switch x := m.ProposedEndTime.(type) {
+	case *AccountBudgetProposal_ProposedEndDateTime:
+		s := proto.Size(x.ProposedEndDateTime)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudgetProposal_ProposedEndTimeType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ProposedEndTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// approved_end_time
+	switch x := m.ApprovedEndTime.(type) {
+	case *AccountBudgetProposal_ApprovedEndDateTime:
+		s := proto.Size(x.ApprovedEndDateTime)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudgetProposal_ApprovedEndTimeType:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ApprovedEndTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// proposed_spending_limit
+	switch x := m.ProposedSpendingLimit.(type) {
+	case *AccountBudgetProposal_ProposedSpendingLimitMicros:
+		s := proto.Size(x.ProposedSpendingLimitMicros)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudgetProposal_ProposedSpendingLimitType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.ProposedSpendingLimitType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// approved_spending_limit
+	switch x := m.ApprovedSpendingLimit.(type) {
+	case *AccountBudgetProposal_ApprovedSpendingLimitMicros:
+		s := proto.Size(x.ApprovedSpendingLimitMicros)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudgetProposal_ApprovedSpendingLimitType:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.ApprovedSpendingLimitType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*AccountBudgetProposal)(nil), "google.ads.googleads.v0.resources.AccountBudgetProposal")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/account_budget_proposal.proto", fileDescriptor_account_budget_proposal_0a40c45df7b8d2e1)
+}
+
+var fileDescriptor_account_budget_proposal_0a40c45df7b8d2e1 = []byte{
+	// 803 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x49, 0x3b, 0x86, 0xe6, 0xb5, 0x63, 0x4b, 0xe9, 0x96, 0xfd, 0xd1, 0xb4, 0x81, 0x90,
+	0x26, 0x21, 0xd2, 0x6a, 0x4c, 0x70, 0xc1, 0x05, 0xb4, 0x30, 0x36, 0x26, 0x18, 0x55, 0x3a, 0x8a,
+	0x34, 0x55, 0x8a, 0xdc, 0xc6, 0x84, 0x88, 0x24, 0x8e, 0x1c, 0x67, 0x68, 0xe2, 0x09, 0x78, 0x0d,
+	0x2e, 0x79, 0x14, 0x5e, 0x02, 0xf1, 0x26, 0xc8, 0x4e, 0xec, 0x26, 0x6d, 0xb3, 0x46, 0x1b, 0x77,
+	0x4e, 0xec, 0xef, 0x3b, 0xe7, 0x77, 0x7c, 0xec, 0x04, 0xbc, 0xb0, 0x31, 0xb6, 0x5d, 0xd4, 0x80,
+	0x56, 0xd8, 0x88, 0x87, 0x6c, 0x74, 0xd1, 0x6c, 0x10, 0x14, 0xe2, 0x88, 0x0c, 0x51, 0xd8, 0x80,
+	0xc3, 0x21, 0x8e, 0x7c, 0x6a, 0x0e, 0x22, 0xcb, 0x46, 0xd4, 0x0c, 0x08, 0x0e, 0x70, 0x08, 0x5d,
+	0x3d, 0x20, 0x98, 0x62, 0x75, 0x37, 0x56, 0xe9, 0xd0, 0x0a, 0x75, 0x69, 0xa0, 0x5f, 0x34, 0x75,
+	0x69, 0xb0, 0xd1, 0xce, 0x8b, 0x81, 0xfc, 0xc8, 0xcb, 0xf5, 0x37, 0x43, 0x0a, 0x69, 0x14, 0xc6,
+	0x61, 0x36, 0x5e, 0x5e, 0xcf, 0x83, 0x5e, 0x06, 0x28, 0x71, 0x78, 0x76, 0xb5, 0x43, 0x18, 0x20,
+	0xdf, 0x72, 0x7c, 0xdb, 0x74, 0x1d, 0xcf, 0xa1, 0x69, 0xe1, 0xe3, 0xab, 0x85, 0xd4, 0xf1, 0x50,
+	0x7a, 0xf9, 0x76, 0xb2, 0x9c, 0x3f, 0x0d, 0xa2, 0xcf, 0x8d, 0x6f, 0x04, 0x06, 0x01, 0x22, 0x09,
+	0xc9, 0xfd, 0xbf, 0xcb, 0xa0, 0xde, 0x8a, 0xd3, 0x6d, 0xf3, 0x6c, 0x3b, 0x49, 0xb2, 0xea, 0x03,
+	0x50, 0x15, 0x45, 0x33, 0x7d, 0xe8, 0x21, 0x4d, 0xd9, 0x51, 0xf6, 0x16, 0x8c, 0x8a, 0x78, 0x79,
+	0x0a, 0x3d, 0xa4, 0x3e, 0x02, 0x25, 0xc7, 0xd2, 0x96, 0x76, 0x94, 0xbd, 0xc5, 0xfd, 0xcd, 0xa4,
+	0xe2, 0xba, 0x88, 0xa5, 0xbf, 0xf5, 0xe9, 0xd3, 0x83, 0x1e, 0x74, 0x23, 0x64, 0x94, 0x1c, 0x4b,
+	0x6d, 0x81, 0xea, 0xc0, 0x71, 0x5d, 0x86, 0x15, 0x22, 0x1a, 0x05, 0x5a, 0x89, 0xeb, 0xb6, 0x26,
+	0x74, 0x5d, 0x4a, 0x1c, 0xdf, 0x8e, 0x85, 0x95, 0x44, 0xd2, 0x65, 0x0a, 0xf5, 0x15, 0x58, 0xca,
+	0x16, 0x57, 0x2b, 0x17, 0xf0, 0xa8, 0xc2, 0x34, 0xa1, 0xfa, 0x1d, 0x54, 0x33, 0x5b, 0xa2, 0xcd,
+	0xed, 0x28, 0x7b, 0x4b, 0xfb, 0x3d, 0x3d, 0xaf, 0x79, 0x78, 0x69, 0xf5, 0xa9, 0x65, 0x3a, 0xbb,
+	0x0c, 0xd0, 0xa1, 0x1f, 0x79, 0xf9, 0xb3, 0x46, 0x25, 0x48, 0x3d, 0xa9, 0x04, 0xcc, 0xc7, 0xad,
+	0xa4, 0xdd, 0xe5, 0x51, 0xcf, 0xaf, 0x13, 0xb5, 0xcb, 0x1d, 0xf2, 0xe3, 0xc6, 0xf3, 0x46, 0x12,
+	0x89, 0x15, 0x3e, 0xce, 0x01, 0x59, 0xf1, 0x56, 0xde, 0x2e, 0x52, 0x78, 0x21, 0xe1, 0x1b, 0xfd,
+	0x11, 0x68, 0x30, 0x08, 0x08, 0xbe, 0x40, 0x16, 0x3b, 0x0a, 0x84, 0x9a, 0x16, 0xa4, 0xc8, 0x64,
+	0xed, 0xa6, 0xdd, 0x2b, 0xe0, 0x56, 0x17, 0xea, 0x2e, 0x13, 0xbf, 0x86, 0x14, 0x9d, 0x39, 0x1e,
+	0x52, 0x21, 0xd8, 0x96, 0x99, 0x05, 0x11, 0x19, 0x7e, 0x81, 0x21, 0x32, 0x31, 0xb1, 0x10, 0x31,
+	0xfd, 0xc8, 0x1b, 0x20, 0xa2, 0x55, 0x0a, 0x98, 0x6f, 0x0a, 0x8f, 0x4e, 0x62, 0xf1, 0x81, 0x39,
+	0x9c, 0x72, 0x03, 0xd6, 0x32, 0x23, 0x78, 0x4c, 0x51, 0xa8, 0x55, 0x8b, 0xb4, 0x8c, 0xa4, 0x67,
+	0x12, 0xf5, 0x04, 0xa8, 0x43, 0x82, 0x20, 0x75, 0xb0, 0x9f, 0x02, 0x5f, 0x2e, 0x60, 0xb4, 0x2c,
+	0x74, 0x92, 0xf9, 0x04, 0xa8, 0x71, 0x31, 0xa0, 0x9b, 0xf2, 0x5a, 0x29, 0xe2, 0x25, 0x74, 0xd2,
+	0xeb, 0x13, 0xd0, 0x24, 0xdc, 0xf8, 0xb6, 0xa8, 0xb3, 0x1d, 0x8f, 0x6f, 0x19, 0x75, 0xa1, 0xcf,
+	0x6e, 0x0c, 0x9e, 0x30, 0x96, 0x37, 0x8b, 0x76, 0x87, 0x37, 0xee, 0xc1, 0x8c, 0xc6, 0x65, 0x36,
+	0xf2, 0x74, 0x88, 0x87, 0x89, 0x80, 0x62, 0x42, 0xed, 0x82, 0x55, 0x19, 0x10, 0xf9, 0x56, 0x8a,
+	0xa3, 0x56, 0x80, 0x43, 0x31, 0x6a, 0x42, 0x7d, 0xe8, 0x5b, 0x92, 0xe2, 0xeb, 0x98, 0xe9, 0x88,
+	0x61, 0xe1, 0x06, 0x0c, 0xd9, 0x60, 0x69, 0x02, 0x79, 0x44, 0xb2, 0x04, 0xf5, 0x02, 0x04, 0x25,
+	0xa3, 0x26, 0xd4, 0x63, 0x04, 0x19, 0xd3, 0x11, 0xc1, 0xea, 0x0d, 0x08, 0xb2, 0xc1, 0x24, 0xc1,
+	0x20, 0x75, 0x1a, 0xc7, 0xbe, 0x40, 0x9e, 0x33, 0x24, 0x38, 0xd4, 0xc0, 0xcc, 0x9b, 0xfe, 0xb8,
+	0x3c, 0x3a, 0x8e, 0xdd, 0xc4, 0xe3, 0x1d, 0xb3, 0x78, 0xcf, 0x1d, 0xd4, 0x1f, 0x0a, 0xd8, 0xca,
+	0x0b, 0xc2, 0xb9, 0x16, 0x39, 0xd7, 0x9b, 0x19, 0x5c, 0x19, 0x6b, 0x09, 0x38, 0xf1, 0xf6, 0xb8,
+	0x6c, 0xac, 0x4f, 0xcd, 0x46, 0xf0, 0x8e, 0x2e, 0xb5, 0xa9, 0xbc, 0x6b, 0xb3, 0x79, 0xe7, 0x8c,
+	0x4d, 0x79, 0xb7, 0xe5, 0xf0, 0xe6, 0x05, 0xe1, 0xbc, 0xda, 0x7f, 0xe5, 0x9d, 0x33, 0xd6, 0xa7,
+	0x66, 0xc3, 0x26, 0xdb, 0x75, 0x50, 0x9b, 0x72, 0xa8, 0xdb, 0x35, 0xb0, 0x32, 0x71, 0x4a, 0xd8,
+	0xcb, 0x89, 0xc6, 0x6b, 0xaf, 0x83, 0xb5, 0x9c, 0xbd, 0x63, 0x53, 0x39, 0x98, 0xed, 0x3f, 0x0a,
+	0x78, 0x38, 0xc4, 0x9e, 0x3e, 0xf3, 0xdf, 0xac, 0xbd, 0x31, 0xf5, 0x6b, 0xd6, 0x61, 0x55, 0xef,
+	0x28, 0xe7, 0x27, 0x89, 0x81, 0x8d, 0x5d, 0xe8, 0xdb, 0x3a, 0x26, 0x76, 0xc3, 0x46, 0x3e, 0xdf,
+	0x13, 0xf1, 0x2b, 0x14, 0x38, 0xe1, 0x15, 0x3f, 0x8f, 0xcf, 0xe5, 0xe8, 0x67, 0xa9, 0x7c, 0xd4,
+	0x6a, 0xfd, 0x2a, 0xed, 0x1e, 0xc5, 0x96, 0x2d, 0x2b, 0xd4, 0xe3, 0x21, 0x1b, 0xf5, 0x9a, 0xba,
+	0x21, 0x56, 0xfe, 0x16, 0x6b, 0xfa, 0x2d, 0x2b, 0xec, 0xcb, 0x35, 0xfd, 0x5e, 0xb3, 0x2f, 0xd7,
+	0x0c, 0xe6, 0x79, 0x12, 0x4f, 0xfe, 0x05, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x32, 0xf4, 0xce, 0xc0,
+	0x0a, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/ad.pb.go b/googleapis/ads/googleads/v0/resources/ad.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..01a10c08cdd3eb87c997727a43043418abd1aba8
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/ad.pb.go
@@ -0,0 +1,635 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/ad.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An ad.
+type Ad struct {
+	// The ID of the ad.
+	Id *wrappers.Int64Value `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// The list of possible final URLs after all cross-domain redirects for the
+	// ad.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,2,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// The list of possible final mobile URLs after all cross-domain redirects
+	// for the ad.
+	FinalMobileUrls []*wrappers.StringValue `protobuf:"bytes,16,rep,name=final_mobile_urls,json=finalMobileUrls,proto3" json:"final_mobile_urls,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,12,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The list of mappings that can be used to substitute custom parameter tags
+	// in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,10,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// The URL that appears in the ad description for some ad formats.
+	DisplayUrl *wrappers.StringValue `protobuf:"bytes,4,opt,name=display_url,json=displayUrl,proto3" json:"display_url,omitempty"`
+	// The type of ad.
+	Type enums.AdTypeEnum_AdType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.AdTypeEnum_AdType" json:"type,omitempty"`
+	// Indicates if this ad was automatically added by Google Ads and not by a
+	// user. For example, this could happen when ads are automatically created as
+	// suggestions for new ads based on knowledge of how existing ads are
+	// performing.
+	AddedByGoogleAds *wrappers.BoolValue `protobuf:"bytes,19,opt,name=added_by_google_ads,json=addedByGoogleAds,proto3" json:"added_by_google_ads,omitempty"`
+	// The device preference for the ad. You can only specify a preference for
+	// mobile devices. When this preference is set the ad will be preferred over
+	// other ads when being displayed on a mobile device. The ad can still be
+	// displayed on other device types, e.g. if no other ads are available.
+	// If unspecified (no device preference), all devices are targeted.
+	// This is only supported by some ad types.
+	DevicePreference enums.DeviceEnum_Device `protobuf:"varint,20,opt,name=device_preference,json=devicePreference,proto3,enum=google.ads.googleads.v0.enums.DeviceEnum_Device" json:"device_preference,omitempty"`
+	// The name of the ad. This is only used to be able to identify the ad. It
+	// does not need to be unique and does not affect the served ad.
+	Name *wrappers.StringValue `protobuf:"bytes,23,opt,name=name,proto3" json:"name,omitempty"`
+	// Details pertinent to the ad type. Exactly one value must be set.
+	//
+	// Types that are valid to be assigned to AdData:
+	//	*Ad_TextAd
+	//	*Ad_ExpandedTextAd
+	//	*Ad_DynamicSearchAd
+	//	*Ad_ResponsiveDisplayAd
+	//	*Ad_CallOnlyAd
+	//	*Ad_ExpandedDynamicSearchAd
+	//	*Ad_HotelAd
+	//	*Ad_ShoppingSmartAd
+	//	*Ad_ShoppingProductAd
+	//	*Ad_GmailAd
+	//	*Ad_ImageAd
+	AdData               isAd_AdData `protobuf_oneof:"ad_data"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *Ad) Reset()         { *m = Ad{} }
+func (m *Ad) String() string { return proto.CompactTextString(m) }
+func (*Ad) ProtoMessage()    {}
+func (*Ad) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_81ea002d2bacbe35, []int{0}
+}
+func (m *Ad) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Ad.Unmarshal(m, b)
+}
+func (m *Ad) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Ad.Marshal(b, m, deterministic)
+}
+func (dst *Ad) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Ad.Merge(dst, src)
+}
+func (m *Ad) XXX_Size() int {
+	return xxx_messageInfo_Ad.Size(m)
+}
+func (m *Ad) XXX_DiscardUnknown() {
+	xxx_messageInfo_Ad.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Ad proto.InternalMessageInfo
+
+func (m *Ad) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Ad) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *Ad) GetFinalMobileUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalMobileUrls
+	}
+	return nil
+}
+
+func (m *Ad) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *Ad) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *Ad) GetDisplayUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.DisplayUrl
+	}
+	return nil
+}
+
+func (m *Ad) GetType() enums.AdTypeEnum_AdType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AdTypeEnum_UNSPECIFIED
+}
+
+func (m *Ad) GetAddedByGoogleAds() *wrappers.BoolValue {
+	if m != nil {
+		return m.AddedByGoogleAds
+	}
+	return nil
+}
+
+func (m *Ad) GetDevicePreference() enums.DeviceEnum_Device {
+	if m != nil {
+		return m.DevicePreference
+	}
+	return enums.DeviceEnum_UNSPECIFIED
+}
+
+func (m *Ad) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+type isAd_AdData interface {
+	isAd_AdData()
+}
+
+type Ad_TextAd struct {
+	TextAd *common.TextAdInfo `protobuf:"bytes,6,opt,name=text_ad,json=textAd,proto3,oneof"`
+}
+
+type Ad_ExpandedTextAd struct {
+	ExpandedTextAd *common.ExpandedTextAdInfo `protobuf:"bytes,7,opt,name=expanded_text_ad,json=expandedTextAd,proto3,oneof"`
+}
+
+type Ad_DynamicSearchAd struct {
+	DynamicSearchAd *common.DynamicSearchAdInfo `protobuf:"bytes,8,opt,name=dynamic_search_ad,json=dynamicSearchAd,proto3,oneof"`
+}
+
+type Ad_ResponsiveDisplayAd struct {
+	ResponsiveDisplayAd *common.ResponsiveDisplayAdInfo `protobuf:"bytes,9,opt,name=responsive_display_ad,json=responsiveDisplayAd,proto3,oneof"`
+}
+
+type Ad_CallOnlyAd struct {
+	CallOnlyAd *common.CallOnlyAdInfo `protobuf:"bytes,13,opt,name=call_only_ad,json=callOnlyAd,proto3,oneof"`
+}
+
+type Ad_ExpandedDynamicSearchAd struct {
+	ExpandedDynamicSearchAd *common.ExpandedDynamicSearchAdInfo `protobuf:"bytes,14,opt,name=expanded_dynamic_search_ad,json=expandedDynamicSearchAd,proto3,oneof"`
+}
+
+type Ad_HotelAd struct {
+	HotelAd *common.HotelAdInfo `protobuf:"bytes,15,opt,name=hotel_ad,json=hotelAd,proto3,oneof"`
+}
+
+type Ad_ShoppingSmartAd struct {
+	ShoppingSmartAd *common.ShoppingSmartAdInfo `protobuf:"bytes,17,opt,name=shopping_smart_ad,json=shoppingSmartAd,proto3,oneof"`
+}
+
+type Ad_ShoppingProductAd struct {
+	ShoppingProductAd *common.ShoppingProductAdInfo `protobuf:"bytes,18,opt,name=shopping_product_ad,json=shoppingProductAd,proto3,oneof"`
+}
+
+type Ad_GmailAd struct {
+	GmailAd *common.GmailAdInfo `protobuf:"bytes,21,opt,name=gmail_ad,json=gmailAd,proto3,oneof"`
+}
+
+type Ad_ImageAd struct {
+	ImageAd *common.ImageAdInfo `protobuf:"bytes,22,opt,name=image_ad,json=imageAd,proto3,oneof"`
+}
+
+func (*Ad_TextAd) isAd_AdData() {}
+
+func (*Ad_ExpandedTextAd) isAd_AdData() {}
+
+func (*Ad_DynamicSearchAd) isAd_AdData() {}
+
+func (*Ad_ResponsiveDisplayAd) isAd_AdData() {}
+
+func (*Ad_CallOnlyAd) isAd_AdData() {}
+
+func (*Ad_ExpandedDynamicSearchAd) isAd_AdData() {}
+
+func (*Ad_HotelAd) isAd_AdData() {}
+
+func (*Ad_ShoppingSmartAd) isAd_AdData() {}
+
+func (*Ad_ShoppingProductAd) isAd_AdData() {}
+
+func (*Ad_GmailAd) isAd_AdData() {}
+
+func (*Ad_ImageAd) isAd_AdData() {}
+
+func (m *Ad) GetAdData() isAd_AdData {
+	if m != nil {
+		return m.AdData
+	}
+	return nil
+}
+
+func (m *Ad) GetTextAd() *common.TextAdInfo {
+	if x, ok := m.GetAdData().(*Ad_TextAd); ok {
+		return x.TextAd
+	}
+	return nil
+}
+
+func (m *Ad) GetExpandedTextAd() *common.ExpandedTextAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ExpandedTextAd); ok {
+		return x.ExpandedTextAd
+	}
+	return nil
+}
+
+func (m *Ad) GetDynamicSearchAd() *common.DynamicSearchAdInfo {
+	if x, ok := m.GetAdData().(*Ad_DynamicSearchAd); ok {
+		return x.DynamicSearchAd
+	}
+	return nil
+}
+
+func (m *Ad) GetResponsiveDisplayAd() *common.ResponsiveDisplayAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ResponsiveDisplayAd); ok {
+		return x.ResponsiveDisplayAd
+	}
+	return nil
+}
+
+func (m *Ad) GetCallOnlyAd() *common.CallOnlyAdInfo {
+	if x, ok := m.GetAdData().(*Ad_CallOnlyAd); ok {
+		return x.CallOnlyAd
+	}
+	return nil
+}
+
+func (m *Ad) GetExpandedDynamicSearchAd() *common.ExpandedDynamicSearchAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ExpandedDynamicSearchAd); ok {
+		return x.ExpandedDynamicSearchAd
+	}
+	return nil
+}
+
+func (m *Ad) GetHotelAd() *common.HotelAdInfo {
+	if x, ok := m.GetAdData().(*Ad_HotelAd); ok {
+		return x.HotelAd
+	}
+	return nil
+}
+
+func (m *Ad) GetShoppingSmartAd() *common.ShoppingSmartAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ShoppingSmartAd); ok {
+		return x.ShoppingSmartAd
+	}
+	return nil
+}
+
+func (m *Ad) GetShoppingProductAd() *common.ShoppingProductAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ShoppingProductAd); ok {
+		return x.ShoppingProductAd
+	}
+	return nil
+}
+
+func (m *Ad) GetGmailAd() *common.GmailAdInfo {
+	if x, ok := m.GetAdData().(*Ad_GmailAd); ok {
+		return x.GmailAd
+	}
+	return nil
+}
+
+func (m *Ad) GetImageAd() *common.ImageAdInfo {
+	if x, ok := m.GetAdData().(*Ad_ImageAd); ok {
+		return x.ImageAd
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Ad) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Ad_OneofMarshaler, _Ad_OneofUnmarshaler, _Ad_OneofSizer, []interface{}{
+		(*Ad_TextAd)(nil),
+		(*Ad_ExpandedTextAd)(nil),
+		(*Ad_DynamicSearchAd)(nil),
+		(*Ad_ResponsiveDisplayAd)(nil),
+		(*Ad_CallOnlyAd)(nil),
+		(*Ad_ExpandedDynamicSearchAd)(nil),
+		(*Ad_HotelAd)(nil),
+		(*Ad_ShoppingSmartAd)(nil),
+		(*Ad_ShoppingProductAd)(nil),
+		(*Ad_GmailAd)(nil),
+		(*Ad_ImageAd)(nil),
+	}
+}
+
+func _Ad_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Ad)
+	// ad_data
+	switch x := m.AdData.(type) {
+	case *Ad_TextAd:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TextAd); err != nil {
+			return err
+		}
+	case *Ad_ExpandedTextAd:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ExpandedTextAd); err != nil {
+			return err
+		}
+	case *Ad_DynamicSearchAd:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DynamicSearchAd); err != nil {
+			return err
+		}
+	case *Ad_ResponsiveDisplayAd:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ResponsiveDisplayAd); err != nil {
+			return err
+		}
+	case *Ad_CallOnlyAd:
+		b.EncodeVarint(13<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CallOnlyAd); err != nil {
+			return err
+		}
+	case *Ad_ExpandedDynamicSearchAd:
+		b.EncodeVarint(14<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ExpandedDynamicSearchAd); err != nil {
+			return err
+		}
+	case *Ad_HotelAd:
+		b.EncodeVarint(15<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelAd); err != nil {
+			return err
+		}
+	case *Ad_ShoppingSmartAd:
+		b.EncodeVarint(17<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ShoppingSmartAd); err != nil {
+			return err
+		}
+	case *Ad_ShoppingProductAd:
+		b.EncodeVarint(18<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ShoppingProductAd); err != nil {
+			return err
+		}
+	case *Ad_GmailAd:
+		b.EncodeVarint(21<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.GmailAd); err != nil {
+			return err
+		}
+	case *Ad_ImageAd:
+		b.EncodeVarint(22<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ImageAd); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Ad.AdData has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Ad_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Ad)
+	switch tag {
+	case 6: // ad_data.text_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TextAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_TextAd{msg}
+		return true, err
+	case 7: // ad_data.expanded_text_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ExpandedTextAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_ExpandedTextAd{msg}
+		return true, err
+	case 8: // ad_data.dynamic_search_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.DynamicSearchAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_DynamicSearchAd{msg}
+		return true, err
+	case 9: // ad_data.responsive_display_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ResponsiveDisplayAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_ResponsiveDisplayAd{msg}
+		return true, err
+	case 13: // ad_data.call_only_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.CallOnlyAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_CallOnlyAd{msg}
+		return true, err
+	case 14: // ad_data.expanded_dynamic_search_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ExpandedDynamicSearchAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_ExpandedDynamicSearchAd{msg}
+		return true, err
+	case 15: // ad_data.hotel_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.HotelAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_HotelAd{msg}
+		return true, err
+	case 17: // ad_data.shopping_smart_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ShoppingSmartAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_ShoppingSmartAd{msg}
+		return true, err
+	case 18: // ad_data.shopping_product_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ShoppingProductAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_ShoppingProductAd{msg}
+		return true, err
+	case 21: // ad_data.gmail_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.GmailAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_GmailAd{msg}
+		return true, err
+	case 22: // ad_data.image_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ImageAdInfo)
+		err := b.DecodeMessage(msg)
+		m.AdData = &Ad_ImageAd{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Ad_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Ad)
+	// ad_data
+	switch x := m.AdData.(type) {
+	case *Ad_TextAd:
+		s := proto.Size(x.TextAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_ExpandedTextAd:
+		s := proto.Size(x.ExpandedTextAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_DynamicSearchAd:
+		s := proto.Size(x.DynamicSearchAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_ResponsiveDisplayAd:
+		s := proto.Size(x.ResponsiveDisplayAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_CallOnlyAd:
+		s := proto.Size(x.CallOnlyAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_ExpandedDynamicSearchAd:
+		s := proto.Size(x.ExpandedDynamicSearchAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_HotelAd:
+		s := proto.Size(x.HotelAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_ShoppingSmartAd:
+		s := proto.Size(x.ShoppingSmartAd)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_ShoppingProductAd:
+		s := proto.Size(x.ShoppingProductAd)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_GmailAd:
+		s := proto.Size(x.GmailAd)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Ad_ImageAd:
+		s := proto.Size(x.ImageAd)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*Ad)(nil), "google.ads.googleads.v0.resources.Ad")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/ad.proto", fileDescriptor_ad_81ea002d2bacbe35)
+}
+
+var fileDescriptor_ad_81ea002d2bacbe35 = []byte{
+	// 841 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x96, 0xdf, 0x6e, 0xe4, 0x34,
+	0x14, 0xc6, 0x99, 0xd9, 0xd2, 0xd9, 0xba, 0xbb, 0xfd, 0xe3, 0xa1, 0x6c, 0x54, 0x10, 0xea, 0x22,
+	0x21, 0x55, 0xad, 0xe4, 0x19, 0xcd, 0xb2, 0x70, 0x51, 0x71, 0x91, 0xa1, 0x55, 0x5b, 0x24, 0xc4,
+	0x68, 0xfa, 0xe7, 0x02, 0x15, 0x22, 0x37, 0xf6, 0xa4, 0x11, 0x8e, 0x1d, 0xd9, 0x49, 0xe9, 0xf0,
+	0x38, 0x5c, 0xf2, 0x28, 0x08, 0xf1, 0x4c, 0x2b, 0x1f, 0x27, 0xae, 0xba, 0xed, 0x34, 0xb9, 0xb3,
+	0x9d, 0xef, 0xf7, 0x7d, 0x67, 0x8e, 0x1d, 0x67, 0xd0, 0x5e, 0xa2, 0x54, 0x22, 0xf8, 0x80, 0x32,
+	0x33, 0x70, 0x43, 0x3b, 0xba, 0x1d, 0x0e, 0x34, 0x37, 0xaa, 0xd4, 0x31, 0x37, 0x03, 0xca, 0x48,
+	0xae, 0x55, 0xa1, 0xf0, 0x5b, 0x27, 0x20, 0x94, 0x19, 0xe2, 0xb5, 0xe4, 0x76, 0x48, 0xbc, 0x76,
+	0x7b, 0xb4, 0xc8, 0x2e, 0x56, 0x59, 0xa6, 0xe4, 0x80, 0xb2, 0xa8, 0x98, 0xe7, 0x3c, 0x4a, 0xe5,
+	0x4c, 0x19, 0x67, 0xbb, 0xfd, 0xbe, 0x81, 0x89, 0x4b, 0x53, 0xa8, 0x2c, 0xca, 0xa9, 0xa6, 0x19,
+	0x2f, 0xb8, 0xae, 0xb0, 0xfd, 0x45, 0x18, 0x97, 0x65, 0x66, 0xea, 0xa4, 0x4a, 0xbc, 0xf7, 0xbc,
+	0x98, 0xf1, 0xdb, 0x34, 0xae, 0xb5, 0x5f, 0x55, 0x5a, 0x98, 0x5d, 0x97, 0xb3, 0xc1, 0x9f, 0x9a,
+	0xe6, 0x39, 0xd7, 0x55, 0xbd, 0x5f, 0xff, 0xff, 0x1a, 0x75, 0x43, 0x86, 0xf7, 0x51, 0x37, 0x65,
+	0x41, 0x67, 0xa7, 0xb3, 0xbb, 0x3a, 0xfa, 0xa2, 0xea, 0x07, 0xa9, 0x19, 0x72, 0x2a, 0x8b, 0xef,
+	0xbe, 0xbd, 0xa4, 0xa2, 0xe4, 0xd3, 0x6e, 0xca, 0xf0, 0x01, 0x42, 0xb3, 0x54, 0x52, 0x11, 0x95,
+	0x5a, 0x98, 0xa0, 0xbb, 0xf3, 0x62, 0x77, 0x75, 0xf4, 0xe5, 0x23, 0xe8, 0xac, 0xd0, 0xa9, 0x4c,
+	0x1c, 0xb5, 0x02, 0xfa, 0x0b, 0x2d, 0x0c, 0x3e, 0x41, 0x9b, 0x0e, 0xce, 0xd4, 0x75, 0x2a, 0xb8,
+	0xf3, 0xd8, 0x68, 0xe1, 0xb1, 0x0e, 0xd8, 0xcf, 0x40, 0x81, 0xd3, 0x04, 0x6d, 0x15, 0x9a, 0xc6,
+	0x7f, 0xa4, 0x32, 0xb1, 0x2e, 0x51, 0xc1, 0xb3, 0x5c, 0xd0, 0x82, 0x07, 0xaf, 0xe0, 0x67, 0x3c,
+	0xef, 0xd6, 0xaf, 0xd1, 0x0b, 0x2d, 0xce, 0x2b, 0x10, 0xc7, 0x68, 0xcb, 0x1a, 0x7d, 0xbc, 0x47,
+	0x26, 0x40, 0x50, 0xdf, 0x80, 0x2c, 0x3a, 0x33, 0x6e, 0x73, 0xc9, 0x8f, 0x00, 0x4e, 0x6a, 0x6e,
+	0xda, 0x2f, 0xb5, 0xf8, 0x68, 0xcd, 0xe0, 0x1f, 0xd0, 0x2a, 0x4b, 0x4d, 0x2e, 0xe8, 0xdc, 0x56,
+	0x1d, 0x2c, 0xb5, 0x28, 0x16, 0x55, 0xc0, 0x85, 0x16, 0xf8, 0x10, 0x2d, 0xd9, 0xa3, 0x10, 0x7c,
+	0xba, 0xd3, 0xd9, 0x5d, 0x1b, 0x0d, 0x17, 0x96, 0x04, 0x67, 0x81, 0x84, 0xec, 0x7c, 0x9e, 0xf3,
+	0x23, 0x59, 0x66, 0xd5, 0x70, 0x0a, 0x34, 0x3e, 0x45, 0x7d, 0xca, 0x18, 0x67, 0xd1, 0xf5, 0x3c,
+	0x72, 0x58, 0x44, 0x99, 0x09, 0xfa, 0x50, 0xcc, 0xf6, 0xa3, 0x62, 0xc6, 0x4a, 0x09, 0x57, 0xca,
+	0x06, 0x60, 0xe3, 0xf9, 0x31, 0x28, 0x42, 0x66, 0xf0, 0x6f, 0x68, 0xd3, 0x9d, 0xb8, 0x28, 0xd7,
+	0x7c, 0xc6, 0x35, 0x97, 0x31, 0x0f, 0x3e, 0x6b, 0x55, 0xdd, 0x21, 0x70, 0x50, 0x9d, 0x1b, 0x4e,
+	0x37, 0x9c, 0xd5, 0xc4, 0x3b, 0xe1, 0x21, 0x5a, 0x92, 0x34, 0xe3, 0xc1, 0x9b, 0x16, 0x7d, 0x02,
+	0x25, 0x3e, 0x42, 0xbd, 0x82, 0xdf, 0x15, 0x11, 0x65, 0xc1, 0x32, 0x40, 0x7b, 0x4d, 0xfb, 0x76,
+	0xce, 0xef, 0x8a, 0x90, 0x9d, 0xca, 0x99, 0x3a, 0xf9, 0x64, 0xba, 0x5c, 0xc0, 0x0c, 0xff, 0x8e,
+	0x36, 0xf8, 0x5d, 0x4e, 0xa5, 0xed, 0x52, 0xed, 0xd7, 0x03, 0xbf, 0x51, 0x93, 0xdf, 0x51, 0xc5,
+	0x3d, 0xf0, 0x5d, 0xe3, 0x0f, 0x56, 0x31, 0x45, 0x9b, 0x6c, 0x2e, 0x69, 0x96, 0xc6, 0x91, 0xe1,
+	0x54, 0xc7, 0x37, 0x36, 0xe0, 0x25, 0x04, 0xbc, 0x6b, 0x0a, 0x38, 0x74, 0xe0, 0x19, 0x70, 0x3e,
+	0x61, 0x9d, 0x3d, 0x5c, 0xc6, 0x19, 0xda, 0xd2, 0xdc, 0xe4, 0x4a, 0x9a, 0xf4, 0x96, 0x47, 0xf5,
+	0xa9, 0xa3, 0x2c, 0x58, 0x81, 0x98, 0xef, 0x9b, 0x62, 0xa6, 0x1e, 0x3e, 0x74, 0xac, 0x8f, 0xea,
+	0xeb, 0xc7, 0x8f, 0xf0, 0x14, 0xbd, 0x8a, 0xa9, 0x10, 0x91, 0x92, 0x02, 0x52, 0x5e, 0x43, 0x0a,
+	0x69, 0x7c, 0x6b, 0xa8, 0x10, 0xbf, 0x48, 0x71, 0x6f, 0x8e, 0x62, 0xbf, 0x82, 0xff, 0x42, 0xdb,
+	0x7e, 0x17, 0x1e, 0xb7, 0x6b, 0x0d, 0x12, 0x0e, 0xda, 0xee, 0xc7, 0xd3, 0x6d, 0x7b, 0xc3, 0x9f,
+	0x7e, 0x8c, 0x4f, 0xd0, 0xcb, 0x1b, 0x55, 0x70, 0x61, 0x93, 0xd6, 0x21, 0x69, 0xbf, 0x29, 0xe9,
+	0xc4, 0xea, 0xbd, 0x73, 0xef, 0xc6, 0x4d, 0xed, 0x5e, 0x9b, 0x1b, 0x95, 0xe7, 0xf6, 0xaa, 0x32,
+	0x19, 0xd5, 0x70, 0x98, 0x36, 0xdb, 0xed, 0xf5, 0x59, 0x05, 0x9e, 0x59, 0xee, 0x7e, 0xaf, 0xcd,
+	0xc3, 0x65, 0x9c, 0xa0, 0xbe, 0x8f, 0xc8, 0xb5, 0x62, 0x65, 0x0c, 0x21, 0x18, 0x42, 0xde, 0xb7,
+	0x0d, 0x99, 0x38, 0xd2, 0xc7, 0xf8, 0xb2, 0xfd, 0x03, 0xdb, 0x95, 0x24, 0xa3, 0x29, 0x74, 0x65,
+	0xab, 0x5d, 0x57, 0x8e, 0xad, 0xfe, 0xbe, 0x2b, 0x89, 0x9b, 0x5a, 0xa7, 0x34, 0xa3, 0x89, 0xbd,
+	0x7a, 0x82, 0xcf, 0xdb, 0x39, 0x9d, 0x5a, 0xfd, 0xbd, 0x53, 0xea, 0xa6, 0xe3, 0x15, 0xd4, 0xa3,
+	0x2c, 0x62, 0xb4, 0xa0, 0xe3, 0xff, 0x3a, 0xe8, 0x9b, 0x58, 0x65, 0xa4, 0xf1, 0xf3, 0x3e, 0xee,
+	0x85, 0x6c, 0x62, 0x6f, 0x91, 0x49, 0xe7, 0xd7, 0x9f, 0x2a, 0x75, 0xa2, 0x04, 0x95, 0x09, 0x51,
+	0x3a, 0x19, 0x24, 0x5c, 0xc2, 0x1d, 0x53, 0x7f, 0x61, 0xf3, 0xd4, 0x3c, 0xf3, 0xbf, 0xe2, 0xc0,
+	0x8f, 0xfe, 0xee, 0xbe, 0x38, 0x0e, 0xc3, 0x7f, 0xba, 0x6f, 0xdd, 0x0d, 0x49, 0x42, 0x66, 0x88,
+	0xbf, 0x2c, 0xc9, 0xe5, 0xd0, 0xbe, 0x54, 0x4e, 0xf9, 0x6f, 0xad, 0xb9, 0x0a, 0x99, 0xb9, 0xf2,
+	0x9a, 0xab, 0xcb, 0xe1, 0x95, 0xd7, 0x5c, 0x2f, 0x43, 0x11, 0xef, 0x3e, 0x04, 0x00, 0x00, 0xff,
+	0xff, 0x1d, 0xb0, 0x28, 0xdd, 0xdb, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/ad_group.pb.go b/googleapis/ads/googleads/v0/resources/ad_group.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..2b32660d5f56d4111c3808eff26c75970df1bfe1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/ad_group.pb.go
@@ -0,0 +1,295 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/ad_group.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An ad group.
+type AdGroup struct {
+	// The resource name of the ad group.
+	// Ad group resource names have the form:
+	//
+	// `customers/{customer_id}/adGroups/{ad_group_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the ad group.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the ad group.
+	//
+	// This field is required and should not be empty when creating new ad
+	// groups.
+	//
+	// It must contain fewer than 255 UTF-8 full-width characters.
+	//
+	// It must not contain any null (code point 0x0), NL line feed
+	// (code point 0xA) or carriage return (code point 0xD) characters.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of the ad group.
+	Status enums.AdGroupStatusEnum_AdGroupStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.AdGroupStatusEnum_AdGroupStatus" json:"status,omitempty"`
+	// The type of the ad group.
+	Type enums.AdGroupTypeEnum_AdGroupType `protobuf:"varint,12,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.AdGroupTypeEnum_AdGroupType" json:"type,omitempty"`
+	// The ad rotation mode of the ad group.
+	AdRotationMode enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode `protobuf:"varint,22,opt,name=ad_rotation_mode,json=adRotationMode,proto3,enum=google.ads.googleads.v0.enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode" json:"ad_rotation_mode,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,13,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,6,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// The campaign to which the ad group belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,10,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The maximum CPC (cost-per-click) bid.
+	CpcBidMicros *wrappers.Int64Value `protobuf:"bytes,14,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	// The maximum CPM (cost-per-thousand viewable impressions) bid.
+	CpmBidMicros *wrappers.Int64Value `protobuf:"bytes,15,opt,name=cpm_bid_micros,json=cpmBidMicros,proto3" json:"cpm_bid_micros,omitempty"`
+	// The target cost-per-acquisition (conversion) bid.
+	CpaBidMicros *wrappers.Int64Value `protobuf:"bytes,16,opt,name=cpa_bid_micros,json=cpaBidMicros,proto3" json:"cpa_bid_micros,omitempty"`
+	// The CPV (cost-per-view) bid.
+	CpvBidMicros *wrappers.Int64Value `protobuf:"bytes,17,opt,name=cpv_bid_micros,json=cpvBidMicros,proto3" json:"cpv_bid_micros,omitempty"`
+	// The target return on ad spend (ROAS) override. If the ad group's campaign
+	// bidding strategy is a standard Target ROAS strategy, then this field
+	// overrides the target ROAS specified in the campaign's bidding strategy.
+	// Otherwise, this value is ignored.
+	TargetRoasOverride *wrappers.DoubleValue `protobuf:"bytes,19,opt,name=target_roas_override,json=targetRoasOverride,proto3" json:"target_roas_override,omitempty"`
+	// The percent cpc bid amount, expressed as a fraction of the advertised price
+	// for some good or service. The valid range for the fraction is [0,1) and the
+	// value stored here is 1,000,000 * [fraction].
+	PercentCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,20,opt,name=percent_cpc_bid_micros,json=percentCpcBidMicros,proto3" json:"percent_cpc_bid_micros,omitempty"`
+	// Settings for the Display Campaign Optimizer, initially termed "Explorer".
+	ExplorerAutoOptimizerSetting *common.ExplorerAutoOptimizerSetting `protobuf:"bytes,21,opt,name=explorer_auto_optimizer_setting,json=explorerAutoOptimizerSetting,proto3" json:"explorer_auto_optimizer_setting,omitempty"`
+	// Allows advertisers to specify a targeting dimension on which to place
+	// absolute bids. This is only applicable for campaigns that target only the
+	// display network and not search.
+	DisplayCustomBidDimension enums.TargetingDimensionEnum_TargetingDimension `protobuf:"varint,23,opt,name=display_custom_bid_dimension,json=displayCustomBidDimension,proto3,enum=google.ads.googleads.v0.enums.TargetingDimensionEnum_TargetingDimension" json:"display_custom_bid_dimension,omitempty"`
+	// URL template for appending params to Final URL.
+	FinalUrlSuffix       *wrappers.StringValue `protobuf:"bytes,24,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AdGroup) Reset()         { *m = AdGroup{} }
+func (m *AdGroup) String() string { return proto.CompactTextString(m) }
+func (*AdGroup) ProtoMessage()    {}
+func (*AdGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_35a993e3f6807d38, []int{0}
+}
+func (m *AdGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroup.Unmarshal(m, b)
+}
+func (m *AdGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroup.Marshal(b, m, deterministic)
+}
+func (dst *AdGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroup.Merge(dst, src)
+}
+func (m *AdGroup) XXX_Size() int {
+	return xxx_messageInfo_AdGroup.Size(m)
+}
+func (m *AdGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroup proto.InternalMessageInfo
+
+func (m *AdGroup) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroup) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *AdGroup) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *AdGroup) GetStatus() enums.AdGroupStatusEnum_AdGroupStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AdGroupStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetType() enums.AdGroupTypeEnum_AdGroupType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.AdGroupTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetAdRotationMode() enums.AdGroupAdRotationModeEnum_AdGroupAdRotationMode {
+	if m != nil {
+		return m.AdRotationMode
+	}
+	return enums.AdGroupAdRotationModeEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *AdGroup) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCpmBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpmBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCpaBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpaBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetCpvBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpvBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetTargetRoasOverride() *wrappers.DoubleValue {
+	if m != nil {
+		return m.TargetRoasOverride
+	}
+	return nil
+}
+
+func (m *AdGroup) GetPercentCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.PercentCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroup) GetExplorerAutoOptimizerSetting() *common.ExplorerAutoOptimizerSetting {
+	if m != nil {
+		return m.ExplorerAutoOptimizerSetting
+	}
+	return nil
+}
+
+func (m *AdGroup) GetDisplayCustomBidDimension() enums.TargetingDimensionEnum_TargetingDimension {
+	if m != nil {
+		return m.DisplayCustomBidDimension
+	}
+	return enums.TargetingDimensionEnum_UNSPECIFIED
+}
+
+func (m *AdGroup) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdGroup)(nil), "google.ads.googleads.v0.resources.AdGroup")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/ad_group.proto", fileDescriptor_ad_group_35a993e3f6807d38)
+}
+
+var fileDescriptor_ad_group_35a993e3f6807d38 = []byte{
+	// 780 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0x5f, 0x6f, 0xeb, 0x34,
+	0x14, 0xc0, 0x95, 0x6e, 0x0c, 0xf0, 0x7a, 0xcb, 0x48, 0xef, 0x2e, 0xe1, 0x32, 0x41, 0x2f, 0x08,
+	0xa9, 0x12, 0x52, 0x52, 0x76, 0xf9, 0x27, 0xfe, 0x49, 0xe9, 0xdd, 0x18, 0x20, 0xad, 0xab, 0xd2,
+	0xad, 0x0f, 0xa8, 0x92, 0xe5, 0xc6, 0x6e, 0x64, 0x11, 0xc7, 0x96, 0xed, 0x94, 0x8d, 0x57, 0x9e,
+	0xf8, 0x1a, 0x3c, 0x21, 0x3e, 0x0a, 0x6f, 0x7c, 0x23, 0x14, 0xc7, 0xc9, 0xda, 0x4e, 0x5d, 0xf3,
+	0xe6, 0x38, 0xe7, 0xf7, 0xb3, 0x7d, 0x72, 0x8e, 0x03, 0x06, 0x09, 0xe7, 0x49, 0x4a, 0x02, 0x84,
+	0x55, 0x50, 0x0e, 0x8b, 0xd1, 0x72, 0x10, 0x48, 0xa2, 0x78, 0x2e, 0x63, 0xa2, 0x02, 0x84, 0x61,
+	0x22, 0x79, 0x2e, 0x7c, 0x21, 0xb9, 0xe6, 0xee, 0x8b, 0x32, 0xcc, 0x47, 0x58, 0xf9, 0x35, 0xe1,
+	0x2f, 0x07, 0x7e, 0x4d, 0x3c, 0xff, 0x7c, 0x9b, 0x34, 0xe6, 0x8c, 0xf1, 0x2c, 0x88, 0x73, 0xa5,
+	0x39, 0x83, 0x02, 0x49, 0xc4, 0x88, 0x26, 0xb2, 0x34, 0x3f, 0x3f, 0xdb, 0x81, 0x91, 0x5b, 0x91,
+	0x72, 0x49, 0x24, 0x44, 0xb9, 0xe6, 0x90, 0x0b, 0x4d, 0x19, 0xfd, 0x9d, 0x48, 0xa8, 0x88, 0xd6,
+	0x34, 0x4b, 0xac, 0xe5, 0xbb, 0x6d, 0x16, 0x92, 0xe5, 0xec, 0xfe, 0x34, 0x10, 0x61, 0x28, 0xb9,
+	0x46, 0x9a, 0xf2, 0x0c, 0x32, 0x8e, 0x89, 0xc5, 0x5f, 0x36, 0xc4, 0x95, 0x46, 0x3a, 0x57, 0x16,
+	0xfa, 0xb4, 0x21, 0xa4, 0xef, 0x44, 0xb5, 0xce, 0x97, 0x8f, 0x23, 0x1a, 0xc9, 0x84, 0x14, 0xa7,
+	0x82, 0x98, 0x32, 0x92, 0x29, 0xca, 0x33, 0x0b, 0xbe, 0x6f, 0x41, 0xf3, 0x34, 0xcf, 0x17, 0xc1,
+	0x6f, 0x12, 0x09, 0x41, 0xa4, 0xdd, 0xcb, 0x87, 0x7f, 0x1f, 0x82, 0xd7, 0x43, 0x7c, 0x51, 0xac,
+	0xe7, 0x7e, 0x04, 0x9e, 0x54, 0x5f, 0x05, 0x66, 0x88, 0x11, 0xcf, 0xe9, 0x39, 0xfd, 0x37, 0xa3,
+	0x76, 0x35, 0x39, 0x42, 0x8c, 0xb8, 0x9f, 0x80, 0x16, 0xc5, 0xde, 0x5e, 0xcf, 0xe9, 0x1f, 0x9e,
+	0xbe, 0x67, 0x3f, 0xa9, 0x5f, 0xd9, 0xfd, 0x9f, 0x32, 0xfd, 0xc5, 0x67, 0x53, 0x94, 0xe6, 0x24,
+	0x6a, 0x51, 0xec, 0x0e, 0xc0, 0xbe, 0x11, 0xed, 0x9b, 0xf0, 0x93, 0x07, 0xe1, 0x13, 0x2d, 0x69,
+	0x96, 0x94, 0xf1, 0x26, 0xd2, 0x9d, 0x82, 0x83, 0x32, 0x57, 0xde, 0x6b, 0x3d, 0xa7, 0xdf, 0x39,
+	0xfd, 0xde, 0xdf, 0x56, 0x40, 0xe6, 0xe4, 0xbe, 0xdd, 0xfb, 0xc4, 0x30, 0xe7, 0x59, 0xce, 0xd6,
+	0x67, 0x22, 0x6b, 0x73, 0x47, 0x60, 0xbf, 0x48, 0xa7, 0xd7, 0x36, 0xd6, 0xaf, 0x9b, 0x59, 0xaf,
+	0xef, 0x04, 0x59, 0x75, 0x16, 0xcf, 0x91, 0xf1, 0xb8, 0xb7, 0xe0, 0x68, 0xb3, 0x24, 0xbc, 0x67,
+	0xc6, 0x3d, 0x6a, 0xe6, 0x0e, 0x71, 0x64, 0xe1, 0x4b, 0x8e, 0xd7, 0x56, 0x59, 0x7f, 0x13, 0x75,
+	0xd0, 0xda, 0xb3, 0x3b, 0x06, 0xc7, 0x5a, 0xa2, 0xf8, 0xd7, 0xe2, 0x6b, 0xe7, 0x32, 0x85, 0x9a,
+	0x30, 0x91, 0x22, 0x4d, 0xbc, 0x27, 0x0d, 0x92, 0xdc, 0xad, 0xd0, 0x1b, 0x99, 0x5e, 0x5b, 0xd0,
+	0x8d, 0xc1, 0x71, 0x21, 0xda, 0xec, 0x33, 0xe5, 0x1d, 0xf4, 0xf6, 0xfa, 0x87, 0xa7, 0xc1, 0xd6,
+	0x03, 0x95, 0x9d, 0xe6, 0xbf, 0x32, 0xe0, 0xb8, 0xe2, 0xa2, 0x6e, 0x2e, 0xd3, 0x8d, 0x39, 0xe5,
+	0x7e, 0x05, 0xde, 0x88, 0x11, 0x13, 0x88, 0x26, 0x99, 0x07, 0x1a, 0xec, 0xb4, 0x8e, 0x76, 0x43,
+	0xd0, 0x89, 0x45, 0x0c, 0xe7, 0x14, 0x43, 0x46, 0x63, 0xc9, 0x95, 0xd7, 0xd9, 0x5d, 0x7d, 0xed,
+	0x58, 0xc4, 0x43, 0x8a, 0x2f, 0x0d, 0x50, 0x2a, 0xd8, 0xaa, 0xe2, 0xad, 0x46, 0x0a, 0xb6, 0xa1,
+	0x40, 0xab, 0x8a, 0xa3, 0x46, 0x0a, 0xb4, 0xa1, 0x58, 0xae, 0x2a, 0xde, 0x6e, 0xa4, 0x58, 0xde,
+	0x2b, 0x46, 0xe0, 0x69, 0xd9, 0xeb, 0x50, 0x72, 0xa4, 0x20, 0x5f, 0x12, 0x29, 0x29, 0x26, 0x5e,
+	0x77, 0x4b, 0x46, 0xcf, 0x78, 0x3e, 0x4f, 0x49, 0x69, 0x72, 0x4b, 0x32, 0xe2, 0x48, 0x5d, 0x59,
+	0xce, 0x1d, 0x83, 0x67, 0x82, 0xc8, 0x98, 0x64, 0x1a, 0x6e, 0xe4, 0xf8, 0xe9, 0xee, 0xad, 0x75,
+	0x2d, 0xfa, 0x6a, 0x35, 0xd5, 0x7f, 0x38, 0xe0, 0x83, 0x1d, 0x57, 0xaf, 0x77, 0x6c, 0xdc, 0xdf,
+	0xee, 0xaa, 0xab, 0x73, 0xab, 0x09, 0x73, 0xcd, 0xaf, 0x2a, 0xc9, 0xa4, 0x74, 0x44, 0x27, 0xe4,
+	0x91, 0xb7, 0xee, 0x9f, 0x0e, 0x38, 0xc1, 0x54, 0x89, 0x14, 0xdd, 0x55, 0x75, 0x5d, 0x9c, 0xad,
+	0xbe, 0x1d, 0xbd, 0x77, 0x4c, 0xaf, 0xfe, 0xb8, 0xa3, 0x57, 0xaf, 0xab, 0x7b, 0xf5, 0xac, 0x02,
+	0x4d, 0xa3, 0x3e, 0x9c, 0x8e, 0xde, 0xb5, 0xab, 0x95, 0x75, 0x3f, 0xa4, 0xb8, 0x7e, 0xe5, 0xfe,
+	0x00, 0x8e, 0x16, 0x34, 0x43, 0xa9, 0xe9, 0x56, 0x95, 0x2f, 0x16, 0xf4, 0xd6, 0xf3, 0x1a, 0x74,
+	0x40, 0xc7, 0x50, 0x37, 0x32, 0x9d, 0x18, 0x66, 0xf8, 0x9f, 0x03, 0x3e, 0x8e, 0x39, 0xf3, 0x77,
+	0xfe, 0x51, 0x87, 0x6d, 0x7b, 0x93, 0x8c, 0x0b, 0xed, 0xd8, 0xf9, 0xe5, 0x67, 0x8b, 0x24, 0x3c,
+	0x45, 0x59, 0xe2, 0x73, 0x99, 0x04, 0x09, 0xc9, 0xcc, 0xa2, 0xd5, 0xdf, 0x44, 0x50, 0xf5, 0xc8,
+	0x5f, 0xfd, 0x9b, 0x7a, 0xf4, 0x57, 0x6b, 0xef, 0x22, 0x0c, 0xff, 0x69, 0xbd, 0xb8, 0x28, 0x95,
+	0x21, 0x56, 0x7e, 0x39, 0x2c, 0x46, 0xd3, 0x81, 0x1f, 0x55, 0x91, 0xff, 0x56, 0x31, 0xb3, 0x10,
+	0xab, 0x59, 0x1d, 0x33, 0x9b, 0x0e, 0x66, 0x75, 0xcc, 0xfc, 0xc0, 0x6c, 0xe2, 0xe5, 0xff, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0x2e, 0x2f, 0x7c, 0xf6, 0x59, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/ad_group_ad.pb.go b/googleapis/ads/googleads/v0/resources/ad_group_ad.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c8cf37cd6f67bfaa4f35972e7b26af71331523d6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/ad_group_ad.pb.go
@@ -0,0 +1,206 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/ad_group_ad.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An ad group ad.
+type AdGroupAd struct {
+	// The resource name of the ad.
+	// Ad group ad resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupAds/{ad_group_id}_{ad_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The status of the ad.
+	Status enums.AdGroupAdStatusEnum_AdGroupAdStatus `protobuf:"varint,3,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.AdGroupAdStatusEnum_AdGroupAdStatus" json:"status,omitempty"`
+	// The ad group to which the ad belongs.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,4,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The ad.
+	Ad *Ad `protobuf:"bytes,5,opt,name=ad,proto3" json:"ad,omitempty"`
+	// Policy information for the ad.
+	PolicySummary        *AdGroupAdPolicySummary `protobuf:"bytes,6,opt,name=policy_summary,json=policySummary,proto3" json:"policy_summary,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *AdGroupAd) Reset()         { *m = AdGroupAd{} }
+func (m *AdGroupAd) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAd) ProtoMessage()    {}
+func (*AdGroupAd) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_c15aeab0e0f89685, []int{0}
+}
+func (m *AdGroupAd) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAd.Unmarshal(m, b)
+}
+func (m *AdGroupAd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAd.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupAd) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAd.Merge(dst, src)
+}
+func (m *AdGroupAd) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAd.Size(m)
+}
+func (m *AdGroupAd) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAd.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAd proto.InternalMessageInfo
+
+func (m *AdGroupAd) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupAd) GetStatus() enums.AdGroupAdStatusEnum_AdGroupAdStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AdGroupAdStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupAd) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupAd) GetAd() *Ad {
+	if m != nil {
+		return m.Ad
+	}
+	return nil
+}
+
+func (m *AdGroupAd) GetPolicySummary() *AdGroupAdPolicySummary {
+	if m != nil {
+		return m.PolicySummary
+	}
+	return nil
+}
+
+// Contains policy information for an ad.
+type AdGroupAdPolicySummary struct {
+	// The list of policy findings for this ad.
+	PolicyTopicEntries []*common.PolicyTopicEntry `protobuf:"bytes,1,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
+	// Where in the review process this ad is.
+	ReviewStatus enums.PolicyReviewStatusEnum_PolicyReviewStatus `protobuf:"varint,2,opt,name=review_status,json=reviewStatus,proto3,enum=google.ads.googleads.v0.enums.PolicyReviewStatusEnum_PolicyReviewStatus" json:"review_status,omitempty"`
+	// The overall approval status of this ad, calculated based on the status of
+	// its individual policy topic entries.
+	ApprovalStatus       enums.PolicyApprovalStatusEnum_PolicyApprovalStatus `protobuf:"varint,3,opt,name=approval_status,json=approvalStatus,proto3,enum=google.ads.googleads.v0.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus" json:"approval_status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
+	XXX_unrecognized     []byte                                              `json:"-"`
+	XXX_sizecache        int32                                               `json:"-"`
+}
+
+func (m *AdGroupAdPolicySummary) Reset()         { *m = AdGroupAdPolicySummary{} }
+func (m *AdGroupAdPolicySummary) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdPolicySummary) ProtoMessage()    {}
+func (*AdGroupAdPolicySummary) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_c15aeab0e0f89685, []int{1}
+}
+func (m *AdGroupAdPolicySummary) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdPolicySummary.Unmarshal(m, b)
+}
+func (m *AdGroupAdPolicySummary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdPolicySummary.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupAdPolicySummary) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdPolicySummary.Merge(dst, src)
+}
+func (m *AdGroupAdPolicySummary) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdPolicySummary.Size(m)
+}
+func (m *AdGroupAdPolicySummary) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdPolicySummary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdPolicySummary proto.InternalMessageInfo
+
+func (m *AdGroupAdPolicySummary) GetPolicyTopicEntries() []*common.PolicyTopicEntry {
+	if m != nil {
+		return m.PolicyTopicEntries
+	}
+	return nil
+}
+
+func (m *AdGroupAdPolicySummary) GetReviewStatus() enums.PolicyReviewStatusEnum_PolicyReviewStatus {
+	if m != nil {
+		return m.ReviewStatus
+	}
+	return enums.PolicyReviewStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupAdPolicySummary) GetApprovalStatus() enums.PolicyApprovalStatusEnum_PolicyApprovalStatus {
+	if m != nil {
+		return m.ApprovalStatus
+	}
+	return enums.PolicyApprovalStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*AdGroupAd)(nil), "google.ads.googleads.v0.resources.AdGroupAd")
+	proto.RegisterType((*AdGroupAdPolicySummary)(nil), "google.ads.googleads.v0.resources.AdGroupAdPolicySummary")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/ad_group_ad.proto", fileDescriptor_ad_group_ad_c15aeab0e0f89685)
+}
+
+var fileDescriptor_ad_group_ad_c15aeab0e0f89685 = []byte{
+	// 522 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x5d, 0x6b, 0xdb, 0x30,
+	0x14, 0xc5, 0xce, 0x96, 0xad, 0xea, 0x9a, 0x81, 0x18, 0xc3, 0x94, 0x31, 0xd2, 0x8e, 0x42, 0xd8,
+	0x40, 0x0e, 0x29, 0xfb, 0x7e, 0x72, 0xa0, 0x64, 0x8c, 0x31, 0x8a, 0x33, 0xf2, 0x50, 0x02, 0x9e,
+	0x62, 0x69, 0xc6, 0x60, 0x59, 0x42, 0xb2, 0x53, 0xf2, 0x77, 0xf6, 0xb8, 0x9f, 0xb2, 0xd7, 0xbd,
+	0xef, 0x61, 0xbf, 0x64, 0x58, 0x92, 0xdd, 0xb8, 0x6d, 0x9a, 0xbc, 0xdd, 0x7b, 0x7d, 0xce, 0xb9,
+	0xf7, 0xea, 0x1e, 0x83, 0xd3, 0x84, 0xf3, 0x24, 0xa3, 0x3e, 0x26, 0xca, 0x37, 0x61, 0x15, 0x2d,
+	0x87, 0xbe, 0xa4, 0x8a, 0x97, 0x32, 0xa6, 0xca, 0xc7, 0x24, 0x4a, 0x24, 0x2f, 0x45, 0x84, 0x09,
+	0x12, 0x92, 0x17, 0x1c, 0x1e, 0x19, 0x24, 0xc2, 0x44, 0xa1, 0x86, 0x84, 0x96, 0x43, 0xd4, 0x90,
+	0x0e, 0x5f, 0x6d, 0xd2, 0x8d, 0x39, 0x63, 0x3c, 0xf7, 0x05, 0xcf, 0xd2, 0x78, 0x65, 0xf4, 0x0e,
+	0xdf, 0x6c, 0x02, 0xd3, 0xbc, 0x64, 0xad, 0x01, 0x22, 0x55, 0xe0, 0xa2, 0x54, 0x96, 0xf7, 0xe1,
+	0x6e, 0x9e, 0xe9, 0x11, 0x61, 0x21, 0x24, 0x5f, 0xe2, 0xac, 0xcd, 0x7d, 0xb7, 0x13, 0x57, 0xd2,
+	0x65, 0x4a, 0x2f, 0xdb, 0xcc, 0x97, 0xbb, 0x3c, 0x99, 0xc5, 0x3e, 0xb7, 0x58, 0x9d, 0x2d, 0xca,
+	0x1f, 0xfe, 0xa5, 0xc4, 0x42, 0x50, 0x69, 0xb5, 0x8e, 0xff, 0xba, 0x60, 0x2f, 0x20, 0x93, 0x6a,
+	0xbb, 0x80, 0xc0, 0x17, 0xe0, 0xa0, 0xd6, 0x88, 0x72, 0xcc, 0xa8, 0xe7, 0xf4, 0x9d, 0xc1, 0x5e,
+	0xf8, 0xa8, 0x2e, 0x7e, 0xc5, 0x8c, 0xc2, 0x0b, 0xd0, 0x35, 0xe3, 0x78, 0x9d, 0xbe, 0x33, 0xe8,
+	0x8d, 0xc6, 0x68, 0xd3, 0x35, 0xf4, 0x26, 0xa8, 0x91, 0x9f, 0x6a, 0xd6, 0x59, 0x5e, 0xb2, 0xeb,
+	0xb5, 0xd0, 0x2a, 0xc2, 0xb7, 0xe0, 0x61, 0xfd, 0xd8, 0xde, 0xbd, 0xbe, 0x33, 0xd8, 0x1f, 0x3d,
+	0xab, 0xd5, 0xeb, 0x0d, 0xd0, 0xb4, 0x90, 0x69, 0x9e, 0xcc, 0x70, 0x56, 0xd2, 0xf0, 0x01, 0x36,
+	0x42, 0xf0, 0x35, 0x70, 0x31, 0xf1, 0xee, 0x6b, 0xca, 0x09, 0xda, 0x6a, 0x0f, 0x14, 0x90, 0xd0,
+	0xc5, 0x04, 0x7e, 0x07, 0x3d, 0xfb, 0xd0, 0xaa, 0x64, 0x0c, 0xcb, 0x95, 0xd7, 0xd5, 0x12, 0xef,
+	0x77, 0x92, 0xb0, 0x3b, 0x9c, 0x6b, 0x85, 0xa9, 0x11, 0x08, 0x0f, 0xc4, 0x7a, 0x7a, 0xfc, 0xcf,
+	0x05, 0x4f, 0x6f, 0x47, 0xc2, 0x05, 0x78, 0x62, 0x9b, 0x17, 0x5c, 0xa4, 0x71, 0x44, 0xf3, 0x42,
+	0xa6, 0x54, 0x79, 0x4e, 0xbf, 0x33, 0xd8, 0x1f, 0x0d, 0x37, 0x8e, 0x60, 0x1c, 0x8c, 0x8c, 0xd8,
+	0xb7, 0x8a, 0x7a, 0x96, 0x17, 0x72, 0x15, 0x42, 0xd1, 0xae, 0xa4, 0x54, 0x41, 0x56, 0x5d, 0x74,
+	0xcd, 0x42, 0x9e, 0xab, 0x6f, 0xf6, 0x69, 0xcb, 0xcd, 0x8c, 0x76, 0xa8, 0x99, 0x6b, 0x67, 0xbb,
+	0x59, 0xae, 0xbc, 0x71, 0x95, 0xc1, 0x12, 0x3c, 0xbe, 0xe6, 0x76, 0x6b, 0x92, 0x2f, 0x3b, 0x35,
+	0x0c, 0x2c, 0xf7, 0x46, 0xcb, 0xf6, 0x87, 0xb0, 0x87, 0x5b, 0xf9, 0xf8, 0x8f, 0x03, 0x4e, 0x62,
+	0xce, 0xb6, 0x1f, 0x6d, 0xdc, 0xbb, 0xba, 0x45, 0xe5, 0xa7, 0x73, 0xe7, 0xe2, 0xb3, 0x25, 0x25,
+	0x3c, 0xc3, 0x79, 0x82, 0xb8, 0x4c, 0xfc, 0x84, 0xe6, 0xda, 0x6d, 0xf5, 0xdf, 0x25, 0x52, 0x75,
+	0xc7, 0xcf, 0xf6, 0xb1, 0x89, 0x7e, 0xba, 0x9d, 0x49, 0x10, 0xfc, 0x72, 0x8f, 0x26, 0x46, 0x32,
+	0x20, 0x0a, 0x99, 0xb0, 0x8a, 0x66, 0x43, 0x14, 0xd6, 0xc8, 0xdf, 0x35, 0x66, 0x1e, 0x10, 0x35,
+	0x6f, 0x30, 0xf3, 0xd9, 0x70, 0xde, 0x60, 0x16, 0x5d, 0x3d, 0xc4, 0xe9, 0xff, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x4e, 0x9d, 0x31, 0x0d, 0x23, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/ad_group_audience_view.pb.go b/googleapis/ads/googleads/v0/resources/ad_group_audience_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..2ea853620a02639a29ecfe1d2465110c8e5a5554
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/ad_group_audience_view.pb.go
@@ -0,0 +1,92 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/ad_group_audience_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An ad group audience view.
+// Includes performance data from interests and remarketing lists for Display
+// Network and YouTube Network ads, and remarketing lists for search ads (RLSA),
+// aggregated at the audience level.
+type AdGroupAudienceView struct {
+	// The resource name of the ad group audience view.
+	// Ad group audience view resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupAudienceViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdGroupAudienceView) Reset()         { *m = AdGroupAudienceView{} }
+func (m *AdGroupAudienceView) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAudienceView) ProtoMessage()    {}
+func (*AdGroupAudienceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_audience_view_20b0cb0c6b38a70d, []int{0}
+}
+func (m *AdGroupAudienceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAudienceView.Unmarshal(m, b)
+}
+func (m *AdGroupAudienceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAudienceView.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupAudienceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAudienceView.Merge(dst, src)
+}
+func (m *AdGroupAudienceView) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAudienceView.Size(m)
+}
+func (m *AdGroupAudienceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAudienceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAudienceView proto.InternalMessageInfo
+
+func (m *AdGroupAudienceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*AdGroupAudienceView)(nil), "google.ads.googleads.v0.resources.AdGroupAudienceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/ad_group_audience_view.proto", fileDescriptor_ad_group_audience_view_20b0cb0c6b38a70d)
+}
+
+var fileDescriptor_ad_group_audience_view_20b0cb0c6b38a70d = []byte{
+	// 239 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0xc4, 0x94, 0xf8, 0xf4, 0xa2, 0xfc, 0xd2, 0x82,
+	0xf8, 0xc4, 0xd2, 0x94, 0xcc, 0xd4, 0xbc, 0xe4, 0xd4, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x26, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x7e, 0xbd,
+	0x32, 0x03, 0x3d, 0xb8, 0x7e, 0x25, 0x2b, 0x2e, 0x61, 0xc7, 0x14, 0x77, 0x90, 0x09, 0x8e, 0x50,
+	0x03, 0xc2, 0x32, 0x53, 0xcb, 0x85, 0x94, 0xb9, 0x78, 0x61, 0x6a, 0xe2, 0xf3, 0x12, 0x73, 0x53,
+	0x25, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0x78, 0x60, 0x82, 0x7e, 0x89, 0xb9, 0xa9, 0x4e, 0x77,
+	0x19, 0xb9, 0x54, 0x93, 0xf3, 0x73, 0xf5, 0x08, 0xda, 0xe2, 0x24, 0x81, 0xc5, 0x8e, 0x00, 0x90,
+	0x13, 0x03, 0x18, 0xa3, 0xbc, 0xa0, 0xda, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b,
+	0xd2, 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x1e, 0x80, 0x79, 0xba, 0x20, 0xb3, 0x18, 0x4f, 0x18, 0x58,
+	0xc3, 0x59, 0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0x29, 0xba, 0x43, 0x8c, 0x74, 0x4c,
+	0x29, 0xd6, 0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0xbd, 0x20, 0x98, 0xca, 0x53, 0x30, 0x35, 0x31,
+	0x8e, 0x29, 0xc5, 0x31, 0x70, 0x35, 0x31, 0x61, 0x06, 0x31, 0x70, 0x35, 0x49, 0x6c, 0x60, 0x47,
+	0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x1e, 0xd2, 0x5c, 0xee, 0x87, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/ad_group_bid_modifier.pb.go b/googleapis/ads/googleads/v0/resources/ad_group_bid_modifier.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..fc1380ec667f5b731cbd94a12ebe531611c1b9f1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/ad_group_bid_modifier.pb.go
@@ -0,0 +1,420 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/ad_group_bid_modifier.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Represents an ad group bid modifier.
+type AdGroupBidModifier struct {
+	// The resource name of the ad group bid modifier.
+	// Ad group bid modifier resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}_{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ad group to which this criterion belongs.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,2,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The ID of the criterion to bid modify.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The modifier for the bid when the criterion matches. The modifier must be
+	// in the range: 0.1 - 10.0. The range is 1.0 - 6.0 for PreferredContent.
+	// Use 0 to opt out of a Device type.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// The base ad group from which this draft/trial adgroup bid modifier was
+	// created. If ad_group is a base ad group then this field will be equal to
+	// ad_group. If the ad group was created in the draft or trial and has no
+	// corresponding base ad group, then this field will be null.
+	// This field is readonly.
+	BaseAdGroup *wrappers.StringValue `protobuf:"bytes,9,opt,name=base_ad_group,json=baseAdGroup,proto3" json:"base_ad_group,omitempty"`
+	// Bid modifier source.
+	BidModifierSource enums.BidModifierSourceEnum_BidModifierSource `protobuf:"varint,10,opt,name=bid_modifier_source,json=bidModifierSource,proto3,enum=google.ads.googleads.v0.enums.BidModifierSourceEnum_BidModifierSource" json:"bid_modifier_source,omitempty"`
+	// The criterion of this ad group bid modifier.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*AdGroupBidModifier_HotelDateSelectionType
+	//	*AdGroupBidModifier_HotelAdvanceBookingWindow
+	//	*AdGroupBidModifier_HotelLengthOfStay
+	//	*AdGroupBidModifier_HotelCheckInDay
+	//	*AdGroupBidModifier_Device
+	//	*AdGroupBidModifier_PreferredContent
+	Criterion            isAdGroupBidModifier_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *AdGroupBidModifier) Reset()         { *m = AdGroupBidModifier{} }
+func (m *AdGroupBidModifier) String() string { return proto.CompactTextString(m) }
+func (*AdGroupBidModifier) ProtoMessage()    {}
+func (*AdGroupBidModifier) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_771431a7da3a20c0, []int{0}
+}
+func (m *AdGroupBidModifier) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupBidModifier.Unmarshal(m, b)
+}
+func (m *AdGroupBidModifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupBidModifier.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupBidModifier) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupBidModifier.Merge(dst, src)
+}
+func (m *AdGroupBidModifier) XXX_Size() int {
+	return xxx_messageInfo_AdGroupBidModifier.Size(m)
+}
+func (m *AdGroupBidModifier) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupBidModifier.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupBidModifier proto.InternalMessageInfo
+
+func (m *AdGroupBidModifier) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupBidModifier) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetBaseAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.BaseAdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetBidModifierSource() enums.BidModifierSourceEnum_BidModifierSource {
+	if m != nil {
+		return m.BidModifierSource
+	}
+	return enums.BidModifierSourceEnum_UNSPECIFIED
+}
+
+type isAdGroupBidModifier_Criterion interface {
+	isAdGroupBidModifier_Criterion()
+}
+
+type AdGroupBidModifier_HotelDateSelectionType struct {
+	HotelDateSelectionType *common.HotelDateSelectionTypeInfo `protobuf:"bytes,5,opt,name=hotel_date_selection_type,json=hotelDateSelectionType,proto3,oneof"`
+}
+
+type AdGroupBidModifier_HotelAdvanceBookingWindow struct {
+	HotelAdvanceBookingWindow *common.HotelAdvanceBookingWindowInfo `protobuf:"bytes,6,opt,name=hotel_advance_booking_window,json=hotelAdvanceBookingWindow,proto3,oneof"`
+}
+
+type AdGroupBidModifier_HotelLengthOfStay struct {
+	HotelLengthOfStay *common.HotelLengthOfStayInfo `protobuf:"bytes,7,opt,name=hotel_length_of_stay,json=hotelLengthOfStay,proto3,oneof"`
+}
+
+type AdGroupBidModifier_HotelCheckInDay struct {
+	HotelCheckInDay *common.HotelCheckInDayInfo `protobuf:"bytes,8,opt,name=hotel_check_in_day,json=hotelCheckInDay,proto3,oneof"`
+}
+
+type AdGroupBidModifier_Device struct {
+	Device *common.DeviceInfo `protobuf:"bytes,11,opt,name=device,proto3,oneof"`
+}
+
+type AdGroupBidModifier_PreferredContent struct {
+	PreferredContent *common.PreferredContentInfo `protobuf:"bytes,12,opt,name=preferred_content,json=preferredContent,proto3,oneof"`
+}
+
+func (*AdGroupBidModifier_HotelDateSelectionType) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_HotelAdvanceBookingWindow) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_HotelLengthOfStay) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_HotelCheckInDay) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_Device) isAdGroupBidModifier_Criterion() {}
+
+func (*AdGroupBidModifier_PreferredContent) isAdGroupBidModifier_Criterion() {}
+
+func (m *AdGroupBidModifier) GetCriterion() isAdGroupBidModifier_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelDateSelectionType() *common.HotelDateSelectionTypeInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelDateSelectionType); ok {
+		return x.HotelDateSelectionType
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelAdvanceBookingWindow() *common.HotelAdvanceBookingWindowInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelAdvanceBookingWindow); ok {
+		return x.HotelAdvanceBookingWindow
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelLengthOfStay() *common.HotelLengthOfStayInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelLengthOfStay); ok {
+		return x.HotelLengthOfStay
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetHotelCheckInDay() *common.HotelCheckInDayInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_HotelCheckInDay); ok {
+		return x.HotelCheckInDay
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetDevice() *common.DeviceInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_Device); ok {
+		return x.Device
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifier) GetPreferredContent() *common.PreferredContentInfo {
+	if x, ok := m.GetCriterion().(*AdGroupBidModifier_PreferredContent); ok {
+		return x.PreferredContent
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AdGroupBidModifier) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AdGroupBidModifier_OneofMarshaler, _AdGroupBidModifier_OneofUnmarshaler, _AdGroupBidModifier_OneofSizer, []interface{}{
+		(*AdGroupBidModifier_HotelDateSelectionType)(nil),
+		(*AdGroupBidModifier_HotelAdvanceBookingWindow)(nil),
+		(*AdGroupBidModifier_HotelLengthOfStay)(nil),
+		(*AdGroupBidModifier_HotelCheckInDay)(nil),
+		(*AdGroupBidModifier_Device)(nil),
+		(*AdGroupBidModifier_PreferredContent)(nil),
+	}
+}
+
+func _AdGroupBidModifier_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AdGroupBidModifier)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *AdGroupBidModifier_HotelDateSelectionType:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelDateSelectionType); err != nil {
+			return err
+		}
+	case *AdGroupBidModifier_HotelAdvanceBookingWindow:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelAdvanceBookingWindow); err != nil {
+			return err
+		}
+	case *AdGroupBidModifier_HotelLengthOfStay:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelLengthOfStay); err != nil {
+			return err
+		}
+	case *AdGroupBidModifier_HotelCheckInDay:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.HotelCheckInDay); err != nil {
+			return err
+		}
+	case *AdGroupBidModifier_Device:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Device); err != nil {
+			return err
+		}
+	case *AdGroupBidModifier_PreferredContent:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PreferredContent); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("AdGroupBidModifier.Criterion has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AdGroupBidModifier_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AdGroupBidModifier)
+	switch tag {
+	case 5: // criterion.hotel_date_selection_type
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.HotelDateSelectionTypeInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupBidModifier_HotelDateSelectionType{msg}
+		return true, err
+	case 6: // criterion.hotel_advance_booking_window
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.HotelAdvanceBookingWindowInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupBidModifier_HotelAdvanceBookingWindow{msg}
+		return true, err
+	case 7: // criterion.hotel_length_of_stay
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.HotelLengthOfStayInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupBidModifier_HotelLengthOfStay{msg}
+		return true, err
+	case 8: // criterion.hotel_check_in_day
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.HotelCheckInDayInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupBidModifier_HotelCheckInDay{msg}
+		return true, err
+	case 11: // criterion.device
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.DeviceInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupBidModifier_Device{msg}
+		return true, err
+	case 12: // criterion.preferred_content
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.PreferredContentInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupBidModifier_PreferredContent{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AdGroupBidModifier_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AdGroupBidModifier)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *AdGroupBidModifier_HotelDateSelectionType:
+		s := proto.Size(x.HotelDateSelectionType)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupBidModifier_HotelAdvanceBookingWindow:
+		s := proto.Size(x.HotelAdvanceBookingWindow)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupBidModifier_HotelLengthOfStay:
+		s := proto.Size(x.HotelLengthOfStay)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupBidModifier_HotelCheckInDay:
+		s := proto.Size(x.HotelCheckInDay)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupBidModifier_Device:
+		s := proto.Size(x.Device)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupBidModifier_PreferredContent:
+		s := proto.Size(x.PreferredContent)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*AdGroupBidModifier)(nil), "google.ads.googleads.v0.resources.AdGroupBidModifier")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/ad_group_bid_modifier.proto", fileDescriptor_ad_group_bid_modifier_771431a7da3a20c0)
+}
+
+var fileDescriptor_ad_group_bid_modifier_771431a7da3a20c0 = []byte{
+	// 656 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xdd, 0x6e, 0xd3, 0x30,
+	0x14, 0xc7, 0xe9, 0x06, 0xfb, 0x70, 0x3b, 0x60, 0x06, 0x41, 0x18, 0x13, 0xda, 0x40, 0x48, 0x13,
+	0x12, 0x4e, 0xb5, 0x0d, 0x26, 0x81, 0x06, 0xb4, 0x2b, 0x6c, 0x45, 0x7c, 0x4c, 0x2d, 0x1a, 0x12,
+	0xaa, 0x64, 0x39, 0xf1, 0x69, 0x1a, 0xad, 0xb1, 0x23, 0xc7, 0x6d, 0xd5, 0x3b, 0x9e, 0x85, 0x4b,
+	0x6e, 0x78, 0x0f, 0x9e, 0x81, 0x87, 0x41, 0xb1, 0x93, 0xa8, 0x6c, 0x2b, 0xeb, 0xdd, 0xe9, 0xf1,
+	0xf9, 0xfd, 0xff, 0xe7, 0x9c, 0xc6, 0x46, 0xfb, 0x81, 0x94, 0x41, 0x1f, 0x5c, 0xc6, 0x13, 0xd7,
+	0x86, 0x69, 0x34, 0xac, 0xba, 0x0a, 0x12, 0x39, 0x50, 0x3e, 0x24, 0x2e, 0xe3, 0x34, 0x50, 0x72,
+	0x10, 0x53, 0x2f, 0xe4, 0x34, 0x92, 0x3c, 0xec, 0x86, 0xa0, 0x48, 0xac, 0xa4, 0x96, 0x78, 0xd3,
+	0x32, 0x84, 0xf1, 0x84, 0x14, 0x38, 0x19, 0x56, 0x49, 0x81, 0xaf, 0x3d, 0x9d, 0xe6, 0xe0, 0xcb,
+	0x28, 0x92, 0xc2, 0xf5, 0x55, 0xa8, 0x41, 0x85, 0xcc, 0x2a, 0xae, 0xed, 0x4d, 0x2b, 0x07, 0x31,
+	0x88, 0x12, 0x77, 0xb2, 0x07, 0x6a, 0x2d, 0x32, 0xf0, 0x41, 0x06, 0x9a, 0x5f, 0xde, 0xa0, 0xeb,
+	0x8e, 0x14, 0x8b, 0x63, 0x50, 0x89, 0x3d, 0x7f, 0xf8, 0x6b, 0x09, 0xe1, 0x1a, 0x3f, 0x4c, 0x27,
+	0xa9, 0x87, 0xfc, 0x63, 0xa6, 0x81, 0x1f, 0xa1, 0x95, 0xbc, 0x57, 0x2a, 0x58, 0x04, 0x4e, 0x69,
+	0xa3, 0xb4, 0xb5, 0xdc, 0xaa, 0xe4, 0xc9, 0x4f, 0x2c, 0x02, 0xbc, 0x87, 0x96, 0xf2, 0x2d, 0x38,
+	0x73, 0x1b, 0xa5, 0xad, 0xf2, 0xf6, 0x7a, 0x36, 0x2e, 0xc9, 0xed, 0x48, 0x5b, 0xab, 0x50, 0x04,
+	0x27, 0xac, 0x3f, 0x80, 0xd6, 0x22, 0xb3, 0x46, 0xf8, 0x15, 0xaa, 0x64, 0xf3, 0x49, 0x41, 0x43,
+	0xee, 0xcc, 0x1b, 0xf8, 0xfe, 0x39, 0xb8, 0x29, 0xf4, 0xf3, 0x5d, 0xcb, 0x96, 0x0b, 0xa0, 0xc9,
+	0xf1, 0x6b, 0x54, 0x99, 0x9c, 0xd8, 0xb9, 0x3a, 0xc5, 0xbc, 0x21, 0x07, 0x5e, 0x1f, 0x32, 0x01,
+	0x6f, 0x62, 0xbc, 0x37, 0x68, 0xc5, 0x63, 0x09, 0xd0, 0xa2, 0xfd, 0xe5, 0x19, 0xda, 0x2f, 0xa7,
+	0x48, 0xb6, 0x2b, 0x3c, 0x44, 0xb7, 0x2e, 0x58, 0xba, 0x83, 0x36, 0x4a, 0x5b, 0xd7, 0xb7, 0xdf,
+	0x91, 0x69, 0x1f, 0x80, 0xf9, 0xbb, 0xc8, 0xc4, 0xa6, 0xdb, 0x86, 0x7b, 0x2b, 0x06, 0xd1, 0xf9,
+	0x6c, 0x6b, 0xd5, 0x3b, 0x9b, 0xc2, 0x23, 0x74, 0xaf, 0x27, 0x35, 0xf4, 0x29, 0x67, 0x1a, 0x68,
+	0x02, 0x7d, 0xf0, 0x75, 0xba, 0x45, 0x3d, 0x8e, 0xc1, 0xb9, 0x66, 0xa6, 0x78, 0x31, 0xd5, 0xdd,
+	0x7e, 0x5b, 0xe4, 0x28, 0x15, 0x68, 0x30, 0x0d, 0xed, 0x1c, 0xff, 0x32, 0x8e, 0xa1, 0x29, 0xba,
+	0xf2, 0xe8, 0x4a, 0xeb, 0x4e, 0xef, 0xc2, 0x53, 0xfc, 0xbd, 0x84, 0xd6, 0xad, 0x33, 0xe3, 0x43,
+	0x26, 0x7c, 0xa0, 0x9e, 0x94, 0xa7, 0xa1, 0x08, 0xe8, 0x28, 0x14, 0x5c, 0x8e, 0x9c, 0x05, 0x63,
+	0xbe, 0x3f, 0x93, 0x79, 0xcd, 0x4a, 0xd4, 0xad, 0xc2, 0x57, 0x23, 0x90, 0xf9, 0xdb, 0xf1, 0x2e,
+	0x2a, 0xc0, 0x3d, 0x74, 0xdb, 0x76, 0xd0, 0x07, 0x11, 0xe8, 0x1e, 0x95, 0x5d, 0x9a, 0x68, 0x36,
+	0x76, 0x16, 0x8d, 0xf3, 0xb3, 0x99, 0x9c, 0x3f, 0x18, 0xf4, 0x73, 0xb7, 0xad, 0xd9, 0x38, 0x73,
+	0x5c, 0xed, 0x9d, 0x3d, 0xc0, 0x1e, 0xc2, 0xd6, 0xc9, 0xef, 0x81, 0x7f, 0x4a, 0x43, 0x41, 0x39,
+	0x1b, 0x3b, 0x4b, 0xc6, 0x67, 0x67, 0x26, 0x9f, 0x83, 0x14, 0x6c, 0x8a, 0x46, 0xe1, 0x72, 0xa3,
+	0xf7, 0x6f, 0x1a, 0x37, 0xd0, 0x02, 0x87, 0x61, 0xe8, 0x83, 0x53, 0x36, 0xba, 0x4f, 0x2e, 0xd3,
+	0x6d, 0x98, 0xea, 0x4c, 0x2e, 0x63, 0xb1, 0x8f, 0x56, 0x63, 0x05, 0x5d, 0x50, 0x0a, 0x38, 0xf5,
+	0xa5, 0xd0, 0x20, 0xb4, 0x53, 0x31, 0x82, 0xbb, 0x97, 0x09, 0x1e, 0xe7, 0xe0, 0x81, 0xe5, 0x32,
+	0xe9, 0x9b, 0xf1, 0x99, 0x7c, 0xbd, 0x8c, 0x96, 0x8b, 0xeb, 0x57, 0xff, 0x53, 0x42, 0x8f, 0x7d,
+	0x19, 0x91, 0x4b, 0xdf, 0xb8, 0xfa, 0xdd, 0xf3, 0x0f, 0xcb, 0x71, 0x7a, 0xb1, 0x8e, 0x4b, 0xdf,
+	0xde, 0x67, 0x74, 0x20, 0xfb, 0x4c, 0x04, 0x44, 0xaa, 0xc0, 0x0d, 0x40, 0x98, 0x6b, 0x97, 0xbf,
+	0x6f, 0x71, 0x98, 0xfc, 0xe7, 0xfd, 0x7d, 0x59, 0x44, 0x3f, 0xe6, 0xe6, 0x0f, 0x6b, 0xb5, 0x9f,
+	0x73, 0x9b, 0x87, 0x56, 0xb2, 0xc6, 0x13, 0x62, 0xc3, 0x34, 0x3a, 0xa9, 0x92, 0x56, 0x5e, 0xf9,
+	0x3b, 0xaf, 0xe9, 0xd4, 0x78, 0xd2, 0x29, 0x6a, 0x3a, 0x27, 0xd5, 0x4e, 0x51, 0xe3, 0x2d, 0x98,
+	0x26, 0x76, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x54, 0x6c, 0xde, 0x0c, 0x03, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/ad_group_criterion.pb.go b/googleapis/ads/googleads/v0/resources/ad_group_criterion.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b3945db114e281575f51e3e5cb28ae3e9e4c1a1f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/ad_group_criterion.pb.go
@@ -0,0 +1,960 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/ad_group_criterion.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An ad group criterion.
+type AdGroupCriterion struct {
+	// The resource name of the ad group criterion.
+	// Ad group criterion resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupCriteria/{ad_group_id}_{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the criterion.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,26,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The status of the criterion.
+	Status enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus `protobuf:"varint,3,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus" json:"status,omitempty"`
+	// Information regarding the quality of the criterion.
+	QualityInfo *AdGroupCriterion_QualityInfo `protobuf:"bytes,4,opt,name=quality_info,json=qualityInfo,proto3" json:"quality_info,omitempty"`
+	// The ad group to which the criterion belongs.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,5,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The type of the criterion.
+	Type enums.CriterionTypeEnum_CriterionType `protobuf:"varint,25,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.CriterionTypeEnum_CriterionType" json:"type,omitempty"`
+	// Whether to target (`false`) or exclude (`true`) the criterion.
+	//
+	// This field is immutable. To switch a criterion from positive to negative,
+	// remove then re-add it.
+	Negative *wrappers.BoolValue `protobuf:"bytes,31,opt,name=negative,proto3" json:"negative,omitempty"`
+	// The modifier for the bid when the criterion matches. The modifier must be
+	// in the range: 0.1 - 10.0. Most targetable criteria types support modifiers.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,44,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// The CPC (cost-per-click) bid.
+	CpcBidMicros *wrappers.Int64Value `protobuf:"bytes,16,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	// The CPM (cost-per-thousand viewable impressions) bid.
+	CpmBidMicros *wrappers.Int64Value `protobuf:"bytes,17,opt,name=cpm_bid_micros,json=cpmBidMicros,proto3" json:"cpm_bid_micros,omitempty"`
+	// The CPV (cost-per-view) bid.
+	CpvBidMicros *wrappers.Int64Value `protobuf:"bytes,24,opt,name=cpv_bid_micros,json=cpvBidMicros,proto3" json:"cpv_bid_micros,omitempty"`
+	// The CPC bid amount, expressed as a fraction of the advertised price
+	// for some good or service. The valid range for the fraction is [0,1) and the
+	// value stored here is 1,000,000 * [fraction].
+	PercentCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,33,opt,name=percent_cpc_bid_micros,json=percentCpcBidMicros,proto3" json:"percent_cpc_bid_micros,omitempty"`
+	// The effective CPC (cost-per-click) bid.
+	EffectiveCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,18,opt,name=effective_cpc_bid_micros,json=effectiveCpcBidMicros,proto3" json:"effective_cpc_bid_micros,omitempty"`
+	// The effective CPM (cost-per-thousand viewable impressions) bid.
+	EffectiveCpmBidMicros *wrappers.Int64Value `protobuf:"bytes,19,opt,name=effective_cpm_bid_micros,json=effectiveCpmBidMicros,proto3" json:"effective_cpm_bid_micros,omitempty"`
+	// The effective CPV (cost-per-view) bid.
+	EffectiveCpvBidMicros *wrappers.Int64Value `protobuf:"bytes,20,opt,name=effective_cpv_bid_micros,json=effectiveCpvBidMicros,proto3" json:"effective_cpv_bid_micros,omitempty"`
+	// The effective Percent CPC bid amount.
+	EffectivePercentCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,34,opt,name=effective_percent_cpc_bid_micros,json=effectivePercentCpcBidMicros,proto3" json:"effective_percent_cpc_bid_micros,omitempty"`
+	// Source of the effective CPC bid.
+	EffectiveCpcBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,21,opt,name=effective_cpc_bid_source,json=effectiveCpcBidSource,proto3,enum=google.ads.googleads.v0.enums.BiddingSourceEnum_BiddingSource" json:"effective_cpc_bid_source,omitempty"`
+	// Source of the effective CPM bid.
+	EffectiveCpmBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,22,opt,name=effective_cpm_bid_source,json=effectiveCpmBidSource,proto3,enum=google.ads.googleads.v0.enums.BiddingSourceEnum_BiddingSource" json:"effective_cpm_bid_source,omitempty"`
+	// Source of the effective CPV bid.
+	EffectiveCpvBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,23,opt,name=effective_cpv_bid_source,json=effectiveCpvBidSource,proto3,enum=google.ads.googleads.v0.enums.BiddingSourceEnum_BiddingSource" json:"effective_cpv_bid_source,omitempty"`
+	// Source of the effective Percent CPC bid.
+	EffectivePercentCpcBidSource enums.BiddingSourceEnum_BiddingSource `protobuf:"varint,35,opt,name=effective_percent_cpc_bid_source,json=effectivePercentCpcBidSource,proto3,enum=google.ads.googleads.v0.enums.BiddingSourceEnum_BiddingSource" json:"effective_percent_cpc_bid_source,omitempty"`
+	// Estimates for criterion bids at various positions.
+	PositionEstimates *AdGroupCriterion_PositionEstimates `protobuf:"bytes,10,opt,name=position_estimates,json=positionEstimates,proto3" json:"position_estimates,omitempty"`
+	// The list of possible final URLs after all cross-domain redirects for the
+	// ad.
+	FinalUrls []*wrappers.StringValue `protobuf:"bytes,11,rep,name=final_urls,json=finalUrls,proto3" json:"final_urls,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,13,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,14,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// The ad group criterion.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*AdGroupCriterion_Keyword
+	//	*AdGroupCriterion_Placement
+	//	*AdGroupCriterion_ListingGroup
+	//	*AdGroupCriterion_AgeRange
+	//	*AdGroupCriterion_Gender
+	//	*AdGroupCriterion_IncomeRange
+	//	*AdGroupCriterion_ParentalStatus
+	//	*AdGroupCriterion_UserList
+	//	*AdGroupCriterion_YoutubeVideo
+	//	*AdGroupCriterion_YoutubeChannel
+	//	*AdGroupCriterion_Topic
+	//	*AdGroupCriterion_UserInterest
+	Criterion            isAdGroupCriterion_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *AdGroupCriterion) Reset()         { *m = AdGroupCriterion{} }
+func (m *AdGroupCriterion) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterion) ProtoMessage()    {}
+func (*AdGroupCriterion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_84c24ce63224e446, []int{0}
+}
+func (m *AdGroupCriterion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterion.Unmarshal(m, b)
+}
+func (m *AdGroupCriterion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterion.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupCriterion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterion.Merge(dst, src)
+}
+func (m *AdGroupCriterion) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterion.Size(m)
+}
+func (m *AdGroupCriterion) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterion proto.InternalMessageInfo
+
+func (m *AdGroupCriterion) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupCriterion) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetStatus() enums.AdGroupCriterionStatusEnum_AdGroupCriterionStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.AdGroupCriterionStatusEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetQualityInfo() *AdGroupCriterion_QualityInfo {
+	if m != nil {
+		return m.QualityInfo
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetType() enums.CriterionTypeEnum_CriterionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CriterionTypeEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetNegative() *wrappers.BoolValue {
+	if m != nil {
+		return m.Negative
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCpmBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpmBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetCpvBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpvBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetPercentCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.PercentCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectiveCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpmBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectiveCpmBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpvBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectiveCpvBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectivePercentCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.EffectivePercentCpcBidMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpcBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveCpcBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpmBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveCpmBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetEffectiveCpvBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectiveCpvBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetEffectivePercentCpcBidSource() enums.BiddingSourceEnum_BiddingSource {
+	if m != nil {
+		return m.EffectivePercentCpcBidSource
+	}
+	return enums.BiddingSourceEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion) GetPositionEstimates() *AdGroupCriterion_PositionEstimates {
+	if m != nil {
+		return m.PositionEstimates
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetFinalUrls() []*wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrls
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+type isAdGroupCriterion_Criterion interface {
+	isAdGroupCriterion_Criterion()
+}
+
+type AdGroupCriterion_Keyword struct {
+	Keyword *common.KeywordInfo `protobuf:"bytes,27,opt,name=keyword,proto3,oneof"`
+}
+
+type AdGroupCriterion_Placement struct {
+	Placement *common.PlacementInfo `protobuf:"bytes,28,opt,name=placement,proto3,oneof"`
+}
+
+type AdGroupCriterion_ListingGroup struct {
+	ListingGroup *common.ListingGroupInfo `protobuf:"bytes,32,opt,name=listing_group,json=listingGroup,proto3,oneof"`
+}
+
+type AdGroupCriterion_AgeRange struct {
+	AgeRange *common.AgeRangeInfo `protobuf:"bytes,36,opt,name=age_range,json=ageRange,proto3,oneof"`
+}
+
+type AdGroupCriterion_Gender struct {
+	Gender *common.GenderInfo `protobuf:"bytes,37,opt,name=gender,proto3,oneof"`
+}
+
+type AdGroupCriterion_IncomeRange struct {
+	IncomeRange *common.IncomeRangeInfo `protobuf:"bytes,38,opt,name=income_range,json=incomeRange,proto3,oneof"`
+}
+
+type AdGroupCriterion_ParentalStatus struct {
+	ParentalStatus *common.ParentalStatusInfo `protobuf:"bytes,39,opt,name=parental_status,json=parentalStatus,proto3,oneof"`
+}
+
+type AdGroupCriterion_UserList struct {
+	UserList *common.UserListInfo `protobuf:"bytes,42,opt,name=user_list,json=userList,proto3,oneof"`
+}
+
+type AdGroupCriterion_YoutubeVideo struct {
+	YoutubeVideo *common.YouTubeVideoInfo `protobuf:"bytes,40,opt,name=youtube_video,json=youtubeVideo,proto3,oneof"`
+}
+
+type AdGroupCriterion_YoutubeChannel struct {
+	YoutubeChannel *common.YouTubeChannelInfo `protobuf:"bytes,41,opt,name=youtube_channel,json=youtubeChannel,proto3,oneof"`
+}
+
+type AdGroupCriterion_Topic struct {
+	Topic *common.TopicInfo `protobuf:"bytes,43,opt,name=topic,proto3,oneof"`
+}
+
+type AdGroupCriterion_UserInterest struct {
+	UserInterest *common.UserInterestInfo `protobuf:"bytes,45,opt,name=user_interest,json=userInterest,proto3,oneof"`
+}
+
+func (*AdGroupCriterion_Keyword) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_Placement) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_ListingGroup) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_AgeRange) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_Gender) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_IncomeRange) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_ParentalStatus) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_UserList) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_YoutubeVideo) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_YoutubeChannel) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_Topic) isAdGroupCriterion_Criterion() {}
+
+func (*AdGroupCriterion_UserInterest) isAdGroupCriterion_Criterion() {}
+
+func (m *AdGroupCriterion) GetCriterion() isAdGroupCriterion_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetKeyword() *common.KeywordInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetPlacement() *common.PlacementInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Placement); ok {
+		return x.Placement
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetListingGroup() *common.ListingGroupInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_ListingGroup); ok {
+		return x.ListingGroup
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetAgeRange() *common.AgeRangeInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_AgeRange); ok {
+		return x.AgeRange
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetGender() *common.GenderInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Gender); ok {
+		return x.Gender
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetIncomeRange() *common.IncomeRangeInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_IncomeRange); ok {
+		return x.IncomeRange
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetParentalStatus() *common.ParentalStatusInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_ParentalStatus); ok {
+		return x.ParentalStatus
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetUserList() *common.UserListInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_UserList); ok {
+		return x.UserList
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetYoutubeVideo() *common.YouTubeVideoInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_YoutubeVideo); ok {
+		return x.YoutubeVideo
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetYoutubeChannel() *common.YouTubeChannelInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_YoutubeChannel); ok {
+		return x.YoutubeChannel
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetTopic() *common.TopicInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_Topic); ok {
+		return x.Topic
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion) GetUserInterest() *common.UserInterestInfo {
+	if x, ok := m.GetCriterion().(*AdGroupCriterion_UserInterest); ok {
+		return x.UserInterest
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AdGroupCriterion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AdGroupCriterion_OneofMarshaler, _AdGroupCriterion_OneofUnmarshaler, _AdGroupCriterion_OneofSizer, []interface{}{
+		(*AdGroupCriterion_Keyword)(nil),
+		(*AdGroupCriterion_Placement)(nil),
+		(*AdGroupCriterion_ListingGroup)(nil),
+		(*AdGroupCriterion_AgeRange)(nil),
+		(*AdGroupCriterion_Gender)(nil),
+		(*AdGroupCriterion_IncomeRange)(nil),
+		(*AdGroupCriterion_ParentalStatus)(nil),
+		(*AdGroupCriterion_UserList)(nil),
+		(*AdGroupCriterion_YoutubeVideo)(nil),
+		(*AdGroupCriterion_YoutubeChannel)(nil),
+		(*AdGroupCriterion_Topic)(nil),
+		(*AdGroupCriterion_UserInterest)(nil),
+	}
+}
+
+func _AdGroupCriterion_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AdGroupCriterion)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *AdGroupCriterion_Keyword:
+		b.EncodeVarint(27<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Keyword); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_Placement:
+		b.EncodeVarint(28<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Placement); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_ListingGroup:
+		b.EncodeVarint(32<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ListingGroup); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_AgeRange:
+		b.EncodeVarint(36<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AgeRange); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_Gender:
+		b.EncodeVarint(37<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Gender); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_IncomeRange:
+		b.EncodeVarint(38<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.IncomeRange); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_ParentalStatus:
+		b.EncodeVarint(39<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ParentalStatus); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_UserList:
+		b.EncodeVarint(42<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.UserList); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_YoutubeVideo:
+		b.EncodeVarint(40<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.YoutubeVideo); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_YoutubeChannel:
+		b.EncodeVarint(41<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.YoutubeChannel); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_Topic:
+		b.EncodeVarint(43<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Topic); err != nil {
+			return err
+		}
+	case *AdGroupCriterion_UserInterest:
+		b.EncodeVarint(45<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.UserInterest); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("AdGroupCriterion.Criterion has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AdGroupCriterion_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AdGroupCriterion)
+	switch tag {
+	case 27: // criterion.keyword
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.KeywordInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_Keyword{msg}
+		return true, err
+	case 28: // criterion.placement
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.PlacementInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_Placement{msg}
+		return true, err
+	case 32: // criterion.listing_group
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ListingGroupInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_ListingGroup{msg}
+		return true, err
+	case 36: // criterion.age_range
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.AgeRangeInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_AgeRange{msg}
+		return true, err
+	case 37: // criterion.gender
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.GenderInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_Gender{msg}
+		return true, err
+	case 38: // criterion.income_range
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.IncomeRangeInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_IncomeRange{msg}
+		return true, err
+	case 39: // criterion.parental_status
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ParentalStatusInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_ParentalStatus{msg}
+		return true, err
+	case 42: // criterion.user_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.UserListInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_UserList{msg}
+		return true, err
+	case 40: // criterion.youtube_video
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.YouTubeVideoInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_YoutubeVideo{msg}
+		return true, err
+	case 41: // criterion.youtube_channel
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.YouTubeChannelInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_YoutubeChannel{msg}
+		return true, err
+	case 43: // criterion.topic
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TopicInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_Topic{msg}
+		return true, err
+	case 45: // criterion.user_interest
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.UserInterestInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &AdGroupCriterion_UserInterest{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AdGroupCriterion_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AdGroupCriterion)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *AdGroupCriterion_Keyword:
+		s := proto.Size(x.Keyword)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_Placement:
+		s := proto.Size(x.Placement)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_ListingGroup:
+		s := proto.Size(x.ListingGroup)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_AgeRange:
+		s := proto.Size(x.AgeRange)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_Gender:
+		s := proto.Size(x.Gender)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_IncomeRange:
+		s := proto.Size(x.IncomeRange)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_ParentalStatus:
+		s := proto.Size(x.ParentalStatus)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_UserList:
+		s := proto.Size(x.UserList)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_YoutubeVideo:
+		s := proto.Size(x.YoutubeVideo)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_YoutubeChannel:
+		s := proto.Size(x.YoutubeChannel)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_Topic:
+		s := proto.Size(x.Topic)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterion_UserInterest:
+		s := proto.Size(x.UserInterest)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A container for ad group criterion quality information.
+type AdGroupCriterion_QualityInfo struct {
+	// The quality score.
+	//
+	// This field may not be populated if Google does not have enough
+	// information to determine a value.
+	QualityScore *wrappers.Int32Value `protobuf:"bytes,1,opt,name=quality_score,json=qualityScore,proto3" json:"quality_score,omitempty"`
+	// The performance of the ad compared to other advertisers.
+	CreativeQualityScore enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,2,opt,name=creative_quality_score,json=creativeQualityScore,proto3,enum=google.ads.googleads.v0.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"creative_quality_score,omitempty"`
+	// The quality score of the landing page.
+	PostClickQualityScore enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,3,opt,name=post_click_quality_score,json=postClickQualityScore,proto3,enum=google.ads.googleads.v0.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"post_click_quality_score,omitempty"`
+	// The click-through rate compared to that of other advertisers.
+	SearchPredictedCtr   enums.QualityScoreBucketEnum_QualityScoreBucket `protobuf:"varint,4,opt,name=search_predicted_ctr,json=searchPredictedCtr,proto3,enum=google.ads.googleads.v0.enums.QualityScoreBucketEnum_QualityScoreBucket" json:"search_predicted_ctr,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
+	XXX_unrecognized     []byte                                          `json:"-"`
+	XXX_sizecache        int32                                           `json:"-"`
+}
+
+func (m *AdGroupCriterion_QualityInfo) Reset()         { *m = AdGroupCriterion_QualityInfo{} }
+func (m *AdGroupCriterion_QualityInfo) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterion_QualityInfo) ProtoMessage()    {}
+func (*AdGroupCriterion_QualityInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_84c24ce63224e446, []int{0, 0}
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterion_QualityInfo.Unmarshal(m, b)
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterion_QualityInfo.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupCriterion_QualityInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterion_QualityInfo.Merge(dst, src)
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterion_QualityInfo.Size(m)
+}
+func (m *AdGroupCriterion_QualityInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterion_QualityInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterion_QualityInfo proto.InternalMessageInfo
+
+func (m *AdGroupCriterion_QualityInfo) GetQualityScore() *wrappers.Int32Value {
+	if m != nil {
+		return m.QualityScore
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_QualityInfo) GetCreativeQualityScore() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.CreativeQualityScore
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion_QualityInfo) GetPostClickQualityScore() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.PostClickQualityScore
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+func (m *AdGroupCriterion_QualityInfo) GetSearchPredictedCtr() enums.QualityScoreBucketEnum_QualityScoreBucket {
+	if m != nil {
+		return m.SearchPredictedCtr
+	}
+	return enums.QualityScoreBucketEnum_UNSPECIFIED
+}
+
+// Estimates for criterion bids at various positions.
+type AdGroupCriterion_PositionEstimates struct {
+	// The estimate of the CPC bid required for ad to be shown on first
+	// page of search results.
+	FirstPageCpcMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=first_page_cpc_micros,json=firstPageCpcMicros,proto3" json:"first_page_cpc_micros,omitempty"`
+	// The estimate of the CPC bid required for ad to be displayed in first
+	// position, at the top of the first page of search results.
+	FirstPositionCpcMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=first_position_cpc_micros,json=firstPositionCpcMicros,proto3" json:"first_position_cpc_micros,omitempty"`
+	// The estimate of the CPC bid required for ad to be displayed at the top
+	// of the first page of search results.
+	TopOfPageCpcMicros   *wrappers.Int64Value `protobuf:"bytes,3,opt,name=top_of_page_cpc_micros,json=topOfPageCpcMicros,proto3" json:"top_of_page_cpc_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *AdGroupCriterion_PositionEstimates) Reset()         { *m = AdGroupCriterion_PositionEstimates{} }
+func (m *AdGroupCriterion_PositionEstimates) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterion_PositionEstimates) ProtoMessage()    {}
+func (*AdGroupCriterion_PositionEstimates) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_84c24ce63224e446, []int{0, 1}
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterion_PositionEstimates.Unmarshal(m, b)
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterion_PositionEstimates.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupCriterion_PositionEstimates) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterion_PositionEstimates.Merge(dst, src)
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterion_PositionEstimates.Size(m)
+}
+func (m *AdGroupCriterion_PositionEstimates) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterion_PositionEstimates.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterion_PositionEstimates proto.InternalMessageInfo
+
+func (m *AdGroupCriterion_PositionEstimates) GetFirstPageCpcMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.FirstPageCpcMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_PositionEstimates) GetFirstPositionCpcMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.FirstPositionCpcMicros
+	}
+	return nil
+}
+
+func (m *AdGroupCriterion_PositionEstimates) GetTopOfPageCpcMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TopOfPageCpcMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdGroupCriterion)(nil), "google.ads.googleads.v0.resources.AdGroupCriterion")
+	proto.RegisterType((*AdGroupCriterion_QualityInfo)(nil), "google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo")
+	proto.RegisterType((*AdGroupCriterion_PositionEstimates)(nil), "google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/ad_group_criterion.proto", fileDescriptor_ad_group_criterion_84c24ce63224e446)
+}
+
+var fileDescriptor_ad_group_criterion_84c24ce63224e446 = []byte{
+	// 1334 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x98, 0xdf, 0x72, 0xdb, 0xc4,
+	0x17, 0xc7, 0x7f, 0x4e, 0xfa, 0x2f, 0x6b, 0x27, 0xbf, 0x76, 0x53, 0x87, 0x6d, 0x5a, 0x20, 0x6d,
+	0x29, 0xa4, 0xff, 0xe4, 0x4c, 0x0a, 0x85, 0xa1, 0x43, 0x8b, 0x9d, 0x76, 0xd2, 0x50, 0xda, 0xba,
+	0x8a, 0x1b, 0x06, 0x26, 0x8c, 0x66, 0xbd, 0x5a, 0xab, 0x3b, 0x91, 0xb4, 0xea, 0xee, 0xca, 0x9d,
+	0x70, 0xc1, 0x0c, 0x37, 0x5c, 0xf1, 0x14, 0x5c, 0xf2, 0x28, 0xdc, 0x70, 0xcf, 0x6b, 0xf0, 0x02,
+	0xcc, 0xae, 0x56, 0xb6, 0x6c, 0xd7, 0x91, 0xcb, 0xe4, 0x4e, 0x3a, 0xd9, 0xef, 0xe7, 0x9c, 0xfd,
+	0x1e, 0x59, 0x7b, 0x14, 0xf0, 0x65, 0xc0, 0x79, 0x10, 0xd2, 0x06, 0xf6, 0x65, 0x23, 0xbb, 0xd4,
+	0x57, 0xfd, 0x8d, 0x86, 0xa0, 0x92, 0xa7, 0x82, 0x50, 0xd9, 0xc0, 0xbe, 0x17, 0x08, 0x9e, 0x26,
+	0x1e, 0x11, 0x4c, 0x51, 0xc1, 0x78, 0xec, 0x24, 0x82, 0x2b, 0x0e, 0x2f, 0x67, 0x02, 0x07, 0xfb,
+	0xd2, 0x19, 0x68, 0x9d, 0xfe, 0x86, 0x33, 0xd0, 0xae, 0xde, 0x9e, 0x86, 0x27, 0x3c, 0x8a, 0x78,
+	0xdc, 0xb0, 0x48, 0x9c, 0x11, 0x57, 0x3f, 0x2b, 0x5b, 0x9e, 0x4a, 0xc5, 0x23, 0x2f, 0xc1, 0x02,
+	0x47, 0x54, 0x51, 0x61, 0x65, 0x5f, 0x4d, 0x93, 0xd1, 0x38, 0x8d, 0xde, 0xb6, 0x01, 0x4f, 0x2a,
+	0xac, 0x52, 0x69, 0xe5, 0x9b, 0x47, 0xcb, 0xbb, 0xcc, 0xf7, 0x59, 0x1c, 0x78, 0xd9, 0x9e, 0x66,
+	0xd3, 0x0c, 0x33, 0xa9, 0xc3, 0x24, 0xd7, 0x7c, 0x71, 0xb4, 0xe6, 0x75, 0x8a, 0x43, 0xa6, 0x0e,
+	0x3d, 0x49, 0xb8, 0xa0, 0x5e, 0x37, 0x25, 0x07, 0x54, 0x59, 0xe5, 0x07, 0x56, 0x69, 0xee, 0xba,
+	0x69, 0xaf, 0xf1, 0x46, 0xe0, 0x24, 0xa1, 0xc2, 0xee, 0xe0, 0xca, 0x3f, 0xef, 0x83, 0xb3, 0x4d,
+	0x7f, 0x5b, 0x6f, 0x72, 0x2b, 0xcf, 0x0c, 0xaf, 0x82, 0xc5, 0xbc, 0x11, 0x5e, 0x8c, 0x23, 0x8a,
+	0x2a, 0x6b, 0x95, 0xf5, 0x05, 0xb7, 0x96, 0x07, 0x9f, 0xe1, 0x88, 0xc2, 0xfb, 0xa0, 0x36, 0xac,
+	0x95, 0xf9, 0x68, 0x75, 0xad, 0xb2, 0x5e, 0xdd, 0xbc, 0x68, 0xfb, 0xe9, 0xe4, 0x09, 0x9d, 0x9d,
+	0x58, 0xdd, 0xfd, 0x74, 0x0f, 0x87, 0x29, 0x75, 0xab, 0x03, 0xc1, 0x8e, 0x0f, 0x5f, 0x81, 0x53,
+	0x99, 0x97, 0x68, 0x7e, 0xad, 0xb2, 0xbe, 0xb4, 0xd9, 0x76, 0xa6, 0x3d, 0x14, 0x66, 0x93, 0xce,
+	0x78, 0x95, 0xbb, 0x46, 0xfc, 0x28, 0x4e, 0xa3, 0x29, 0x7f, 0x72, 0x2d, 0x1f, 0x76, 0x41, 0x2d,
+	0x77, 0x88, 0xc5, 0x3d, 0x8e, 0x4e, 0x98, 0x4a, 0x1f, 0x38, 0xa5, 0x0f, 0xe1, 0x04, 0xd8, 0x79,
+	0x91, 0x71, 0x76, 0xe2, 0x1e, 0x77, 0xab, 0xaf, 0x87, 0x37, 0xf0, 0x73, 0x70, 0x26, 0x7f, 0x58,
+	0xd0, 0x49, 0xc3, 0xbf, 0x34, 0xe1, 0xc4, 0xae, 0x12, 0x2c, 0x0e, 0x32, 0x2b, 0x4e, 0xe3, 0x0c,
+	0x0d, 0x5d, 0x70, 0x42, 0x37, 0x1a, 0x5d, 0x30, 0x26, 0xdc, 0x2f, 0x31, 0x61, 0x50, 0x49, 0xe7,
+	0x30, 0xa1, 0x66, 0xef, 0x23, 0x11, 0xd7, 0xb0, 0xe0, 0x5d, 0x70, 0x26, 0xa6, 0x01, 0x56, 0xac,
+	0x4f, 0xd1, 0x87, 0xa6, 0x98, 0xd5, 0x89, 0x62, 0x5a, 0x9c, 0x87, 0x59, 0x29, 0x83, 0xb5, 0xf0,
+	0x01, 0xa8, 0x75, 0x99, 0xef, 0x45, 0xdc, 0x67, 0x3d, 0x46, 0x05, 0xba, 0x35, 0x65, 0x23, 0x0f,
+	0x79, 0xda, 0x0d, 0xa9, 0xed, 0x69, 0x97, 0xf9, 0x4f, 0xad, 0x00, 0x36, 0xc1, 0x12, 0x49, 0x88,
+	0x67, 0x20, 0x8c, 0x08, 0x2e, 0xd1, 0xd9, 0xf2, 0xa7, 0xa2, 0x46, 0x12, 0xd2, 0x62, 0xfe, 0x53,
+	0x23, 0xc8, 0x10, 0x51, 0x11, 0x71, 0x6e, 0x26, 0x44, 0x34, 0x86, 0xe8, 0x17, 0x11, 0x68, 0x26,
+	0x44, 0x7f, 0x88, 0x68, 0x83, 0x95, 0x84, 0x0a, 0x42, 0x63, 0xe5, 0x8d, 0x6d, 0xe8, 0x72, 0x39,
+	0x6a, 0xd9, 0x4a, 0xb7, 0x8a, 0xfb, 0xea, 0x00, 0x44, 0x7b, 0x3d, 0x4a, 0xb4, 0xd1, 0xe3, 0x4c,
+	0x58, 0xce, 0xac, 0x0f, 0xc4, 0x47, 0x51, 0x47, 0x7c, 0x5b, 0x7e, 0x37, 0x6a, 0x34, 0x95, 0x3a,
+	0x62, 0xe5, 0xf9, 0x77, 0xa3, 0x16, 0x3c, 0x25, 0x60, 0x6d, 0x48, 0x9d, 0xe2, 0xee, 0x95, 0x72,
+	0xfa, 0xa5, 0x01, 0xa4, 0xfd, 0x16, 0x9b, 0xdf, 0xbc, 0xcd, 0xe6, 0xec, 0xe7, 0x8c, 0xea, 0x33,
+	0xfd, 0xc4, 0x5a, 0xd9, 0x4b, 0x7b, 0xd7, 0x68, 0xcc, 0x4f, 0x6c, 0x24, 0x32, 0xd1, 0x89, 0x2c,
+	0x3c, 0x9e, 0x38, 0x2a, 0x26, 0x5e, 0x39, 0xf6, 0xc4, 0xd1, 0xd4, 0xc4, 0xfd, 0x62, 0xe2, 0xf7,
+	0x8e, 0x3d, 0x71, 0x7f, 0x98, 0xf8, 0xd7, 0xca, 0x51, 0x0d, 0xb5, 0x15, 0x5c, 0x3d, 0x96, 0x0a,
+	0xa6, 0xf4, 0xdc, 0x16, 0xa2, 0x00, 0x4c, 0xb8, 0x64, 0x4a, 0x1f, 0x44, 0x54, 0x2a, 0x16, 0x61,
+	0x45, 0x25, 0x02, 0xe6, 0x51, 0x7a, 0xf4, 0x5f, 0xde, 0xf2, 0x6d, 0x4b, 0x7b, 0x94, 0xc3, 0xdc,
+	0x73, 0xc9, 0x78, 0x08, 0xde, 0x03, 0xa0, 0xc7, 0x62, 0x1c, 0x7a, 0xa9, 0x08, 0x25, 0xaa, 0xae,
+	0xcd, 0x97, 0xbe, 0xf3, 0x17, 0xcc, 0xfa, 0x97, 0x22, 0xd4, 0xef, 0x97, 0xba, 0x12, 0x98, 0x1c,
+	0xe8, 0xe9, 0x20, 0x15, 0xa1, 0xa7, 0x68, 0x94, 0x84, 0x58, 0x51, 0xb4, 0x38, 0xc3, 0xd9, 0xb1,
+	0x9c, 0x4b, 0x5f, 0x8a, 0xb0, 0x63, 0x85, 0x90, 0x80, 0xba, 0x06, 0x8d, 0xcf, 0x39, 0x12, 0x2d,
+	0x99, 0xca, 0x1a, 0x53, 0x7d, 0xc8, 0x06, 0x24, 0x67, 0xcb, 0x08, 0xdb, 0xb9, 0xce, 0x5d, 0x4e,
+	0x45, 0x38, 0x16, 0x93, 0x70, 0x1b, 0x9c, 0x3e, 0xa0, 0x87, 0x6f, 0xb8, 0xf0, 0xd1, 0x45, 0x53,
+	0xe8, 0xcd, 0x32, 0xec, 0x93, 0x6c, 0xb9, 0x3e, 0x23, 0x1f, 0xff, 0xcf, 0xcd, 0xd5, 0xf0, 0x29,
+	0x58, 0x48, 0x42, 0x4c, 0x68, 0x44, 0x63, 0x85, 0x2e, 0x19, 0xd4, 0xed, 0x32, 0x54, 0x3b, 0x17,
+	0x58, 0xd8, 0x90, 0x00, 0xbf, 0x03, 0x8b, 0x21, 0x93, 0x4a, 0xbb, 0x99, 0x1d, 0xc1, 0x6b, 0x06,
+	0xb9, 0x51, 0x86, 0xfc, 0x36, 0x13, 0x99, 0xf6, 0x5b, 0x6a, 0x2d, 0x2c, 0xc4, 0xe0, 0x13, 0xb0,
+	0x80, 0x03, 0xea, 0x09, 0x1c, 0x07, 0x14, 0x7d, 0x64, 0xa0, 0xb7, 0xca, 0xa0, 0xcd, 0x80, 0xba,
+	0x7a, 0xbd, 0x05, 0x9e, 0xc1, 0xf6, 0x1e, 0x3e, 0x04, 0xa7, 0x02, 0x1a, 0xfb, 0x54, 0xa0, 0x6b,
+	0x86, 0x74, 0xa3, 0x8c, 0xb4, 0x6d, 0x56, 0x5b, 0x8e, 0xd5, 0xc2, 0x0e, 0xa8, 0xb1, 0x98, 0xf0,
+	0x28, 0xaf, 0xea, 0x63, 0xc3, 0x2a, 0xed, 0xef, 0x8e, 0xd1, 0x14, 0x0b, 0xab, 0xb2, 0x61, 0x08,
+	0xfe, 0x08, 0xfe, 0x9f, 0x60, 0x41, 0x63, 0x85, 0x43, 0x3b, 0xe2, 0xa2, 0x4f, 0x0c, 0x78, 0xb3,
+	0xb4, 0x2d, 0x56, 0x96, 0x0d, 0x5d, 0x96, 0xbd, 0x94, 0x8c, 0x44, 0xb5, 0x8f, 0xa9, 0xa4, 0xc2,
+	0xd3, 0xe6, 0xa2, 0x1b, 0xb3, 0xf9, 0xf8, 0x52, 0x52, 0xa1, 0x1b, 0x94, 0xfb, 0x98, 0xda, 0x7b,
+	0xdd, 0xed, 0x43, 0x9e, 0xaa, 0xb4, 0x4b, 0xbd, 0x3e, 0xf3, 0x29, 0x47, 0xeb, 0xb3, 0x75, 0xfb,
+	0x7b, 0x9e, 0x76, 0xd2, 0x2e, 0xdd, 0xd3, 0x9a, 0xbc, 0xdb, 0x16, 0x64, 0x62, 0xda, 0x84, 0x1c,
+	0x4c, 0x5e, 0xe1, 0x38, 0xa6, 0x21, 0xba, 0x3e, 0x9b, 0x09, 0x16, 0xbd, 0x95, 0xa9, 0x72, 0x13,
+	0x2c, 0xcc, 0x46, 0x61, 0x13, 0x9c, 0x54, 0x3c, 0x61, 0x04, 0xdd, 0x34, 0xd0, 0xeb, 0x65, 0xd0,
+	0x8e, 0x5e, 0x6c, 0x59, 0x99, 0x52, 0x6f, 0xdd, 0xf8, 0xc8, 0x62, 0x45, 0x05, 0x95, 0x0a, 0xdd,
+	0x9e, 0x6d, 0xeb, 0xda, 0xcb, 0x1d, 0xab, 0xc9, 0xb7, 0x9e, 0x16, 0x62, 0xab, 0x7f, 0xcd, 0x83,
+	0x6a, 0x61, 0xb8, 0x85, 0x5f, 0x83, 0xc5, 0x91, 0xaf, 0x0a, 0xf3, 0x09, 0x30, 0xe5, 0x64, 0xbe,
+	0xb3, 0x69, 0x47, 0x28, 0xab, 0xd8, 0xd5, 0x02, 0xf8, 0x33, 0x58, 0x21, 0x82, 0x9a, 0xc1, 0xd2,
+	0x1b, 0x45, 0xcd, 0x99, 0x33, 0xe1, 0x71, 0xc9, 0x99, 0xf0, 0xa2, 0x00, 0x6b, 0x99, 0x4f, 0x1a,
+	0x73, 0x30, 0x4c, 0x86, 0xdd, 0xf3, 0x79, 0x9e, 0xe2, 0xdf, 0xe0, 0x2f, 0x15, 0x80, 0x12, 0x2e,
+	0x95, 0x47, 0x42, 0x46, 0x0e, 0xc6, 0x4a, 0x98, 0x3f, 0xe6, 0x12, 0xea, 0x3a, 0xd3, 0x96, 0x4e,
+	0x34, 0x52, 0xc3, 0x4f, 0xe0, 0xbc, 0xa4, 0x58, 0x90, 0x57, 0x5e, 0x22, 0xa8, 0xcf, 0x88, 0xa2,
+	0xbe, 0x47, 0x94, 0x30, 0x5f, 0x20, 0xc7, 0x99, 0x1e, 0x66, 0x59, 0xda, 0x79, 0x92, 0x2d, 0x25,
+	0x56, 0x7f, 0x9b, 0x03, 0xe7, 0x26, 0x0e, 0x32, 0xf8, 0x0c, 0xd4, 0x7b, 0x4c, 0x48, 0xe5, 0x25,
+	0xfa, 0xbd, 0xa6, 0x0f, 0x6b, 0x3b, 0x79, 0x55, 0xca, 0x27, 0x2f, 0x68, 0x94, 0x6d, 0x1c, 0xe8,
+	0xc9, 0xc7, 0xce, 0x5b, 0x7b, 0xe0, 0x82, 0xe5, 0xe5, 0x27, 0x70, 0x81, 0x39, 0x57, 0xce, 0x5c,
+	0xc9, 0x98, 0x56, 0x3c, 0xe4, 0x3e, 0x07, 0x2b, 0x8a, 0x27, 0x1e, 0xef, 0x4d, 0x14, 0x3a, 0x3f,
+	0x43, 0xa1, 0x8a, 0x27, 0xcf, 0x7b, 0x23, 0x85, 0xb6, 0xaa, 0x60, 0x61, 0xf0, 0xf5, 0xd9, 0xfa,
+	0xbb, 0x02, 0xae, 0x11, 0x1e, 0x95, 0xcf, 0x06, 0xad, 0xfa, 0xf8, 0x70, 0xd0, 0xd6, 0xf9, 0xda,
+	0x95, 0x1f, 0xbe, 0xb1, 0xda, 0x80, 0x87, 0x38, 0x0e, 0x1c, 0x2e, 0x82, 0x46, 0x40, 0x63, 0x53,
+	0x4d, 0xfe, 0x89, 0x9e, 0x30, 0x79, 0xc4, 0x7f, 0x47, 0xee, 0x0d, 0xae, 0x7e, 0x9f, 0x9b, 0xdf,
+	0x6e, 0x36, 0xff, 0x98, 0xbb, 0xbc, 0x9d, 0x21, 0x9b, 0xbe, 0x74, 0xb2, 0x4b, 0x7d, 0xb5, 0xb7,
+	0xe1, 0xb8, 0xf9, 0xca, 0x3f, 0xf3, 0x35, 0xfb, 0x4d, 0x5f, 0xee, 0x0f, 0xd6, 0xec, 0xef, 0x6d,
+	0xec, 0x0f, 0xd6, 0x74, 0x4f, 0x99, 0x22, 0xee, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x69, 0x3e,
+	0xbe, 0xa3, 0xa1, 0x11, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/ad_group_feed.pb.go b/googleapis/ads/googleads/v0/resources/ad_group_feed.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1f85b1d263ebe9d5ab06f58148f49fbbacfd5a40
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/ad_group_feed.pb.go
@@ -0,0 +1,155 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/ad_group_feed.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An ad group feed.
+type AdGroupFeed struct {
+	// The resource name of the ad group feed.
+	// Ad group feed resource names have the form:
+	//
+	// `customers/{customer_id}/adGroupFeeds/{ad_group_id}_{feed_id}
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed being linked to the ad group.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The ad group being linked to the feed.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,3,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Indicates which placeholder types the feed may populate under the connected
+	// ad group. Required.
+	PlaceholderTypes []enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,4,rep,packed,name=placeholder_types,json=placeholderTypes,proto3,enum=google.ads.googleads.v0.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_types,omitempty"`
+	// Matching function associated with the AdGroupFeed.
+	// The matching function is used to filter the set of feed items selected.
+	// Required.
+	MatchingFunction *common.MatchingFunction `protobuf:"bytes,5,opt,name=matching_function,json=matchingFunction,proto3" json:"matching_function,omitempty"`
+	// Status of the ad group feed.
+	// This field is read-only.
+	Status               enums.FeedLinkStatusEnum_FeedLinkStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.FeedLinkStatusEnum_FeedLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *AdGroupFeed) Reset()         { *m = AdGroupFeed{} }
+func (m *AdGroupFeed) String() string { return proto.CompactTextString(m) }
+func (*AdGroupFeed) ProtoMessage()    {}
+func (*AdGroupFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_b1adbabb521ebfb6, []int{0}
+}
+func (m *AdGroupFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupFeed.Unmarshal(m, b)
+}
+func (m *AdGroupFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupFeed.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupFeed.Merge(dst, src)
+}
+func (m *AdGroupFeed) XXX_Size() int {
+	return xxx_messageInfo_AdGroupFeed.Size(m)
+}
+func (m *AdGroupFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupFeed proto.InternalMessageInfo
+
+func (m *AdGroupFeed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *AdGroupFeed) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetPlaceholderTypes() []enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderTypes
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetMatchingFunction() *common.MatchingFunction {
+	if m != nil {
+		return m.MatchingFunction
+	}
+	return nil
+}
+
+func (m *AdGroupFeed) GetStatus() enums.FeedLinkStatusEnum_FeedLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*AdGroupFeed)(nil), "google.ads.googleads.v0.resources.AdGroupFeed")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/ad_group_feed.proto", fileDescriptor_ad_group_feed_b1adbabb521ebfb6)
+}
+
+var fileDescriptor_ad_group_feed_b1adbabb521ebfb6 = []byte{
+	// 454 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x6b, 0xd4, 0x40,
+	0x10, 0xc7, 0xc9, 0x5d, 0x3d, 0x75, 0xab, 0xe5, 0x9a, 0xa7, 0x50, 0x44, 0xae, 0x8a, 0x70, 0x4f,
+	0x9b, 0x70, 0xfe, 0x7a, 0xf0, 0xc5, 0x1c, 0xd8, 0x03, 0x51, 0x39, 0x52, 0x39, 0x44, 0x4e, 0xc2,
+	0x36, 0x3b, 0xb7, 0x0d, 0xcd, 0xfe, 0x60, 0x37, 0xa9, 0xf4, 0xdf, 0xf1, 0xd1, 0x7f, 0x44, 0xf0,
+	0xdd, 0xff, 0x47, 0x92, 0xdd, 0x44, 0x7b, 0x12, 0x7b, 0x6f, 0x93, 0xe1, 0xfb, 0x99, 0x9d, 0x99,
+	0xef, 0x04, 0x3d, 0x67, 0x52, 0xb2, 0x02, 0x42, 0x42, 0x4d, 0x68, 0xc3, 0x3a, 0xba, 0x8c, 0x42,
+	0x0d, 0x46, 0x56, 0x3a, 0x03, 0x13, 0x12, 0x9a, 0x32, 0x2d, 0x2b, 0x95, 0x6e, 0x00, 0x28, 0x56,
+	0x5a, 0x96, 0xd2, 0x3f, 0xb6, 0x5a, 0x4c, 0xa8, 0xc1, 0x1d, 0x86, 0x2f, 0x23, 0xdc, 0x61, 0x47,
+	0x2f, 0xfa, 0x2a, 0x67, 0x92, 0x73, 0x29, 0x42, 0x4e, 0xca, 0xec, 0x3c, 0x17, 0x2c, 0xdd, 0x54,
+	0x22, 0x2b, 0x73, 0x29, 0x6c, 0xe9, 0xa3, 0x67, 0x7d, 0x1c, 0x88, 0x8a, 0x9b, 0xb0, 0x6e, 0x22,
+	0x2d, 0x72, 0x71, 0x91, 0x9a, 0x92, 0x94, 0x95, 0xd9, 0x8d, 0x52, 0x05, 0xc9, 0xe0, 0x5c, 0x16,
+	0x14, 0x74, 0x5a, 0x5e, 0x29, 0x70, 0xd4, 0x43, 0x47, 0x35, 0x5f, 0x67, 0xd5, 0x26, 0xfc, 0xaa,
+	0x89, 0x52, 0xa0, 0x5d, 0xd5, 0x47, 0x3f, 0x86, 0x68, 0x3f, 0xa6, 0x8b, 0x7a, 0xfa, 0x13, 0x00,
+	0xea, 0x3f, 0x46, 0xf7, 0xdb, 0x01, 0x53, 0x41, 0x38, 0x04, 0xde, 0xc4, 0x9b, 0xde, 0x4d, 0xee,
+	0xb5, 0xc9, 0x0f, 0x84, 0x83, 0x1f, 0xa1, 0xbd, 0xba, 0xc9, 0x60, 0x30, 0xf1, 0xa6, 0xfb, 0xb3,
+	0x07, 0x6e, 0x3f, 0xb8, 0x7d, 0x03, 0x9f, 0x96, 0x3a, 0x17, 0x6c, 0x45, 0x8a, 0x0a, 0x92, 0x46,
+	0xe9, 0xbf, 0x44, 0x77, 0xda, 0x25, 0x07, 0xc3, 0x1d, 0xa8, 0xdb, 0xc4, 0xf6, 0xe4, 0x4b, 0x74,
+	0xb8, 0x3d, 0x99, 0x09, 0xf6, 0x26, 0xc3, 0xe9, 0xc1, 0x6c, 0x8e, 0xfb, 0x2c, 0x6a, 0x36, 0x82,
+	0x97, 0x7f, 0xb8, 0x8f, 0x57, 0x0a, 0xde, 0x88, 0x8a, 0x6f, 0xe7, 0x92, 0xb1, 0xba, 0x9e, 0x30,
+	0xfe, 0x17, 0x74, 0xf8, 0x8f, 0x6f, 0xc1, 0xad, 0xa6, 0xe5, 0xa8, 0xf7, 0x41, 0x6b, 0x38, 0x7e,
+	0xef, 0xc0, 0x13, 0xc7, 0x25, 0x63, 0xbe, 0x95, 0xf1, 0x3f, 0xa1, 0x91, 0x75, 0x35, 0x18, 0x4d,
+	0xbc, 0xe9, 0xc1, 0xec, 0xf5, 0x0d, 0x43, 0xd4, 0xa6, 0xbc, 0xcb, 0xc5, 0xc5, 0x69, 0x03, 0x35,
+	0x33, 0x5c, 0x4f, 0x25, 0xae, 0xde, 0xfc, 0x97, 0x87, 0x9e, 0x64, 0x92, 0xe3, 0x1b, 0xef, 0x76,
+	0x3e, 0xfe, 0xcb, 0xf0, 0x65, 0xbd, 0xfd, 0xa5, 0xf7, 0xf9, 0xad, 0xc3, 0x98, 0x2c, 0x88, 0x60,
+	0x58, 0x6a, 0x16, 0x32, 0x10, 0x8d, 0x37, 0xed, 0xb5, 0xa9, 0xdc, 0xfc, 0xe7, 0x27, 0x7a, 0xd5,
+	0x45, 0xdf, 0x06, 0xc3, 0x45, 0x1c, 0x7f, 0x1f, 0x1c, 0x2f, 0x6c, 0xc9, 0x98, 0x1a, 0x6c, 0xc3,
+	0x3a, 0x5a, 0x45, 0x38, 0x69, 0x95, 0x3f, 0x5b, 0xcd, 0x3a, 0xa6, 0x66, 0xdd, 0x69, 0xd6, 0xab,
+	0x68, 0xdd, 0x69, 0xce, 0x46, 0x4d, 0x13, 0x4f, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x06,
+	0x3f, 0xc0, 0xc8, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/age_range_view.pb.go b/googleapis/ads/googleads/v0/resources/age_range_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3848b4a2aa30bedeb3599800e2dfb3d2d70c61a6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/age_range_view.pb.go
@@ -0,0 +1,89 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/age_range_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An age range view.
+type AgeRangeView struct {
+	// The resource name of the age range view.
+	// Age range view resource names have the form:
+	//
+	// `customers/{customer_id}/ageRangeViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AgeRangeView) Reset()         { *m = AgeRangeView{} }
+func (m *AgeRangeView) String() string { return proto.CompactTextString(m) }
+func (*AgeRangeView) ProtoMessage()    {}
+func (*AgeRangeView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_age_range_view_f299b327e9938b24, []int{0}
+}
+func (m *AgeRangeView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AgeRangeView.Unmarshal(m, b)
+}
+func (m *AgeRangeView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AgeRangeView.Marshal(b, m, deterministic)
+}
+func (dst *AgeRangeView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AgeRangeView.Merge(dst, src)
+}
+func (m *AgeRangeView) XXX_Size() int {
+	return xxx_messageInfo_AgeRangeView.Size(m)
+}
+func (m *AgeRangeView) XXX_DiscardUnknown() {
+	xxx_messageInfo_AgeRangeView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AgeRangeView proto.InternalMessageInfo
+
+func (m *AgeRangeView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*AgeRangeView)(nil), "google.ads.googleads.v0.resources.AgeRangeView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/age_range_view.proto", fileDescriptor_age_range_view_f299b327e9938b24)
+}
+
+var fileDescriptor_age_range_view_f299b327e9938b24 = []byte{
+	// 228 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0xc4, 0xf4, 0xd4, 0xf8, 0xa2, 0xc4, 0xbc, 0xf4,
+	0xd4, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x62,
+	0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x3e, 0xbd, 0x32, 0x03, 0x3d, 0xb8, 0x3e, 0x25, 0x63, 0x2e,
+	0x1e, 0xc7, 0xf4, 0xd4, 0x20, 0x90, 0xce, 0xb0, 0xcc, 0xd4, 0x72, 0x21, 0x65, 0x2e, 0x5e, 0x98,
+	0x64, 0x7c, 0x5e, 0x62, 0x6e, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x0f, 0x4c, 0xd0,
+	0x2f, 0x31, 0x37, 0xd5, 0xe9, 0x1a, 0x23, 0x97, 0x6a, 0x72, 0x7e, 0xae, 0x1e, 0x41, 0xe3, 0x9d,
+	0x04, 0x91, 0x0d, 0x0f, 0x00, 0x39, 0x2a, 0x80, 0x31, 0xca, 0x0b, 0xaa, 0x2f, 0x3d, 0x3f, 0x27,
+	0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x64, 0x98, 0xf7, 0x0a,
+	0x32, 0x8b, 0xf1, 0xf8, 0xd6, 0x1a, 0xce, 0x5a, 0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49,
+	0xd1, 0x1d, 0x62, 0xa4, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85, 0x19, 0xe8, 0x05, 0xc1,
+	0x54, 0x9e, 0x82, 0xa9, 0x89, 0x71, 0x4c, 0x29, 0x8e, 0x81, 0xab, 0x89, 0x09, 0x33, 0x88, 0x81,
+	0xab, 0x49, 0x62, 0x03, 0x3b, 0xc2, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xba, 0x0f, 0x61, 0x81,
+	0x71, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/bidding_strategy.pb.go b/googleapis/ads/googleads/v0/resources/bidding_strategy.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d58808d0ef343a3d5e952d5e7b6f5169a68a2ba6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/bidding_strategy.pb.go
@@ -0,0 +1,397 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/bidding_strategy.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A bidding strategy.
+type BiddingStrategy struct {
+	// The resource name of the bidding strategy.
+	// Bidding strategy resource names have the form:
+	//
+	// `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the bidding strategy.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the bidding strategy.
+	// All bidding strategies within an account must be named distinctly.
+	//
+	// The length of this string should be between 1 and 255, inclusive,
+	// in UTF-8 bytes, (trimmed).
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The type of the bidding strategy.
+	// Create a bidding strategy by setting the bidding scheme.
+	//
+	// This field is read-only.
+	Type enums.BiddingStrategyTypeEnum_BiddingStrategyType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.BiddingStrategyTypeEnum_BiddingStrategyType" json:"type,omitempty"`
+	// The bidding scheme.
+	//
+	// Only one can be set.
+	//
+	// Types that are valid to be assigned to Scheme:
+	//	*BiddingStrategy_EnhancedCpc
+	//	*BiddingStrategy_PageOnePromoted
+	//	*BiddingStrategy_TargetCpa
+	//	*BiddingStrategy_TargetOutrankShare
+	//	*BiddingStrategy_TargetRoas
+	//	*BiddingStrategy_TargetSpend
+	Scheme               isBiddingStrategy_Scheme `protobuf_oneof:"scheme"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *BiddingStrategy) Reset()         { *m = BiddingStrategy{} }
+func (m *BiddingStrategy) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategy) ProtoMessage()    {}
+func (*BiddingStrategy) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_d0682b5c71f925fb, []int{0}
+}
+func (m *BiddingStrategy) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategy.Unmarshal(m, b)
+}
+func (m *BiddingStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategy.Marshal(b, m, deterministic)
+}
+func (dst *BiddingStrategy) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategy.Merge(dst, src)
+}
+func (m *BiddingStrategy) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategy.Size(m)
+}
+func (m *BiddingStrategy) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategy.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategy proto.InternalMessageInfo
+
+func (m *BiddingStrategy) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *BiddingStrategy) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetType() enums.BiddingStrategyTypeEnum_BiddingStrategyType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.BiddingStrategyTypeEnum_UNSPECIFIED
+}
+
+type isBiddingStrategy_Scheme interface {
+	isBiddingStrategy_Scheme()
+}
+
+type BiddingStrategy_EnhancedCpc struct {
+	EnhancedCpc *common.EnhancedCpc `protobuf:"bytes,7,opt,name=enhanced_cpc,json=enhancedCpc,proto3,oneof"`
+}
+
+type BiddingStrategy_PageOnePromoted struct {
+	PageOnePromoted *common.PageOnePromoted `protobuf:"bytes,8,opt,name=page_one_promoted,json=pageOnePromoted,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetCpa struct {
+	TargetCpa *common.TargetCpa `protobuf:"bytes,9,opt,name=target_cpa,json=targetCpa,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetOutrankShare struct {
+	TargetOutrankShare *common.TargetOutrankShare `protobuf:"bytes,10,opt,name=target_outrank_share,json=targetOutrankShare,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetRoas struct {
+	TargetRoas *common.TargetRoas `protobuf:"bytes,11,opt,name=target_roas,json=targetRoas,proto3,oneof"`
+}
+
+type BiddingStrategy_TargetSpend struct {
+	TargetSpend *common.TargetSpend `protobuf:"bytes,12,opt,name=target_spend,json=targetSpend,proto3,oneof"`
+}
+
+func (*BiddingStrategy_EnhancedCpc) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_PageOnePromoted) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetCpa) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetOutrankShare) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetRoas) isBiddingStrategy_Scheme() {}
+
+func (*BiddingStrategy_TargetSpend) isBiddingStrategy_Scheme() {}
+
+func (m *BiddingStrategy) GetScheme() isBiddingStrategy_Scheme {
+	if m != nil {
+		return m.Scheme
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetEnhancedCpc() *common.EnhancedCpc {
+	if x, ok := m.GetScheme().(*BiddingStrategy_EnhancedCpc); ok {
+		return x.EnhancedCpc
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetPageOnePromoted() *common.PageOnePromoted {
+	if x, ok := m.GetScheme().(*BiddingStrategy_PageOnePromoted); ok {
+		return x.PageOnePromoted
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetCpa() *common.TargetCpa {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetCpa); ok {
+		return x.TargetCpa
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetOutrankShare() *common.TargetOutrankShare {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetOutrankShare); ok {
+		return x.TargetOutrankShare
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetRoas() *common.TargetRoas {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetRoas); ok {
+		return x.TargetRoas
+	}
+	return nil
+}
+
+func (m *BiddingStrategy) GetTargetSpend() *common.TargetSpend {
+	if x, ok := m.GetScheme().(*BiddingStrategy_TargetSpend); ok {
+		return x.TargetSpend
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*BiddingStrategy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _BiddingStrategy_OneofMarshaler, _BiddingStrategy_OneofUnmarshaler, _BiddingStrategy_OneofSizer, []interface{}{
+		(*BiddingStrategy_EnhancedCpc)(nil),
+		(*BiddingStrategy_PageOnePromoted)(nil),
+		(*BiddingStrategy_TargetCpa)(nil),
+		(*BiddingStrategy_TargetOutrankShare)(nil),
+		(*BiddingStrategy_TargetRoas)(nil),
+		(*BiddingStrategy_TargetSpend)(nil),
+	}
+}
+
+func _BiddingStrategy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*BiddingStrategy)
+	// scheme
+	switch x := m.Scheme.(type) {
+	case *BiddingStrategy_EnhancedCpc:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.EnhancedCpc); err != nil {
+			return err
+		}
+	case *BiddingStrategy_PageOnePromoted:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PageOnePromoted); err != nil {
+			return err
+		}
+	case *BiddingStrategy_TargetCpa:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetCpa); err != nil {
+			return err
+		}
+	case *BiddingStrategy_TargetOutrankShare:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetOutrankShare); err != nil {
+			return err
+		}
+	case *BiddingStrategy_TargetRoas:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetRoas); err != nil {
+			return err
+		}
+	case *BiddingStrategy_TargetSpend:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetSpend); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("BiddingStrategy.Scheme has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _BiddingStrategy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*BiddingStrategy)
+	switch tag {
+	case 7: // scheme.enhanced_cpc
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.EnhancedCpc)
+		err := b.DecodeMessage(msg)
+		m.Scheme = &BiddingStrategy_EnhancedCpc{msg}
+		return true, err
+	case 8: // scheme.page_one_promoted
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.PageOnePromoted)
+		err := b.DecodeMessage(msg)
+		m.Scheme = &BiddingStrategy_PageOnePromoted{msg}
+		return true, err
+	case 9: // scheme.target_cpa
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TargetCpa)
+		err := b.DecodeMessage(msg)
+		m.Scheme = &BiddingStrategy_TargetCpa{msg}
+		return true, err
+	case 10: // scheme.target_outrank_share
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TargetOutrankShare)
+		err := b.DecodeMessage(msg)
+		m.Scheme = &BiddingStrategy_TargetOutrankShare{msg}
+		return true, err
+	case 11: // scheme.target_roas
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TargetRoas)
+		err := b.DecodeMessage(msg)
+		m.Scheme = &BiddingStrategy_TargetRoas{msg}
+		return true, err
+	case 12: // scheme.target_spend
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TargetSpend)
+		err := b.DecodeMessage(msg)
+		m.Scheme = &BiddingStrategy_TargetSpend{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _BiddingStrategy_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*BiddingStrategy)
+	// scheme
+	switch x := m.Scheme.(type) {
+	case *BiddingStrategy_EnhancedCpc:
+		s := proto.Size(x.EnhancedCpc)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BiddingStrategy_PageOnePromoted:
+		s := proto.Size(x.PageOnePromoted)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BiddingStrategy_TargetCpa:
+		s := proto.Size(x.TargetCpa)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BiddingStrategy_TargetOutrankShare:
+		s := proto.Size(x.TargetOutrankShare)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BiddingStrategy_TargetRoas:
+		s := proto.Size(x.TargetRoas)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BiddingStrategy_TargetSpend:
+		s := proto.Size(x.TargetSpend)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*BiddingStrategy)(nil), "google.ads.googleads.v0.resources.BiddingStrategy")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/bidding_strategy.proto", fileDescriptor_bidding_strategy_d0682b5c71f925fb)
+}
+
+var fileDescriptor_bidding_strategy_d0682b5c71f925fb = []byte{
+	// 554 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xd1, 0x6e, 0xd3, 0x3c,
+	0x14, 0xc7, 0x9b, 0x6e, 0xdf, 0xbe, 0xd5, 0x2d, 0x4c, 0x44, 0xbb, 0x88, 0x06, 0x42, 0x1d, 0x08,
+	0xa9, 0x30, 0xe4, 0x54, 0x05, 0x21, 0x10, 0x57, 0xed, 0x34, 0xad, 0x54, 0x82, 0x55, 0xe9, 0xd4,
+	0x0b, 0x54, 0x88, 0xdc, 0xe4, 0xcc, 0x8d, 0x68, 0x6c, 0xcb, 0x76, 0x86, 0xfa, 0x00, 0xbc, 0x08,
+	0x97, 0x3c, 0x0a, 0x6f, 0xc0, 0xdb, 0xa0, 0x38, 0x4e, 0x27, 0x56, 0x4a, 0x7b, 0x77, 0xce, 0xe9,
+	0xff, 0xff, 0xf3, 0x39, 0x39, 0x76, 0xd1, 0x6b, 0xca, 0x39, 0x9d, 0x83, 0x4f, 0x62, 0xe5, 0x17,
+	0x61, 0x1e, 0x5d, 0xb7, 0x7d, 0x09, 0x8a, 0x67, 0x32, 0x02, 0xe5, 0x4f, 0x93, 0x38, 0x4e, 0x18,
+	0x0d, 0x95, 0x96, 0x44, 0x03, 0x5d, 0x60, 0x21, 0xb9, 0xe6, 0xee, 0x71, 0x21, 0xc7, 0x24, 0x56,
+	0x78, 0xe9, 0xc4, 0xd7, 0x6d, 0xbc, 0x74, 0x1e, 0x3d, 0x5f, 0x07, 0x8f, 0x78, 0x9a, 0x72, 0x56,
+	0x92, 0x0b, 0xe0, 0xd1, 0x9b, 0x75, 0x6a, 0x60, 0x59, 0xba, 0xda, 0x46, 0xa8, 0x17, 0x02, 0xac,
+	0xf5, 0xa1, 0xb5, 0x9a, 0x6c, 0x9a, 0x5d, 0xf9, 0x5f, 0x25, 0x11, 0x02, 0xa4, 0x2a, 0x7e, 0x7f,
+	0xf4, 0x6d, 0x0f, 0x1d, 0xf4, 0x0a, 0xff, 0xc8, 0xda, 0xdd, 0xc7, 0xe8, 0x4e, 0xd9, 0x69, 0xc8,
+	0x48, 0x0a, 0x9e, 0xd3, 0x74, 0x5a, 0xb5, 0xa0, 0x51, 0x16, 0x3f, 0x90, 0x14, 0xdc, 0x13, 0x54,
+	0x4d, 0x62, 0x6f, 0xa7, 0xe9, 0xb4, 0xea, 0x9d, 0xfb, 0x76, 0x4c, 0x5c, 0x9e, 0x82, 0xdf, 0x31,
+	0xfd, 0xea, 0xe5, 0x98, 0xcc, 0x33, 0x08, 0xaa, 0x49, 0xec, 0xb6, 0xd1, 0xae, 0x01, 0xed, 0x1a,
+	0xf9, 0x83, 0x15, 0xf9, 0x48, 0xcb, 0x84, 0xd1, 0x42, 0x6f, 0x94, 0xee, 0x67, 0xb4, 0x9b, 0x4f,
+	0xe1, 0xfd, 0xd7, 0x74, 0x5a, 0x77, 0x3b, 0x03, 0xbc, 0xee, 0x93, 0x9a, 0x2f, 0x80, 0x6f, 0x4d,
+	0x70, 0xb9, 0x10, 0x70, 0xc6, 0xb2, 0xf4, 0x6f, 0xf5, 0xc0, 0x70, 0xdd, 0x21, 0x6a, 0x00, 0x9b,
+	0x11, 0x16, 0x41, 0x1c, 0x46, 0x22, 0xf2, 0xfe, 0x37, 0x9d, 0x9d, 0xac, 0x3d, 0xa7, 0xd8, 0x0b,
+	0x3e, 0xb3, 0x9e, 0x53, 0x11, 0xf5, 0x2b, 0x41, 0x1d, 0x6e, 0x52, 0xf7, 0x13, 0xba, 0x27, 0x08,
+	0x85, 0x90, 0x33, 0x08, 0x85, 0xe4, 0x29, 0xd7, 0x10, 0x7b, 0xfb, 0x06, 0xeb, 0x6f, 0xc2, 0x0e,
+	0x09, 0x85, 0x0b, 0x06, 0x43, 0x6b, 0xeb, 0x57, 0x82, 0x03, 0xf1, 0x67, 0xc9, 0x1d, 0x20, 0xa4,
+	0x89, 0xa4, 0xa0, 0xc3, 0x48, 0x10, 0xaf, 0x66, 0xb8, 0x4f, 0x37, 0x71, 0x2f, 0x8d, 0xe3, 0x54,
+	0x90, 0x7e, 0x25, 0xa8, 0xe9, 0x32, 0x71, 0xaf, 0xd0, 0xa1, 0x65, 0xf1, 0x4c, 0x4b, 0xc2, 0xbe,
+	0x84, 0x6a, 0x46, 0x24, 0x78, 0xc8, 0x50, 0x3b, 0xdb, 0x51, 0x2f, 0x0a, 0xeb, 0x28, 0x77, 0xf6,
+	0x2b, 0x81, 0xab, 0x57, 0xaa, 0xee, 0x7b, 0x54, 0xb7, 0xe7, 0x48, 0x4e, 0x94, 0x57, 0x37, 0xf8,
+	0x67, 0xdb, 0xe1, 0x03, 0x4e, 0x54, 0xbf, 0x12, 0xd8, 0xa1, 0xf3, 0x2c, 0xdf, 0x99, 0xc5, 0x29,
+	0x01, 0x2c, 0xf6, 0x1a, 0xdb, 0xed, 0xac, 0xe0, 0x8d, 0x72, 0x4b, 0xbe, 0x33, 0x7d, 0x93, 0xf6,
+	0xf6, 0xd1, 0x9e, 0x8a, 0x66, 0x90, 0x42, 0xef, 0x97, 0x83, 0x9e, 0x44, 0x3c, 0xc5, 0x1b, 0x9f,
+	0x6e, 0xef, 0xf0, 0xd6, 0xa5, 0x1a, 0xe6, 0x97, 0x78, 0xe8, 0x7c, 0x1c, 0x58, 0x2b, 0xe5, 0x73,
+	0xc2, 0x28, 0xe6, 0x92, 0xfa, 0x14, 0x98, 0xb9, 0xe2, 0xe5, 0xa3, 0x15, 0x89, 0xfa, 0xc7, 0xdf,
+	0xc9, 0xdb, 0x65, 0xf4, 0xbd, 0xba, 0x73, 0xde, 0xed, 0xfe, 0xa8, 0x1e, 0x9f, 0x17, 0xc8, 0x6e,
+	0xac, 0x70, 0x11, 0xe6, 0xd1, 0xb8, 0x8d, 0x83, 0x52, 0xf9, 0xb3, 0xd4, 0x4c, 0xba, 0xb1, 0x9a,
+	0x2c, 0x35, 0x93, 0x71, 0x7b, 0xb2, 0xd4, 0x4c, 0xf7, 0x4c, 0x13, 0x2f, 0x7e, 0x07, 0x00, 0x00,
+	0xff, 0xff, 0x20, 0x42, 0x14, 0xed, 0xd2, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/billing_setup.pb.go b/googleapis/ads/googleads/v0/resources/billing_setup.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..039f52f0e1e61592ffbbe0f7a91639679ce26137
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/billing_setup.pb.go
@@ -0,0 +1,460 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/billing_setup.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A billing setup across Ads and Payments systems; an association between a
+// Payments account and an advertiser. A billing setup is specific to one
+// advertiser.
+type BillingSetup struct {
+	// The resource name of the billing setup.
+	// BillingSetup resource names have the form:
+	//
+	// `customers/{customer_id}/billingSetups/{billing_setup_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the billing setup.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The status of the billing setup.
+	Status enums.BillingSetupStatusEnum_BillingSetupStatus `protobuf:"varint,3,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.BillingSetupStatusEnum_BillingSetupStatus" json:"status,omitempty"`
+	// The resource name of the Payments account associated with this billing
+	// setup. Payments resource names have the form:
+	//
+	// `customers/{customer_id}/paymentsAccounts/
+	//                       {payments_profile_id}_{payments_account_id}`
+	// When setting up billing, this is used to signup with an existing Payments
+	// account (and then payments_account_info should not be set).
+	// When getting a billing setup, this and payments_account_info will be
+	// populated.
+	PaymentsAccount *wrappers.StringValue `protobuf:"bytes,11,opt,name=payments_account,json=paymentsAccount,proto3" json:"payments_account,omitempty"`
+	// The Payments account information associated with this billing setup.
+	// When setting up billing, this is used to signup with a new Payments account
+	// (and then payments_account should not be set).
+	// When getting a billing setup, this and payments_account will be
+	// populated.
+	PaymentsAccountInfo *BillingSetup_PaymentsAccountInfo `protobuf:"bytes,12,opt,name=payments_account_info,json=paymentsAccountInfo,proto3" json:"payments_account_info,omitempty"`
+	// When creating a new billing setup, this is when the setup should take
+	// effect. NOW is the only acceptable start time if the customer doesn't have
+	// any approved setups.
+	//
+	// When fetching an existing billing setup, this is the requested start time.
+	// However, if the setup was approved (see status) after the requested start
+	// time, then this is the approval time.
+	//
+	// Types that are valid to be assigned to StartTime:
+	//	*BillingSetup_StartDateTime
+	//	*BillingSetup_StartTimeType
+	StartTime isBillingSetup_StartTime `protobuf_oneof:"start_time"`
+	// When the billing setup ends / ended. This is either FOREVER or the start
+	// time of the next scheduled billing setup.
+	//
+	// Types that are valid to be assigned to EndTime:
+	//	*BillingSetup_EndDateTime
+	//	*BillingSetup_EndTimeType
+	EndTime              isBillingSetup_EndTime `protobuf_oneof:"end_time"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *BillingSetup) Reset()         { *m = BillingSetup{} }
+func (m *BillingSetup) String() string { return proto.CompactTextString(m) }
+func (*BillingSetup) ProtoMessage()    {}
+func (*BillingSetup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_4fe3af0a77df0755, []int{0}
+}
+func (m *BillingSetup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetup.Unmarshal(m, b)
+}
+func (m *BillingSetup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetup.Marshal(b, m, deterministic)
+}
+func (dst *BillingSetup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetup.Merge(dst, src)
+}
+func (m *BillingSetup) XXX_Size() int {
+	return xxx_messageInfo_BillingSetup.Size(m)
+}
+func (m *BillingSetup) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetup proto.InternalMessageInfo
+
+func (m *BillingSetup) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *BillingSetup) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetStatus() enums.BillingSetupStatusEnum_BillingSetupStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.BillingSetupStatusEnum_UNSPECIFIED
+}
+
+func (m *BillingSetup) GetPaymentsAccount() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccount
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetPaymentsAccountInfo() *BillingSetup_PaymentsAccountInfo {
+	if m != nil {
+		return m.PaymentsAccountInfo
+	}
+	return nil
+}
+
+type isBillingSetup_StartTime interface {
+	isBillingSetup_StartTime()
+}
+
+type BillingSetup_StartDateTime struct {
+	StartDateTime *wrappers.StringValue `protobuf:"bytes,9,opt,name=start_date_time,json=startDateTime,proto3,oneof"`
+}
+
+type BillingSetup_StartTimeType struct {
+	StartTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,10,opt,name=start_time_type,json=startTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*BillingSetup_StartDateTime) isBillingSetup_StartTime() {}
+
+func (*BillingSetup_StartTimeType) isBillingSetup_StartTime() {}
+
+func (m *BillingSetup) GetStartTime() isBillingSetup_StartTime {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetStartDateTime() *wrappers.StringValue {
+	if x, ok := m.GetStartTime().(*BillingSetup_StartDateTime); ok {
+		return x.StartDateTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetStartTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetStartTime().(*BillingSetup_StartTimeType); ok {
+		return x.StartTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+type isBillingSetup_EndTime interface {
+	isBillingSetup_EndTime()
+}
+
+type BillingSetup_EndDateTime struct {
+	EndDateTime *wrappers.StringValue `protobuf:"bytes,13,opt,name=end_date_time,json=endDateTime,proto3,oneof"`
+}
+
+type BillingSetup_EndTimeType struct {
+	EndTimeType enums.TimeTypeEnum_TimeType `protobuf:"varint,14,opt,name=end_time_type,json=endTimeType,proto3,enum=google.ads.googleads.v0.enums.TimeTypeEnum_TimeType,oneof"`
+}
+
+func (*BillingSetup_EndDateTime) isBillingSetup_EndTime() {}
+
+func (*BillingSetup_EndTimeType) isBillingSetup_EndTime() {}
+
+func (m *BillingSetup) GetEndTime() isBillingSetup_EndTime {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetEndDateTime() *wrappers.StringValue {
+	if x, ok := m.GetEndTime().(*BillingSetup_EndDateTime); ok {
+		return x.EndDateTime
+	}
+	return nil
+}
+
+func (m *BillingSetup) GetEndTimeType() enums.TimeTypeEnum_TimeType {
+	if x, ok := m.GetEndTime().(*BillingSetup_EndTimeType); ok {
+		return x.EndTimeType
+	}
+	return enums.TimeTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*BillingSetup) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _BillingSetup_OneofMarshaler, _BillingSetup_OneofUnmarshaler, _BillingSetup_OneofSizer, []interface{}{
+		(*BillingSetup_StartDateTime)(nil),
+		(*BillingSetup_StartTimeType)(nil),
+		(*BillingSetup_EndDateTime)(nil),
+		(*BillingSetup_EndTimeType)(nil),
+	}
+}
+
+func _BillingSetup_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*BillingSetup)
+	// start_time
+	switch x := m.StartTime.(type) {
+	case *BillingSetup_StartDateTime:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.StartDateTime); err != nil {
+			return err
+		}
+	case *BillingSetup_StartTimeType:
+		b.EncodeVarint(10<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.StartTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("BillingSetup.StartTime has unexpected type %T", x)
+	}
+	// end_time
+	switch x := m.EndTime.(type) {
+	case *BillingSetup_EndDateTime:
+		b.EncodeVarint(13<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.EndDateTime); err != nil {
+			return err
+		}
+	case *BillingSetup_EndTimeType:
+		b.EncodeVarint(14<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.EndTimeType))
+	case nil:
+	default:
+		return fmt.Errorf("BillingSetup.EndTime has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _BillingSetup_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*BillingSetup)
+	switch tag {
+	case 9: // start_time.start_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.StartTime = &BillingSetup_StartDateTime{msg}
+		return true, err
+	case 10: // start_time.start_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.StartTime = &BillingSetup_StartTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	case 13: // end_time.end_date_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.EndTime = &BillingSetup_EndDateTime{msg}
+		return true, err
+	case 14: // end_time.end_time_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.EndTime = &BillingSetup_EndTimeType{enums.TimeTypeEnum_TimeType(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _BillingSetup_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*BillingSetup)
+	// start_time
+	switch x := m.StartTime.(type) {
+	case *BillingSetup_StartDateTime:
+		s := proto.Size(x.StartDateTime)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BillingSetup_StartTimeType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.StartTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// end_time
+	switch x := m.EndTime.(type) {
+	case *BillingSetup_EndDateTime:
+		s := proto.Size(x.EndDateTime)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BillingSetup_EndTimeType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.EndTimeType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Container of Payments account information for this billing.
+type BillingSetup_PaymentsAccountInfo struct {
+	// A 16 digit id used to identify the Payments account associated with the
+	// billing setup.
+	//
+	// This must be passed as a string with dashes, e.g. "1234-5678-9012-3456".
+	PaymentsAccountId *wrappers.StringValue `protobuf:"bytes,1,opt,name=payments_account_id,json=paymentsAccountId,proto3" json:"payments_account_id,omitempty"`
+	// The name of the Payments account associated with the billing setup.
+	//
+	// This enables the user to specify a meaningful name for a Payments account
+	// to aid in reconciling monthly invoices.
+	//
+	// This name will be printed in the monthly invoices.
+	PaymentsAccountName *wrappers.StringValue `protobuf:"bytes,2,opt,name=payments_account_name,json=paymentsAccountName,proto3" json:"payments_account_name,omitempty"`
+	// A 12 digit id used to identify the Payments profile associated with the
+	// billing setup.
+	//
+	// This must be passed in as a string with dashes, e.g. "1234-5678-9012".
+	PaymentsProfileId *wrappers.StringValue `protobuf:"bytes,3,opt,name=payments_profile_id,json=paymentsProfileId,proto3" json:"payments_profile_id,omitempty"`
+	// The name of the Payments profile associated with the billing setup.
+	PaymentsProfileName *wrappers.StringValue `protobuf:"bytes,4,opt,name=payments_profile_name,json=paymentsProfileName,proto3" json:"payments_profile_name,omitempty"`
+	// A secondary payments profile id present in uncommon situations, e.g.
+	// when a sequential liability agreement has been arranged.
+	SecondaryPaymentsProfileId *wrappers.StringValue `protobuf:"bytes,5,opt,name=secondary_payments_profile_id,json=secondaryPaymentsProfileId,proto3" json:"secondary_payments_profile_id,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}              `json:"-"`
+	XXX_unrecognized           []byte                `json:"-"`
+	XXX_sizecache              int32                 `json:"-"`
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) Reset()         { *m = BillingSetup_PaymentsAccountInfo{} }
+func (m *BillingSetup_PaymentsAccountInfo) String() string { return proto.CompactTextString(m) }
+func (*BillingSetup_PaymentsAccountInfo) ProtoMessage()    {}
+func (*BillingSetup_PaymentsAccountInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_4fe3af0a77df0755, []int{0, 0}
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Unmarshal(m, b)
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Marshal(b, m, deterministic)
+}
+func (dst *BillingSetup_PaymentsAccountInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Merge(dst, src)
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_Size() int {
+	return xxx_messageInfo_BillingSetup_PaymentsAccountInfo.Size(m)
+}
+func (m *BillingSetup_PaymentsAccountInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetup_PaymentsAccountInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetup_PaymentsAccountInfo proto.InternalMessageInfo
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsAccountId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccountId
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsAccountName() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccountName
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsProfileId
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetPaymentsProfileName() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsProfileName
+	}
+	return nil
+}
+
+func (m *BillingSetup_PaymentsAccountInfo) GetSecondaryPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.SecondaryPaymentsProfileId
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*BillingSetup)(nil), "google.ads.googleads.v0.resources.BillingSetup")
+	proto.RegisterType((*BillingSetup_PaymentsAccountInfo)(nil), "google.ads.googleads.v0.resources.BillingSetup.PaymentsAccountInfo")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/billing_setup.proto", fileDescriptor_billing_setup_4fe3af0a77df0755)
+}
+
+var fileDescriptor_billing_setup_4fe3af0a77df0755 = []byte{
+	// 599 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xdf, 0x6a, 0xdb, 0x3e,
+	0x14, 0xc7, 0x7f, 0x76, 0x7e, 0x2b, 0xab, 0x9a, 0xb4, 0xab, 0xcb, 0xc0, 0x64, 0x7f, 0x68, 0x37,
+	0x06, 0x81, 0x31, 0x39, 0x74, 0xdd, 0x18, 0xec, 0x2a, 0xde, 0x9f, 0xb4, 0x63, 0x0c, 0xe3, 0x94,
+	0x5c, 0x94, 0x30, 0x4f, 0x89, 0x14, 0x63, 0xb0, 0x25, 0x63, 0xc9, 0x2d, 0x79, 0x9a, 0xc1, 0x2e,
+	0xf7, 0x00, 0x7b, 0x88, 0x3d, 0xc0, 0x9e, 0x67, 0x58, 0xb2, 0xdc, 0xd4, 0x49, 0x9b, 0x94, 0xdd,
+	0x1d, 0x89, 0xf3, 0xfd, 0xea, 0xa3, 0x73, 0x8e, 0x04, 0x5e, 0x85, 0x8c, 0x85, 0x31, 0x71, 0x10,
+	0xe6, 0x8e, 0x0a, 0x8b, 0xe8, 0xbc, 0xeb, 0x64, 0x84, 0xb3, 0x3c, 0x9b, 0x10, 0xee, 0x8c, 0xa3,
+	0x38, 0x8e, 0x68, 0x18, 0x70, 0x22, 0xf2, 0x14, 0xa6, 0x19, 0x13, 0xcc, 0x3a, 0x50, 0xb9, 0x10,
+	0x61, 0x0e, 0x2b, 0x19, 0x3c, 0xef, 0xc2, 0x4a, 0xd6, 0x7e, 0x73, 0x9d, 0x33, 0xa1, 0x79, 0x52,
+	0x73, 0x0d, 0xb8, 0x40, 0x22, 0xe7, 0xca, 0xbc, 0xfd, 0xe2, 0x66, 0xa5, 0x88, 0x12, 0x12, 0x88,
+	0x59, 0x4a, 0xca, 0xf4, 0xc7, 0x65, 0xba, 0x5c, 0x8d, 0xf3, 0xa9, 0x73, 0x91, 0xa1, 0x34, 0x25,
+	0x59, 0x69, 0xf7, 0xe4, 0xfb, 0x26, 0x68, 0xba, 0xea, 0xb4, 0x41, 0x71, 0x98, 0xf5, 0x14, 0xb4,
+	0x34, 0x66, 0x40, 0x51, 0x42, 0x6c, 0x63, 0xdf, 0xe8, 0x6c, 0xfa, 0x4d, 0xbd, 0xf9, 0x05, 0x25,
+	0xc4, 0x7a, 0x0e, 0xcc, 0x08, 0xdb, 0xe6, 0xbe, 0xd1, 0xd9, 0x3a, 0x7c, 0x50, 0xde, 0x11, 0xea,
+	0x23, 0xe0, 0x09, 0x15, 0xaf, 0x8f, 0x86, 0x28, 0xce, 0x89, 0x6f, 0x46, 0xd8, 0xfa, 0x06, 0x36,
+	0xd4, 0x0d, 0xec, 0xc6, 0xbe, 0xd1, 0xd9, 0x3e, 0x3c, 0x86, 0xd7, 0xd5, 0x47, 0x5e, 0x01, 0xce,
+	0xe3, 0x0c, 0xa4, 0xf0, 0x03, 0xcd, 0x93, 0x25, 0xdb, 0x7e, 0xe9, 0x6b, 0xf5, 0xc1, 0xbd, 0x14,
+	0xcd, 0x12, 0x42, 0x05, 0x0f, 0xd0, 0x64, 0xc2, 0x72, 0x2a, 0xec, 0x2d, 0x09, 0xf7, 0x70, 0x01,
+	0x6e, 0x20, 0xb2, 0x88, 0x86, 0x8a, 0x6e, 0x47, 0xab, 0x7a, 0x4a, 0x64, 0x5d, 0x80, 0xfb, 0x75,
+	0xa3, 0x20, 0xa2, 0x53, 0x66, 0x37, 0xa5, 0xdb, 0x3b, 0xb8, 0xb2, 0xb3, 0x57, 0x30, 0xa1, 0x77,
+	0xd5, 0xff, 0x84, 0x4e, 0x99, 0xbf, 0x97, 0x2e, 0x6e, 0x5a, 0x1f, 0xc1, 0x0e, 0x17, 0x28, 0x13,
+	0x01, 0x46, 0x82, 0x04, 0x45, 0x13, 0xed, 0xcd, 0xd5, 0x17, 0x38, 0xfe, 0xcf, 0x6f, 0x49, 0xd9,
+	0x7b, 0x24, 0xc8, 0x69, 0x94, 0x10, 0xeb, 0xab, 0xf6, 0xa9, 0xe6, 0xc0, 0x06, 0xb2, 0xe8, 0x47,
+	0x2b, 0x8a, 0x5e, 0xa8, 0x4f, 0x67, 0x29, 0x91, 0xa5, 0xd6, 0x8b, 0xca, 0x5f, 0x6f, 0x58, 0x2e,
+	0x68, 0x11, 0x8a, 0xe7, 0x28, 0x5b, 0x6b, 0x50, 0x1a, 0xfe, 0x16, 0xa1, 0xb8, 0x62, 0x3c, 0x53,
+	0x1e, 0x97, 0x84, 0xdb, 0xff, 0x40, 0xa8, 0xbc, 0xf5, 0xb2, 0xfd, 0xab, 0x01, 0xf6, 0x96, 0x14,
+	0xdd, 0xfa, 0x0c, 0xf6, 0x16, 0x1b, 0x8b, 0xe5, 0x6c, 0xaf, 0x1a, 0x92, 0xdd, 0x7a, 0xbf, 0xb0,
+	0xe5, 0x2d, 0x19, 0x13, 0xf9, 0x56, 0xcc, 0x35, 0xfc, 0xea, 0xfd, 0x97, 0x0f, 0x6a, 0x9e, 0x2f,
+	0xcd, 0xd8, 0x34, 0x8a, 0x49, 0xc1, 0xd7, 0xb8, 0x0d, 0x9f, 0xa7, 0x74, 0x35, 0x3e, 0xed, 0x26,
+	0xf9, 0xfe, 0xbf, 0x0d, 0x5f, 0xe9, 0x27, 0xf9, 0x02, 0xf0, 0x88, 0x93, 0x09, 0xa3, 0x18, 0x65,
+	0xb3, 0x60, 0x19, 0xe9, 0x9d, 0x35, 0x9c, 0xdb, 0x95, 0x85, 0x57, 0x47, 0x76, 0x9b, 0x00, 0x5c,
+	0x0e, 0xae, 0x0b, 0xc0, 0x5d, 0x3d, 0x22, 0xee, 0x1f, 0x03, 0x3c, 0x9b, 0xb0, 0x64, 0xf5, 0xd3,
+	0x73, 0x77, 0xe7, 0xdf, 0x9e, 0x57, 0x10, 0x78, 0xc6, 0xd9, 0xa7, 0x52, 0x17, 0xb2, 0x18, 0xd1,
+	0x10, 0xb2, 0x2c, 0x74, 0x42, 0x42, 0x25, 0x9f, 0xfe, 0x3f, 0xd3, 0x88, 0xdf, 0xf0, 0xc5, 0xbf,
+	0xad, 0xa2, 0x1f, 0x66, 0xa3, 0xdf, 0xeb, 0xfd, 0x34, 0x0f, 0xfa, 0xca, 0xb2, 0x87, 0x39, 0x54,
+	0x61, 0x11, 0x0d, 0xbb, 0xd0, 0xd7, 0x99, 0xbf, 0x75, 0xce, 0xa8, 0x87, 0xf9, 0xa8, 0xca, 0x19,
+	0x0d, 0xbb, 0xa3, 0x2a, 0x67, 0xbc, 0x21, 0x21, 0x5e, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x51,
+	0x82, 0x16, 0x94, 0x66, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign.pb.go b/googleapis/ads/googleads/v0/resources/campaign.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..fe1dc851d40954b088381a066c07bf24db976a9c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign.pb.go
@@ -0,0 +1,1039 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A campaign.
+type Campaign struct {
+	// The resource name of the campaign.
+	// Campaign resource names have the form:
+	//
+	// `customers/{customer_id}/campaigns/{campaign_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the campaign.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the campaign.
+	//
+	// This field is required and should not be empty when creating new
+	// campaigns.
+	//
+	// It must not contain any null (code point 0x0), NL line feed
+	// (code point 0xA) or carriage return (code point 0xD) characters.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of the campaign.
+	//
+	// When a new campaign is added, the status defaults to ENABLED.
+	Status enums.CampaignStatusEnum_CampaignStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.CampaignStatusEnum_CampaignStatus" json:"status,omitempty"`
+	// The ad serving status of the campaign.
+	ServingStatus enums.CampaignServingStatusEnum_CampaignServingStatus `protobuf:"varint,21,opt,name=serving_status,json=servingStatus,proto3,enum=google.ads.googleads.v0.enums.CampaignServingStatusEnum_CampaignServingStatus" json:"serving_status,omitempty"`
+	// The ad serving optimization status of the campaign.
+	AdServingOptimizationStatus enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus `protobuf:"varint,8,opt,name=ad_serving_optimization_status,json=adServingOptimizationStatus,proto3,enum=google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus" json:"ad_serving_optimization_status,omitempty"`
+	// The primary serving target for ads within the campaign.
+	// The targeting options can be refined in `network_settings`.
+	//
+	// This field is required and should not be empty when creating new
+	// campaigns.
+	//
+	// Can be set only when creating campaigns.
+	// After the campaign is created, the field can not be changed.
+	AdvertisingChannelType enums.AdvertisingChannelTypeEnum_AdvertisingChannelType `protobuf:"varint,9,opt,name=advertising_channel_type,json=advertisingChannelType,proto3,enum=google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum_AdvertisingChannelType" json:"advertising_channel_type,omitempty"`
+	// Optional refinement to `advertising_channel_type`.
+	// Must be a valid sub-type of the parent channel type.
+	//
+	// Can be set only when creating campaigns.
+	// After campaign is created, the field can not be changed.
+	AdvertisingChannelSubType enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType `protobuf:"varint,10,opt,name=advertising_channel_sub_type,json=advertisingChannelSubType,proto3,enum=google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType" json:"advertising_channel_sub_type,omitempty"`
+	// The URL template for constructing a tracking URL.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,11,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,12,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// Settings for Real-Time Bidding, a feature only available for campaigns
+	// targeting the Ad Exchange network.
+	RealTimeBiddingSetting *common.RealTimeBiddingSetting `protobuf:"bytes,39,opt,name=real_time_bidding_setting,json=realTimeBiddingSetting,proto3" json:"real_time_bidding_setting,omitempty"`
+	// The network settings for the campaign.
+	NetworkSettings *Campaign_NetworkSettings `protobuf:"bytes,14,opt,name=network_settings,json=networkSettings,proto3" json:"network_settings,omitempty"`
+	// The hotel setting for the campaign.
+	HotelSetting *Campaign_HotelSettingInfo `protobuf:"bytes,32,opt,name=hotel_setting,json=hotelSetting,proto3" json:"hotel_setting,omitempty"`
+	// The setting for controlling Dynamic Search Ads (DSA).
+	DynamicSearchAdsSetting *Campaign_DynamicSearchAdsSetting `protobuf:"bytes,33,opt,name=dynamic_search_ads_setting,json=dynamicSearchAdsSetting,proto3" json:"dynamic_search_ads_setting,omitempty"`
+	// The setting for controlling Shopping campaigns.
+	ShoppingSetting *Campaign_ShoppingSetting `protobuf:"bytes,36,opt,name=shopping_setting,json=shoppingSetting,proto3" json:"shopping_setting,omitempty"`
+	// The budget of the campaign.
+	CampaignBudget *wrappers.StringValue `protobuf:"bytes,6,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
+	// The type of bidding strategy.
+	//
+	// A bidding strategy can be created by setting either the bidding scheme to
+	// create a standard bidding strategy or the `bidding_strategy` field to
+	// create a portfolio bidding strategy.
+	//
+	// This field is read-only.
+	BiddingStrategyType enums.BiddingStrategyTypeEnum_BiddingStrategyType `protobuf:"varint,22,opt,name=bidding_strategy_type,json=biddingStrategyType,proto3,enum=google.ads.googleads.v0.enums.BiddingStrategyTypeEnum_BiddingStrategyType" json:"bidding_strategy_type,omitempty"`
+	// The date when campaign started.
+	//
+	// This field must not be used in WHERE clauses.
+	StartDate *wrappers.StringValue `protobuf:"bytes,19,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// The campaign group this campaign belongs to.
+	CampaignGroup *wrappers.StringValue `protobuf:"bytes,35,opt,name=campaign_group,json=campaignGroup,proto3" json:"campaign_group,omitempty"`
+	// The date when campaign ended.
+	//
+	// This field must not be used in WHERE clauses.
+	EndDate *wrappers.StringValue `protobuf:"bytes,20,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	// Suffix used to append query parameters to landing pages that are served
+	// with parallel tracking.
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,38,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// A list that limits how often each user will see this campaign's ads.
+	FrequencyCaps []*common.FrequencyCapEntry `protobuf:"bytes,40,rep,name=frequency_caps,json=frequencyCaps,proto3" json:"frequency_caps,omitempty"`
+	// The bidding strategy for the campaign.
+	//
+	// Must be either portfolio (created via BiddingStrategy service) or
+	// standard, that is embedded into the campaign.
+	//
+	// Types that are valid to be assigned to CampaignBiddingStrategy:
+	//	*Campaign_BiddingStrategy
+	//	*Campaign_ManualCpc
+	//	*Campaign_ManualCpm
+	//	*Campaign_ManualCpv
+	//	*Campaign_MaximizeConversions
+	//	*Campaign_MaximizeConversionValue
+	//	*Campaign_TargetCpa
+	//	*Campaign_TargetRoas
+	//	*Campaign_TargetSpend
+	//	*Campaign_PercentCpc
+	CampaignBiddingStrategy isCampaign_CampaignBiddingStrategy `protobuf_oneof:"campaign_bidding_strategy"`
+	XXX_NoUnkeyedLiteral    struct{}                           `json:"-"`
+	XXX_unrecognized        []byte                             `json:"-"`
+	XXX_sizecache           int32                              `json:"-"`
+}
+
+func (m *Campaign) Reset()         { *m = Campaign{} }
+func (m *Campaign) String() string { return proto.CompactTextString(m) }
+func (*Campaign) ProtoMessage()    {}
+func (*Campaign) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_153eb7de4e2bcd72, []int{0}
+}
+func (m *Campaign) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign.Unmarshal(m, b)
+}
+func (m *Campaign) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign.Marshal(b, m, deterministic)
+}
+func (dst *Campaign) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign.Merge(dst, src)
+}
+func (m *Campaign) XXX_Size() int {
+	return xxx_messageInfo_Campaign.Size(m)
+}
+func (m *Campaign) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign proto.InternalMessageInfo
+
+func (m *Campaign) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Campaign) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Campaign) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *Campaign) GetStatus() enums.CampaignStatusEnum_CampaignStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignStatusEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetServingStatus() enums.CampaignServingStatusEnum_CampaignServingStatus {
+	if m != nil {
+		return m.ServingStatus
+	}
+	return enums.CampaignServingStatusEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetAdServingOptimizationStatus() enums.AdServingOptimizationStatusEnum_AdServingOptimizationStatus {
+	if m != nil {
+		return m.AdServingOptimizationStatus
+	}
+	return enums.AdServingOptimizationStatusEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetAdvertisingChannelType() enums.AdvertisingChannelTypeEnum_AdvertisingChannelType {
+	if m != nil {
+		return m.AdvertisingChannelType
+	}
+	return enums.AdvertisingChannelTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetAdvertisingChannelSubType() enums.AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType {
+	if m != nil {
+		return m.AdvertisingChannelSubType
+	}
+	return enums.AdvertisingChannelSubTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *Campaign) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *Campaign) GetRealTimeBiddingSetting() *common.RealTimeBiddingSetting {
+	if m != nil {
+		return m.RealTimeBiddingSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetNetworkSettings() *Campaign_NetworkSettings {
+	if m != nil {
+		return m.NetworkSettings
+	}
+	return nil
+}
+
+func (m *Campaign) GetHotelSetting() *Campaign_HotelSettingInfo {
+	if m != nil {
+		return m.HotelSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetDynamicSearchAdsSetting() *Campaign_DynamicSearchAdsSetting {
+	if m != nil {
+		return m.DynamicSearchAdsSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetShoppingSetting() *Campaign_ShoppingSetting {
+	if m != nil {
+		return m.ShoppingSetting
+	}
+	return nil
+}
+
+func (m *Campaign) GetCampaignBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignBudget
+	}
+	return nil
+}
+
+func (m *Campaign) GetBiddingStrategyType() enums.BiddingStrategyTypeEnum_BiddingStrategyType {
+	if m != nil {
+		return m.BiddingStrategyType
+	}
+	return enums.BiddingStrategyTypeEnum_UNSPECIFIED
+}
+
+func (m *Campaign) GetStartDate() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *Campaign) GetCampaignGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignGroup
+	}
+	return nil
+}
+
+func (m *Campaign) GetEndDate() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+func (m *Campaign) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *Campaign) GetFrequencyCaps() []*common.FrequencyCapEntry {
+	if m != nil {
+		return m.FrequencyCaps
+	}
+	return nil
+}
+
+type isCampaign_CampaignBiddingStrategy interface {
+	isCampaign_CampaignBiddingStrategy()
+}
+
+type Campaign_BiddingStrategy struct {
+	BiddingStrategy *wrappers.StringValue `protobuf:"bytes,23,opt,name=bidding_strategy,json=biddingStrategy,proto3,oneof"`
+}
+
+type Campaign_ManualCpc struct {
+	ManualCpc *common.ManualCpc `protobuf:"bytes,24,opt,name=manual_cpc,json=manualCpc,proto3,oneof"`
+}
+
+type Campaign_ManualCpm struct {
+	ManualCpm *common.ManualCpm `protobuf:"bytes,25,opt,name=manual_cpm,json=manualCpm,proto3,oneof"`
+}
+
+type Campaign_ManualCpv struct {
+	ManualCpv *common.ManualCpv `protobuf:"bytes,37,opt,name=manual_cpv,json=manualCpv,proto3,oneof"`
+}
+
+type Campaign_MaximizeConversions struct {
+	MaximizeConversions *common.MaximizeConversions `protobuf:"bytes,30,opt,name=maximize_conversions,json=maximizeConversions,proto3,oneof"`
+}
+
+type Campaign_MaximizeConversionValue struct {
+	MaximizeConversionValue *common.MaximizeConversionValue `protobuf:"bytes,31,opt,name=maximize_conversion_value,json=maximizeConversionValue,proto3,oneof"`
+}
+
+type Campaign_TargetCpa struct {
+	TargetCpa *common.TargetCpa `protobuf:"bytes,26,opt,name=target_cpa,json=targetCpa,proto3,oneof"`
+}
+
+type Campaign_TargetRoas struct {
+	TargetRoas *common.TargetRoas `protobuf:"bytes,29,opt,name=target_roas,json=targetRoas,proto3,oneof"`
+}
+
+type Campaign_TargetSpend struct {
+	TargetSpend *common.TargetSpend `protobuf:"bytes,27,opt,name=target_spend,json=targetSpend,proto3,oneof"`
+}
+
+type Campaign_PercentCpc struct {
+	PercentCpc *common.PercentCpc `protobuf:"bytes,34,opt,name=percent_cpc,json=percentCpc,proto3,oneof"`
+}
+
+func (*Campaign_BiddingStrategy) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_ManualCpc) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_ManualCpm) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_ManualCpv) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_MaximizeConversions) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_MaximizeConversionValue) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetCpa) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetRoas) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_TargetSpend) isCampaign_CampaignBiddingStrategy() {}
+
+func (*Campaign_PercentCpc) isCampaign_CampaignBiddingStrategy() {}
+
+func (m *Campaign) GetCampaignBiddingStrategy() isCampaign_CampaignBiddingStrategy {
+	if m != nil {
+		return m.CampaignBiddingStrategy
+	}
+	return nil
+}
+
+func (m *Campaign) GetBiddingStrategy() *wrappers.StringValue {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_BiddingStrategy); ok {
+		return x.BiddingStrategy
+	}
+	return nil
+}
+
+func (m *Campaign) GetManualCpc() *common.ManualCpc {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_ManualCpc); ok {
+		return x.ManualCpc
+	}
+	return nil
+}
+
+func (m *Campaign) GetManualCpm() *common.ManualCpm {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_ManualCpm); ok {
+		return x.ManualCpm
+	}
+	return nil
+}
+
+func (m *Campaign) GetManualCpv() *common.ManualCpv {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_ManualCpv); ok {
+		return x.ManualCpv
+	}
+	return nil
+}
+
+func (m *Campaign) GetMaximizeConversions() *common.MaximizeConversions {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_MaximizeConversions); ok {
+		return x.MaximizeConversions
+	}
+	return nil
+}
+
+func (m *Campaign) GetMaximizeConversionValue() *common.MaximizeConversionValue {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_MaximizeConversionValue); ok {
+		return x.MaximizeConversionValue
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetCpa() *common.TargetCpa {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetCpa); ok {
+		return x.TargetCpa
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetRoas() *common.TargetRoas {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetRoas); ok {
+		return x.TargetRoas
+	}
+	return nil
+}
+
+func (m *Campaign) GetTargetSpend() *common.TargetSpend {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_TargetSpend); ok {
+		return x.TargetSpend
+	}
+	return nil
+}
+
+func (m *Campaign) GetPercentCpc() *common.PercentCpc {
+	if x, ok := m.GetCampaignBiddingStrategy().(*Campaign_PercentCpc); ok {
+		return x.PercentCpc
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Campaign) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Campaign_OneofMarshaler, _Campaign_OneofUnmarshaler, _Campaign_OneofSizer, []interface{}{
+		(*Campaign_BiddingStrategy)(nil),
+		(*Campaign_ManualCpc)(nil),
+		(*Campaign_ManualCpm)(nil),
+		(*Campaign_ManualCpv)(nil),
+		(*Campaign_MaximizeConversions)(nil),
+		(*Campaign_MaximizeConversionValue)(nil),
+		(*Campaign_TargetCpa)(nil),
+		(*Campaign_TargetRoas)(nil),
+		(*Campaign_TargetSpend)(nil),
+		(*Campaign_PercentCpc)(nil),
+	}
+}
+
+func _Campaign_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Campaign)
+	// campaign_bidding_strategy
+	switch x := m.CampaignBiddingStrategy.(type) {
+	case *Campaign_BiddingStrategy:
+		b.EncodeVarint(23<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.BiddingStrategy); err != nil {
+			return err
+		}
+	case *Campaign_ManualCpc:
+		b.EncodeVarint(24<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ManualCpc); err != nil {
+			return err
+		}
+	case *Campaign_ManualCpm:
+		b.EncodeVarint(25<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ManualCpm); err != nil {
+			return err
+		}
+	case *Campaign_ManualCpv:
+		b.EncodeVarint(37<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ManualCpv); err != nil {
+			return err
+		}
+	case *Campaign_MaximizeConversions:
+		b.EncodeVarint(30<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MaximizeConversions); err != nil {
+			return err
+		}
+	case *Campaign_MaximizeConversionValue:
+		b.EncodeVarint(31<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MaximizeConversionValue); err != nil {
+			return err
+		}
+	case *Campaign_TargetCpa:
+		b.EncodeVarint(26<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetCpa); err != nil {
+			return err
+		}
+	case *Campaign_TargetRoas:
+		b.EncodeVarint(29<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetRoas); err != nil {
+			return err
+		}
+	case *Campaign_TargetSpend:
+		b.EncodeVarint(27<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetSpend); err != nil {
+			return err
+		}
+	case *Campaign_PercentCpc:
+		b.EncodeVarint(34<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PercentCpc); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Campaign.CampaignBiddingStrategy has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Campaign_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Campaign)
+	switch tag {
+	case 23: // campaign_bidding_strategy.bidding_strategy
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(wrappers.StringValue)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_BiddingStrategy{msg}
+		return true, err
+	case 24: // campaign_bidding_strategy.manual_cpc
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ManualCpc)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_ManualCpc{msg}
+		return true, err
+	case 25: // campaign_bidding_strategy.manual_cpm
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ManualCpm)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_ManualCpm{msg}
+		return true, err
+	case 37: // campaign_bidding_strategy.manual_cpv
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ManualCpv)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_ManualCpv{msg}
+		return true, err
+	case 30: // campaign_bidding_strategy.maximize_conversions
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.MaximizeConversions)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_MaximizeConversions{msg}
+		return true, err
+	case 31: // campaign_bidding_strategy.maximize_conversion_value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.MaximizeConversionValue)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_MaximizeConversionValue{msg}
+		return true, err
+	case 26: // campaign_bidding_strategy.target_cpa
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TargetCpa)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_TargetCpa{msg}
+		return true, err
+	case 29: // campaign_bidding_strategy.target_roas
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TargetRoas)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_TargetRoas{msg}
+		return true, err
+	case 27: // campaign_bidding_strategy.target_spend
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TargetSpend)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_TargetSpend{msg}
+		return true, err
+	case 34: // campaign_bidding_strategy.percent_cpc
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.PercentCpc)
+		err := b.DecodeMessage(msg)
+		m.CampaignBiddingStrategy = &Campaign_PercentCpc{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Campaign_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Campaign)
+	// campaign_bidding_strategy
+	switch x := m.CampaignBiddingStrategy.(type) {
+	case *Campaign_BiddingStrategy:
+		s := proto.Size(x.BiddingStrategy)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_ManualCpc:
+		s := proto.Size(x.ManualCpc)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_ManualCpm:
+		s := proto.Size(x.ManualCpm)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_ManualCpv:
+		s := proto.Size(x.ManualCpv)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_MaximizeConversions:
+		s := proto.Size(x.MaximizeConversions)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_MaximizeConversionValue:
+		s := proto.Size(x.MaximizeConversionValue)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_TargetCpa:
+		s := proto.Size(x.TargetCpa)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_TargetRoas:
+		s := proto.Size(x.TargetRoas)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_TargetSpend:
+		s := proto.Size(x.TargetSpend)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Campaign_PercentCpc:
+		s := proto.Size(x.PercentCpc)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// The network settings for the campaign.
+type Campaign_NetworkSettings struct {
+	// Whether ads will be served with google.com search results.
+	TargetGoogleSearch *wrappers.BoolValue `protobuf:"bytes,1,opt,name=target_google_search,json=targetGoogleSearch,proto3" json:"target_google_search,omitempty"`
+	// Whether ads will be served on partner sites in the Google Search Network
+	// (requires `target_google_search` to also be `true`).
+	TargetSearchNetwork *wrappers.BoolValue `protobuf:"bytes,2,opt,name=target_search_network,json=targetSearchNetwork,proto3" json:"target_search_network,omitempty"`
+	// Whether ads will be served on specified placements in the Google Display
+	// Network. Placements are specified using the Placement criterion.
+	TargetContentNetwork *wrappers.BoolValue `protobuf:"bytes,3,opt,name=target_content_network,json=targetContentNetwork,proto3" json:"target_content_network,omitempty"`
+	// Whether ads will be served on the Google Partner Network.
+	// This is available only to some select Google partner accounts.
+	TargetPartnerSearchNetwork *wrappers.BoolValue `protobuf:"bytes,4,opt,name=target_partner_search_network,json=targetPartnerSearchNetwork,proto3" json:"target_partner_search_network,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}            `json:"-"`
+	XXX_unrecognized           []byte              `json:"-"`
+	XXX_sizecache              int32               `json:"-"`
+}
+
+func (m *Campaign_NetworkSettings) Reset()         { *m = Campaign_NetworkSettings{} }
+func (m *Campaign_NetworkSettings) String() string { return proto.CompactTextString(m) }
+func (*Campaign_NetworkSettings) ProtoMessage()    {}
+func (*Campaign_NetworkSettings) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_153eb7de4e2bcd72, []int{0, 0}
+}
+func (m *Campaign_NetworkSettings) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_NetworkSettings.Unmarshal(m, b)
+}
+func (m *Campaign_NetworkSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_NetworkSettings.Marshal(b, m, deterministic)
+}
+func (dst *Campaign_NetworkSettings) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_NetworkSettings.Merge(dst, src)
+}
+func (m *Campaign_NetworkSettings) XXX_Size() int {
+	return xxx_messageInfo_Campaign_NetworkSettings.Size(m)
+}
+func (m *Campaign_NetworkSettings) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_NetworkSettings.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_NetworkSettings proto.InternalMessageInfo
+
+func (m *Campaign_NetworkSettings) GetTargetGoogleSearch() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetGoogleSearch
+	}
+	return nil
+}
+
+func (m *Campaign_NetworkSettings) GetTargetSearchNetwork() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetSearchNetwork
+	}
+	return nil
+}
+
+func (m *Campaign_NetworkSettings) GetTargetContentNetwork() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetContentNetwork
+	}
+	return nil
+}
+
+func (m *Campaign_NetworkSettings) GetTargetPartnerSearchNetwork() *wrappers.BoolValue {
+	if m != nil {
+		return m.TargetPartnerSearchNetwork
+	}
+	return nil
+}
+
+// Campaign-level settings for hotel ads.
+type Campaign_HotelSettingInfo struct {
+	// The linked Hotel Center account.
+	HotelCenterId        *wrappers.Int64Value `protobuf:"bytes,1,opt,name=hotel_center_id,json=hotelCenterId,proto3" json:"hotel_center_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Campaign_HotelSettingInfo) Reset()         { *m = Campaign_HotelSettingInfo{} }
+func (m *Campaign_HotelSettingInfo) String() string { return proto.CompactTextString(m) }
+func (*Campaign_HotelSettingInfo) ProtoMessage()    {}
+func (*Campaign_HotelSettingInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_153eb7de4e2bcd72, []int{0, 1}
+}
+func (m *Campaign_HotelSettingInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_HotelSettingInfo.Unmarshal(m, b)
+}
+func (m *Campaign_HotelSettingInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_HotelSettingInfo.Marshal(b, m, deterministic)
+}
+func (dst *Campaign_HotelSettingInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_HotelSettingInfo.Merge(dst, src)
+}
+func (m *Campaign_HotelSettingInfo) XXX_Size() int {
+	return xxx_messageInfo_Campaign_HotelSettingInfo.Size(m)
+}
+func (m *Campaign_HotelSettingInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_HotelSettingInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_HotelSettingInfo proto.InternalMessageInfo
+
+func (m *Campaign_HotelSettingInfo) GetHotelCenterId() *wrappers.Int64Value {
+	if m != nil {
+		return m.HotelCenterId
+	}
+	return nil
+}
+
+// The setting for controlling Dynamic Search Ads (DSA).
+type Campaign_DynamicSearchAdsSetting struct {
+	// The Internet domain name that this setting represents, e.g., "google.com"
+	// or "www.google.com".
+	DomainName *wrappers.StringValue `protobuf:"bytes,1,opt,name=domain_name,json=domainName,proto3" json:"domain_name,omitempty"`
+	// The language code specifying the language of the domain, e.g., "en".
+	LanguageCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	// Whether the campaign uses advertiser supplied URLs exclusively.
+	UseSuppliedUrlsOnly *wrappers.BoolValue `protobuf:"bytes,3,opt,name=use_supplied_urls_only,json=useSuppliedUrlsOnly,proto3" json:"use_supplied_urls_only,omitempty"`
+	// The list of page feeds associated with the campaign.
+	FeedIds              []*wrappers.Int64Value `protobuf:"bytes,4,rep,name=feed_ids,json=feedIds,proto3" json:"feed_ids,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) Reset()         { *m = Campaign_DynamicSearchAdsSetting{} }
+func (m *Campaign_DynamicSearchAdsSetting) String() string { return proto.CompactTextString(m) }
+func (*Campaign_DynamicSearchAdsSetting) ProtoMessage()    {}
+func (*Campaign_DynamicSearchAdsSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_153eb7de4e2bcd72, []int{0, 2}
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Unmarshal(m, b)
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Marshal(b, m, deterministic)
+}
+func (dst *Campaign_DynamicSearchAdsSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Merge(dst, src)
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_Size() int {
+	return xxx_messageInfo_Campaign_DynamicSearchAdsSetting.Size(m)
+}
+func (m *Campaign_DynamicSearchAdsSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_DynamicSearchAdsSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_DynamicSearchAdsSetting proto.InternalMessageInfo
+
+func (m *Campaign_DynamicSearchAdsSetting) GetDomainName() *wrappers.StringValue {
+	if m != nil {
+		return m.DomainName
+	}
+	return nil
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) GetLanguageCode() *wrappers.StringValue {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return nil
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) GetUseSuppliedUrlsOnly() *wrappers.BoolValue {
+	if m != nil {
+		return m.UseSuppliedUrlsOnly
+	}
+	return nil
+}
+
+func (m *Campaign_DynamicSearchAdsSetting) GetFeedIds() []*wrappers.Int64Value {
+	if m != nil {
+		return m.FeedIds
+	}
+	return nil
+}
+
+// The setting for Shopping campaigns. Defines the universe of products that
+// can be advertised by the campaign, and how this campaign interacts with
+// other Shopping campaigns.
+type Campaign_ShoppingSetting struct {
+	// ID of the Merchant Center account.
+	// This field is required for create operations. This field is immutable for
+	// Shopping campaigns.
+	MerchantId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	// Sales country of products to include in the campaign.
+	// This field is required for Shopping campaigns. This field is immutable.
+	// This field is optional for non-Shopping campaigns, but it must be equal
+	// to 'ZZ' if set.
+	SalesCountry *wrappers.StringValue `protobuf:"bytes,2,opt,name=sales_country,json=salesCountry,proto3" json:"sales_country,omitempty"`
+	// Priority of the campaign. Campaigns with numerically higher priorities
+	// take precedence over those with lower priorities.
+	// This field is required for Shopping campaigns, with values between 0 and
+	// 2, inclusive.
+	// This field is optional for Smart Shopping campaigns, but must be equal to
+	// 3 if set.
+	CampaignPriority *wrappers.Int32Value `protobuf:"bytes,3,opt,name=campaign_priority,json=campaignPriority,proto3" json:"campaign_priority,omitempty"`
+	// Enable local inventory ads. This field is ignored for Smart Shopping
+	// campaigns.
+	EnableLocal          *wrappers.BoolValue `protobuf:"bytes,4,opt,name=enable_local,json=enableLocal,proto3" json:"enable_local,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *Campaign_ShoppingSetting) Reset()         { *m = Campaign_ShoppingSetting{} }
+func (m *Campaign_ShoppingSetting) String() string { return proto.CompactTextString(m) }
+func (*Campaign_ShoppingSetting) ProtoMessage()    {}
+func (*Campaign_ShoppingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_153eb7de4e2bcd72, []int{0, 3}
+}
+func (m *Campaign_ShoppingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Campaign_ShoppingSetting.Unmarshal(m, b)
+}
+func (m *Campaign_ShoppingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Campaign_ShoppingSetting.Marshal(b, m, deterministic)
+}
+func (dst *Campaign_ShoppingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Campaign_ShoppingSetting.Merge(dst, src)
+}
+func (m *Campaign_ShoppingSetting) XXX_Size() int {
+	return xxx_messageInfo_Campaign_ShoppingSetting.Size(m)
+}
+func (m *Campaign_ShoppingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_Campaign_ShoppingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Campaign_ShoppingSetting proto.InternalMessageInfo
+
+func (m *Campaign_ShoppingSetting) GetMerchantId() *wrappers.Int64Value {
+	if m != nil {
+		return m.MerchantId
+	}
+	return nil
+}
+
+func (m *Campaign_ShoppingSetting) GetSalesCountry() *wrappers.StringValue {
+	if m != nil {
+		return m.SalesCountry
+	}
+	return nil
+}
+
+func (m *Campaign_ShoppingSetting) GetCampaignPriority() *wrappers.Int32Value {
+	if m != nil {
+		return m.CampaignPriority
+	}
+	return nil
+}
+
+func (m *Campaign_ShoppingSetting) GetEnableLocal() *wrappers.BoolValue {
+	if m != nil {
+		return m.EnableLocal
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Campaign)(nil), "google.ads.googleads.v0.resources.Campaign")
+	proto.RegisterType((*Campaign_NetworkSettings)(nil), "google.ads.googleads.v0.resources.Campaign.NetworkSettings")
+	proto.RegisterType((*Campaign_HotelSettingInfo)(nil), "google.ads.googleads.v0.resources.Campaign.HotelSettingInfo")
+	proto.RegisterType((*Campaign_DynamicSearchAdsSetting)(nil), "google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting")
+	proto.RegisterType((*Campaign_ShoppingSetting)(nil), "google.ads.googleads.v0.resources.Campaign.ShoppingSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign.proto", fileDescriptor_campaign_153eb7de4e2bcd72)
+}
+
+var fileDescriptor_campaign_153eb7de4e2bcd72 = []byte{
+	// 1511 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0x5d, 0x6f, 0xdb, 0x36,
+	0x17, 0xc7, 0x63, 0x27, 0x4f, 0x9b, 0xd0, 0x79, 0x7b, 0x98, 0x26, 0x51, 0x9c, 0xbe, 0xa4, 0xed,
+	0xd3, 0x67, 0xd9, 0x3a, 0xc8, 0x59, 0xb2, 0xb5, 0x18, 0xd2, 0x0e, 0x4d, 0xdc, 0x97, 0xa4, 0x68,
+	0x53, 0x43, 0x4e, 0xb3, 0xa2, 0xc8, 0x20, 0xd0, 0x12, 0xed, 0x08, 0x95, 0x48, 0x95, 0xa4, 0xdc,
+	0x7a, 0x17, 0xc3, 0xae, 0xf7, 0x01, 0xb6, 0x8b, 0x5d, 0x0c, 0x18, 0x76, 0xb5, 0x8f, 0xb2, 0xcb,
+	0x7d, 0x82, 0x7d, 0x94, 0x41, 0x24, 0xa5, 0xd8, 0x8e, 0x6d, 0xc9, 0x77, 0x22, 0x79, 0x7e, 0xff,
+	0x73, 0x78, 0xf8, 0x72, 0x68, 0x83, 0xad, 0x16, 0xa5, 0x2d, 0x1f, 0x57, 0x90, 0xcb, 0x2b, 0xea,
+	0x33, 0xfe, 0x6a, 0x6f, 0x55, 0x18, 0xe6, 0x34, 0x62, 0x0e, 0xe6, 0x15, 0x07, 0x05, 0x21, 0xf2,
+	0x5a, 0xc4, 0x0c, 0x19, 0x15, 0x14, 0xde, 0x54, 0x66, 0x26, 0x72, 0xb9, 0x99, 0x12, 0x66, 0x7b,
+	0xcb, 0x4c, 0x89, 0xf2, 0xe7, 0xc3, 0x44, 0x1d, 0x1a, 0x04, 0x94, 0x54, 0x1a, 0x9e, 0xeb, 0x7a,
+	0xa4, 0xa5, 0x04, 0xcb, 0x5f, 0x65, 0x58, 0x3b, 0x11, 0x17, 0x34, 0xb0, 0x43, 0xc4, 0x50, 0x80,
+	0x05, 0x66, 0x1a, 0xdb, 0xce, 0xc0, 0x9a, 0x0c, 0xbf, 0x8f, 0x30, 0x71, 0x3a, 0xb6, 0x83, 0x42,
+	0xcd, 0x7c, 0x93, 0xc1, 0x30, 0x8c, 0x7c, 0x5b, 0x78, 0x01, 0xb6, 0x75, 0x88, 0x36, 0xc7, 0x42,
+	0x9c, 0x87, 0xba, 0x3f, 0x8c, 0xc7, 0x24, 0x0a, 0x78, 0x05, 0xb9, 0x36, 0xc7, 0xac, 0x1d, 0x73,
+	0x34, 0x14, 0x5e, 0xe0, 0x7d, 0x8f, 0x84, 0x47, 0x89, 0xcd, 0x05, 0x12, 0x11, 0xd7, 0x1a, 0x8f,
+	0xb2, 0x34, 0xda, 0x98, 0x09, 0x8f, 0xc7, 0x22, 0xce, 0x19, 0x22, 0x04, 0xfb, 0x36, 0x8f, 0x1a,
+	0xb6, 0xe8, 0x84, 0x58, 0x2b, 0x3c, 0x18, 0x5f, 0xa1, 0x8b, 0xfe, 0x7a, 0x34, 0x9d, 0x4e, 0x5c,
+	0x30, 0x24, 0x70, 0xab, 0xd3, 0x8d, 0xee, 0x8e, 0x46, 0x93, 0x8d, 0x92, 0x26, 0xa1, 0x67, 0xde,
+	0x3b, 0x79, 0xe1, 0x6e, 0xe8, 0xba, 0x86, 0x64, 0xab, 0x11, 0x35, 0x2b, 0x1f, 0x18, 0x0a, 0x43,
+	0xcc, 0xf4, 0xf8, 0xad, 0x9f, 0x6f, 0x80, 0xe9, 0xaa, 0x26, 0xe1, 0x6d, 0x30, 0x97, 0xec, 0x41,
+	0x9b, 0xa0, 0x00, 0x1b, 0x85, 0x8d, 0xc2, 0xe6, 0x8c, 0x35, 0x9b, 0x74, 0x1e, 0xa1, 0x00, 0xc3,
+	0xbb, 0xa0, 0xe8, 0xb9, 0xc6, 0xe4, 0x46, 0x61, 0xb3, 0xb4, 0xbd, 0xae, 0x37, 0xb0, 0x99, 0xc8,
+	0x9b, 0x87, 0x44, 0xdc, 0xfb, 0xf2, 0x04, 0xf9, 0x11, 0xb6, 0x8a, 0x9e, 0x0b, 0xb7, 0xc0, 0x94,
+	0x14, 0x9a, 0x92, 0xe6, 0x57, 0x2f, 0x98, 0xd7, 0x05, 0xf3, 0x48, 0x4b, 0xd9, 0x4b, 0x4b, 0xf8,
+	0x06, 0x5c, 0x52, 0x13, 0x30, 0xfe, 0xb3, 0x51, 0xd8, 0x9c, 0xdf, 0x7e, 0x64, 0x0e, 0x3b, 0x2e,
+	0x72, 0xda, 0x66, 0x12, 0x7c, 0x5d, 0x42, 0x4f, 0x48, 0x14, 0xf4, 0x75, 0x59, 0x5a, 0x0f, 0x46,
+	0x60, 0xbe, 0x37, 0xaf, 0xc6, 0xb2, 0xf4, 0x70, 0x94, 0xd7, 0x83, 0x82, 0x07, 0x39, 0xea, 0x1e,
+	0xb1, 0xe6, 0x78, 0x77, 0x13, 0xfe, 0x56, 0x00, 0xd7, 0x47, 0xef, 0x6b, 0x63, 0x5a, 0xc6, 0xf1,
+	0x36, 0x23, 0x8e, 0x3d, 0x57, 0xfb, 0x79, 0xd5, 0x25, 0xd1, 0x15, 0xcd, 0x88, 0x71, 0x6b, 0x1d,
+	0x0d, 0x1f, 0x84, 0x3f, 0x15, 0x80, 0x31, 0x6c, 0xcf, 0x1b, 0x33, 0x32, 0xb6, 0x5a, 0x66, 0x6c,
+	0x29, 0x5e, 0x55, 0xf4, 0x71, 0x27, 0xc4, 0x3a, 0xac, 0x41, 0x43, 0xd6, 0x0a, 0x1a, 0xd8, 0x0f,
+	0x7f, 0x29, 0x80, 0xab, 0xa3, 0x8e, 0xb0, 0x01, 0x64, 0x40, 0x27, 0x63, 0x07, 0x54, 0x8f, 0x1a,
+	0x23, 0x62, 0xd2, 0xa3, 0xd6, 0x1a, 0x1a, 0x36, 0x04, 0x6b, 0x60, 0x59, 0x30, 0xe4, 0xbc, 0x8b,
+	0xa3, 0x8a, 0x98, 0x6f, 0x0b, 0x1c, 0x84, 0x3e, 0x12, 0xd8, 0x28, 0xe5, 0xd8, 0xdc, 0x4b, 0x09,
+	0xfa, 0x9a, 0xf9, 0xc7, 0x1a, 0x84, 0x0e, 0x58, 0x8e, 0x85, 0xfa, 0xef, 0x67, 0x6e, 0xcc, 0x6e,
+	0x4c, 0x6e, 0x96, 0xb6, 0x2b, 0x43, 0xe7, 0xa8, 0x6e, 0x5b, 0xb3, 0x2a, 0xc1, 0x5a, 0xc2, 0x59,
+	0x4b, 0x11, 0xf3, 0xfb, 0xfa, 0x38, 0x7c, 0x0f, 0xd6, 0x86, 0xde, 0xca, 0xc6, 0x27, 0x32, 0xf4,
+	0x7b, 0x59, 0x8e, 0x2c, 0x8c, 0xfc, 0x63, 0x2f, 0xc0, 0xfb, 0x0a, 0xaf, 0x2b, 0xda, 0x5a, 0x61,
+	0x03, 0xfb, 0x61, 0x13, 0x2c, 0x12, 0x2c, 0x3e, 0x50, 0xf6, 0x2e, 0x71, 0xc4, 0x8d, 0x79, 0xe9,
+	0x69, 0xd7, 0xcc, 0x2c, 0x7e, 0xe9, 0xa9, 0x32, 0x8f, 0x94, 0x86, 0x56, 0xe5, 0xd6, 0x02, 0xe9,
+	0xed, 0x80, 0x08, 0xcc, 0x9d, 0x51, 0x11, 0x6f, 0x0e, 0x3d, 0x9d, 0x0d, 0xe9, 0xe4, 0xc1, 0x38,
+	0x4e, 0x0e, 0x62, 0x01, 0xad, 0x78, 0x48, 0x9a, 0xd4, 0x9a, 0x3d, 0xeb, 0xea, 0x81, 0x3f, 0x16,
+	0x40, 0xd9, 0xed, 0x10, 0x14, 0x78, 0x8e, 0xcd, 0x31, 0x62, 0xce, 0x99, 0x8d, 0x5c, 0x9e, 0x3a,
+	0xbc, 0x29, 0x1d, 0x56, 0xc7, 0x71, 0xf8, 0x58, 0xa9, 0xd5, 0xa5, 0xd8, 0x9e, 0xcb, 0x93, 0x64,
+	0xae, 0xba, 0x83, 0x07, 0xe2, 0x6c, 0xf2, 0x33, 0x1a, 0x86, 0xdd, 0xeb, 0xf6, 0xbf, 0xf1, 0xb3,
+	0x59, 0xd7, 0x1a, 0x89, 0xbf, 0x05, 0xde, 0xdb, 0x01, 0x9f, 0x80, 0x85, 0xb4, 0x86, 0x34, 0x22,
+	0xb7, 0x85, 0x85, 0x71, 0x29, 0xc7, 0xce, 0x9e, 0x4f, 0xa0, 0x7d, 0xc9, 0xc0, 0x1f, 0xc0, 0xf2,
+	0xc0, 0x12, 0x68, 0xac, 0xc8, 0x83, 0xfb, 0x3c, 0xe3, 0xe0, 0x26, 0x5b, 0x49, 0xa3, 0xe9, 0x91,
+	0x1d, 0xd0, 0x6f, 0x2d, 0x35, 0x2e, 0x76, 0xc2, 0x5d, 0x00, 0xb8, 0x40, 0x4c, 0xd8, 0x6e, 0x7c,
+	0x36, 0x97, 0x72, 0xcc, 0x60, 0x46, 0xda, 0x3f, 0x8e, 0x4f, 0x64, 0x15, 0xa4, 0xd3, 0xb1, 0x5b,
+	0x8c, 0x46, 0xa1, 0x71, 0x3b, 0x87, 0xc0, 0x5c, 0xc2, 0x3c, 0x8b, 0x11, 0x78, 0x1f, 0x4c, 0x63,
+	0xe2, 0x2a, 0xff, 0x57, 0x72, 0xe0, 0x97, 0x31, 0x71, 0xa5, 0xf7, 0xa7, 0x60, 0xb1, 0xe9, 0x11,
+	0xe4, 0xcb, 0xeb, 0x85, 0x47, 0xcd, 0xa6, 0xf7, 0xd1, 0xf8, 0x7f, 0x9e, 0x25, 0x90, 0xd4, 0x6b,
+	0xe6, 0xd7, 0x25, 0x03, 0xdf, 0x80, 0xf9, 0x9e, 0xc7, 0x1b, 0x37, 0x36, 0xe5, 0x85, 0xf2, 0x45,
+	0xd6, 0x39, 0x7f, 0x9a, 0x50, 0x55, 0x14, 0x3e, 0x21, 0x82, 0x75, 0xac, 0xb9, 0x66, 0x57, 0x17,
+	0x87, 0x87, 0x60, 0xb1, 0x7f, 0x71, 0x8d, 0xd5, 0xec, 0x08, 0x0f, 0x26, 0xac, 0x85, 0xbe, 0xb5,
+	0x82, 0xcf, 0x01, 0x08, 0x10, 0x89, 0x90, 0x6f, 0x3b, 0xa1, 0x63, 0x18, 0x52, 0xe4, 0xd3, 0xac,
+	0x00, 0x5f, 0x4a, 0xa2, 0x1a, 0x3a, 0x07, 0x13, 0xd6, 0x4c, 0x90, 0x34, 0x7a, 0xb4, 0x02, 0x63,
+	0x6d, 0x3c, 0xad, 0xa0, 0x5b, 0x2b, 0xe8, 0xd1, 0x6a, 0x1b, 0x77, 0xc6, 0xd3, 0x6a, 0x77, 0x6b,
+	0xb5, 0xe1, 0x19, 0xb8, 0x12, 0xa0, 0x8f, 0x71, 0xbd, 0xc5, 0xb6, 0x43, 0x49, 0x1b, 0x33, 0xee,
+	0x51, 0xc2, 0x8d, 0xeb, 0x52, 0x75, 0x27, 0x5b, 0x55, 0xb1, 0xd5, 0x73, 0xf4, 0x60, 0xc2, 0x5a,
+	0x0a, 0x2e, 0x76, 0xc3, 0x08, 0xac, 0x0d, 0xf0, 0x64, 0xb7, 0xe3, 0xec, 0x1b, 0x37, 0xa4, 0xbb,
+	0xfb, 0xe3, 0xbb, 0x4b, 0x16, 0x6f, 0x35, 0x18, 0x3c, 0x14, 0x27, 0x4b, 0x20, 0xd6, 0xc2, 0xc2,
+	0x76, 0x42, 0x64, 0x94, 0xf3, 0x25, 0xeb, 0x58, 0x12, 0xd5, 0x10, 0xc5, 0xc9, 0x12, 0x49, 0x03,
+	0xbe, 0x04, 0x25, 0xad, 0xc5, 0x28, 0xe2, 0xc6, 0x35, 0x29, 0xf6, 0x59, 0x3e, 0x31, 0x8b, 0xa2,
+	0x38, 0x35, 0x3a, 0x98, 0xb8, 0x05, 0x6b, 0x60, 0x56, 0xcb, 0xf1, 0x10, 0x13, 0xd7, 0x58, 0x97,
+	0x7a, 0x77, 0xf3, 0xe9, 0xd5, 0x63, 0xe4, 0x60, 0xc2, 0xd2, 0x11, 0xc9, 0x66, 0x1c, 0x60, 0x88,
+	0x99, 0x83, 0x89, 0x90, 0x5b, 0xf6, 0x56, 0xbe, 0x00, 0x6b, 0x0a, 0x51, 0x7b, 0x16, 0x84, 0x69,
+	0xab, 0xfc, 0x4f, 0x11, 0x2c, 0xf4, 0x95, 0x38, 0xf8, 0x02, 0x5c, 0xd1, 0x41, 0x2b, 0x29, 0x5d,
+	0x73, 0xe4, 0x43, 0xbc, 0xb4, 0x5d, 0xbe, 0x70, 0xc6, 0xf6, 0x29, 0xf5, 0xd5, 0x1d, 0x00, 0x15,
+	0xf7, 0x4c, 0x1a, 0xa8, 0x1a, 0x02, 0x8f, 0xc0, 0x72, 0x92, 0x02, 0x55, 0xba, 0x74, 0x01, 0x35,
+	0x8a, 0x99, 0x72, 0x4b, 0x7a, 0xe2, 0x92, 0xd3, 0x51, 0xc2, 0x1a, 0x58, 0x49, 0x56, 0x9b, 0x12,
+	0x11, 0xe7, 0x21, 0x11, 0x9c, 0xcc, 0x14, 0xd4, 0xf3, 0xaa, 0x2a, 0x30, 0x51, 0xfc, 0x0e, 0x5c,
+	0xd3, 0x8a, 0x21, 0x62, 0x82, 0x60, 0xd6, 0x1f, 0xe9, 0x54, 0xa6, 0x70, 0x59, 0x09, 0xd4, 0x14,
+	0xdf, 0x13, 0x70, 0xf9, 0x5b, 0xb0, 0xd8, 0x5f, 0xdf, 0x61, 0x15, 0x2c, 0xa8, 0x47, 0x43, 0xbc,
+	0x0e, 0x98, 0xd9, 0x9e, 0xab, 0xb3, 0x3b, 0xf2, 0xc7, 0x8c, 0x7a, 0x68, 0x54, 0x25, 0x72, 0xe8,
+	0x96, 0xff, 0x28, 0x82, 0xd5, 0x21, 0x85, 0x1c, 0x3e, 0x04, 0x25, 0x97, 0x06, 0xc8, 0x23, 0xe7,
+	0xbf, 0xa1, 0xb2, 0x2e, 0x70, 0xa0, 0x00, 0xf9, 0xfb, 0x6a, 0x0f, 0xcc, 0xf9, 0x88, 0xb4, 0x22,
+	0xd4, 0x8a, 0x4f, 0xb2, 0x8b, 0xf5, 0x62, 0x8d, 0x16, 0x98, 0x4d, 0x90, 0x2a, 0x75, 0x31, 0x7c,
+	0x05, 0x56, 0x22, 0x8e, 0x6d, 0x1e, 0x85, 0xa1, 0xef, 0x61, 0x37, 0x2e, 0x27, 0xdc, 0xa6, 0xc4,
+	0xef, 0xe4, 0x58, 0xa7, 0xa5, 0x88, 0xe3, 0xba, 0x06, 0x5f, 0x33, 0x9f, 0xbf, 0x22, 0x7e, 0x07,
+	0xde, 0x03, 0xd3, 0x4d, 0x8c, 0x5d, 0xdb, 0x73, 0xb9, 0x31, 0x25, 0x4b, 0xc9, 0xc8, 0x64, 0x5d,
+	0x8e, 0x8d, 0x0f, 0x5d, 0x5e, 0xfe, 0xb5, 0x08, 0x16, 0xfa, 0xde, 0x1d, 0xf0, 0x01, 0x28, 0x05,
+	0x98, 0xc5, 0xcf, 0x7a, 0x91, 0x33, 0xf7, 0x20, 0xb1, 0x3f, 0x74, 0xe3, 0xec, 0x70, 0xe4, 0x63,
+	0x6e, 0x3b, 0x34, 0x8a, 0x0b, 0x54, 0xbe, 0xec, 0x48, 0xa4, 0xaa, 0x08, 0x78, 0x00, 0xfe, 0x9b,
+	0xd6, 0xf8, 0x90, 0x79, 0x94, 0x79, 0xa2, 0x33, 0xea, 0xf7, 0xec, 0xce, 0xb6, 0x52, 0x59, 0x4c,
+	0xa8, 0x9a, 0x86, 0xe0, 0x43, 0x30, 0x8b, 0x09, 0x6a, 0xf8, 0xd8, 0xf6, 0xa9, 0x83, 0xfc, 0x1c,
+	0x9b, 0xb5, 0xa4, 0xec, 0x5f, 0xc4, 0xe6, 0xfb, 0xeb, 0x60, 0xed, 0xfc, 0xc1, 0xd5, 0x57, 0x55,
+	0xf7, 0xff, 0x2e, 0x80, 0x3b, 0x0e, 0x0d, 0xb2, 0x5f, 0x78, 0xfb, 0x73, 0xd5, 0x34, 0x2e, 0x2a,
+	0x68, 0xad, 0xf0, 0xf6, 0xb9, 0x66, 0x5a, 0x34, 0xde, 0x15, 0x26, 0x65, 0xad, 0x4a, 0x0b, 0x13,
+	0x19, 0x4d, 0xf2, 0xc7, 0x41, 0xe8, 0xf1, 0x11, 0xff, 0x58, 0xed, 0xa6, 0x5f, 0xbf, 0x17, 0x27,
+	0x9f, 0xed, 0xed, 0xfd, 0x59, 0xbc, 0xa9, 0xee, 0x15, 0x73, 0xcf, 0xe5, 0xa6, 0xfa, 0x8c, 0xbf,
+	0x4e, 0xb6, 0x4c, 0x2b, 0xb1, 0xfc, 0x2b, 0xb1, 0x39, 0xdd, 0x73, 0xf9, 0x69, 0x6a, 0x73, 0x7a,
+	0xb2, 0x75, 0x9a, 0xda, 0x34, 0x2e, 0xc9, 0x20, 0x76, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x40,
+	0x6d, 0xdb, 0x8e, 0x35, 0x13, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign_audience_view.pb.go b/googleapis/ads/googleads/v0/resources/campaign_audience_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0e5e052c8d82d73571bb4d66473caea9f86b3a3b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign_audience_view.pb.go
@@ -0,0 +1,94 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign_audience_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A campaign audience view.
+// Includes performance data from interests and remarketing lists for Display
+// Network and YouTube Network ads, and remarketing lists for search ads (RLSA),
+// aggregated by campaign and audience criterion. This view only includes
+// audiences attached at the campaign level.
+type CampaignAudienceView struct {
+	// The resource name of the campaign audience view.
+	// Campaign audience view resource names have the form:
+	//
+	//
+	// `customers/{customer_id}/campaignAudienceViews/{campaign_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CampaignAudienceView) Reset()         { *m = CampaignAudienceView{} }
+func (m *CampaignAudienceView) String() string { return proto.CompactTextString(m) }
+func (*CampaignAudienceView) ProtoMessage()    {}
+func (*CampaignAudienceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_audience_view_597e3d8f42495af1, []int{0}
+}
+func (m *CampaignAudienceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignAudienceView.Unmarshal(m, b)
+}
+func (m *CampaignAudienceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignAudienceView.Marshal(b, m, deterministic)
+}
+func (dst *CampaignAudienceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignAudienceView.Merge(dst, src)
+}
+func (m *CampaignAudienceView) XXX_Size() int {
+	return xxx_messageInfo_CampaignAudienceView.Size(m)
+}
+func (m *CampaignAudienceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignAudienceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignAudienceView proto.InternalMessageInfo
+
+func (m *CampaignAudienceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*CampaignAudienceView)(nil), "google.ads.googleads.v0.resources.CampaignAudienceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign_audience_view.proto", fileDescriptor_campaign_audience_view_597e3d8f42495af1)
+}
+
+var fileDescriptor_campaign_audience_view_597e3d8f42495af1 = []byte{
+	// 237 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0xe4, 0xc4, 0xdc, 0x82, 0xc4, 0xcc, 0xf4, 0xbc,
+	0xf8, 0xc4, 0xd2, 0x94, 0xcc, 0xd4, 0xbc, 0xe4, 0xd4, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x26, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x7e, 0xbd,
+	0x32, 0x03, 0x3d, 0xb8, 0x7e, 0x25, 0x6b, 0x2e, 0x11, 0x67, 0xa8, 0x11, 0x8e, 0x50, 0x13, 0xc2,
+	0x32, 0x53, 0xcb, 0x85, 0x94, 0xb9, 0x78, 0x61, 0x8a, 0xe2, 0xf3, 0x12, 0x73, 0x53, 0x25, 0x18,
+	0x15, 0x18, 0x35, 0x38, 0x83, 0x78, 0x60, 0x82, 0x7e, 0x89, 0xb9, 0xa9, 0x4e, 0xf7, 0x18, 0xb9,
+	0x54, 0x93, 0xf3, 0x73, 0xf5, 0x08, 0x5a, 0xe3, 0x24, 0x89, 0xcd, 0x92, 0x00, 0x90, 0x23, 0x03,
+	0x18, 0xa3, 0xbc, 0xa0, 0xfa, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5,
+	0xd3, 0x53, 0xf3, 0xc0, 0x5e, 0x80, 0x79, 0xbb, 0x20, 0xb3, 0x18, 0x4f, 0x28, 0x58, 0xc3, 0x59,
+	0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0x29, 0xba, 0x43, 0x8c, 0x74, 0x4c, 0x29, 0xd6,
+	0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0xbd, 0x20, 0x98, 0xca, 0x53, 0x30, 0x35, 0x31, 0x8e, 0x29,
+	0xc5, 0x31, 0x70, 0x35, 0x31, 0x61, 0x06, 0x31, 0x70, 0x35, 0x49, 0x6c, 0x60, 0x47, 0x18, 0x03,
+	0x02, 0x00, 0x00, 0xff, 0xff, 0x29, 0xac, 0x5f, 0xd7, 0x89, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign_bid_modifier.pb.go b/googleapis/ads/googleads/v0/resources/campaign_bid_modifier.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8e8de6cb66c40ab75fd54ed708e0295b7aa4911f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign_bid_modifier.pb.go
@@ -0,0 +1,215 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign_bid_modifier.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Represents a bid-modifiable only criterion at the campaign level.
+type CampaignBidModifier struct {
+	// The resource name of the campaign bid modifier.
+	// Campaign bid modifier resource names have the form:
+	//
+	// `customers/{customer_id}/campaignBidModifiers/{campaign_id}_{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign to which this criterion belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The ID of the criterion to bid modify.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The modifier for the bid when the criterion matches.
+	BidModifier *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// The criterion of this campaign bid modifier.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*CampaignBidModifier_InteractionType
+	Criterion            isCampaignBidModifier_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *CampaignBidModifier) Reset()         { *m = CampaignBidModifier{} }
+func (m *CampaignBidModifier) String() string { return proto.CompactTextString(m) }
+func (*CampaignBidModifier) ProtoMessage()    {}
+func (*CampaignBidModifier) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_bid_modifier_114f01e910f343fe, []int{0}
+}
+func (m *CampaignBidModifier) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBidModifier.Unmarshal(m, b)
+}
+func (m *CampaignBidModifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBidModifier.Marshal(b, m, deterministic)
+}
+func (dst *CampaignBidModifier) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBidModifier.Merge(dst, src)
+}
+func (m *CampaignBidModifier) XXX_Size() int {
+	return xxx_messageInfo_CampaignBidModifier.Size(m)
+}
+func (m *CampaignBidModifier) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBidModifier.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBidModifier proto.InternalMessageInfo
+
+func (m *CampaignBidModifier) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignBidModifier) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignBidModifier) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *CampaignBidModifier) GetBidModifier() *wrappers.DoubleValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+type isCampaignBidModifier_Criterion interface {
+	isCampaignBidModifier_Criterion()
+}
+
+type CampaignBidModifier_InteractionType struct {
+	InteractionType *common.InteractionTypeInfo `protobuf:"bytes,5,opt,name=interaction_type,json=interactionType,proto3,oneof"`
+}
+
+func (*CampaignBidModifier_InteractionType) isCampaignBidModifier_Criterion() {}
+
+func (m *CampaignBidModifier) GetCriterion() isCampaignBidModifier_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *CampaignBidModifier) GetInteractionType() *common.InteractionTypeInfo {
+	if x, ok := m.GetCriterion().(*CampaignBidModifier_InteractionType); ok {
+		return x.InteractionType
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignBidModifier) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignBidModifier_OneofMarshaler, _CampaignBidModifier_OneofUnmarshaler, _CampaignBidModifier_OneofSizer, []interface{}{
+		(*CampaignBidModifier_InteractionType)(nil),
+	}
+}
+
+func _CampaignBidModifier_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignBidModifier)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *CampaignBidModifier_InteractionType:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.InteractionType); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CampaignBidModifier.Criterion has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignBidModifier_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignBidModifier)
+	switch tag {
+	case 5: // criterion.interaction_type
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.InteractionTypeInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignBidModifier_InteractionType{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignBidModifier_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignBidModifier)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *CampaignBidModifier_InteractionType:
+		s := proto.Size(x.InteractionType)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*CampaignBidModifier)(nil), "google.ads.googleads.v0.resources.CampaignBidModifier")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign_bid_modifier.proto", fileDescriptor_campaign_bid_modifier_114f01e910f343fe)
+}
+
+var fileDescriptor_campaign_bid_modifier_114f01e910f343fe = []byte{
+	// 404 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xd1, 0xea, 0xd3, 0x30,
+	0x14, 0xc6, 0x6d, 0xa7, 0xe2, 0xb2, 0x89, 0x52, 0x6f, 0xca, 0x14, 0xd9, 0x14, 0x61, 0x37, 0xa6,
+	0xc5, 0x89, 0x08, 0xa2, 0xd2, 0x2a, 0xcc, 0x09, 0xca, 0xa8, 0xb2, 0x0b, 0x29, 0xd4, 0xb4, 0xc9,
+	0x42, 0xa0, 0x4d, 0x4a, 0xd2, 0x4e, 0xf6, 0x3a, 0x5e, 0xfa, 0x28, 0xbe, 0x83, 0x77, 0x3e, 0x88,
+	0xb4, 0x69, 0xc2, 0x44, 0xf7, 0xff, 0xdf, 0x7d, 0x4d, 0xbf, 0xdf, 0x39, 0xdf, 0xc9, 0x09, 0x78,
+	0x49, 0x85, 0xa0, 0x25, 0x09, 0x10, 0x56, 0x81, 0x96, 0x9d, 0x3a, 0x84, 0x81, 0x24, 0x4a, 0xb4,
+	0xb2, 0x20, 0x2a, 0x28, 0x50, 0x55, 0x23, 0x46, 0x79, 0x96, 0x33, 0x9c, 0x55, 0x02, 0xb3, 0x3d,
+	0x23, 0x12, 0xd6, 0x52, 0x34, 0xc2, 0x5b, 0x68, 0x06, 0x22, 0xac, 0xa0, 0xc5, 0xe1, 0x21, 0x84,
+	0x16, 0x9f, 0x3d, 0x3e, 0xd7, 0xa1, 0x10, 0x55, 0x25, 0x78, 0x50, 0x48, 0xd6, 0x10, 0xc9, 0x90,
+	0xae, 0x38, 0xbb, 0x3f, 0xd8, 0xfb, 0xaf, 0xbc, 0xdd, 0x07, 0xdf, 0x24, 0xaa, 0x6b, 0x22, 0x95,
+	0xfe, 0xff, 0xe0, 0xb7, 0x0b, 0xee, 0xbc, 0x19, 0x12, 0xc5, 0x0c, 0x7f, 0x18, 0xf2, 0x78, 0x0f,
+	0xc1, 0x4d, 0xd3, 0x33, 0xe3, 0xa8, 0x22, 0xbe, 0x33, 0x77, 0x96, 0xe3, 0x64, 0x6a, 0x0e, 0x3f,
+	0xa2, 0x8a, 0x78, 0xcf, 0xc1, 0x0d, 0x33, 0x8d, 0xef, 0xce, 0x9d, 0xe5, 0xe4, 0xc9, 0xbd, 0x21,
+	0x36, 0x34, 0xfd, 0xe0, 0xa7, 0x46, 0x32, 0x4e, 0x77, 0xa8, 0x6c, 0x49, 0x62, 0xdd, 0xde, 0x2b,
+	0x30, 0x1d, 0x82, 0x0a, 0x9e, 0x31, 0xec, 0x8f, 0x7a, 0xfa, 0xee, 0x3f, 0xf4, 0x86, 0x37, 0xcf,
+	0x9e, 0x6a, 0x78, 0x62, 0x81, 0x0d, 0xf6, 0x5e, 0x83, 0xe9, 0xe9, 0xf5, 0xf9, 0x57, 0xcf, 0x74,
+	0x7f, 0x2b, 0xda, 0xbc, 0x24, 0x43, 0x81, 0xfc, 0x64, 0xbe, 0xaf, 0xe0, 0x36, 0xe3, 0x0d, 0x91,
+	0xa8, 0x68, 0xba, 0x08, 0xcd, 0xb1, 0x26, 0xfe, 0xb5, 0xbe, 0xc8, 0x0a, 0x9e, 0x5b, 0x82, 0xbe,
+	0xe1, 0x2e, 0x93, 0xe1, 0x3e, 0x1f, 0x6b, 0xb2, 0xe1, 0x7b, 0xf1, 0xee, 0x4a, 0x72, 0x8b, 0xfd,
+	0x7d, 0x1c, 0x4f, 0xc0, 0xd8, 0x26, 0x8e, 0x7f, 0x39, 0xe0, 0x51, 0x21, 0x2a, 0x78, 0xe9, 0x7e,
+	0x63, 0xff, 0x3f, 0xdb, 0xd8, 0x76, 0xe3, 0x6c, 0x9d, 0x2f, 0xef, 0x07, 0x9c, 0x8a, 0x12, 0x71,
+	0x0a, 0x85, 0xa4, 0x01, 0x25, 0xbc, 0x1f, 0xd6, 0xbc, 0x85, 0x9a, 0xa9, 0x0b, 0x1e, 0xdf, 0x0b,
+	0xab, 0xbe, 0xbb, 0xa3, 0x75, 0x14, 0xfd, 0x70, 0x17, 0x6b, 0x5d, 0x32, 0xc2, 0x0a, 0x6a, 0xd9,
+	0xa9, 0x5d, 0x08, 0x13, 0xe3, 0xfc, 0x69, 0x3c, 0x69, 0x84, 0x55, 0x6a, 0x3d, 0xe9, 0x2e, 0x4c,
+	0xad, 0x27, 0xbf, 0xde, 0x87, 0x58, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0xe0, 0xd9, 0xa7, 0x4a,
+	0x00, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign_budget.pb.go b/googleapis/ads/googleads/v0/resources/campaign_budget.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a61d8e7b249a9be97317ca97b4f14815606f58dd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign_budget.pb.go
@@ -0,0 +1,217 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign_budget.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A campaign budget.
+type CampaignBudget struct {
+	// The resource name of the campaign budget.
+	// Campaign budget resource names have the form:
+	//
+	// `customers/{customer_id}/campaignBudgets/{budget_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the campaign budget.
+	//
+	// A campaign budget is created using the CampaignBudgetService create
+	// operation and is assigned a budget ID. A budget ID can be shared across
+	// different campaigns; the system will then allocate the campaign budget
+	// among different campaigns to get optimum results.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the campaign budget.
+	//
+	// When creating a campaign budget through CampaignBudgetService, every
+	// explicitly shared campaign budget must have a non-null, non-empty name.
+	// Campaign budgets that are not explicitly shared derive their name from the
+	// attached campaign's name.
+	//
+	// The length of this string must be between 1 and 255, inclusive,
+	// in UTF-8 bytes, (trimmed).
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The amount of the budget, in the local currency for the account.
+	// Amount is specified in micros, where one million is equivalent to one
+	// currency unit.
+	AmountMicros *wrappers.Int64Value `protobuf:"bytes,5,opt,name=amount_micros,json=amountMicros,proto3" json:"amount_micros,omitempty"`
+	// The lifetime amount of the budget, in the local currency for the account.
+	// Amount is specified in micros, where one million is equivalent to one
+	// currency unit.
+	TotalAmountMicros *wrappers.Int64Value `protobuf:"bytes,10,opt,name=total_amount_micros,json=totalAmountMicros,proto3" json:"total_amount_micros,omitempty"`
+	// The status of this campaign budget. This field is read-only.
+	Status enums.BudgetStatusEnum_BudgetStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.BudgetStatusEnum_BudgetStatus" json:"status,omitempty"`
+	// The delivery method that determines the rate at which the campaign budget
+	// is spent.
+	//
+	// Defaults to STANDARD if unspecified in a create operation.
+	DeliveryMethod enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod `protobuf:"varint,7,opt,name=delivery_method,json=deliveryMethod,proto3,enum=google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod" json:"delivery_method,omitempty"`
+	// Whether the budget is explicitly shared. This field is set to false by
+	// default.
+	//
+	// If true, the budget was created with the purpose of sharing
+	// across one or more campaigns.
+	//
+	// If false, the budget was created with the intention of only being used
+	// with a single campaign. The budget's name and status will stay in sync
+	// with the campaign's name and status. Attempting to share the budget with a
+	// second campaign will result in an error.
+	//
+	// A non-shared budget can become an explicitly shared. The same operation
+	// must
+	// also assign the budget a name.
+	//
+	// A shared campaign budget can never become non-shared.
+	ExplicitlyShared *wrappers.BoolValue `protobuf:"bytes,8,opt,name=explicitly_shared,json=explicitlyShared,proto3" json:"explicitly_shared,omitempty"`
+	// The number of campaigns actively using the budget.
+	//
+	// This field is read-only.
+	ReferenceCount       *wrappers.Int64Value `protobuf:"bytes,9,opt,name=reference_count,json=referenceCount,proto3" json:"reference_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CampaignBudget) Reset()         { *m = CampaignBudget{} }
+func (m *CampaignBudget) String() string { return proto.CompactTextString(m) }
+func (*CampaignBudget) ProtoMessage()    {}
+func (*CampaignBudget) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_866e5dbe05012bda, []int{0}
+}
+func (m *CampaignBudget) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBudget.Unmarshal(m, b)
+}
+func (m *CampaignBudget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBudget.Marshal(b, m, deterministic)
+}
+func (dst *CampaignBudget) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBudget.Merge(dst, src)
+}
+func (m *CampaignBudget) XXX_Size() int {
+	return xxx_messageInfo_CampaignBudget.Size(m)
+}
+func (m *CampaignBudget) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBudget.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBudget proto.InternalMessageInfo
+
+func (m *CampaignBudget) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignBudget) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.AmountMicros
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetTotalAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TotalAmountMicros
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetStatus() enums.BudgetStatusEnum_BudgetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.BudgetStatusEnum_UNSPECIFIED
+}
+
+func (m *CampaignBudget) GetDeliveryMethod() enums.BudgetDeliveryMethodEnum_BudgetDeliveryMethod {
+	if m != nil {
+		return m.DeliveryMethod
+	}
+	return enums.BudgetDeliveryMethodEnum_UNSPECIFIED
+}
+
+func (m *CampaignBudget) GetExplicitlyShared() *wrappers.BoolValue {
+	if m != nil {
+		return m.ExplicitlyShared
+	}
+	return nil
+}
+
+func (m *CampaignBudget) GetReferenceCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.ReferenceCount
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CampaignBudget)(nil), "google.ads.googleads.v0.resources.CampaignBudget")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign_budget.proto", fileDescriptor_campaign_budget_866e5dbe05012bda)
+}
+
+var fileDescriptor_campaign_budget_866e5dbe05012bda = []byte{
+	// 498 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0xc6, 0x95, 0xae, 0x14, 0x66, 0xb6, 0x8e, 0x65, 0x37, 0x51, 0x41, 0xa8, 0x03, 0x21, 0x55,
+	0x42, 0x72, 0xca, 0x40, 0x20, 0x01, 0x17, 0xa4, 0x1b, 0xaa, 0xf8, 0x33, 0x34, 0xa5, 0xa8, 0x17,
+	0xa8, 0x52, 0xe4, 0xc6, 0x67, 0x59, 0xa4, 0xc4, 0x8e, 0xfc, 0xa7, 0xb0, 0xd7, 0xe1, 0x92, 0x47,
+	0xe1, 0x09, 0x78, 0x1b, 0x50, 0xec, 0x24, 0x2c, 0x4c, 0xa3, 0xbb, 0x3b, 0xb1, 0xbf, 0xdf, 0x77,
+	0xec, 0xcf, 0x39, 0xe8, 0x45, 0xc2, 0x79, 0x92, 0x81, 0x4f, 0xa8, 0xf4, 0x6d, 0x59, 0x56, 0xab,
+	0xb1, 0x2f, 0x40, 0x72, 0x2d, 0x62, 0x90, 0x7e, 0x4c, 0xf2, 0x82, 0xa4, 0x09, 0x8b, 0x96, 0x9a,
+	0x26, 0xa0, 0x70, 0x21, 0xb8, 0xe2, 0xee, 0xbe, 0x55, 0x63, 0x42, 0x25, 0x6e, 0x40, 0xbc, 0x1a,
+	0xe3, 0x06, 0x1c, 0xbc, 0xbc, 0xca, 0x1b, 0x98, 0xce, 0xa5, 0x6f, 0xed, 0x22, 0x0a, 0x59, 0xba,
+	0x02, 0x71, 0x1e, 0xe5, 0xa0, 0xce, 0x38, 0xb5, 0xf6, 0x83, 0x27, 0xd7, 0x62, 0xa5, 0x22, 0x4a,
+	0xcb, 0x0a, 0xb9, 0x5f, 0x21, 0xe6, 0x6b, 0xa9, 0x4f, 0xfd, 0xaf, 0x82, 0x14, 0x05, 0x88, 0x6a,
+	0xff, 0xc1, 0xef, 0x2e, 0xea, 0x1f, 0x56, 0x77, 0x99, 0x18, 0xde, 0x7d, 0x88, 0xb6, 0xeb, 0xe3,
+	0x46, 0x8c, 0xe4, 0xe0, 0x39, 0x43, 0x67, 0xb4, 0x19, 0x6e, 0xd5, 0x8b, 0x9f, 0x48, 0x0e, 0xee,
+	0x63, 0xd4, 0x49, 0xa9, 0xb7, 0x31, 0x74, 0x46, 0xb7, 0x0f, 0xee, 0x56, 0x77, 0xc5, 0x75, 0x13,
+	0xfc, 0x8e, 0xa9, 0xe7, 0xcf, 0xe6, 0x24, 0xd3, 0x10, 0x76, 0x52, 0xea, 0x8e, 0x51, 0xd7, 0x18,
+	0x75, 0x8d, 0xfc, 0xde, 0x25, 0xf9, 0x4c, 0x89, 0x94, 0x25, 0x56, 0x6f, 0x94, 0xee, 0x1b, 0xb4,
+	0x4d, 0x72, 0xae, 0x99, 0x8a, 0xf2, 0x34, 0x16, 0x5c, 0x7a, 0x37, 0xd6, 0x77, 0xda, 0xb2, 0xc4,
+	0xb1, 0x01, 0xdc, 0x0f, 0x68, 0x4f, 0x71, 0x45, 0xb2, 0xa8, 0xed, 0x83, 0xd6, 0xfb, 0xec, 0x1a,
+	0x2e, 0xb8, 0x68, 0xf6, 0x19, 0xf5, 0x6c, 0xaa, 0x5e, 0x6f, 0xe8, 0x8c, 0xfa, 0x07, 0xaf, 0xf1,
+	0x55, 0x0f, 0x6d, 0x5e, 0x02, 0xdb, 0x24, 0x67, 0x06, 0x79, 0xcb, 0x74, 0xde, 0x5a, 0x08, 0x2b,
+	0x2f, 0x57, 0xa3, 0x9d, 0x7f, 0xde, 0xd9, 0xbb, 0x69, 0xec, 0x3f, 0x5e, 0xcb, 0xfe, 0xa8, 0x62,
+	0x8f, 0x0d, 0x7a, 0xa1, 0x4d, 0x7b, 0x23, 0xec, 0xd3, 0xd6, 0xb7, 0x3b, 0x45, 0xbb, 0xf0, 0xad,
+	0xc8, 0xd2, 0x38, 0x55, 0xd9, 0x79, 0x24, 0xcf, 0x88, 0x00, 0xea, 0xdd, 0x32, 0xb9, 0x0c, 0x2e,
+	0xe5, 0x32, 0xe1, 0x3c, 0xb3, 0xb1, 0xdc, 0xf9, 0x0b, 0xcd, 0x0c, 0xe3, 0x1e, 0xa1, 0x1d, 0x01,
+	0xa7, 0x20, 0x80, 0xc5, 0x10, 0xc5, 0x65, 0x5c, 0xde, 0xe6, 0xfa, 0x78, 0xfb, 0x0d, 0x73, 0x58,
+	0x22, 0x93, 0x5f, 0x0e, 0x7a, 0x14, 0xf3, 0x1c, 0xaf, 0x1d, 0x9d, 0xc9, 0x5e, 0xfb, 0x47, 0x3d,
+	0x29, 0xcd, 0x4f, 0x9c, 0x2f, 0xef, 0x2b, 0x32, 0xe1, 0x19, 0x61, 0x09, 0xe6, 0x22, 0xf1, 0x13,
+	0x60, 0xa6, 0x75, 0x3d, 0x25, 0x45, 0x2a, 0xff, 0x33, 0xcc, 0xaf, 0x9a, 0xea, 0x7b, 0x67, 0x63,
+	0x1a, 0x04, 0x3f, 0x3a, 0xfb, 0x53, 0x6b, 0x19, 0x50, 0x89, 0x6d, 0x59, 0x56, 0xf3, 0x31, 0x0e,
+	0x6b, 0xe5, 0xcf, 0x5a, 0xb3, 0x08, 0xa8, 0x5c, 0x34, 0x9a, 0xc5, 0x7c, 0xbc, 0x68, 0x34, 0xcb,
+	0x9e, 0x39, 0xc4, 0xd3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x06, 0x9f, 0x5d, 0x80, 0x50, 0x04,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign_criterion.pb.go b/googleapis/ads/googleads/v0/resources/campaign_criterion.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d34cb9a13c50901f87407d9a7582618aef592507
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign_criterion.pb.go
@@ -0,0 +1,895 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign_criterion.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A campaign criterion.
+type CampaignCriterion struct {
+	// The resource name of the campaign criterion.
+	// Campaign criterion resource names have the form:
+	//
+	// `customers/{customer_id}/campaignCriteria/{campaign_id}_{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign to which the criterion belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,4,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The ID of the criterion.
+	//
+	// This field is ignored during mutate.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,5,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The modifier for the bids when the criterion matches. The modifier must be
+	// in the range: 0.1 - 10.0. Most targetable criteria types support modifiers.
+	// Use 0 to opt out of a Device type.
+	BidModifier *wrappers.FloatValue `protobuf:"bytes,14,opt,name=bid_modifier,json=bidModifier,proto3" json:"bid_modifier,omitempty"`
+	// Whether to target (`false`) or exclude (`true`) the criterion.
+	Negative *wrappers.BoolValue `protobuf:"bytes,7,opt,name=negative,proto3" json:"negative,omitempty"`
+	// The type of the criterion.
+	Type enums.CriterionTypeEnum_CriterionType `protobuf:"varint,6,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.CriterionTypeEnum_CriterionType" json:"type,omitempty"`
+	// The campaign criterion.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*CampaignCriterion_Keyword
+	//	*CampaignCriterion_Placement
+	//	*CampaignCriterion_Location
+	//	*CampaignCriterion_Device
+	//	*CampaignCriterion_AdSchedule
+	//	*CampaignCriterion_AgeRange
+	//	*CampaignCriterion_Gender
+	//	*CampaignCriterion_IncomeRange
+	//	*CampaignCriterion_ParentalStatus
+	//	*CampaignCriterion_UserList
+	//	*CampaignCriterion_YoutubeVideo
+	//	*CampaignCriterion_YoutubeChannel
+	//	*CampaignCriterion_Proximity
+	//	*CampaignCriterion_Topic
+	//	*CampaignCriterion_ListingScope
+	//	*CampaignCriterion_Language
+	//	*CampaignCriterion_IpBlock
+	//	*CampaignCriterion_ContentLabel
+	//	*CampaignCriterion_Carrier
+	//	*CampaignCriterion_UserInterest
+	Criterion            isCampaignCriterion_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *CampaignCriterion) Reset()         { *m = CampaignCriterion{} }
+func (m *CampaignCriterion) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterion) ProtoMessage()    {}
+func (*CampaignCriterion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_b68a52a17805f4eb, []int{0}
+}
+func (m *CampaignCriterion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterion.Unmarshal(m, b)
+}
+func (m *CampaignCriterion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterion.Marshal(b, m, deterministic)
+}
+func (dst *CampaignCriterion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterion.Merge(dst, src)
+}
+func (m *CampaignCriterion) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterion.Size(m)
+}
+func (m *CampaignCriterion) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterion proto.InternalMessageInfo
+
+func (m *CampaignCriterion) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignCriterion) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetBidModifier() *wrappers.FloatValue {
+	if m != nil {
+		return m.BidModifier
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetNegative() *wrappers.BoolValue {
+	if m != nil {
+		return m.Negative
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetType() enums.CriterionTypeEnum_CriterionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CriterionTypeEnum_UNSPECIFIED
+}
+
+type isCampaignCriterion_Criterion interface {
+	isCampaignCriterion_Criterion()
+}
+
+type CampaignCriterion_Keyword struct {
+	Keyword *common.KeywordInfo `protobuf:"bytes,8,opt,name=keyword,proto3,oneof"`
+}
+
+type CampaignCriterion_Placement struct {
+	Placement *common.PlacementInfo `protobuf:"bytes,9,opt,name=placement,proto3,oneof"`
+}
+
+type CampaignCriterion_Location struct {
+	Location *common.LocationInfo `protobuf:"bytes,12,opt,name=location,proto3,oneof"`
+}
+
+type CampaignCriterion_Device struct {
+	Device *common.DeviceInfo `protobuf:"bytes,13,opt,name=device,proto3,oneof"`
+}
+
+type CampaignCriterion_AdSchedule struct {
+	AdSchedule *common.AdScheduleInfo `protobuf:"bytes,15,opt,name=ad_schedule,json=adSchedule,proto3,oneof"`
+}
+
+type CampaignCriterion_AgeRange struct {
+	AgeRange *common.AgeRangeInfo `protobuf:"bytes,16,opt,name=age_range,json=ageRange,proto3,oneof"`
+}
+
+type CampaignCriterion_Gender struct {
+	Gender *common.GenderInfo `protobuf:"bytes,17,opt,name=gender,proto3,oneof"`
+}
+
+type CampaignCriterion_IncomeRange struct {
+	IncomeRange *common.IncomeRangeInfo `protobuf:"bytes,18,opt,name=income_range,json=incomeRange,proto3,oneof"`
+}
+
+type CampaignCriterion_ParentalStatus struct {
+	ParentalStatus *common.ParentalStatusInfo `protobuf:"bytes,19,opt,name=parental_status,json=parentalStatus,proto3,oneof"`
+}
+
+type CampaignCriterion_UserList struct {
+	UserList *common.UserListInfo `protobuf:"bytes,22,opt,name=user_list,json=userList,proto3,oneof"`
+}
+
+type CampaignCriterion_YoutubeVideo struct {
+	YoutubeVideo *common.YouTubeVideoInfo `protobuf:"bytes,20,opt,name=youtube_video,json=youtubeVideo,proto3,oneof"`
+}
+
+type CampaignCriterion_YoutubeChannel struct {
+	YoutubeChannel *common.YouTubeChannelInfo `protobuf:"bytes,21,opt,name=youtube_channel,json=youtubeChannel,proto3,oneof"`
+}
+
+type CampaignCriterion_Proximity struct {
+	Proximity *common.ProximityInfo `protobuf:"bytes,23,opt,name=proximity,proto3,oneof"`
+}
+
+type CampaignCriterion_Topic struct {
+	Topic *common.TopicInfo `protobuf:"bytes,24,opt,name=topic,proto3,oneof"`
+}
+
+type CampaignCriterion_ListingScope struct {
+	ListingScope *common.ListingScopeInfo `protobuf:"bytes,25,opt,name=listing_scope,json=listingScope,proto3,oneof"`
+}
+
+type CampaignCriterion_Language struct {
+	Language *common.LanguageInfo `protobuf:"bytes,26,opt,name=language,proto3,oneof"`
+}
+
+type CampaignCriterion_IpBlock struct {
+	IpBlock *common.IpBlockInfo `protobuf:"bytes,27,opt,name=ip_block,json=ipBlock,proto3,oneof"`
+}
+
+type CampaignCriterion_ContentLabel struct {
+	ContentLabel *common.ContentLabelInfo `protobuf:"bytes,28,opt,name=content_label,json=contentLabel,proto3,oneof"`
+}
+
+type CampaignCriterion_Carrier struct {
+	Carrier *common.CarrierInfo `protobuf:"bytes,29,opt,name=carrier,proto3,oneof"`
+}
+
+type CampaignCriterion_UserInterest struct {
+	UserInterest *common.UserInterestInfo `protobuf:"bytes,30,opt,name=user_interest,json=userInterest,proto3,oneof"`
+}
+
+func (*CampaignCriterion_Keyword) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Placement) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Location) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Device) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_AdSchedule) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_AgeRange) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Gender) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_IncomeRange) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_ParentalStatus) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_UserList) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_YoutubeVideo) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_YoutubeChannel) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Proximity) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Topic) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_ListingScope) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Language) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_IpBlock) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_ContentLabel) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_Carrier) isCampaignCriterion_Criterion() {}
+
+func (*CampaignCriterion_UserInterest) isCampaignCriterion_Criterion() {}
+
+func (m *CampaignCriterion) GetCriterion() isCampaignCriterion_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetKeyword() *common.KeywordInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetPlacement() *common.PlacementInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Placement); ok {
+		return x.Placement
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetLocation() *common.LocationInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Location); ok {
+		return x.Location
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetDevice() *common.DeviceInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Device); ok {
+		return x.Device
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetAdSchedule() *common.AdScheduleInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_AdSchedule); ok {
+		return x.AdSchedule
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetAgeRange() *common.AgeRangeInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_AgeRange); ok {
+		return x.AgeRange
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetGender() *common.GenderInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Gender); ok {
+		return x.Gender
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetIncomeRange() *common.IncomeRangeInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_IncomeRange); ok {
+		return x.IncomeRange
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetParentalStatus() *common.ParentalStatusInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_ParentalStatus); ok {
+		return x.ParentalStatus
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetUserList() *common.UserListInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_UserList); ok {
+		return x.UserList
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetYoutubeVideo() *common.YouTubeVideoInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_YoutubeVideo); ok {
+		return x.YoutubeVideo
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetYoutubeChannel() *common.YouTubeChannelInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_YoutubeChannel); ok {
+		return x.YoutubeChannel
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetProximity() *common.ProximityInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Proximity); ok {
+		return x.Proximity
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetTopic() *common.TopicInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Topic); ok {
+		return x.Topic
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetListingScope() *common.ListingScopeInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_ListingScope); ok {
+		return x.ListingScope
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetLanguage() *common.LanguageInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Language); ok {
+		return x.Language
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetIpBlock() *common.IpBlockInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_IpBlock); ok {
+		return x.IpBlock
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetContentLabel() *common.ContentLabelInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_ContentLabel); ok {
+		return x.ContentLabel
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetCarrier() *common.CarrierInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_Carrier); ok {
+		return x.Carrier
+	}
+	return nil
+}
+
+func (m *CampaignCriterion) GetUserInterest() *common.UserInterestInfo {
+	if x, ok := m.GetCriterion().(*CampaignCriterion_UserInterest); ok {
+		return x.UserInterest
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignCriterion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignCriterion_OneofMarshaler, _CampaignCriterion_OneofUnmarshaler, _CampaignCriterion_OneofSizer, []interface{}{
+		(*CampaignCriterion_Keyword)(nil),
+		(*CampaignCriterion_Placement)(nil),
+		(*CampaignCriterion_Location)(nil),
+		(*CampaignCriterion_Device)(nil),
+		(*CampaignCriterion_AdSchedule)(nil),
+		(*CampaignCriterion_AgeRange)(nil),
+		(*CampaignCriterion_Gender)(nil),
+		(*CampaignCriterion_IncomeRange)(nil),
+		(*CampaignCriterion_ParentalStatus)(nil),
+		(*CampaignCriterion_UserList)(nil),
+		(*CampaignCriterion_YoutubeVideo)(nil),
+		(*CampaignCriterion_YoutubeChannel)(nil),
+		(*CampaignCriterion_Proximity)(nil),
+		(*CampaignCriterion_Topic)(nil),
+		(*CampaignCriterion_ListingScope)(nil),
+		(*CampaignCriterion_Language)(nil),
+		(*CampaignCriterion_IpBlock)(nil),
+		(*CampaignCriterion_ContentLabel)(nil),
+		(*CampaignCriterion_Carrier)(nil),
+		(*CampaignCriterion_UserInterest)(nil),
+	}
+}
+
+func _CampaignCriterion_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignCriterion)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *CampaignCriterion_Keyword:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Keyword); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Placement:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Placement); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Location:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Location); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Device:
+		b.EncodeVarint(13<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Device); err != nil {
+			return err
+		}
+	case *CampaignCriterion_AdSchedule:
+		b.EncodeVarint(15<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdSchedule); err != nil {
+			return err
+		}
+	case *CampaignCriterion_AgeRange:
+		b.EncodeVarint(16<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AgeRange); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Gender:
+		b.EncodeVarint(17<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Gender); err != nil {
+			return err
+		}
+	case *CampaignCriterion_IncomeRange:
+		b.EncodeVarint(18<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.IncomeRange); err != nil {
+			return err
+		}
+	case *CampaignCriterion_ParentalStatus:
+		b.EncodeVarint(19<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ParentalStatus); err != nil {
+			return err
+		}
+	case *CampaignCriterion_UserList:
+		b.EncodeVarint(22<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.UserList); err != nil {
+			return err
+		}
+	case *CampaignCriterion_YoutubeVideo:
+		b.EncodeVarint(20<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.YoutubeVideo); err != nil {
+			return err
+		}
+	case *CampaignCriterion_YoutubeChannel:
+		b.EncodeVarint(21<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.YoutubeChannel); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Proximity:
+		b.EncodeVarint(23<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Proximity); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Topic:
+		b.EncodeVarint(24<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Topic); err != nil {
+			return err
+		}
+	case *CampaignCriterion_ListingScope:
+		b.EncodeVarint(25<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ListingScope); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Language:
+		b.EncodeVarint(26<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Language); err != nil {
+			return err
+		}
+	case *CampaignCriterion_IpBlock:
+		b.EncodeVarint(27<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.IpBlock); err != nil {
+			return err
+		}
+	case *CampaignCriterion_ContentLabel:
+		b.EncodeVarint(28<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ContentLabel); err != nil {
+			return err
+		}
+	case *CampaignCriterion_Carrier:
+		b.EncodeVarint(29<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Carrier); err != nil {
+			return err
+		}
+	case *CampaignCriterion_UserInterest:
+		b.EncodeVarint(30<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.UserInterest); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CampaignCriterion.Criterion has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignCriterion_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignCriterion)
+	switch tag {
+	case 8: // criterion.keyword
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.KeywordInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Keyword{msg}
+		return true, err
+	case 9: // criterion.placement
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.PlacementInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Placement{msg}
+		return true, err
+	case 12: // criterion.location
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.LocationInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Location{msg}
+		return true, err
+	case 13: // criterion.device
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.DeviceInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Device{msg}
+		return true, err
+	case 15: // criterion.ad_schedule
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.AdScheduleInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_AdSchedule{msg}
+		return true, err
+	case 16: // criterion.age_range
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.AgeRangeInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_AgeRange{msg}
+		return true, err
+	case 17: // criterion.gender
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.GenderInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Gender{msg}
+		return true, err
+	case 18: // criterion.income_range
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.IncomeRangeInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_IncomeRange{msg}
+		return true, err
+	case 19: // criterion.parental_status
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ParentalStatusInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_ParentalStatus{msg}
+		return true, err
+	case 22: // criterion.user_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.UserListInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_UserList{msg}
+		return true, err
+	case 20: // criterion.youtube_video
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.YouTubeVideoInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_YoutubeVideo{msg}
+		return true, err
+	case 21: // criterion.youtube_channel
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.YouTubeChannelInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_YoutubeChannel{msg}
+		return true, err
+	case 23: // criterion.proximity
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ProximityInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Proximity{msg}
+		return true, err
+	case 24: // criterion.topic
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.TopicInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Topic{msg}
+		return true, err
+	case 25: // criterion.listing_scope
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ListingScopeInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_ListingScope{msg}
+		return true, err
+	case 26: // criterion.language
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.LanguageInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Language{msg}
+		return true, err
+	case 27: // criterion.ip_block
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.IpBlockInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_IpBlock{msg}
+		return true, err
+	case 28: // criterion.content_label
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.ContentLabelInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_ContentLabel{msg}
+		return true, err
+	case 29: // criterion.carrier
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.CarrierInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_Carrier{msg}
+		return true, err
+	case 30: // criterion.user_interest
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.UserInterestInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &CampaignCriterion_UserInterest{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignCriterion_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignCriterion)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *CampaignCriterion_Keyword:
+		s := proto.Size(x.Keyword)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Placement:
+		s := proto.Size(x.Placement)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Location:
+		s := proto.Size(x.Location)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Device:
+		s := proto.Size(x.Device)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_AdSchedule:
+		s := proto.Size(x.AdSchedule)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_AgeRange:
+		s := proto.Size(x.AgeRange)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Gender:
+		s := proto.Size(x.Gender)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_IncomeRange:
+		s := proto.Size(x.IncomeRange)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_ParentalStatus:
+		s := proto.Size(x.ParentalStatus)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_UserList:
+		s := proto.Size(x.UserList)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_YoutubeVideo:
+		s := proto.Size(x.YoutubeVideo)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_YoutubeChannel:
+		s := proto.Size(x.YoutubeChannel)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Proximity:
+		s := proto.Size(x.Proximity)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Topic:
+		s := proto.Size(x.Topic)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_ListingScope:
+		s := proto.Size(x.ListingScope)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Language:
+		s := proto.Size(x.Language)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_IpBlock:
+		s := proto.Size(x.IpBlock)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_ContentLabel:
+		s := proto.Size(x.ContentLabel)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_Carrier:
+		s := proto.Size(x.Carrier)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterion_UserInterest:
+		s := proto.Size(x.UserInterest)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*CampaignCriterion)(nil), "google.ads.googleads.v0.resources.CampaignCriterion")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign_criterion.proto", fileDescriptor_campaign_criterion_b68a52a17805f4eb)
+}
+
+var fileDescriptor_campaign_criterion_b68a52a17805f4eb = []byte{
+	// 895 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x96, 0x6f, 0x6f, 0x1b, 0x35,
+	0x18, 0xc0, 0xc9, 0xd8, 0xba, 0xc4, 0x49, 0x5b, 0x66, 0x60, 0x98, 0x6e, 0x4c, 0x1d, 0x08, 0xa9,
+	0xfc, 0xd9, 0x25, 0x2a, 0x68, 0x42, 0x20, 0x4d, 0x4a, 0x32, 0xe8, 0xb2, 0x75, 0xa8, 0xa4, 0xa5,
+	0x08, 0x54, 0x74, 0x72, 0x7c, 0x4f, 0x6f, 0xd6, 0xee, 0xec, 0x93, 0xed, 0xcb, 0xc8, 0xd7, 0xe1,
+	0x25, 0x1f, 0x85, 0x77, 0xbc, 0xe6, 0xcb, 0x20, 0xfb, 0xec, 0x6b, 0xab, 0x2a, 0xdc, 0xbd, 0x3b,
+	0x3f, 0x7d, 0x7e, 0xbf, 0x3e, 0xcf, 0x73, 0xb1, 0x7d, 0xe8, 0xdb, 0x54, 0xca, 0x34, 0x83, 0x21,
+	0x4d, 0xf4, 0xb0, 0x7a, 0xb4, 0x4f, 0xcb, 0xd1, 0x50, 0x81, 0x96, 0xa5, 0x62, 0xa0, 0x87, 0x8c,
+	0xe6, 0x05, 0xe5, 0xa9, 0x88, 0x99, 0xe2, 0x06, 0x14, 0x97, 0x22, 0x2a, 0x94, 0x34, 0x12, 0x3f,
+	0xac, 0x80, 0x88, 0x26, 0x3a, 0xaa, 0xd9, 0x68, 0x39, 0x8a, 0x6a, 0x76, 0xe7, 0xd1, 0x3a, 0x3d,
+	0x93, 0x79, 0x2e, 0xc5, 0xd0, 0x2b, 0x69, 0x65, 0xdc, 0xd9, 0x5f, 0x97, 0x0e, 0xa2, 0xcc, 0xf5,
+	0xb0, 0x2e, 0x20, 0x36, 0xab, 0x02, 0x3c, 0xf3, 0xc0, 0x33, 0x6e, 0xb5, 0x28, 0xcf, 0x87, 0x6f,
+	0x14, 0x2d, 0x0a, 0x50, 0xba, 0xfa, 0xfb, 0xc7, 0xff, 0x6c, 0xa3, 0x3b, 0x53, 0xdf, 0xc2, 0x34,
+	0x08, 0xf0, 0x27, 0x68, 0x33, 0x54, 0x19, 0x0b, 0x9a, 0x03, 0xe9, 0xec, 0x76, 0xf6, 0x7a, 0xf3,
+	0x41, 0x08, 0xfe, 0x48, 0x73, 0xc0, 0xdf, 0xa0, 0x6e, 0x68, 0x9e, 0xdc, 0xdc, 0xed, 0xec, 0xf5,
+	0xf7, 0xef, 0xfb, 0x46, 0xa3, 0xf0, 0xdf, 0xa2, 0x63, 0xa3, 0xb8, 0x48, 0x4f, 0x69, 0x56, 0xc2,
+	0xbc, 0xce, 0xc6, 0x4f, 0xd0, 0xe0, 0xa2, 0x58, 0x9e, 0x90, 0x5b, 0x8e, 0xbe, 0x77, 0x8d, 0x9e,
+	0x09, 0xf3, 0xf8, 0xeb, 0x0a, 0xee, 0xd7, 0xc0, 0x2c, 0xb1, 0xfc, 0x82, 0x27, 0x71, 0x2e, 0x13,
+	0x7e, 0xce, 0x41, 0x91, 0xad, 0x35, 0xfc, 0x0f, 0x99, 0xa4, 0xc6, 0xf3, 0x0b, 0x9e, 0xbc, 0xf4,
+	0xf9, 0xf8, 0x31, 0xea, 0x0a, 0x48, 0xa9, 0xe1, 0x4b, 0x20, 0xb7, 0x1d, 0xbb, 0x73, 0x8d, 0x9d,
+	0x48, 0x99, 0xf9, 0xba, 0x43, 0x2e, 0x9e, 0xa3, 0x9b, 0x76, 0xb4, 0x64, 0x63, 0xb7, 0xb3, 0xb7,
+	0xb5, 0xff, 0x24, 0x5a, 0xf7, 0x86, 0xdd, 0xfb, 0x88, 0xea, 0x71, 0x9e, 0xac, 0x0a, 0xf8, 0x5e,
+	0x94, 0xf9, 0xd5, 0xc8, 0xdc, 0xb9, 0xf0, 0x01, 0xba, 0xfd, 0x1a, 0x56, 0x6f, 0xa4, 0x4a, 0x48,
+	0xd7, 0x95, 0xf2, 0xc5, 0x5a, 0x6d, 0xf5, 0xab, 0x88, 0x5e, 0x54, 0xe9, 0x33, 0x71, 0x2e, 0x9f,
+	0xbd, 0x35, 0x0f, 0x34, 0x7e, 0x89, 0x7a, 0x45, 0x46, 0x19, 0xe4, 0x20, 0x0c, 0xe9, 0x39, 0xd5,
+	0xa3, 0x26, 0xd5, 0x51, 0x00, 0xbc, 0xec, 0xc2, 0x80, 0x9f, 0xa3, 0x6e, 0x26, 0x19, 0x35, 0x5c,
+	0x0a, 0x32, 0x70, 0xb6, 0x2f, 0x9b, 0x6c, 0x87, 0x3e, 0xdf, 0xcb, 0x6a, 0x1e, 0x3f, 0x45, 0x1b,
+	0x09, 0x2c, 0x39, 0x03, 0xb2, 0xe9, 0x4c, 0x9f, 0x37, 0x99, 0x9e, 0xba, 0x6c, 0xef, 0xf1, 0x2c,
+	0xfe, 0x09, 0xf5, 0x69, 0x12, 0x6b, 0xf6, 0x0a, 0x92, 0x32, 0x03, 0xb2, 0xed, 0x54, 0x51, 0x93,
+	0x6a, 0x9c, 0x1c, 0x7b, 0xc2, 0xeb, 0x10, 0xad, 0x23, 0xf8, 0x05, 0xea, 0xd1, 0x14, 0x62, 0x45,
+	0x45, 0x0a, 0xe4, 0x9d, 0x76, 0x5d, 0x8e, 0x53, 0x98, 0xdb, 0xfc, 0xd0, 0x25, 0xf5, 0x6b, 0xdb,
+	0x65, 0x0a, 0x22, 0x01, 0x45, 0xee, 0xb4, 0xeb, 0xf2, 0xc0, 0x65, 0x87, 0x2e, 0x2b, 0x16, 0x9f,
+	0xa0, 0x01, 0x17, 0x4c, 0xe6, 0xa1, 0x2a, 0xec, 0x5c, 0xc3, 0x26, 0xd7, 0xcc, 0x31, 0x97, 0x0b,
+	0xeb, 0xf3, 0x8b, 0x10, 0xfe, 0x1d, 0x6d, 0x17, 0x54, 0x81, 0x30, 0x34, 0x8b, 0xb5, 0xa1, 0xa6,
+	0xd4, 0xe4, 0x5d, 0x27, 0xde, 0x6f, 0xfc, 0x89, 0x78, 0xec, 0xd8, 0x51, 0xde, 0xbd, 0x55, 0x5c,
+	0x89, 0xda, 0x39, 0x96, 0x1a, 0x54, 0x9c, 0x71, 0x6d, 0xc8, 0xdd, 0x76, 0x73, 0xfc, 0x59, 0x83,
+	0x3a, 0xe4, 0x3a, 0xfc, 0xf4, 0xba, 0xa5, 0x5f, 0xe3, 0x5f, 0xd0, 0xe6, 0x4a, 0x96, 0xa6, 0x5c,
+	0x40, 0xbc, 0xe4, 0x09, 0x48, 0xf2, 0x9e, 0x13, 0x8e, 0x9a, 0x84, 0xbf, 0xca, 0xf2, 0xa4, 0x5c,
+	0xc0, 0xa9, 0x65, 0xbc, 0x74, 0xe0, 0x45, 0x2e, 0x66, 0x87, 0x10, 0xc4, 0xec, 0x15, 0x15, 0x02,
+	0x32, 0xf2, 0x7e, 0xbb, 0x21, 0x78, 0xf5, 0xb4, 0xa2, 0xc2, 0x10, 0xbc, 0xcc, 0x47, 0xdd, 0x06,
+	0x54, 0xf2, 0x0f, 0x9e, 0x73, 0xb3, 0x22, 0x1f, 0xb4, 0xdc, 0x80, 0x01, 0xa8, 0x37, 0x60, 0x08,
+	0xe0, 0x31, 0xba, 0x65, 0x64, 0xc1, 0x19, 0x21, 0x4e, 0xf5, 0x59, 0x93, 0xea, 0xc4, 0x26, 0x7b,
+	0x4d, 0x45, 0xda, 0x49, 0xda, 0x37, 0xc2, 0x45, 0x1a, 0x6b, 0x26, 0x0b, 0x20, 0x1f, 0xb6, 0x9b,
+	0xe4, 0x61, 0x05, 0x1d, 0x5b, 0x26, 0x4c, 0x32, 0xbb, 0x14, 0x73, 0x87, 0x03, 0x15, 0x69, 0x49,
+	0x53, 0x20, 0x3b, 0x2d, 0x0f, 0x07, 0x9f, 0x5f, 0x1f, 0x0e, 0x7e, 0x8d, 0x9f, 0xa1, 0x2e, 0x2f,
+	0xe2, 0x45, 0x26, 0xd9, 0x6b, 0x72, 0xaf, 0xdd, 0x09, 0x38, 0x2b, 0x26, 0x36, 0x3d, 0x9c, 0x80,
+	0xbc, 0x5a, 0xda, 0x76, 0x99, 0x14, 0x06, 0x84, 0x89, 0x33, 0xba, 0x80, 0x8c, 0xdc, 0x6f, 0xd7,
+	0xee, 0xb4, 0x82, 0x0e, 0x2d, 0x13, 0xda, 0x65, 0x97, 0x62, 0xf6, 0x8c, 0x66, 0x54, 0x29, 0x7b,
+	0xd5, 0x7c, 0xd4, 0xae, 0xc2, 0x69, 0x95, 0x1e, 0x2a, 0xf4, 0xb4, 0xad, 0xd0, 0xed, 0x13, 0x2e,
+	0x0c, 0x28, 0xd0, 0x86, 0x3c, 0x68, 0x57, 0xa1, 0xdd, 0x2b, 0x33, 0xcf, 0x84, 0x0a, 0xcb, 0x4b,
+	0xb1, 0x49, 0x1f, 0xf5, 0xea, 0x0b, 0x72, 0xf2, 0x6f, 0x07, 0x7d, 0xca, 0x64, 0x1e, 0x35, 0x7e,
+	0x80, 0x4c, 0xee, 0x5e, 0xbb, 0xfa, 0x8f, 0xec, 0xfd, 0x77, 0xd4, 0xf9, 0xed, 0xb9, 0x87, 0x53,
+	0x69, 0x5f, 0x54, 0x24, 0x55, 0x3a, 0x4c, 0x41, 0xb8, 0xdb, 0x31, 0x7c, 0x7b, 0x14, 0x5c, 0xff,
+	0xcf, 0x87, 0xd1, 0x77, 0xf5, 0xd3, 0x9f, 0x37, 0xde, 0x3e, 0x18, 0x8f, 0xff, 0xba, 0xf1, 0xf0,
+	0xa0, 0x52, 0x8e, 0x13, 0x1d, 0x55, 0x8f, 0xf6, 0xe9, 0x74, 0x14, 0xcd, 0x43, 0xe6, 0xdf, 0x21,
+	0xe7, 0x6c, 0x9c, 0xe8, 0xb3, 0x3a, 0xe7, 0xec, 0x74, 0x74, 0x56, 0xe7, 0x2c, 0x36, 0x5c, 0x11,
+	0x5f, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x90, 0xae, 0x1a, 0x9c, 0x09, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign_feed.pb.go b/googleapis/ads/googleads/v0/resources/campaign_feed.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..670338de21a222808aff8ad9e39b0e2f6bdd7117
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign_feed.pb.go
@@ -0,0 +1,155 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign_feed.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A campaign feed.
+type CampaignFeed struct {
+	// The resource name of the campaign feed.
+	// Campaign feed resource names have the form:
+	//
+	// `customers/{customer_id}/campaignFeeds/{campaign_id}_{feed_id}
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed to which the CampaignFeed belongs.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The campaign to which the CampaignFeed belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,3,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// Indicates which placeholder types the feed may populate under the connected
+	// campaign. Required.
+	PlaceholderTypes []enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,4,rep,packed,name=placeholder_types,json=placeholderTypes,proto3,enum=google.ads.googleads.v0.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_types,omitempty"`
+	// Matching function associated with the CampaignFeed.
+	// The matching function is used to filter the set of feed items selected.
+	// Required.
+	MatchingFunction *common.MatchingFunction `protobuf:"bytes,5,opt,name=matching_function,json=matchingFunction,proto3" json:"matching_function,omitempty"`
+	// Status of the campaign feed.
+	// This field is read-only.
+	Status               enums.FeedLinkStatusEnum_FeedLinkStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.FeedLinkStatusEnum_FeedLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *CampaignFeed) Reset()         { *m = CampaignFeed{} }
+func (m *CampaignFeed) String() string { return proto.CompactTextString(m) }
+func (*CampaignFeed) ProtoMessage()    {}
+func (*CampaignFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_95914acc8f5259ce, []int{0}
+}
+func (m *CampaignFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignFeed.Unmarshal(m, b)
+}
+func (m *CampaignFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignFeed.Marshal(b, m, deterministic)
+}
+func (dst *CampaignFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignFeed.Merge(dst, src)
+}
+func (m *CampaignFeed) XXX_Size() int {
+	return xxx_messageInfo_CampaignFeed.Size(m)
+}
+func (m *CampaignFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignFeed proto.InternalMessageInfo
+
+func (m *CampaignFeed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignFeed) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetPlaceholderTypes() []enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderTypes
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetMatchingFunction() *common.MatchingFunction {
+	if m != nil {
+		return m.MatchingFunction
+	}
+	return nil
+}
+
+func (m *CampaignFeed) GetStatus() enums.FeedLinkStatusEnum_FeedLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CampaignFeed)(nil), "google.ads.googleads.v0.resources.CampaignFeed")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign_feed.proto", fileDescriptor_campaign_feed_95914acc8f5259ce)
+}
+
+var fileDescriptor_campaign_feed_95914acc8f5259ce = []byte{
+	// 450 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdd, 0x6a, 0xd4, 0x40,
+	0x14, 0xc7, 0xc9, 0x6e, 0x5d, 0x74, 0xac, 0xa5, 0x9b, 0xab, 0x50, 0x44, 0xb6, 0x8a, 0xb0, 0x57,
+	0x33, 0x61, 0xfd, 0x40, 0xf0, 0xc6, 0xac, 0xd8, 0x82, 0xa8, 0x2c, 0xa9, 0x2c, 0x22, 0x91, 0x30,
+	0x4d, 0xce, 0x4e, 0x43, 0x33, 0x1f, 0xcc, 0x24, 0x95, 0xbe, 0x8e, 0x97, 0xbe, 0x89, 0x3e, 0x80,
+	0xcf, 0x23, 0x99, 0x4c, 0xa2, 0x5d, 0x89, 0xed, 0xdd, 0xc9, 0xe1, 0xff, 0x3b, 0x73, 0xce, 0xf9,
+	0x9f, 0xa0, 0x67, 0x4c, 0x4a, 0x56, 0x02, 0xa1, 0xb9, 0x21, 0x6d, 0xd8, 0x44, 0x17, 0x21, 0xd1,
+	0x60, 0x64, 0xad, 0x33, 0x30, 0x24, 0xa3, 0x5c, 0xd1, 0x82, 0x89, 0x74, 0x03, 0x90, 0x63, 0xa5,
+	0x65, 0x25, 0xfd, 0xc3, 0x56, 0x8b, 0x69, 0x6e, 0x70, 0x8f, 0xe1, 0x8b, 0x10, 0xf7, 0xd8, 0xc1,
+	0xf3, 0xa1, 0xca, 0x99, 0xe4, 0x5c, 0x0a, 0xc2, 0x69, 0x95, 0x9d, 0x15, 0x82, 0xa5, 0x9b, 0x5a,
+	0x64, 0x55, 0x21, 0x45, 0x5b, 0xfa, 0xe0, 0xe9, 0x10, 0x07, 0xa2, 0xe6, 0x86, 0x34, 0x4d, 0xa4,
+	0x65, 0x21, 0xce, 0x53, 0x53, 0xd1, 0xaa, 0x36, 0x37, 0xa3, 0x54, 0x49, 0x33, 0x38, 0x93, 0x65,
+	0x0e, 0x3a, 0xad, 0x2e, 0x15, 0x38, 0xea, 0x81, 0xa3, 0xec, 0xd7, 0x69, 0xbd, 0x21, 0x5f, 0x35,
+	0x55, 0x0a, 0xb4, 0xab, 0xfa, 0xf0, 0xc7, 0x18, 0xed, 0xbe, 0x76, 0xe3, 0x1f, 0x01, 0xe4, 0xfe,
+	0x23, 0x74, 0xaf, 0x9b, 0x30, 0x15, 0x94, 0x43, 0xe0, 0xcd, 0xbc, 0xf9, 0x9d, 0x78, 0xb7, 0x4b,
+	0x7e, 0xa0, 0x1c, 0xfc, 0x10, 0xed, 0x34, 0x5d, 0x06, 0xa3, 0x99, 0x37, 0xbf, 0xbb, 0xb8, 0xef,
+	0x16, 0x84, 0xbb, 0x47, 0xf0, 0x49, 0xa5, 0x0b, 0xc1, 0xd6, 0xb4, 0xac, 0x21, 0xb6, 0x4a, 0xff,
+	0x05, 0xba, 0xdd, 0x6d, 0x39, 0x18, 0xdf, 0x80, 0xea, 0xd5, 0xbe, 0x44, 0xd3, 0xed, 0xd9, 0x4c,
+	0xb0, 0x33, 0x1b, 0xcf, 0xf7, 0x16, 0x4b, 0x3c, 0x64, 0x92, 0xdd, 0x09, 0x5e, 0xfd, 0xe1, 0x3e,
+	0x5e, 0x2a, 0x78, 0x23, 0x6a, 0xbe, 0x9d, 0x8b, 0xf7, 0xd5, 0xd5, 0x84, 0xf1, 0xbf, 0xa0, 0xe9,
+	0x3f, 0xce, 0x05, 0xb7, 0x6c, 0xcf, 0xe1, 0xe0, 0x83, 0xad, 0xe5, 0xf8, 0xbd, 0x03, 0x8f, 0x1c,
+	0x17, 0xef, 0xf3, 0xad, 0x8c, 0xff, 0x09, 0x4d, 0x5a, 0x5f, 0x83, 0xc9, 0xcc, 0x9b, 0xef, 0x2d,
+	0x5e, 0x5d, 0x33, 0x44, 0xe3, 0xca, 0xbb, 0x42, 0x9c, 0x9f, 0x58, 0xc8, 0xce, 0x70, 0x35, 0x15,
+	0xbb, 0x7a, 0xcb, 0x5f, 0x1e, 0x7a, 0x9c, 0x49, 0x8e, 0xaf, 0xbd, 0xdc, 0xe5, 0xf4, 0x6f, 0xcb,
+	0x57, 0xcd, 0xfe, 0x57, 0xde, 0xe7, 0xb7, 0x8e, 0x63, 0xb2, 0xa4, 0x82, 0x61, 0xa9, 0x19, 0x61,
+	0x20, 0xac, 0x3b, 0xdd, 0xc1, 0xa9, 0xc2, 0xfc, 0xe7, 0x3f, 0x7a, 0xd9, 0x47, 0xdf, 0x46, 0xe3,
+	0xe3, 0x28, 0xfa, 0x3e, 0x3a, 0x3c, 0x6e, 0x4b, 0x46, 0xb9, 0xc1, 0x6d, 0xd8, 0x44, 0xeb, 0x10,
+	0xc7, 0x9d, 0xf2, 0x67, 0xa7, 0x49, 0xa2, 0xdc, 0x24, 0xbd, 0x26, 0x59, 0x87, 0x49, 0xaf, 0x39,
+	0x9d, 0xd8, 0x26, 0x9e, 0xfc, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x37, 0x82, 0x1b, 0x4b, 0xcb, 0x03,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign_group.pb.go b/googleapis/ads/googleads/v0/resources/campaign_group.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b5cf7d30b957a5a50b9d5b6df1a1aca7de0b2c4b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign_group.pb.go
@@ -0,0 +1,133 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign_group.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A campaign group.
+type CampaignGroup struct {
+	// The resource name of the campaign group.
+	// Campaign group resource names have the form:
+	//
+	// `customers/{customer_id}/campaignGroups/{campaign_group_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the campaign group.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the campaign group.
+	//
+	// This field is required and should not be empty when creating new campaign
+	// groups.
+	//
+	// It must not contain any null (code point 0x0), NL line feed
+	// (code point 0xA) or carriage return (code point 0xD) characters.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of the campaign group.
+	//
+	// When a new campaign group is added, the status defaults to ENABLED.
+	Status               enums.CampaignGroupStatusEnum_CampaignGroupStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.CampaignGroupStatusEnum_CampaignGroupStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                          `json:"-"`
+	XXX_unrecognized     []byte                                            `json:"-"`
+	XXX_sizecache        int32                                             `json:"-"`
+}
+
+func (m *CampaignGroup) Reset()         { *m = CampaignGroup{} }
+func (m *CampaignGroup) String() string { return proto.CompactTextString(m) }
+func (*CampaignGroup) ProtoMessage()    {}
+func (*CampaignGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_14ee489e1e23e16b, []int{0}
+}
+func (m *CampaignGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignGroup.Unmarshal(m, b)
+}
+func (m *CampaignGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignGroup.Marshal(b, m, deterministic)
+}
+func (dst *CampaignGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignGroup.Merge(dst, src)
+}
+func (m *CampaignGroup) XXX_Size() int {
+	return xxx_messageInfo_CampaignGroup.Size(m)
+}
+func (m *CampaignGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignGroup proto.InternalMessageInfo
+
+func (m *CampaignGroup) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignGroup) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CampaignGroup) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CampaignGroup) GetStatus() enums.CampaignGroupStatusEnum_CampaignGroupStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignGroupStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CampaignGroup)(nil), "google.ads.googleads.v0.resources.CampaignGroup")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign_group.proto", fileDescriptor_campaign_group_14ee489e1e23e16b)
+}
+
+var fileDescriptor_campaign_group_14ee489e1e23e16b = []byte{
+	// 351 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcf, 0x4a, 0xeb, 0x40,
+	0x14, 0xc6, 0x99, 0xb4, 0xb7, 0x70, 0xe7, 0xde, 0xba, 0xc8, 0xaa, 0x54, 0x91, 0x56, 0x11, 0x0a,
+	0xc2, 0x49, 0xa8, 0x52, 0x10, 0x57, 0xa9, 0x48, 0xb1, 0x0b, 0x29, 0x29, 0x74, 0x21, 0x81, 0x32,
+	0x6d, 0xc6, 0x21, 0xd0, 0xcc, 0x84, 0x99, 0x4c, 0x7d, 0x1f, 0x97, 0x3e, 0x8a, 0x2f, 0xe0, 0xa3,
+	0xb8, 0x95, 0xcc, 0x24, 0x81, 0xaa, 0xd5, 0xdd, 0x97, 0x93, 0xdf, 0xf7, 0x9d, 0x3f, 0x09, 0x1e,
+	0x31, 0x21, 0xd8, 0x86, 0x7a, 0x24, 0x56, 0x9e, 0x95, 0x85, 0xda, 0xfa, 0x9e, 0xa4, 0x4a, 0x68,
+	0xb9, 0xa6, 0xca, 0x5b, 0x93, 0x34, 0x23, 0x09, 0xe3, 0x4b, 0x26, 0x85, 0xce, 0x20, 0x93, 0x22,
+	0x17, 0x6e, 0xdf, 0xc2, 0x40, 0x62, 0x05, 0xb5, 0x0f, 0xb6, 0x3e, 0xd4, 0xbe, 0xee, 0xd5, 0xbe,
+	0x68, 0xca, 0x75, 0xfa, 0x39, 0x76, 0xa9, 0x72, 0x92, 0x6b, 0x65, 0xd3, 0xbb, 0xc7, 0xa5, 0xd5,
+	0x3c, 0xad, 0xf4, 0xa3, 0xf7, 0x24, 0x49, 0x96, 0x51, 0x59, 0xbe, 0x3f, 0x79, 0x47, 0xb8, 0x7d,
+	0x53, 0xfa, 0x27, 0x85, 0xdd, 0x3d, 0xc5, 0xed, 0xaa, 0xf3, 0x92, 0x93, 0x94, 0x76, 0x50, 0x0f,
+	0x0d, 0xfe, 0x86, 0xff, 0xab, 0xe2, 0x3d, 0x49, 0xa9, 0x7b, 0x8e, 0x9d, 0x24, 0xee, 0x34, 0x7a,
+	0x68, 0xf0, 0x6f, 0x78, 0x58, 0x8e, 0x0d, 0x55, 0x0f, 0xb8, 0xe3, 0xf9, 0xe8, 0x72, 0x41, 0x36,
+	0x9a, 0x86, 0x4e, 0x12, 0xbb, 0x3e, 0x6e, 0x9a, 0xa0, 0xa6, 0xc1, 0x8f, 0xbe, 0xe0, 0xf3, 0x5c,
+	0x26, 0x9c, 0x59, 0xde, 0x90, 0xee, 0x0a, 0xb7, 0xec, 0x16, 0x9d, 0x3f, 0x3d, 0x34, 0x38, 0x18,
+	0x4e, 0x61, 0xdf, 0x91, 0xcc, 0x05, 0x60, 0x67, 0x83, 0xb9, 0x71, 0xde, 0x72, 0x9d, 0x7e, 0x57,
+	0x0f, 0xcb, 0xe4, 0xf1, 0x1b, 0xc2, 0x67, 0x6b, 0x91, 0xc2, 0xaf, 0xe7, 0x1f, 0xbb, 0x3b, 0x31,
+	0xb3, 0x62, 0xec, 0x19, 0x7a, 0x98, 0x96, 0x46, 0x26, 0x36, 0x84, 0x33, 0x10, 0x92, 0x79, 0x8c,
+	0x72, 0xb3, 0x54, 0xf5, 0x91, 0xb2, 0x44, 0xfd, 0xf0, 0x3b, 0x5c, 0xd7, 0xea, 0xd9, 0x69, 0x4c,
+	0x82, 0xe0, 0xc5, 0xe9, 0x4f, 0x6c, 0x64, 0x10, 0x2b, 0xb0, 0xb2, 0x50, 0x0b, 0x1f, 0xc2, 0x8a,
+	0x7c, 0xad, 0x98, 0x28, 0x88, 0x55, 0x54, 0x33, 0xd1, 0xc2, 0x8f, 0x6a, 0x66, 0xd5, 0x32, 0x43,
+	0x5c, 0x7c, 0x04, 0x00, 0x00, 0xff, 0xff, 0x77, 0x85, 0x5a, 0x80, 0x92, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/campaign_shared_set.pb.go b/googleapis/ads/googleads/v0/resources/campaign_shared_set.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..119d5cf0e0109bec69555e2609cb2cfaff2c63da
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/campaign_shared_set.pb.go
@@ -0,0 +1,131 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/campaign_shared_set.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// CampaignSharedSets are used for managing the shared sets associated with a
+// campaign.
+type CampaignSharedSet struct {
+	// The resource name of the campaign shared set.
+	// Campaign shared set resource names have the form:
+	//
+	// `customers/{customer_id}/campaignSharedSets/{campaign_id}_{shared_set_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The campaign to which the campaign shared set belongs.
+	Campaign *wrappers.StringValue `protobuf:"bytes,3,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The shared set associated with the campaign. This may be a negative keyword
+	// shared set of another customer. This customer should be a manager of the
+	// other customer, otherwise the campaign shared set will exist but have no
+	// serving effect. Only negative keyword shared sets can be associated with
+	// Shopping campaigns. Only negative placement shared sets can be associated
+	// with Display mobile app campaigns.
+	SharedSet *wrappers.StringValue `protobuf:"bytes,4,opt,name=shared_set,json=sharedSet,proto3" json:"shared_set,omitempty"`
+	// The status of this campaign shared set. Read only.
+	Status               enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus `protobuf:"varint,2,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                  `json:"-"`
+	XXX_unrecognized     []byte                                                    `json:"-"`
+	XXX_sizecache        int32                                                     `json:"-"`
+}
+
+func (m *CampaignSharedSet) Reset()         { *m = CampaignSharedSet{} }
+func (m *CampaignSharedSet) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSet) ProtoMessage()    {}
+func (*CampaignSharedSet) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_5be2acea5bdaff30, []int{0}
+}
+func (m *CampaignSharedSet) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSet.Unmarshal(m, b)
+}
+func (m *CampaignSharedSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSet.Marshal(b, m, deterministic)
+}
+func (dst *CampaignSharedSet) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSet.Merge(dst, src)
+}
+func (m *CampaignSharedSet) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSet.Size(m)
+}
+func (m *CampaignSharedSet) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSet proto.InternalMessageInfo
+
+func (m *CampaignSharedSet) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CampaignSharedSet) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *CampaignSharedSet) GetSharedSet() *wrappers.StringValue {
+	if m != nil {
+		return m.SharedSet
+	}
+	return nil
+}
+
+func (m *CampaignSharedSet) GetStatus() enums.CampaignSharedSetStatusEnum_CampaignSharedSetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.CampaignSharedSetStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CampaignSharedSet)(nil), "google.ads.googleads.v0.resources.CampaignSharedSet")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/campaign_shared_set.proto", fileDescriptor_campaign_shared_set_5be2acea5bdaff30)
+}
+
+var fileDescriptor_campaign_shared_set_5be2acea5bdaff30 = []byte{
+	// 350 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4f, 0x4b, 0xc3, 0x30,
+	0x1c, 0xa5, 0x9d, 0x0c, 0x17, 0xff, 0x80, 0x3d, 0x48, 0x19, 0x22, 0x9b, 0x22, 0xec, 0xf4, 0x6b,
+	0x99, 0x17, 0x61, 0x20, 0x74, 0x22, 0x03, 0x0f, 0x32, 0x5a, 0xd8, 0x41, 0x0a, 0x25, 0x5b, 0x63,
+	0x9c, 0xac, 0x49, 0x49, 0xda, 0xf9, 0x61, 0xbc, 0x79, 0xf4, 0xa3, 0xf8, 0x15, 0xfc, 0x32, 0xb2,
+	0x36, 0x89, 0x87, 0x59, 0xf5, 0xf6, 0xda, 0xbc, 0xf7, 0x7e, 0xef, 0xe5, 0x17, 0x34, 0xa2, 0x9c,
+	0xd3, 0x15, 0xf1, 0x70, 0x2a, 0xbd, 0x1a, 0x6e, 0xd0, 0xda, 0xf7, 0x04, 0x91, 0xbc, 0x14, 0x0b,
+	0x22, 0xbd, 0x05, 0xce, 0x72, 0xbc, 0xa4, 0x2c, 0x91, 0x4f, 0x58, 0x90, 0x34, 0x91, 0xa4, 0x80,
+	0x5c, 0xf0, 0x82, 0x3b, 0xfd, 0x5a, 0x01, 0x38, 0x95, 0x60, 0xc4, 0xb0, 0xf6, 0xc1, 0x88, 0xbb,
+	0xd7, 0x4d, 0xfe, 0x84, 0x95, 0xd9, 0x8f, 0xde, 0x89, 0x2c, 0x70, 0x51, 0xca, 0x7a, 0x44, 0xf7,
+	0x54, 0xe9, 0xab, 0xaf, 0x79, 0xf9, 0xe8, 0xbd, 0x08, 0x9c, 0xe7, 0x44, 0xa8, 0xf3, 0xb3, 0x57,
+	0x1b, 0x1d, 0xdd, 0x28, 0x93, 0xa8, 0xf2, 0x88, 0x48, 0xe1, 0x9c, 0xa3, 0x03, 0x1d, 0x21, 0x61,
+	0x38, 0x23, 0xae, 0xd5, 0xb3, 0x06, 0x9d, 0x70, 0x5f, 0xff, 0xbc, 0xc7, 0x19, 0x71, 0xae, 0xd0,
+	0xae, 0x1e, 0xef, 0xb6, 0x7a, 0xd6, 0x60, 0x6f, 0x78, 0xa2, 0x5a, 0x80, 0x9e, 0x06, 0x51, 0x21,
+	0x96, 0x8c, 0xce, 0xf0, 0xaa, 0x24, 0xa1, 0x61, 0x3b, 0x23, 0x84, 0xbe, 0xf3, 0xba, 0x3b, 0xff,
+	0xd0, 0x76, 0xa4, 0xc9, 0xf6, 0x8c, 0xda, 0x75, 0x43, 0xd7, 0xee, 0x59, 0x83, 0xc3, 0x61, 0x08,
+	0x4d, 0xb7, 0x58, 0x5d, 0x11, 0x6c, 0xb5, 0x8b, 0x2a, 0xf5, 0x2d, 0x2b, 0xb3, 0xa6, 0xb3, 0x50,
+	0x4d, 0x18, 0x7f, 0x5a, 0xe8, 0x62, 0xc1, 0x33, 0xf8, 0x73, 0x4f, 0xe3, 0xe3, 0x2d, 0xab, 0xe9,
+	0xa6, 0xc7, 0xd4, 0x7a, 0xb8, 0x53, 0x62, 0xca, 0x57, 0x98, 0x51, 0xe0, 0x82, 0x7a, 0x94, 0xb0,
+	0xaa, 0xa5, 0xde, 0x68, 0xbe, 0x94, 0xbf, 0x3c, 0xa0, 0x91, 0x41, 0x6f, 0x76, 0x6b, 0x12, 0x04,
+	0xef, 0x76, 0x7f, 0x52, 0x5b, 0x06, 0xa9, 0x84, 0x1a, 0x6e, 0xd0, 0xcc, 0x87, 0x50, 0x33, 0x3f,
+	0x34, 0x27, 0x0e, 0x52, 0x19, 0x1b, 0x4e, 0x3c, 0xf3, 0x63, 0xc3, 0x99, 0xb7, 0xab, 0x10, 0x97,
+	0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xc4, 0xbd, 0xff, 0xc4, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/carrier_constant.pb.go b/googleapis/ads/googleads/v0/resources/carrier_constant.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5c09e6515e29a40709f3d46b8e898543cc146534
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/carrier_constant.pb.go
@@ -0,0 +1,124 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/carrier_constant.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A carrier criterion that can be used in campaign targeting.
+type CarrierConstant struct {
+	// The resource name of the carrier criterion.
+	// Carrier criterion resource names have the form:
+	//
+	// `carrierConstants/{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the carrier criterion.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The full name of the carrier in English.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The country code of the country where the carrier is located, e.g., "AR",
+	// "FR", etc.
+	CountryCode          *wrappers.StringValue `protobuf:"bytes,4,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CarrierConstant) Reset()         { *m = CarrierConstant{} }
+func (m *CarrierConstant) String() string { return proto.CompactTextString(m) }
+func (*CarrierConstant) ProtoMessage()    {}
+func (*CarrierConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_carrier_constant_35c37f2f532b03be, []int{0}
+}
+func (m *CarrierConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CarrierConstant.Unmarshal(m, b)
+}
+func (m *CarrierConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CarrierConstant.Marshal(b, m, deterministic)
+}
+func (dst *CarrierConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CarrierConstant.Merge(dst, src)
+}
+func (m *CarrierConstant) XXX_Size() int {
+	return xxx_messageInfo_CarrierConstant.Size(m)
+}
+func (m *CarrierConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_CarrierConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CarrierConstant proto.InternalMessageInfo
+
+func (m *CarrierConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CarrierConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *CarrierConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *CarrierConstant) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CarrierConstant)(nil), "google.ads.googleads.v0.resources.CarrierConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/carrier_constant.proto", fileDescriptor_carrier_constant_35c37f2f532b03be)
+}
+
+var fileDescriptor_carrier_constant_35c37f2f532b03be = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x4b, 0xf3, 0x30,
+	0x18, 0xc7, 0x69, 0x37, 0x5e, 0x78, 0xb3, 0x89, 0x50, 0x3c, 0x0c, 0x15, 0xd9, 0x14, 0x61, 0x20,
+	0xa4, 0x45, 0x45, 0x04, 0x0f, 0xd2, 0xed, 0x30, 0xf4, 0x20, 0x63, 0xc2, 0x0e, 0x52, 0x18, 0x59,
+	0x12, 0x43, 0x61, 0xcb, 0x53, 0x92, 0x74, 0xe2, 0xd7, 0xf1, 0xe8, 0x47, 0xf1, 0x03, 0x08, 0x7e,
+	0x1b, 0x69, 0xd2, 0xf4, 0xa0, 0xa0, 0xde, 0xfe, 0x84, 0xdf, 0xff, 0xf7, 0x24, 0x79, 0xd0, 0xa5,
+	0x00, 0x10, 0x2b, 0x1e, 0x13, 0xa6, 0x63, 0x17, 0xab, 0xb4, 0x49, 0x62, 0xc5, 0x35, 0x94, 0x8a,
+	0x72, 0x1d, 0x53, 0xa2, 0x54, 0xce, 0xd5, 0x82, 0x82, 0xd4, 0x86, 0x48, 0x83, 0x0b, 0x05, 0x06,
+	0xa2, 0x81, 0xc3, 0x31, 0x61, 0x1a, 0x37, 0x4d, 0xbc, 0x49, 0x70, 0xd3, 0xdc, 0x3d, 0xa8, 0xe5,
+	0xb6, 0xb0, 0x2c, 0x1f, 0xe3, 0x27, 0x45, 0x8a, 0x82, 0x2b, 0xed, 0x14, 0x87, 0xef, 0x01, 0xda,
+	0x1e, 0x3b, 0xfb, 0xb8, 0x96, 0x47, 0x47, 0x68, 0xcb, 0x0b, 0x16, 0x92, 0xac, 0x79, 0x2f, 0xe8,
+	0x07, 0xc3, 0xff, 0xb3, 0xae, 0x3f, 0xbc, 0x23, 0x6b, 0x1e, 0x9d, 0xa0, 0x30, 0x67, 0xbd, 0xb0,
+	0x1f, 0x0c, 0x3b, 0xa7, 0x7b, 0xf5, 0x74, 0xec, 0xa7, 0xe0, 0x1b, 0x69, 0x2e, 0xce, 0xe7, 0x64,
+	0x55, 0xf2, 0x59, 0x98, 0xb3, 0x28, 0x41, 0x6d, 0x2b, 0x6a, 0x59, 0x7c, 0xff, 0x1b, 0x7e, 0x6f,
+	0x54, 0x2e, 0x85, 0xe3, 0x2d, 0x19, 0x5d, 0xa3, 0x2e, 0x85, 0x52, 0x1a, 0xf5, 0xbc, 0xa0, 0xc0,
+	0x78, 0xaf, 0xfd, 0x87, 0x66, 0xa7, 0x6e, 0x8c, 0x81, 0xf1, 0xd1, 0x47, 0x80, 0x8e, 0x29, 0xac,
+	0xf1, 0xaf, 0x5f, 0x34, 0xda, 0xf9, 0xf2, 0xfe, 0x69, 0xe5, 0x9e, 0x06, 0x0f, 0xb7, 0x75, 0x55,
+	0xc0, 0x8a, 0x48, 0x81, 0x41, 0x89, 0x58, 0x70, 0x69, 0x27, 0xfb, 0x3d, 0x15, 0xb9, 0xfe, 0x61,
+	0x6d, 0x57, 0x4d, 0x7a, 0x09, 0x5b, 0x93, 0x34, 0x7d, 0x0d, 0x07, 0x13, 0xa7, 0x4c, 0x99, 0xc6,
+	0x2e, 0x56, 0x69, 0x9e, 0xe0, 0x99, 0x27, 0xdf, 0x3c, 0x93, 0xa5, 0x4c, 0x67, 0x0d, 0x93, 0xcd,
+	0x93, 0xac, 0x61, 0x96, 0xff, 0xec, 0x25, 0xce, 0x3e, 0x03, 0x00, 0x00, 0xff, 0xff, 0x00, 0x76,
+	0x3f, 0x4b, 0x3a, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/change_status.pb.go b/googleapis/ads/googleads/v0/resources/change_status.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..770cb5a23d4f626d8b47878a702d61c3a9b3a9a1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/change_status.pb.go
@@ -0,0 +1,181 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/change_status.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Describes the status of returned resource.
+type ChangeStatus struct {
+	// The resource name of the change status.
+	// Change status resource names have the form:
+	//
+	// `customers/{customer_id}/changeStatus/{change_status_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Time at which the most recent change has occurred on this resource.
+	LastChangeDateTime *wrappers.StringValue `protobuf:"bytes,3,opt,name=last_change_date_time,json=lastChangeDateTime,proto3" json:"last_change_date_time,omitempty"`
+	// Represents the type of the changed resource. This dictates what fields
+	// will be set. For example, for AD_GROUP, campaign and ad_group fields will
+	// be set.
+	ResourceType enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType `protobuf:"varint,4,opt,name=resource_type,json=resourceType,proto3,enum=google.ads.googleads.v0.enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType" json:"resource_type,omitempty"`
+	// The Campaign affected by this change.
+	Campaign *wrappers.StringValue `protobuf:"bytes,5,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The AdGroup affected by this change.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,6,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Represents the status of the changed resource.
+	ResourceStatus enums.ChangeStatusOperationEnum_ChangeStatusOperation `protobuf:"varint,8,opt,name=resource_status,json=resourceStatus,proto3,enum=google.ads.googleads.v0.enums.ChangeStatusOperationEnum_ChangeStatusOperation" json:"resource_status,omitempty"`
+	// The AdGroupAd affected by this change.
+	AdGroupAd *wrappers.StringValue `protobuf:"bytes,9,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
+	// The AdGroupCriterion affected by this change.
+	AdGroupCriterion *wrappers.StringValue `protobuf:"bytes,10,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
+	// The CampaignCriterion affected by this change.
+	CampaignCriterion    *wrappers.StringValue `protobuf:"bytes,11,opt,name=campaign_criterion,json=campaignCriterion,proto3" json:"campaign_criterion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ChangeStatus) Reset()         { *m = ChangeStatus{} }
+func (m *ChangeStatus) String() string { return proto.CompactTextString(m) }
+func (*ChangeStatus) ProtoMessage()    {}
+func (*ChangeStatus) Descriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_c2a3b58499ad5eda, []int{0}
+}
+func (m *ChangeStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeStatus.Unmarshal(m, b)
+}
+func (m *ChangeStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeStatus.Marshal(b, m, deterministic)
+}
+func (dst *ChangeStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeStatus.Merge(dst, src)
+}
+func (m *ChangeStatus) XXX_Size() int {
+	return xxx_messageInfo_ChangeStatus.Size(m)
+}
+func (m *ChangeStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeStatus.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeStatus proto.InternalMessageInfo
+
+func (m *ChangeStatus) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ChangeStatus) GetLastChangeDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.LastChangeDateTime
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetResourceType() enums.ChangeStatusResourceTypeEnum_ChangeStatusResourceType {
+	if m != nil {
+		return m.ResourceType
+	}
+	return enums.ChangeStatusResourceTypeEnum_UNSPECIFIED
+}
+
+func (m *ChangeStatus) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetResourceStatus() enums.ChangeStatusOperationEnum_ChangeStatusOperation {
+	if m != nil {
+		return m.ResourceStatus
+	}
+	return enums.ChangeStatusOperationEnum_UNSPECIFIED
+}
+
+func (m *ChangeStatus) GetAdGroupAd() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupAd
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetAdGroupCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroupCriterion
+	}
+	return nil
+}
+
+func (m *ChangeStatus) GetCampaignCriterion() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignCriterion
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ChangeStatus)(nil), "google.ads.googleads.v0.resources.ChangeStatus")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/change_status.proto", fileDescriptor_change_status_c2a3b58499ad5eda)
+}
+
+var fileDescriptor_change_status_c2a3b58499ad5eda = []byte{
+	// 486 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x51, 0x6b, 0xd4, 0x40,
+	0x10, 0xc7, 0x49, 0x6b, 0x6b, 0x6f, 0xaf, 0x56, 0xbb, 0x20, 0x84, 0x22, 0x72, 0x55, 0x84, 0x7b,
+	0xda, 0x1c, 0x15, 0x51, 0xa8, 0x20, 0x69, 0x95, 0x83, 0x0a, 0x6d, 0xb9, 0x1e, 0xf7, 0x20, 0x07,
+	0x61, 0x9a, 0x8c, 0x6b, 0xe0, 0xb2, 0x1b, 0x76, 0x37, 0x2d, 0xf7, 0x75, 0x7c, 0xf4, 0x63, 0xf8,
+	0xe8, 0x07, 0xf0, 0xf3, 0x48, 0x92, 0xdd, 0xf5, 0x50, 0x4e, 0xd3, 0xb7, 0xd9, 0xec, 0xfc, 0x7f,
+	0x33, 0xff, 0xd9, 0xdd, 0x90, 0x57, 0x5c, 0x4a, 0xbe, 0xc0, 0x08, 0x32, 0x1d, 0xb5, 0x61, 0x1d,
+	0xdd, 0x8c, 0x22, 0x85, 0x5a, 0x56, 0x2a, 0x45, 0x1d, 0xa5, 0x5f, 0x40, 0x70, 0x4c, 0xb4, 0x01,
+	0x53, 0x69, 0x56, 0x2a, 0x69, 0x24, 0x3d, 0x6c, 0x73, 0x19, 0x64, 0x9a, 0x79, 0x19, 0xbb, 0x19,
+	0x31, 0x2f, 0x3b, 0x38, 0x5e, 0x47, 0x46, 0x51, 0x15, 0x7f, 0x50, 0x13, 0x59, 0xa2, 0x02, 0x93,
+	0x4b, 0xd1, 0xf2, 0x0f, 0xde, 0xdd, 0x45, 0xec, 0x6a, 0x26, 0x66, 0x59, 0xa2, 0x05, 0x3c, 0xb5,
+	0x80, 0x66, 0x75, 0x5d, 0x7d, 0x8e, 0x6e, 0x15, 0x94, 0x25, 0x2a, 0x6b, 0xe0, 0xd9, 0xf7, 0x2d,
+	0xb2, 0x7b, 0xda, 0x50, 0xae, 0x1a, 0x08, 0x7d, 0x4e, 0x1e, 0x78, 0x8e, 0x80, 0x02, 0xc3, 0x60,
+	0x10, 0x0c, 0x7b, 0x93, 0x5d, 0xf7, 0xf1, 0x1c, 0x0a, 0xa4, 0x17, 0xe4, 0xf1, 0x02, 0xb4, 0x49,
+	0x6c, 0xfd, 0x0c, 0x0c, 0x26, 0x26, 0x2f, 0x30, 0xdc, 0x1c, 0x04, 0xc3, 0xfe, 0xd1, 0x13, 0x3b,
+	0x0b, 0xe6, 0xaa, 0xb2, 0x2b, 0xa3, 0x72, 0xc1, 0x67, 0xb0, 0xa8, 0x70, 0x42, 0x6b, 0x69, 0x5b,
+	0xf3, 0x3d, 0x18, 0x9c, 0xe6, 0x05, 0xd2, 0xe5, 0x4a, 0xd5, 0xba, 0xfb, 0xf0, 0xde, 0x20, 0x18,
+	0xee, 0x1d, 0x4d, 0xd9, 0xba, 0xf9, 0x36, 0xfe, 0xd9, 0x6a, 0xe7, 0x13, 0xab, 0x9f, 0x2e, 0x4b,
+	0xfc, 0x20, 0xaa, 0x62, 0xed, 0xe6, 0x6f, 0x2f, 0xf5, 0x8a, 0xbe, 0x21, 0x3b, 0x29, 0x14, 0x25,
+	0xe4, 0x5c, 0x84, 0x5b, 0x1d, 0xda, 0xf7, 0xd9, 0xf4, 0x35, 0xd9, 0x81, 0x2c, 0xe1, 0x4a, 0x56,
+	0x65, 0xb8, 0xdd, 0x41, 0x79, 0x1f, 0xb2, 0x71, 0x9d, 0x4c, 0x6f, 0xc9, 0x43, 0xef, 0xb6, 0x3d,
+	0xbb, 0x70, 0xa7, 0xf1, 0x7b, 0x7e, 0x07, 0xbf, 0x17, 0xee, 0xaa, 0xfc, 0x65, 0xd6, 0xef, 0x4c,
+	0xf6, 0x5c, 0x19, 0x7b, 0xb8, 0x6f, 0x49, 0xdf, 0x75, 0x9c, 0x40, 0x16, 0xf6, 0x3a, 0x34, 0xdd,
+	0xb3, 0x4d, 0xc7, 0x19, 0x3d, 0x23, 0xd4, 0xab, 0x53, 0x95, 0x1b, 0x54, 0xb9, 0x14, 0x21, 0xe9,
+	0x00, 0x79, 0x64, 0x21, 0xa7, 0x4e, 0x45, 0x3f, 0x12, 0xea, 0xe6, 0xb8, 0xc2, 0xea, 0x77, 0x60,
+	0xed, 0x3b, 0x9d, 0x87, 0x9d, 0xfc, 0x0c, 0xc8, 0x8b, 0x54, 0x16, 0xec, 0xbf, 0x8f, 0xf1, 0x64,
+	0x7f, 0x75, 0x4e, 0x97, 0x35, 0xfe, 0x32, 0xf8, 0x74, 0x66, 0x75, 0x5c, 0x2e, 0x40, 0x70, 0x26,
+	0x15, 0x8f, 0x38, 0x8a, 0xa6, 0xb8, 0x7b, 0x74, 0x65, 0xae, 0xff, 0xf1, 0x6b, 0x38, 0xf6, 0xd1,
+	0xd7, 0x8d, 0xcd, 0x71, 0x1c, 0x7f, 0xdb, 0x38, 0x1c, 0xb7, 0xc8, 0x38, 0xd3, 0xac, 0x0d, 0xeb,
+	0x68, 0x36, 0x62, 0xee, 0x22, 0xea, 0x1f, 0x2e, 0x67, 0x1e, 0x67, 0x7a, 0xee, 0x73, 0xe6, 0xb3,
+	0xd1, 0xdc, 0xe7, 0x5c, 0x6f, 0x37, 0x4d, 0xbc, 0xfc, 0x15, 0x00, 0x00, 0xff, 0xff, 0x76, 0xfb,
+	0xc9, 0xbc, 0x9e, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/conversion_action.pb.go b/googleapis/ads/googleads/v0/resources/conversion_action.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..09170f40bbd13d34fc9347b70469504d69eaa73c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/conversion_action.pb.go
@@ -0,0 +1,401 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/conversion_action.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A conversion action.
+type ConversionAction struct {
+	// The resource name of the conversion action.
+	// Conversion action resource names have the form:
+	//
+	// `customers/{customer_id}/conversionActions/{conversion_action_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the conversion action.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the conversion action.
+	//
+	// This field is required and should not be empty when creating new
+	// conversion actions.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of this conversion action for conversion event accrual.
+	Status enums.ConversionActionStatusEnum_ConversionActionStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.ConversionActionStatusEnum_ConversionActionStatus" json:"status,omitempty"`
+	// The type of this conversion action.
+	Type enums.ConversionActionTypeEnum_ConversionActionType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.ConversionActionTypeEnum_ConversionActionType" json:"type,omitempty"`
+	// The category of conversions reported for this conversion action.
+	Category enums.ConversionActionCategoryEnum_ConversionActionCategory `protobuf:"varint,6,opt,name=category,proto3,enum=google.ads.googleads.v0.enums.ConversionActionCategoryEnum_ConversionActionCategory" json:"category,omitempty"`
+	// The resource name of the conversion action owner customer, or null if this
+	// is a system-defined conversion action.
+	OwnerCustomer *wrappers.StringValue `protobuf:"bytes,7,opt,name=owner_customer,json=ownerCustomer,proto3" json:"owner_customer,omitempty"`
+	// Whether this conversion action should be included in the "conversions"
+	// metric.
+	IncludeInConversionsMetric *wrappers.BoolValue `protobuf:"bytes,8,opt,name=include_in_conversions_metric,json=includeInConversionsMetric,proto3" json:"include_in_conversions_metric,omitempty"`
+	// The maximum number of days that may elapse between an interaction
+	// (e.g., a click) and a conversion event.
+	ClickThroughLookbackWindowDays *wrappers.Int64Value `protobuf:"bytes,9,opt,name=click_through_lookback_window_days,json=clickThroughLookbackWindowDays,proto3" json:"click_through_lookback_window_days,omitempty"`
+	// The maximum number of days which may elapse between an impression and a
+	// conversion without an interaction.
+	ViewThroughLookbackWindowDays *wrappers.Int64Value `protobuf:"bytes,10,opt,name=view_through_lookback_window_days,json=viewThroughLookbackWindowDays,proto3" json:"view_through_lookback_window_days,omitempty"`
+	// Settings related to the value for conversion events associated with this
+	// conversion action.
+	ValueSettings *ConversionAction_ValueSettings `protobuf:"bytes,11,opt,name=value_settings,json=valueSettings,proto3" json:"value_settings,omitempty"`
+	// How to count conversion events for the conversion action.
+	CountingType enums.ConversionActionCountingTypeEnum_ConversionActionCountingType `protobuf:"varint,12,opt,name=counting_type,json=countingType,proto3,enum=google.ads.googleads.v0.enums.ConversionActionCountingTypeEnum_ConversionActionCountingType" json:"counting_type,omitempty"`
+	// Settings related to this conversion action's attribution model.
+	AttributionModelSettings *ConversionAction_AttributionModelSettings `protobuf:"bytes,13,opt,name=attribution_model_settings,json=attributionModelSettings,proto3" json:"attribution_model_settings,omitempty"`
+	// The snippets used for tracking conversions.
+	TagSnippets []*common.TagSnippet `protobuf:"bytes,14,rep,name=tag_snippets,json=tagSnippets,proto3" json:"tag_snippets,omitempty"`
+	// The phone call duration in seconds after which a conversion should be
+	// reported for this conversion action.
+	//
+	// The value must be between 0 and 10000, inclusive.
+	PhoneCallDurationSeconds *wrappers.Int64Value `protobuf:"bytes,15,opt,name=phone_call_duration_seconds,json=phoneCallDurationSeconds,proto3" json:"phone_call_duration_seconds,omitempty"`
+	// App ID for an app conversion action.
+	AppId                *wrappers.StringValue `protobuf:"bytes,16,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ConversionAction) Reset()         { *m = ConversionAction{} }
+func (m *ConversionAction) String() string { return proto.CompactTextString(m) }
+func (*ConversionAction) ProtoMessage()    {}
+func (*ConversionAction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_062b3205e664191a, []int{0}
+}
+func (m *ConversionAction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAction.Unmarshal(m, b)
+}
+func (m *ConversionAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAction.Marshal(b, m, deterministic)
+}
+func (dst *ConversionAction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAction.Merge(dst, src)
+}
+func (m *ConversionAction) XXX_Size() int {
+	return xxx_messageInfo_ConversionAction.Size(m)
+}
+func (m *ConversionAction) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAction proto.InternalMessageInfo
+
+func (m *ConversionAction) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *ConversionAction) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetStatus() enums.ConversionActionStatusEnum_ConversionActionStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.ConversionActionStatusEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetType() enums.ConversionActionTypeEnum_ConversionActionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.ConversionActionTypeEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetCategory() enums.ConversionActionCategoryEnum_ConversionActionCategory {
+	if m != nil {
+		return m.Category
+	}
+	return enums.ConversionActionCategoryEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetOwnerCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.OwnerCustomer
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetIncludeInConversionsMetric() *wrappers.BoolValue {
+	if m != nil {
+		return m.IncludeInConversionsMetric
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetClickThroughLookbackWindowDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.ClickThroughLookbackWindowDays
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetViewThroughLookbackWindowDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.ViewThroughLookbackWindowDays
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetValueSettings() *ConversionAction_ValueSettings {
+	if m != nil {
+		return m.ValueSettings
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetCountingType() enums.ConversionActionCountingTypeEnum_ConversionActionCountingType {
+	if m != nil {
+		return m.CountingType
+	}
+	return enums.ConversionActionCountingTypeEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction) GetAttributionModelSettings() *ConversionAction_AttributionModelSettings {
+	if m != nil {
+		return m.AttributionModelSettings
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetTagSnippets() []*common.TagSnippet {
+	if m != nil {
+		return m.TagSnippets
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetPhoneCallDurationSeconds() *wrappers.Int64Value {
+	if m != nil {
+		return m.PhoneCallDurationSeconds
+	}
+	return nil
+}
+
+func (m *ConversionAction) GetAppId() *wrappers.StringValue {
+	if m != nil {
+		return m.AppId
+	}
+	return nil
+}
+
+// Settings related to this conversion action's attribution model.
+type ConversionAction_AttributionModelSettings struct {
+	// The attribution model type of this conversion action.
+	AttributionModel enums.AttributionModelEnum_AttributionModel `protobuf:"varint,1,opt,name=attribution_model,json=attributionModel,proto3,enum=google.ads.googleads.v0.enums.AttributionModelEnum_AttributionModel" json:"attribution_model,omitempty"`
+	// The status of the data-driven attribution model for the conversion
+	// action.
+	DataDrivenModelStatus enums.DataDrivenModelStatusEnum_DataDrivenModelStatus `protobuf:"varint,2,opt,name=data_driven_model_status,json=dataDrivenModelStatus,proto3,enum=google.ads.googleads.v0.enums.DataDrivenModelStatusEnum_DataDrivenModelStatus" json:"data_driven_model_status,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}                                              `json:"-"`
+	XXX_unrecognized      []byte                                                `json:"-"`
+	XXX_sizecache         int32                                                 `json:"-"`
+}
+
+func (m *ConversionAction_AttributionModelSettings) Reset() {
+	*m = ConversionAction_AttributionModelSettings{}
+}
+func (m *ConversionAction_AttributionModelSettings) String() string { return proto.CompactTextString(m) }
+func (*ConversionAction_AttributionModelSettings) ProtoMessage()    {}
+func (*ConversionAction_AttributionModelSettings) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_062b3205e664191a, []int{0, 0}
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAction_AttributionModelSettings.Unmarshal(m, b)
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAction_AttributionModelSettings.Marshal(b, m, deterministic)
+}
+func (dst *ConversionAction_AttributionModelSettings) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAction_AttributionModelSettings.Merge(dst, src)
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_Size() int {
+	return xxx_messageInfo_ConversionAction_AttributionModelSettings.Size(m)
+}
+func (m *ConversionAction_AttributionModelSettings) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAction_AttributionModelSettings.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAction_AttributionModelSettings proto.InternalMessageInfo
+
+func (m *ConversionAction_AttributionModelSettings) GetAttributionModel() enums.AttributionModelEnum_AttributionModel {
+	if m != nil {
+		return m.AttributionModel
+	}
+	return enums.AttributionModelEnum_UNSPECIFIED
+}
+
+func (m *ConversionAction_AttributionModelSettings) GetDataDrivenModelStatus() enums.DataDrivenModelStatusEnum_DataDrivenModelStatus {
+	if m != nil {
+		return m.DataDrivenModelStatus
+	}
+	return enums.DataDrivenModelStatusEnum_UNSPECIFIED
+}
+
+// Settings related to the value for conversion events associated with this
+// conversion action.
+type ConversionAction_ValueSettings struct {
+	// The value to use when conversion events for this conversion action are
+	// sent with an invalid, disallowed or missing value, or when
+	// this conversion action is configured to always use the default value.
+	DefaultValue *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
+	// The currency code to use when conversion events for this conversion
+	// action are sent with an invalid or missing currency code, or when this
+	// conversion action is configured to always use the default value.
+	DefaultCurrencyCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=default_currency_code,json=defaultCurrencyCode,proto3" json:"default_currency_code,omitempty"`
+	// Controls whether the default value and default currency code are used in
+	// place of the value and currency code specified in conversion events for
+	// this conversion action.
+	AlwaysUseDefaultValue *wrappers.BoolValue `protobuf:"bytes,3,opt,name=always_use_default_value,json=alwaysUseDefaultValue,proto3" json:"always_use_default_value,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}            `json:"-"`
+	XXX_unrecognized      []byte              `json:"-"`
+	XXX_sizecache         int32               `json:"-"`
+}
+
+func (m *ConversionAction_ValueSettings) Reset()         { *m = ConversionAction_ValueSettings{} }
+func (m *ConversionAction_ValueSettings) String() string { return proto.CompactTextString(m) }
+func (*ConversionAction_ValueSettings) ProtoMessage()    {}
+func (*ConversionAction_ValueSettings) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_062b3205e664191a, []int{0, 1}
+}
+func (m *ConversionAction_ValueSettings) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionAction_ValueSettings.Unmarshal(m, b)
+}
+func (m *ConversionAction_ValueSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionAction_ValueSettings.Marshal(b, m, deterministic)
+}
+func (dst *ConversionAction_ValueSettings) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionAction_ValueSettings.Merge(dst, src)
+}
+func (m *ConversionAction_ValueSettings) XXX_Size() int {
+	return xxx_messageInfo_ConversionAction_ValueSettings.Size(m)
+}
+func (m *ConversionAction_ValueSettings) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionAction_ValueSettings.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionAction_ValueSettings proto.InternalMessageInfo
+
+func (m *ConversionAction_ValueSettings) GetDefaultValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.DefaultValue
+	}
+	return nil
+}
+
+func (m *ConversionAction_ValueSettings) GetDefaultCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.DefaultCurrencyCode
+	}
+	return nil
+}
+
+func (m *ConversionAction_ValueSettings) GetAlwaysUseDefaultValue() *wrappers.BoolValue {
+	if m != nil {
+		return m.AlwaysUseDefaultValue
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ConversionAction)(nil), "google.ads.googleads.v0.resources.ConversionAction")
+	proto.RegisterType((*ConversionAction_AttributionModelSettings)(nil), "google.ads.googleads.v0.resources.ConversionAction.AttributionModelSettings")
+	proto.RegisterType((*ConversionAction_ValueSettings)(nil), "google.ads.googleads.v0.resources.ConversionAction.ValueSettings")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/conversion_action.proto", fileDescriptor_conversion_action_062b3205e664191a)
+}
+
+var fileDescriptor_conversion_action_062b3205e664191a = []byte{
+	// 937 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdf, 0x6a, 0x23, 0xb7,
+	0x17, 0x66, 0x9c, 0x6c, 0x7e, 0xbb, 0x8a, 0xed, 0xcd, 0x4f, 0x25, 0x30, 0x78, 0xbb, 0x4b, 0xb2,
+	0xa5, 0x10, 0x5a, 0x18, 0x1b, 0x6f, 0x5b, 0xe8, 0x1f, 0x0a, 0x8e, 0x5d, 0x96, 0x94, 0x64, 0x09,
+	0xe3, 0x34, 0x85, 0xc5, 0x45, 0x95, 0x25, 0xed, 0x78, 0xc8, 0x8c, 0x34, 0x95, 0x34, 0x36, 0xbe,
+	0xec, 0x55, 0xa1, 0x2f, 0xd0, 0xfb, 0x5e, 0xf6, 0x0d, 0xfa, 0x0a, 0x7d, 0x84, 0xbe, 0x49, 0xef,
+	0xca, 0x68, 0x34, 0x13, 0xc7, 0xf6, 0xc4, 0x71, 0xef, 0xa4, 0xd1, 0xf9, 0xbe, 0xef, 0x9c, 0xa3,
+	0x73, 0x8e, 0x06, 0x7c, 0x1e, 0x08, 0x11, 0x44, 0xac, 0x8d, 0xa9, 0x6a, 0xe7, 0xcb, 0x6c, 0x35,
+	0xed, 0xb4, 0x25, 0x53, 0x22, 0x95, 0x84, 0xa9, 0x36, 0x11, 0x7c, 0xca, 0xa4, 0x0a, 0x05, 0x47,
+	0x98, 0xe8, 0x50, 0x70, 0x2f, 0x91, 0x42, 0x0b, 0x78, 0x9c, 0xdb, 0x7b, 0x98, 0x2a, 0xaf, 0x84,
+	0x7a, 0xd3, 0x8e, 0x57, 0x42, 0x5b, 0x9d, 0x2a, 0x76, 0x22, 0xe2, 0x58, 0xf0, 0xb6, 0xc6, 0x01,
+	0x52, 0x3c, 0x4c, 0x12, 0xa6, 0x73, 0xd2, 0xd6, 0xa7, 0x55, 0x08, 0xc6, 0xd3, 0x58, 0xb5, 0xb1,
+	0xd6, 0x32, 0x1c, 0xa7, 0x99, 0x17, 0x28, 0x16, 0x94, 0x45, 0x16, 0xf6, 0xf5, 0xfd, 0xb0, 0x95,
+	0x10, 0x10, 0xc1, 0x9a, 0x05, 0x42, 0xce, 0x2d, 0xbe, 0xbf, 0x35, 0x5e, 0xa4, 0x5c, 0x87, 0x3c,
+	0x40, 0x7a, 0x9e, 0x30, 0x4b, 0xf2, 0xd5, 0xb6, 0x24, 0x4a, 0x63, 0x9d, 0x2a, 0x8b, 0xfe, 0x62,
+	0x5b, 0xf4, 0xc3, 0x95, 0x29, 0xd6, 0x18, 0x51, 0x19, 0x4e, 0x99, 0xcd, 0xda, 0x5d, 0xe5, 0x17,
+	0x16, 0x6d, 0x76, 0xe3, 0xf4, 0x5d, 0x7b, 0x26, 0x71, 0x92, 0x30, 0x69, 0xcf, 0x5f, 0xfe, 0xf9,
+	0x14, 0x1c, 0xf4, 0x4b, 0xf9, 0x9e, 0x51, 0x87, 0x1f, 0x80, 0x46, 0x71, 0xcf, 0x88, 0xe3, 0x98,
+	0xb9, 0xce, 0x91, 0x73, 0xf2, 0xc4, 0xaf, 0x17, 0x1f, 0xdf, 0xe0, 0x98, 0xc1, 0x8f, 0x41, 0x2d,
+	0xa4, 0x6e, 0xed, 0xc8, 0x39, 0xd9, 0xef, 0x3e, 0xb3, 0x45, 0xe2, 0x15, 0x32, 0xde, 0x19, 0xd7,
+	0x9f, 0x7d, 0x72, 0x8d, 0xa3, 0x94, 0xf9, 0xb5, 0x90, 0xc2, 0x0e, 0xd8, 0x35, 0x44, 0x3b, 0xc6,
+	0xfc, 0xfd, 0x15, 0xf3, 0xa1, 0x96, 0x21, 0x0f, 0x72, 0x7b, 0x63, 0x09, 0x27, 0x60, 0x2f, 0x0f,
+	0xc4, 0xdd, 0x3d, 0x72, 0x4e, 0x9a, 0xdd, 0x4b, 0xaf, 0xaa, 0x24, 0x4d, 0x1e, 0xbc, 0xe5, 0x20,
+	0x86, 0x06, 0xfc, 0x0d, 0x4f, 0xe3, 0x8a, 0x23, 0xdf, 0xf2, 0xc3, 0x1f, 0xc1, 0x6e, 0x96, 0x6e,
+	0xf7, 0x91, 0xd1, 0x39, 0xdf, 0x52, 0xe7, 0x6a, 0x9e, 0xb0, 0xb5, 0x2a, 0xd9, 0x81, 0x6f, 0x98,
+	0x61, 0x02, 0x1e, 0x17, 0x35, 0xe9, 0xee, 0x19, 0x95, 0xab, 0x2d, 0x55, 0xfa, 0x16, 0xbe, 0x56,
+	0xa9, 0x38, 0xf4, 0x4b, 0x15, 0xd8, 0x07, 0x4d, 0x31, 0xe3, 0x4c, 0x22, 0x92, 0x2a, 0x2d, 0x62,
+	0x26, 0xdd, 0xff, 0x3d, 0x20, 0xf3, 0x0d, 0x83, 0xe9, 0x5b, 0x08, 0xfc, 0x01, 0x3c, 0x0f, 0x39,
+	0x89, 0x52, 0xca, 0x50, 0x98, 0x75, 0x45, 0xa1, 0xaa, 0x50, 0xcc, 0xb4, 0x0c, 0x89, 0xfb, 0xd8,
+	0x70, 0xb6, 0x56, 0x38, 0x4f, 0x85, 0x88, 0x72, 0xc6, 0x96, 0x25, 0x38, 0xe3, 0xb7, 0x4e, 0xab,
+	0x0b, 0x83, 0x86, 0x01, 0x78, 0x49, 0xa2, 0x90, 0xdc, 0x20, 0x3d, 0x91, 0x22, 0x0d, 0x26, 0x28,
+	0x12, 0xe2, 0x66, 0x8c, 0xc9, 0x0d, 0x9a, 0x85, 0x9c, 0x8a, 0x19, 0xa2, 0x78, 0xae, 0xdc, 0x27,
+	0x9b, 0x0b, 0xec, 0x85, 0xa1, 0xb9, 0xca, 0x59, 0xce, 0x2d, 0xc9, 0xf7, 0x86, 0x63, 0x80, 0xe7,
+	0x0a, 0x32, 0x70, 0x3c, 0x0d, 0xd9, 0xec, 0x7e, 0x1d, 0xb0, 0x59, 0xe7, 0x79, 0xc6, 0x52, 0x2d,
+	0x33, 0x01, 0xcd, 0x69, 0x66, 0x87, 0x14, 0xd3, 0xd9, 0xf8, 0x50, 0xee, 0xbe, 0xe1, 0xec, 0x79,
+	0x1b, 0x87, 0xe9, 0xca, 0x95, 0x7a, 0x46, 0x71, 0x68, 0x89, 0xfc, 0xc6, 0x74, 0x71, 0x0b, 0x7f,
+	0x76, 0x40, 0xe3, 0xce, 0x90, 0x72, 0xeb, 0xa6, 0xaa, 0x46, 0xdb, 0x56, 0x95, 0xe5, 0xa8, 0xac,
+	0xe1, 0x45, 0x03, 0xbf, 0x4e, 0x16, 0x76, 0xf0, 0x57, 0x07, 0xb4, 0x56, 0x26, 0xf6, 0x6d, 0xe8,
+	0x0d, 0x13, 0xfa, 0xf9, 0x7f, 0x09, 0xbd, 0x77, 0xcb, 0x7a, 0x91, 0x91, 0x96, 0x59, 0x70, 0x71,
+	0xc5, 0x09, 0xbc, 0x00, 0xf5, 0x85, 0xe7, 0x46, 0xb9, 0xcd, 0xa3, 0x9d, 0x93, 0xfd, 0xee, 0x47,
+	0x95, 0xea, 0xf9, 0x13, 0xe5, 0x5d, 0xe1, 0x60, 0x98, 0x43, 0xfc, 0x7d, 0x5d, 0xae, 0x15, 0x7c,
+	0x0b, 0x9e, 0x25, 0x13, 0xc1, 0x19, 0x22, 0x38, 0x8a, 0x10, 0x4d, 0x25, 0xce, 0x47, 0x3a, 0x23,
+	0x82, 0x53, 0xe5, 0x3e, 0xdd, 0x5c, 0x2a, 0xae, 0xc1, 0xf7, 0x71, 0x14, 0x0d, 0x2c, 0x7a, 0x98,
+	0x83, 0xe1, 0x2b, 0xb0, 0x87, 0x93, 0x04, 0x85, 0xd4, 0x3d, 0x78, 0x40, 0x47, 0x3e, 0xc2, 0x49,
+	0x72, 0x46, 0x5b, 0xbf, 0xd5, 0x80, 0x5b, 0x95, 0x16, 0xf8, 0x13, 0xf8, 0xff, 0xca, 0x45, 0x98,
+	0x89, 0xdd, 0xec, 0x0e, 0x36, 0x14, 0xc4, 0x32, 0xa7, 0x29, 0x82, 0xe5, 0x8f, 0xfe, 0xc1, 0x72,
+	0xde, 0xe1, 0x2f, 0x0e, 0x70, 0xab, 0x1e, 0x1e, 0xf3, 0x24, 0x34, 0xbb, 0x6f, 0x36, 0x48, 0x0f,
+	0xb0, 0xc6, 0x03, 0x83, 0xce, 0xa3, 0xb9, 0x1d, 0xd7, 0x6b, 0x4f, 0xfc, 0x43, 0xba, 0xee, 0x73,
+	0xeb, 0x1f, 0x07, 0x34, 0xee, 0xf4, 0x0a, 0xec, 0x81, 0x06, 0x65, 0xef, 0x70, 0x1a, 0x69, 0x64,
+	0xba, 0xc6, 0xa4, 0x62, 0x5d, 0x9e, 0x07, 0x22, 0x1d, 0x47, 0x2c, 0xcf, 0x73, 0xdd, 0x42, 0xcc,
+	0x0e, 0x5e, 0x82, 0xc3, 0x82, 0x82, 0xa4, 0x52, 0x32, 0x4e, 0xe6, 0x88, 0x08, 0xca, 0xec, 0x6b,
+	0x77, 0xff, 0x95, 0xbd, 0x67, 0xa1, 0x7d, 0x8b, 0xec, 0x0b, 0xca, 0xe0, 0x10, 0xb8, 0x38, 0x9a,
+	0xe1, 0xb9, 0x42, 0xa9, 0x62, 0xe8, 0xae, 0x7f, 0x3b, 0x1b, 0xa7, 0xe8, 0x61, 0x8e, 0xfd, 0x4e,
+	0xb1, 0xc1, 0x82, 0x9b, 0xa7, 0x7f, 0x3b, 0xe0, 0x43, 0x22, 0xe2, 0xcd, 0x3d, 0x76, 0x7a, 0xb8,
+	0xdc, 0x64, 0x97, 0x99, 0xc8, 0xa5, 0xf3, 0xf6, 0x5b, 0x8b, 0x0d, 0x44, 0x84, 0x79, 0xe0, 0x09,
+	0x19, 0xb4, 0x03, 0xc6, 0x8d, 0x0b, 0xc5, 0xcf, 0x46, 0x12, 0xaa, 0x7b, 0xfe, 0x20, 0xbf, 0x2c,
+	0x57, 0xbf, 0xd7, 0x76, 0x5e, 0xf7, 0x7a, 0x7f, 0xd4, 0x8e, 0x5f, 0xe7, 0x94, 0x3d, 0xaa, 0xbc,
+	0x7c, 0x99, 0xad, 0xae, 0x3b, 0x9e, 0x5f, 0x58, 0xfe, 0x55, 0xd8, 0x8c, 0x7a, 0x54, 0x8d, 0x4a,
+	0x9b, 0xd1, 0x75, 0x67, 0x54, 0xda, 0x8c, 0xf7, 0x8c, 0x13, 0xaf, 0xfe, 0x0d, 0x00, 0x00, 0xff,
+	0xff, 0xe2, 0x37, 0x9d, 0xcc, 0xc5, 0x0a, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/customer.pb.go b/googleapis/ads/googleads/v0/resources/customer.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..983414be502295589e5b191014b79b20d28bd7e1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/customer.pb.go
@@ -0,0 +1,258 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/customer.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A customer.
+type Customer struct {
+	// The resource name of the customer.
+	// Customer resource names have the form:
+	//
+	// `customers/{customer_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the customer.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// Optional, non-unique descriptive name of the customer.
+	DescriptiveName *wrappers.StringValue `protobuf:"bytes,4,opt,name=descriptive_name,json=descriptiveName,proto3" json:"descriptive_name,omitempty"`
+	// The currency in which the account operates.
+	// A subset of the currency codes from the ISO 4217 standard is
+	// supported.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// The local timezone ID of the customer.
+	TimeZone *wrappers.StringValue `protobuf:"bytes,6,opt,name=time_zone,json=timeZone,proto3" json:"time_zone,omitempty"`
+	// The URL template for constructing a tracking URL out of parameters.
+	TrackingUrlTemplate *wrappers.StringValue `protobuf:"bytes,7,opt,name=tracking_url_template,json=trackingUrlTemplate,proto3" json:"tracking_url_template,omitempty"`
+	// The URL template for appending params to the final URL
+	FinalUrlSuffix *wrappers.StringValue `protobuf:"bytes,11,opt,name=final_url_suffix,json=finalUrlSuffix,proto3" json:"final_url_suffix,omitempty"`
+	// Whether auto-tagging is enabled for the customer.
+	AutoTaggingEnabled *wrappers.BoolValue `protobuf:"bytes,8,opt,name=auto_tagging_enabled,json=autoTaggingEnabled,proto3" json:"auto_tagging_enabled,omitempty"`
+	// Whether the Customer has a Partners program badge. If the Customer is not
+	// associated with the Partners program, this will be false. For more
+	// information, see https://support.google.com/partners/answer/3125774.
+	HasPartnersBadge *wrappers.BoolValue `protobuf:"bytes,9,opt,name=has_partners_badge,json=hasPartnersBadge,proto3" json:"has_partners_badge,omitempty"`
+	// Call reporting setting for a customer.
+	CallReportingSetting *CallReportingSetting `protobuf:"bytes,10,opt,name=call_reporting_setting,json=callReportingSetting,proto3" json:"call_reporting_setting,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Customer) Reset()         { *m = Customer{} }
+func (m *Customer) String() string { return proto.CompactTextString(m) }
+func (*Customer) ProtoMessage()    {}
+func (*Customer) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_1a67549631f2cc56, []int{0}
+}
+func (m *Customer) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Customer.Unmarshal(m, b)
+}
+func (m *Customer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Customer.Marshal(b, m, deterministic)
+}
+func (dst *Customer) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Customer.Merge(dst, src)
+}
+func (m *Customer) XXX_Size() int {
+	return xxx_messageInfo_Customer.Size(m)
+}
+func (m *Customer) XXX_DiscardUnknown() {
+	xxx_messageInfo_Customer.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Customer proto.InternalMessageInfo
+
+func (m *Customer) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Customer) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Customer) GetDescriptiveName() *wrappers.StringValue {
+	if m != nil {
+		return m.DescriptiveName
+	}
+	return nil
+}
+
+func (m *Customer) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *Customer) GetTimeZone() *wrappers.StringValue {
+	if m != nil {
+		return m.TimeZone
+	}
+	return nil
+}
+
+func (m *Customer) GetTrackingUrlTemplate() *wrappers.StringValue {
+	if m != nil {
+		return m.TrackingUrlTemplate
+	}
+	return nil
+}
+
+func (m *Customer) GetFinalUrlSuffix() *wrappers.StringValue {
+	if m != nil {
+		return m.FinalUrlSuffix
+	}
+	return nil
+}
+
+func (m *Customer) GetAutoTaggingEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.AutoTaggingEnabled
+	}
+	return nil
+}
+
+func (m *Customer) GetHasPartnersBadge() *wrappers.BoolValue {
+	if m != nil {
+		return m.HasPartnersBadge
+	}
+	return nil
+}
+
+func (m *Customer) GetCallReportingSetting() *CallReportingSetting {
+	if m != nil {
+		return m.CallReportingSetting
+	}
+	return nil
+}
+
+// Call reporting setting for a customer.
+type CallReportingSetting struct {
+	// Enable reporting of phone call events by redirecting them via Google
+	// System.
+	CallReportingEnabled *wrappers.BoolValue `protobuf:"bytes,1,opt,name=call_reporting_enabled,json=callReportingEnabled,proto3" json:"call_reporting_enabled,omitempty"`
+	// Whether to enable call conversion reporting.
+	CallConversionReportingEnabled *wrappers.BoolValue `protobuf:"bytes,2,opt,name=call_conversion_reporting_enabled,json=callConversionReportingEnabled,proto3" json:"call_conversion_reporting_enabled,omitempty"`
+	// Customer-level call conversion action to attribute a call conversion to.
+	// If not set a default conversion action is used. Only in effect when
+	// call_conversion_reporting_enabled is set to true.
+	CallConversionAction *wrappers.StringValue `protobuf:"bytes,9,opt,name=call_conversion_action,json=callConversionAction,proto3" json:"call_conversion_action,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CallReportingSetting) Reset()         { *m = CallReportingSetting{} }
+func (m *CallReportingSetting) String() string { return proto.CompactTextString(m) }
+func (*CallReportingSetting) ProtoMessage()    {}
+func (*CallReportingSetting) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_1a67549631f2cc56, []int{1}
+}
+func (m *CallReportingSetting) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallReportingSetting.Unmarshal(m, b)
+}
+func (m *CallReportingSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallReportingSetting.Marshal(b, m, deterministic)
+}
+func (dst *CallReportingSetting) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallReportingSetting.Merge(dst, src)
+}
+func (m *CallReportingSetting) XXX_Size() int {
+	return xxx_messageInfo_CallReportingSetting.Size(m)
+}
+func (m *CallReportingSetting) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallReportingSetting.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallReportingSetting proto.InternalMessageInfo
+
+func (m *CallReportingSetting) GetCallReportingEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallReportingEnabled
+	}
+	return nil
+}
+
+func (m *CallReportingSetting) GetCallConversionReportingEnabled() *wrappers.BoolValue {
+	if m != nil {
+		return m.CallConversionReportingEnabled
+	}
+	return nil
+}
+
+func (m *CallReportingSetting) GetCallConversionAction() *wrappers.StringValue {
+	if m != nil {
+		return m.CallConversionAction
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Customer)(nil), "google.ads.googleads.v0.resources.Customer")
+	proto.RegisterType((*CallReportingSetting)(nil), "google.ads.googleads.v0.resources.CallReportingSetting")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/customer.proto", fileDescriptor_customer_1a67549631f2cc56)
+}
+
+var fileDescriptor_customer_1a67549631f2cc56 = []byte{
+	// 570 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xdd, 0x6a, 0x13, 0x41,
+	0x14, 0xc7, 0x49, 0x6a, 0x6b, 0x3b, 0x6d, 0xb5, 0x8c, 0x51, 0x96, 0x2a, 0xa5, 0xad, 0x08, 0x05,
+	0x61, 0x12, 0x54, 0x14, 0xf1, 0x6a, 0x13, 0xb4, 0x2a, 0x22, 0x61, 0xfb, 0x71, 0x51, 0x02, 0xcb,
+	0x64, 0xf6, 0x64, 0x3b, 0x38, 0x3b, 0xb3, 0xcc, 0xcc, 0xc6, 0x8f, 0xc7, 0xd1, 0x3b, 0x9f, 0xc3,
+	0x2b, 0x2f, 0x7d, 0x22, 0xd9, 0xd9, 0x9d, 0xa5, 0x25, 0xa1, 0xc9, 0x55, 0x0e, 0xc3, 0xff, 0xf7,
+	0x3b, 0x27, 0xb3, 0xc3, 0x41, 0xbd, 0x54, 0xa9, 0x54, 0x40, 0x97, 0x26, 0xa6, 0x5b, 0x95, 0x65,
+	0x35, 0xed, 0x75, 0x35, 0x18, 0x55, 0x68, 0x06, 0xa6, 0xcb, 0x0a, 0x63, 0x55, 0x06, 0x9a, 0xe4,
+	0x5a, 0x59, 0x85, 0x0f, 0xaa, 0x18, 0xa1, 0x89, 0x21, 0x0d, 0x41, 0xa6, 0x3d, 0xd2, 0x10, 0xbb,
+	0x7b, 0xb5, 0xd4, 0x01, 0xe3, 0x62, 0xd2, 0xfd, 0xaa, 0x69, 0x9e, 0x83, 0x36, 0x95, 0xe2, 0xf0,
+	0xcf, 0x2a, 0x5a, 0x1f, 0xd4, 0x56, 0xfc, 0x18, 0x6d, 0x7b, 0x32, 0x96, 0x34, 0x83, 0xa0, 0xb5,
+	0xdf, 0x3a, 0xda, 0x88, 0xb6, 0xfc, 0xe1, 0x67, 0x9a, 0x01, 0x7e, 0x8a, 0xda, 0x3c, 0x09, 0x56,
+	0xf6, 0x5b, 0x47, 0x9b, 0xcf, 0x1e, 0xd6, 0x6d, 0x89, 0xd7, 0x93, 0x0f, 0xd2, 0xbe, 0x7c, 0x71,
+	0x4e, 0x45, 0x01, 0x51, 0x9b, 0x27, 0xf8, 0x18, 0xed, 0x24, 0x60, 0x98, 0xe6, 0xb9, 0xe5, 0xd3,
+	0x5a, 0x7a, 0xcb, 0xa1, 0x8f, 0x66, 0xd0, 0x13, 0xab, 0xb9, 0x4c, 0x2b, 0xf6, 0xee, 0x15, 0xca,
+	0x75, 0x0d, 0xd1, 0x36, 0x2b, 0xb4, 0x06, 0xc9, 0xbe, 0xc7, 0x4c, 0x25, 0x10, 0xac, 0x2e, 0x61,
+	0xd9, 0xf2, 0xc8, 0x40, 0x25, 0x80, 0x5f, 0xa3, 0x0d, 0xcb, 0x33, 0x88, 0x7f, 0x28, 0x09, 0xc1,
+	0xda, 0x12, 0xf8, 0x7a, 0x19, 0xbf, 0x50, 0x12, 0xf0, 0x10, 0xdd, 0xb7, 0x9a, 0xb2, 0x2f, 0x5c,
+	0xa6, 0x71, 0xa1, 0x45, 0x6c, 0x21, 0xcb, 0x05, 0xb5, 0x10, 0xdc, 0x5e, 0x42, 0x73, 0xcf, 0xa3,
+	0x67, 0x5a, 0x9c, 0xd6, 0x20, 0x7e, 0x87, 0x76, 0x26, 0x5c, 0x52, 0xe1, 0x74, 0xa6, 0x98, 0x4c,
+	0xf8, 0xb7, 0x60, 0x73, 0x09, 0xd9, 0x1d, 0x47, 0x9d, 0x69, 0x71, 0xe2, 0x18, 0xfc, 0x09, 0x75,
+	0x68, 0x61, 0x55, 0x6c, 0x69, 0x9a, 0x96, 0xd3, 0x81, 0xa4, 0x63, 0x01, 0x49, 0xb0, 0xee, 0x5c,
+	0xbb, 0x33, 0xae, 0xbe, 0x52, 0xa2, 0x32, 0xe1, 0x92, 0x3b, 0xad, 0xb0, 0xb7, 0x15, 0x85, 0xdf,
+	0x23, 0x7c, 0x49, 0x4d, 0x9c, 0x53, 0x6d, 0x25, 0x68, 0x13, 0x8f, 0x69, 0x92, 0x42, 0xb0, 0xb1,
+	0xd0, 0xb5, 0x73, 0x49, 0xcd, 0xb0, 0x86, 0xfa, 0x25, 0x83, 0x33, 0xf4, 0x80, 0x51, 0x21, 0x62,
+	0x0d, 0xb9, 0xd2, 0xb6, 0x9c, 0xcc, 0x80, 0x2d, 0x7f, 0x03, 0xe4, 0x6c, 0xaf, 0xc8, 0xc2, 0xb7,
+	0x4b, 0x06, 0x54, 0x88, 0xc8, 0xf3, 0x27, 0x15, 0x1e, 0x75, 0xd8, 0x9c, 0xd3, 0xc3, 0x5f, 0x6d,
+	0xd4, 0x99, 0x17, 0xc7, 0xc3, 0x99, 0x39, 0xfc, 0x0d, 0xb5, 0x16, 0xfe, 0xab, 0xeb, 0xad, 0xfc,
+	0x1d, 0x01, 0x3a, 0x70, 0x46, 0xa6, 0xe4, 0x14, 0xb4, 0xe1, 0x4a, 0xce, 0x91, 0xb7, 0x17, 0xca,
+	0xf7, 0x4a, 0xc9, 0xa0, 0x71, 0xcc, 0xb4, 0x89, 0xea, 0xc1, 0xaf, 0xb4, 0xa1, 0xcc, 0x72, 0x25,
+	0xeb, 0xcf, 0x71, 0xf3, 0x33, 0xe9, 0x5c, 0xb7, 0x87, 0x8e, 0xec, 0xff, 0x6b, 0xa1, 0x27, 0x4c,
+	0x65, 0x8b, 0xaf, 0xbe, 0xbf, 0xed, 0x77, 0xc2, 0xb0, 0xb4, 0x0f, 0x5b, 0x17, 0x1f, 0x6b, 0x26,
+	0x55, 0x82, 0xca, 0x94, 0x28, 0x9d, 0x76, 0x53, 0x90, 0xae, 0xb7, 0x5f, 0x56, 0x39, 0x37, 0x37,
+	0xec, 0xae, 0x37, 0x4d, 0xf5, 0xb3, 0xbd, 0x72, 0x1c, 0x86, 0xbf, 0xdb, 0x07, 0xc7, 0x95, 0x32,
+	0x4c, 0x0c, 0xa9, 0xca, 0xb2, 0x3a, 0xef, 0x91, 0xc8, 0x27, 0xff, 0xfa, 0xcc, 0x28, 0x4c, 0xcc,
+	0xa8, 0xc9, 0x8c, 0xce, 0x7b, 0xa3, 0x26, 0x33, 0x5e, 0x73, 0x43, 0x3c, 0xff, 0x1f, 0x00, 0x00,
+	0xff, 0xff, 0xe1, 0x9c, 0xcb, 0x74, 0x3f, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/customer_client.pb.go b/googleapis/ads/googleads/v0/resources/customer_client.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5942abff985b62cd741a396b645a86927aa633d1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/customer_client.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/customer_client.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// For a manager, it returns all the customers in its hierarchy and self.
+type CustomerClient struct {
+	// The resource name of the customer client.
+	// CustomerClient resource names have the form:
+	// `customers/{customer_id}/customerClients/{client_customer_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The client customer linked to this customer. Read only.
+	ClientCustomer *wrappers.StringValue `protobuf:"bytes,3,opt,name=client_customer,json=clientCustomer,proto3" json:"client_customer,omitempty"`
+	// Whether the client is hidden or not. Default value is false. Read only.
+	Hidden *wrappers.BoolValue `protobuf:"bytes,4,opt,name=hidden,proto3" json:"hidden,omitempty"`
+	// Distance between customer and client. For self link, the level value will
+	// be 0. Read only.
+	Level                *wrappers.Int64Value `protobuf:"bytes,5,opt,name=level,proto3" json:"level,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CustomerClient) Reset()         { *m = CustomerClient{} }
+func (m *CustomerClient) String() string { return proto.CompactTextString(m) }
+func (*CustomerClient) ProtoMessage()    {}
+func (*CustomerClient) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_client_4e068b1367c0b0ff, []int{0}
+}
+func (m *CustomerClient) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerClient.Unmarshal(m, b)
+}
+func (m *CustomerClient) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerClient.Marshal(b, m, deterministic)
+}
+func (dst *CustomerClient) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerClient.Merge(dst, src)
+}
+func (m *CustomerClient) XXX_Size() int {
+	return xxx_messageInfo_CustomerClient.Size(m)
+}
+func (m *CustomerClient) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerClient.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerClient proto.InternalMessageInfo
+
+func (m *CustomerClient) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerClient) GetClientCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.ClientCustomer
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetHidden() *wrappers.BoolValue {
+	if m != nil {
+		return m.Hidden
+	}
+	return nil
+}
+
+func (m *CustomerClient) GetLevel() *wrappers.Int64Value {
+	if m != nil {
+		return m.Level
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomerClient)(nil), "google.ads.googleads.v0.resources.CustomerClient")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/customer_client.proto", fileDescriptor_customer_client_4e068b1367c0b0ff)
+}
+
+var fileDescriptor_customer_client_4e068b1367c0b0ff = []byte{
+	// 331 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x4b, 0xf3, 0x30,
+	0x18, 0xc7, 0xe9, 0xf6, 0x6e, 0xf0, 0x46, 0x9d, 0x50, 0x2f, 0x65, 0x8a, 0x6c, 0x8a, 0xb0, 0x53,
+	0x5a, 0xa7, 0xe8, 0xc1, 0x53, 0x37, 0x64, 0xe8, 0x41, 0xc6, 0x84, 0x1d, 0xa4, 0x30, 0xb2, 0xf6,
+	0x31, 0x16, 0xd2, 0xa4, 0x24, 0xed, 0xfc, 0x3e, 0x1e, 0xfd, 0x28, 0x7e, 0x02, 0xef, 0x7e, 0x11,
+	0x69, 0xd2, 0x14, 0x64, 0xa0, 0xb7, 0x3f, 0xe1, 0xf7, 0xfb, 0x3f, 0x0f, 0x79, 0xd0, 0x35, 0x15,
+	0x82, 0x32, 0xf0, 0x49, 0xa2, 0x7c, 0x13, 0xab, 0xb4, 0x09, 0x7c, 0x09, 0x4a, 0x94, 0x32, 0x06,
+	0xe5, 0xc7, 0xa5, 0x2a, 0x44, 0x06, 0x72, 0x15, 0xb3, 0x14, 0x78, 0x81, 0x73, 0x29, 0x0a, 0xe1,
+	0x0e, 0x0d, 0x8d, 0x49, 0xa2, 0x70, 0x23, 0xe2, 0x4d, 0x80, 0x1b, 0xb1, 0x7f, 0x5c, 0x77, 0x6b,
+	0x61, 0x5d, 0x3e, 0xfb, 0xaf, 0x92, 0xe4, 0x39, 0x48, 0x65, 0x2a, 0x4e, 0xbe, 0x1c, 0xd4, 0x9b,
+	0xd6, 0xe5, 0x53, 0xdd, 0xed, 0x9e, 0xa2, 0x3d, 0xeb, 0xaf, 0x38, 0xc9, 0xc0, 0x73, 0x06, 0xce,
+	0xe8, 0xff, 0x62, 0xd7, 0x3e, 0x3e, 0x90, 0x0c, 0xdc, 0x5b, 0xb4, 0x6f, 0x56, 0x59, 0xd9, 0xd5,
+	0xbc, 0xf6, 0xc0, 0x19, 0xed, 0x8c, 0x8f, 0xea, 0x4d, 0xb0, 0x9d, 0x88, 0x1f, 0x0b, 0x99, 0x72,
+	0xba, 0x24, 0xac, 0x84, 0x45, 0xcf, 0x48, 0x76, 0xa2, 0x3b, 0x46, 0xdd, 0x97, 0x34, 0x49, 0x80,
+	0x7b, 0xff, 0xb4, 0xdd, 0xdf, 0xb2, 0x27, 0x42, 0x30, 0xe3, 0xd6, 0xa4, 0x7b, 0x8e, 0x3a, 0x0c,
+	0x36, 0xc0, 0xbc, 0x8e, 0x56, 0x0e, 0xb7, 0x94, 0x3b, 0x5e, 0x5c, 0x5d, 0x1a, 0xc7, 0x90, 0x93,
+	0x4f, 0x07, 0x9d, 0xc5, 0x22, 0xc3, 0x7f, 0xfe, 0xd7, 0xe4, 0xe0, 0xe7, 0x67, 0xcc, 0xab, 0xce,
+	0xb9, 0xf3, 0x74, 0x5f, 0x9b, 0x54, 0x30, 0xc2, 0x29, 0x16, 0x92, 0xfa, 0x14, 0xb8, 0x9e, 0x68,
+	0x4f, 0x96, 0xa7, 0xea, 0x97, 0x0b, 0xde, 0x34, 0xe9, 0xad, 0xd5, 0x9e, 0x85, 0xe1, 0x7b, 0x6b,
+	0x38, 0x33, 0x95, 0x61, 0xa2, 0xb0, 0x89, 0x55, 0x5a, 0x06, 0x78, 0x61, 0xc9, 0x0f, 0xcb, 0x44,
+	0x61, 0xa2, 0xa2, 0x86, 0x89, 0x96, 0x41, 0xd4, 0x30, 0xeb, 0xae, 0x5e, 0xe2, 0xe2, 0x3b, 0x00,
+	0x00, 0xff, 0xff, 0x13, 0x2b, 0x34, 0x21, 0x45, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/customer_client_link.pb.go b/googleapis/ads/googleads/v0/resources/customer_client_link.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..78b8d206021aec23cbdd60211d68a9ec7c1c4fd4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/customer_client_link.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/customer_client_link.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Represents customer client link relationship.
+type CustomerClientLink struct {
+	// Name of the resource.
+	// CustomerClientLink resource names have the form:
+	//
+	// `customers/{customer_id}/customerClientLinks/{client_customer_id}_{manager_link_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The client customer linked to this customer. Read only.
+	ClientCustomer *wrappers.StringValue `protobuf:"bytes,3,opt,name=client_customer,json=clientCustomer,proto3" json:"client_customer,omitempty"`
+	// This is uniquely identifies a customer client link. Read only.
+	ManagerLinkId *wrappers.Int64Value `protobuf:"bytes,4,opt,name=manager_link_id,json=managerLinkId,proto3" json:"manager_link_id,omitempty"`
+	// This is the status of the link between client and manager.
+	Status enums.ManagerLinkStatusEnum_ManagerLinkStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.ManagerLinkStatusEnum_ManagerLinkStatus" json:"status,omitempty"`
+	// The visibility of the link. Users can choose whether or not to see hidden
+	// links in the AdWords UI.
+	// Default value is false
+	Hidden               *wrappers.BoolValue `protobuf:"bytes,6,opt,name=hidden,proto3" json:"hidden,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *CustomerClientLink) Reset()         { *m = CustomerClientLink{} }
+func (m *CustomerClientLink) String() string { return proto.CompactTextString(m) }
+func (*CustomerClientLink) ProtoMessage()    {}
+func (*CustomerClientLink) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_client_link_d7ddbf2da55444fb, []int{0}
+}
+func (m *CustomerClientLink) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerClientLink.Unmarshal(m, b)
+}
+func (m *CustomerClientLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerClientLink.Marshal(b, m, deterministic)
+}
+func (dst *CustomerClientLink) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerClientLink.Merge(dst, src)
+}
+func (m *CustomerClientLink) XXX_Size() int {
+	return xxx_messageInfo_CustomerClientLink.Size(m)
+}
+func (m *CustomerClientLink) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerClientLink.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerClientLink proto.InternalMessageInfo
+
+func (m *CustomerClientLink) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerClientLink) GetClientCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.ClientCustomer
+	}
+	return nil
+}
+
+func (m *CustomerClientLink) GetManagerLinkId() *wrappers.Int64Value {
+	if m != nil {
+		return m.ManagerLinkId
+	}
+	return nil
+}
+
+func (m *CustomerClientLink) GetStatus() enums.ManagerLinkStatusEnum_ManagerLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.ManagerLinkStatusEnum_UNSPECIFIED
+}
+
+func (m *CustomerClientLink) GetHidden() *wrappers.BoolValue {
+	if m != nil {
+		return m.Hidden
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CustomerClientLink)(nil), "google.ads.googleads.v0.resources.CustomerClientLink")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/customer_client_link.proto", fileDescriptor_customer_client_link_d7ddbf2da55444fb)
+}
+
+var fileDescriptor_customer_client_link_d7ddbf2da55444fb = []byte{
+	// 398 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xdd, 0xca, 0xd3, 0x30,
+	0x18, 0xa6, 0x9b, 0x16, 0x8c, 0x6e, 0x83, 0x9e, 0x58, 0xa6, 0xc8, 0xa6, 0x08, 0x3b, 0x4a, 0xcb,
+	0x14, 0x3d, 0xd0, 0x93, 0x6e, 0xcc, 0x31, 0x51, 0x19, 0x1d, 0xec, 0x40, 0x8a, 0x25, 0x6b, 0x62,
+	0x2c, 0x6b, 0x93, 0x92, 0xb4, 0xf3, 0x7e, 0x3c, 0xf4, 0x52, 0xbc, 0x03, 0xc1, 0x8b, 0x91, 0xe6,
+	0xa7, 0x22, 0x65, 0xdf, 0x77, 0xf6, 0x34, 0x7d, 0xfe, 0xde, 0xe4, 0x05, 0x6f, 0x29, 0xe7, 0xb4,
+	0x20, 0x01, 0xc2, 0x32, 0xd0, 0xb0, 0x45, 0x97, 0x30, 0x10, 0x44, 0xf2, 0x46, 0x64, 0x44, 0x06,
+	0x59, 0x23, 0x6b, 0x5e, 0x12, 0x91, 0x66, 0x45, 0x4e, 0x58, 0x9d, 0x16, 0x39, 0x3b, 0xc3, 0x4a,
+	0xf0, 0x9a, 0x7b, 0x73, 0x2d, 0x81, 0x08, 0x4b, 0xd8, 0xa9, 0xe1, 0x25, 0x84, 0x9d, 0x7a, 0xfa,
+	0xfa, 0x5a, 0x00, 0x61, 0x4d, 0x29, 0x83, 0x12, 0x31, 0x44, 0x89, 0x50, 0xa6, 0xa9, 0xac, 0x51,
+	0xdd, 0x48, 0xed, 0x3d, 0x7d, 0x62, 0x84, 0xea, 0xeb, 0xd4, 0x7c, 0x0d, 0xbe, 0x0b, 0x54, 0x55,
+	0x44, 0x98, 0xff, 0x4f, 0x7f, 0x0f, 0x80, 0xb7, 0x36, 0xd5, 0xd6, 0xaa, 0xd9, 0x87, 0x9c, 0x9d,
+	0xbd, 0x67, 0x60, 0x64, 0xc3, 0x53, 0x86, 0x4a, 0xe2, 0x3b, 0x33, 0x67, 0x71, 0x2f, 0x7e, 0x60,
+	0x0f, 0x3f, 0xa1, 0x92, 0x78, 0x1b, 0x30, 0x31, 0xc3, 0xd8, 0xe1, 0xfc, 0xe1, 0xcc, 0x59, 0xdc,
+	0x5f, 0x3e, 0x36, 0x63, 0x40, 0x9b, 0x0a, 0x0f, 0xb5, 0xc8, 0x19, 0x3d, 0xa2, 0xa2, 0x21, 0xf1,
+	0x58, 0x8b, 0x6c, 0xaa, 0xb7, 0x06, 0x93, 0xff, 0xfa, 0xe7, 0xd8, 0xbf, 0xa3, 0x6c, 0x1e, 0xf5,
+	0x6c, 0x76, 0xac, 0x7e, 0xf5, 0x52, 0xbb, 0x8c, 0x8c, 0xa6, 0xad, 0xbb, 0xc3, 0xde, 0x17, 0xe0,
+	0xea, 0xb9, 0xfd, 0xbb, 0x33, 0x67, 0x31, 0x5e, 0xbe, 0x83, 0xd7, 0x2e, 0x55, 0xdd, 0x18, 0xfc,
+	0xf8, 0x4f, 0x7d, 0x50, 0xba, 0x0d, 0x6b, 0xca, 0xfe, 0x69, 0x6c, 0x5c, 0xbd, 0x25, 0x70, 0xbf,
+	0xe5, 0x18, 0x13, 0xe6, 0xbb, 0xaa, 0xdb, 0xb4, 0xd7, 0x6d, 0xc5, 0x79, 0xa1, 0xab, 0x19, 0xe6,
+	0xea, 0x8f, 0x03, 0x9e, 0x67, 0xbc, 0x84, 0xb7, 0x3e, 0xef, 0xea, 0x61, 0xff, 0x09, 0xf6, 0xad,
+	0xef, 0xde, 0xf9, 0xfc, 0xde, 0xa8, 0x29, 0x2f, 0x10, 0xa3, 0x90, 0x0b, 0x1a, 0x50, 0xc2, 0x54,
+	0xaa, 0xdd, 0x84, 0x2a, 0x97, 0x37, 0x6c, 0xde, 0x9b, 0x0e, 0xfd, 0x18, 0x0c, 0xb7, 0x51, 0xf4,
+	0x73, 0x30, 0xdf, 0x6a, 0xcb, 0x08, 0x4b, 0xa8, 0x61, 0x8b, 0x8e, 0x21, 0x8c, 0x2d, 0xf3, 0x97,
+	0xe5, 0x24, 0x11, 0x96, 0x49, 0xc7, 0x49, 0x8e, 0x61, 0xd2, 0x71, 0x4e, 0xae, 0x2a, 0xf1, 0xe2,
+	0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xb0, 0x07, 0xf7, 0xfd, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/customer_feed.pb.go b/googleapis/ads/googleads/v0/resources/customer_feed.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9309144a690b7dee4933cf9a73b8a0ab94db6d6f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/customer_feed.pb.go
@@ -0,0 +1,145 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/customer_feed.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A customer feed.
+type CustomerFeed struct {
+	// The resource name of the customer feed.
+	// Customer feed resource names have the form:
+	//
+	// `customers/{customer_id}/customerFeeds/{feed_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed being linked to the customer.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// Indicates which placeholder types the feed may populate under the connected
+	// customer. Required.
+	PlaceholderTypes []enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,3,rep,packed,name=placeholder_types,json=placeholderTypes,proto3,enum=google.ads.googleads.v0.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_types,omitempty"`
+	// Matching function associated with the CustomerFeed.
+	// The matching function is used to filter the set of feed items selected.
+	// Required.
+	MatchingFunction *common.MatchingFunction `protobuf:"bytes,4,opt,name=matching_function,json=matchingFunction,proto3" json:"matching_function,omitempty"`
+	// Status of the customer feed.
+	// This field is read-only.
+	Status               enums.FeedLinkStatusEnum_FeedLinkStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.FeedLinkStatusEnum_FeedLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *CustomerFeed) Reset()         { *m = CustomerFeed{} }
+func (m *CustomerFeed) String() string { return proto.CompactTextString(m) }
+func (*CustomerFeed) ProtoMessage()    {}
+func (*CustomerFeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_ce4640adfc3deabc, []int{0}
+}
+func (m *CustomerFeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerFeed.Unmarshal(m, b)
+}
+func (m *CustomerFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerFeed.Marshal(b, m, deterministic)
+}
+func (dst *CustomerFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerFeed.Merge(dst, src)
+}
+func (m *CustomerFeed) XXX_Size() int {
+	return xxx_messageInfo_CustomerFeed.Size(m)
+}
+func (m *CustomerFeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerFeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerFeed proto.InternalMessageInfo
+
+func (m *CustomerFeed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerFeed) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *CustomerFeed) GetPlaceholderTypes() []enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderTypes
+	}
+	return nil
+}
+
+func (m *CustomerFeed) GetMatchingFunction() *common.MatchingFunction {
+	if m != nil {
+		return m.MatchingFunction
+	}
+	return nil
+}
+
+func (m *CustomerFeed) GetStatus() enums.FeedLinkStatusEnum_FeedLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CustomerFeed)(nil), "google.ads.googleads.v0.resources.CustomerFeed")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/customer_feed.proto", fileDescriptor_customer_feed_ce4640adfc3deabc)
+}
+
+var fileDescriptor_customer_feed_ce4640adfc3deabc = []byte{
+	// 440 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdd, 0x6a, 0xd4, 0x40,
+	0x14, 0xc7, 0xc9, 0x6e, 0x2d, 0x38, 0xd6, 0xd2, 0xcd, 0x55, 0x28, 0x22, 0x5b, 0x45, 0xd8, 0xab,
+	0x99, 0xb0, 0x7e, 0xdc, 0x78, 0xe3, 0xae, 0xd8, 0x82, 0xa8, 0x2c, 0xa9, 0x2c, 0x22, 0x2b, 0x61,
+	0x9a, 0x9c, 0x9d, 0x86, 0x66, 0x3e, 0x98, 0x8f, 0x4a, 0x9f, 0xc2, 0x77, 0xf0, 0xd2, 0x47, 0xf1,
+	0x01, 0x7c, 0x1e, 0xc9, 0x64, 0x12, 0xed, 0xca, 0xda, 0xde, 0x9d, 0x1c, 0xfe, 0xbf, 0x33, 0xe7,
+	0xfc, 0xcf, 0x09, 0x7a, 0xce, 0xa4, 0x64, 0x35, 0x10, 0x5a, 0x1a, 0xd2, 0x86, 0x4d, 0x74, 0x99,
+	0x12, 0x0d, 0x46, 0x3a, 0x5d, 0x80, 0x21, 0x85, 0x33, 0x56, 0x72, 0xd0, 0xf9, 0x1a, 0xa0, 0xc4,
+	0x4a, 0x4b, 0x2b, 0xe3, 0xa3, 0x56, 0x8b, 0x69, 0x69, 0x70, 0x8f, 0xe1, 0xcb, 0x14, 0xf7, 0xd8,
+	0xe1, 0x8b, 0x6d, 0x95, 0x0b, 0xc9, 0xb9, 0x14, 0x84, 0x53, 0x5b, 0x9c, 0x57, 0x82, 0xe5, 0x6b,
+	0x27, 0x0a, 0x5b, 0x49, 0xd1, 0x96, 0x3e, 0x7c, 0xb6, 0x8d, 0x03, 0xe1, 0xb8, 0x21, 0x4d, 0x13,
+	0x79, 0x5d, 0x89, 0x8b, 0xdc, 0x58, 0x6a, 0x9d, 0xb9, 0x1d, 0xa5, 0x6a, 0x5a, 0xc0, 0xb9, 0xac,
+	0x4b, 0xd0, 0xb9, 0xbd, 0x52, 0x10, 0xa8, 0x87, 0x81, 0xf2, 0x5f, 0x67, 0x6e, 0x4d, 0xbe, 0x6a,
+	0xaa, 0x14, 0xe8, 0x50, 0xf5, 0xd1, 0xb7, 0x21, 0xda, 0x7b, 0x1d, 0xc6, 0x3f, 0x06, 0x28, 0xe3,
+	0xc7, 0xe8, 0x7e, 0x37, 0x61, 0x2e, 0x28, 0x87, 0x24, 0x1a, 0x47, 0x93, 0xbb, 0xd9, 0x5e, 0x97,
+	0xfc, 0x40, 0x39, 0xc4, 0x29, 0xda, 0x69, 0xba, 0x4c, 0x06, 0xe3, 0x68, 0x72, 0x6f, 0xfa, 0x20,
+	0x18, 0x84, 0xbb, 0x47, 0xf0, 0xa9, 0xd5, 0x95, 0x60, 0x4b, 0x5a, 0x3b, 0xc8, 0xbc, 0x32, 0x96,
+	0x68, 0xb4, 0xd9, 0xa1, 0x49, 0x86, 0xe3, 0xe1, 0x64, 0x7f, 0x3a, 0xc7, 0xdb, 0xac, 0xf6, 0x93,
+	0xe1, 0xc5, 0x1f, 0xee, 0xe3, 0x95, 0x82, 0x37, 0xc2, 0xf1, 0xcd, 0x5c, 0x76, 0xa0, 0xae, 0x27,
+	0x4c, 0xfc, 0x05, 0x8d, 0xfe, 0xf1, 0x3f, 0xd9, 0xf1, 0xfd, 0xa6, 0x5b, 0x1f, 0x6c, 0x17, 0x87,
+	0xdf, 0x07, 0xf0, 0x38, 0x70, 0xd9, 0x01, 0xdf, 0xc8, 0xc4, 0x9f, 0xd0, 0x6e, 0xbb, 0x9d, 0xe4,
+	0xce, 0x38, 0x9a, 0xec, 0x4f, 0x5f, 0xdd, 0x30, 0x44, 0xe3, 0xed, 0xbb, 0x4a, 0x5c, 0x9c, 0x7a,
+	0xc8, 0xcf, 0x70, 0x3d, 0x95, 0x85, 0x7a, 0xf3, 0x5f, 0x11, 0x7a, 0x52, 0x48, 0x8e, 0x6f, 0xbc,
+	0xbf, 0xf9, 0xe8, 0xef, 0xc5, 0x2d, 0x1a, 0xef, 0x17, 0xd1, 0xe7, 0xb7, 0x81, 0x63, 0xb2, 0xa6,
+	0x82, 0x61, 0xa9, 0x19, 0x61, 0x20, 0xfc, 0x66, 0xba, 0xb3, 0x51, 0x95, 0xf9, 0xcf, 0xdf, 0xf0,
+	0xb2, 0x8f, 0xbe, 0x0f, 0x86, 0x27, 0xb3, 0xd9, 0x8f, 0xc1, 0xd1, 0x49, 0x5b, 0x72, 0x56, 0x1a,
+	0xdc, 0x86, 0x4d, 0xb4, 0x4c, 0x71, 0xd6, 0x29, 0x7f, 0x76, 0x9a, 0xd5, 0xac, 0x34, 0xab, 0x5e,
+	0xb3, 0x5a, 0xa6, 0xab, 0x5e, 0x73, 0xb6, 0xeb, 0x9b, 0x78, 0xfa, 0x3b, 0x00, 0x00, 0xff, 0xff,
+	0x98, 0x66, 0x60, 0xe7, 0x91, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/customer_manager_link.pb.go b/googleapis/ads/googleads/v0/resources/customer_manager_link.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4326524f385490c55813a49a0333963b83158122
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/customer_manager_link.pb.go
@@ -0,0 +1,127 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/customer_manager_link.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Represents customer-manager link relationship.
+type CustomerManagerLink struct {
+	// Name of the resource.
+	// CustomerManagerLink resource names have the form:
+	//
+	// `customers/{customer_id}/customerManagerLinks/{manager_customer_id}_{manager_link_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The manager customer linked to the customer. This field is read only.
+	ManagerCustomer *wrappers.StringValue `protobuf:"bytes,3,opt,name=manager_customer,json=managerCustomer,proto3" json:"manager_customer,omitempty"`
+	// ID of the customer-manager link. This field is read only.
+	ManagerLinkId *wrappers.Int64Value `protobuf:"bytes,4,opt,name=manager_link_id,json=managerLinkId,proto3" json:"manager_link_id,omitempty"`
+	// Status of the link between the customer and the manager.
+	Status               enums.ManagerLinkStatusEnum_ManagerLinkStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.ManagerLinkStatusEnum_ManagerLinkStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                      `json:"-"`
+	XXX_unrecognized     []byte                                        `json:"-"`
+	XXX_sizecache        int32                                         `json:"-"`
+}
+
+func (m *CustomerManagerLink) Reset()         { *m = CustomerManagerLink{} }
+func (m *CustomerManagerLink) String() string { return proto.CompactTextString(m) }
+func (*CustomerManagerLink) ProtoMessage()    {}
+func (*CustomerManagerLink) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_manager_link_1a8c7ae152be5754, []int{0}
+}
+func (m *CustomerManagerLink) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerManagerLink.Unmarshal(m, b)
+}
+func (m *CustomerManagerLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerManagerLink.Marshal(b, m, deterministic)
+}
+func (dst *CustomerManagerLink) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerManagerLink.Merge(dst, src)
+}
+func (m *CustomerManagerLink) XXX_Size() int {
+	return xxx_messageInfo_CustomerManagerLink.Size(m)
+}
+func (m *CustomerManagerLink) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerManagerLink.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerManagerLink proto.InternalMessageInfo
+
+func (m *CustomerManagerLink) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *CustomerManagerLink) GetManagerCustomer() *wrappers.StringValue {
+	if m != nil {
+		return m.ManagerCustomer
+	}
+	return nil
+}
+
+func (m *CustomerManagerLink) GetManagerLinkId() *wrappers.Int64Value {
+	if m != nil {
+		return m.ManagerLinkId
+	}
+	return nil
+}
+
+func (m *CustomerManagerLink) GetStatus() enums.ManagerLinkStatusEnum_ManagerLinkStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.ManagerLinkStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*CustomerManagerLink)(nil), "google.ads.googleads.v0.resources.CustomerManagerLink")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/customer_manager_link.proto", fileDescriptor_customer_manager_link_1a8c7ae152be5754)
+}
+
+var fileDescriptor_customer_manager_link_1a8c7ae152be5754 = []byte{
+	// 375 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xdf, 0x4a, 0xeb, 0x30,
+	0x1c, 0xa6, 0xdb, 0x39, 0x83, 0xd3, 0x73, 0x76, 0x26, 0xf5, 0xa6, 0x4c, 0x91, 0x4d, 0x11, 0x76,
+	0x95, 0x96, 0x29, 0x7a, 0x21, 0x5e, 0x74, 0x43, 0xc7, 0x44, 0x65, 0x74, 0xb0, 0x0b, 0x29, 0x96,
+	0x6c, 0x8d, 0xa1, 0xac, 0x49, 0x4a, 0xd2, 0xce, 0xf7, 0xf1, 0x4a, 0x7c, 0x14, 0xdf, 0xc1, 0x77,
+	0x91, 0x35, 0x49, 0x9d, 0xcc, 0xe9, 0xdd, 0xd7, 0xf4, 0xfb, 0xf3, 0xfb, 0x7e, 0x89, 0x79, 0x8e,
+	0x19, 0xc3, 0x09, 0x72, 0x60, 0x24, 0x1c, 0x09, 0x97, 0x68, 0xe1, 0x3a, 0x1c, 0x09, 0x96, 0xf3,
+	0x19, 0x12, 0xce, 0x2c, 0x17, 0x19, 0x23, 0x88, 0x87, 0x04, 0x52, 0x88, 0x11, 0x0f, 0x93, 0x98,
+	0xce, 0x41, 0xca, 0x59, 0xc6, 0xac, 0xb6, 0xd4, 0x00, 0x18, 0x09, 0x50, 0xca, 0xc1, 0xc2, 0x05,
+	0xa5, 0xbc, 0x79, 0xba, 0x29, 0x01, 0xd1, 0x9c, 0x08, 0x67, 0xd5, 0x34, 0x14, 0x19, 0xcc, 0x72,
+	0x21, 0xbd, 0x9b, 0x7b, 0x4a, 0x58, 0x7c, 0x4d, 0xf3, 0x07, 0xe7, 0x91, 0xc3, 0x34, 0x45, 0x5c,
+	0xfd, 0xdf, 0x7f, 0xae, 0x98, 0xdb, 0x7d, 0x35, 0xdb, 0x8d, 0x74, 0xb9, 0x8e, 0xe9, 0xdc, 0x3a,
+	0x30, 0xeb, 0x3a, 0x3d, 0xa4, 0x90, 0x20, 0xdb, 0x68, 0x19, 0x9d, 0x3f, 0xfe, 0x3f, 0x7d, 0x78,
+	0x0b, 0x09, 0xb2, 0x06, 0xe6, 0x96, 0x4e, 0xd6, 0xfd, 0xec, 0x6a, 0xcb, 0xe8, 0xfc, 0xed, 0xee,
+	0xaa, 0x22, 0x40, 0xe7, 0x82, 0x71, 0xc6, 0x63, 0x8a, 0x27, 0x30, 0xc9, 0x91, 0xdf, 0x50, 0x2a,
+	0x1d, 0x6c, 0xf5, 0xcd, 0xc6, 0xa7, 0x0a, 0x71, 0x64, 0xff, 0x2a, 0x7c, 0x76, 0xd6, 0x7c, 0x86,
+	0x34, 0x3b, 0x39, 0x96, 0x36, 0x75, 0xf2, 0x31, 0xf0, 0x30, 0xb2, 0xee, 0xcd, 0x9a, 0xac, 0x6e,
+	0xff, 0x6e, 0x19, 0x9d, 0xff, 0xdd, 0x4b, 0xb0, 0x69, 0xaf, 0xc5, 0xd2, 0xc0, 0x4a, 0xdd, 0x71,
+	0xa1, 0xbb, 0xa0, 0x39, 0x59, 0x3f, 0xf5, 0x95, 0x6b, 0xef, 0xcd, 0x30, 0x0f, 0x67, 0x8c, 0x80,
+	0x1f, 0x6f, 0xab, 0x67, 0x7f, 0xb1, 0xd1, 0xd1, 0xb2, 0xc0, 0xc8, 0xb8, 0xbb, 0x52, 0x72, 0xcc,
+	0x12, 0x48, 0x31, 0x60, 0x1c, 0x3b, 0x18, 0xd1, 0xa2, 0x9e, 0xbe, 0xd9, 0x34, 0x16, 0xdf, 0x3c,
+	0xa5, 0xb3, 0x12, 0x3d, 0x55, 0xaa, 0x03, 0xcf, 0x7b, 0xa9, 0xb4, 0x07, 0xd2, 0xd2, 0x8b, 0x04,
+	0x90, 0x70, 0x89, 0x26, 0x2e, 0xf0, 0x35, 0xf3, 0x55, 0x73, 0x02, 0x2f, 0x12, 0x41, 0xc9, 0x09,
+	0x26, 0x6e, 0x50, 0x72, 0xa6, 0xb5, 0x62, 0x88, 0xa3, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa6,
+	0xb2, 0x1a, 0x50, 0xce, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/display_keyword_view.pb.go b/googleapis/ads/googleads/v0/resources/display_keyword_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..bdf4f2b7862cd36e52568dca2d851b1fd1cc50a1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/display_keyword_view.pb.go
@@ -0,0 +1,89 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/display_keyword_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A display keyword view.
+type DisplayKeywordView struct {
+	// The resource name of the display keyword view.
+	// Display Keyword view resource names have the form:
+	//
+	// `customers/{customer_id}/displayKeywordViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DisplayKeywordView) Reset()         { *m = DisplayKeywordView{} }
+func (m *DisplayKeywordView) String() string { return proto.CompactTextString(m) }
+func (*DisplayKeywordView) ProtoMessage()    {}
+func (*DisplayKeywordView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_display_keyword_view_8e70ac1b36b894b2, []int{0}
+}
+func (m *DisplayKeywordView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DisplayKeywordView.Unmarshal(m, b)
+}
+func (m *DisplayKeywordView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DisplayKeywordView.Marshal(b, m, deterministic)
+}
+func (dst *DisplayKeywordView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DisplayKeywordView.Merge(dst, src)
+}
+func (m *DisplayKeywordView) XXX_Size() int {
+	return xxx_messageInfo_DisplayKeywordView.Size(m)
+}
+func (m *DisplayKeywordView) XXX_DiscardUnknown() {
+	xxx_messageInfo_DisplayKeywordView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DisplayKeywordView proto.InternalMessageInfo
+
+func (m *DisplayKeywordView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*DisplayKeywordView)(nil), "google.ads.googleads.v0.resources.DisplayKeywordView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/display_keyword_view.proto", fileDescriptor_display_keyword_view_8e70ac1b36b894b2)
+}
+
+var fileDescriptor_display_keyword_view_8e70ac1b36b894b2 = []byte{
+	// 235 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0x94, 0xcc, 0xe2, 0x82, 0x9c, 0xc4, 0xca, 0xf8,
+	0xec, 0xd4, 0xca, 0xf2, 0xfc, 0xa2, 0x94, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc,
+	0x92, 0x7c, 0x21, 0x45, 0x88, 0x16, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x6e, 0xbd, 0x32, 0x03,
+	0x3d, 0xb8, 0x6e, 0x25, 0x4b, 0x2e, 0x21, 0x17, 0x88, 0x01, 0xde, 0x10, 0xfd, 0x61, 0x99, 0xa9,
+	0xe5, 0x42, 0xca, 0x5c, 0xbc, 0x30, 0x25, 0xf1, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c,
+	0x1a, 0x9c, 0x41, 0x3c, 0x30, 0x41, 0xbf, 0xc4, 0xdc, 0x54, 0xa7, 0x3b, 0x8c, 0x5c, 0xaa, 0xc9,
+	0xf9, 0xb9, 0x7a, 0x04, 0x2d, 0x71, 0x12, 0xc7, 0xb4, 0x22, 0x00, 0xe4, 0xc0, 0x00, 0xc6, 0x28,
+	0x2f, 0xa8, 0xee, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4,
+	0x3c, 0xb0, 0xf3, 0x61, 0x1e, 0x2e, 0xc8, 0x2c, 0xc6, 0xe3, 0x7f, 0x6b, 0x38, 0x6b, 0x11, 0x13,
+	0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x45, 0x77, 0x88, 0x91, 0x8e, 0x29, 0xc5, 0x7a, 0x10, 0x26,
+	0x88, 0x15, 0x66, 0xa0, 0x17, 0x04, 0x53, 0x79, 0x0a, 0xa6, 0x26, 0xc6, 0x31, 0xa5, 0x38, 0x06,
+	0xae, 0x26, 0x26, 0xcc, 0x20, 0x06, 0xae, 0x26, 0x89, 0x0d, 0xec, 0x08, 0x63, 0x40, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x64, 0xb4, 0x1f, 0x4e, 0x83, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/feed.pb.go b/googleapis/ads/googleads/v0/resources/feed.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..95472752daae15b853ded4630ab076148a3be8fd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/feed.pb.go
@@ -0,0 +1,679 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/feed.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The operator.
+type FeedAttributeOperation_Operator int32
+
+const (
+	// Unspecified.
+	FeedAttributeOperation_UNSPECIFIED FeedAttributeOperation_Operator = 0
+	// Used for return value only. Represents value unknown in this version.
+	FeedAttributeOperation_UNKNOWN FeedAttributeOperation_Operator = 1
+	// Add the attribute to the existing attributes.
+	FeedAttributeOperation_ADD FeedAttributeOperation_Operator = 2
+)
+
+var FeedAttributeOperation_Operator_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNKNOWN",
+	2: "ADD",
+}
+var FeedAttributeOperation_Operator_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNKNOWN":     1,
+	"ADD":         2,
+}
+
+func (x FeedAttributeOperation_Operator) String() string {
+	return proto.EnumName(FeedAttributeOperation_Operator_name, int32(x))
+}
+func (FeedAttributeOperation_Operator) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_feed_c128d3201d6e53c9, []int{2, 0}
+}
+
+// A feed.
+type Feed struct {
+	// The resource name of the feed.
+	// Feed resource names have the form:
+	//
+	// `customers/{customer_id}/feeds/{feed_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the feed.
+	// This field is read-only.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Name of the feed. Required.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The Feed's attributes. Required on CREATE.
+	// Disallowed on UPDATE. Use attribute_operations to add new attributes.
+	Attributes []*FeedAttribute `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"`
+	// The list of operations changing the feed attributes. Attributes can only
+	// be added, not removed.
+	AttributeOperations []*FeedAttributeOperation `protobuf:"bytes,9,rep,name=attribute_operations,json=attributeOperations,proto3" json:"attribute_operations,omitempty"`
+	// Specifies who manages the FeedAttributes for the Feed.
+	Origin enums.FeedOriginEnum_FeedOrigin `protobuf:"varint,5,opt,name=origin,proto3,enum=google.ads.googleads.v0.enums.FeedOriginEnum_FeedOrigin" json:"origin,omitempty"`
+	// Status of the feed.
+	// This field is read-only.
+	Status enums.FeedStatusEnum_FeedStatus `protobuf:"varint,8,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.FeedStatusEnum_FeedStatus" json:"status,omitempty"`
+	// The system data for the Feed. This data specifies information for
+	// generating the feed items of the system generated feed.
+	//
+	// Types that are valid to be assigned to SystemFeedGenerationData:
+	//	*Feed_PlacesLocationFeedData_
+	//	*Feed_AffiliateLocationFeedData_
+	SystemFeedGenerationData isFeed_SystemFeedGenerationData `protobuf_oneof:"system_feed_generation_data"`
+	XXX_NoUnkeyedLiteral     struct{}                        `json:"-"`
+	XXX_unrecognized         []byte                          `json:"-"`
+	XXX_sizecache            int32                           `json:"-"`
+}
+
+func (m *Feed) Reset()         { *m = Feed{} }
+func (m *Feed) String() string { return proto.CompactTextString(m) }
+func (*Feed) ProtoMessage()    {}
+func (*Feed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_c128d3201d6e53c9, []int{0}
+}
+func (m *Feed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed.Unmarshal(m, b)
+}
+func (m *Feed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed.Marshal(b, m, deterministic)
+}
+func (dst *Feed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed.Merge(dst, src)
+}
+func (m *Feed) XXX_Size() int {
+	return xxx_messageInfo_Feed.Size(m)
+}
+func (m *Feed) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed proto.InternalMessageInfo
+
+func (m *Feed) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Feed) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Feed) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *Feed) GetAttributes() []*FeedAttribute {
+	if m != nil {
+		return m.Attributes
+	}
+	return nil
+}
+
+func (m *Feed) GetAttributeOperations() []*FeedAttributeOperation {
+	if m != nil {
+		return m.AttributeOperations
+	}
+	return nil
+}
+
+func (m *Feed) GetOrigin() enums.FeedOriginEnum_FeedOrigin {
+	if m != nil {
+		return m.Origin
+	}
+	return enums.FeedOriginEnum_UNSPECIFIED
+}
+
+func (m *Feed) GetStatus() enums.FeedStatusEnum_FeedStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedStatusEnum_UNSPECIFIED
+}
+
+type isFeed_SystemFeedGenerationData interface {
+	isFeed_SystemFeedGenerationData()
+}
+
+type Feed_PlacesLocationFeedData_ struct {
+	PlacesLocationFeedData *Feed_PlacesLocationFeedData `protobuf:"bytes,6,opt,name=places_location_feed_data,json=placesLocationFeedData,proto3,oneof"`
+}
+
+type Feed_AffiliateLocationFeedData_ struct {
+	AffiliateLocationFeedData *Feed_AffiliateLocationFeedData `protobuf:"bytes,7,opt,name=affiliate_location_feed_data,json=affiliateLocationFeedData,proto3,oneof"`
+}
+
+func (*Feed_PlacesLocationFeedData_) isFeed_SystemFeedGenerationData() {}
+
+func (*Feed_AffiliateLocationFeedData_) isFeed_SystemFeedGenerationData() {}
+
+func (m *Feed) GetSystemFeedGenerationData() isFeed_SystemFeedGenerationData {
+	if m != nil {
+		return m.SystemFeedGenerationData
+	}
+	return nil
+}
+
+func (m *Feed) GetPlacesLocationFeedData() *Feed_PlacesLocationFeedData {
+	if x, ok := m.GetSystemFeedGenerationData().(*Feed_PlacesLocationFeedData_); ok {
+		return x.PlacesLocationFeedData
+	}
+	return nil
+}
+
+func (m *Feed) GetAffiliateLocationFeedData() *Feed_AffiliateLocationFeedData {
+	if x, ok := m.GetSystemFeedGenerationData().(*Feed_AffiliateLocationFeedData_); ok {
+		return x.AffiliateLocationFeedData
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Feed) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Feed_OneofMarshaler, _Feed_OneofUnmarshaler, _Feed_OneofSizer, []interface{}{
+		(*Feed_PlacesLocationFeedData_)(nil),
+		(*Feed_AffiliateLocationFeedData_)(nil),
+	}
+}
+
+func _Feed_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Feed)
+	// system_feed_generation_data
+	switch x := m.SystemFeedGenerationData.(type) {
+	case *Feed_PlacesLocationFeedData_:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PlacesLocationFeedData); err != nil {
+			return err
+		}
+	case *Feed_AffiliateLocationFeedData_:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AffiliateLocationFeedData); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Feed.SystemFeedGenerationData has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Feed_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Feed)
+	switch tag {
+	case 6: // system_feed_generation_data.places_location_feed_data
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Feed_PlacesLocationFeedData)
+		err := b.DecodeMessage(msg)
+		m.SystemFeedGenerationData = &Feed_PlacesLocationFeedData_{msg}
+		return true, err
+	case 7: // system_feed_generation_data.affiliate_location_feed_data
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Feed_AffiliateLocationFeedData)
+		err := b.DecodeMessage(msg)
+		m.SystemFeedGenerationData = &Feed_AffiliateLocationFeedData_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Feed_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Feed)
+	// system_feed_generation_data
+	switch x := m.SystemFeedGenerationData.(type) {
+	case *Feed_PlacesLocationFeedData_:
+		s := proto.Size(x.PlacesLocationFeedData)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Feed_AffiliateLocationFeedData_:
+		s := proto.Size(x.AffiliateLocationFeedData)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Data used to configure a location feed populated from Google My Business
+// Locations.
+type Feed_PlacesLocationFeedData struct {
+	// Required authentication token (from OAuth API) for the email.
+	OauthInfo *Feed_PlacesLocationFeedData_OAuthInfo `protobuf:"bytes,1,opt,name=oauth_info,json=oauthInfo,proto3" json:"oauth_info,omitempty"`
+	// Email address of a Google My Business account or email address of a
+	// manager of the Google My Business account. Required.
+	EmailAddress *wrappers.StringValue `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3" json:"email_address,omitempty"`
+	// Plus page ID of the managed business whose locations should be used. If
+	// this field is not set, then all businesses accessible by the user
+	// (specified by email_address) are used.
+	BusinessAccountIdentifier *wrappers.StringValue `protobuf:"bytes,3,opt,name=business_account_identifier,json=businessAccountIdentifier,proto3" json:"business_account_identifier,omitempty"`
+	// Used to filter Google My Business listings by business name. If
+	// business_name_filter is set, only listings with a matching business name
+	// are candidates to be sync'd into FeedItems.
+	BusinessNameFilter *wrappers.StringValue `protobuf:"bytes,4,opt,name=business_name_filter,json=businessNameFilter,proto3" json:"business_name_filter,omitempty"`
+	// Used to filter Google My Business listings by categories. If entries
+	// exist in category_filters, only listings that belong to any of the
+	// categories are candidates to be sync'd into FeedItems. If no entries
+	// exist in category_filters, then all listings are candidates for syncing.
+	CategoryFilters []*wrappers.StringValue `protobuf:"bytes,5,rep,name=category_filters,json=categoryFilters,proto3" json:"category_filters,omitempty"`
+	// Used to filter Google My Business listings by labels. If entries exist in
+	// label_filters, only listings that has any of the labels set are
+	// candidates to be synchronized into FeedItems. If no entries exist in
+	// label_filters, then all listings are candidates for syncing.
+	LabelFilters         []*wrappers.StringValue `protobuf:"bytes,6,rep,name=label_filters,json=labelFilters,proto3" json:"label_filters,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *Feed_PlacesLocationFeedData) Reset()         { *m = Feed_PlacesLocationFeedData{} }
+func (m *Feed_PlacesLocationFeedData) String() string { return proto.CompactTextString(m) }
+func (*Feed_PlacesLocationFeedData) ProtoMessage()    {}
+func (*Feed_PlacesLocationFeedData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_c128d3201d6e53c9, []int{0, 0}
+}
+func (m *Feed_PlacesLocationFeedData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData.Unmarshal(m, b)
+}
+func (m *Feed_PlacesLocationFeedData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData.Marshal(b, m, deterministic)
+}
+func (dst *Feed_PlacesLocationFeedData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed_PlacesLocationFeedData.Merge(dst, src)
+}
+func (m *Feed_PlacesLocationFeedData) XXX_Size() int {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData.Size(m)
+}
+func (m *Feed_PlacesLocationFeedData) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed_PlacesLocationFeedData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed_PlacesLocationFeedData proto.InternalMessageInfo
+
+func (m *Feed_PlacesLocationFeedData) GetOauthInfo() *Feed_PlacesLocationFeedData_OAuthInfo {
+	if m != nil {
+		return m.OauthInfo
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetEmailAddress() *wrappers.StringValue {
+	if m != nil {
+		return m.EmailAddress
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetBusinessAccountIdentifier() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessAccountIdentifier
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetBusinessNameFilter() *wrappers.StringValue {
+	if m != nil {
+		return m.BusinessNameFilter
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetCategoryFilters() []*wrappers.StringValue {
+	if m != nil {
+		return m.CategoryFilters
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData) GetLabelFilters() []*wrappers.StringValue {
+	if m != nil {
+		return m.LabelFilters
+	}
+	return nil
+}
+
+// Data used for authorization using OAuth.
+type Feed_PlacesLocationFeedData_OAuthInfo struct {
+	// The HTTP method used to obtain authorization.
+	HttpMethod *wrappers.StringValue `protobuf:"bytes,1,opt,name=http_method,json=httpMethod,proto3" json:"http_method,omitempty"`
+	// The HTTP request URL used to obtain authorization.
+	HttpRequestUrl *wrappers.StringValue `protobuf:"bytes,2,opt,name=http_request_url,json=httpRequestUrl,proto3" json:"http_request_url,omitempty"`
+	// The HTTP authorization header used to obtain authorization.
+	HttpAuthorizationHeader *wrappers.StringValue `protobuf:"bytes,3,opt,name=http_authorization_header,json=httpAuthorizationHeader,proto3" json:"http_authorization_header,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{}              `json:"-"`
+	XXX_unrecognized        []byte                `json:"-"`
+	XXX_sizecache           int32                 `json:"-"`
+}
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) Reset()         { *m = Feed_PlacesLocationFeedData_OAuthInfo{} }
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) String() string { return proto.CompactTextString(m) }
+func (*Feed_PlacesLocationFeedData_OAuthInfo) ProtoMessage()    {}
+func (*Feed_PlacesLocationFeedData_OAuthInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_c128d3201d6e53c9, []int{0, 0, 0}
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Unmarshal(m, b)
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Marshal(b, m, deterministic)
+}
+func (dst *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Merge(dst, src)
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_Size() int {
+	return xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.Size(m)
+}
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed_PlacesLocationFeedData_OAuthInfo proto.InternalMessageInfo
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) GetHttpMethod() *wrappers.StringValue {
+	if m != nil {
+		return m.HttpMethod
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) GetHttpRequestUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.HttpRequestUrl
+	}
+	return nil
+}
+
+func (m *Feed_PlacesLocationFeedData_OAuthInfo) GetHttpAuthorizationHeader() *wrappers.StringValue {
+	if m != nil {
+		return m.HttpAuthorizationHeader
+	}
+	return nil
+}
+
+// Data used to configure an affiliate location feed populated with the
+// specified chains.
+type Feed_AffiliateLocationFeedData struct {
+	// The list of chains that the affiliate location feed will sync the
+	// locations from.
+	ChainIds []*wrappers.Int64Value `protobuf:"bytes,1,rep,name=chain_ids,json=chainIds,proto3" json:"chain_ids,omitempty"`
+	// The relationship the chains have with the advertiser.
+	RelationshipType     enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType `protobuf:"varint,2,opt,name=relationship_type,json=relationshipType,proto3,enum=google.ads.googleads.v0.enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType" json:"relationship_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                                              `json:"-"`
+	XXX_unrecognized     []byte                                                                                `json:"-"`
+	XXX_sizecache        int32                                                                                 `json:"-"`
+}
+
+func (m *Feed_AffiliateLocationFeedData) Reset()         { *m = Feed_AffiliateLocationFeedData{} }
+func (m *Feed_AffiliateLocationFeedData) String() string { return proto.CompactTextString(m) }
+func (*Feed_AffiliateLocationFeedData) ProtoMessage()    {}
+func (*Feed_AffiliateLocationFeedData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_c128d3201d6e53c9, []int{0, 1}
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Feed_AffiliateLocationFeedData.Unmarshal(m, b)
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Feed_AffiliateLocationFeedData.Marshal(b, m, deterministic)
+}
+func (dst *Feed_AffiliateLocationFeedData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Feed_AffiliateLocationFeedData.Merge(dst, src)
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_Size() int {
+	return xxx_messageInfo_Feed_AffiliateLocationFeedData.Size(m)
+}
+func (m *Feed_AffiliateLocationFeedData) XXX_DiscardUnknown() {
+	xxx_messageInfo_Feed_AffiliateLocationFeedData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Feed_AffiliateLocationFeedData proto.InternalMessageInfo
+
+func (m *Feed_AffiliateLocationFeedData) GetChainIds() []*wrappers.Int64Value {
+	if m != nil {
+		return m.ChainIds
+	}
+	return nil
+}
+
+func (m *Feed_AffiliateLocationFeedData) GetRelationshipType() enums.AffiliateLocationFeedRelationshipTypeEnum_AffiliateLocationFeedRelationshipType {
+	if m != nil {
+		return m.RelationshipType
+	}
+	return enums.AffiliateLocationFeedRelationshipTypeEnum_UNSPECIFIED
+}
+
+// FeedAttributes define the types of data expected to be present in a Feed. A
+// single FeedAttribute specifies the expected type of the FeedItemAttributes
+// with the same FeedAttributeId. Optionally, a FeedAttribute can be marked as
+// being part of a FeedItem's unique key.
+type FeedAttribute struct {
+	// ID of the attribute.
+	Id *wrappers.Int64Value `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the attribute. Required.
+	Name *wrappers.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// Data type for feed attribute. Required.
+	Type enums.FeedAttributeTypeEnum_FeedAttributeType `protobuf:"varint,3,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.FeedAttributeTypeEnum_FeedAttributeType" json:"type,omitempty"`
+	// Indicates that data corresponding to this attribute is part of a
+	// FeedItem's unique key. It defaults to false if it is unspecified. Note
+	// that a unique key is not required in a Feed's schema, in which case the
+	// FeedItems must be referenced by their feed_item_id.
+	IsPartOfKey          *wrappers.BoolValue `protobuf:"bytes,4,opt,name=is_part_of_key,json=isPartOfKey,proto3" json:"is_part_of_key,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *FeedAttribute) Reset()         { *m = FeedAttribute{} }
+func (m *FeedAttribute) String() string { return proto.CompactTextString(m) }
+func (*FeedAttribute) ProtoMessage()    {}
+func (*FeedAttribute) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_c128d3201d6e53c9, []int{1}
+}
+func (m *FeedAttribute) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttribute.Unmarshal(m, b)
+}
+func (m *FeedAttribute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttribute.Marshal(b, m, deterministic)
+}
+func (dst *FeedAttribute) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttribute.Merge(dst, src)
+}
+func (m *FeedAttribute) XXX_Size() int {
+	return xxx_messageInfo_FeedAttribute.Size(m)
+}
+func (m *FeedAttribute) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttribute.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttribute proto.InternalMessageInfo
+
+func (m *FeedAttribute) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *FeedAttribute) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *FeedAttribute) GetType() enums.FeedAttributeTypeEnum_FeedAttributeType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.FeedAttributeTypeEnum_UNSPECIFIED
+}
+
+func (m *FeedAttribute) GetIsPartOfKey() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsPartOfKey
+	}
+	return nil
+}
+
+// Operation to be performed on a feed attribute list in a mutate.
+type FeedAttributeOperation struct {
+	// Type of list operation to perform.
+	Operator FeedAttributeOperation_Operator `protobuf:"varint,1,opt,name=operator,proto3,enum=google.ads.googleads.v0.resources.FeedAttributeOperation_Operator" json:"operator,omitempty"`
+	// The feed attribute being added to the list.
+	Value                *FeedAttribute `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *FeedAttributeOperation) Reset()         { *m = FeedAttributeOperation{} }
+func (m *FeedAttributeOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedAttributeOperation) ProtoMessage()    {}
+func (*FeedAttributeOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_c128d3201d6e53c9, []int{2}
+}
+func (m *FeedAttributeOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedAttributeOperation.Unmarshal(m, b)
+}
+func (m *FeedAttributeOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedAttributeOperation.Marshal(b, m, deterministic)
+}
+func (dst *FeedAttributeOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedAttributeOperation.Merge(dst, src)
+}
+func (m *FeedAttributeOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedAttributeOperation.Size(m)
+}
+func (m *FeedAttributeOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedAttributeOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedAttributeOperation proto.InternalMessageInfo
+
+func (m *FeedAttributeOperation) GetOperator() FeedAttributeOperation_Operator {
+	if m != nil {
+		return m.Operator
+	}
+	return FeedAttributeOperation_UNSPECIFIED
+}
+
+func (m *FeedAttributeOperation) GetValue() *FeedAttribute {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Feed)(nil), "google.ads.googleads.v0.resources.Feed")
+	proto.RegisterType((*Feed_PlacesLocationFeedData)(nil), "google.ads.googleads.v0.resources.Feed.PlacesLocationFeedData")
+	proto.RegisterType((*Feed_PlacesLocationFeedData_OAuthInfo)(nil), "google.ads.googleads.v0.resources.Feed.PlacesLocationFeedData.OAuthInfo")
+	proto.RegisterType((*Feed_AffiliateLocationFeedData)(nil), "google.ads.googleads.v0.resources.Feed.AffiliateLocationFeedData")
+	proto.RegisterType((*FeedAttribute)(nil), "google.ads.googleads.v0.resources.FeedAttribute")
+	proto.RegisterType((*FeedAttributeOperation)(nil), "google.ads.googleads.v0.resources.FeedAttributeOperation")
+	proto.RegisterEnum("google.ads.googleads.v0.resources.FeedAttributeOperation_Operator", FeedAttributeOperation_Operator_name, FeedAttributeOperation_Operator_value)
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/feed.proto", fileDescriptor_feed_c128d3201d6e53c9)
+}
+
+var fileDescriptor_feed_c128d3201d6e53c9 = []byte{
+	// 999 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0xcf, 0x6f, 0xe3, 0x44,
+	0x14, 0xc7, 0xd7, 0x49, 0xfa, 0x23, 0x93, 0x36, 0x1b, 0x86, 0x55, 0x71, 0xd2, 0x05, 0x75, 0x8b,
+	0x90, 0x2a, 0x81, 0x9c, 0x10, 0x10, 0x2c, 0x42, 0x80, 0x1c, 0xda, 0xb4, 0x61, 0xd9, 0x24, 0x72,
+	0x69, 0x41, 0xab, 0x08, 0x6b, 0x12, 0x8f, 0x9d, 0x11, 0x8e, 0xc7, 0xcc, 0x8c, 0x8b, 0x02, 0x57,
+	0x6e, 0xfc, 0x09, 0xdc, 0x38, 0xf2, 0xa7, 0x70, 0xe0, 0x2f, 0x81, 0xd3, 0x1e, 0xb8, 0x22, 0xcf,
+	0xd8, 0x26, 0x6c, 0x7e, 0xd4, 0x85, 0xdb, 0xcc, 0xf8, 0x7d, 0x3f, 0x7e, 0xf9, 0xbe, 0xbc, 0x37,
+	0x06, 0x6f, 0x79, 0x94, 0x7a, 0x3e, 0x6e, 0x22, 0x87, 0x37, 0xd5, 0x32, 0x5e, 0xdd, 0xb4, 0x9a,
+	0x0c, 0x73, 0x1a, 0xb1, 0x09, 0xe6, 0x4d, 0x17, 0x63, 0xc7, 0x08, 0x19, 0x15, 0x14, 0x3e, 0x52,
+	0x21, 0x06, 0x72, 0xb8, 0x91, 0x45, 0x1b, 0x37, 0x2d, 0x23, 0x8b, 0x6e, 0x3c, 0x5d, 0x07, 0xc4,
+	0x41, 0x34, 0xe3, 0x4d, 0xe4, 0xba, 0xc4, 0x27, 0x48, 0x60, 0xdb, 0xa7, 0x13, 0x24, 0x08, 0x0d,
+	0xec, 0x98, 0x6f, 0x33, 0xec, 0xcb, 0x1d, 0x9f, 0x92, 0xd0, 0x16, 0xf3, 0x10, 0xab, 0x37, 0x36,
+	0xde, 0xdf, 0x8c, 0x93, 0x5a, 0x24, 0x04, 0x23, 0xe3, 0x48, 0xe0, 0x45, 0x61, 0x33, 0x87, 0x90,
+	0x32, 0xe2, 0x91, 0xe0, 0x0e, 0x02, 0x2e, 0x90, 0x88, 0x78, 0x22, 0x78, 0x2d, 0x11, 0xc8, 0xdd,
+	0x38, 0x72, 0x9b, 0xdf, 0x31, 0x14, 0x86, 0x98, 0x25, 0xcf, 0x8f, 0xff, 0xda, 0x07, 0xa5, 0x2e,
+	0xc6, 0x0e, 0x7c, 0x1d, 0xec, 0xa7, 0xfe, 0xd8, 0x01, 0x9a, 0x61, 0x5d, 0x3b, 0xd2, 0x4e, 0xca,
+	0xd6, 0x5e, 0x7a, 0xd8, 0x47, 0x33, 0x0c, 0xdf, 0x04, 0x05, 0xe2, 0xe8, 0x85, 0x23, 0xed, 0xa4,
+	0xd2, 0x3e, 0x4c, 0xcc, 0x35, 0x52, 0xb4, 0xd1, 0x0b, 0xc4, 0x7b, 0xef, 0x5e, 0x23, 0x3f, 0xc2,
+	0x56, 0x81, 0x38, 0xb0, 0x05, 0x4a, 0x12, 0x54, 0x94, 0xe1, 0x0f, 0x97, 0xc2, 0x2f, 0x05, 0x23,
+	0x81, 0xa7, 0xe2, 0x65, 0x24, 0x1c, 0x02, 0x90, 0xd9, 0xc4, 0xf5, 0xd2, 0x51, 0xf1, 0xa4, 0xd2,
+	0x6e, 0x19, 0xb7, 0x96, 0xd3, 0x88, 0x7f, 0x80, 0x99, 0x0a, 0xad, 0x05, 0x06, 0xf4, 0xc1, 0x83,
+	0x7f, 0x8c, 0xa7, 0x21, 0x66, 0xaa, 0x7e, 0x7a, 0x59, 0xb2, 0x3f, 0xb8, 0x2b, 0x7b, 0x90, 0x12,
+	0xac, 0x97, 0xd1, 0xd2, 0x19, 0x87, 0x43, 0xb0, 0xad, 0xaa, 0xa5, 0x6f, 0x1d, 0x69, 0x27, 0xd5,
+	0xf6, 0xe3, 0xb5, 0x7c, 0x59, 0x2e, 0xc9, 0x1e, 0x48, 0xc1, 0x59, 0x10, 0xcd, 0x16, 0xb6, 0x56,
+	0xc2, 0x89, 0x89, 0xaa, 0x9c, 0xfa, 0x6e, 0x6e, 0xe2, 0xa5, 0x14, 0x64, 0x44, 0xb5, 0xb5, 0x12,
+	0x0e, 0xfc, 0x01, 0xd4, 0x43, 0x1f, 0x4d, 0x30, 0x7f, 0xe1, 0xbf, 0xed, 0x20, 0x81, 0xf4, 0x6d,
+	0x59, 0xaa, 0x8f, 0x73, 0xda, 0x62, 0x0c, 0x25, 0xe8, 0xf3, 0x84, 0x13, 0x1f, 0x9d, 0x22, 0x81,
+	0x2e, 0xee, 0x59, 0x07, 0xe1, 0xca, 0x27, 0xf0, 0x47, 0x0d, 0x3c, 0x5c, 0xd7, 0x5c, 0x32, 0x81,
+	0x1d, 0x99, 0x80, 0x99, 0x37, 0x01, 0x33, 0x65, 0xad, 0xc8, 0xa1, 0x8e, 0xd6, 0x3d, 0x6c, 0xfc,
+	0xb9, 0x05, 0x0e, 0x56, 0xe7, 0x0e, 0x3d, 0x00, 0x28, 0x8a, 0xc4, 0xd4, 0x26, 0x81, 0x4b, 0x65,
+	0x0f, 0x54, 0xda, 0x17, 0xff, 0xcf, 0x0f, 0x63, 0x60, 0x46, 0x62, 0xda, 0x0b, 0x5c, 0x6a, 0x95,
+	0x25, 0x3b, 0x5e, 0x42, 0x13, 0xec, 0xe3, 0x19, 0x22, 0xbe, 0x8d, 0x1c, 0x87, 0x61, 0xce, 0x93,
+	0xae, 0xda, 0xdc, 0x26, 0x7b, 0x52, 0x62, 0x2a, 0x05, 0x1c, 0x81, 0xc3, 0x71, 0xc4, 0x49, 0x80,
+	0x39, 0xb7, 0xd1, 0x64, 0x42, 0xa3, 0x40, 0xd8, 0xc4, 0xc1, 0x81, 0x20, 0x2e, 0xc1, 0x2c, 0x57,
+	0xdf, 0xd5, 0x53, 0x80, 0xa9, 0xf4, 0xbd, 0x4c, 0x0e, 0xfb, 0xe0, 0x41, 0x46, 0x8f, 0xbb, 0xd3,
+	0x76, 0x89, 0x2f, 0x30, 0xd3, 0x4b, 0x39, 0xb0, 0x30, 0x55, 0xc6, 0x53, 0xa3, 0x2b, 0x75, 0xf0,
+	0x1c, 0xd4, 0x26, 0x48, 0x60, 0x8f, 0xb2, 0x79, 0x82, 0xe2, 0xfa, 0x96, 0x6c, 0xc3, 0xcd, 0xac,
+	0xfb, 0xa9, 0x4a, 0x71, 0x78, 0xec, 0x9c, 0x8f, 0xc6, 0xd8, 0xcf, 0x28, 0xdb, 0x39, 0x28, 0x7b,
+	0x52, 0x92, 0x20, 0x1a, 0x7f, 0x68, 0xa0, 0x9c, 0x55, 0x05, 0x7e, 0x04, 0x2a, 0x53, 0x21, 0x42,
+	0x7b, 0x86, 0xc5, 0x94, 0x3a, 0x49, 0xd1, 0x37, 0xe3, 0x40, 0x2c, 0x78, 0x2a, 0xe3, 0x61, 0x17,
+	0xd4, 0xa4, 0x9c, 0xe1, 0x6f, 0x23, 0xcc, 0x85, 0x1d, 0x31, 0x3f, 0x57, 0x31, 0xab, 0xb1, 0xca,
+	0x52, 0xa2, 0x2b, 0xe6, 0xc3, 0xaf, 0x40, 0x5d, 0x72, 0xe2, 0xbf, 0x08, 0x65, 0xe4, 0x7b, 0xd5,
+	0x1b, 0x53, 0x8c, 0x9c, 0x9c, 0xc5, 0x7c, 0x25, 0x96, 0x9b, 0x8b, 0xea, 0x0b, 0x29, 0x6e, 0x3c,
+	0xd7, 0x40, 0x7d, 0x6d, 0xab, 0xc0, 0xc7, 0xa0, 0x3c, 0x99, 0x22, 0x12, 0xd8, 0xc4, 0xe1, 0xba,
+	0x26, 0xbd, 0xdc, 0x38, 0xdb, 0x77, 0x65, 0x74, 0xcf, 0xe1, 0xf0, 0x67, 0x0d, 0xbc, 0xb4, 0x74,
+	0x27, 0xca, 0xdf, 0x5e, 0x6d, 0x07, 0xb7, 0x4c, 0xaa, 0x95, 0xf9, 0x58, 0x0b, 0xb0, 0x2f, 0xe6,
+	0x21, 0x96, 0x43, 0x2c, 0x57, 0xa4, 0x55, 0x63, 0x2f, 0x9c, 0x74, 0x5e, 0x05, 0x87, 0x7c, 0xce,
+	0x05, 0x9e, 0xa9, 0xf9, 0xe2, 0xe1, 0x20, 0x19, 0xd4, 0x72, 0xd4, 0x1c, 0xff, 0x54, 0x00, 0xfb,
+	0xff, 0x1a, 0xee, 0xc9, 0xed, 0xa6, 0xdd, 0xed, 0x76, 0x2b, 0xe4, 0xbe, 0xdd, 0x9e, 0x81, 0x92,
+	0xf4, 0xa7, 0x28, 0xfd, 0xe9, 0xe6, 0x98, 0xe4, 0x59, 0x6a, 0x99, 0x17, 0x4b, 0xa7, 0x96, 0x64,
+	0xc2, 0x4f, 0x40, 0x95, 0x70, 0x3b, 0x44, 0x4c, 0xd8, 0xd4, 0xb5, 0xbf, 0xc1, 0xf3, 0xa4, 0x4d,
+	0x1b, 0x4b, 0x79, 0x75, 0x28, 0xf5, 0x55, 0x56, 0x15, 0xc2, 0x87, 0x88, 0x89, 0x81, 0xfb, 0x04,
+	0xcf, 0x8f, 0x9f, 0x6b, 0xe0, 0x60, 0xf5, 0x55, 0x07, 0xbf, 0x06, 0xbb, 0xea, 0xe6, 0xa4, 0x4c,
+	0x9a, 0x53, 0x6d, 0x77, 0xfe, 0xf3, 0xbd, 0x69, 0x0c, 0x12, 0x92, 0x95, 0x31, 0x61, 0x17, 0x6c,
+	0xdd, 0xc4, 0x09, 0x25, 0x56, 0xde, 0xfd, 0xc2, 0x57, 0xf2, 0xe3, 0xb7, 0xc1, 0x6e, 0x4a, 0x87,
+	0xf7, 0x41, 0xe5, 0xaa, 0x7f, 0x39, 0x3c, 0xfb, 0xb4, 0xd7, 0xed, 0x9d, 0x9d, 0xd6, 0xee, 0xc1,
+	0x0a, 0xd8, 0xb9, 0xea, 0x3f, 0xe9, 0x0f, 0xbe, 0xec, 0xd7, 0x34, 0xb8, 0x03, 0x8a, 0xe6, 0xe9,
+	0x69, 0xad, 0xd0, 0xf9, 0x5d, 0x03, 0x6f, 0x4c, 0xe8, 0xec, 0xf6, 0x37, 0x76, 0xca, 0xf1, 0x2b,
+	0x87, 0xb1, 0x89, 0x43, 0xed, 0xd9, 0x67, 0x49, 0xbc, 0x47, 0x7d, 0x14, 0x78, 0x06, 0x65, 0x5e,
+	0xd3, 0xc3, 0x81, 0xb4, 0x38, 0xfd, 0x2a, 0x0b, 0x09, 0xdf, 0xf0, 0xb9, 0xfa, 0x61, 0xb6, 0xfa,
+	0xa5, 0x50, 0x3c, 0x37, 0xcd, 0x5f, 0x0b, 0x8f, 0xce, 0x15, 0xd2, 0x74, 0xb8, 0xa1, 0x96, 0xf1,
+	0xea, 0xba, 0x65, 0x58, 0x69, 0xe4, 0x6f, 0x69, 0xcc, 0xc8, 0x74, 0xf8, 0x28, 0x8b, 0x19, 0x5d,
+	0xb7, 0x46, 0x59, 0xcc, 0x78, 0x5b, 0x26, 0xf1, 0xce, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31,
+	0xb1, 0x3b, 0x1b, 0x32, 0x0b, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/feed_item.pb.go b/googleapis/ads/googleads/v0/resources/feed_item.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e94e129381a9cd6dc562dcf0f4ecd570b6ca7720
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/feed_item.pb.go
@@ -0,0 +1,343 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/feed_item.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A feed item.
+type FeedItem struct {
+	// The resource name of the feed item.
+	// Feed item resource names have the form:
+	//
+	// `customers/{customer_id}/feedItems/{feed_id}_{feed_item_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed to which this feed item belongs.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The ID of this feed item.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// Start time in which this feed item is effective and can begin serving.
+	// The format is "YYYY-MM-DD HH:MM:SS".
+	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
+	StartDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=start_date_time,json=startDateTime,proto3" json:"start_date_time,omitempty"`
+	// End time in which this feed item is no longer effective and will stop
+	// The format is "YYYY-MM-DD HH:MM:SS".
+	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
+	EndDateTime *wrappers.StringValue `protobuf:"bytes,5,opt,name=end_date_time,json=endDateTime,proto3" json:"end_date_time,omitempty"`
+	// The feed item's attribute values.
+	AttributeValues []*FeedItemAttributeValue `protobuf:"bytes,6,rep,name=attribute_values,json=attributeValues,proto3" json:"attribute_values,omitempty"`
+	// Geo targeting restriction specifies the type of location that can be used
+	// for targeting.
+	GeoTargetingRestriction enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction `protobuf:"varint,7,opt,name=geo_targeting_restriction,json=geoTargetingRestriction,proto3,enum=google.ads.googleads.v0.enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction" json:"geo_targeting_restriction,omitempty"`
+	// The list of mappings used to substitute custom parameter tags in a
+	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,8,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
+	// Status of the feed item.
+	// This field is read-only.
+	Status               enums.FeedItemStatusEnum_FeedItemStatus `protobuf:"varint,9,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.FeedItemStatusEnum_FeedItemStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *FeedItem) Reset()         { *m = FeedItem{} }
+func (m *FeedItem) String() string { return proto.CompactTextString(m) }
+func (*FeedItem) ProtoMessage()    {}
+func (*FeedItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_528e30839a34eac0, []int{0}
+}
+func (m *FeedItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItem.Unmarshal(m, b)
+}
+func (m *FeedItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItem.Marshal(b, m, deterministic)
+}
+func (dst *FeedItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItem.Merge(dst, src)
+}
+func (m *FeedItem) XXX_Size() int {
+	return xxx_messageInfo_FeedItem.Size(m)
+}
+func (m *FeedItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItem proto.InternalMessageInfo
+
+func (m *FeedItem) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *FeedItem) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *FeedItem) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *FeedItem) GetStartDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.StartDateTime
+	}
+	return nil
+}
+
+func (m *FeedItem) GetEndDateTime() *wrappers.StringValue {
+	if m != nil {
+		return m.EndDateTime
+	}
+	return nil
+}
+
+func (m *FeedItem) GetAttributeValues() []*FeedItemAttributeValue {
+	if m != nil {
+		return m.AttributeValues
+	}
+	return nil
+}
+
+func (m *FeedItem) GetGeoTargetingRestriction() enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction {
+	if m != nil {
+		return m.GeoTargetingRestriction
+	}
+	return enums.GeoTargetingRestrictionEnum_UNSPECIFIED
+}
+
+func (m *FeedItem) GetUrlCustomParameters() []*common.CustomParameter {
+	if m != nil {
+		return m.UrlCustomParameters
+	}
+	return nil
+}
+
+func (m *FeedItem) GetStatus() enums.FeedItemStatusEnum_FeedItemStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedItemStatusEnum_UNSPECIFIED
+}
+
+// A feed item attribute value.
+type FeedItemAttributeValue struct {
+	// Id of the feed attribute for which the value is associated with.
+	FeedAttributeId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=feed_attribute_id,json=feedAttributeId,proto3" json:"feed_attribute_id,omitempty"`
+	// Int64 value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type INT64.
+	IntegerValue *wrappers.Int64Value `protobuf:"bytes,2,opt,name=integer_value,json=integerValue,proto3" json:"integer_value,omitempty"`
+	// Bool value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type BOOLEAN.
+	BooleanValue *wrappers.BoolValue `protobuf:"bytes,3,opt,name=boolean_value,json=booleanValue,proto3" json:"boolean_value,omitempty"`
+	// String value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type STRING, URL or DATE_TIME.
+	// For STRING the maximum length is 1500 characters. For URL the maximum
+	// length is 2076 characters. For DATE_TIME the format of the string must
+	// be the same as start and end time for the feed item.
+	StringValue *wrappers.StringValue `protobuf:"bytes,4,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"`
+	// Double value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type DOUBLE.
+	DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"`
+	// Price value. Should be set if feed_attribute_id refers to a feed attribute
+	// of type PRICE.
+	PriceValue *common.Price `protobuf:"bytes,6,opt,name=price_value,json=priceValue,proto3" json:"price_value,omitempty"`
+	// Repeated int64 value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type INT64_LIST.
+	IntegerValues []*wrappers.Int64Value `protobuf:"bytes,7,rep,name=integer_values,json=integerValues,proto3" json:"integer_values,omitempty"`
+	// Repeated bool value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type BOOLEAN_LIST.
+	BooleanValues []*wrappers.BoolValue `protobuf:"bytes,8,rep,name=boolean_values,json=booleanValues,proto3" json:"boolean_values,omitempty"`
+	// Repeated string value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type STRING_LIST, URL_LIST or DATE_TIME_LIST.
+	// For STRING_LIST and URL_LIST the total size of the list in bytes may not
+	// exceed 3000. For DATE_TIME_LIST the number of elements may not exceed 200.
+	//
+	// For STRING_LIST the maximum length of each string element is 1500
+	// characters. For URL_LIST the maximum length is 2076 characters. For
+	// DATE_TIME the format of the string must be the same as start and end time
+	// for the feed item.
+	StringValues []*wrappers.StringValue `protobuf:"bytes,9,rep,name=string_values,json=stringValues,proto3" json:"string_values,omitempty"`
+	// Repeated double value. Should be set if feed_attribute_id refers to a feed
+	// attribute of type DOUBLE_LIST.
+	DoubleValues         []*wrappers.DoubleValue `protobuf:"bytes,10,rep,name=double_values,json=doubleValues,proto3" json:"double_values,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *FeedItemAttributeValue) Reset()         { *m = FeedItemAttributeValue{} }
+func (m *FeedItemAttributeValue) String() string { return proto.CompactTextString(m) }
+func (*FeedItemAttributeValue) ProtoMessage()    {}
+func (*FeedItemAttributeValue) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_528e30839a34eac0, []int{1}
+}
+func (m *FeedItemAttributeValue) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemAttributeValue.Unmarshal(m, b)
+}
+func (m *FeedItemAttributeValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemAttributeValue.Marshal(b, m, deterministic)
+}
+func (dst *FeedItemAttributeValue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemAttributeValue.Merge(dst, src)
+}
+func (m *FeedItemAttributeValue) XXX_Size() int {
+	return xxx_messageInfo_FeedItemAttributeValue.Size(m)
+}
+func (m *FeedItemAttributeValue) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemAttributeValue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemAttributeValue proto.InternalMessageInfo
+
+func (m *FeedItemAttributeValue) GetFeedAttributeId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FeedAttributeId
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetIntegerValue() *wrappers.Int64Value {
+	if m != nil {
+		return m.IntegerValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetBooleanValue() *wrappers.BoolValue {
+	if m != nil {
+		return m.BooleanValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetStringValue() *wrappers.StringValue {
+	if m != nil {
+		return m.StringValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetDoubleValue() *wrappers.DoubleValue {
+	if m != nil {
+		return m.DoubleValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetPriceValue() *common.Price {
+	if m != nil {
+		return m.PriceValue
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetIntegerValues() []*wrappers.Int64Value {
+	if m != nil {
+		return m.IntegerValues
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetBooleanValues() []*wrappers.BoolValue {
+	if m != nil {
+		return m.BooleanValues
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetStringValues() []*wrappers.StringValue {
+	if m != nil {
+		return m.StringValues
+	}
+	return nil
+}
+
+func (m *FeedItemAttributeValue) GetDoubleValues() []*wrappers.DoubleValue {
+	if m != nil {
+		return m.DoubleValues
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*FeedItem)(nil), "google.ads.googleads.v0.resources.FeedItem")
+	proto.RegisterType((*FeedItemAttributeValue)(nil), "google.ads.googleads.v0.resources.FeedItemAttributeValue")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/feed_item.proto", fileDescriptor_feed_item_528e30839a34eac0)
+}
+
+var fileDescriptor_feed_item_528e30839a34eac0 = []byte{
+	// 722 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xd1, 0x6a, 0xdb, 0x3a,
+	0x18, 0xc7, 0x49, 0xd2, 0xa6, 0xad, 0x12, 0xb7, 0xe7, 0xf8, 0x70, 0xce, 0xf1, 0xba, 0x31, 0xd2,
+	0x8e, 0x42, 0x60, 0x60, 0x67, 0x5d, 0x37, 0x18, 0x63, 0xac, 0xc9, 0xba, 0x86, 0xee, 0x62, 0x04,
+	0xb7, 0x94, 0x31, 0x02, 0x46, 0x89, 0xbe, 0x1a, 0x81, 0x6d, 0x05, 0x49, 0xee, 0xde, 0x62, 0x0f,
+	0xb1, 0xcb, 0xbd, 0xc2, 0xde, 0x60, 0xec, 0x6a, 0x4f, 0x34, 0x2c, 0x4b, 0x8e, 0xd3, 0xd6, 0x49,
+	0xef, 0x24, 0xfb, 0xfb, 0xfd, 0xbf, 0x4f, 0xff, 0xfc, 0x15, 0xa3, 0x67, 0x21, 0x63, 0x61, 0x04,
+	0x1e, 0x26, 0xc2, 0xcb, 0x97, 0xd9, 0xea, 0xba, 0xe7, 0x71, 0x10, 0x2c, 0xe5, 0x53, 0x10, 0xde,
+	0x15, 0x00, 0x09, 0xa8, 0x84, 0xd8, 0x9d, 0x71, 0x26, 0x99, 0xbd, 0x97, 0xd7, 0xb9, 0x98, 0x08,
+	0xb7, 0x40, 0xdc, 0xeb, 0x9e, 0x5b, 0x20, 0xbb, 0x2f, 0xaa, 0x54, 0xa7, 0x2c, 0x8e, 0x59, 0xe2,
+	0x4d, 0x53, 0x21, 0x59, 0x1c, 0xcc, 0x30, 0xc7, 0x31, 0x48, 0xe0, 0xb9, 0xf2, 0x6e, 0x6f, 0x05,
+	0xa6, 0x26, 0xc9, 0xd7, 0x9a, 0x38, 0xaa, 0x22, 0x20, 0x49, 0xe3, 0xd2, 0xe8, 0x81, 0x90, 0x58,
+	0xa6, 0x42, 0x53, 0x6f, 0x96, 0x53, 0x21, 0xb0, 0x40, 0x62, 0x1e, 0x82, 0xa4, 0x49, 0x18, 0x70,
+	0x10, 0x92, 0xd3, 0xa9, 0xa4, 0x45, 0xd3, 0xc7, 0x1a, 0x57, 0xbb, 0x49, 0x7a, 0xe5, 0x7d, 0xe1,
+	0x78, 0x36, 0x03, 0xae, 0xe5, 0xf7, 0x7f, 0xad, 0xa3, 0xcd, 0x53, 0x00, 0x72, 0x26, 0x21, 0xb6,
+	0x9f, 0x20, 0xcb, 0xf8, 0x12, 0x24, 0x38, 0x06, 0xa7, 0xd6, 0xa9, 0x75, 0xb7, 0xfc, 0xb6, 0x79,
+	0xf8, 0x11, 0xc7, 0x60, 0xf7, 0xd0, 0x5a, 0x36, 0xaa, 0x53, 0xef, 0xd4, 0xba, 0xad, 0xc3, 0x47,
+	0xda, 0x56, 0xd7, 0x34, 0x70, 0xcf, 0x25, 0xa7, 0x49, 0x78, 0x89, 0xa3, 0x14, 0x7c, 0x55, 0x69,
+	0x3f, 0x45, 0x75, 0x4a, 0x9c, 0x86, 0xaa, 0x7f, 0x78, 0xab, 0xfe, 0x2c, 0x91, 0x2f, 0x8f, 0xf2,
+	0xf2, 0x3a, 0x25, 0xf6, 0x09, 0xda, 0x11, 0x12, 0x73, 0x19, 0x10, 0x2c, 0x21, 0x90, 0x34, 0x06,
+	0x67, 0xed, 0x1e, 0x9d, 0x2c, 0x05, 0x9d, 0x60, 0x09, 0x17, 0x34, 0x06, 0xfb, 0x18, 0x59, 0x90,
+	0x90, 0x92, 0xc6, 0xfa, 0x3d, 0x34, 0x5a, 0x90, 0x90, 0x42, 0x81, 0xa0, 0xbf, 0xb0, 0x94, 0x9c,
+	0x4e, 0x52, 0x09, 0xc1, 0x75, 0xf6, 0x5e, 0x38, 0xcd, 0x4e, 0xa3, 0xdb, 0x3a, 0x7c, 0xe5, 0xae,
+	0x0c, 0x95, 0x6b, 0x2c, 0xed, 0x1b, 0x89, 0xbc, 0xc3, 0x0e, 0x5e, 0xd8, 0x0b, 0xfb, 0x6b, 0x0d,
+	0x3d, 0xa8, 0xfc, 0x09, 0x9d, 0x8d, 0x4e, 0xad, 0xbb, 0x7d, 0xe8, 0x57, 0xf6, 0x53, 0x11, 0x70,
+	0x87, 0xc0, 0x2e, 0x0c, 0xee, 0xcf, 0xe9, 0xf7, 0x49, 0x1a, 0x57, 0xbd, 0xf3, 0xff, 0x0f, 0xef,
+	0x7e, 0x61, 0x4f, 0xd1, 0xbf, 0x29, 0x8f, 0x82, 0x9b, 0xa1, 0x17, 0xce, 0xa6, 0x3a, 0xbb, 0x57,
+	0x39, 0x8b, 0x8e, 0xfa, 0x3b, 0x05, 0x8e, 0x0c, 0xe7, 0xff, 0x93, 0xf2, 0xe8, 0xc6, 0x33, 0x61,
+	0x7f, 0x42, 0xcd, 0x3c, 0xe3, 0xce, 0x96, 0x3a, 0xe1, 0xf1, 0x8a, 0x13, 0x1a, 0x37, 0xcf, 0x15,
+	0xa4, 0x0e, 0xb6, 0xf8, 0xc8, 0xd7, 0x7a, 0xfb, 0x3f, 0xd6, 0xd1, 0x7f, 0x77, 0x7b, 0x6f, 0x0f,
+	0xd1, 0xdf, 0xea, 0x8a, 0xcd, 0x7f, 0x55, 0x4a, 0x54, 0xc0, 0x57, 0x84, 0x72, 0x27, 0xa3, 0x0a,
+	0xad, 0x33, 0x92, 0x65, 0x8b, 0x26, 0x12, 0x42, 0xe0, 0x79, 0x2e, 0xf4, 0x4d, 0x58, 0x2a, 0xd2,
+	0xd6, 0x44, 0x3e, 0xca, 0x5b, 0x64, 0x4d, 0x18, 0x8b, 0x00, 0x27, 0x5a, 0x21, 0xbf, 0x1b, 0xbb,
+	0xb7, 0x14, 0x06, 0x8c, 0x45, 0x5a, 0x40, 0x03, 0x46, 0xa0, 0x2d, 0x54, 0x70, 0x35, 0x7f, 0x9f,
+	0x1b, 0xd2, 0x12, 0xf3, 0x4d, 0x26, 0x40, 0x58, 0x3a, 0x89, 0x74, 0xb4, 0x2b, 0xaf, 0xc7, 0x89,
+	0x2a, 0xd2, 0x02, 0x64, 0xbe, 0xb1, 0x4f, 0x51, 0x6b, 0xc6, 0xe9, 0xd4, 0xf0, 0x4d, 0xc5, 0x1f,
+	0xac, 0x4a, 0xc7, 0x28, 0x43, 0x7c, 0xa4, 0xc8, 0x5c, 0x67, 0x80, 0xb6, 0x17, 0xcc, 0x14, 0xce,
+	0x86, 0x0a, 0xda, 0x52, 0x37, 0xad, 0xb2, 0x9b, 0xc2, 0xee, 0xa3, 0xed, 0x05, 0x3b, 0x4d, 0x58,
+	0x97, 0xf9, 0x69, 0x95, 0xfd, 0xcc, 0x24, 0xac, 0xb2, 0xa1, 0x59, 0x30, 0x1b, 0x2b, 0x1d, 0x6d,
+	0x97, 0x1c, 0x55, 0x12, 0x65, 0x4b, 0x85, 0x83, 0x2a, 0x24, 0xca, 0x9e, 0xb6, 0x4b, 0x9e, 0x8a,
+	0xc1, 0xef, 0x1a, 0x3a, 0x98, 0xb2, 0x78, 0xf5, 0xff, 0xcb, 0xc0, 0x32, 0x21, 0x1f, 0x65, 0xaa,
+	0xa3, 0xda, 0xe7, 0x0f, 0x9a, 0x09, 0x59, 0x84, 0x93, 0xd0, 0x65, 0x3c, 0xf4, 0x42, 0x48, 0x54,
+	0x4f, 0xf3, 0xd9, 0x98, 0x51, 0xb1, 0xe4, 0xd3, 0xf9, 0xba, 0x58, 0x7d, 0xab, 0x37, 0x86, 0xfd,
+	0xfe, 0xf7, 0xfa, 0xde, 0x30, 0x97, 0xec, 0x13, 0xe1, 0xe6, 0xcb, 0x6c, 0x75, 0xd9, 0x73, 0x7d,
+	0x53, 0xf9, 0xd3, 0xd4, 0x8c, 0xfb, 0x44, 0x8c, 0x8b, 0x9a, 0xf1, 0x65, 0x6f, 0x5c, 0xd4, 0x4c,
+	0x9a, 0x6a, 0x88, 0xe7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x75, 0x42, 0x94, 0x5b, 0xbe, 0x07,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/feed_mapping.pb.go b/googleapis/ads/googleads/v0/resources/feed_mapping.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..fdb059b83a440a6c1655bf9ef7a83fc6071d148a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/feed_mapping.pb.go
@@ -0,0 +1,867 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/feed_mapping.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A feed mapping.
+type FeedMapping struct {
+	// The resource name of the feed mapping.
+	// Feed mapping resource names have the form:
+	//
+	// `customers/{customer_id}/feedMappings/{feed_id}_{feed_mapping_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The feed of this feed mapping.
+	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
+	// Feed attributes to field mappings. These mappings are a one-to-many
+	// relationship meaning that 1 feed attribute can be used to populate
+	// multiple placeholder fields, but 1 placeholder field can only draw
+	// data from 1 feed attribute. Ad Customizer is an exception, 1 placeholder
+	// field can be mapped to multiple feed attributes. Required.
+	AttributeFieldMappings []*AttributeFieldMapping `protobuf:"bytes,5,rep,name=attribute_field_mappings,json=attributeFieldMappings,proto3" json:"attribute_field_mappings,omitempty"`
+	// Status of the feed mapping.
+	// This field is read-only.
+	Status enums.FeedMappingStatusEnum_FeedMappingStatus `protobuf:"varint,6,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.FeedMappingStatusEnum_FeedMappingStatus" json:"status,omitempty"`
+	// Feed mapping target. Can be either a placeholder or a criterion. For a
+	// given feed, the active FeedMappings must have unique targets. Required.
+	//
+	// Types that are valid to be assigned to Target:
+	//	*FeedMapping_PlaceholderType
+	//	*FeedMapping_CriterionType
+	Target               isFeedMapping_Target `protobuf_oneof:"target"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *FeedMapping) Reset()         { *m = FeedMapping{} }
+func (m *FeedMapping) String() string { return proto.CompactTextString(m) }
+func (*FeedMapping) ProtoMessage()    {}
+func (*FeedMapping) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_531c94f1bcfe6b63, []int{0}
+}
+func (m *FeedMapping) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMapping.Unmarshal(m, b)
+}
+func (m *FeedMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMapping.Marshal(b, m, deterministic)
+}
+func (dst *FeedMapping) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMapping.Merge(dst, src)
+}
+func (m *FeedMapping) XXX_Size() int {
+	return xxx_messageInfo_FeedMapping.Size(m)
+}
+func (m *FeedMapping) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMapping.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMapping proto.InternalMessageInfo
+
+func (m *FeedMapping) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *FeedMapping) GetFeed() *wrappers.StringValue {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *FeedMapping) GetAttributeFieldMappings() []*AttributeFieldMapping {
+	if m != nil {
+		return m.AttributeFieldMappings
+	}
+	return nil
+}
+
+func (m *FeedMapping) GetStatus() enums.FeedMappingStatusEnum_FeedMappingStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.FeedMappingStatusEnum_UNSPECIFIED
+}
+
+type isFeedMapping_Target interface {
+	isFeedMapping_Target()
+}
+
+type FeedMapping_PlaceholderType struct {
+	PlaceholderType enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,3,opt,name=placeholder_type,json=placeholderType,proto3,enum=google.ads.googleads.v0.enums.PlaceholderTypeEnum_PlaceholderType,oneof"`
+}
+
+type FeedMapping_CriterionType struct {
+	CriterionType enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType `protobuf:"varint,4,opt,name=criterion_type,json=criterionType,proto3,enum=google.ads.googleads.v0.enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType,oneof"`
+}
+
+func (*FeedMapping_PlaceholderType) isFeedMapping_Target() {}
+
+func (*FeedMapping_CriterionType) isFeedMapping_Target() {}
+
+func (m *FeedMapping) GetTarget() isFeedMapping_Target {
+	if m != nil {
+		return m.Target
+	}
+	return nil
+}
+
+func (m *FeedMapping) GetPlaceholderType() enums.PlaceholderTypeEnum_PlaceholderType {
+	if x, ok := m.GetTarget().(*FeedMapping_PlaceholderType); ok {
+		return x.PlaceholderType
+	}
+	return enums.PlaceholderTypeEnum_UNSPECIFIED
+}
+
+func (m *FeedMapping) GetCriterionType() enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType {
+	if x, ok := m.GetTarget().(*FeedMapping_CriterionType); ok {
+		return x.CriterionType
+	}
+	return enums.FeedMappingCriterionTypeEnum_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*FeedMapping) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _FeedMapping_OneofMarshaler, _FeedMapping_OneofUnmarshaler, _FeedMapping_OneofSizer, []interface{}{
+		(*FeedMapping_PlaceholderType)(nil),
+		(*FeedMapping_CriterionType)(nil),
+	}
+}
+
+func _FeedMapping_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*FeedMapping)
+	// target
+	switch x := m.Target.(type) {
+	case *FeedMapping_PlaceholderType:
+		b.EncodeVarint(3<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.PlaceholderType))
+	case *FeedMapping_CriterionType:
+		b.EncodeVarint(4<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CriterionType))
+	case nil:
+	default:
+		return fmt.Errorf("FeedMapping.Target has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _FeedMapping_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*FeedMapping)
+	switch tag {
+	case 3: // target.placeholder_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Target = &FeedMapping_PlaceholderType{enums.PlaceholderTypeEnum_PlaceholderType(x)}
+		return true, err
+	case 4: // target.criterion_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Target = &FeedMapping_CriterionType{enums.FeedMappingCriterionTypeEnum_FeedMappingCriterionType(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _FeedMapping_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*FeedMapping)
+	// target
+	switch x := m.Target.(type) {
+	case *FeedMapping_PlaceholderType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.PlaceholderType))
+	case *FeedMapping_CriterionType:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.CriterionType))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Maps from feed attribute id to a placeholder or criterion field id.
+type AttributeFieldMapping struct {
+	// Feed attribute from which to map.
+	FeedAttributeId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=feed_attribute_id,json=feedAttributeId,proto3" json:"feed_attribute_id,omitempty"`
+	// The placeholder field ID. If a placeholder field enum is not published in
+	// the current API version, then this field will be populated and the field
+	// oneof will be empty.
+	// This field is read-only.
+	FieldId *wrappers.Int64Value `protobuf:"bytes,2,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"`
+	// Placeholder or criterion field to be populated using data from
+	// the above feed attribute. Required.
+	//
+	// Types that are valid to be assigned to Field:
+	//	*AttributeFieldMapping_SitelinkField
+	//	*AttributeFieldMapping_CallField
+	//	*AttributeFieldMapping_AppField
+	//	*AttributeFieldMapping_CalloutField
+	//	*AttributeFieldMapping_StructuredSnippetField
+	//	*AttributeFieldMapping_MessageField
+	//	*AttributeFieldMapping_PriceField
+	//	*AttributeFieldMapping_PromotionField
+	//	*AttributeFieldMapping_AdCustomizerField
+	//	*AttributeFieldMapping_EducationField
+	//	*AttributeFieldMapping_FlightField
+	//	*AttributeFieldMapping_CustomField
+	//	*AttributeFieldMapping_HotelField
+	//	*AttributeFieldMapping_RealEstateField
+	//	*AttributeFieldMapping_TravelField
+	//	*AttributeFieldMapping_LocalField
+	//	*AttributeFieldMapping_JobField
+	Field                isAttributeFieldMapping_Field `protobuf_oneof:"field"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *AttributeFieldMapping) Reset()         { *m = AttributeFieldMapping{} }
+func (m *AttributeFieldMapping) String() string { return proto.CompactTextString(m) }
+func (*AttributeFieldMapping) ProtoMessage()    {}
+func (*AttributeFieldMapping) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_531c94f1bcfe6b63, []int{1}
+}
+func (m *AttributeFieldMapping) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AttributeFieldMapping.Unmarshal(m, b)
+}
+func (m *AttributeFieldMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AttributeFieldMapping.Marshal(b, m, deterministic)
+}
+func (dst *AttributeFieldMapping) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AttributeFieldMapping.Merge(dst, src)
+}
+func (m *AttributeFieldMapping) XXX_Size() int {
+	return xxx_messageInfo_AttributeFieldMapping.Size(m)
+}
+func (m *AttributeFieldMapping) XXX_DiscardUnknown() {
+	xxx_messageInfo_AttributeFieldMapping.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AttributeFieldMapping proto.InternalMessageInfo
+
+func (m *AttributeFieldMapping) GetFeedAttributeId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FeedAttributeId
+	}
+	return nil
+}
+
+func (m *AttributeFieldMapping) GetFieldId() *wrappers.Int64Value {
+	if m != nil {
+		return m.FieldId
+	}
+	return nil
+}
+
+type isAttributeFieldMapping_Field interface {
+	isAttributeFieldMapping_Field()
+}
+
+type AttributeFieldMapping_SitelinkField struct {
+	SitelinkField enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField `protobuf:"varint,3,opt,name=sitelink_field,json=sitelinkField,proto3,enum=google.ads.googleads.v0.enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_CallField struct {
+	CallField enums.CallPlaceholderFieldEnum_CallPlaceholderField `protobuf:"varint,4,opt,name=call_field,json=callField,proto3,enum=google.ads.googleads.v0.enums.CallPlaceholderFieldEnum_CallPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_AppField struct {
+	AppField enums.AppPlaceholderFieldEnum_AppPlaceholderField `protobuf:"varint,5,opt,name=app_field,json=appField,proto3,enum=google.ads.googleads.v0.enums.AppPlaceholderFieldEnum_AppPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_CalloutField struct {
+	CalloutField enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField `protobuf:"varint,8,opt,name=callout_field,json=calloutField,proto3,enum=google.ads.googleads.v0.enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_StructuredSnippetField struct {
+	StructuredSnippetField enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField `protobuf:"varint,9,opt,name=structured_snippet_field,json=structuredSnippetField,proto3,enum=google.ads.googleads.v0.enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_MessageField struct {
+	MessageField enums.MessagePlaceholderFieldEnum_MessagePlaceholderField `protobuf:"varint,10,opt,name=message_field,json=messageField,proto3,enum=google.ads.googleads.v0.enums.MessagePlaceholderFieldEnum_MessagePlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_PriceField struct {
+	PriceField enums.PricePlaceholderFieldEnum_PricePlaceholderField `protobuf:"varint,11,opt,name=price_field,json=priceField,proto3,enum=google.ads.googleads.v0.enums.PricePlaceholderFieldEnum_PricePlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_PromotionField struct {
+	PromotionField enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField `protobuf:"varint,12,opt,name=promotion_field,json=promotionField,proto3,enum=google.ads.googleads.v0.enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_AdCustomizerField struct {
+	AdCustomizerField enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField `protobuf:"varint,13,opt,name=ad_customizer_field,json=adCustomizerField,proto3,enum=google.ads.googleads.v0.enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_EducationField struct {
+	EducationField enums.EducationPlaceholderFieldEnum_EducationPlaceholderField `protobuf:"varint,16,opt,name=education_field,json=educationField,proto3,enum=google.ads.googleads.v0.enums.EducationPlaceholderFieldEnum_EducationPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_FlightField struct {
+	FlightField enums.FlightPlaceholderFieldEnum_FlightPlaceholderField `protobuf:"varint,17,opt,name=flight_field,json=flightField,proto3,enum=google.ads.googleads.v0.enums.FlightPlaceholderFieldEnum_FlightPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_CustomField struct {
+	CustomField enums.CustomPlaceholderFieldEnum_CustomPlaceholderField `protobuf:"varint,18,opt,name=custom_field,json=customField,proto3,enum=google.ads.googleads.v0.enums.CustomPlaceholderFieldEnum_CustomPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_HotelField struct {
+	HotelField enums.HotelPlaceholderFieldEnum_HotelPlaceholderField `protobuf:"varint,19,opt,name=hotel_field,json=hotelField,proto3,enum=google.ads.googleads.v0.enums.HotelPlaceholderFieldEnum_HotelPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_RealEstateField struct {
+	RealEstateField enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField `protobuf:"varint,20,opt,name=real_estate_field,json=realEstateField,proto3,enum=google.ads.googleads.v0.enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_TravelField struct {
+	TravelField enums.TravelPlaceholderFieldEnum_TravelPlaceholderField `protobuf:"varint,21,opt,name=travel_field,json=travelField,proto3,enum=google.ads.googleads.v0.enums.TravelPlaceholderFieldEnum_TravelPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_LocalField struct {
+	LocalField enums.LocalPlaceholderFieldEnum_LocalPlaceholderField `protobuf:"varint,22,opt,name=local_field,json=localField,proto3,enum=google.ads.googleads.v0.enums.LocalPlaceholderFieldEnum_LocalPlaceholderField,oneof"`
+}
+
+type AttributeFieldMapping_JobField struct {
+	JobField enums.JobPlaceholderFieldEnum_JobPlaceholderField `protobuf:"varint,23,opt,name=job_field,json=jobField,proto3,enum=google.ads.googleads.v0.enums.JobPlaceholderFieldEnum_JobPlaceholderField,oneof"`
+}
+
+func (*AttributeFieldMapping_SitelinkField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_CallField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_AppField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_CalloutField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_StructuredSnippetField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_MessageField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_PriceField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_PromotionField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_AdCustomizerField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_EducationField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_FlightField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_CustomField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_HotelField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_RealEstateField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_TravelField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_LocalField) isAttributeFieldMapping_Field() {}
+
+func (*AttributeFieldMapping_JobField) isAttributeFieldMapping_Field() {}
+
+func (m *AttributeFieldMapping) GetField() isAttributeFieldMapping_Field {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *AttributeFieldMapping) GetSitelinkField() enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_SitelinkField); ok {
+		return x.SitelinkField
+	}
+	return enums.SitelinkPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetCallField() enums.CallPlaceholderFieldEnum_CallPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_CallField); ok {
+		return x.CallField
+	}
+	return enums.CallPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetAppField() enums.AppPlaceholderFieldEnum_AppPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_AppField); ok {
+		return x.AppField
+	}
+	return enums.AppPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetCalloutField() enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_CalloutField); ok {
+		return x.CalloutField
+	}
+	return enums.CalloutPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetStructuredSnippetField() enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_StructuredSnippetField); ok {
+		return x.StructuredSnippetField
+	}
+	return enums.StructuredSnippetPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetMessageField() enums.MessagePlaceholderFieldEnum_MessagePlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_MessageField); ok {
+		return x.MessageField
+	}
+	return enums.MessagePlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetPriceField() enums.PricePlaceholderFieldEnum_PricePlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_PriceField); ok {
+		return x.PriceField
+	}
+	return enums.PricePlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetPromotionField() enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_PromotionField); ok {
+		return x.PromotionField
+	}
+	return enums.PromotionPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetAdCustomizerField() enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_AdCustomizerField); ok {
+		return x.AdCustomizerField
+	}
+	return enums.AdCustomizerPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetEducationField() enums.EducationPlaceholderFieldEnum_EducationPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_EducationField); ok {
+		return x.EducationField
+	}
+	return enums.EducationPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetFlightField() enums.FlightPlaceholderFieldEnum_FlightPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_FlightField); ok {
+		return x.FlightField
+	}
+	return enums.FlightPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetCustomField() enums.CustomPlaceholderFieldEnum_CustomPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_CustomField); ok {
+		return x.CustomField
+	}
+	return enums.CustomPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetHotelField() enums.HotelPlaceholderFieldEnum_HotelPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_HotelField); ok {
+		return x.HotelField
+	}
+	return enums.HotelPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetRealEstateField() enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_RealEstateField); ok {
+		return x.RealEstateField
+	}
+	return enums.RealEstatePlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetTravelField() enums.TravelPlaceholderFieldEnum_TravelPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_TravelField); ok {
+		return x.TravelField
+	}
+	return enums.TravelPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetLocalField() enums.LocalPlaceholderFieldEnum_LocalPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_LocalField); ok {
+		return x.LocalField
+	}
+	return enums.LocalPlaceholderFieldEnum_UNSPECIFIED
+}
+
+func (m *AttributeFieldMapping) GetJobField() enums.JobPlaceholderFieldEnum_JobPlaceholderField {
+	if x, ok := m.GetField().(*AttributeFieldMapping_JobField); ok {
+		return x.JobField
+	}
+	return enums.JobPlaceholderFieldEnum_UNSPECIFIED
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AttributeFieldMapping) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AttributeFieldMapping_OneofMarshaler, _AttributeFieldMapping_OneofUnmarshaler, _AttributeFieldMapping_OneofSizer, []interface{}{
+		(*AttributeFieldMapping_SitelinkField)(nil),
+		(*AttributeFieldMapping_CallField)(nil),
+		(*AttributeFieldMapping_AppField)(nil),
+		(*AttributeFieldMapping_CalloutField)(nil),
+		(*AttributeFieldMapping_StructuredSnippetField)(nil),
+		(*AttributeFieldMapping_MessageField)(nil),
+		(*AttributeFieldMapping_PriceField)(nil),
+		(*AttributeFieldMapping_PromotionField)(nil),
+		(*AttributeFieldMapping_AdCustomizerField)(nil),
+		(*AttributeFieldMapping_EducationField)(nil),
+		(*AttributeFieldMapping_FlightField)(nil),
+		(*AttributeFieldMapping_CustomField)(nil),
+		(*AttributeFieldMapping_HotelField)(nil),
+		(*AttributeFieldMapping_RealEstateField)(nil),
+		(*AttributeFieldMapping_TravelField)(nil),
+		(*AttributeFieldMapping_LocalField)(nil),
+		(*AttributeFieldMapping_JobField)(nil),
+	}
+}
+
+func _AttributeFieldMapping_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AttributeFieldMapping)
+	// field
+	switch x := m.Field.(type) {
+	case *AttributeFieldMapping_SitelinkField:
+		b.EncodeVarint(3<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.SitelinkField))
+	case *AttributeFieldMapping_CallField:
+		b.EncodeVarint(4<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CallField))
+	case *AttributeFieldMapping_AppField:
+		b.EncodeVarint(5<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AppField))
+	case *AttributeFieldMapping_CalloutField:
+		b.EncodeVarint(8<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CalloutField))
+	case *AttributeFieldMapping_StructuredSnippetField:
+		b.EncodeVarint(9<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.StructuredSnippetField))
+	case *AttributeFieldMapping_MessageField:
+		b.EncodeVarint(10<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MessageField))
+	case *AttributeFieldMapping_PriceField:
+		b.EncodeVarint(11<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.PriceField))
+	case *AttributeFieldMapping_PromotionField:
+		b.EncodeVarint(12<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.PromotionField))
+	case *AttributeFieldMapping_AdCustomizerField:
+		b.EncodeVarint(13<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.AdCustomizerField))
+	case *AttributeFieldMapping_EducationField:
+		b.EncodeVarint(16<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.EducationField))
+	case *AttributeFieldMapping_FlightField:
+		b.EncodeVarint(17<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.FlightField))
+	case *AttributeFieldMapping_CustomField:
+		b.EncodeVarint(18<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.CustomField))
+	case *AttributeFieldMapping_HotelField:
+		b.EncodeVarint(19<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.HotelField))
+	case *AttributeFieldMapping_RealEstateField:
+		b.EncodeVarint(20<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.RealEstateField))
+	case *AttributeFieldMapping_TravelField:
+		b.EncodeVarint(21<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.TravelField))
+	case *AttributeFieldMapping_LocalField:
+		b.EncodeVarint(22<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.LocalField))
+	case *AttributeFieldMapping_JobField:
+		b.EncodeVarint(23<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.JobField))
+	case nil:
+	default:
+		return fmt.Errorf("AttributeFieldMapping.Field has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AttributeFieldMapping_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AttributeFieldMapping)
+	switch tag {
+	case 3: // field.sitelink_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_SitelinkField{enums.SitelinkPlaceholderFieldEnum_SitelinkPlaceholderField(x)}
+		return true, err
+	case 4: // field.call_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_CallField{enums.CallPlaceholderFieldEnum_CallPlaceholderField(x)}
+		return true, err
+	case 5: // field.app_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_AppField{enums.AppPlaceholderFieldEnum_AppPlaceholderField(x)}
+		return true, err
+	case 8: // field.callout_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_CalloutField{enums.CalloutPlaceholderFieldEnum_CalloutPlaceholderField(x)}
+		return true, err
+	case 9: // field.structured_snippet_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_StructuredSnippetField{enums.StructuredSnippetPlaceholderFieldEnum_StructuredSnippetPlaceholderField(x)}
+		return true, err
+	case 10: // field.message_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_MessageField{enums.MessagePlaceholderFieldEnum_MessagePlaceholderField(x)}
+		return true, err
+	case 11: // field.price_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_PriceField{enums.PricePlaceholderFieldEnum_PricePlaceholderField(x)}
+		return true, err
+	case 12: // field.promotion_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_PromotionField{enums.PromotionPlaceholderFieldEnum_PromotionPlaceholderField(x)}
+		return true, err
+	case 13: // field.ad_customizer_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_AdCustomizerField{enums.AdCustomizerPlaceholderFieldEnum_AdCustomizerPlaceholderField(x)}
+		return true, err
+	case 16: // field.education_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_EducationField{enums.EducationPlaceholderFieldEnum_EducationPlaceholderField(x)}
+		return true, err
+	case 17: // field.flight_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_FlightField{enums.FlightPlaceholderFieldEnum_FlightPlaceholderField(x)}
+		return true, err
+	case 18: // field.custom_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_CustomField{enums.CustomPlaceholderFieldEnum_CustomPlaceholderField(x)}
+		return true, err
+	case 19: // field.hotel_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_HotelField{enums.HotelPlaceholderFieldEnum_HotelPlaceholderField(x)}
+		return true, err
+	case 20: // field.real_estate_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_RealEstateField{enums.RealEstatePlaceholderFieldEnum_RealEstatePlaceholderField(x)}
+		return true, err
+	case 21: // field.travel_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_TravelField{enums.TravelPlaceholderFieldEnum_TravelPlaceholderField(x)}
+		return true, err
+	case 22: // field.local_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_LocalField{enums.LocalPlaceholderFieldEnum_LocalPlaceholderField(x)}
+		return true, err
+	case 23: // field.job_field
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Field = &AttributeFieldMapping_JobField{enums.JobPlaceholderFieldEnum_JobPlaceholderField(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AttributeFieldMapping_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AttributeFieldMapping)
+	// field
+	switch x := m.Field.(type) {
+	case *AttributeFieldMapping_SitelinkField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.SitelinkField))
+	case *AttributeFieldMapping_CallField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.CallField))
+	case *AttributeFieldMapping_AppField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.AppField))
+	case *AttributeFieldMapping_CalloutField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.CalloutField))
+	case *AttributeFieldMapping_StructuredSnippetField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.StructuredSnippetField))
+	case *AttributeFieldMapping_MessageField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.MessageField))
+	case *AttributeFieldMapping_PriceField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.PriceField))
+	case *AttributeFieldMapping_PromotionField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.PromotionField))
+	case *AttributeFieldMapping_AdCustomizerField:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.AdCustomizerField))
+	case *AttributeFieldMapping_EducationField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.EducationField))
+	case *AttributeFieldMapping_FlightField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.FlightField))
+	case *AttributeFieldMapping_CustomField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.CustomField))
+	case *AttributeFieldMapping_HotelField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.HotelField))
+	case *AttributeFieldMapping_RealEstateField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.RealEstateField))
+	case *AttributeFieldMapping_TravelField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.TravelField))
+	case *AttributeFieldMapping_LocalField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.LocalField))
+	case *AttributeFieldMapping_JobField:
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(x.JobField))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*FeedMapping)(nil), "google.ads.googleads.v0.resources.FeedMapping")
+	proto.RegisterType((*AttributeFieldMapping)(nil), "google.ads.googleads.v0.resources.AttributeFieldMapping")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/feed_mapping.proto", fileDescriptor_feed_mapping_531c94f1bcfe6b63)
+}
+
+var fileDescriptor_feed_mapping_531c94f1bcfe6b63 = []byte{
+	// 1111 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x98, 0x4b, 0x6f, 0xdc, 0x36,
+	0x10, 0xc7, 0xa5, 0xf8, 0x11, 0x9b, 0xeb, 0xa7, 0xd2, 0xb8, 0x8b, 0xb4, 0x28, 0x9c, 0x14, 0x05,
+	0x7c, 0xd2, 0x1a, 0xae, 0x91, 0x3e, 0xd2, 0x07, 0xd6, 0x86, 0x6d, 0xd9, 0x48, 0x02, 0x43, 0x36,
+	0x8c, 0xa2, 0x58, 0x74, 0xc1, 0x95, 0xb8, 0xb2, 0x52, 0x49, 0x64, 0x29, 0xca, 0x85, 0x0b, 0xf4,
+	0xd0, 0x4b, 0x8f, 0xfd, 0x10, 0x39, 0xf6, 0xd8, 0x8f, 0xd1, 0x7b, 0xef, 0xfd, 0x28, 0x05, 0x39,
+	0x92, 0x76, 0xed, 0x50, 0x8f, 0xee, 0x4d, 0xe6, 0xf0, 0x3f, 0xbf, 0xe1, 0x70, 0x48, 0xce, 0x1a,
+	0xed, 0x07, 0x94, 0x06, 0x11, 0xe9, 0x61, 0x3f, 0xed, 0xc1, 0xa7, 0xfc, 0xba, 0xd9, 0xed, 0x71,
+	0x92, 0xd2, 0x8c, 0x7b, 0x24, 0xed, 0x8d, 0x09, 0xf1, 0x87, 0x31, 0x66, 0x2c, 0x4c, 0x02, 0x9b,
+	0x71, 0x2a, 0xa8, 0xf5, 0x14, 0xa6, 0xda, 0xd8, 0x4f, 0xed, 0x52, 0x65, 0xdf, 0xec, 0xda, 0xa5,
+	0xea, 0xc9, 0x61, 0x95, 0x63, 0x92, 0x64, 0x71, 0xda, 0xc3, 0xfe, 0xd0, 0xcb, 0x52, 0x41, 0xe3,
+	0xf0, 0x17, 0xc2, 0x87, 0x2c, 0xc2, 0x1e, 0xb9, 0xa6, 0x91, 0x4f, 0xf8, 0x70, 0x1c, 0x92, 0xc8,
+	0x07, 0xce, 0x93, 0x2f, 0x1a, 0x9c, 0x30, 0x56, 0x29, 0xfd, 0xb2, 0x5e, 0xea, 0xe1, 0x28, 0xaa,
+	0xd4, 0x7e, 0xdd, 0xac, 0xa5, 0x99, 0xa8, 0x94, 0x7f, 0xd5, 0x20, 0x57, 0xeb, 0xae, 0x54, 0x7f,
+	0x5b, 0xaf, 0x26, 0x7e, 0xe6, 0x61, 0x11, 0xd2, 0x64, 0x56, 0x07, 0xd3, 0xdb, 0x39, 0xf4, 0x78,
+	0x28, 0x08, 0x97, 0xde, 0xc4, 0x2d, 0x23, 0xb9, 0x83, 0xcf, 0xfe, 0x87, 0x83, 0x54, 0x60, 0x91,
+	0xa5, 0xed, 0x16, 0x3e, 0x8e, 0xc2, 0xe0, 0xba, 0x3a, 0x6d, 0x2f, 0xea, 0xd5, 0xd7, 0x54, 0x90,
+	0x68, 0xd6, 0x4a, 0x79, 0x43, 0x47, 0xb3, 0x72, 0x23, 0xea, 0xe1, 0x99, 0x4b, 0x25, 0x26, 0x69,
+	0x8a, 0x03, 0x52, 0x29, 0xdf, 0xaf, 0x97, 0x4f, 0xcb, 0xa6, 0x36, 0xa8, 0x21, 0x62, 0xc6, 0x43,
+	0x8f, 0xcc, 0x5a, 0x1e, 0x8c, 0xd3, 0x98, 0xd6, 0xd6, 0x57, 0xbf, 0xde, 0x01, 0x27, 0x38, 0x1a,
+	0x12, 0x59, 0x17, 0xd5, 0x31, 0x7c, 0x53, 0xef, 0x22, 0x0d, 0x05, 0x89, 0xc2, 0xe4, 0xc7, 0x4a,
+	0xbd, 0xd3, 0xa0, 0x17, 0x3c, 0xf3, 0x44, 0xc6, 0x89, 0x3f, 0x4c, 0x93, 0x90, 0x31, 0x32, 0xf3,
+	0x59, 0x15, 0x1c, 0xdf, 0xd4, 0x54, 0xdd, 0x47, 0xb9, 0x5a, 0xfd, 0x35, 0xca, 0xc6, 0xbd, 0x9f,
+	0x39, 0x66, 0x8c, 0xf0, 0xfc, 0x40, 0x3c, 0xfb, 0x6b, 0x1e, 0x75, 0x8e, 0x09, 0xf1, 0x5f, 0xc1,
+	0x69, 0xb1, 0x3e, 0x46, 0xab, 0xc5, 0x0d, 0x39, 0x4c, 0x70, 0x4c, 0xba, 0xe6, 0xb6, 0xb9, 0xb3,
+	0xec, 0xae, 0x14, 0x83, 0xaf, 0x71, 0x4c, 0xac, 0x5d, 0x34, 0x2f, 0x8f, 0x58, 0xf7, 0xc1, 0xb6,
+	0xb9, 0xd3, 0xd9, 0xfb, 0x30, 0xbf, 0x60, 0xed, 0x82, 0x61, 0x5f, 0x08, 0x1e, 0x26, 0xc1, 0x15,
+	0x8e, 0x32, 0xe2, 0xaa, 0x99, 0x16, 0x47, 0x5d, 0x2c, 0x04, 0x0f, 0x47, 0x99, 0x20, 0x10, 0x5f,
+	0x71, 0x3e, 0xd3, 0xee, 0xc2, 0xf6, 0xdc, 0x4e, 0x67, 0xef, 0x73, 0xbb, 0xf1, 0xc6, 0xb6, 0xfb,
+	0x85, 0x8b, 0x63, 0xe9, 0x21, 0x0f, 0xd9, 0xdd, 0xc2, 0xba, 0xe1, 0xd4, 0xfa, 0x01, 0x2d, 0xc2,
+	0xd9, 0xef, 0x2e, 0x6e, 0x9b, 0x3b, 0x6b, 0x7b, 0xc7, 0x95, 0x04, 0x95, 0x49, 0x7b, 0x2a, 0x0d,
+	0x17, 0x4a, 0x77, 0x94, 0x64, 0xf1, 0xbb, 0xa3, 0x6e, 0xee, 0xd5, 0xa2, 0x68, 0xe3, 0x7e, 0xf5,
+	0x77, 0xe7, 0x14, 0xe9, 0xa0, 0x81, 0x74, 0x3e, 0x91, 0x5d, 0xde, 0x32, 0xa2, 0x38, 0xf7, 0xc6,
+	0x1c, 0xc3, 0x5d, 0x67, 0x77, 0x87, 0xac, 0x5f, 0xd1, 0xda, 0xdd, 0xdb, 0xb0, 0x3b, 0xaf, 0x70,
+	0x97, 0xed, 0x17, 0x76, 0x58, 0xe8, 0x4b, 0x6e, 0x95, 0xd1, 0x31, 0xdc, 0x55, 0x6f, 0x7a, 0xe0,
+	0x60, 0x09, 0x2d, 0x0a, 0xcc, 0x03, 0x22, 0x9e, 0xfd, 0xbb, 0x89, 0x1e, 0x6b, 0xf7, 0xc2, 0x3a,
+	0x41, 0x9b, 0xea, 0xf2, 0x9d, 0x6c, 0x76, 0xe8, 0xab, 0x12, 0xea, 0xec, 0x7d, 0xf0, 0x4e, 0x99,
+	0x9c, 0x26, 0xe2, 0xf9, 0x3e, 0x54, 0xc9, 0xba, 0x54, 0x95, 0x2e, 0x4f, 0x7d, 0xeb, 0x39, 0x5a,
+	0x82, 0x32, 0x09, 0x8b, 0x32, 0xab, 0xd5, 0x3f, 0x54, 0x93, 0x4f, 0x7d, 0x99, 0xa3, 0xf2, 0x6c,
+	0xaa, 0xb1, 0x7c, 0x4b, 0x9a, 0x72, 0x74, 0x91, 0x8b, 0xa6, 0xb6, 0x41, 0x2d, 0x4c, 0xe5, 0xa8,
+	0xca, 0x28, 0x73, 0x54, 0xd0, 0xd4, 0x80, 0x15, 0x23, 0xa4, 0xde, 0x6d, 0x40, 0xc3, 0xf6, 0xbc,
+	0x6c, 0x40, 0x1f, 0xe2, 0x28, 0xd2, 0x62, 0x75, 0x06, 0xc7, 0x70, 0x97, 0x25, 0x01, 0x70, 0x21,
+	0x5a, 0x96, 0x1d, 0x06, 0xd0, 0x16, 0x14, 0xed, 0xac, 0x81, 0xd6, 0x67, 0x4c, 0x0b, 0xd3, 0x8c,
+	0x3b, 0x86, 0xbb, 0x84, 0x19, 0x03, 0xd4, 0x2d, 0x5a, 0x2d, 0xba, 0x0a, 0xc0, 0x2d, 0x29, 0x9c,
+	0xdb, 0x62, 0x71, 0x34, 0x13, 0x95, 0xeb, 0xd3, 0xd8, 0x1c, 0xc3, 0x5d, 0xc9, 0x51, 0x80, 0x7e,
+	0x6b, 0xa2, 0xae, 0xe6, 0xc2, 0x84, 0x30, 0x96, 0x55, 0x18, 0xe3, 0xa6, 0xed, 0x2d, 0xe5, 0x17,
+	0xa0, 0xd6, 0xef, 0x73, 0xd3, 0x2c, 0xc7, 0x70, 0xb7, 0xd2, 0xfb, 0x93, 0xca, 0xfc, 0x14, 0x4f,
+	0x29, 0x04, 0x86, 0x5a, 0xe5, 0xe7, 0x15, 0x68, 0xb4, 0xe1, 0x54, 0xd8, 0x64, 0x7e, 0x72, 0x14,
+	0xa0, 0x7f, 0x42, 0x1d, 0x78, 0x50, 0x01, 0xdc, 0x51, 0xe0, 0xd7, 0x4d, 0x77, 0x90, 0x54, 0x68,
+	0xb1, 0x5a, 0x8b, 0x63, 0xb8, 0x48, 0x41, 0x00, 0xf9, 0x9b, 0x89, 0xd6, 0x27, 0xef, 0x30, 0x70,
+	0x57, 0x14, 0xf7, 0xaa, 0x91, 0x9b, 0xab, 0x2a, 0xd8, 0x15, 0x56, 0xc7, 0x70, 0xd7, 0x4a, 0x20,
+	0xc4, 0xf0, 0x87, 0x89, 0x1e, 0xdd, 0x6d, 0xd2, 0x21, 0x8e, 0x55, 0x15, 0xc7, 0xa0, 0xe9, 0x1c,
+	0xf8, 0x87, 0xa5, 0x50, 0x7f, 0x20, 0x6a, 0x26, 0x38, 0x86, 0xbb, 0x89, 0xa7, 0xec, 0x93, 0xa4,
+	0x4c, 0x9a, 0x5f, 0x08, 0x66, 0xa3, 0x55, 0x52, 0x8e, 0x0a, 0x95, 0x36, 0x92, 0x4a, 0xab, 0x4c,
+	0x4a, 0x09, 0x84, 0x18, 0x32, 0xb4, 0x92, 0x37, 0xb1, 0xc0, 0xdf, 0x54, 0xfc, 0xf3, 0xa6, 0x17,
+	0x42, 0x49, 0xb4, 0x70, 0xbd, 0xc9, 0x31, 0xdc, 0x0e, 0x70, 0x4a, 0x6c, 0xfe, 0xa3, 0x01, 0xb0,
+	0x56, 0x2b, 0x2c, 0x24, 0x50, 0x7f, 0x37, 0x68, 0x4d, 0x12, 0x0b, 0x9c, 0xb2, 0xf2, 0xa1, 0xe9,
+	0x06, 0xea, 0xa3, 0x56, 0x95, 0xef, 0x48, 0x85, 0x16, 0xaa, 0xb5, 0xc8, 0xca, 0x57, 0x10, 0x40,
+	0xfe, 0x6e, 0xa2, 0xcd, 0xe9, 0x06, 0x12, 0xc8, 0xef, 0x29, 0xf2, 0x77, 0x0d, 0x64, 0x97, 0xe0,
+	0xe8, 0x48, 0xc9, 0xb4, 0xf8, 0x6a, 0xb3, 0xec, 0x06, 0x78, 0x69, 0x2d, 0x53, 0x9e, 0xf7, 0x7e,
+	0x10, 0xc2, 0xe3, 0x56, 0x29, 0xbf, 0x54, 0x12, 0x2d, 0x5e, 0x6f, 0x92, 0x29, 0x07, 0x4e, 0x99,
+	0x72, 0xf8, 0xbd, 0x01, 0xd4, 0xad, 0x56, 0x29, 0x7f, 0x29, 0x15, 0x5a, 0xa8, 0xd6, 0x22, 0x53,
+	0xae, 0x20, 0xe5, 0x2b, 0x27, 0x7f, 0x1d, 0x01, 0xf0, 0xfd, 0x56, 0xaf, 0xdc, 0x19, 0x1d, 0x69,
+	0x71, 0x9a, 0x71, 0xf9, 0xca, 0xbd, 0xa1, 0x23, 0xf5, 0x7d, 0xf0, 0x10, 0x2d, 0x28, 0xcc, 0xc1,
+	0x3f, 0x26, 0xfa, 0xc4, 0xa3, 0x71, 0x73, 0x53, 0x7a, 0xb0, 0x31, 0xd5, 0x41, 0x9d, 0xcb, 0xd6,
+	0xe4, 0xdc, 0xfc, 0xfe, 0x2c, 0x97, 0x05, 0x34, 0xc2, 0x49, 0x60, 0x53, 0x1e, 0xf4, 0x02, 0x92,
+	0xa8, 0xc6, 0xa5, 0xe8, 0xe1, 0x59, 0x98, 0xd6, 0xfc, 0x4b, 0xe3, 0x45, 0xf9, 0xf5, 0xf6, 0xc1,
+	0xdc, 0x49, 0xbf, 0xff, 0xe7, 0x83, 0xa7, 0x27, 0xe0, 0xb2, 0xef, 0xa7, 0x36, 0x7c, 0xca, 0xaf,
+	0xab, 0x5d, 0xdb, 0x2d, 0x66, 0xfe, 0x5d, 0xcc, 0x19, 0xf4, 0xfd, 0x74, 0x50, 0xce, 0x19, 0x5c,
+	0xed, 0x0e, 0xca, 0x39, 0xa3, 0x45, 0x15, 0xc4, 0xa7, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf1,
+	0x63, 0xba, 0xcf, 0x56, 0x11, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/gender_view.pb.go b/googleapis/ads/googleads/v0/resources/gender_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..598a9d345ebd862fac65e910f7b454872cfb0e34
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/gender_view.pb.go
@@ -0,0 +1,88 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/gender_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A gender view.
+type GenderView struct {
+	// The resource name of the gender view.
+	// Gender view resource names have the form:
+	//
+	// `customers/{customer_id}/genderViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenderView) Reset()         { *m = GenderView{} }
+func (m *GenderView) String() string { return proto.CompactTextString(m) }
+func (*GenderView) ProtoMessage()    {}
+func (*GenderView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_gender_view_7175490191e428e1, []int{0}
+}
+func (m *GenderView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenderView.Unmarshal(m, b)
+}
+func (m *GenderView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenderView.Marshal(b, m, deterministic)
+}
+func (dst *GenderView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenderView.Merge(dst, src)
+}
+func (m *GenderView) XXX_Size() int {
+	return xxx_messageInfo_GenderView.Size(m)
+}
+func (m *GenderView) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenderView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenderView proto.InternalMessageInfo
+
+func (m *GenderView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GenderView)(nil), "google.ads.googleads.v0.resources.GenderView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/gender_view.proto", fileDescriptor_gender_view_7175490191e428e1)
+}
+
+var fileDescriptor_gender_view_7175490191e428e1 = []byte{
+	// 220 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0xf4, 0xd4, 0xbc, 0x94, 0xd4, 0xa2, 0xf8, 0xb2,
+	0xcc, 0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x4a, 0xbd, 0xc4, 0x94,
+	0x62, 0x3d, 0xb8, 0x26, 0xbd, 0x32, 0x03, 0x3d, 0xb8, 0x26, 0x25, 0x43, 0x2e, 0x2e, 0x77, 0xb0,
+	0xbe, 0xb0, 0xcc, 0xd4, 0x72, 0x21, 0x65, 0x2e, 0x5e, 0x98, 0x54, 0x7c, 0x5e, 0x62, 0x6e, 0xaa,
+	0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x0f, 0x4c, 0xd0, 0x2f, 0x31, 0x37, 0xd5, 0xe9, 0x0a,
+	0x23, 0x97, 0x6a, 0x72, 0x7e, 0xae, 0x1e, 0x41, 0xc3, 0x9d, 0xf8, 0x11, 0x46, 0x07, 0x80, 0x1c,
+	0x14, 0xc0, 0x18, 0xe5, 0x05, 0xd5, 0x95, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94,
+	0x0e, 0x72, 0x37, 0xd8, 0xb9, 0x30, 0x7f, 0x15, 0x64, 0x16, 0xe3, 0xf1, 0xa6, 0x35, 0x9c, 0xb5,
+	0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0xa2, 0x3b, 0xc4, 0x48, 0xc7, 0x94, 0x62, 0x3d,
+	0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x0b, 0x82, 0xa9, 0x3c, 0x05, 0x53, 0x13, 0xe3, 0x98, 0x52,
+	0x1c, 0x03, 0x57, 0x13, 0x13, 0x66, 0x10, 0x03, 0x57, 0x93, 0xc4, 0x06, 0x76, 0x84, 0x31, 0x20,
+	0x00, 0x00, 0xff, 0xff, 0x93, 0x68, 0xea, 0xbb, 0x6a, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/geo_target_constant.pb.go b/googleapis/ads/googleads/v0/resources/geo_target_constant.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..cda60dc12d7198bbf9c05d3d93b6dc7c8738b1c9
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/geo_target_constant.pb.go
@@ -0,0 +1,146 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/geo_target_constant.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A geo target constant.
+type GeoTargetConstant struct {
+	// The resource name of the geo target constant.
+	// Geo target constant resource names have the form:
+	//
+	// `geoTargetConstants/{geo_target_constant_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the geo target constant.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// Geo target constant English name.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The ISO-3166-1 alpha-2 country code that is associated with the target.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Geo target constant target type.
+	TargetType *wrappers.StringValue `protobuf:"bytes,6,opt,name=target_type,json=targetType,proto3" json:"target_type,omitempty"`
+	// Geo target constant status.
+	Status               enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus `protobuf:"varint,7,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                  `json:"-"`
+	XXX_unrecognized     []byte                                                    `json:"-"`
+	XXX_sizecache        int32                                                     `json:"-"`
+}
+
+func (m *GeoTargetConstant) Reset()         { *m = GeoTargetConstant{} }
+func (m *GeoTargetConstant) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstant) ProtoMessage()    {}
+func (*GeoTargetConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_07179001f0b69e8d, []int{0}
+}
+func (m *GeoTargetConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstant.Unmarshal(m, b)
+}
+func (m *GeoTargetConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstant.Marshal(b, m, deterministic)
+}
+func (dst *GeoTargetConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstant.Merge(dst, src)
+}
+func (m *GeoTargetConstant) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstant.Size(m)
+}
+func (m *GeoTargetConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstant proto.InternalMessageInfo
+
+func (m *GeoTargetConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *GeoTargetConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetTargetType() *wrappers.StringValue {
+	if m != nil {
+		return m.TargetType
+	}
+	return nil
+}
+
+func (m *GeoTargetConstant) GetStatus() enums.GeoTargetConstantStatusEnum_GeoTargetConstantStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.GeoTargetConstantStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*GeoTargetConstant)(nil), "google.ads.googleads.v0.resources.GeoTargetConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/geo_target_constant.proto", fileDescriptor_geo_target_constant_07179001f0b69e8d)
+}
+
+var fileDescriptor_geo_target_constant_07179001f0b69e8d = []byte{
+	// 400 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xd1, 0xca, 0xd3, 0x30,
+	0x14, 0xc7, 0x69, 0xf7, 0x39, 0x31, 0xfb, 0x14, 0xec, 0x85, 0x94, 0x4f, 0x91, 0x4d, 0x11, 0x06,
+	0x42, 0x5a, 0xa6, 0x78, 0x33, 0x54, 0xba, 0x21, 0x43, 0x2f, 0x64, 0x74, 0x63, 0x17, 0x52, 0x28,
+	0x59, 0x73, 0x0c, 0x95, 0x35, 0x29, 0x49, 0x3a, 0xd9, 0xb5, 0x6f, 0xe2, 0xa5, 0x8f, 0xe2, 0x2b,
+	0xf8, 0x32, 0xb2, 0x24, 0xed, 0xcd, 0x9c, 0xdf, 0xee, 0xfe, 0x6d, 0xfe, 0xbf, 0xff, 0x39, 0x39,
+	0x39, 0x68, 0xca, 0x84, 0x60, 0x3b, 0x88, 0x08, 0x55, 0x91, 0x95, 0x47, 0xb5, 0x8f, 0x23, 0x09,
+	0x4a, 0x34, 0xb2, 0x00, 0x15, 0x31, 0x10, 0xb9, 0x26, 0x92, 0x81, 0xce, 0x0b, 0xc1, 0x95, 0x26,
+	0x5c, 0xe3, 0x5a, 0x0a, 0x2d, 0x82, 0x91, 0x25, 0x30, 0xa1, 0x0a, 0x77, 0x30, 0xde, 0xc7, 0xb8,
+	0x83, 0x6f, 0xde, 0x9d, 0xcb, 0x07, 0xde, 0x54, 0xff, 0xcc, 0xce, 0x95, 0x26, 0xba, 0x51, 0xb6,
+	0xc4, 0xcd, 0x53, 0xc7, 0x9b, 0xaf, 0x6d, 0xf3, 0x35, 0xfa, 0x2e, 0x49, 0x5d, 0x83, 0x74, 0xe7,
+	0xcf, 0x7e, 0xf4, 0xd0, 0xc3, 0x05, 0x88, 0xb5, 0xc9, 0x98, 0xbb, 0x88, 0xe0, 0x39, 0xba, 0xdf,
+	0xb6, 0x90, 0x73, 0x52, 0x41, 0xe8, 0x0d, 0xbd, 0xf1, 0xbd, 0xf4, 0xba, 0xfd, 0xf9, 0x99, 0x54,
+	0x10, 0xbc, 0x44, 0x7e, 0x49, 0xc3, 0xde, 0xd0, 0x1b, 0x0f, 0x26, 0x8f, 0x5d, 0xff, 0xb8, 0xad,
+	0x83, 0x3f, 0x72, 0xfd, 0xe6, 0xf5, 0x86, 0xec, 0x1a, 0x48, 0xfd, 0x92, 0x06, 0x31, 0xba, 0x32,
+	0x41, 0x57, 0xc6, 0xfe, 0xe4, 0xc4, 0xbe, 0xd2, 0xb2, 0xe4, 0xcc, 0xfa, 0x8d, 0x33, 0x78, 0x8f,
+	0xae, 0x0b, 0xd1, 0x70, 0x2d, 0x0f, 0x79, 0x21, 0x28, 0x84, 0x77, 0x2e, 0x20, 0x07, 0x8e, 0x98,
+	0x0b, 0x0a, 0xc1, 0x5b, 0x34, 0x70, 0xa3, 0xd1, 0x87, 0x1a, 0xc2, 0xfe, 0x05, 0x3c, 0xb2, 0xc0,
+	0xfa, 0x50, 0x43, 0xf0, 0x0d, 0xf5, 0xed, 0x24, 0xc3, 0xbb, 0x43, 0x6f, 0xfc, 0x60, 0x92, 0xe2,
+	0x73, 0xaf, 0x65, 0x9e, 0x02, 0x9f, 0x4c, 0x71, 0x65, 0xe8, 0x0f, 0xbc, 0xa9, 0xce, 0x9d, 0xa5,
+	0xae, 0xc2, 0xec, 0x8f, 0x87, 0x5e, 0x14, 0xa2, 0xc2, 0xb7, 0xee, 0xc3, 0xec, 0xd1, 0x49, 0xd4,
+	0xf2, 0x78, 0x91, 0xa5, 0xf7, 0xe5, 0x93, 0x83, 0x99, 0xd8, 0x11, 0xce, 0xb0, 0x90, 0x2c, 0x62,
+	0xc0, 0xcd, 0x35, 0xdb, 0xcd, 0xa9, 0x4b, 0xf5, 0x9f, 0x45, 0x9d, 0x76, 0xea, 0xa7, 0xdf, 0x5b,
+	0x24, 0xc9, 0x2f, 0x7f, 0xb4, 0xb0, 0x91, 0x09, 0x55, 0xd8, 0xca, 0xa3, 0xda, 0xc4, 0x38, 0x6d,
+	0x9d, 0xbf, 0x5b, 0x4f, 0x96, 0x50, 0x95, 0x75, 0x9e, 0x6c, 0x13, 0x67, 0x9d, 0x67, 0xdb, 0x37,
+	0x4d, 0xbc, 0xfa, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x70, 0xa7, 0x88, 0xb1, 0x2c, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/google_ads_field.pb.go b/googleapis/ads/googleads/v0/resources/google_ads_field.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8e1977412f09d1cb28a6f888a1d541e4b892a05c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/google_ads_field.pb.go
@@ -0,0 +1,246 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/google_ads_field.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A field or resource (artifact) used by GoogleAdsService.
+type GoogleAdsField struct {
+	// The resource name of the artifact.
+	// Artifact resource names have the form:
+	//
+	// `googleAdsFields/{name}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The name of the artifact.
+	Name *wrappers.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// The category of the artifact.
+	Category enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory `protobuf:"varint,3,opt,name=category,proto3,enum=google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory" json:"category,omitempty"`
+	// Whether the artifact can be used in a SELECT clause in search
+	// queries.
+	Selectable *wrappers.BoolValue `protobuf:"bytes,4,opt,name=selectable,proto3" json:"selectable,omitempty"`
+	// Whether the artifact can be used in a WHERE clause in search
+	// queries.
+	Filterable *wrappers.BoolValue `protobuf:"bytes,5,opt,name=filterable,proto3" json:"filterable,omitempty"`
+	// Whether the artifact can be used in a ORDER BY clause in search
+	// queries.
+	Sortable *wrappers.BoolValue `protobuf:"bytes,6,opt,name=sortable,proto3" json:"sortable,omitempty"`
+	// The names of all resources, segments, and metrics that are selectable with
+	// the described artifact.
+	SelectableWith []*wrappers.StringValue `protobuf:"bytes,7,rep,name=selectable_with,json=selectableWith,proto3" json:"selectable_with,omitempty"`
+	// The names of all resources that are selectable with the described
+	// artifact. Fields from these resources do not segment metrics when included
+	// in search queries.
+	//
+	// This field is only set for artifacts whose category is RESOURCE.
+	AttributeResources []*wrappers.StringValue `protobuf:"bytes,8,rep,name=attribute_resources,json=attributeResources,proto3" json:"attribute_resources,omitempty"`
+	// The names of all metrics that are selectable with the described artifact.
+	//
+	// This field is only set for artifacts whose category is either RESOURCE or
+	// SEGMENT.
+	Metrics []*wrappers.StringValue `protobuf:"bytes,9,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	// The names of all artifacts, whether a segment or another resource, that
+	// segment metrics when included in search queries.
+	//
+	// This field is only set for artifacts of category RESOURCE, SEGMENT or
+	// METRIC.
+	Segments []*wrappers.StringValue `protobuf:"bytes,10,rep,name=segments,proto3" json:"segments,omitempty"`
+	// Values the artifact can assume if it is a field of type ENUM.
+	//
+	// This field is only set for artifacts of category SEGMENT or ATTRIBUTE.
+	EnumValues []*wrappers.StringValue `protobuf:"bytes,11,rep,name=enum_values,json=enumValues,proto3" json:"enum_values,omitempty"`
+	// This field determines the operators that can be used with the artifact
+	// in WHERE clauses.
+	DataType enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType `protobuf:"varint,12,opt,name=data_type,json=dataType,proto3,enum=google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType" json:"data_type,omitempty"`
+	// The URL of proto describing the artifact's data type.
+	TypeUrl *wrappers.StringValue `protobuf:"bytes,13,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
+	// Whether the field artifact is repeated.
+	IsRepeated           *wrappers.BoolValue `protobuf:"bytes,14,opt,name=is_repeated,json=isRepeated,proto3" json:"is_repeated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *GoogleAdsField) Reset()         { *m = GoogleAdsField{} }
+func (m *GoogleAdsField) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsField) ProtoMessage()    {}
+func (*GoogleAdsField) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_0bf2ea18662864bd, []int{0}
+}
+func (m *GoogleAdsField) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsField.Unmarshal(m, b)
+}
+func (m *GoogleAdsField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsField.Marshal(b, m, deterministic)
+}
+func (dst *GoogleAdsField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsField.Merge(dst, src)
+}
+func (m *GoogleAdsField) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsField.Size(m)
+}
+func (m *GoogleAdsField) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsField.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsField proto.InternalMessageInfo
+
+func (m *GoogleAdsField) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *GoogleAdsField) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetCategory() enums.GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory {
+	if m != nil {
+		return m.Category
+	}
+	return enums.GoogleAdsFieldCategoryEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsField) GetSelectable() *wrappers.BoolValue {
+	if m != nil {
+		return m.Selectable
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetFilterable() *wrappers.BoolValue {
+	if m != nil {
+		return m.Filterable
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetSortable() *wrappers.BoolValue {
+	if m != nil {
+		return m.Sortable
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetSelectableWith() []*wrappers.StringValue {
+	if m != nil {
+		return m.SelectableWith
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetAttributeResources() []*wrappers.StringValue {
+	if m != nil {
+		return m.AttributeResources
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetMetrics() []*wrappers.StringValue {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetSegments() []*wrappers.StringValue {
+	if m != nil {
+		return m.Segments
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetEnumValues() []*wrappers.StringValue {
+	if m != nil {
+		return m.EnumValues
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetDataType() enums.GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType {
+	if m != nil {
+		return m.DataType
+	}
+	return enums.GoogleAdsFieldDataTypeEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsField) GetTypeUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.TypeUrl
+	}
+	return nil
+}
+
+func (m *GoogleAdsField) GetIsRepeated() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsRepeated
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GoogleAdsField)(nil), "google.ads.googleads.v0.resources.GoogleAdsField")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/google_ads_field.proto", fileDescriptor_google_ads_field_0bf2ea18662864bd)
+}
+
+var fileDescriptor_google_ads_field_0bf2ea18662864bd = []byte{
+	// 548 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xdd, 0x6a, 0x13, 0x41,
+	0x14, 0xc7, 0xd9, 0xa4, 0x36, 0x9b, 0x49, 0x1b, 0x61, 0x7a, 0x33, 0x04, 0x91, 0x54, 0x11, 0x72,
+	0x35, 0x09, 0x15, 0x6a, 0xb1, 0x54, 0x48, 0xb4, 0x16, 0x04, 0x25, 0xac, 0x1a, 0x41, 0x02, 0xcb,
+	0x24, 0x7b, 0xb2, 0x5d, 0x98, 0xdd, 0x59, 0x66, 0x66, 0x53, 0xf2, 0x3a, 0x5e, 0x7a, 0xe7, 0x6b,
+	0xf8, 0x04, 0x3e, 0x8e, 0xec, 0xc7, 0x4c, 0x5a, 0x6a, 0x4c, 0xf4, 0xee, 0xec, 0x39, 0xff, 0xdf,
+	0xf9, 0x98, 0x3d, 0x33, 0xe8, 0x2c, 0x14, 0x22, 0xe4, 0xd0, 0x67, 0x81, 0xea, 0x97, 0x66, 0x6e,
+	0x2d, 0x07, 0x7d, 0x09, 0x4a, 0x64, 0x72, 0x0e, 0xc6, 0xed, 0xb3, 0x40, 0xf9, 0x8b, 0x08, 0x78,
+	0x40, 0x53, 0x29, 0xb4, 0xc0, 0xc7, 0xa5, 0x9f, 0xb2, 0x40, 0x51, 0x4b, 0xd2, 0xe5, 0x80, 0x5a,
+	0xb2, 0x73, 0xb1, 0x29, 0x39, 0x24, 0x59, 0x7c, 0x3f, 0xb1, 0x3f, 0x67, 0x1a, 0x42, 0x21, 0x57,
+	0x65, 0x85, 0xce, 0xab, 0x7f, 0xc4, 0x03, 0xa6, 0x99, 0xaf, 0x57, 0x29, 0x54, 0xfc, 0xe3, 0x8a,
+	0x2f, 0xbe, 0x66, 0xd9, 0xa2, 0x7f, 0x23, 0x59, 0x9a, 0x82, 0x54, 0x65, 0xfc, 0xc9, 0x8f, 0x06,
+	0x6a, 0x5f, 0x15, 0x92, 0x61, 0xa0, 0xde, 0xe6, 0x29, 0xf0, 0x53, 0x74, 0x68, 0xda, 0xf7, 0x13,
+	0x16, 0x03, 0x71, 0xba, 0x4e, 0xaf, 0xe9, 0x1d, 0x18, 0xe7, 0x07, 0x16, 0x03, 0x1e, 0xa0, 0xbd,
+	0x22, 0x56, 0xeb, 0x3a, 0xbd, 0xd6, 0xc9, 0xa3, 0x6a, 0x7a, 0x6a, 0xca, 0xd0, 0x8f, 0x5a, 0x46,
+	0x49, 0x38, 0x61, 0x3c, 0x03, 0xaf, 0x50, 0x62, 0x8e, 0x5c, 0x33, 0x1b, 0xa9, 0x77, 0x9d, 0x5e,
+	0xfb, 0x64, 0x4c, 0x37, 0x1d, 0x5f, 0x31, 0x1c, 0xbd, 0xdb, 0xd7, 0xeb, 0x0a, 0xbe, 0x4c, 0xb2,
+	0x78, 0x43, 0xc8, 0xb3, 0x15, 0xf0, 0x4b, 0x84, 0x14, 0x70, 0x98, 0x6b, 0x36, 0xe3, 0x40, 0xf6,
+	0x8a, 0x2e, 0x3b, 0xf7, 0xba, 0x1c, 0x09, 0xc1, 0xcb, 0x1e, 0x6f, 0xa9, 0x73, 0x76, 0x11, 0x71,
+	0x0d, 0xb2, 0x60, 0x1f, 0x6c, 0x67, 0xd7, 0x6a, 0x7c, 0x8a, 0x5c, 0x25, 0x64, 0x59, 0x75, 0x7f,
+	0x2b, 0x69, 0xb5, 0xf8, 0x12, 0x3d, 0x5c, 0x77, 0xe0, 0xdf, 0x44, 0xfa, 0x9a, 0x34, 0xba, 0xf5,
+	0xad, 0x47, 0xdb, 0x5e, 0x43, 0x5f, 0x22, 0x7d, 0x8d, 0xdf, 0xa3, 0x23, 0xa6, 0xb5, 0x8c, 0x66,
+	0x99, 0x06, 0xdf, 0x2e, 0x21, 0x71, 0x77, 0x48, 0x85, 0x2d, 0xe8, 0x19, 0x0e, 0x9f, 0xa2, 0x46,
+	0x0c, 0x5a, 0x46, 0x73, 0x45, 0x9a, 0x3b, 0xa4, 0x30, 0x62, 0x7c, 0x86, 0x5c, 0x05, 0x61, 0x0c,
+	0x89, 0x56, 0x04, 0xed, 0x00, 0x5a, 0x35, 0xbe, 0x40, 0xad, 0xfc, 0xe7, 0xfb, 0xcb, 0xdc, 0xaf,
+	0x48, 0x6b, 0x07, 0x18, 0xe5, 0x40, 0x61, 0x2a, 0x1c, 0xa3, 0xa6, 0xbd, 0x01, 0xe4, 0xe0, 0x3f,
+	0xb6, 0xec, 0x0d, 0xd3, 0xec, 0xd3, 0x2a, 0x85, 0x3f, 0x6c, 0x99, 0x09, 0x79, 0x6e, 0x50, 0x59,
+	0xf8, 0x05, 0x72, 0xf3, 0x4a, 0x7e, 0x26, 0x39, 0x39, 0xdc, 0xe1, 0x26, 0x34, 0x72, 0xf5, 0x67,
+	0xc9, 0xf1, 0x39, 0x6a, 0x45, 0xca, 0x97, 0x90, 0x02, 0xd3, 0x10, 0x90, 0xf6, 0xf6, 0x1d, 0x8b,
+	0x94, 0x57, 0xa9, 0x47, 0xbf, 0x1c, 0xf4, 0x6c, 0x2e, 0x62, 0xba, 0xf5, 0xf1, 0x19, 0x1d, 0xdd,
+	0x9d, 0x60, 0x9c, 0xe7, 0x1d, 0x3b, 0x5f, 0xdf, 0x55, 0x64, 0x28, 0x38, 0x4b, 0x42, 0x2a, 0x64,
+	0xd8, 0x0f, 0x21, 0x29, 0xaa, 0x9a, 0x47, 0x26, 0x8d, 0xd4, 0x5f, 0xde, 0xc3, 0x73, 0x6b, 0x7d,
+	0xab, 0xd5, 0xaf, 0x86, 0xc3, 0xef, 0xb5, 0xe3, 0xb2, 0x12, 0x1d, 0x06, 0xb7, 0x4e, 0x94, 0x4e,
+	0x06, 0xd4, 0x2e, 0xd3, 0x4f, 0xa3, 0x99, 0x0e, 0x03, 0x35, 0xb5, 0x9a, 0xe9, 0x64, 0x30, 0xb5,
+	0x9a, 0xd9, 0x7e, 0xd1, 0xc4, 0xf3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xb8, 0x9e, 0x4d,
+	0x93, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/hotel_group_view.pb.go b/googleapis/ads/googleads/v0/resources/hotel_group_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..61a450c9d1448659f73d447689c8571e76bfd362
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/hotel_group_view.pb.go
@@ -0,0 +1,89 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/hotel_group_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A hotel group view.
+type HotelGroupView struct {
+	// The resource name of the hotel group view.
+	// Hotel Group view resource names have the form:
+	//
+	// `customers/{customer_id}/hotelGroupViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelGroupView) Reset()         { *m = HotelGroupView{} }
+func (m *HotelGroupView) String() string { return proto.CompactTextString(m) }
+func (*HotelGroupView) ProtoMessage()    {}
+func (*HotelGroupView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_group_view_e87bc812956d3c2c, []int{0}
+}
+func (m *HotelGroupView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelGroupView.Unmarshal(m, b)
+}
+func (m *HotelGroupView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelGroupView.Marshal(b, m, deterministic)
+}
+func (dst *HotelGroupView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelGroupView.Merge(dst, src)
+}
+func (m *HotelGroupView) XXX_Size() int {
+	return xxx_messageInfo_HotelGroupView.Size(m)
+}
+func (m *HotelGroupView) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelGroupView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelGroupView proto.InternalMessageInfo
+
+func (m *HotelGroupView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*HotelGroupView)(nil), "google.ads.googleads.v0.resources.HotelGroupView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/hotel_group_view.proto", fileDescriptor_hotel_group_view_e87bc812956d3c2c)
+}
+
+var fileDescriptor_hotel_group_view_e87bc812956d3c2c = []byte{
+	// 230 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0x8c, 0xfc, 0x92, 0xd4, 0x9c, 0xf8, 0xf4, 0xa2,
+	0xfc, 0xd2, 0x82, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45,
+	0x88, 0x72, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x4e, 0xbd, 0x32, 0x03, 0x3d, 0xb8, 0x4e, 0x25,
+	0x53, 0x2e, 0x3e, 0x0f, 0x90, 0x66, 0x77, 0x90, 0xde, 0xb0, 0xcc, 0xd4, 0x72, 0x21, 0x65, 0x2e,
+	0x5e, 0x98, 0x74, 0x7c, 0x5e, 0x62, 0x6e, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x0f,
+	0x4c, 0xd0, 0x2f, 0x31, 0x37, 0xd5, 0xe9, 0x06, 0x23, 0x97, 0x6a, 0x72, 0x7e, 0xae, 0x1e, 0x41,
+	0x0b, 0x9c, 0x84, 0x51, 0x8d, 0x0f, 0x00, 0x39, 0x2c, 0x80, 0x31, 0xca, 0x0b, 0xaa, 0x33, 0x3d,
+	0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x6c, 0x98,
+	0x27, 0x0b, 0x32, 0x8b, 0xf1, 0xf8, 0xd9, 0x1a, 0xce, 0x5a, 0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8,
+	0x8a, 0x49, 0xd1, 0x1d, 0x62, 0xa4, 0x63, 0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85, 0x19, 0xe8,
+	0x05, 0xc1, 0x54, 0x9e, 0x82, 0xa9, 0x89, 0x71, 0x4c, 0x29, 0x8e, 0x81, 0xab, 0x89, 0x09, 0x33,
+	0x88, 0x81, 0xab, 0x49, 0x62, 0x03, 0x3b, 0xc2, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x57,
+	0x63, 0xbb, 0x77, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/hotel_performance_view.pb.go b/googleapis/ads/googleads/v0/resources/hotel_performance_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6ad126fcc0cbf17f726e368b5e586e59551b5781
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/hotel_performance_view.pb.go
@@ -0,0 +1,89 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/hotel_performance_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A hotel performance view.
+type HotelPerformanceView struct {
+	// The resource name of the hotel performance view.
+	// Hotel performance view resource names have the form:
+	//
+	// `customers/{customer_id}/hotelPerformanceView`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HotelPerformanceView) Reset()         { *m = HotelPerformanceView{} }
+func (m *HotelPerformanceView) String() string { return proto.CompactTextString(m) }
+func (*HotelPerformanceView) ProtoMessage()    {}
+func (*HotelPerformanceView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_performance_view_f3c3f1a054bec567, []int{0}
+}
+func (m *HotelPerformanceView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HotelPerformanceView.Unmarshal(m, b)
+}
+func (m *HotelPerformanceView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HotelPerformanceView.Marshal(b, m, deterministic)
+}
+func (dst *HotelPerformanceView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HotelPerformanceView.Merge(dst, src)
+}
+func (m *HotelPerformanceView) XXX_Size() int {
+	return xxx_messageInfo_HotelPerformanceView.Size(m)
+}
+func (m *HotelPerformanceView) XXX_DiscardUnknown() {
+	xxx_messageInfo_HotelPerformanceView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HotelPerformanceView proto.InternalMessageInfo
+
+func (m *HotelPerformanceView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*HotelPerformanceView)(nil), "google.ads.googleads.v0.resources.HotelPerformanceView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/hotel_performance_view.proto", fileDescriptor_hotel_performance_view_f3c3f1a054bec567)
+}
+
+var fileDescriptor_hotel_performance_view_f3c3f1a054bec567 = []byte{
+	// 237 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0x8c, 0xfc, 0x92, 0xd4, 0x9c, 0xf8, 0x82, 0xd4,
+	0xa2, 0xb4, 0xfc, 0xa2, 0xdc, 0xc4, 0xbc, 0xe4, 0xd4, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x26, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x7e, 0xbd,
+	0x32, 0x03, 0x3d, 0xb8, 0x7e, 0x25, 0x6b, 0x2e, 0x11, 0x0f, 0x90, 0x11, 0x01, 0x08, 0x13, 0xc2,
+	0x32, 0x53, 0xcb, 0x85, 0x94, 0xb9, 0x78, 0x61, 0x8a, 0xe2, 0xf3, 0x12, 0x73, 0x53, 0x25, 0x18,
+	0x15, 0x18, 0x35, 0x38, 0x83, 0x78, 0x60, 0x82, 0x7e, 0x89, 0xb9, 0xa9, 0x4e, 0xf7, 0x18, 0xb9,
+	0x54, 0x93, 0xf3, 0x73, 0xf5, 0x08, 0x5a, 0xe3, 0x24, 0x89, 0xcd, 0x92, 0x00, 0x90, 0x23, 0x03,
+	0x18, 0xa3, 0xbc, 0xa0, 0xfa, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5,
+	0xd3, 0x53, 0xf3, 0xc0, 0x5e, 0x80, 0x79, 0xbb, 0x20, 0xb3, 0x18, 0x4f, 0x28, 0x58, 0xc3, 0x59,
+	0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0x29, 0xba, 0x43, 0x8c, 0x74, 0x4c, 0x29, 0xd6,
+	0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0xbd, 0x20, 0x98, 0xca, 0x53, 0x30, 0x35, 0x31, 0x8e, 0x29,
+	0xc5, 0x31, 0x70, 0x35, 0x31, 0x61, 0x06, 0x31, 0x70, 0x35, 0x49, 0x6c, 0x60, 0x47, 0x18, 0x03,
+	0x02, 0x00, 0x00, 0xff, 0xff, 0x36, 0xf4, 0x24, 0xd7, 0x89, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/keyword_plan.pb.go b/googleapis/ads/googleads/v0/resources/keyword_plan.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6289be36ad80e624aa856518e6d31728073a0a45
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/keyword_plan.pb.go
@@ -0,0 +1,280 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/keyword_plan.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A Keyword Planner plan.
+type KeywordPlan struct {
+	// The resource name of the Keyword Planner plan.
+	// KeywordPlan resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlans/{kp_plan_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the keyword plan.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the keyword plan.
+	//
+	// This field is required and should not be empty when creating new keyword
+	// plans.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The date period used for forecasting the plan.
+	ForecastPeriod       *KeywordPlanForecastPeriod `protobuf:"bytes,4,opt,name=forecast_period,json=forecastPeriod,proto3" json:"forecast_period,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *KeywordPlan) Reset()         { *m = KeywordPlan{} }
+func (m *KeywordPlan) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlan) ProtoMessage()    {}
+func (*KeywordPlan) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_9d2df87f9b36e60a, []int{0}
+}
+func (m *KeywordPlan) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlan.Unmarshal(m, b)
+}
+func (m *KeywordPlan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlan.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlan) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlan.Merge(dst, src)
+}
+func (m *KeywordPlan) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlan.Size(m)
+}
+func (m *KeywordPlan) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlan.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlan proto.InternalMessageInfo
+
+func (m *KeywordPlan) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlan) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlan) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *KeywordPlan) GetForecastPeriod() *KeywordPlanForecastPeriod {
+	if m != nil {
+		return m.ForecastPeriod
+	}
+	return nil
+}
+
+// The forecasting period associated with the keyword plan.
+type KeywordPlanForecastPeriod struct {
+	// Required. The date used for forecasting the Plan.
+	//
+	// Types that are valid to be assigned to Interval:
+	//	*KeywordPlanForecastPeriod_DateInterval
+	//	*KeywordPlanForecastPeriod_DateRange
+	Interval             isKeywordPlanForecastPeriod_Interval `protobuf_oneof:"interval"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *KeywordPlanForecastPeriod) Reset()         { *m = KeywordPlanForecastPeriod{} }
+func (m *KeywordPlanForecastPeriod) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanForecastPeriod) ProtoMessage()    {}
+func (*KeywordPlanForecastPeriod) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_9d2df87f9b36e60a, []int{1}
+}
+func (m *KeywordPlanForecastPeriod) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanForecastPeriod.Unmarshal(m, b)
+}
+func (m *KeywordPlanForecastPeriod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanForecastPeriod.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanForecastPeriod) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanForecastPeriod.Merge(dst, src)
+}
+func (m *KeywordPlanForecastPeriod) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanForecastPeriod.Size(m)
+}
+func (m *KeywordPlanForecastPeriod) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanForecastPeriod.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanForecastPeriod proto.InternalMessageInfo
+
+type isKeywordPlanForecastPeriod_Interval interface {
+	isKeywordPlanForecastPeriod_Interval()
+}
+
+type KeywordPlanForecastPeriod_DateInterval struct {
+	DateInterval enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval `protobuf:"varint,1,opt,name=date_interval,json=dateInterval,proto3,enum=google.ads.googleads.v0.enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval,oneof"`
+}
+
+type KeywordPlanForecastPeriod_DateRange struct {
+	DateRange *common.DateRange `protobuf:"bytes,2,opt,name=date_range,json=dateRange,proto3,oneof"`
+}
+
+func (*KeywordPlanForecastPeriod_DateInterval) isKeywordPlanForecastPeriod_Interval() {}
+
+func (*KeywordPlanForecastPeriod_DateRange) isKeywordPlanForecastPeriod_Interval() {}
+
+func (m *KeywordPlanForecastPeriod) GetInterval() isKeywordPlanForecastPeriod_Interval {
+	if m != nil {
+		return m.Interval
+	}
+	return nil
+}
+
+func (m *KeywordPlanForecastPeriod) GetDateInterval() enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval {
+	if x, ok := m.GetInterval().(*KeywordPlanForecastPeriod_DateInterval); ok {
+		return x.DateInterval
+	}
+	return enums.KeywordPlanForecastIntervalEnum_UNSPECIFIED
+}
+
+func (m *KeywordPlanForecastPeriod) GetDateRange() *common.DateRange {
+	if x, ok := m.GetInterval().(*KeywordPlanForecastPeriod_DateRange); ok {
+		return x.DateRange
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*KeywordPlanForecastPeriod) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _KeywordPlanForecastPeriod_OneofMarshaler, _KeywordPlanForecastPeriod_OneofUnmarshaler, _KeywordPlanForecastPeriod_OneofSizer, []interface{}{
+		(*KeywordPlanForecastPeriod_DateInterval)(nil),
+		(*KeywordPlanForecastPeriod_DateRange)(nil),
+	}
+}
+
+func _KeywordPlanForecastPeriod_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*KeywordPlanForecastPeriod)
+	// interval
+	switch x := m.Interval.(type) {
+	case *KeywordPlanForecastPeriod_DateInterval:
+		b.EncodeVarint(1<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.DateInterval))
+	case *KeywordPlanForecastPeriod_DateRange:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DateRange); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("KeywordPlanForecastPeriod.Interval has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _KeywordPlanForecastPeriod_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*KeywordPlanForecastPeriod)
+	switch tag {
+	case 1: // interval.date_interval
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Interval = &KeywordPlanForecastPeriod_DateInterval{enums.KeywordPlanForecastIntervalEnum_KeywordPlanForecastInterval(x)}
+		return true, err
+	case 2: // interval.date_range
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.DateRange)
+		err := b.DecodeMessage(msg)
+		m.Interval = &KeywordPlanForecastPeriod_DateRange{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _KeywordPlanForecastPeriod_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*KeywordPlanForecastPeriod)
+	// interval
+	switch x := m.Interval.(type) {
+	case *KeywordPlanForecastPeriod_DateInterval:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.DateInterval))
+	case *KeywordPlanForecastPeriod_DateRange:
+		s := proto.Size(x.DateRange)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlan)(nil), "google.ads.googleads.v0.resources.KeywordPlan")
+	proto.RegisterType((*KeywordPlanForecastPeriod)(nil), "google.ads.googleads.v0.resources.KeywordPlanForecastPeriod")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/keyword_plan.proto", fileDescriptor_keyword_plan_9d2df87f9b36e60a)
+}
+
+var fileDescriptor_keyword_plan_9d2df87f9b36e60a = []byte{
+	// 453 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xcd, 0x6a, 0xd5, 0x40,
+	0x14, 0xc7, 0x3b, 0x69, 0x11, 0x3b, 0xfd, 0x50, 0xb2, 0xba, 0x56, 0x91, 0xb6, 0x22, 0x54, 0x85,
+	0x49, 0xa8, 0xc5, 0x8d, 0x6e, 0xee, 0x45, 0xed, 0x87, 0x20, 0x21, 0xc2, 0x5d, 0x94, 0x40, 0x98,
+	0x66, 0xce, 0x1d, 0x82, 0xc9, 0x4c, 0x98, 0x49, 0x6e, 0x71, 0xe9, 0xab, 0xb8, 0xf4, 0x51, 0xdc,
+	0xfb, 0x2c, 0xba, 0x94, 0xcc, 0x47, 0x68, 0xb1, 0x69, 0x77, 0xe7, 0xdc, 0xfb, 0x3b, 0xff, 0xf3,
+	0x3f, 0xe7, 0x4c, 0xf0, 0x11, 0x97, 0x92, 0x57, 0x10, 0x51, 0xa6, 0x23, 0x1b, 0xf6, 0xd1, 0x32,
+	0x8e, 0x14, 0x68, 0xd9, 0xa9, 0x02, 0x74, 0xf4, 0x15, 0xbe, 0x5d, 0x4a, 0xc5, 0xf2, 0xa6, 0xa2,
+	0x82, 0x34, 0x4a, 0xb6, 0x32, 0xdc, 0xb3, 0x28, 0xa1, 0x4c, 0x93, 0xa1, 0x8a, 0x2c, 0x63, 0x32,
+	0x54, 0xed, 0xbc, 0x1c, 0x13, 0x2e, 0x64, 0x5d, 0x4b, 0x11, 0x31, 0xda, 0x82, 0xb6, 0x72, 0x3b,
+	0xb3, 0x31, 0x16, 0x44, 0x57, 0x5f, 0x37, 0x90, 0x2f, 0xa4, 0x82, 0x82, 0xea, 0x36, 0x2f, 0x45,
+	0x0b, 0x6a, 0x49, 0x2b, 0xa7, 0xf1, 0xd4, 0x69, 0x98, 0xec, 0xa2, 0x5b, 0x44, 0x97, 0x8a, 0x36,
+	0x0d, 0x28, 0xd7, 0x63, 0xff, 0x2f, 0xc2, 0x1b, 0x9f, 0xac, 0x50, 0x52, 0x51, 0x11, 0x3e, 0xc3,
+	0x5b, 0xde, 0x6c, 0x2e, 0x68, 0x0d, 0x13, 0xb4, 0x8b, 0x0e, 0xd6, 0xd3, 0x4d, 0xff, 0xe3, 0x67,
+	0x5a, 0x43, 0xf8, 0x0a, 0x07, 0x25, 0x9b, 0x04, 0xbb, 0xe8, 0x60, 0xe3, 0xf0, 0xb1, 0x9b, 0x94,
+	0xf8, 0x0e, 0xe4, 0x54, 0xb4, 0x6f, 0x8e, 0xe6, 0xb4, 0xea, 0x20, 0x0d, 0x4a, 0x16, 0xc6, 0x78,
+	0xcd, 0x08, 0xad, 0x1a, 0xfc, 0xc9, 0x7f, 0xf8, 0x97, 0x56, 0x95, 0x82, 0x5b, 0xde, 0x90, 0x21,
+	0xe0, 0x07, 0xc3, 0x38, 0x0d, 0xa8, 0x52, 0xb2, 0xc9, 0x9a, 0x29, 0x7e, 0x47, 0xee, 0x5c, 0x30,
+	0xb9, 0x32, 0xcc, 0x47, 0x27, 0x92, 0x18, 0x8d, 0x74, 0x7b, 0x71, 0x2d, 0xdf, 0xff, 0x83, 0xf0,
+	0xa3, 0x51, 0x3a, 0xfc, 0x8e, 0xf0, 0x56, 0x7f, 0x8c, 0x61, 0xa1, 0x66, 0x13, 0xdb, 0x87, 0xe7,
+	0xa3, 0x1e, 0xcc, 0x55, 0x6e, 0xea, 0x7f, 0xea, 0x14, 0x3e, 0x88, 0xae, 0xbe, 0xed, 0xff, 0x93,
+	0x95, 0x74, 0xb3, 0x6f, 0xe9, 0xf3, 0xf0, 0x0c, 0x63, 0x63, 0x41, 0x51, 0xc1, 0xc1, 0xed, 0xfb,
+	0xc5, 0x68, 0x7f, 0xfb, 0x82, 0xc8, 0x7b, 0xda, 0x42, 0xda, 0x17, 0x9c, 0xac, 0xa4, 0xeb, 0xcc,
+	0x27, 0x33, 0x8c, 0xef, 0xfb, 0x49, 0x66, 0xbf, 0x11, 0x7e, 0x5e, 0xc8, 0xfa, 0xee, 0x6d, 0xce,
+	0x1e, 0x5e, 0xb1, 0x9b, 0xf4, 0x17, 0x4b, 0xd0, 0xf9, 0x99, 0x2b, 0xe3, 0xb2, 0xa2, 0x82, 0x13,
+	0xa9, 0x78, 0xc4, 0x41, 0x98, 0x7b, 0xfa, 0x67, 0xda, 0x94, 0xfa, 0x96, 0x4f, 0xe7, 0xed, 0x10,
+	0xfd, 0x08, 0x56, 0x8f, 0xa7, 0xd3, 0x9f, 0xc1, 0xde, 0xb1, 0x95, 0x9c, 0x32, 0x4d, 0x6c, 0xd8,
+	0x47, 0xf3, 0x98, 0xa4, 0x9e, 0xfc, 0xe5, 0x99, 0x6c, 0xca, 0x74, 0x36, 0x30, 0xd9, 0x3c, 0xce,
+	0x06, 0xe6, 0xe2, 0x9e, 0x31, 0xf1, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x25, 0xda, 0xc1,
+	0xe1, 0xbe, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/keyword_plan_ad_group.pb.go b/googleapis/ads/googleads/v0/resources/keyword_plan_ad_group.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a695e6eff4894e821f5a97c8bdde50882ccdd262
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/keyword_plan_ad_group.pb.go
@@ -0,0 +1,139 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/keyword_plan_ad_group.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A Keyword Planner ad group.
+type KeywordPlanAdGroup struct {
+	// The resource name of the Keyword Planner ad group.
+	// KeywordPlanAdGroup resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlanAdGroups/{kp_ad_group_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The keyword plan campaign to which this ad group belongs.
+	KeywordPlanCampaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The ID of the keyword plan ad group.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the keyword plan ad group.
+	//
+	// This field is required and should not be empty when creating keyword plan
+	// ad group.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// A default ad group max cpc bid in micros in account currency for all
+	// biddable keywords under the keyword plan ad group.
+	// If not set, will inherit from parent campaign.
+	CpcBidMicros         *wrappers.Int64Value `protobuf:"bytes,5,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *KeywordPlanAdGroup) Reset()         { *m = KeywordPlanAdGroup{} }
+func (m *KeywordPlanAdGroup) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroup) ProtoMessage()    {}
+func (*KeywordPlanAdGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_f170de358444a70a, []int{0}
+}
+func (m *KeywordPlanAdGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroup.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroup.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanAdGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroup.Merge(dst, src)
+}
+func (m *KeywordPlanAdGroup) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroup.Size(m)
+}
+func (m *KeywordPlanAdGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroup proto.InternalMessageInfo
+
+func (m *KeywordPlanAdGroup) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanAdGroup) GetKeywordPlanCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroup) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroup) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroup) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanAdGroup)(nil), "google.ads.googleads.v0.resources.KeywordPlanAdGroup")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/keyword_plan_ad_group.proto", fileDescriptor_keyword_plan_ad_group_f170de358444a70a)
+}
+
+var fileDescriptor_keyword_plan_ad_group_f170de358444a70a = []byte{
+	// 360 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xdf, 0x4a, 0xfb, 0x30,
+	0x1c, 0xc5, 0x69, 0xb7, 0xdf, 0x0f, 0x8c, 0xd3, 0x8b, 0x8a, 0x58, 0x54, 0x64, 0x53, 0x84, 0x81,
+	0x90, 0x16, 0x15, 0x6f, 0xc4, 0x8b, 0xce, 0x8b, 0xa1, 0xa2, 0x94, 0x09, 0xbb, 0x90, 0x42, 0xc9,
+	0x92, 0x18, 0xc2, 0xda, 0x24, 0x24, 0xeb, 0x86, 0xaf, 0xe3, 0xa5, 0xe0, 0x8b, 0xf8, 0x0c, 0x3e,
+	0x8c, 0xf4, 0xaf, 0xc8, 0xc0, 0x79, 0x77, 0x08, 0xe7, 0x73, 0xce, 0x21, 0x7c, 0xc1, 0x15, 0x93,
+	0x92, 0x25, 0xd4, 0x43, 0xc4, 0x78, 0xa5, 0xcc, 0xd5, 0xdc, 0xf7, 0x34, 0x35, 0x32, 0xd3, 0x98,
+	0x1a, 0x6f, 0x4a, 0x5f, 0x16, 0x52, 0x93, 0x58, 0x25, 0x48, 0xc4, 0x88, 0xc4, 0x4c, 0xcb, 0x4c,
+	0x41, 0xa5, 0xe5, 0x4c, 0x3a, 0xbd, 0x92, 0x81, 0x88, 0x18, 0xd8, 0xe0, 0x70, 0xee, 0xc3, 0x06,
+	0xdf, 0x3d, 0xa8, 0x1a, 0x0a, 0x60, 0x92, 0x3d, 0x7b, 0x0b, 0x8d, 0x94, 0xa2, 0xda, 0x94, 0x11,
+	0x87, 0xef, 0x36, 0x70, 0xee, 0xca, 0x8a, 0x30, 0x41, 0x22, 0x20, 0xc3, 0x3c, 0xdf, 0x39, 0x02,
+	0x1b, 0x75, 0x46, 0x2c, 0x50, 0x4a, 0x5d, 0xab, 0x6b, 0xf5, 0xd7, 0x46, 0x9d, 0xfa, 0xf1, 0x01,
+	0xa5, 0xd4, 0x09, 0xc1, 0xf6, 0x8f, 0x75, 0x18, 0xa5, 0x0a, 0x71, 0x26, 0x5c, 0xbb, 0x6b, 0xf5,
+	0xd7, 0x4f, 0xf7, 0xab, 0x4d, 0xb0, 0xee, 0x86, 0x8f, 0x33, 0xcd, 0x05, 0x1b, 0xa3, 0x24, 0xa3,
+	0xa3, 0xad, 0xe9, 0x77, 0xeb, 0x75, 0x05, 0x3a, 0x27, 0xc0, 0xe6, 0xc4, 0x6d, 0x15, 0xf8, 0xde,
+	0x12, 0x7e, 0x23, 0x66, 0x17, 0xe7, 0x25, 0x6d, 0x73, 0xe2, 0xf8, 0xa0, 0x5d, 0x4c, 0x6b, 0xff,
+	0xa1, 0xad, 0x70, 0x3a, 0x01, 0xd8, 0xc4, 0x0a, 0xc7, 0x13, 0x4e, 0xe2, 0x94, 0x63, 0x2d, 0x8d,
+	0xfb, 0x6f, 0x75, 0x55, 0x07, 0x2b, 0x3c, 0xe0, 0xe4, 0xbe, 0x00, 0x06, 0x9f, 0x16, 0x38, 0xc6,
+	0x32, 0x85, 0x2b, 0x7f, 0x7e, 0xb0, 0xb3, 0xfc, 0xad, 0x61, 0x1e, 0x1f, 0x5a, 0x4f, 0xb7, 0x15,
+	0xcd, 0x64, 0x82, 0x04, 0x83, 0x52, 0x33, 0x8f, 0x51, 0x51, 0x94, 0xd7, 0x67, 0xa0, 0xb8, 0xf9,
+	0xe5, 0x2a, 0x2e, 0x1b, 0xf5, 0x6a, 0xb7, 0x86, 0x41, 0xf0, 0x66, 0xf7, 0x86, 0x65, 0x64, 0x40,
+	0x0c, 0x2c, 0x65, 0xae, 0xc6, 0x3e, 0x1c, 0xd5, 0xce, 0x8f, 0xda, 0x13, 0x05, 0xc4, 0x44, 0x8d,
+	0x27, 0x1a, 0xfb, 0x51, 0xe3, 0x99, 0xfc, 0x2f, 0x46, 0x9c, 0x7d, 0x05, 0x00, 0x00, 0xff, 0xff,
+	0x77, 0xaa, 0xcb, 0x45, 0x99, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/keyword_plan_campaign.pb.go b/googleapis/ads/googleads/v0/resources/keyword_plan_campaign.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6faa01619119e632d914da2a575d5de2c86eea0b
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/keyword_plan_campaign.pb.go
@@ -0,0 +1,222 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/keyword_plan_campaign.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A Keyword Plan campaign.
+type KeywordPlanCampaign struct {
+	// The resource name of the Keyword Plan campaign.
+	// KeywordPlanCampaign resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlanCampaigns/{kp_campaign_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The keyword plan this campaign belongs to.
+	KeywordPlan *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	// The ID of the Keyword Plan campaign.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The name of the Keyword Plan campaign.
+	//
+	// This field is required and should not be empty when creating Keyword Plan
+	// campaigns.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The languages targeted for the Keyword Plan campaign.
+	LanguageConstants []*wrappers.StringValue `protobuf:"bytes,5,rep,name=language_constants,json=languageConstants,proto3" json:"language_constants,omitempty"`
+	// Targeting network.
+	//
+	// This field is required and should not be empty when creating Keyword Plan
+	// campaigns.
+	KeywordPlanNetwork enums.KeywordPlanNetworkEnum_KeywordPlanNetwork `protobuf:"varint,6,opt,name=keyword_plan_network,json=keywordPlanNetwork,proto3,enum=google.ads.googleads.v0.enums.KeywordPlanNetworkEnum_KeywordPlanNetwork" json:"keyword_plan_network,omitempty"`
+	// A default max cpc bid in micros, and in the account currency, for all ad
+	// groups under the campaign.
+	//
+	// This field is required and should not be empty when creating Keyword Plan
+	// campaigns.
+	CpcBidMicros *wrappers.Int64Value `protobuf:"bytes,7,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	// The geo targets.
+	GeoTargets           []*KeywordPlanGeoTarget `protobuf:"bytes,8,rep,name=geo_targets,json=geoTargets,proto3" json:"geo_targets,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *KeywordPlanCampaign) Reset()         { *m = KeywordPlanCampaign{} }
+func (m *KeywordPlanCampaign) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaign) ProtoMessage()    {}
+func (*KeywordPlanCampaign) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_67d6c64c85cecb01, []int{0}
+}
+func (m *KeywordPlanCampaign) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaign.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaign) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaign.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanCampaign) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaign.Merge(dst, src)
+}
+func (m *KeywordPlanCampaign) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaign.Size(m)
+}
+func (m *KeywordPlanCampaign) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaign.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaign proto.InternalMessageInfo
+
+func (m *KeywordPlanCampaign) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanCampaign) GetKeywordPlan() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetLanguageConstants() []*wrappers.StringValue {
+	if m != nil {
+		return m.LanguageConstants
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetKeywordPlanNetwork() enums.KeywordPlanNetworkEnum_KeywordPlanNetwork {
+	if m != nil {
+		return m.KeywordPlanNetwork
+	}
+	return enums.KeywordPlanNetworkEnum_UNSPECIFIED
+}
+
+func (m *KeywordPlanCampaign) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaign) GetGeoTargets() []*KeywordPlanGeoTarget {
+	if m != nil {
+		return m.GeoTargets
+	}
+	return nil
+}
+
+// A geo target.
+// Next ID: 3
+type KeywordPlanGeoTarget struct {
+	// Required. The resource name of the geo target.
+	GeoTargetConstant    *wrappers.StringValue `protobuf:"bytes,1,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *KeywordPlanGeoTarget) Reset()         { *m = KeywordPlanGeoTarget{} }
+func (m *KeywordPlanGeoTarget) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanGeoTarget) ProtoMessage()    {}
+func (*KeywordPlanGeoTarget) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_67d6c64c85cecb01, []int{1}
+}
+func (m *KeywordPlanGeoTarget) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanGeoTarget.Unmarshal(m, b)
+}
+func (m *KeywordPlanGeoTarget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanGeoTarget.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanGeoTarget) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanGeoTarget.Merge(dst, src)
+}
+func (m *KeywordPlanGeoTarget) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanGeoTarget.Size(m)
+}
+func (m *KeywordPlanGeoTarget) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanGeoTarget.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanGeoTarget proto.InternalMessageInfo
+
+func (m *KeywordPlanGeoTarget) GetGeoTargetConstant() *wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanCampaign)(nil), "google.ads.googleads.v0.resources.KeywordPlanCampaign")
+	proto.RegisterType((*KeywordPlanGeoTarget)(nil), "google.ads.googleads.v0.resources.KeywordPlanGeoTarget")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/keyword_plan_campaign.proto", fileDescriptor_keyword_plan_campaign_67d6c64c85cecb01)
+}
+
+var fileDescriptor_keyword_plan_campaign_67d6c64c85cecb01 = []byte{
+	// 487 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x61, 0x8b, 0xd3, 0x30,
+	0x18, 0xc7, 0x69, 0x37, 0x4f, 0xcd, 0xe6, 0x81, 0xb9, 0x7b, 0x51, 0x4e, 0x91, 0xdd, 0x89, 0x30,
+	0x10, 0xd2, 0x72, 0x8a, 0x0a, 0x22, 0xd2, 0x1d, 0x32, 0xf5, 0xf4, 0x18, 0x55, 0x86, 0xc8, 0xa0,
+	0x64, 0x49, 0x0c, 0x65, 0x6d, 0x52, 0x92, 0xf6, 0x86, 0x7e, 0x1c, 0x5f, 0xfa, 0x29, 0x7c, 0xed,
+	0x77, 0xf0, 0xbb, 0xc8, 0x92, 0xa5, 0x37, 0xbc, 0x9d, 0xf5, 0xdd, 0xb3, 0xec, 0xf9, 0x3d, 0xff,
+	0x7f, 0xff, 0x79, 0x02, 0x5e, 0x70, 0x29, 0x79, 0xce, 0x42, 0x4c, 0x75, 0x68, 0xcb, 0x55, 0x75,
+	0x1e, 0x85, 0x8a, 0x69, 0x59, 0x2b, 0xc2, 0x74, 0xb8, 0x60, 0x5f, 0x97, 0x52, 0xd1, 0xb4, 0xcc,
+	0xb1, 0x48, 0x09, 0x2e, 0x4a, 0x9c, 0x71, 0x81, 0x4a, 0x25, 0x2b, 0x09, 0x0f, 0x2d, 0x83, 0x30,
+	0xd5, 0xa8, 0xc1, 0xd1, 0x79, 0x84, 0x1a, 0xfc, 0xe0, 0xd9, 0x55, 0x0a, 0x4c, 0xd4, 0xc5, 0x5f,
+	0xd3, 0x05, 0xab, 0x96, 0x52, 0x2d, 0xec, 0xf0, 0x83, 0x7b, 0x6b, 0xd2, 0xfc, 0x9a, 0xd7, 0x5f,
+	0xc2, 0xa5, 0xc2, 0x65, 0xc9, 0x94, 0xb6, 0xff, 0x1f, 0xfd, 0xec, 0x82, 0xbd, 0x53, 0x8b, 0x4f,
+	0x72, 0x2c, 0x4e, 0xd6, 0xd6, 0xe0, 0x7d, 0x70, 0xcb, 0xc9, 0xa7, 0x02, 0x17, 0x2c, 0xf0, 0x06,
+	0xde, 0xf0, 0x66, 0xd2, 0x77, 0x87, 0x67, 0xb8, 0x60, 0xf0, 0x25, 0xe8, 0x6f, 0x4a, 0x07, 0xfe,
+	0xc0, 0x1b, 0xf6, 0x8e, 0xef, 0xae, 0xbf, 0x02, 0x39, 0x4d, 0xf4, 0xa1, 0x52, 0x99, 0xe0, 0x53,
+	0x9c, 0xd7, 0x2c, 0xe9, 0x2d, 0x2e, 0xd4, 0xe0, 0x43, 0xe0, 0x67, 0x34, 0xe8, 0x18, 0xec, 0xce,
+	0x25, 0xec, 0x8d, 0xa8, 0x9e, 0x3c, 0xb6, 0x94, 0x9f, 0x51, 0x18, 0x81, 0xae, 0x71, 0xd2, 0xfd,
+	0x0f, 0x15, 0xd3, 0x09, 0x4f, 0x01, 0xcc, 0xb1, 0xe0, 0x35, 0xe6, 0x2c, 0x25, 0x52, 0xe8, 0x0a,
+	0x8b, 0x4a, 0x07, 0xd7, 0x06, 0x9d, 0x56, 0xfe, 0xb6, 0xe3, 0x4e, 0x1c, 0x06, 0xbf, 0x81, 0xfd,
+	0x6d, 0x39, 0x07, 0x3b, 0x03, 0x6f, 0xb8, 0x7b, 0xfc, 0x1a, 0x5d, 0x75, 0x8b, 0xe6, 0x8a, 0xd0,
+	0x46, 0xc6, 0x67, 0x16, 0x7c, 0x25, 0xea, 0x62, 0xcb, 0x71, 0x02, 0x17, 0x97, 0xce, 0x60, 0x0c,
+	0x76, 0x49, 0x49, 0xd2, 0x79, 0x46, 0xd3, 0x22, 0x23, 0x4a, 0xea, 0xe0, 0x7a, 0x7b, 0x66, 0x7d,
+	0x52, 0x92, 0x51, 0x46, 0xdf, 0x1b, 0x00, 0x7e, 0x02, 0x3d, 0xce, 0x64, 0x5a, 0x61, 0xc5, 0x59,
+	0xa5, 0x83, 0x1b, 0x26, 0x84, 0xa7, 0xa8, 0x75, 0xf7, 0x36, 0x2d, 0x8e, 0x99, 0xfc, 0x68, 0xf8,
+	0x04, 0x70, 0x57, 0xea, 0x23, 0x0a, 0xf6, 0xb7, 0xf5, 0xc0, 0x77, 0x60, 0xef, 0x42, 0xb1, 0xc9,
+	0xdf, 0x2c, 0x52, 0x6b, 0xfc, 0xcd, 0x78, 0x97, 0xff, 0xe8, 0xb7, 0x07, 0x1e, 0x10, 0x59, 0xb4,
+	0x1b, 0x1e, 0x05, 0x5b, 0xf6, 0x79, 0xb2, 0x52, 0x99, 0x78, 0x9f, 0xdf, 0xae, 0x71, 0x2e, 0x57,
+	0x17, 0x8c, 0xa4, 0xe2, 0x21, 0x67, 0xc2, 0x78, 0x70, 0x0f, 0xab, 0xcc, 0xf4, 0x3f, 0x5e, 0xf2,
+	0xf3, 0xa6, 0xfa, 0xee, 0x77, 0xc6, 0x71, 0xfc, 0xc3, 0x3f, 0x1c, 0xdb, 0x91, 0x31, 0xd5, 0xc8,
+	0x96, 0xab, 0x6a, 0x1a, 0xa1, 0xc4, 0x75, 0xfe, 0x72, 0x3d, 0xb3, 0x98, 0xea, 0x59, 0xd3, 0x33,
+	0x9b, 0x46, 0xb3, 0xa6, 0x67, 0xbe, 0x63, 0x4c, 0x3c, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0x1a,
+	0x82, 0x8f, 0x23, 0x4d, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/keyword_plan_keyword.pb.go b/googleapis/ads/googleads/v0/resources/keyword_plan_keyword.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9ec2926466805574a2f3aa2e30935b7e466da5f9
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/keyword_plan_keyword.pb.go
@@ -0,0 +1,149 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/keyword_plan_keyword.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A Keyword Plan ad group keyword.
+type KeywordPlanKeyword struct {
+	// The resource name of the Keyword Plan ad group keyword.
+	// KeywordPlanKeyword resource names have the form:
+	//
+	// `customers/{customer_id}/keywordPlanKeywords/{kp_ad_group_keyword_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The Keyword Plan ad group to which this keyword belongs.
+	KeywordPlanAdGroup *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan_ad_group,json=keywordPlanAdGroup,proto3" json:"keyword_plan_ad_group,omitempty"`
+	// The ID of the Keyword Plan keyword.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The keyword text.
+	Text *wrappers.StringValue `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+	// The keyword match type.
+	MatchType enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,5,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v0.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	// A keyword level max cpc bid in micros, in the account currency, that
+	// overrides the keyword plan ad group cpc bid.
+	CpcBidMicros         *wrappers.Int64Value `protobuf:"bytes,6,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *KeywordPlanKeyword) Reset()         { *m = KeywordPlanKeyword{} }
+func (m *KeywordPlanKeyword) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeyword) ProtoMessage()    {}
+func (*KeywordPlanKeyword) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_de119909c667c884, []int{0}
+}
+func (m *KeywordPlanKeyword) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeyword.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeyword) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeyword.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanKeyword) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeyword.Merge(dst, src)
+}
+func (m *KeywordPlanKeyword) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeyword.Size(m)
+}
+func (m *KeywordPlanKeyword) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeyword.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeyword proto.InternalMessageInfo
+
+func (m *KeywordPlanKeyword) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanKeyword) GetKeywordPlanAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanAdGroup
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeyword) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeyword) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeyword) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+func (m *KeywordPlanKeyword) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanKeyword)(nil), "google.ads.googleads.v0.resources.KeywordPlanKeyword")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/keyword_plan_keyword.proto", fileDescriptor_keyword_plan_keyword_de119909c667c884)
+}
+
+var fileDescriptor_keyword_plan_keyword_de119909c667c884 = []byte{
+	// 418 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xdf, 0x8a, 0xd3, 0x40,
+	0x14, 0xc6, 0x49, 0xba, 0x2e, 0xec, 0xb8, 0xee, 0xc5, 0x80, 0x18, 0x56, 0x91, 0xae, 0x22, 0x14,
+	0x84, 0x49, 0xa8, 0xd2, 0x1b, 0xbd, 0x49, 0x51, 0x8a, 0x4a, 0xb5, 0x44, 0xe9, 0x85, 0x04, 0xc2,
+	0x74, 0x66, 0x1c, 0x43, 0x33, 0x7f, 0x98, 0x49, 0x5a, 0xfb, 0x18, 0xbe, 0x82, 0x97, 0x3e, 0x8a,
+	0xcf, 0xe0, 0xc3, 0x48, 0x32, 0x49, 0x8a, 0x94, 0x5a, 0xef, 0xbe, 0x99, 0x7c, 0xbf, 0xf3, 0xe5,
+	0x9c, 0x39, 0xe0, 0x25, 0x57, 0x8a, 0x17, 0x2c, 0xc4, 0xd4, 0x86, 0x4e, 0xd6, 0x6a, 0x13, 0x85,
+	0x86, 0x59, 0x55, 0x19, 0xc2, 0x6c, 0xb8, 0x66, 0xbb, 0xad, 0x32, 0x34, 0xd3, 0x05, 0x96, 0x59,
+	0x7b, 0x40, 0xda, 0xa8, 0x52, 0xc1, 0x1b, 0x87, 0x20, 0x4c, 0x2d, 0xea, 0x69, 0xb4, 0x89, 0x50,
+	0x4f, 0x5f, 0x4f, 0x8e, 0x05, 0x30, 0x59, 0x89, 0x7d, 0x71, 0x81, 0x4b, 0xf2, 0x35, 0x2b, 0x77,
+	0x9a, 0xb9, 0xd2, 0xd7, 0x0f, 0x5b, 0xae, 0x39, 0xad, 0xaa, 0x2f, 0xe1, 0xd6, 0x60, 0xad, 0x99,
+	0xb1, 0xee, 0xfb, 0xa3, 0xef, 0x03, 0x00, 0xdf, 0x39, 0x78, 0x51, 0x60, 0xd9, 0x4a, 0xf8, 0x18,
+	0xdc, 0xe9, 0xb2, 0x33, 0x89, 0x05, 0x0b, 0xbc, 0xa1, 0x37, 0xba, 0x48, 0x2e, 0xbb, 0xcb, 0xf7,
+	0x58, 0x30, 0xf8, 0x01, 0xdc, 0xfd, 0xab, 0x29, 0x4c, 0x33, 0x6e, 0x54, 0xa5, 0x03, 0x7f, 0xe8,
+	0x8d, 0x6e, 0x8f, 0x1f, 0xb4, 0xbd, 0xa0, 0x2e, 0x1b, 0x7d, 0x2c, 0x4d, 0x2e, 0xf9, 0x12, 0x17,
+	0x15, 0x4b, 0xe0, 0x7a, 0x9f, 0x1a, 0xd3, 0x59, 0xcd, 0xc1, 0xa7, 0xc0, 0xcf, 0x69, 0x30, 0x68,
+	0xe8, 0xfb, 0x07, 0xf4, 0x1b, 0x59, 0x4e, 0x9e, 0x3b, 0xd8, 0xcf, 0x29, 0x8c, 0xc0, 0x59, 0xc9,
+	0xbe, 0x95, 0xc1, 0xd9, 0x7f, 0x84, 0x35, 0x4e, 0x48, 0x00, 0xd8, 0xcf, 0x27, 0xb8, 0x35, 0xf4,
+	0x46, 0x57, 0xe3, 0x57, 0xe8, 0xd8, 0xec, 0x9b, 0xc1, 0xa2, 0x76, 0x20, 0xf3, 0x9a, 0xfb, 0xb4,
+	0xd3, 0xec, 0xb5, 0xac, 0xc4, 0xc1, 0x65, 0x72, 0x21, 0x3a, 0x09, 0x63, 0x70, 0x45, 0x34, 0xc9,
+	0x56, 0x39, 0xcd, 0x44, 0x4e, 0x8c, 0xb2, 0xc1, 0xf9, 0xe9, 0x7e, 0x2e, 0x89, 0x26, 0xd3, 0x9c,
+	0xce, 0x1b, 0x60, 0xfa, 0xdb, 0x03, 0x4f, 0x88, 0x12, 0xe8, 0xe4, 0x56, 0x4c, 0xef, 0x1d, 0x3e,
+	0xdd, 0xa2, 0x2e, 0xbf, 0xf0, 0x3e, 0xbf, 0x6d, 0x69, 0xae, 0x0a, 0x2c, 0x39, 0x52, 0x86, 0x87,
+	0x9c, 0xc9, 0x26, 0xbc, 0x5b, 0x20, 0x9d, 0xdb, 0x7f, 0x2c, 0xec, 0x8b, 0x5e, 0xfd, 0xf0, 0x07,
+	0xb3, 0x38, 0xfe, 0xe9, 0xdf, 0xcc, 0x5c, 0xc9, 0x98, 0x5a, 0xe4, 0x64, 0xad, 0x96, 0x11, 0x4a,
+	0x3a, 0xe7, 0xaf, 0xce, 0x93, 0xc6, 0xd4, 0xa6, 0xbd, 0x27, 0x5d, 0x46, 0x69, 0xef, 0x59, 0x9d,
+	0x37, 0x3f, 0xf1, 0xec, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xc9, 0x08, 0x61, 0x34, 0x03,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/keyword_plan_negative_keyword.pb.go b/googleapis/ads/googleads/v0/resources/keyword_plan_negative_keyword.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ed544d3724da9237d74012200426c8cfff86b8a3
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/keyword_plan_negative_keyword.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/keyword_plan_negative_keyword.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A Keyword Plan negative keyword.
+type KeywordPlanNegativeKeyword struct {
+	// The resource name of the Keyword Plan negative keyword.
+	// KeywordPlanNegativeKeyword resource names have the form:
+	//
+	//
+	// `customers/{customer_id}/keywordPlanNegativeKeywords/{kp_negative_keyword_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The Keyword Plan campaign to which this negative keyword belongs.
+	KeywordPlanCampaign *wrappers.StringValue `protobuf:"bytes,2,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The ID of the Keyword Plan negative keyword.
+	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	// The keyword text.
+	Text *wrappers.StringValue `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+	// The keyword match type.
+	MatchType            enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,5,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v0.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
+	XXX_unrecognized     []byte                                      `json:"-"`
+	XXX_sizecache        int32                                       `json:"-"`
+}
+
+func (m *KeywordPlanNegativeKeyword) Reset()         { *m = KeywordPlanNegativeKeyword{} }
+func (m *KeywordPlanNegativeKeyword) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNegativeKeyword) ProtoMessage()    {}
+func (*KeywordPlanNegativeKeyword) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_91c1a0aa0ef68060, []int{0}
+}
+func (m *KeywordPlanNegativeKeyword) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNegativeKeyword.Unmarshal(m, b)
+}
+func (m *KeywordPlanNegativeKeyword) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNegativeKeyword.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanNegativeKeyword) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNegativeKeyword.Merge(dst, src)
+}
+func (m *KeywordPlanNegativeKeyword) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNegativeKeyword.Size(m)
+}
+func (m *KeywordPlanNegativeKeyword) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNegativeKeyword.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNegativeKeyword proto.InternalMessageInfo
+
+func (m *KeywordPlanNegativeKeyword) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *KeywordPlanNegativeKeyword) GetKeywordPlanCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeyword) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeyword) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeyword) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*KeywordPlanNegativeKeyword)(nil), "google.ads.googleads.v0.resources.KeywordPlanNegativeKeyword")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/keyword_plan_negative_keyword.proto", fileDescriptor_keyword_plan_negative_keyword_91c1a0aa0ef68060)
+}
+
+var fileDescriptor_keyword_plan_negative_keyword_91c1a0aa0ef68060 = []byte{
+	// 400 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcd, 0xca, 0xd3, 0x40,
+	0x14, 0x25, 0xf9, 0xaa, 0xd0, 0xf1, 0x67, 0x11, 0x11, 0x42, 0x15, 0x6d, 0x15, 0xa1, 0x20, 0x4c,
+	0x42, 0x95, 0x6e, 0x5c, 0xa5, 0x5a, 0x8a, 0x8a, 0x25, 0x44, 0xe9, 0x42, 0x02, 0x61, 0x9a, 0x8c,
+	0x63, 0x68, 0xe6, 0x87, 0x99, 0x49, 0x6b, 0x5f, 0xc7, 0xa5, 0x8f, 0xe2, 0x0b, 0xf8, 0x02, 0x3e,
+	0x88, 0x24, 0x33, 0x49, 0x91, 0x52, 0xfd, 0x76, 0x27, 0x37, 0xe7, 0x9c, 0x7b, 0xcf, 0xbd, 0x03,
+	0x96, 0x84, 0x73, 0x52, 0xe1, 0x00, 0x15, 0x2a, 0x30, 0xb0, 0x41, 0xfb, 0x30, 0x90, 0x58, 0xf1,
+	0x5a, 0xe6, 0x58, 0x05, 0x3b, 0x7c, 0x3c, 0x70, 0x59, 0x64, 0xa2, 0x42, 0x2c, 0x63, 0x98, 0x20,
+	0x5d, 0xee, 0x71, 0x66, 0xab, 0x50, 0x48, 0xae, 0xb9, 0x37, 0x31, 0x5a, 0x88, 0x0a, 0x05, 0x7b,
+	0x1b, 0xb8, 0x0f, 0x61, 0x6f, 0x33, 0x9a, 0x5f, 0xea, 0x84, 0x59, 0x4d, 0x4f, 0x5d, 0x28, 0xd2,
+	0xf9, 0xd7, 0x4c, 0x1f, 0x05, 0x36, 0xd6, 0xa3, 0x47, 0x56, 0xd7, 0x7e, 0x6d, 0xeb, 0x2f, 0xc1,
+	0x41, 0x22, 0x21, 0xb0, 0x54, 0xe6, 0xff, 0x93, 0x5f, 0x2e, 0x18, 0xbd, 0x37, 0xe2, 0xb8, 0x42,
+	0x6c, 0x6d, 0x07, 0xb4, 0x25, 0xef, 0x29, 0xb8, 0xd3, 0xcd, 0x90, 0x31, 0x44, 0xb1, 0xef, 0x8c,
+	0x9d, 0xe9, 0x30, 0xb9, 0xdd, 0x15, 0xd7, 0x88, 0x62, 0x2f, 0x06, 0xf7, 0xff, 0x4a, 0x99, 0x23,
+	0x2a, 0x50, 0x49, 0x98, 0xef, 0x8e, 0x9d, 0xe9, 0xad, 0xd9, 0x43, 0x9b, 0x09, 0x76, 0x33, 0xc0,
+	0x8f, 0x5a, 0x96, 0x8c, 0x6c, 0x50, 0x55, 0xe3, 0xe4, 0xde, 0xee, 0xd4, 0xfd, 0xb5, 0x15, 0x7a,
+	0xcf, 0x81, 0x5b, 0x16, 0xfe, 0x55, 0x2b, 0x7f, 0x70, 0x26, 0x7f, 0xcb, 0xf4, 0xfc, 0xa5, 0x51,
+	0xbb, 0x65, 0xe1, 0x85, 0x60, 0xa0, 0xf1, 0x37, 0xed, 0x0f, 0xae, 0xd1, 0xad, 0x65, 0x7a, 0x39,
+	0x00, 0xa7, 0x45, 0xf9, 0x37, 0xc6, 0xce, 0xf4, 0xee, 0xec, 0x0d, 0xbc, 0x74, 0x84, 0x76, 0xc3,
+	0xd0, 0x6e, 0xe4, 0x43, 0xa3, 0xfb, 0x74, 0x14, 0x78, 0xc9, 0x6a, 0x7a, 0x56, 0x4c, 0x86, 0xb4,
+	0x83, 0x8b, 0xdf, 0x0e, 0x78, 0x96, 0x73, 0x0a, 0xff, 0x7b, 0xdb, 0xc5, 0xe3, 0xcb, 0x07, 0x88,
+	0x9b, 0x10, 0xb1, 0xf3, 0xf9, 0x9d, 0x75, 0x21, 0xbc, 0x42, 0x8c, 0x40, 0x2e, 0x49, 0x40, 0x30,
+	0x6b, 0x23, 0x76, 0xcf, 0x41, 0x94, 0xea, 0x1f, 0xef, 0xf0, 0x55, 0x8f, 0xbe, 0xbb, 0x57, 0xab,
+	0x28, 0xfa, 0xe1, 0x4e, 0x56, 0xc6, 0x32, 0x2a, 0x14, 0x34, 0xb0, 0x41, 0x9b, 0x10, 0x26, 0x1d,
+	0xf3, 0x67, 0xc7, 0x49, 0xa3, 0x42, 0xa5, 0x3d, 0x27, 0xdd, 0x84, 0x69, 0xcf, 0xd9, 0xde, 0x6c,
+	0x87, 0x78, 0xf1, 0x27, 0x00, 0x00, 0xff, 0xff, 0x28, 0xf2, 0x8f, 0xb8, 0x0b, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/keyword_view.pb.go b/googleapis/ads/googleads/v0/resources/keyword_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..dd5413b40fae4887d8c65affb6c97eb118c9998d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/keyword_view.pb.go
@@ -0,0 +1,88 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/keyword_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A keyword view.
+type KeywordView struct {
+	// The resource name of the keyword view.
+	// Keyword view resource names have the form:
+	//
+	// `customers/{customer_id}/keywordViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KeywordView) Reset()         { *m = KeywordView{} }
+func (m *KeywordView) String() string { return proto.CompactTextString(m) }
+func (*KeywordView) ProtoMessage()    {}
+func (*KeywordView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_view_d1421782faf69a76, []int{0}
+}
+func (m *KeywordView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordView.Unmarshal(m, b)
+}
+func (m *KeywordView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordView.Marshal(b, m, deterministic)
+}
+func (dst *KeywordView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordView.Merge(dst, src)
+}
+func (m *KeywordView) XXX_Size() int {
+	return xxx_messageInfo_KeywordView.Size(m)
+}
+func (m *KeywordView) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordView proto.InternalMessageInfo
+
+func (m *KeywordView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*KeywordView)(nil), "google.ads.googleads.v0.resources.KeywordView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/keyword_view.proto", fileDescriptor_keyword_view_d1421782faf69a76)
+}
+
+var fileDescriptor_keyword_view_d1421782faf69a76 = []byte{
+	// 223 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0xec, 0xd4, 0xca, 0xf2, 0xfc, 0xa2, 0x94, 0xf8,
+	0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x52, 0xbd, 0xc4,
+	0x94, 0x62, 0x3d, 0xb8, 0x2e, 0xbd, 0x32, 0x03, 0x3d, 0xb8, 0x2e, 0x25, 0x23, 0x2e, 0x6e, 0x6f,
+	0x88, 0xc6, 0xb0, 0xcc, 0xd4, 0x72, 0x21, 0x65, 0x2e, 0x5e, 0x98, 0x5c, 0x7c, 0x5e, 0x62, 0x6e,
+	0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x0f, 0x4c, 0xd0, 0x2f, 0x31, 0x37, 0xd5, 0xe9,
+	0x2a, 0x23, 0x97, 0x6a, 0x72, 0x7e, 0xae, 0x1e, 0x41, 0xd3, 0x9d, 0x04, 0x90, 0xcc, 0x0e, 0x00,
+	0x39, 0x29, 0x80, 0x31, 0xca, 0x0b, 0xaa, 0x2d, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf,
+	0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0xec, 0x60, 0x98, 0xd7, 0x0a, 0x32, 0x8b, 0xf1, 0xf8, 0xd4,
+	0x1a, 0xce, 0x5a, 0xc4, 0xc4, 0xec, 0xee, 0xe8, 0xb8, 0x8a, 0x49, 0xd1, 0x1d, 0x62, 0xa4, 0x63,
+	0x4a, 0xb1, 0x1e, 0x84, 0x09, 0x62, 0x85, 0x19, 0xe8, 0x05, 0xc1, 0x54, 0x9e, 0x82, 0xa9, 0x89,
+	0x71, 0x4c, 0x29, 0x8e, 0x81, 0xab, 0x89, 0x09, 0x33, 0x88, 0x81, 0xab, 0x49, 0x62, 0x03, 0x3b,
+	0xc2, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x0a, 0xe8, 0x91, 0x50, 0x6d, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/language_constant.pb.go b/googleapis/ads/googleads/v0/resources/language_constant.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3e63cb9168106d702aaeba34b5b4b4c25af7a5ba
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/language_constant.pb.go
@@ -0,0 +1,123 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/language_constant.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A language.
+type LanguageConstant struct {
+	// The resource name of the language constant.
+	// Language constant resource names have the form:
+	//
+	// `languageConstants/{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the language constant.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The language code, e.g. "en_US", "en_AU", "es", "fr", etc.
+	Code *wrappers.StringValue `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"`
+	// The full name of the language in English, e.g., "English (US)", "Spanish",
+	// etc.
+	Name                 *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *LanguageConstant) Reset()         { *m = LanguageConstant{} }
+func (m *LanguageConstant) String() string { return proto.CompactTextString(m) }
+func (*LanguageConstant) ProtoMessage()    {}
+func (*LanguageConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_language_constant_bbd663492e92d8dc, []int{0}
+}
+func (m *LanguageConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LanguageConstant.Unmarshal(m, b)
+}
+func (m *LanguageConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LanguageConstant.Marshal(b, m, deterministic)
+}
+func (dst *LanguageConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LanguageConstant.Merge(dst, src)
+}
+func (m *LanguageConstant) XXX_Size() int {
+	return xxx_messageInfo_LanguageConstant.Size(m)
+}
+func (m *LanguageConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_LanguageConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LanguageConstant proto.InternalMessageInfo
+
+func (m *LanguageConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *LanguageConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *LanguageConstant) GetCode() *wrappers.StringValue {
+	if m != nil {
+		return m.Code
+	}
+	return nil
+}
+
+func (m *LanguageConstant) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*LanguageConstant)(nil), "google.ads.googleads.v0.resources.LanguageConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/language_constant.proto", fileDescriptor_language_constant_bbd663492e92d8dc)
+}
+
+var fileDescriptor_language_constant_bbd663492e92d8dc = []byte{
+	// 312 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xd1, 0x4a, 0xf3, 0x30,
+	0x00, 0x85, 0x49, 0x37, 0x7e, 0xf8, 0xa3, 0x82, 0x14, 0x84, 0xa1, 0x22, 0x9b, 0x22, 0x0c, 0x84,
+	0xa4, 0xa8, 0x08, 0xe2, 0x55, 0xe7, 0xc5, 0x50, 0x44, 0x46, 0x85, 0x5e, 0x48, 0x61, 0x64, 0x4d,
+	0x0c, 0x85, 0x36, 0x29, 0x49, 0x3b, 0xdf, 0xc7, 0x4b, 0x9f, 0x44, 0x7c, 0x04, 0x9f, 0x46, 0x92,
+	0x34, 0xbd, 0x50, 0x50, 0xef, 0x0e, 0xe5, 0x3b, 0xdf, 0x69, 0x12, 0x78, 0xc9, 0xa5, 0xe4, 0x25,
+	0xc3, 0x84, 0x6a, 0xec, 0xa2, 0x49, 0xeb, 0x08, 0x2b, 0xa6, 0x65, 0xab, 0x72, 0xa6, 0x71, 0x49,
+	0x04, 0x6f, 0x09, 0x67, 0xcb, 0x5c, 0x0a, 0xdd, 0x10, 0xd1, 0xa0, 0x5a, 0xc9, 0x46, 0x86, 0x13,
+	0xc7, 0x23, 0x42, 0x35, 0xea, 0xab, 0x68, 0x1d, 0xa1, 0xbe, 0xba, 0x7b, 0xd0, 0xd9, 0x6d, 0x61,
+	0xd5, 0x3e, 0xe1, 0x67, 0x45, 0xea, 0x9a, 0x29, 0xed, 0x14, 0x87, 0x6f, 0x00, 0x6e, 0xdf, 0x75,
+	0xfa, 0xeb, 0xce, 0x1e, 0x1e, 0xc1, 0x2d, 0x6f, 0x58, 0x0a, 0x52, 0xb1, 0x11, 0x18, 0x83, 0xe9,
+	0xff, 0x64, 0xd3, 0x7f, 0xbc, 0x27, 0x15, 0x0b, 0x4f, 0x60, 0x50, 0xd0, 0x51, 0x30, 0x06, 0xd3,
+	0x8d, 0xd3, 0xbd, 0x6e, 0x1e, 0xf9, 0x19, 0x74, 0x23, 0x9a, 0x8b, 0xf3, 0x94, 0x94, 0x2d, 0x4b,
+	0x82, 0x82, 0x86, 0x11, 0x1c, 0xe6, 0x92, 0xb2, 0xd1, 0xc0, 0xe2, 0xfb, 0xdf, 0xf0, 0x87, 0x46,
+	0x15, 0x82, 0x3b, 0xde, 0x92, 0xa6, 0x61, 0xa7, 0x87, 0x7f, 0x69, 0x18, 0x72, 0xf6, 0x01, 0xe0,
+	0x71, 0x2e, 0x2b, 0xf4, 0xeb, 0xa5, 0xcc, 0x76, 0xbe, 0x9e, 0x78, 0x61, 0xac, 0x0b, 0xf0, 0x78,
+	0xdb, 0x75, 0xb9, 0x34, 0x57, 0x8e, 0xa4, 0xe2, 0x98, 0x33, 0x61, 0x37, 0xfd, 0xdb, 0xd4, 0x85,
+	0xfe, 0xe1, 0xa9, 0xae, 0xfa, 0xf4, 0x12, 0x0c, 0xe6, 0x71, 0xfc, 0x1a, 0x4c, 0xe6, 0x4e, 0x19,
+	0x53, 0x8d, 0x5c, 0x34, 0x29, 0x8d, 0x50, 0xe2, 0xc9, 0x77, 0xcf, 0x64, 0x31, 0xd5, 0x59, 0xcf,
+	0x64, 0x69, 0x94, 0xf5, 0xcc, 0xea, 0x9f, 0xfd, 0x89, 0xb3, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x15, 0x05, 0x8c, 0x99, 0x2e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/managed_placement_view.pb.go b/googleapis/ads/googleads/v0/resources/managed_placement_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..730cc4831dd7ef246a4e37ed4d158e5bc5ddb885
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/managed_placement_view.pb.go
@@ -0,0 +1,90 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/managed_placement_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A managed placement view.
+type ManagedPlacementView struct {
+	// The resource name of the Managed Placement view.
+	// Managed placement view resource names have the form:
+	//
+	//
+	// `customers/{customer_id}/managedPlacementViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManagedPlacementView) Reset()         { *m = ManagedPlacementView{} }
+func (m *ManagedPlacementView) String() string { return proto.CompactTextString(m) }
+func (*ManagedPlacementView) ProtoMessage()    {}
+func (*ManagedPlacementView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_managed_placement_view_d5d49526d4cf47f2, []int{0}
+}
+func (m *ManagedPlacementView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManagedPlacementView.Unmarshal(m, b)
+}
+func (m *ManagedPlacementView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManagedPlacementView.Marshal(b, m, deterministic)
+}
+func (dst *ManagedPlacementView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManagedPlacementView.Merge(dst, src)
+}
+func (m *ManagedPlacementView) XXX_Size() int {
+	return xxx_messageInfo_ManagedPlacementView.Size(m)
+}
+func (m *ManagedPlacementView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManagedPlacementView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManagedPlacementView proto.InternalMessageInfo
+
+func (m *ManagedPlacementView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ManagedPlacementView)(nil), "google.ads.googleads.v0.resources.ManagedPlacementView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/managed_placement_view.proto", fileDescriptor_managed_placement_view_d5d49526d4cf47f2)
+}
+
+var fileDescriptor_managed_placement_view_d5d49526d4cf47f2 = []byte{
+	// 237 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0xdc, 0xc4, 0xbc, 0xc4, 0xf4, 0xd4, 0x94, 0xf8,
+	0x82, 0x9c, 0xc4, 0xe4, 0xd4, 0xdc, 0xd4, 0xbc, 0x92, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82,
+	0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x26, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x7e, 0xbd,
+	0x32, 0x03, 0x3d, 0xb8, 0x7e, 0x25, 0x6b, 0x2e, 0x11, 0x5f, 0x88, 0x11, 0x01, 0x30, 0x13, 0xc2,
+	0x32, 0x53, 0xcb, 0x85, 0x94, 0xb9, 0x78, 0x61, 0x8a, 0xe2, 0xf3, 0x12, 0x73, 0x53, 0x25, 0x18,
+	0x15, 0x18, 0x35, 0x38, 0x83, 0x78, 0x60, 0x82, 0x7e, 0x89, 0xb9, 0xa9, 0x4e, 0xf7, 0x18, 0xb9,
+	0x54, 0x93, 0xf3, 0x73, 0xf5, 0x08, 0x5a, 0xe3, 0x24, 0x89, 0xcd, 0x92, 0x00, 0x90, 0x23, 0x03,
+	0x18, 0xa3, 0xbc, 0xa0, 0xfa, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5,
+	0xd3, 0x53, 0xf3, 0xc0, 0x5e, 0x80, 0x79, 0xbb, 0x20, 0xb3, 0x18, 0x4f, 0x28, 0x58, 0xc3, 0x59,
+	0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0x29, 0xba, 0x43, 0x8c, 0x74, 0x4c, 0x29, 0xd6,
+	0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0xbd, 0x20, 0x98, 0xca, 0x53, 0x30, 0x35, 0x31, 0x8e, 0x29,
+	0xc5, 0x31, 0x70, 0x35, 0x31, 0x61, 0x06, 0x31, 0x70, 0x35, 0x49, 0x6c, 0x60, 0x47, 0x18, 0x03,
+	0x02, 0x00, 0x00, 0xff, 0xff, 0x07, 0x6a, 0x38, 0x21, 0x89, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/media_file.pb.go b/googleapis/ads/googleads/v0/resources/media_file.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..32383f7e0a9ee996e8697a0a136be9555e36eea0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/media_file.pb.go
@@ -0,0 +1,363 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/media_file.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A media file.
+type MediaFile struct {
+	// The resource name of the media file.
+	// Media file resource names have the form:
+	//
+	// `customers/{customer_id}/mediaFiles/{media_file_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the media file.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Type of the media file.
+	Type enums.MediaTypeEnum_MediaType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.MediaTypeEnum_MediaType" json:"type,omitempty"`
+	// The mime type of the media file.
+	MimeType enums.MimeTypeEnum_MimeType `protobuf:"varint,6,opt,name=mime_type,json=mimeType,proto3,enum=google.ads.googleads.v0.enums.MimeTypeEnum_MimeType" json:"mime_type,omitempty"`
+	// The URL of where the original media file was downloaded from (or a file
+	// name).
+	SourceUrl *wrappers.StringValue `protobuf:"bytes,7,opt,name=source_url,json=sourceUrl,proto3" json:"source_url,omitempty"`
+	// The name of the media file. The name can be used by clients to help
+	// identify previously uploaded media.
+	Name *wrappers.StringValue `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"`
+	// The size of the media file in bytes.
+	FileSize *wrappers.Int64Value `protobuf:"bytes,9,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"`
+	// The specific type of the media file.
+	//
+	// Types that are valid to be assigned to Mediatype:
+	//	*MediaFile_Image
+	//	*MediaFile_MediaBundle
+	Mediatype            isMediaFile_Mediatype `protobuf_oneof:"mediatype"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MediaFile) Reset()         { *m = MediaFile{} }
+func (m *MediaFile) String() string { return proto.CompactTextString(m) }
+func (*MediaFile) ProtoMessage()    {}
+func (*MediaFile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_8d950f5477004c2c, []int{0}
+}
+func (m *MediaFile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaFile.Unmarshal(m, b)
+}
+func (m *MediaFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaFile.Marshal(b, m, deterministic)
+}
+func (dst *MediaFile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaFile.Merge(dst, src)
+}
+func (m *MediaFile) XXX_Size() int {
+	return xxx_messageInfo_MediaFile.Size(m)
+}
+func (m *MediaFile) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaFile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaFile proto.InternalMessageInfo
+
+func (m *MediaFile) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *MediaFile) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *MediaFile) GetType() enums.MediaTypeEnum_MediaType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.MediaTypeEnum_UNSPECIFIED
+}
+
+func (m *MediaFile) GetMimeType() enums.MimeTypeEnum_MimeType {
+	if m != nil {
+		return m.MimeType
+	}
+	return enums.MimeTypeEnum_UNSPECIFIED
+}
+
+func (m *MediaFile) GetSourceUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.SourceUrl
+	}
+	return nil
+}
+
+func (m *MediaFile) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *MediaFile) GetFileSize() *wrappers.Int64Value {
+	if m != nil {
+		return m.FileSize
+	}
+	return nil
+}
+
+type isMediaFile_Mediatype interface {
+	isMediaFile_Mediatype()
+}
+
+type MediaFile_Image struct {
+	Image *MediaImage `protobuf:"bytes,3,opt,name=image,proto3,oneof"`
+}
+
+type MediaFile_MediaBundle struct {
+	MediaBundle *MediaBundle `protobuf:"bytes,4,opt,name=media_bundle,json=mediaBundle,proto3,oneof"`
+}
+
+func (*MediaFile_Image) isMediaFile_Mediatype() {}
+
+func (*MediaFile_MediaBundle) isMediaFile_Mediatype() {}
+
+func (m *MediaFile) GetMediatype() isMediaFile_Mediatype {
+	if m != nil {
+		return m.Mediatype
+	}
+	return nil
+}
+
+func (m *MediaFile) GetImage() *MediaImage {
+	if x, ok := m.GetMediatype().(*MediaFile_Image); ok {
+		return x.Image
+	}
+	return nil
+}
+
+func (m *MediaFile) GetMediaBundle() *MediaBundle {
+	if x, ok := m.GetMediatype().(*MediaFile_MediaBundle); ok {
+		return x.MediaBundle
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*MediaFile) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _MediaFile_OneofMarshaler, _MediaFile_OneofUnmarshaler, _MediaFile_OneofSizer, []interface{}{
+		(*MediaFile_Image)(nil),
+		(*MediaFile_MediaBundle)(nil),
+	}
+}
+
+func _MediaFile_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*MediaFile)
+	// mediatype
+	switch x := m.Mediatype.(type) {
+	case *MediaFile_Image:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Image); err != nil {
+			return err
+		}
+	case *MediaFile_MediaBundle:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MediaBundle); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("MediaFile.Mediatype has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _MediaFile_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*MediaFile)
+	switch tag {
+	case 3: // mediatype.image
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MediaImage)
+		err := b.DecodeMessage(msg)
+		m.Mediatype = &MediaFile_Image{msg}
+		return true, err
+	case 4: // mediatype.media_bundle
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MediaBundle)
+		err := b.DecodeMessage(msg)
+		m.Mediatype = &MediaFile_MediaBundle{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _MediaFile_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*MediaFile)
+	// mediatype
+	switch x := m.Mediatype.(type) {
+	case *MediaFile_Image:
+		s := proto.Size(x.Image)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MediaFile_MediaBundle:
+		s := proto.Size(x.MediaBundle)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Encapsulates an Image.
+type MediaImage struct {
+	// Raw image data.
+	Data                 *wrappers.BytesValue `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MediaImage) Reset()         { *m = MediaImage{} }
+func (m *MediaImage) String() string { return proto.CompactTextString(m) }
+func (*MediaImage) ProtoMessage()    {}
+func (*MediaImage) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_8d950f5477004c2c, []int{1}
+}
+func (m *MediaImage) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaImage.Unmarshal(m, b)
+}
+func (m *MediaImage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaImage.Marshal(b, m, deterministic)
+}
+func (dst *MediaImage) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaImage.Merge(dst, src)
+}
+func (m *MediaImage) XXX_Size() int {
+	return xxx_messageInfo_MediaImage.Size(m)
+}
+func (m *MediaImage) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaImage.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaImage proto.InternalMessageInfo
+
+func (m *MediaImage) GetData() *wrappers.BytesValue {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Represents a ZIP archive media the content of which contains HTML5 assets.
+type MediaBundle struct {
+	// Raw zipped data.
+	Data                 *wrappers.BytesValue `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MediaBundle) Reset()         { *m = MediaBundle{} }
+func (m *MediaBundle) String() string { return proto.CompactTextString(m) }
+func (*MediaBundle) ProtoMessage()    {}
+func (*MediaBundle) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_8d950f5477004c2c, []int{2}
+}
+func (m *MediaBundle) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaBundle.Unmarshal(m, b)
+}
+func (m *MediaBundle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaBundle.Marshal(b, m, deterministic)
+}
+func (dst *MediaBundle) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaBundle.Merge(dst, src)
+}
+func (m *MediaBundle) XXX_Size() int {
+	return xxx_messageInfo_MediaBundle.Size(m)
+}
+func (m *MediaBundle) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaBundle.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaBundle proto.InternalMessageInfo
+
+func (m *MediaBundle) GetData() *wrappers.BytesValue {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*MediaFile)(nil), "google.ads.googleads.v0.resources.MediaFile")
+	proto.RegisterType((*MediaImage)(nil), "google.ads.googleads.v0.resources.MediaImage")
+	proto.RegisterType((*MediaBundle)(nil), "google.ads.googleads.v0.resources.MediaBundle")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/media_file.proto", fileDescriptor_media_file_8d950f5477004c2c)
+}
+
+var fileDescriptor_media_file_8d950f5477004c2c = []byte{
+	// 503 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x5d, 0x6b, 0xd4, 0x40,
+	0x14, 0x6d, 0xd2, 0xb4, 0x6e, 0x66, 0x6b, 0x1f, 0xe6, 0x29, 0x54, 0x91, 0xed, 0x8a, 0xb0, 0x20,
+	0x9d, 0x84, 0xb5, 0x14, 0xa1, 0x28, 0x6c, 0xa0, 0xf6, 0x03, 0x94, 0x9a, 0xd5, 0x7d, 0x90, 0x85,
+	0x65, 0xb6, 0xb9, 0x0d, 0x03, 0x99, 0x24, 0xcc, 0x24, 0x95, 0xed, 0xcf, 0xf1, 0xd1, 0x9f, 0xe2,
+	0x83, 0x2f, 0xfe, 0x21, 0x99, 0x99, 0x24, 0x5b, 0xd0, 0x9a, 0xfa, 0x76, 0xef, 0xee, 0x39, 0xe7,
+	0x9e, 0x73, 0x73, 0x13, 0x34, 0x4e, 0xf2, 0x3c, 0x49, 0xc1, 0xa7, 0xb1, 0xf4, 0x4d, 0xa9, 0xaa,
+	0x9b, 0xc0, 0x17, 0x20, 0xf3, 0x4a, 0x5c, 0x81, 0xf4, 0x39, 0xc4, 0x8c, 0x2e, 0xae, 0x59, 0x0a,
+	0xa4, 0x10, 0x79, 0x99, 0xe3, 0x7d, 0x03, 0x24, 0x34, 0x96, 0xa4, 0xe5, 0x90, 0x9b, 0x80, 0xb4,
+	0x9c, 0x3d, 0x72, 0x9f, 0x2c, 0x64, 0x15, 0x6f, 0x24, 0xcb, 0x55, 0x51, 0x4b, 0xee, 0x1d, 0x74,
+	0xe0, 0x19, 0x87, 0xbb, 0xf0, 0x67, 0x35, 0x5c, 0x77, 0xcb, 0xea, 0xda, 0xff, 0x2a, 0x68, 0x51,
+	0x80, 0x90, 0xe6, 0xff, 0xe1, 0x4f, 0x07, 0xb9, 0xef, 0xd5, 0x8c, 0x77, 0x2c, 0x05, 0xfc, 0x1c,
+	0x3d, 0x6e, 0x9c, 0x2d, 0x32, 0xca, 0xc1, 0xb3, 0x06, 0xd6, 0xc8, 0x8d, 0x76, 0x9a, 0x1f, 0x3f,
+	0x50, 0x0e, 0xf8, 0x25, 0xb2, 0x59, 0xec, 0xd9, 0x03, 0x6b, 0xd4, 0x1f, 0x3f, 0xa9, 0xed, 0x93,
+	0x46, 0x9f, 0x9c, 0x67, 0xe5, 0xd1, 0xe1, 0x8c, 0xa6, 0x15, 0x44, 0x36, 0x8b, 0xf1, 0x05, 0x72,
+	0x94, 0x1b, 0x6f, 0x6b, 0x60, 0x8d, 0x76, 0xc7, 0x47, 0xe4, 0xbe, 0x85, 0x68, 0xf7, 0x44, 0x3b,
+	0xf9, 0xb4, 0x2a, 0xe0, 0x24, 0xab, 0xf8, 0xba, 0x8b, 0xb4, 0x06, 0xfe, 0x88, 0xdc, 0x36, 0x9e,
+	0xb7, 0xad, 0x05, 0x0f, 0xbb, 0x04, 0x19, 0x87, 0xb5, 0x5e, 0xdd, 0x44, 0x3d, 0x5e, 0x57, 0xf8,
+	0x18, 0xa1, 0x3a, 0x6e, 0x25, 0x52, 0xef, 0x91, 0xce, 0xf4, 0xf4, 0x8f, 0x4c, 0xd3, 0x52, 0xb0,
+	0x2c, 0x31, 0xa1, 0x5c, 0x83, 0xff, 0x2c, 0x52, 0x1c, 0x20, 0x47, 0x2f, 0xa9, 0xf7, 0x00, 0x9a,
+	0x46, 0xe2, 0xd7, 0xc8, 0x55, 0xd7, 0xb1, 0x90, 0xec, 0x16, 0x3c, 0xb7, 0x7b, 0x83, 0x3d, 0x85,
+	0x9e, 0xb2, 0x5b, 0xc0, 0x27, 0x68, 0x8b, 0x71, 0x9a, 0x80, 0xb7, 0xa9, 0x59, 0x07, 0xa4, 0xf3,
+	0xb2, 0xcc, 0xfa, 0xce, 0x15, 0xe9, 0x6c, 0x23, 0x32, 0x6c, 0x3c, 0x45, 0x3b, 0xe6, 0xa2, 0x96,
+	0x55, 0x16, 0xa7, 0xe0, 0x39, 0x5a, 0x8d, 0x3c, 0x54, 0x2d, 0xd4, 0xac, 0xb3, 0x8d, 0xa8, 0xcf,
+	0xd7, 0x6d, 0xd8, 0x47, 0xae, 0x6e, 0xd5, 0x73, 0x19, 0xbe, 0x41, 0x68, 0x3d, 0x18, 0xfb, 0xc8,
+	0x89, 0x69, 0x49, 0xf5, 0x1d, 0xfd, 0x2d, 0x6b, 0xb8, 0x2a, 0x41, 0xd6, 0x1b, 0x52, 0xc0, 0xe1,
+	0x5b, 0xd4, 0xbf, 0x33, 0xe9, 0xbf, 0xf9, 0xe1, 0x2f, 0x0b, 0xbd, 0xb8, 0xca, 0x79, 0x77, 0xa0,
+	0x70, 0xb7, 0x3d, 0xfb, 0x4b, 0xa5, 0x76, 0x69, 0x7d, 0xb9, 0xa8, 0x49, 0x49, 0x9e, 0xd2, 0x2c,
+	0x21, 0xb9, 0x48, 0xfc, 0x04, 0x32, 0x3d, 0xab, 0x79, 0xd5, 0x0a, 0x26, 0xff, 0xf1, 0x01, 0x38,
+	0x6e, 0xab, 0x6f, 0xf6, 0xe6, 0xe9, 0x64, 0xf2, 0xdd, 0xde, 0x3f, 0x35, 0x92, 0x93, 0x58, 0x12,
+	0x53, 0xaa, 0x6a, 0x16, 0x90, 0xa8, 0x41, 0xfe, 0x68, 0x30, 0xf3, 0x49, 0x2c, 0xe7, 0x2d, 0x66,
+	0x3e, 0x0b, 0xe6, 0x2d, 0x66, 0xb9, 0xad, 0x4d, 0xbc, 0xfa, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x31,
+	0x9f, 0xe1, 0xeb, 0x84, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/parental_status_view.pb.go b/googleapis/ads/googleads/v0/resources/parental_status_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7e96ebca4174690e9a4b37af7369e28b9ee56f0a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/parental_status_view.pb.go
@@ -0,0 +1,89 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/parental_status_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A parental status view.
+type ParentalStatusView struct {
+	// The resource name of the parental status view.
+	// Parental Status view resource names have the form:
+	//
+	// `customers/{customer_id}/parentalStatusViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ParentalStatusView) Reset()         { *m = ParentalStatusView{} }
+func (m *ParentalStatusView) String() string { return proto.CompactTextString(m) }
+func (*ParentalStatusView) ProtoMessage()    {}
+func (*ParentalStatusView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_parental_status_view_2b19e85dde9f176b, []int{0}
+}
+func (m *ParentalStatusView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParentalStatusView.Unmarshal(m, b)
+}
+func (m *ParentalStatusView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParentalStatusView.Marshal(b, m, deterministic)
+}
+func (dst *ParentalStatusView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParentalStatusView.Merge(dst, src)
+}
+func (m *ParentalStatusView) XXX_Size() int {
+	return xxx_messageInfo_ParentalStatusView.Size(m)
+}
+func (m *ParentalStatusView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParentalStatusView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParentalStatusView proto.InternalMessageInfo
+
+func (m *ParentalStatusView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ParentalStatusView)(nil), "google.ads.googleads.v0.resources.ParentalStatusView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/parental_status_view.proto", fileDescriptor_parental_status_view_2b19e85dde9f176b)
+}
+
+var fileDescriptor_parental_status_view_2b19e85dde9f176b = []byte{
+	// 235 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0x82, 0xc4, 0xa2, 0xd4, 0xbc, 0x92, 0xc4, 0x9c,
+	0xf8, 0xe2, 0x92, 0xc4, 0x92, 0xd2, 0xe2, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc,
+	0x92, 0x7c, 0x21, 0x45, 0x88, 0x16, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x6e, 0xbd, 0x32, 0x03,
+	0x3d, 0xb8, 0x6e, 0x25, 0x4b, 0x2e, 0xa1, 0x00, 0xa8, 0x01, 0xc1, 0x60, 0xfd, 0x61, 0x99, 0xa9,
+	0xe5, 0x42, 0xca, 0x5c, 0xbc, 0x30, 0x25, 0xf1, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c,
+	0x1a, 0x9c, 0x41, 0x3c, 0x30, 0x41, 0xbf, 0xc4, 0xdc, 0x54, 0xa7, 0x3b, 0x8c, 0x5c, 0xaa, 0xc9,
+	0xf9, 0xb9, 0x7a, 0x04, 0x2d, 0x71, 0x12, 0xc7, 0xb4, 0x22, 0x00, 0xe4, 0xc0, 0x00, 0xc6, 0x28,
+	0x2f, 0xa8, 0xee, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4,
+	0x3c, 0xb0, 0xf3, 0x61, 0x1e, 0x2e, 0xc8, 0x2c, 0xc6, 0xe3, 0x7f, 0x6b, 0x38, 0x6b, 0x11, 0x13,
+	0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x45, 0x77, 0x88, 0x91, 0x8e, 0x29, 0xc5, 0x7a, 0x10, 0x26,
+	0x88, 0x15, 0x66, 0xa0, 0x17, 0x04, 0x53, 0x79, 0x0a, 0xa6, 0x26, 0xc6, 0x31, 0xa5, 0x38, 0x06,
+	0xae, 0x26, 0x26, 0xcc, 0x20, 0x06, 0xae, 0x26, 0x89, 0x0d, 0xec, 0x08, 0x63, 0x40, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x1e, 0x85, 0xdc, 0xc4, 0x83, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/payments_account.pb.go b/googleapis/ads/googleads/v0/resources/payments_account.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6f4f7eb4f1b762da1bd8216262a071b6d7ace67f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/payments_account.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/payments_account.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A Payments account, which can be used to set up billing for an Ads customer.
+type PaymentsAccount struct {
+	// The resource name of the Payments account.
+	// PaymentsAccount resource names have the form:
+	//
+	// `customers/{customer_id}/paymentsAccounts/
+	//                               {payments_profile_id}_{payments_account_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// A 16 digit ID used to identify a Payments account.
+	PaymentsAccountId *wrappers.StringValue `protobuf:"bytes,2,opt,name=payments_account_id,json=paymentsAccountId,proto3" json:"payments_account_id,omitempty"`
+	// The name of the Payments account.
+	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	// The currency code of the Payments account.
+	// A subset of the currency codes derived from the ISO 4217 standard is
+	// supported.
+	CurrencyCode *wrappers.StringValue `protobuf:"bytes,4,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// A 12 digit ID used to identify the Payments profile associated with the
+	// Payments account.
+	PaymentsProfileId *wrappers.StringValue `protobuf:"bytes,5,opt,name=payments_profile_id,json=paymentsProfileId,proto3" json:"payments_profile_id,omitempty"`
+	// A secondary Payments profile ID present in uncommon situations, e.g.
+	// when a sequential liability agreement has been arranged.
+	SecondaryPaymentsProfileId *wrappers.StringValue `protobuf:"bytes,6,opt,name=secondary_payments_profile_id,json=secondaryPaymentsProfileId,proto3" json:"secondary_payments_profile_id,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}              `json:"-"`
+	XXX_unrecognized           []byte                `json:"-"`
+	XXX_sizecache              int32                 `json:"-"`
+}
+
+func (m *PaymentsAccount) Reset()         { *m = PaymentsAccount{} }
+func (m *PaymentsAccount) String() string { return proto.CompactTextString(m) }
+func (*PaymentsAccount) ProtoMessage()    {}
+func (*PaymentsAccount) Descriptor() ([]byte, []int) {
+	return fileDescriptor_payments_account_6fba7bb9981ca18f, []int{0}
+}
+func (m *PaymentsAccount) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PaymentsAccount.Unmarshal(m, b)
+}
+func (m *PaymentsAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PaymentsAccount.Marshal(b, m, deterministic)
+}
+func (dst *PaymentsAccount) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentsAccount.Merge(dst, src)
+}
+func (m *PaymentsAccount) XXX_Size() int {
+	return xxx_messageInfo_PaymentsAccount.Size(m)
+}
+func (m *PaymentsAccount) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentsAccount.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PaymentsAccount proto.InternalMessageInfo
+
+func (m *PaymentsAccount) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *PaymentsAccount) GetPaymentsAccountId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsAccountId
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetCurrencyCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.PaymentsProfileId
+	}
+	return nil
+}
+
+func (m *PaymentsAccount) GetSecondaryPaymentsProfileId() *wrappers.StringValue {
+	if m != nil {
+		return m.SecondaryPaymentsProfileId
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*PaymentsAccount)(nil), "google.ads.googleads.v0.resources.PaymentsAccount")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/payments_account.proto", fileDescriptor_payments_account_6fba7bb9981ca18f)
+}
+
+var fileDescriptor_payments_account_6fba7bb9981ca18f = []byte{
+	// 362 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x4a, 0xc3, 0x30,
+	0x1c, 0xc6, 0xe9, 0x36, 0x07, 0xc6, 0x0d, 0xb1, 0x7a, 0x18, 0x43, 0x65, 0x53, 0x84, 0x9d, 0xd2,
+	0xa2, 0x17, 0xc1, 0x53, 0xe7, 0x61, 0x4c, 0x44, 0xca, 0x84, 0x1d, 0xa4, 0x50, 0xb2, 0x24, 0x2b,
+	0x85, 0x36, 0x09, 0x49, 0x3b, 0xd9, 0xeb, 0x78, 0x12, 0x1f, 0xc5, 0x37, 0xf0, 0x6d, 0xa4, 0x4d,
+	0x53, 0xd8, 0x10, 0x9d, 0xb7, 0x8f, 0xf0, 0x7d, 0xbf, 0xef, 0xff, 0x27, 0x7f, 0x70, 0x1b, 0x71,
+	0x1e, 0x25, 0xd4, 0x41, 0x44, 0x39, 0x5a, 0x16, 0x6a, 0xe5, 0x3a, 0x92, 0x2a, 0x9e, 0x4b, 0x4c,
+	0x95, 0x23, 0xd0, 0x3a, 0xa5, 0x2c, 0x53, 0x21, 0xc2, 0x98, 0xe7, 0x2c, 0x83, 0x42, 0xf2, 0x8c,
+	0xdb, 0x43, 0x6d, 0x87, 0x88, 0x28, 0x58, 0x27, 0xe1, 0xca, 0x85, 0x75, 0xb2, 0x7f, 0x5e, 0xc1,
+	0xcb, 0xc0, 0x22, 0x5f, 0x3a, 0xaf, 0x12, 0x09, 0x41, 0xa5, 0xd2, 0x88, 0x8b, 0xf7, 0x26, 0x38,
+	0xf4, 0x2b, 0xba, 0xa7, 0xe1, 0xf6, 0x25, 0xe8, 0x1a, 0x40, 0xc8, 0x50, 0x4a, 0x7b, 0xd6, 0xc0,
+	0x1a, 0xed, 0xcf, 0x3a, 0xe6, 0xf1, 0x09, 0xa5, 0xd4, 0x7e, 0x04, 0xc7, 0xdb, 0x53, 0x85, 0x31,
+	0xe9, 0x35, 0x06, 0xd6, 0xe8, 0xe0, 0xfa, 0xb4, 0x1a, 0x07, 0x9a, 0x5a, 0xf8, 0x9c, 0xc9, 0x98,
+	0x45, 0x73, 0x94, 0xe4, 0x74, 0x76, 0x24, 0x36, 0x0b, 0xa7, 0xc4, 0x76, 0x41, 0xab, 0x6c, 0x6a,
+	0xee, 0x10, 0x2f, 0x9d, 0xb6, 0x07, 0xba, 0x38, 0x97, 0x92, 0x32, 0xbc, 0x0e, 0x31, 0x27, 0xb4,
+	0xd7, 0xda, 0x21, 0xda, 0x31, 0x91, 0x7b, 0x4e, 0x36, 0x57, 0x10, 0x92, 0x2f, 0xe3, 0x84, 0x16,
+	0x2b, 0xec, 0xfd, 0x67, 0x05, 0x5f, 0xe7, 0xa6, 0xc4, 0x0e, 0xc1, 0x99, 0xa2, 0x98, 0x33, 0x82,
+	0xe4, 0x3a, 0xfc, 0x89, 0xdb, 0xde, 0x81, 0xdb, 0xaf, 0x11, 0xfe, 0x76, 0xc1, 0xf8, 0xcb, 0x02,
+	0x57, 0x98, 0xa7, 0xf0, 0xcf, 0x4f, 0x1f, 0x9f, 0x6c, 0xfd, 0xa8, 0x5f, 0x54, 0xf9, 0xd6, 0xcb,
+	0x43, 0x15, 0x8d, 0x78, 0x82, 0x58, 0x04, 0xb9, 0x8c, 0x9c, 0x88, 0xb2, 0x72, 0x10, 0x73, 0x79,
+	0x22, 0x56, 0xbf, 0x1c, 0xe2, 0x5d, 0xad, 0xde, 0x1a, 0xcd, 0x89, 0xe7, 0x7d, 0x34, 0x86, 0x13,
+	0x8d, 0xf4, 0x88, 0x82, 0x5a, 0x16, 0x6a, 0xee, 0xc2, 0x99, 0x71, 0x7e, 0x1a, 0x4f, 0xe0, 0x11,
+	0x15, 0xd4, 0x9e, 0x60, 0xee, 0x06, 0xb5, 0x67, 0xd1, 0x2e, 0x87, 0xb8, 0xf9, 0x0e, 0x00, 0x00,
+	0xff, 0xff, 0x08, 0xb0, 0x54, 0xe9, 0x0c, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/product_group_view.pb.go b/googleapis/ads/googleads/v0/resources/product_group_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f8f51fb47595ffefa79db6a04cc3d76f6dd63cd4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/product_group_view.pb.go
@@ -0,0 +1,89 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/product_group_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A product group view.
+type ProductGroupView struct {
+	// The resource name of the product group view.
+	// Product group view resource names have the form:
+	//
+	// `customers/{customer_id}/productGroupViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProductGroupView) Reset()         { *m = ProductGroupView{} }
+func (m *ProductGroupView) String() string { return proto.CompactTextString(m) }
+func (*ProductGroupView) ProtoMessage()    {}
+func (*ProductGroupView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_product_group_view_bd435ece1bc80168, []int{0}
+}
+func (m *ProductGroupView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProductGroupView.Unmarshal(m, b)
+}
+func (m *ProductGroupView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProductGroupView.Marshal(b, m, deterministic)
+}
+func (dst *ProductGroupView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProductGroupView.Merge(dst, src)
+}
+func (m *ProductGroupView) XXX_Size() int {
+	return xxx_messageInfo_ProductGroupView.Size(m)
+}
+func (m *ProductGroupView) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProductGroupView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProductGroupView proto.InternalMessageInfo
+
+func (m *ProductGroupView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ProductGroupView)(nil), "google.ads.googleads.v0.resources.ProductGroupView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/product_group_view.proto", fileDescriptor_product_group_view_bd435ece1bc80168)
+}
+
+var fileDescriptor_product_group_view_bd435ece1bc80168 = []byte{
+	// 232 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0x82, 0xa2, 0xfc, 0x94, 0xd2, 0xe4, 0x92, 0xf8,
+	0xf4, 0xa2, 0xfc, 0xd2, 0x82, 0xf8, 0xb2, 0xcc, 0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c,
+	0x21, 0x45, 0x88, 0x06, 0xbd, 0xc4, 0x94, 0x62, 0x3d, 0xb8, 0x5e, 0xbd, 0x32, 0x03, 0x3d, 0xb8,
+	0x5e, 0x25, 0x73, 0x2e, 0x81, 0x00, 0x88, 0x76, 0x77, 0x90, 0xee, 0xb0, 0xcc, 0xd4, 0x72, 0x21,
+	0x65, 0x2e, 0x5e, 0x98, 0x82, 0xf8, 0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce,
+	0x20, 0x1e, 0x98, 0xa0, 0x5f, 0x62, 0x6e, 0xaa, 0xd3, 0x2d, 0x46, 0x2e, 0xd5, 0xe4, 0xfc, 0x5c,
+	0x3d, 0x82, 0x56, 0x38, 0x89, 0xa2, 0x5b, 0x10, 0x00, 0x72, 0x5c, 0x00, 0x63, 0x94, 0x17, 0x54,
+	0x6f, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0xd8,
+	0xe9, 0x30, 0xaf, 0x16, 0x64, 0x16, 0xe3, 0xf1, 0xb9, 0x35, 0x9c, 0xb5, 0x88, 0x89, 0xd9, 0xdd,
+	0xd1, 0x71, 0x15, 0x93, 0xa2, 0x3b, 0xc4, 0x48, 0xc7, 0x94, 0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a,
+	0x33, 0xd0, 0x0b, 0x82, 0xa9, 0x3c, 0x05, 0x53, 0x13, 0xe3, 0x98, 0x52, 0x1c, 0x03, 0x57, 0x13,
+	0x13, 0x66, 0x10, 0x03, 0x57, 0x93, 0xc4, 0x06, 0x76, 0x84, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff,
+	0x75, 0xea, 0x51, 0x91, 0x7d, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/recommendation.pb.go b/googleapis/ads/googleads/v0/resources/recommendation.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f02a7e192678c0dd01813c3c0674fddf4d5cf92d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/recommendation.pb.go
@@ -0,0 +1,1267 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/recommendation.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A recommendation.
+type Recommendation struct {
+	// The resource name of the recommendation.
+	//
+	// `customers/{customer_id}/recommendations/{recommendation_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The type of recommendation.
+	Type enums.RecommendationTypeEnum_RecommendationType `protobuf:"varint,2,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.RecommendationTypeEnum_RecommendationType" json:"type,omitempty"`
+	// The impact on account performance as a result of applying the
+	// recommendation.
+	Impact *Recommendation_RecommendationImpact `protobuf:"bytes,3,opt,name=impact,proto3" json:"impact,omitempty"`
+	// The budget targeted by this recommendation. This will be set only when
+	// the recommendation affects a single campaign budget.
+	//
+	// This field will be set for the following recommendation types:
+	// CAMPAIGN_BUDGET
+	CampaignBudget *wrappers.StringValue `protobuf:"bytes,5,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
+	// The campaign targeted by this recommendation. This will be set only when
+	// the recommendation affects a single campaign.
+	//
+	// This field will be set for the following recommendation types:
+	// ENHANCED_CPC_OPT_IN, KEYWORD, MAXIMIZE_CLICKS_OPT_IN,
+	// MAXIMIZE_CONVERSIONS_OPT_IN, OPTIMIZE_AD_ROTATION, SEARCH_PARTNERS_OPT_IN,
+	// TARGET_CPA_OPT_IN, TEXT_AD
+	Campaign *wrappers.StringValue `protobuf:"bytes,6,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The ad group targeted by this recommendation. This will be set only when
+	// the recommendation affects a single ad group.
+	//
+	// This field will be set for the following recommendation types:
+	// KEYWORD, OPTIMIZE_AD_ROTATION, TEXT_AD
+	AdGroup *wrappers.StringValue `protobuf:"bytes,7,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Whether the recommendation is dismissed or not.
+	Dismissed *wrappers.BoolValue `protobuf:"bytes,13,opt,name=dismissed,proto3" json:"dismissed,omitempty"`
+	// The details of recommendation.
+	//
+	// Types that are valid to be assigned to Recommendation:
+	//	*Recommendation_CampaignBudgetRecommendation_
+	//	*Recommendation_KeywordRecommendation_
+	//	*Recommendation_TextAdRecommendation_
+	//	*Recommendation_TargetCpaOptInRecommendation_
+	//	*Recommendation_MaximizeConversionsOptInRecommendation_
+	//	*Recommendation_EnhancedCpcOptInRecommendation_
+	//	*Recommendation_SearchPartnersOptInRecommendation_
+	//	*Recommendation_MaximizeClicksOptInRecommendation_
+	//	*Recommendation_OptimizeAdRotationRecommendation_
+	Recommendation       isRecommendation_Recommendation `protobuf_oneof:"recommendation"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *Recommendation) Reset()         { *m = Recommendation{} }
+func (m *Recommendation) String() string { return proto.CompactTextString(m) }
+func (*Recommendation) ProtoMessage()    {}
+func (*Recommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0}
+}
+func (m *Recommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation.Unmarshal(m, b)
+}
+func (m *Recommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation.Merge(dst, src)
+}
+func (m *Recommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation.Size(m)
+}
+func (m *Recommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation proto.InternalMessageInfo
+
+func (m *Recommendation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Recommendation) GetType() enums.RecommendationTypeEnum_RecommendationType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.RecommendationTypeEnum_UNSPECIFIED
+}
+
+func (m *Recommendation) GetImpact() *Recommendation_RecommendationImpact {
+	if m != nil {
+		return m.Impact
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCampaignBudget() *wrappers.StringValue {
+	if m != nil {
+		return m.CampaignBudget
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *Recommendation) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *Recommendation) GetDismissed() *wrappers.BoolValue {
+	if m != nil {
+		return m.Dismissed
+	}
+	return nil
+}
+
+type isRecommendation_Recommendation interface {
+	isRecommendation_Recommendation()
+}
+
+type Recommendation_CampaignBudgetRecommendation_ struct {
+	CampaignBudgetRecommendation *Recommendation_CampaignBudgetRecommendation `protobuf:"bytes,4,opt,name=campaign_budget_recommendation,json=campaignBudgetRecommendation,proto3,oneof"`
+}
+
+type Recommendation_KeywordRecommendation_ struct {
+	KeywordRecommendation *Recommendation_KeywordRecommendation `protobuf:"bytes,8,opt,name=keyword_recommendation,json=keywordRecommendation,proto3,oneof"`
+}
+
+type Recommendation_TextAdRecommendation_ struct {
+	TextAdRecommendation *Recommendation_TextAdRecommendation `protobuf:"bytes,9,opt,name=text_ad_recommendation,json=textAdRecommendation,proto3,oneof"`
+}
+
+type Recommendation_TargetCpaOptInRecommendation_ struct {
+	TargetCpaOptInRecommendation *Recommendation_TargetCpaOptInRecommendation `protobuf:"bytes,10,opt,name=target_cpa_opt_in_recommendation,json=targetCpaOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_MaximizeConversionsOptInRecommendation_ struct {
+	MaximizeConversionsOptInRecommendation *Recommendation_MaximizeConversionsOptInRecommendation `protobuf:"bytes,11,opt,name=maximize_conversions_opt_in_recommendation,json=maximizeConversionsOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_EnhancedCpcOptInRecommendation_ struct {
+	EnhancedCpcOptInRecommendation *Recommendation_EnhancedCpcOptInRecommendation `protobuf:"bytes,12,opt,name=enhanced_cpc_opt_in_recommendation,json=enhancedCpcOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_SearchPartnersOptInRecommendation_ struct {
+	SearchPartnersOptInRecommendation *Recommendation_SearchPartnersOptInRecommendation `protobuf:"bytes,14,opt,name=search_partners_opt_in_recommendation,json=searchPartnersOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_MaximizeClicksOptInRecommendation_ struct {
+	MaximizeClicksOptInRecommendation *Recommendation_MaximizeClicksOptInRecommendation `protobuf:"bytes,15,opt,name=maximize_clicks_opt_in_recommendation,json=maximizeClicksOptInRecommendation,proto3,oneof"`
+}
+
+type Recommendation_OptimizeAdRotationRecommendation_ struct {
+	OptimizeAdRotationRecommendation *Recommendation_OptimizeAdRotationRecommendation `protobuf:"bytes,16,opt,name=optimize_ad_rotation_recommendation,json=optimizeAdRotationRecommendation,proto3,oneof"`
+}
+
+func (*Recommendation_CampaignBudgetRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_KeywordRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_TextAdRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_TargetCpaOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_MaximizeConversionsOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_EnhancedCpcOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_SearchPartnersOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_MaximizeClicksOptInRecommendation_) isRecommendation_Recommendation() {}
+
+func (*Recommendation_OptimizeAdRotationRecommendation_) isRecommendation_Recommendation() {}
+
+func (m *Recommendation) GetRecommendation() isRecommendation_Recommendation {
+	if m != nil {
+		return m.Recommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetCampaignBudgetRecommendation() *Recommendation_CampaignBudgetRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_CampaignBudgetRecommendation_); ok {
+		return x.CampaignBudgetRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetKeywordRecommendation() *Recommendation_KeywordRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_KeywordRecommendation_); ok {
+		return x.KeywordRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetTextAdRecommendation() *Recommendation_TextAdRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_TextAdRecommendation_); ok {
+		return x.TextAdRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetTargetCpaOptInRecommendation() *Recommendation_TargetCpaOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_TargetCpaOptInRecommendation_); ok {
+		return x.TargetCpaOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetMaximizeConversionsOptInRecommendation() *Recommendation_MaximizeConversionsOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_MaximizeConversionsOptInRecommendation_); ok {
+		return x.MaximizeConversionsOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetEnhancedCpcOptInRecommendation() *Recommendation_EnhancedCpcOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_EnhancedCpcOptInRecommendation_); ok {
+		return x.EnhancedCpcOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetSearchPartnersOptInRecommendation() *Recommendation_SearchPartnersOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_SearchPartnersOptInRecommendation_); ok {
+		return x.SearchPartnersOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetMaximizeClicksOptInRecommendation() *Recommendation_MaximizeClicksOptInRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_MaximizeClicksOptInRecommendation_); ok {
+		return x.MaximizeClicksOptInRecommendation
+	}
+	return nil
+}
+
+func (m *Recommendation) GetOptimizeAdRotationRecommendation() *Recommendation_OptimizeAdRotationRecommendation {
+	if x, ok := m.GetRecommendation().(*Recommendation_OptimizeAdRotationRecommendation_); ok {
+		return x.OptimizeAdRotationRecommendation
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Recommendation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Recommendation_OneofMarshaler, _Recommendation_OneofUnmarshaler, _Recommendation_OneofSizer, []interface{}{
+		(*Recommendation_CampaignBudgetRecommendation_)(nil),
+		(*Recommendation_KeywordRecommendation_)(nil),
+		(*Recommendation_TextAdRecommendation_)(nil),
+		(*Recommendation_TargetCpaOptInRecommendation_)(nil),
+		(*Recommendation_MaximizeConversionsOptInRecommendation_)(nil),
+		(*Recommendation_EnhancedCpcOptInRecommendation_)(nil),
+		(*Recommendation_SearchPartnersOptInRecommendation_)(nil),
+		(*Recommendation_MaximizeClicksOptInRecommendation_)(nil),
+		(*Recommendation_OptimizeAdRotationRecommendation_)(nil),
+	}
+}
+
+func _Recommendation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Recommendation)
+	// recommendation
+	switch x := m.Recommendation.(type) {
+	case *Recommendation_CampaignBudgetRecommendation_:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignBudgetRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_KeywordRecommendation_:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KeywordRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_TextAdRecommendation_:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TextAdRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_TargetCpaOptInRecommendation_:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetCpaOptInRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_MaximizeConversionsOptInRecommendation_:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MaximizeConversionsOptInRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_EnhancedCpcOptInRecommendation_:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.EnhancedCpcOptInRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_SearchPartnersOptInRecommendation_:
+		b.EncodeVarint(14<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SearchPartnersOptInRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_MaximizeClicksOptInRecommendation_:
+		b.EncodeVarint(15<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MaximizeClicksOptInRecommendation); err != nil {
+			return err
+		}
+	case *Recommendation_OptimizeAdRotationRecommendation_:
+		b.EncodeVarint(16<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.OptimizeAdRotationRecommendation); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Recommendation.Recommendation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Recommendation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Recommendation)
+	switch tag {
+	case 4: // recommendation.campaign_budget_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_CampaignBudgetRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_CampaignBudgetRecommendation_{msg}
+		return true, err
+	case 8: // recommendation.keyword_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_KeywordRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_KeywordRecommendation_{msg}
+		return true, err
+	case 9: // recommendation.text_ad_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_TextAdRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_TextAdRecommendation_{msg}
+		return true, err
+	case 10: // recommendation.target_cpa_opt_in_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_TargetCpaOptInRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_TargetCpaOptInRecommendation_{msg}
+		return true, err
+	case 11: // recommendation.maximize_conversions_opt_in_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_MaximizeConversionsOptInRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_MaximizeConversionsOptInRecommendation_{msg}
+		return true, err
+	case 12: // recommendation.enhanced_cpc_opt_in_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_EnhancedCpcOptInRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_EnhancedCpcOptInRecommendation_{msg}
+		return true, err
+	case 14: // recommendation.search_partners_opt_in_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_SearchPartnersOptInRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_SearchPartnersOptInRecommendation_{msg}
+		return true, err
+	case 15: // recommendation.maximize_clicks_opt_in_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_MaximizeClicksOptInRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_MaximizeClicksOptInRecommendation_{msg}
+		return true, err
+	case 16: // recommendation.optimize_ad_rotation_recommendation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Recommendation_OptimizeAdRotationRecommendation)
+		err := b.DecodeMessage(msg)
+		m.Recommendation = &Recommendation_OptimizeAdRotationRecommendation_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Recommendation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Recommendation)
+	// recommendation
+	switch x := m.Recommendation.(type) {
+	case *Recommendation_CampaignBudgetRecommendation_:
+		s := proto.Size(x.CampaignBudgetRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_KeywordRecommendation_:
+		s := proto.Size(x.KeywordRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_TextAdRecommendation_:
+		s := proto.Size(x.TextAdRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_TargetCpaOptInRecommendation_:
+		s := proto.Size(x.TargetCpaOptInRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_MaximizeConversionsOptInRecommendation_:
+		s := proto.Size(x.MaximizeConversionsOptInRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_EnhancedCpcOptInRecommendation_:
+		s := proto.Size(x.EnhancedCpcOptInRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_SearchPartnersOptInRecommendation_:
+		s := proto.Size(x.SearchPartnersOptInRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_MaximizeClicksOptInRecommendation_:
+		s := proto.Size(x.MaximizeClicksOptInRecommendation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Recommendation_OptimizeAdRotationRecommendation_:
+		s := proto.Size(x.OptimizeAdRotationRecommendation)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// The impact of making the change as described in the recommendation.
+// Some types of recommendations may not have impact information.
+type Recommendation_RecommendationImpact struct {
+	// Base metrics at the time the recommendation was generated.
+	BaseMetrics *Recommendation_RecommendationMetrics `protobuf:"bytes,1,opt,name=base_metrics,json=baseMetrics,proto3" json:"base_metrics,omitempty"`
+	// Estimated metrics if the recommendation is applied.
+	PotentialMetrics     *Recommendation_RecommendationMetrics `protobuf:"bytes,2,opt,name=potential_metrics,json=potentialMetrics,proto3" json:"potential_metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *Recommendation_RecommendationImpact) Reset()         { *m = Recommendation_RecommendationImpact{} }
+func (m *Recommendation_RecommendationImpact) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_RecommendationImpact) ProtoMessage()    {}
+func (*Recommendation_RecommendationImpact) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 0}
+}
+func (m *Recommendation_RecommendationImpact) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_RecommendationImpact.Unmarshal(m, b)
+}
+func (m *Recommendation_RecommendationImpact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_RecommendationImpact.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_RecommendationImpact) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_RecommendationImpact.Merge(dst, src)
+}
+func (m *Recommendation_RecommendationImpact) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_RecommendationImpact.Size(m)
+}
+func (m *Recommendation_RecommendationImpact) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_RecommendationImpact.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_RecommendationImpact proto.InternalMessageInfo
+
+func (m *Recommendation_RecommendationImpact) GetBaseMetrics() *Recommendation_RecommendationMetrics {
+	if m != nil {
+		return m.BaseMetrics
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationImpact) GetPotentialMetrics() *Recommendation_RecommendationMetrics {
+	if m != nil {
+		return m.PotentialMetrics
+	}
+	return nil
+}
+
+// Weekly account performance metrics. For some recommendation types, these
+// are averaged over the past 90-day period and hence can be fractional.
+type Recommendation_RecommendationMetrics struct {
+	// Number of ad impressions.
+	Impressions *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Number of ad clicks.
+	Clicks *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// Cost (in micros) for advertising, in the local currency for the account.
+	CostMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	// Number of conversions.
+	Conversions *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=conversions,proto3" json:"conversions,omitempty"`
+	// Number of video views for a video ad campaign.
+	VideoViews           *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=video_views,json=videoViews,proto3" json:"video_views,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Recommendation_RecommendationMetrics) Reset()         { *m = Recommendation_RecommendationMetrics{} }
+func (m *Recommendation_RecommendationMetrics) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_RecommendationMetrics) ProtoMessage()    {}
+func (*Recommendation_RecommendationMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 1}
+}
+func (m *Recommendation_RecommendationMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_RecommendationMetrics.Unmarshal(m, b)
+}
+func (m *Recommendation_RecommendationMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_RecommendationMetrics.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_RecommendationMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_RecommendationMetrics.Merge(dst, src)
+}
+func (m *Recommendation_RecommendationMetrics) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_RecommendationMetrics.Size(m)
+}
+func (m *Recommendation_RecommendationMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_RecommendationMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_RecommendationMetrics proto.InternalMessageInfo
+
+func (m *Recommendation_RecommendationMetrics) GetImpressions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetClicks() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetConversions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Conversions
+	}
+	return nil
+}
+
+func (m *Recommendation_RecommendationMetrics) GetVideoViews() *wrappers.DoubleValue {
+	if m != nil {
+		return m.VideoViews
+	}
+	return nil
+}
+
+// The budget recommendation for budget constrained campaigns.
+type Recommendation_CampaignBudgetRecommendation struct {
+	// The current budget amount in micros.
+	CurrentBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=current_budget_amount_micros,json=currentBudgetAmountMicros,proto3" json:"current_budget_amount_micros,omitempty"`
+	// The recommended budget amount in micros.
+	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
+	// The budget amounts and associated impact estimates for some values of
+	// possible budget amounts.
+	BudgetOptions        []*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption `protobuf:"bytes,3,rep,name=budget_options,json=budgetOptions,proto3" json:"budget_options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                                          `json:"-"`
+	XXX_unrecognized     []byte                                                                            `json:"-"`
+	XXX_sizecache        int32                                                                             `json:"-"`
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation) Reset() {
+	*m = Recommendation_CampaignBudgetRecommendation{}
+}
+func (m *Recommendation_CampaignBudgetRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_CampaignBudgetRecommendation) ProtoMessage() {}
+func (*Recommendation_CampaignBudgetRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 2}
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_CampaignBudgetRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Size(m)
+}
+func (m *Recommendation_CampaignBudgetRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_CampaignBudgetRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_CampaignBudgetRecommendation) GetCurrentBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CurrentBudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation) GetBudgetOptions() []*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption {
+	if m != nil {
+		return m.BudgetOptions
+	}
+	return nil
+}
+
+// The impact estimates for a given budget amount.
+type Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption struct {
+	// The budget amount for this option.
+	BudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=budget_amount_micros,json=budgetAmountMicros,proto3" json:"budget_amount_micros,omitempty"`
+	// The impact estimate if budget is changed to amount specified in this
+	// option.
+	Impact               *Recommendation_RecommendationImpact `protobuf:"bytes,2,opt,name=impact,proto3" json:"impact,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) Reset() {
+	*m = Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption{}
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) ProtoMessage() {
+}
+func (*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 2, 0}
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Unmarshal(m, b)
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Merge(dst, src)
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Size(m)
+}
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption proto.InternalMessageInfo
+
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) GetBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.BudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) GetImpact() *Recommendation_RecommendationImpact {
+	if m != nil {
+		return m.Impact
+	}
+	return nil
+}
+
+// The keyword recommendation.
+type Recommendation_KeywordRecommendation struct {
+	// The recommended keyword.
+	Keyword *common.KeywordInfo `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"`
+	// The recommended CPC (cost-per-click) bid.
+	RecommendedCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_cpc_bid_micros,json=recommendedCpcBidMicros,proto3" json:"recommended_cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{}             `json:"-"`
+	XXX_unrecognized        []byte               `json:"-"`
+	XXX_sizecache           int32                `json:"-"`
+}
+
+func (m *Recommendation_KeywordRecommendation) Reset()         { *m = Recommendation_KeywordRecommendation{} }
+func (m *Recommendation_KeywordRecommendation) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_KeywordRecommendation) ProtoMessage()    {}
+func (*Recommendation_KeywordRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 3}
+}
+func (m *Recommendation_KeywordRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_KeywordRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_KeywordRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_KeywordRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_KeywordRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_KeywordRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_KeywordRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_KeywordRecommendation.Size(m)
+}
+func (m *Recommendation_KeywordRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_KeywordRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_KeywordRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_KeywordRecommendation) GetKeyword() *common.KeywordInfo {
+	if m != nil {
+		return m.Keyword
+	}
+	return nil
+}
+
+func (m *Recommendation_KeywordRecommendation) GetRecommendedCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedCpcBidMicros
+	}
+	return nil
+}
+
+// The text ad recommendation.
+type Recommendation_TextAdRecommendation struct {
+	// Recommended ad.
+	Ad *Ad `protobuf:"bytes,1,opt,name=ad,proto3" json:"ad,omitempty"`
+	// Creation date of the recommended ad.
+	// YYYY-MM-DD format, e.g., 2018-04-17.
+	CreationDate *wrappers.StringValue `protobuf:"bytes,2,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"`
+	// Date, if present, is the earliest when the recommendation will be auto
+	// applied.
+	// YYYY-MM-DD format, e.g., 2018-04-17.
+	AutoApplyDate        *wrappers.StringValue `protobuf:"bytes,3,opt,name=auto_apply_date,json=autoApplyDate,proto3" json:"auto_apply_date,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Recommendation_TextAdRecommendation) Reset()         { *m = Recommendation_TextAdRecommendation{} }
+func (m *Recommendation_TextAdRecommendation) String() string { return proto.CompactTextString(m) }
+func (*Recommendation_TextAdRecommendation) ProtoMessage()    {}
+func (*Recommendation_TextAdRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 4}
+}
+func (m *Recommendation_TextAdRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_TextAdRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_TextAdRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_TextAdRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_TextAdRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_TextAdRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_TextAdRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_TextAdRecommendation.Size(m)
+}
+func (m *Recommendation_TextAdRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_TextAdRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_TextAdRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_TextAdRecommendation) GetAd() *Ad {
+	if m != nil {
+		return m.Ad
+	}
+	return nil
+}
+
+func (m *Recommendation_TextAdRecommendation) GetCreationDate() *wrappers.StringValue {
+	if m != nil {
+		return m.CreationDate
+	}
+	return nil
+}
+
+func (m *Recommendation_TextAdRecommendation) GetAutoApplyDate() *wrappers.StringValue {
+	if m != nil {
+		return m.AutoApplyDate
+	}
+	return nil
+}
+
+// The Target CPA opt-in recommendation.
+type Recommendation_TargetCpaOptInRecommendation struct {
+	// The available goals and corresponding options for Target CPA strategy.
+	Options []*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption `protobuf:"bytes,1,rep,name=options,proto3" json:"options,omitempty"`
+	// The recommended average CPA target. See required budget amount and impact
+	// of using this recommendation in options list.
+	RecommendedTargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_target_cpa_micros,json=recommendedTargetCpaMicros,proto3" json:"recommended_target_cpa_micros,omitempty"`
+	XXX_NoUnkeyedLiteral       struct{}             `json:"-"`
+	XXX_unrecognized           []byte               `json:"-"`
+	XXX_sizecache              int32                `json:"-"`
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation) Reset() {
+	*m = Recommendation_TargetCpaOptInRecommendation{}
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_TargetCpaOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_TargetCpaOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 5}
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_TargetCpaOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Size(m)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_TargetCpaOptInRecommendation) GetOptions() []*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation) GetRecommendedTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedTargetCpaMicros
+	}
+	return nil
+}
+
+// The Target CPA opt-in option with impact estimate.
+type Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption struct {
+	// The goal achieved by this option.
+	Goal enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal `protobuf:"varint,1,opt,name=goal,proto3,enum=google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal" json:"goal,omitempty"`
+	// Average CPA target.
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// The minimum campaign budget, in local currency for the account,
+	// required to achieve the target CPA.
+	// Amount is specified in micros, where one million is equivalent to one
+	// currency unit.
+	RequiredCampaignBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=required_campaign_budget_amount_micros,json=requiredCampaignBudgetAmountMicros,proto3" json:"required_campaign_budget_amount_micros,omitempty"`
+	// The impact estimate if this option is selected.
+	Impact               *Recommendation_RecommendationImpact `protobuf:"bytes,4,opt,name=impact,proto3" json:"impact,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) Reset() {
+	*m = Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption{}
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) ProtoMessage() {
+}
+func (*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 5, 0}
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Unmarshal(m, b)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Merge(dst, src)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Size(m)
+}
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption proto.InternalMessageInfo
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetGoal() enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal {
+	if m != nil {
+		return m.Goal
+	}
+	return enums.TargetCpaOptInRecommendationGoalEnum_UNSPECIFIED
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetRequiredCampaignBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RequiredCampaignBudgetAmountMicros
+	}
+	return nil
+}
+
+func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetImpact() *Recommendation_RecommendationImpact {
+	if m != nil {
+		return m.Impact
+	}
+	return nil
+}
+
+// The Maximize Conversions Opt-In recommendation.
+type Recommendation_MaximizeConversionsOptInRecommendation struct {
+	// The recommended new budget amount.
+	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
+	XXX_unrecognized              []byte               `json:"-"`
+	XXX_sizecache                 int32                `json:"-"`
+}
+
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) Reset() {
+	*m = Recommendation_MaximizeConversionsOptInRecommendation{}
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_MaximizeConversionsOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_MaximizeConversionsOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 6}
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Size(m)
+}
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_MaximizeConversionsOptInRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetAmountMicros
+	}
+	return nil
+}
+
+// The Enhanced Cost-Per-Click Opt-In recommendation.
+type Recommendation_EnhancedCpcOptInRecommendation struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Recommendation_EnhancedCpcOptInRecommendation) Reset() {
+	*m = Recommendation_EnhancedCpcOptInRecommendation{}
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_EnhancedCpcOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_EnhancedCpcOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 7}
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_EnhancedCpcOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Size(m)
+}
+func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation proto.InternalMessageInfo
+
+// The Search Partners Opt-In recommendation.
+type Recommendation_SearchPartnersOptInRecommendation struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Recommendation_SearchPartnersOptInRecommendation) Reset() {
+	*m = Recommendation_SearchPartnersOptInRecommendation{}
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_SearchPartnersOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_SearchPartnersOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 8}
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_SearchPartnersOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Size(m)
+}
+func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation proto.InternalMessageInfo
+
+// The Maximize Clicks opt-in recommendation.
+type Recommendation_MaximizeClicksOptInRecommendation struct {
+	// The recommended new budget amount.
+	// Only set if the current budget is too high.
+	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
+	XXX_unrecognized              []byte               `json:"-"`
+	XXX_sizecache                 int32                `json:"-"`
+}
+
+func (m *Recommendation_MaximizeClicksOptInRecommendation) Reset() {
+	*m = Recommendation_MaximizeClicksOptInRecommendation{}
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_MaximizeClicksOptInRecommendation) ProtoMessage() {}
+func (*Recommendation_MaximizeClicksOptInRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 9}
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_MaximizeClicksOptInRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Size(m)
+}
+func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation proto.InternalMessageInfo
+
+func (m *Recommendation_MaximizeClicksOptInRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.RecommendedBudgetAmountMicros
+	}
+	return nil
+}
+
+// The Optimize Ad Rotation recommendation.
+type Recommendation_OptimizeAdRotationRecommendation struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Recommendation_OptimizeAdRotationRecommendation) Reset() {
+	*m = Recommendation_OptimizeAdRotationRecommendation{}
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*Recommendation_OptimizeAdRotationRecommendation) ProtoMessage() {}
+func (*Recommendation_OptimizeAdRotationRecommendation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_eee397a9522b69a5, []int{0, 10}
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Unmarshal(m, b)
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Marshal(b, m, deterministic)
+}
+func (dst *Recommendation_OptimizeAdRotationRecommendation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Merge(dst, src)
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Size() int {
+	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Size(m)
+}
+func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_DiscardUnknown() {
+	xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*Recommendation)(nil), "google.ads.googleads.v0.resources.Recommendation")
+	proto.RegisterType((*Recommendation_RecommendationImpact)(nil), "google.ads.googleads.v0.resources.Recommendation.RecommendationImpact")
+	proto.RegisterType((*Recommendation_RecommendationMetrics)(nil), "google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics")
+	proto.RegisterType((*Recommendation_CampaignBudgetRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation")
+	proto.RegisterType((*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption)(nil), "google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation.CampaignBudgetRecommendationOption")
+	proto.RegisterType((*Recommendation_KeywordRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.KeywordRecommendation")
+	proto.RegisterType((*Recommendation_TextAdRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.TextAdRecommendation")
+	proto.RegisterType((*Recommendation_TargetCpaOptInRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation")
+	proto.RegisterType((*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption)(nil), "google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation.TargetCpaOptInRecommendationOption")
+	proto.RegisterType((*Recommendation_MaximizeConversionsOptInRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.MaximizeConversionsOptInRecommendation")
+	proto.RegisterType((*Recommendation_EnhancedCpcOptInRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.EnhancedCpcOptInRecommendation")
+	proto.RegisterType((*Recommendation_SearchPartnersOptInRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.SearchPartnersOptInRecommendation")
+	proto.RegisterType((*Recommendation_MaximizeClicksOptInRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.MaximizeClicksOptInRecommendation")
+	proto.RegisterType((*Recommendation_OptimizeAdRotationRecommendation)(nil), "google.ads.googleads.v0.resources.Recommendation.OptimizeAdRotationRecommendation")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/recommendation.proto", fileDescriptor_recommendation_eee397a9522b69a5)
+}
+
+var fileDescriptor_recommendation_eee397a9522b69a5 = []byte{
+	// 1315 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0xdc, 0xc4,
+	0x1b, 0xfe, 0xcd, 0x26, 0x4d, 0xda, 0x77, 0x93, 0x4d, 0x3b, 0xbf, 0xb4, 0x2c, 0x26, 0x44, 0x9b,
+	0x94, 0x56, 0x51, 0x11, 0xbb, 0x51, 0x28, 0x6d, 0x25, 0x3e, 0xa4, 0x4d, 0x1a, 0xd2, 0x80, 0xd2,
+	0x46, 0x6e, 0x15, 0x55, 0x68, 0x55, 0x6b, 0xd6, 0x9e, 0x6e, 0x4d, 0xd7, 0x1e, 0x77, 0x3c, 0x4e,
+	0x13, 0x0e, 0x88, 0x23, 0x08, 0x89, 0x23, 0xea, 0x89, 0x03, 0x1c, 0x90, 0xf8, 0x03, 0x50, 0xff,
+	0x03, 0xa4, 0x5e, 0x2b, 0x21, 0xfe, 0x14, 0x8e, 0xc8, 0xe3, 0xb1, 0xb3, 0x1f, 0xfe, 0xd8, 0x5d,
+	0x5a, 0x6e, 0xb6, 0xe7, 0x79, 0x9e, 0xf7, 0x99, 0xcf, 0xf7, 0x1d, 0xc3, 0xb5, 0x0e, 0x63, 0x9d,
+	0x2e, 0x6d, 0x10, 0xcb, 0x6f, 0x44, 0x8f, 0xe1, 0xd3, 0xe1, 0x7a, 0x83, 0x53, 0x9f, 0x05, 0xdc,
+	0xa4, 0x7e, 0x83, 0x53, 0x93, 0x39, 0x0e, 0x75, 0x2d, 0x22, 0x6c, 0xe6, 0xd6, 0x3d, 0xce, 0x04,
+	0xc3, 0x2b, 0x11, 0xb8, 0x4e, 0x2c, 0xbf, 0x9e, 0xf0, 0xea, 0x87, 0xeb, 0xf5, 0x84, 0xa7, 0xbd,
+	0x97, 0x25, 0x1d, 0xca, 0x31, 0xb7, 0x61, 0x72, 0x5b, 0x50, 0x6e, 0x93, 0x48, 0x51, 0xbb, 0x9e,
+	0x05, 0xa7, 0x6e, 0xe0, 0x0c, 0xba, 0x30, 0xc4, 0xb1, 0x47, 0x15, 0x71, 0x37, 0x9f, 0x28, 0x08,
+	0xef, 0x50, 0x61, 0x98, 0x1e, 0x31, 0x98, 0x27, 0x0c, 0xdb, 0x35, 0x06, 0xa4, 0x3a, 0x8c, 0x74,
+	0x95, 0xd4, 0x95, 0xe2, 0xd1, 0x20, 0x96, 0xc2, 0x2e, 0x2b, 0xac, 0x7c, 0x6b, 0x07, 0x0f, 0x1b,
+	0x4f, 0x39, 0xf1, 0x3c, 0xca, 0xfd, 0xa8, 0x7d, 0xf5, 0xdb, 0x77, 0xa0, 0xa2, 0xf7, 0x45, 0xc2,
+	0x17, 0x61, 0x3e, 0x16, 0x32, 0x5c, 0xe2, 0xd0, 0x2a, 0xaa, 0xa1, 0xb5, 0x33, 0xfa, 0x5c, 0xfc,
+	0xf1, 0x36, 0x71, 0x28, 0x6e, 0xc1, 0x74, 0xd8, 0xb9, 0x6a, 0xa9, 0x86, 0xd6, 0x2a, 0x1b, 0xb7,
+	0xea, 0x59, 0x03, 0x2d, 0x7b, 0x57, 0xef, 0x8f, 0x70, 0xef, 0xd8, 0xa3, 0xdb, 0x6e, 0xe0, 0xa4,
+	0x7c, 0xd6, 0xa5, 0x2a, 0x7e, 0x00, 0x33, 0xb6, 0xe3, 0x11, 0x53, 0x54, 0xa7, 0x6a, 0x68, 0xad,
+	0xbc, 0xf1, 0x69, 0xbd, 0x70, 0x22, 0x07, 0xc4, 0x06, 0x5e, 0x77, 0xa5, 0x9a, 0xae, 0x54, 0xf1,
+	0x36, 0x2c, 0x98, 0xc4, 0xf1, 0x88, 0xdd, 0x71, 0x8d, 0x76, 0x60, 0x75, 0xa8, 0xa8, 0x9e, 0x92,
+	0x81, 0x96, 0xe2, 0x40, 0xf1, 0x78, 0xd5, 0xef, 0x0a, 0x6e, 0xbb, 0x9d, 0x03, 0xd2, 0x0d, 0xa8,
+	0x5e, 0x89, 0x49, 0x9b, 0x92, 0x83, 0x6f, 0xc0, 0xe9, 0xf8, 0x4b, 0x75, 0x66, 0x04, 0x7e, 0x82,
+	0xc6, 0xd7, 0xe1, 0x34, 0xb1, 0x8c, 0x0e, 0x67, 0x81, 0x57, 0x9d, 0x1d, 0x81, 0x39, 0x4b, 0xac,
+	0x9d, 0x10, 0x8c, 0x6f, 0xc0, 0x19, 0xcb, 0xf6, 0x1d, 0xdb, 0xf7, 0xa9, 0x55, 0x9d, 0x97, 0x4c,
+	0x6d, 0x88, 0xb9, 0xc9, 0x58, 0x37, 0xe2, 0x9d, 0x80, 0xf1, 0x8f, 0x08, 0x96, 0x07, 0x3a, 0x3d,
+	0xb0, 0xc6, 0xaa, 0xd3, 0x52, 0xef, 0xf6, 0xf8, 0x83, 0xbd, 0xd5, 0x37, 0x2e, 0xfd, 0x8d, 0xb7,
+	0xfe, 0xa7, 0x2f, 0x99, 0x39, 0xed, 0xf8, 0x1b, 0x04, 0x17, 0x1e, 0xd3, 0xe3, 0xa7, 0x8c, 0x5b,
+	0x83, 0x86, 0x4e, 0x4b, 0x43, 0x3b, 0xe3, 0x1b, 0xfa, 0x3c, 0xd2, 0x1b, 0x72, 0x72, 0xfe, 0x71,
+	0x5a, 0x03, 0xfe, 0x1a, 0x2e, 0x08, 0x7a, 0x24, 0x0c, 0x32, 0xe4, 0xe0, 0xcc, 0xa4, 0xeb, 0xef,
+	0x1e, 0x3d, 0x12, 0xcd, 0x61, 0x03, 0x8b, 0x22, 0xe5, 0x3b, 0x7e, 0x86, 0xa0, 0x56, 0x74, 0x02,
+	0x54, 0x61, 0xd2, 0xd9, 0xb9, 0x27, 0x95, 0xb7, 0x3c, 0x72, 0xc7, 0x13, 0xbb, 0xee, 0xf0, 0xec,
+	0x88, 0x9c, 0x76, 0xfc, 0x3b, 0x82, 0x2b, 0x0e, 0x39, 0xb2, 0x1d, 0xfb, 0x2b, 0x6a, 0x98, 0xcc,
+	0x3d, 0xa4, 0xdc, 0xb7, 0x99, 0xeb, 0x67, 0x98, 0x2c, 0x4b, 0x93, 0xf7, 0xc7, 0x37, 0xb9, 0xa7,
+	0x62, 0x6c, 0x9d, 0x84, 0x48, 0xb7, 0x7b, 0xd9, 0x19, 0x09, 0x89, 0x7f, 0x42, 0xb0, 0x4a, 0xdd,
+	0x47, 0xc4, 0x35, 0xa9, 0x65, 0x98, 0x9e, 0x99, 0x61, 0x78, 0x4e, 0x1a, 0xde, 0x1f, 0xdf, 0xf0,
+	0xb6, 0xd2, 0xde, 0xf2, 0xcc, 0x74, 0xa3, 0xcb, 0x34, 0x17, 0x81, 0x7f, 0x45, 0x70, 0xc9, 0xa7,
+	0x84, 0x9b, 0x8f, 0x0c, 0x8f, 0x70, 0xe1, 0x52, 0x9e, 0x35, 0xa8, 0x15, 0xe9, 0xf1, 0xee, 0xf8,
+	0x1e, 0xef, 0x4a, 0xf9, 0x7d, 0xa5, 0x9e, 0x6e, 0x73, 0xc5, 0x2f, 0x02, 0x49, 0xa7, 0x27, 0x6b,
+	0xa0, 0x6b, 0x9b, 0x8f, 0xb3, 0x9c, 0x2e, 0x4c, 0xea, 0x34, 0x99, 0x7e, 0xa9, 0x9e, 0xe1, 0xd4,
+	0x29, 0x02, 0xe1, 0x5f, 0x10, 0x5c, 0x64, 0x9e, 0x88, 0x9c, 0x86, 0xbb, 0x99, 0x89, 0x28, 0x7d,
+	0x0e, 0xf8, 0x3c, 0x2b, 0x7d, 0xea, 0xe3, 0xfb, 0xbc, 0xa3, 0xc4, 0x9b, 0x96, 0xae, 0xa4, 0x87,
+	0x6c, 0xd6, 0x58, 0x01, 0x46, 0xfb, 0x1b, 0xc1, 0x62, 0x5a, 0x7e, 0xc2, 0x5f, 0xc2, 0x5c, 0x9b,
+	0xf8, 0xd4, 0x70, 0xa8, 0xe0, 0xb6, 0xe9, 0xcb, 0xcc, 0x3b, 0xd1, 0xf9, 0xd7, 0xff, 0xba, 0x17,
+	0xc9, 0xe9, 0xe5, 0x50, 0x5c, 0xbd, 0x60, 0x01, 0xe7, 0x3c, 0x26, 0xa8, 0x2b, 0x6c, 0xd2, 0x4d,
+	0x02, 0x96, 0x5e, 0x6d, 0xc0, 0xb3, 0x49, 0x04, 0xf5, 0x45, 0x7b, 0x51, 0x82, 0xf3, 0xa9, 0x58,
+	0xfc, 0x09, 0x94, 0x6d, 0xc7, 0xe3, 0xd4, 0x97, 0x3b, 0x5a, 0x75, 0x7d, 0x38, 0x2b, 0xde, 0x64,
+	0x41, 0xbb, 0x4b, 0xa3, 0xec, 0xd6, 0x4b, 0xc0, 0x57, 0x61, 0x26, 0x5a, 0x9a, 0xaa, 0x13, 0xf9,
+	0x54, 0x85, 0xc5, 0x1f, 0x41, 0xd9, 0x64, 0xbe, 0x30, 0x1c, 0xdb, 0xe4, 0xcc, 0x57, 0xe5, 0xc6,
+	0x5b, 0x43, 0xd4, 0x5d, 0x57, 0x5c, 0xbb, 0x1a, 0x31, 0x21, 0xc4, 0xef, 0x49, 0x78, 0xe8, 0xb9,
+	0xe7, 0x48, 0x54, 0xf9, 0xb3, 0xc0, 0x73, 0x0f, 0x01, 0x7f, 0x0c, 0xe5, 0x43, 0xdb, 0xa2, 0xcc,
+	0x38, 0xb4, 0xe9, 0x53, 0x3f, 0xb3, 0x06, 0xe9, 0xe5, 0x83, 0x24, 0x1c, 0x84, 0x78, 0xed, 0xe5,
+	0x34, 0x2c, 0xe5, 0xa5, 0x5e, 0xdc, 0x82, 0x25, 0x33, 0xe0, 0x9c, 0xba, 0x22, 0xce, 0xf8, 0xc4,
+	0x61, 0x81, 0x9b, 0x74, 0x17, 0x15, 0x77, 0xf7, 0x4d, 0x25, 0x10, 0xe9, 0x37, 0x25, 0x5d, 0xf5,
+	0xde, 0x82, 0x5a, 0xb2, 0xad, 0xa8, 0x95, 0x1e, 0xa1, 0x54, 0x1c, 0xe1, 0xed, 0x1e, 0x91, 0x94,
+	0x28, 0xcf, 0x10, 0x54, 0x94, 0x74, 0xb8, 0xb1, 0xc2, 0x71, 0x9e, 0xaa, 0x4d, 0xad, 0x95, 0x37,
+	0x9e, 0xbc, 0xda, 0x3a, 0x25, 0xb7, 0xf1, 0x8e, 0x8c, 0xac, 0xcf, 0x47, 0x46, 0xa2, 0x37, 0x5f,
+	0x7b, 0x89, 0x60, 0xb5, 0x98, 0x85, 0xf7, 0x60, 0x71, 0xd2, 0xd1, 0xc7, 0xed, 0xe1, 0x01, 0x39,
+	0x29, 0x8e, 0x4b, 0xaf, 0xa3, 0x38, 0xd6, 0x9e, 0x23, 0x38, 0x9f, 0x5a, 0x3f, 0xe1, 0x6d, 0x98,
+	0x55, 0xf5, 0x93, 0xf2, 0xfe, 0x6e, 0x66, 0xe8, 0xe8, 0xf6, 0x14, 0xd7, 0x61, 0xbb, 0xee, 0x43,
+	0xa6, 0xc7, 0x5c, 0x7c, 0x1f, 0xb4, 0xde, 0x75, 0x13, 0xe6, 0xe6, 0xb6, 0x6d, 0x8d, 0xb1, 0x62,
+	0xde, 0xe8, 0xa1, 0x6f, 0x79, 0xe6, 0xa6, 0x6d, 0x45, 0x43, 0xa3, 0xfd, 0x89, 0x60, 0x31, 0xad,
+	0xf0, 0xc2, 0x1f, 0x40, 0x89, 0xc4, 0xa6, 0x2f, 0x8d, 0x30, 0x5e, 0x4d, 0x4b, 0x2f, 0x11, 0x0b,
+	0x37, 0x61, 0xde, 0xe4, 0x34, 0xca, 0x20, 0x16, 0x11, 0x34, 0xf3, 0x68, 0xe9, 0xad, 0xd5, 0xe7,
+	0x62, 0xca, 0x4d, 0x22, 0x28, 0xbe, 0x09, 0x0b, 0x24, 0x10, 0xcc, 0x20, 0x9e, 0xd7, 0x3d, 0x8e,
+	0x44, 0xa6, 0x46, 0x10, 0x99, 0x0f, 0x49, 0xcd, 0x90, 0x13, 0xaa, 0x68, 0x7f, 0x9c, 0x82, 0xa5,
+	0xbc, 0x32, 0x0e, 0x7f, 0x8f, 0x60, 0x36, 0xde, 0x1e, 0x68, 0xd2, 0xed, 0x91, 0x17, 0x21, 0xb7,
+	0x51, 0x6d, 0x8f, 0xd8, 0x01, 0x7e, 0x00, 0xbd, 0x9b, 0xda, 0xe8, 0x29, 0x6d, 0x47, 0x9f, 0xe4,
+	0xde, 0x35, 0x92, 0xc4, 0x56, 0xf3, 0xfc, 0x7c, 0x0a, 0x56, 0x8b, 0xfd, 0xe0, 0x23, 0x98, 0x0e,
+	0xaf, 0xcd, 0x72, 0xde, 0x2b, 0x1b, 0x56, 0xc1, 0x25, 0x35, 0x4f, 0x70, 0x87, 0x91, 0xae, 0xbc,
+	0xb2, 0x16, 0x81, 0x74, 0x19, 0x11, 0xef, 0xc0, 0xb9, 0x89, 0x3a, 0xbd, 0x20, 0xfa, 0x7b, 0x8a,
+	0x19, 0x5c, 0xe6, 0xf4, 0x49, 0x60, 0xf3, 0x70, 0xa3, 0x0c, 0xdc, 0xde, 0xfa, 0x4f, 0x93, 0x11,
+	0x52, 0xd7, 0x6a, 0x2c, 0xd5, 0x7f, 0x68, 0x65, 0x9c, 0x2e, 0xd3, 0xaf, 0xe5, 0x74, 0xf9, 0x01,
+	0xc1, 0xe5, 0xd1, 0x6a, 0xfd, 0x91, 0xf2, 0x0b, 0xfa, 0xb7, 0xf9, 0x45, 0xab, 0xc1, 0x72, 0x7e,
+	0x29, 0xaf, 0x5d, 0x84, 0x95, 0xc2, 0x42, 0x5a, 0xfb, 0x0e, 0xc1, 0x4a, 0x61, 0x11, 0xfb, 0x1f,
+	0x75, 0x69, 0x15, 0x6a, 0x45, 0x75, 0xea, 0xe6, 0x59, 0xa8, 0xf4, 0xd7, 0xc4, 0x9b, 0x7f, 0x21,
+	0xb8, 0x64, 0x32, 0xa7, 0x78, 0xbe, 0x37, 0xff, 0xdf, 0xaf, 0xb5, 0x1f, 0x3a, 0xdc, 0x47, 0x5f,
+	0x7c, 0xa6, 0x98, 0x1d, 0xd6, 0x25, 0x6e, 0xa7, 0xce, 0x78, 0xa7, 0xd1, 0xa1, 0xae, 0xf4, 0x1f,
+	0xff, 0xa7, 0xf2, 0x6c, 0x3f, 0xe7, 0xb7, 0xd5, 0x87, 0xc9, 0xd3, 0xcf, 0xa5, 0xa9, 0x9d, 0x66,
+	0xf3, 0xb7, 0xd2, 0xca, 0x4e, 0x24, 0xd9, 0xb4, 0xfc, 0x7a, 0xf4, 0x18, 0x3e, 0x1d, 0xac, 0xd7,
+	0xf5, 0x18, 0xf9, 0x22, 0xc6, 0xb4, 0x9a, 0x96, 0xdf, 0x4a, 0x30, 0xad, 0x83, 0xf5, 0x56, 0x82,
+	0x69, 0xcf, 0x48, 0x13, 0xef, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xd2, 0xfa, 0x62, 0x48,
+	0x14, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/search_term_view.pb.go b/googleapis/ads/googleads/v0/resources/search_term_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ae760dd631b5c1923d7eba77a4c4ef521e8931ea
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/search_term_view.pb.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/search_term_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A search term view with metrics aggregated by search term at the ad group
+// level.
+type SearchTermView struct {
+	// The resource name of the search term view.
+	// Search term view resource names have the form:
+	//
+	// `customers/{customer_id}/searchTermViews/{campaign_id}_{ad_group_id}_
+	// {URL-base64 search term}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The search term.
+	SearchTerm *wrappers.StringValue `protobuf:"bytes,2,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"`
+	// The ad group the search term served in.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,3,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// Indicates whether the search term is currently one of your
+	// targeted or excluded keywords.
+	Status               enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                      `json:"-"`
+	XXX_unrecognized     []byte                                                        `json:"-"`
+	XXX_sizecache        int32                                                         `json:"-"`
+}
+
+func (m *SearchTermView) Reset()         { *m = SearchTermView{} }
+func (m *SearchTermView) String() string { return proto.CompactTextString(m) }
+func (*SearchTermView) ProtoMessage()    {}
+func (*SearchTermView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_search_term_view_41238e08ac980d71, []int{0}
+}
+func (m *SearchTermView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchTermView.Unmarshal(m, b)
+}
+func (m *SearchTermView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchTermView.Marshal(b, m, deterministic)
+}
+func (dst *SearchTermView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchTermView.Merge(dst, src)
+}
+func (m *SearchTermView) XXX_Size() int {
+	return xxx_messageInfo_SearchTermView.Size(m)
+}
+func (m *SearchTermView) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchTermView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchTermView proto.InternalMessageInfo
+
+func (m *SearchTermView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *SearchTermView) GetSearchTerm() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchTerm
+	}
+	return nil
+}
+
+func (m *SearchTermView) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *SearchTermView) GetStatus() enums.SearchTermTargetingStatusEnum_SearchTermTargetingStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.SearchTermTargetingStatusEnum_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*SearchTermView)(nil), "google.ads.googleads.v0.resources.SearchTermView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/search_term_view.proto", fileDescriptor_search_term_view_41238e08ac980d71)
+}
+
+var fileDescriptor_search_term_view_41238e08ac980d71 = []byte{
+	// 366 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcd, 0x4a, 0xf3, 0x40,
+	0x14, 0x25, 0xe9, 0x47, 0x3f, 0x9d, 0x6a, 0x17, 0x71, 0x13, 0x8a, 0x48, 0xab, 0x08, 0x5d, 0x4d,
+	0x42, 0x5d, 0x28, 0x88, 0x60, 0x0a, 0x52, 0x70, 0x21, 0x25, 0x2d, 0x59, 0x48, 0x20, 0x4c, 0x9b,
+	0xeb, 0x18, 0x68, 0x66, 0xc2, 0x4c, 0xa6, 0x7d, 0x1a, 0x37, 0x2e, 0x7d, 0x14, 0x9f, 0xc0, 0xc7,
+	0x91, 0xfc, 0x4c, 0xb4, 0x8b, 0xaa, 0xbb, 0x93, 0xcc, 0xf9, 0x99, 0x73, 0xef, 0xa0, 0x2b, 0xca,
+	0x39, 0x5d, 0x81, 0x43, 0x62, 0xe9, 0x54, 0xb0, 0x40, 0x6b, 0xd7, 0x11, 0x20, 0xb9, 0x12, 0x4b,
+	0x90, 0x8e, 0x04, 0x22, 0x96, 0xcf, 0x51, 0x0e, 0x22, 0x8d, 0xd6, 0x09, 0x6c, 0x70, 0x26, 0x78,
+	0xce, 0xad, 0x41, 0x45, 0xc7, 0x24, 0x96, 0xb8, 0x51, 0xe2, 0xb5, 0x8b, 0x1b, 0x65, 0xef, 0x76,
+	0x97, 0x39, 0x30, 0x95, 0x6e, 0x1b, 0xe7, 0x44, 0x50, 0xc8, 0x13, 0x46, 0x23, 0x99, 0x93, 0x5c,
+	0xc9, 0x2a, 0xa4, 0x77, 0x52, 0x3b, 0x94, 0x5f, 0x0b, 0xf5, 0xe4, 0x6c, 0x04, 0xc9, 0x32, 0x10,
+	0xf5, 0xf9, 0xe9, 0x8b, 0x89, 0xba, 0xb3, 0xd2, 0x66, 0x0e, 0x22, 0x0d, 0x12, 0xd8, 0x58, 0x67,
+	0xe8, 0x50, 0xdf, 0x20, 0x62, 0x24, 0x05, 0xdb, 0xe8, 0x1b, 0xc3, 0x7d, 0xff, 0x40, 0xff, 0x7c,
+	0x20, 0x29, 0x58, 0x37, 0xa8, 0xf3, 0x2d, 0xdd, 0x36, 0xfb, 0xc6, 0xb0, 0x33, 0x3a, 0xae, 0x7b,
+	0x60, 0x9d, 0x86, 0x67, 0xb9, 0x48, 0x18, 0x0d, 0xc8, 0x4a, 0x81, 0x8f, 0x64, 0x93, 0x63, 0x5d,
+	0xa2, 0x3d, 0x12, 0x47, 0x54, 0x70, 0x95, 0xd9, 0xad, 0x3f, 0x68, 0xff, 0x93, 0x78, 0x52, 0x90,
+	0x2d, 0x86, 0xda, 0x55, 0x3f, 0xfb, 0x5f, 0xdf, 0x18, 0x76, 0x47, 0x01, 0xde, 0x35, 0xc5, 0x72,
+	0x44, 0xf8, 0xab, 0xdb, 0x5c, 0x0f, 0x68, 0x56, 0xea, 0xef, 0x98, 0x4a, 0x77, 0x9f, 0xfa, 0x75,
+	0xca, 0xf8, 0xc3, 0x40, 0xe7, 0x4b, 0x9e, 0xe2, 0x5f, 0x77, 0x35, 0x3e, 0xda, 0x1e, 0xe3, 0xb4,
+	0xa8, 0x31, 0x35, 0x1e, 0xef, 0x6b, 0x25, 0xe5, 0x2b, 0xc2, 0x28, 0xe6, 0x82, 0x3a, 0x14, 0x58,
+	0x59, 0x52, 0xaf, 0x34, 0x4b, 0xe4, 0x0f, 0xcf, 0xe7, 0xba, 0x41, 0xaf, 0x66, 0x6b, 0xe2, 0x79,
+	0x6f, 0xe6, 0x60, 0x52, 0x59, 0x7a, 0xb1, 0xc4, 0x15, 0x2c, 0x50, 0xe0, 0x62, 0x5f, 0x33, 0xdf,
+	0x35, 0x27, 0xf4, 0x62, 0x19, 0x36, 0x9c, 0x30, 0x70, 0xc3, 0x86, 0xb3, 0x68, 0x97, 0x97, 0xb8,
+	0xf8, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xa4, 0xe9, 0x8f, 0xc2, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/shared_criterion.pb.go b/googleapis/ads/googleads/v0/resources/shared_criterion.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9054a742b3bf39eb94685b9f349a05c09d7ff5b1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/shared_criterion.pb.go
@@ -0,0 +1,323 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/shared_criterion.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A criterion belonging to a shared set.
+type SharedCriterion struct {
+	// The resource name of the shared criterion.
+	// Shared set resource names have the form:
+	//
+	// `customers/{customer_id}/sharedCriteria/{shared_set_id}_{criterion_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The shared set to which the shared criterion belongs.
+	SharedSet *wrappers.StringValue `protobuf:"bytes,2,opt,name=shared_set,json=sharedSet,proto3" json:"shared_set,omitempty"`
+	// The ID of the criterion.
+	//
+	// This field is ignored for mutates.
+	CriterionId *wrappers.Int64Value `protobuf:"bytes,26,opt,name=criterion_id,json=criterionId,proto3" json:"criterion_id,omitempty"`
+	// The type of the criterion.
+	Type enums.CriterionTypeEnum_CriterionType `protobuf:"varint,4,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.CriterionTypeEnum_CriterionType" json:"type,omitempty"`
+	// The criterion.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to Criterion:
+	//	*SharedCriterion_Keyword
+	//	*SharedCriterion_YoutubeVideo
+	//	*SharedCriterion_YoutubeChannel
+	//	*SharedCriterion_Placement
+	Criterion            isSharedCriterion_Criterion `protobuf_oneof:"criterion"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *SharedCriterion) Reset()         { *m = SharedCriterion{} }
+func (m *SharedCriterion) String() string { return proto.CompactTextString(m) }
+func (*SharedCriterion) ProtoMessage()    {}
+func (*SharedCriterion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_6f71aadda527e84b, []int{0}
+}
+func (m *SharedCriterion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedCriterion.Unmarshal(m, b)
+}
+func (m *SharedCriterion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedCriterion.Marshal(b, m, deterministic)
+}
+func (dst *SharedCriterion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedCriterion.Merge(dst, src)
+}
+func (m *SharedCriterion) XXX_Size() int {
+	return xxx_messageInfo_SharedCriterion.Size(m)
+}
+func (m *SharedCriterion) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedCriterion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedCriterion proto.InternalMessageInfo
+
+func (m *SharedCriterion) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *SharedCriterion) GetSharedSet() *wrappers.StringValue {
+	if m != nil {
+		return m.SharedSet
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetCriterionId() *wrappers.Int64Value {
+	if m != nil {
+		return m.CriterionId
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetType() enums.CriterionTypeEnum_CriterionType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.CriterionTypeEnum_UNSPECIFIED
+}
+
+type isSharedCriterion_Criterion interface {
+	isSharedCriterion_Criterion()
+}
+
+type SharedCriterion_Keyword struct {
+	Keyword *common.KeywordInfo `protobuf:"bytes,3,opt,name=keyword,proto3,oneof"`
+}
+
+type SharedCriterion_YoutubeVideo struct {
+	YoutubeVideo *common.YouTubeVideoInfo `protobuf:"bytes,5,opt,name=youtube_video,json=youtubeVideo,proto3,oneof"`
+}
+
+type SharedCriterion_YoutubeChannel struct {
+	YoutubeChannel *common.YouTubeChannelInfo `protobuf:"bytes,6,opt,name=youtube_channel,json=youtubeChannel,proto3,oneof"`
+}
+
+type SharedCriterion_Placement struct {
+	Placement *common.PlacementInfo `protobuf:"bytes,7,opt,name=placement,proto3,oneof"`
+}
+
+func (*SharedCriterion_Keyword) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_YoutubeVideo) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_YoutubeChannel) isSharedCriterion_Criterion() {}
+
+func (*SharedCriterion_Placement) isSharedCriterion_Criterion() {}
+
+func (m *SharedCriterion) GetCriterion() isSharedCriterion_Criterion {
+	if m != nil {
+		return m.Criterion
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetKeyword() *common.KeywordInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetYoutubeVideo() *common.YouTubeVideoInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_YoutubeVideo); ok {
+		return x.YoutubeVideo
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetYoutubeChannel() *common.YouTubeChannelInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_YoutubeChannel); ok {
+		return x.YoutubeChannel
+	}
+	return nil
+}
+
+func (m *SharedCriterion) GetPlacement() *common.PlacementInfo {
+	if x, ok := m.GetCriterion().(*SharedCriterion_Placement); ok {
+		return x.Placement
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*SharedCriterion) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _SharedCriterion_OneofMarshaler, _SharedCriterion_OneofUnmarshaler, _SharedCriterion_OneofSizer, []interface{}{
+		(*SharedCriterion_Keyword)(nil),
+		(*SharedCriterion_YoutubeVideo)(nil),
+		(*SharedCriterion_YoutubeChannel)(nil),
+		(*SharedCriterion_Placement)(nil),
+	}
+}
+
+func _SharedCriterion_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*SharedCriterion)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *SharedCriterion_Keyword:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Keyword); err != nil {
+			return err
+		}
+	case *SharedCriterion_YoutubeVideo:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.YoutubeVideo); err != nil {
+			return err
+		}
+	case *SharedCriterion_YoutubeChannel:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.YoutubeChannel); err != nil {
+			return err
+		}
+	case *SharedCriterion_Placement:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Placement); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("SharedCriterion.Criterion has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _SharedCriterion_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*SharedCriterion)
+	switch tag {
+	case 3: // criterion.keyword
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.KeywordInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &SharedCriterion_Keyword{msg}
+		return true, err
+	case 5: // criterion.youtube_video
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.YouTubeVideoInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &SharedCriterion_YoutubeVideo{msg}
+		return true, err
+	case 6: // criterion.youtube_channel
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.YouTubeChannelInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &SharedCriterion_YoutubeChannel{msg}
+		return true, err
+	case 7: // criterion.placement
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.PlacementInfo)
+		err := b.DecodeMessage(msg)
+		m.Criterion = &SharedCriterion_Placement{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _SharedCriterion_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*SharedCriterion)
+	// criterion
+	switch x := m.Criterion.(type) {
+	case *SharedCriterion_Keyword:
+		s := proto.Size(x.Keyword)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *SharedCriterion_YoutubeVideo:
+		s := proto.Size(x.YoutubeVideo)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *SharedCriterion_YoutubeChannel:
+		s := proto.Size(x.YoutubeChannel)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *SharedCriterion_Placement:
+		s := proto.Size(x.Placement)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*SharedCriterion)(nil), "google.ads.googleads.v0.resources.SharedCriterion")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/shared_criterion.proto", fileDescriptor_shared_criterion_6f71aadda527e84b)
+}
+
+var fileDescriptor_shared_criterion_6f71aadda527e84b = []byte{
+	// 498 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x8a, 0xd3, 0x40,
+	0x14, 0x87, 0x4d, 0xb7, 0xee, 0xd2, 0x69, 0x77, 0x17, 0x82, 0x17, 0xa1, 0x8a, 0x74, 0x15, 0xa1,
+	0x20, 0x3b, 0x09, 0x55, 0x44, 0x58, 0x58, 0x68, 0x17, 0xa9, 0x55, 0x94, 0x92, 0x2e, 0x15, 0xa5,
+	0x52, 0xa6, 0xc9, 0xd9, 0x6c, 0x30, 0x99, 0x09, 0x33, 0x49, 0x97, 0xbe, 0x8e, 0x97, 0x3e, 0x8a,
+	0x6f, 0xe0, 0xbd, 0x0f, 0x22, 0x99, 0x7f, 0x8b, 0x4a, 0xad, 0x77, 0xa7, 0xa7, 0xbf, 0xef, 0xcb,
+	0x39, 0xc9, 0x0c, 0x7a, 0x99, 0x30, 0x96, 0x64, 0xe0, 0x93, 0x58, 0xf8, 0xaa, 0xac, 0xab, 0x75,
+	0xe0, 0x73, 0x10, 0xac, 0xe2, 0x11, 0x08, 0x5f, 0x5c, 0x13, 0x0e, 0xf1, 0x32, 0xe2, 0x69, 0x09,
+	0x3c, 0x65, 0x14, 0x17, 0x9c, 0x95, 0xcc, 0x3d, 0x51, 0x71, 0x4c, 0x62, 0x81, 0x2d, 0x89, 0xd7,
+	0x01, 0xb6, 0x64, 0xf7, 0x74, 0x9b, 0x3c, 0x62, 0x79, 0xce, 0xa8, 0xaf, 0x95, 0x44, 0x19, 0xbb,
+	0x83, 0x6d, 0x71, 0xa0, 0x55, 0x2e, 0x7c, 0x3b, 0xc0, 0xb2, 0xdc, 0x14, 0xa0, 0x99, 0x87, 0x9a,
+	0x91, 0xbf, 0x56, 0xd5, 0x95, 0x7f, 0xc3, 0x49, 0x51, 0x00, 0x17, 0xea, 0xff, 0x47, 0x3f, 0x9b,
+	0xe8, 0x78, 0x26, 0x17, 0xb8, 0x30, 0xb8, 0xfb, 0x18, 0x1d, 0x9a, 0x19, 0x97, 0x94, 0xe4, 0xe0,
+	0x39, 0x3d, 0xa7, 0xdf, 0x0a, 0x3b, 0xa6, 0xf9, 0x9e, 0xe4, 0xe0, 0x9e, 0x21, 0xa4, 0x17, 0x17,
+	0x50, 0x7a, 0x8d, 0x9e, 0xd3, 0x6f, 0x0f, 0x1e, 0xe8, 0x45, 0xb1, 0x79, 0x1a, 0x9e, 0x95, 0x3c,
+	0xa5, 0xc9, 0x9c, 0x64, 0x15, 0x84, 0x2d, 0x95, 0x9f, 0x41, 0xe9, 0x9e, 0xa3, 0xce, 0xed, 0xb4,
+	0x69, 0xec, 0x75, 0x25, 0x7e, 0xff, 0x2f, 0x7c, 0x42, 0xcb, 0x17, 0xcf, 0x15, 0xdd, 0xb6, 0xc0,
+	0x24, 0x76, 0x43, 0xd4, 0xac, 0x77, 0xf4, 0x9a, 0x3d, 0xa7, 0x7f, 0x34, 0x38, 0xc7, 0xdb, 0x5e,
+	0xb5, 0x7c, 0x31, 0xd8, 0x6e, 0x76, 0xb9, 0x29, 0xe0, 0x15, 0xad, 0xf2, 0xdf, 0x3b, 0xa1, 0x74,
+	0xb9, 0x63, 0x74, 0xf0, 0x05, 0x36, 0x37, 0x8c, 0xc7, 0xde, 0x9e, 0x1c, 0xe7, 0xe9, 0x56, 0xad,
+	0xfa, 0x3c, 0xf8, 0xad, 0x8a, 0x4f, 0xe8, 0x15, 0x7b, 0x7d, 0x27, 0x34, 0xb4, 0xfb, 0x01, 0x1d,
+	0x6e, 0x58, 0x55, 0x56, 0x2b, 0x58, 0xae, 0xd3, 0x18, 0x98, 0x77, 0x57, 0xea, 0x82, 0x5d, 0xba,
+	0x8f, 0xac, 0xba, 0xac, 0x56, 0x30, 0xaf, 0x19, 0xed, 0xec, 0x68, 0x91, 0xec, 0xb9, 0x9f, 0xd1,
+	0xb1, 0x11, 0x47, 0xd7, 0x84, 0x52, 0xc8, 0xbc, 0x7d, 0xa9, 0x1e, 0xfc, 0xa7, 0xfa, 0x42, 0x51,
+	0x5a, 0x7e, 0xa4, 0x65, 0xba, 0xeb, 0xbe, 0x43, 0xad, 0x22, 0x23, 0x11, 0xe4, 0x40, 0x4b, 0xef,
+	0x40, 0x8a, 0x4f, 0x77, 0x89, 0xa7, 0x06, 0xd0, 0xce, 0x5b, 0xc3, 0xa8, 0x8d, 0x5a, 0xf6, 0x93,
+	0x8d, 0x7e, 0x38, 0xe8, 0x49, 0xc4, 0x72, 0xbc, 0xf3, 0x4e, 0x8c, 0xee, 0xfd, 0x71, 0x1a, 0xa7,
+	0xf5, 0x59, 0x98, 0x3a, 0x9f, 0xde, 0x68, 0x34, 0x61, 0x19, 0xa1, 0x09, 0x66, 0x3c, 0xf1, 0x13,
+	0xa0, 0xf2, 0xa4, 0x98, 0xcb, 0x50, 0xa4, 0xe2, 0x1f, 0xf7, 0xf4, 0xcc, 0x56, 0x5f, 0x1b, 0x7b,
+	0xe3, 0xe1, 0xf0, 0x5b, 0xe3, 0x64, 0xac, 0x94, 0xc3, 0x58, 0x60, 0x55, 0xd6, 0xd5, 0x3c, 0xc0,
+	0xa1, 0x49, 0x7e, 0x37, 0x99, 0xc5, 0x30, 0x16, 0x0b, 0x9b, 0x59, 0xcc, 0x83, 0x85, 0xcd, 0xac,
+	0xf6, 0xe5, 0x10, 0xcf, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x15, 0x3a, 0x23, 0x2b, 0x04,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/shared_set.pb.go b/googleapis/ads/googleads/v0/resources/shared_set.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0d3b2bdff4badb730eec0319837f15de89b3b749
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/shared_set.pb.go
@@ -0,0 +1,163 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/shared_set.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// SharedSets are used for sharing criterion exclusions across multiple
+// campaigns.
+type SharedSet struct {
+	// The resource name of the shared set.
+	// Shared set resource names have the form:
+	//
+	// `customers/{customer_id}/sharedSets/{shared_set_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of this shared set. Read only.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The type of this shared set: each shared set holds only a single kind
+	// of entity. Required. Immutable.
+	Type enums.SharedSetTypeEnum_SharedSetType `protobuf:"varint,3,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.SharedSetTypeEnum_SharedSetType" json:"type,omitempty"`
+	// The name of this shared set. Required.
+	// Shared Sets must have names that are unique among active shared sets of
+	// the same type.
+	// The length of this string should be between 1 and 255 UTF-8 bytes,
+	// inclusive.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The status of this shared set. Read only.
+	Status enums.SharedSetStatusEnum_SharedSetStatus `protobuf:"varint,5,opt,name=status,proto3,enum=google.ads.googleads.v0.enums.SharedSetStatusEnum_SharedSetStatus" json:"status,omitempty"`
+	// The number of shared criteria within this shared set. Read only.
+	MemberCount *wrappers.Int64Value `protobuf:"bytes,6,opt,name=member_count,json=memberCount,proto3" json:"member_count,omitempty"`
+	// The number of campaigns associated with this shared set. Read only.
+	ReferenceCount       *wrappers.Int64Value `protobuf:"bytes,7,opt,name=reference_count,json=referenceCount,proto3" json:"reference_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *SharedSet) Reset()         { *m = SharedSet{} }
+func (m *SharedSet) String() string { return proto.CompactTextString(m) }
+func (*SharedSet) ProtoMessage()    {}
+func (*SharedSet) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_62551757b5337245, []int{0}
+}
+func (m *SharedSet) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSet.Unmarshal(m, b)
+}
+func (m *SharedSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSet.Marshal(b, m, deterministic)
+}
+func (dst *SharedSet) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSet.Merge(dst, src)
+}
+func (m *SharedSet) XXX_Size() int {
+	return xxx_messageInfo_SharedSet.Size(m)
+}
+func (m *SharedSet) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSet proto.InternalMessageInfo
+
+func (m *SharedSet) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *SharedSet) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *SharedSet) GetType() enums.SharedSetTypeEnum_SharedSetType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.SharedSetTypeEnum_UNSPECIFIED
+}
+
+func (m *SharedSet) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *SharedSet) GetStatus() enums.SharedSetStatusEnum_SharedSetStatus {
+	if m != nil {
+		return m.Status
+	}
+	return enums.SharedSetStatusEnum_UNSPECIFIED
+}
+
+func (m *SharedSet) GetMemberCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.MemberCount
+	}
+	return nil
+}
+
+func (m *SharedSet) GetReferenceCount() *wrappers.Int64Value {
+	if m != nil {
+		return m.ReferenceCount
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*SharedSet)(nil), "google.ads.googleads.v0.resources.SharedSet")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/shared_set.proto", fileDescriptor_shared_set_62551757b5337245)
+}
+
+var fileDescriptor_shared_set_62551757b5337245 = []byte{
+	// 420 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x41, 0x8b, 0xd3, 0x40,
+	0x18, 0x86, 0x49, 0x5a, 0x2b, 0x3b, 0xbb, 0x56, 0x98, 0x53, 0x58, 0x45, 0xba, 0x8a, 0x50, 0x10,
+	0x26, 0xa1, 0xab, 0x5e, 0x84, 0x85, 0x54, 0x65, 0xd1, 0x83, 0x2c, 0x89, 0xf4, 0x50, 0x02, 0x61,
+	0x9a, 0x7c, 0x8d, 0x81, 0x66, 0x26, 0xcc, 0x4c, 0x2a, 0xfd, 0x3b, 0x1e, 0xfd, 0x1f, 0x5e, 0xbc,
+	0xfa, 0x87, 0x24, 0x33, 0xc9, 0x60, 0x91, 0x6e, 0x7b, 0xfb, 0x3a, 0xbc, 0xef, 0xd3, 0x67, 0x3e,
+	0x26, 0x68, 0x56, 0x70, 0x5e, 0x6c, 0xc0, 0xa7, 0xb9, 0xf4, 0xcd, 0xd8, 0x4e, 0xdb, 0xc0, 0x17,
+	0x20, 0x79, 0x23, 0x32, 0x90, 0xbe, 0xfc, 0x46, 0x05, 0xe4, 0xa9, 0x04, 0x45, 0x6a, 0xc1, 0x15,
+	0xc7, 0x57, 0x26, 0x48, 0x68, 0x2e, 0x89, 0xed, 0x90, 0x6d, 0x40, 0x6c, 0xe7, 0xf2, 0xcd, 0x21,
+	0x2c, 0xb0, 0xa6, 0xfa, 0x17, 0x99, 0x4a, 0x45, 0x55, 0x23, 0x0d, 0xf9, 0xf2, 0xfa, 0xe4, 0x9a,
+	0xda, 0xd5, 0xd0, 0x95, 0x9e, 0x75, 0x25, 0xfd, 0x6b, 0xd5, 0xac, 0xfd, 0xef, 0x82, 0xd6, 0x35,
+	0x88, 0x0e, 0xfa, 0xfc, 0xd7, 0x00, 0x9d, 0xc5, 0xba, 0x19, 0x83, 0xc2, 0x2f, 0xd0, 0xa3, 0x5e,
+	0x33, 0x65, 0xb4, 0x02, 0xcf, 0x99, 0x38, 0xd3, 0xb3, 0xe8, 0xa2, 0x3f, 0xfc, 0x42, 0x2b, 0xc0,
+	0xaf, 0x90, 0x5b, 0xe6, 0x9e, 0x3b, 0x71, 0xa6, 0xe7, 0xb3, 0x27, 0xdd, 0x1d, 0x49, 0xcf, 0x27,
+	0x9f, 0x98, 0x7a, 0xfb, 0x7a, 0x41, 0x37, 0x0d, 0x44, 0x6e, 0x99, 0xe3, 0x08, 0x0d, 0x5b, 0x1b,
+	0x6f, 0x30, 0x71, 0xa6, 0xe3, 0xd9, 0x0d, 0x39, 0xb4, 0x1d, 0x7d, 0x07, 0x62, 0x4d, 0xbe, 0xee,
+	0x6a, 0xf8, 0xc8, 0x9a, 0x6a, 0xff, 0x24, 0xd2, 0x2c, 0x1c, 0xa0, 0xa1, 0x96, 0x1b, 0x6a, 0x85,
+	0xa7, 0xff, 0x29, 0xc4, 0x4a, 0x94, 0xac, 0x30, 0x0e, 0x3a, 0x89, 0x97, 0x68, 0x64, 0x56, 0xe9,
+	0x3d, 0xd0, 0x1e, 0xf3, 0x53, 0x3d, 0x62, 0xdd, 0xda, 0x37, 0x31, 0x67, 0x51, 0x47, 0xc4, 0x37,
+	0xe8, 0xa2, 0x82, 0x6a, 0x05, 0x22, 0xcd, 0x78, 0xc3, 0x94, 0x37, 0x3a, 0xbe, 0x98, 0x73, 0x53,
+	0x78, 0xdf, 0xe6, 0xf1, 0x07, 0xf4, 0x58, 0xc0, 0x1a, 0x04, 0xb0, 0x0c, 0x3a, 0xc4, 0xc3, 0xe3,
+	0x88, 0xb1, 0xed, 0x68, 0xca, 0xfc, 0x8f, 0x83, 0x5e, 0x66, 0xbc, 0x22, 0x47, 0x5f, 0xdf, 0x7c,
+	0x6c, 0x2f, 0x72, 0xd7, 0x72, 0xef, 0x9c, 0xe5, 0xe7, 0xae, 0x54, 0xf0, 0x0d, 0x65, 0x05, 0xe1,
+	0xa2, 0xf0, 0x0b, 0x60, 0xfa, 0x5f, 0xfb, 0x87, 0x56, 0x97, 0xf2, 0x9e, 0xaf, 0xe0, 0x9d, 0x9d,
+	0x7e, 0xb8, 0x83, 0xdb, 0x30, 0xfc, 0xe9, 0x5e, 0xdd, 0x1a, 0x64, 0x98, 0x4b, 0x62, 0xc6, 0x76,
+	0x5a, 0x04, 0x24, 0xea, 0x93, 0xbf, 0xfb, 0x4c, 0x12, 0xe6, 0x32, 0xb1, 0x99, 0x64, 0x11, 0x24,
+	0x36, 0xb3, 0x1a, 0x69, 0x89, 0xeb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x69, 0x38, 0xf9,
+	0x89, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/topic_constant.pb.go b/googleapis/ads/googleads/v0/resources/topic_constant.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..00c068e8f924d312019b9e45e4825b3b38f0eff0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/topic_constant.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/topic_constant.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Use topics to target or exclude placements in the Google Display Network
+// based on the category into which the placement falls (for example,
+// "Pets & Animals/Pets/Dogs").
+type TopicConstant struct {
+	// The resource name of the topic constant.
+	// topic constant resource names have the form:
+	//
+	// `topicConstants/{topic_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the topic.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// Resource name of parent of the topic constant.
+	TopicConstantParent *wrappers.StringValue `protobuf:"bytes,3,opt,name=topic_constant_parent,json=topicConstantParent,proto3" json:"topic_constant_parent,omitempty"`
+	// The category to target or exclude. Each subsequent element in the array
+	// describes a more specific sub-category. For example,
+	// {"Pets & Animals", "Pets", "Dogs"} represents the
+	// "Pets & Animals/Pets/Dogs" category. A complete list of available topic
+	// categories is available
+	// <a
+	// href="https://developers.google.com/adwords/api/docs/appendix/verticals">
+	// here</a>
+	Path                 []*wrappers.StringValue `protobuf:"bytes,4,rep,name=path,proto3" json:"path,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *TopicConstant) Reset()         { *m = TopicConstant{} }
+func (m *TopicConstant) String() string { return proto.CompactTextString(m) }
+func (*TopicConstant) ProtoMessage()    {}
+func (*TopicConstant) Descriptor() ([]byte, []int) {
+	return fileDescriptor_topic_constant_65f470286ad84f07, []int{0}
+}
+func (m *TopicConstant) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TopicConstant.Unmarshal(m, b)
+}
+func (m *TopicConstant) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TopicConstant.Marshal(b, m, deterministic)
+}
+func (dst *TopicConstant) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TopicConstant.Merge(dst, src)
+}
+func (m *TopicConstant) XXX_Size() int {
+	return xxx_messageInfo_TopicConstant.Size(m)
+}
+func (m *TopicConstant) XXX_DiscardUnknown() {
+	xxx_messageInfo_TopicConstant.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TopicConstant proto.InternalMessageInfo
+
+func (m *TopicConstant) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *TopicConstant) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *TopicConstant) GetTopicConstantParent() *wrappers.StringValue {
+	if m != nil {
+		return m.TopicConstantParent
+	}
+	return nil
+}
+
+func (m *TopicConstant) GetPath() []*wrappers.StringValue {
+	if m != nil {
+		return m.Path
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*TopicConstant)(nil), "google.ads.googleads.v0.resources.TopicConstant")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/topic_constant.proto", fileDescriptor_topic_constant_65f470286ad84f07)
+}
+
+var fileDescriptor_topic_constant_65f470286ad84f07 = []byte{
+	// 327 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xd1, 0x4a, 0xf3, 0x30,
+	0x18, 0x86, 0x69, 0x37, 0x7e, 0xf8, 0xa3, 0x3b, 0xa9, 0x08, 0x45, 0x45, 0x36, 0x45, 0x18, 0x08,
+	0x49, 0x51, 0xd9, 0x89, 0x47, 0x9d, 0x07, 0x43, 0x0f, 0xa4, 0x4c, 0xd9, 0x81, 0x14, 0x46, 0xd6,
+	0xc4, 0x58, 0xd8, 0x92, 0x90, 0xa4, 0xf3, 0x7e, 0x3c, 0xf4, 0x52, 0xbc, 0x01, 0xaf, 0xc0, 0xfb,
+	0x90, 0x26, 0x4d, 0x71, 0x08, 0xee, 0xec, 0x25, 0xbc, 0xcf, 0xf3, 0x7d, 0xe4, 0x03, 0x23, 0x26,
+	0x04, 0x5b, 0x52, 0x84, 0x89, 0x46, 0x2e, 0xd6, 0x69, 0x9d, 0x20, 0x45, 0xb5, 0xa8, 0x54, 0x41,
+	0x35, 0x32, 0x42, 0x96, 0xc5, 0xbc, 0x10, 0x5c, 0x1b, 0xcc, 0x0d, 0x94, 0x4a, 0x18, 0x11, 0x0d,
+	0x5c, 0x19, 0x62, 0xa2, 0x61, 0xcb, 0xc1, 0x75, 0x02, 0x5b, 0xee, 0xe0, 0xb8, 0x51, 0x5b, 0x60,
+	0x51, 0x3d, 0xa3, 0x57, 0x85, 0xa5, 0xa4, 0x4a, 0x3b, 0xc5, 0xc9, 0x57, 0x00, 0x7a, 0x8f, 0xb5,
+	0xfb, 0xa6, 0x51, 0x47, 0xa7, 0xa0, 0xe7, 0xf1, 0x39, 0xc7, 0x2b, 0x1a, 0x07, 0xfd, 0x60, 0xf8,
+	0x7f, 0xba, 0xeb, 0x1f, 0xef, 0xf1, 0x8a, 0x46, 0xe7, 0x20, 0x2c, 0x49, 0x1c, 0xf6, 0x83, 0xe1,
+	0xce, 0xc5, 0x61, 0x33, 0x1b, 0xfa, 0x19, 0xf0, 0x96, 0x9b, 0xd1, 0xd5, 0x0c, 0x2f, 0x2b, 0x3a,
+	0x0d, 0x4b, 0x12, 0x65, 0x60, 0x7f, 0x73, 0xfd, 0xb9, 0xc4, 0x8a, 0x72, 0x13, 0x77, 0x2c, 0x7f,
+	0xf4, 0x8b, 0x7f, 0x30, 0xaa, 0xe4, 0xcc, 0x09, 0xf6, 0xcc, 0xcf, 0xed, 0x32, 0x0b, 0x46, 0x09,
+	0xe8, 0x4a, 0x6c, 0x5e, 0xe2, 0x6e, 0xbf, 0xb3, 0x55, 0x60, 0x9b, 0xe3, 0xcf, 0x00, 0x9c, 0x15,
+	0x62, 0x05, 0xb7, 0xfe, 0xd8, 0x38, 0xda, 0xf8, 0x8e, 0xac, 0x56, 0x66, 0xc1, 0xd3, 0x5d, 0x03,
+	0x32, 0xb1, 0xc4, 0x9c, 0x41, 0xa1, 0x18, 0x62, 0x94, 0xdb, 0x81, 0xfe, 0x64, 0xb2, 0xd4, 0x7f,
+	0x5c, 0xf0, 0xba, 0x4d, 0x6f, 0x61, 0x67, 0x92, 0xa6, 0xef, 0xe1, 0x60, 0xe2, 0x94, 0x29, 0xd1,
+	0xd0, 0xc5, 0x3a, 0xcd, 0x12, 0x38, 0xf5, 0xcd, 0x0f, 0xdf, 0xc9, 0x53, 0xa2, 0xf3, 0xb6, 0x93,
+	0xcf, 0x92, 0xbc, 0xed, 0x2c, 0xfe, 0xd9, 0x25, 0x2e, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x0f,
+	0xe9, 0xf0, 0xd7, 0x45, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/topic_view.pb.go b/googleapis/ads/googleads/v0/resources/topic_view.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..700dff6bffddd3b5ea5a9f082c9a2d367c47aeca
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/topic_view.pb.go
@@ -0,0 +1,88 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/topic_view.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A topic view.
+type TopicView struct {
+	// The resource name of the topic view.
+	// Topic view resource names have the form:
+	//
+	// `customers/{customer_id}/topicViews/{ad_group_id}_{criterion_id}`
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TopicView) Reset()         { *m = TopicView{} }
+func (m *TopicView) String() string { return proto.CompactTextString(m) }
+func (*TopicView) ProtoMessage()    {}
+func (*TopicView) Descriptor() ([]byte, []int) {
+	return fileDescriptor_topic_view_b0ffb79b2c716b89, []int{0}
+}
+func (m *TopicView) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TopicView.Unmarshal(m, b)
+}
+func (m *TopicView) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TopicView.Marshal(b, m, deterministic)
+}
+func (dst *TopicView) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TopicView.Merge(dst, src)
+}
+func (m *TopicView) XXX_Size() int {
+	return xxx_messageInfo_TopicView.Size(m)
+}
+func (m *TopicView) XXX_DiscardUnknown() {
+	xxx_messageInfo_TopicView.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TopicView proto.InternalMessageInfo
+
+func (m *TopicView) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*TopicView)(nil), "google.ads.googleads.v0.resources.TopicView")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/topic_view.proto", fileDescriptor_topic_view_b0ffb79b2c716b89)
+}
+
+var fileDescriptor_topic_view_b0ffb79b2c716b89 = []byte{
+	// 221 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xa2, 0xd4,
+	0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0x62, 0xfd, 0x92, 0xfc, 0x82, 0xcc, 0xe4, 0xf8, 0xb2, 0xcc,
+	0xd4, 0x72, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x45, 0x88, 0x42, 0xbd, 0xc4, 0x94, 0x62,
+	0x3d, 0xb8, 0x1e, 0xbd, 0x32, 0x03, 0x3d, 0xb8, 0x1e, 0x25, 0x03, 0x2e, 0xce, 0x10, 0x90, 0xb6,
+	0xb0, 0xcc, 0xd4, 0x72, 0x21, 0x65, 0x2e, 0x5e, 0x98, 0x4c, 0x7c, 0x5e, 0x62, 0x6e, 0xaa, 0x04,
+	0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x0f, 0x4c, 0xd0, 0x2f, 0x31, 0x37, 0xd5, 0xe9, 0x32, 0x23,
+	0x97, 0x6a, 0x72, 0x7e, 0xae, 0x1e, 0x41, 0xb3, 0x9d, 0xf8, 0xe0, 0x26, 0x07, 0x80, 0x9c, 0x13,
+	0xc0, 0x18, 0xe5, 0x05, 0xd5, 0x94, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae,
+	0x9f, 0x9e, 0x9a, 0x07, 0x76, 0x2c, 0xcc, 0x53, 0x05, 0x99, 0xc5, 0x78, 0xfc, 0x68, 0x0d, 0x67,
+	0x2d, 0x62, 0x62, 0x76, 0x77, 0x74, 0x5c, 0xc5, 0xa4, 0xe8, 0x0e, 0x31, 0xd2, 0x31, 0xa5, 0x58,
+	0x0f, 0xc2, 0x04, 0xb1, 0xc2, 0x0c, 0xf4, 0x82, 0x60, 0x2a, 0x4f, 0xc1, 0xd4, 0xc4, 0x38, 0xa6,
+	0x14, 0xc7, 0xc0, 0xd5, 0xc4, 0x84, 0x19, 0xc4, 0xc0, 0xd5, 0x24, 0xb1, 0x81, 0x1d, 0x61, 0x0c,
+	0x08, 0x00, 0x00, 0xff, 0xff, 0x59, 0x2b, 0x41, 0x19, 0x67, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/user_interest.pb.go b/googleapis/ads/googleads/v0/resources/user_interest.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c783bb027b01b229b58d25fd7672249bd058a791
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/user_interest.pb.go
@@ -0,0 +1,162 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/user_interest.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A user interest: a particular interest-based vertical to be targeted.
+type UserInterest struct {
+	// The resource name of the user interest.
+	// User interest resource names have the form:
+	//
+	// `customers/{customer_id}/userInterests/{user_interest_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Taxonomy type of the user interest.
+	TaxonomyType enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType `protobuf:"varint,2,opt,name=taxonomy_type,json=taxonomyType,proto3,enum=google.ads.googleads.v0.enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType" json:"taxonomy_type,omitempty"`
+	// The ID of the user interest.
+	UserInterestId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=user_interest_id,json=userInterestId,proto3" json:"user_interest_id,omitempty"`
+	// The name of the user interest.
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// The parent of the user interest.
+	UserInterestParent *wrappers.StringValue `protobuf:"bytes,5,opt,name=user_interest_parent,json=userInterestParent,proto3" json:"user_interest_parent,omitempty"`
+	// True if the user interest is launched to all channels and locales.
+	LaunchedToAll *wrappers.BoolValue `protobuf:"bytes,6,opt,name=launched_to_all,json=launchedToAll,proto3" json:"launched_to_all,omitempty"`
+	// Availability information of the user interest.
+	Availabilities       []*common.CriterionCategoryAvailability `protobuf:"bytes,7,rep,name=availabilities,proto3" json:"availabilities,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *UserInterest) Reset()         { *m = UserInterest{} }
+func (m *UserInterest) String() string { return proto.CompactTextString(m) }
+func (*UserInterest) ProtoMessage()    {}
+func (*UserInterest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_interest_3d236450e913a580, []int{0}
+}
+func (m *UserInterest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInterest.Unmarshal(m, b)
+}
+func (m *UserInterest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInterest.Marshal(b, m, deterministic)
+}
+func (dst *UserInterest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInterest.Merge(dst, src)
+}
+func (m *UserInterest) XXX_Size() int {
+	return xxx_messageInfo_UserInterest.Size(m)
+}
+func (m *UserInterest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInterest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInterest proto.InternalMessageInfo
+
+func (m *UserInterest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *UserInterest) GetTaxonomyType() enums.UserInterestTaxonomyTypeEnum_UserInterestTaxonomyType {
+	if m != nil {
+		return m.TaxonomyType
+	}
+	return enums.UserInterestTaxonomyTypeEnum_UNSPECIFIED
+}
+
+func (m *UserInterest) GetUserInterestId() *wrappers.Int64Value {
+	if m != nil {
+		return m.UserInterestId
+	}
+	return nil
+}
+
+func (m *UserInterest) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *UserInterest) GetUserInterestParent() *wrappers.StringValue {
+	if m != nil {
+		return m.UserInterestParent
+	}
+	return nil
+}
+
+func (m *UserInterest) GetLaunchedToAll() *wrappers.BoolValue {
+	if m != nil {
+		return m.LaunchedToAll
+	}
+	return nil
+}
+
+func (m *UserInterest) GetAvailabilities() []*common.CriterionCategoryAvailability {
+	if m != nil {
+		return m.Availabilities
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*UserInterest)(nil), "google.ads.googleads.v0.resources.UserInterest")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/user_interest.proto", fileDescriptor_user_interest_3d236450e913a580)
+}
+
+var fileDescriptor_user_interest_3d236450e913a580 = []byte{
+	// 487 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x8a, 0xd3, 0x40,
+	0x14, 0xc6, 0x49, 0x5b, 0x57, 0x9c, 0x6d, 0xab, 0x06, 0x2f, 0x42, 0x15, 0xe9, 0x2a, 0x42, 0xaf,
+	0x26, 0xa1, 0xfe, 0xb9, 0x11, 0x91, 0x74, 0x5d, 0x96, 0x7a, 0xb1, 0x94, 0x58, 0x7b, 0x21, 0x85,
+	0x30, 0x4d, 0x8e, 0x71, 0x60, 0x32, 0x13, 0x66, 0x26, 0xd5, 0xbc, 0xce, 0x5e, 0xfa, 0x28, 0x3e,
+	0x80, 0xcf, 0x23, 0x4d, 0x32, 0x21, 0xdd, 0x25, 0xea, 0xdd, 0x99, 0xce, 0xf9, 0x7e, 0xdf, 0x39,
+	0x9d, 0x2f, 0xe8, 0x75, 0x22, 0x44, 0xc2, 0xc0, 0x25, 0xb1, 0x72, 0xab, 0xf2, 0x50, 0xed, 0x3d,
+	0x57, 0x82, 0x12, 0xb9, 0x8c, 0x40, 0xb9, 0xb9, 0x02, 0x19, 0x52, 0xae, 0x41, 0x82, 0xd2, 0x38,
+	0x93, 0x42, 0x0b, 0xfb, 0xac, 0xea, 0xc5, 0x24, 0x56, 0xb8, 0x91, 0xe1, 0xbd, 0x87, 0x1b, 0xd9,
+	0xe4, 0x43, 0x17, 0x39, 0x12, 0x69, 0x2a, 0xb8, 0x1b, 0x49, 0xaa, 0x41, 0x52, 0xc1, 0xc3, 0x88,
+	0x68, 0x48, 0x84, 0x2c, 0x42, 0xb2, 0x27, 0x94, 0x91, 0x1d, 0x65, 0x54, 0x17, 0x95, 0xd1, 0xe4,
+	0x7d, 0x17, 0x05, 0x78, 0x9e, 0xde, 0x98, 0x2d, 0xd4, 0xe4, 0x87, 0xe0, 0x22, 0x2d, 0x42, 0x5d,
+	0x64, 0x50, 0x03, 0x9e, 0xd6, 0x80, 0xf2, 0xb4, 0xcb, 0xbf, 0xba, 0xdf, 0x25, 0xc9, 0x32, 0x90,
+	0xaa, 0xba, 0x7f, 0x76, 0x3d, 0x40, 0xc3, 0xcf, 0x0a, 0xe4, 0xb2, 0x86, 0xd8, 0xcf, 0xd1, 0xc8,
+	0x2c, 0x11, 0x72, 0x92, 0x82, 0x63, 0x4d, 0xad, 0xd9, 0xbd, 0x60, 0x68, 0x7e, 0xbc, 0x22, 0x29,
+	0xd8, 0x05, 0x1a, 0x1d, 0x99, 0x39, 0xbd, 0xa9, 0x35, 0x1b, 0xcf, 0xd7, 0xb8, 0xeb, 0x7f, 0x29,
+	0xc7, 0xc5, 0x6d, 0xa3, 0x75, 0xad, 0x5f, 0x17, 0x19, 0x5c, 0xf0, 0x3c, 0xed, 0xbc, 0x0c, 0x86,
+	0xba, 0x75, 0xb2, 0x2f, 0xd0, 0x83, 0xe3, 0xad, 0x69, 0xec, 0xf4, 0xa7, 0xd6, 0xec, 0x74, 0xfe,
+	0xd8, 0xb8, 0x9b, 0x5d, 0xf1, 0x92, 0xeb, 0x37, 0xaf, 0x36, 0x84, 0xe5, 0x10, 0x8c, 0xf3, 0x16,
+	0x7e, 0x19, 0xdb, 0x1e, 0x1a, 0x94, 0xdb, 0x0d, 0x4a, 0xe9, 0x93, 0x5b, 0xd2, 0x4f, 0x5a, 0x52,
+	0x9e, 0x54, 0xda, 0xb2, 0xd3, 0xbe, 0x42, 0x8f, 0x8e, 0x8d, 0x33, 0x22, 0x81, 0x6b, 0xe7, 0xce,
+	0x7f, 0x10, 0xec, 0xb6, 0xfb, 0xaa, 0xd4, 0xd9, 0x0b, 0x74, 0x9f, 0x91, 0x9c, 0x47, 0xdf, 0x20,
+	0x0e, 0xb5, 0x08, 0x09, 0x63, 0xce, 0x49, 0x89, 0x9a, 0xdc, 0x42, 0x2d, 0x84, 0x60, 0x15, 0x68,
+	0x64, 0x24, 0x6b, 0xe1, 0x33, 0x66, 0x03, 0x1a, 0xb7, 0x42, 0x43, 0x41, 0x39, 0x77, 0xa7, 0xfd,
+	0xd9, 0xe9, 0xfc, 0x5d, 0xe7, 0x43, 0x54, 0xe9, 0xc3, 0xe7, 0x26, 0x7d, 0xe7, 0x75, 0xf8, 0xfc,
+	0x56, 0xf6, 0x82, 0x1b, 0xd0, 0xc5, 0x6f, 0x0b, 0xbd, 0x88, 0x44, 0x8a, 0xff, 0x99, 0xfa, 0xc5,
+	0xc3, 0xf6, 0x2b, 0xae, 0x0e, 0xf3, 0xaf, 0xac, 0x2f, 0x1f, 0x6b, 0x5d, 0x22, 0x18, 0xe1, 0x09,
+	0x16, 0x32, 0x71, 0x13, 0xe0, 0xe5, 0x76, 0x26, 0xd4, 0x19, 0x55, 0x7f, 0xf9, 0x06, 0xdf, 0x36,
+	0xd5, 0x75, 0xaf, 0x7f, 0xe9, 0xfb, 0x3f, 0x7b, 0x67, 0x97, 0x15, 0xd2, 0x8f, 0x15, 0xae, 0xca,
+	0x43, 0xb5, 0xf1, 0x70, 0x60, 0x3a, 0x7f, 0x99, 0x9e, 0xad, 0x1f, 0xab, 0x6d, 0xd3, 0xb3, 0xdd,
+	0x78, 0xdb, 0xa6, 0x67, 0x77, 0x52, 0x0e, 0xf1, 0xf2, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78,
+	0x40, 0x95, 0x80, 0x07, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/user_list.pb.go b/googleapis/ads/googleads/v0/resources/user_list.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..966e81b94637fe41922a64e983448f7e8f54922d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/user_list.pb.go
@@ -0,0 +1,438 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/user_list.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A user list. This is a list of users a customer may target.
+type UserList struct {
+	// The resource name of the user list.
+	// User list resource names have the form:
+	//
+	// `customers/{customer_id}/userLists/{user_list_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Id of the user list.
+	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// A flag that indicates if a user may edit a list. Depends on the list
+	// ownership and list type. For example, external remarketing user lists are
+	// not editable.
+	//
+	// This field is read-only.
+	ReadOnly *wrappers.BoolValue `protobuf:"bytes,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"`
+	// Name of this user list. Depending on its access_reason, the user list name
+	// may not be unique (e.g. if access_reason=SHARED)
+	Name *wrappers.StringValue `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// Description of this user list.
+	Description *wrappers.StringValue `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+	// Membership status of this user list. Indicates whether a user list is open
+	// or active. Only open user lists can accumulate more users and can be
+	// targeted to.
+	MembershipStatus enums.UserListMembershipStatusEnum_UserListMembershipStatus `protobuf:"varint,6,opt,name=membership_status,json=membershipStatus,proto3,enum=google.ads.googleads.v0.enums.UserListMembershipStatusEnum_UserListMembershipStatus" json:"membership_status,omitempty"`
+	// An ID from external system. It is used by user list sellers to correlate
+	// IDs on their systems.
+	IntegrationCode *wrappers.StringValue `protobuf:"bytes,7,opt,name=integration_code,json=integrationCode,proto3" json:"integration_code,omitempty"`
+	// Number of days a user's cookie stays on your list since its most recent
+	// addition to the list. This field must be between 0 and 540 inclusive.
+	// However, for CRM based userlists, this field can be set to 10000 which
+	// means no expiration.
+	//
+	// It'll be ignored for logical_user_list.
+	MembershipLifeSpan *wrappers.Int64Value `protobuf:"bytes,8,opt,name=membership_life_span,json=membershipLifeSpan,proto3" json:"membership_life_span,omitempty"`
+	// Estimated number of users in this user list, on the Google Display Network.
+	// This value is null if the number of users has not yet been determined.
+	//
+	// This field is read-only.
+	SizeForDisplay *wrappers.Int64Value `protobuf:"bytes,9,opt,name=size_for_display,json=sizeForDisplay,proto3" json:"size_for_display,omitempty"`
+	// Size range in terms of number of users of the UserList, on the Google
+	// Display Network.
+	//
+	// This field is read-only.
+	SizeRangeForDisplay enums.UserListSizeRangeEnum_UserListSizeRange `protobuf:"varint,10,opt,name=size_range_for_display,json=sizeRangeForDisplay,proto3,enum=google.ads.googleads.v0.enums.UserListSizeRangeEnum_UserListSizeRange" json:"size_range_for_display,omitempty"`
+	// Estimated number of users in this user list in the google.com domain.
+	// These are the users available for targeting in Search campaigns.
+	// This value is null if the number of users has not yet been determined.
+	//
+	// This field is read-only.
+	SizeForSearch *wrappers.Int64Value `protobuf:"bytes,11,opt,name=size_for_search,json=sizeForSearch,proto3" json:"size_for_search,omitempty"`
+	// Size range in terms of number of users of the UserList, for Search ads.
+	//
+	// This field is read-only.
+	SizeRangeForSearch enums.UserListSizeRangeEnum_UserListSizeRange `protobuf:"varint,12,opt,name=size_range_for_search,json=sizeRangeForSearch,proto3,enum=google.ads.googleads.v0.enums.UserListSizeRangeEnum_UserListSizeRange" json:"size_range_for_search,omitempty"`
+	// Type of this list.
+	//
+	// This field is read-only.
+	Type enums.UserListTypeEnum_UserListType `protobuf:"varint,13,opt,name=type,proto3,enum=google.ads.googleads.v0.enums.UserListTypeEnum_UserListType" json:"type,omitempty"`
+	// Indicating the reason why this user list membership status is closed. It is
+	// only populated on lists that were automatically closed due to inactivity,
+	// and will be cleared once the list membership status becomes open.
+	ClosingReason enums.UserListClosingReasonEnum_UserListClosingReason `protobuf:"varint,14,opt,name=closing_reason,json=closingReason,proto3,enum=google.ads.googleads.v0.enums.UserListClosingReasonEnum_UserListClosingReason" json:"closing_reason,omitempty"`
+	// Indicates the reason this account has been granted access to the list.
+	// The reason can be SHARED, OWNED, LICENSED or SUBSCRIBED.
+	//
+	// This field is read-only.
+	AccessReason enums.AccessReasonEnum_AccessReason `protobuf:"varint,15,opt,name=access_reason,json=accessReason,proto3,enum=google.ads.googleads.v0.enums.AccessReasonEnum_AccessReason" json:"access_reason,omitempty"`
+	// Indicates if this share is still enabled. When a UserList is shared with
+	// the user this field is set to ENABLED. Later the userList owner can decide
+	// to revoke the share and make it DISABLED.
+	// The default value of this field is set to ENABLED.
+	AccountUserListStatus enums.UserListAccessStatusEnum_UserListAccessStatus `protobuf:"varint,16,opt,name=account_user_list_status,json=accountUserListStatus,proto3,enum=google.ads.googleads.v0.enums.UserListAccessStatusEnum_UserListAccessStatus" json:"account_user_list_status,omitempty"`
+	// Indicates if this user list is eligible for Google Search Network.
+	EligibleForSearch *wrappers.BoolValue `protobuf:"bytes,17,opt,name=eligible_for_search,json=eligibleForSearch,proto3" json:"eligible_for_search,omitempty"`
+	// Indicates this user list is eligible for Google Display Network.
+	//
+	// This field is read-only.
+	EligibleForDisplay *wrappers.BoolValue `protobuf:"bytes,18,opt,name=eligible_for_display,json=eligibleForDisplay,proto3" json:"eligible_for_display,omitempty"`
+	// The user list.
+	//
+	// Exactly one must be set.
+	//
+	// Types that are valid to be assigned to UserList:
+	//	*UserList_CrmBasedUserList
+	//	*UserList_SimilarUserList
+	UserList             isUserList_UserList `protobuf_oneof:"user_list"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *UserList) Reset()         { *m = UserList{} }
+func (m *UserList) String() string { return proto.CompactTextString(m) }
+func (*UserList) ProtoMessage()    {}
+func (*UserList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_be045e08990b40e2, []int{0}
+}
+func (m *UserList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserList.Unmarshal(m, b)
+}
+func (m *UserList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserList.Marshal(b, m, deterministic)
+}
+func (dst *UserList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserList.Merge(dst, src)
+}
+func (m *UserList) XXX_Size() int {
+	return xxx_messageInfo_UserList.Size(m)
+}
+func (m *UserList) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserList proto.InternalMessageInfo
+
+func (m *UserList) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *UserList) GetId() *wrappers.Int64Value {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *UserList) GetReadOnly() *wrappers.BoolValue {
+	if m != nil {
+		return m.ReadOnly
+	}
+	return nil
+}
+
+func (m *UserList) GetName() *wrappers.StringValue {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *UserList) GetDescription() *wrappers.StringValue {
+	if m != nil {
+		return m.Description
+	}
+	return nil
+}
+
+func (m *UserList) GetMembershipStatus() enums.UserListMembershipStatusEnum_UserListMembershipStatus {
+	if m != nil {
+		return m.MembershipStatus
+	}
+	return enums.UserListMembershipStatusEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetIntegrationCode() *wrappers.StringValue {
+	if m != nil {
+		return m.IntegrationCode
+	}
+	return nil
+}
+
+func (m *UserList) GetMembershipLifeSpan() *wrappers.Int64Value {
+	if m != nil {
+		return m.MembershipLifeSpan
+	}
+	return nil
+}
+
+func (m *UserList) GetSizeForDisplay() *wrappers.Int64Value {
+	if m != nil {
+		return m.SizeForDisplay
+	}
+	return nil
+}
+
+func (m *UserList) GetSizeRangeForDisplay() enums.UserListSizeRangeEnum_UserListSizeRange {
+	if m != nil {
+		return m.SizeRangeForDisplay
+	}
+	return enums.UserListSizeRangeEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetSizeForSearch() *wrappers.Int64Value {
+	if m != nil {
+		return m.SizeForSearch
+	}
+	return nil
+}
+
+func (m *UserList) GetSizeRangeForSearch() enums.UserListSizeRangeEnum_UserListSizeRange {
+	if m != nil {
+		return m.SizeRangeForSearch
+	}
+	return enums.UserListSizeRangeEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetType() enums.UserListTypeEnum_UserListType {
+	if m != nil {
+		return m.Type
+	}
+	return enums.UserListTypeEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetClosingReason() enums.UserListClosingReasonEnum_UserListClosingReason {
+	if m != nil {
+		return m.ClosingReason
+	}
+	return enums.UserListClosingReasonEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetAccessReason() enums.AccessReasonEnum_AccessReason {
+	if m != nil {
+		return m.AccessReason
+	}
+	return enums.AccessReasonEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetAccountUserListStatus() enums.UserListAccessStatusEnum_UserListAccessStatus {
+	if m != nil {
+		return m.AccountUserListStatus
+	}
+	return enums.UserListAccessStatusEnum_UNSPECIFIED
+}
+
+func (m *UserList) GetEligibleForSearch() *wrappers.BoolValue {
+	if m != nil {
+		return m.EligibleForSearch
+	}
+	return nil
+}
+
+func (m *UserList) GetEligibleForDisplay() *wrappers.BoolValue {
+	if m != nil {
+		return m.EligibleForDisplay
+	}
+	return nil
+}
+
+type isUserList_UserList interface {
+	isUserList_UserList()
+}
+
+type UserList_CrmBasedUserList struct {
+	CrmBasedUserList *common.CrmBasedUserListInfo `protobuf:"bytes,19,opt,name=crm_based_user_list,json=crmBasedUserList,proto3,oneof"`
+}
+
+type UserList_SimilarUserList struct {
+	SimilarUserList *common.SimilarUserListInfo `protobuf:"bytes,20,opt,name=similar_user_list,json=similarUserList,proto3,oneof"`
+}
+
+func (*UserList_CrmBasedUserList) isUserList_UserList() {}
+
+func (*UserList_SimilarUserList) isUserList_UserList() {}
+
+func (m *UserList) GetUserList() isUserList_UserList {
+	if m != nil {
+		return m.UserList
+	}
+	return nil
+}
+
+func (m *UserList) GetCrmBasedUserList() *common.CrmBasedUserListInfo {
+	if x, ok := m.GetUserList().(*UserList_CrmBasedUserList); ok {
+		return x.CrmBasedUserList
+	}
+	return nil
+}
+
+func (m *UserList) GetSimilarUserList() *common.SimilarUserListInfo {
+	if x, ok := m.GetUserList().(*UserList_SimilarUserList); ok {
+		return x.SimilarUserList
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*UserList) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _UserList_OneofMarshaler, _UserList_OneofUnmarshaler, _UserList_OneofSizer, []interface{}{
+		(*UserList_CrmBasedUserList)(nil),
+		(*UserList_SimilarUserList)(nil),
+	}
+}
+
+func _UserList_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*UserList)
+	// user_list
+	switch x := m.UserList.(type) {
+	case *UserList_CrmBasedUserList:
+		b.EncodeVarint(19<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CrmBasedUserList); err != nil {
+			return err
+		}
+	case *UserList_SimilarUserList:
+		b.EncodeVarint(20<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SimilarUserList); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("UserList.UserList has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _UserList_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*UserList)
+	switch tag {
+	case 19: // user_list.crm_based_user_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.CrmBasedUserListInfo)
+		err := b.DecodeMessage(msg)
+		m.UserList = &UserList_CrmBasedUserList{msg}
+		return true, err
+	case 20: // user_list.similar_user_list
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(common.SimilarUserListInfo)
+		err := b.DecodeMessage(msg)
+		m.UserList = &UserList_SimilarUserList{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _UserList_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*UserList)
+	// user_list
+	switch x := m.UserList.(type) {
+	case *UserList_CrmBasedUserList:
+		s := proto.Size(x.CrmBasedUserList)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *UserList_SimilarUserList:
+		s := proto.Size(x.SimilarUserList)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*UserList)(nil), "google.ads.googleads.v0.resources.UserList")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/user_list.proto", fileDescriptor_user_list_be045e08990b40e2)
+}
+
+var fileDescriptor_user_list_be045e08990b40e2 = []byte{
+	// 825 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4d, 0x4f, 0xe3, 0x46,
+	0x18, 0xc7, 0xeb, 0x40, 0x29, 0x99, 0x90, 0xb7, 0x09, 0x54, 0x16, 0xad, 0x2a, 0x68, 0x55, 0x09,
+	0xa9, 0x92, 0x9d, 0x02, 0x6a, 0x2b, 0x81, 0x5a, 0x25, 0x29, 0x50, 0x50, 0xa0, 0xc8, 0xa1, 0x1c,
+	0xaa, 0x48, 0xd6, 0xc4, 0x9e, 0x98, 0x91, 0xec, 0x19, 0x6b, 0xc6, 0xa6, 0x0a, 0x3d, 0xed, 0x61,
+	0xbf, 0xc8, 0x1e, 0xf7, 0xa3, 0xac, 0xf6, 0xb4, 0x9f, 0x68, 0xe5, 0xf1, 0x4b, 0xec, 0xb0, 0x21,
+	0x3e, 0xec, 0x6d, 0xfc, 0xf8, 0xf9, 0xfd, 0xff, 0xf3, 0x3c, 0xf3, 0x62, 0x83, 0x9f, 0x1d, 0xc6,
+	0x1c, 0x17, 0xeb, 0xc8, 0x16, 0x7a, 0x3c, 0x8c, 0x46, 0x8f, 0x5d, 0x9d, 0x63, 0xc1, 0x42, 0x6e,
+	0x61, 0xa1, 0x87, 0x02, 0x73, 0xd3, 0x25, 0x22, 0xd0, 0x7c, 0xce, 0x02, 0x06, 0xf7, 0xe3, 0x3c,
+	0x0d, 0xd9, 0x42, 0xcb, 0x10, 0xed, 0xb1, 0xab, 0x65, 0xc8, 0xae, 0xbe, 0x4c, 0xd5, 0x62, 0x9e,
+	0xc7, 0xe8, 0x5c, 0x52, 0xc4, 0x9a, 0xbb, 0x4b, 0xa7, 0x81, 0x69, 0xe8, 0x09, 0x1d, 0x59, 0x16,
+	0x16, 0xc2, 0xe4, 0x18, 0x09, 0x46, 0x13, 0xe4, 0xe4, 0x65, 0x24, 0xb3, 0x30, 0x13, 0x58, 0x04,
+	0x28, 0x08, 0x53, 0xbf, 0xd3, 0xb2, 0xb0, 0xe5, 0x32, 0x41, 0xa8, 0x53, 0xb4, 0xfe, 0xa3, 0x2c,
+	0xed, 0x61, 0x6f, 0x82, 0xb9, 0x78, 0x20, 0x7e, 0xd1, 0xfe, 0xb7, 0xb2, 0x02, 0x82, 0x3c, 0x61,
+	0x93, 0x23, 0xea, 0xe0, 0x84, 0x3c, 0x2c, 0x4b, 0x06, 0x33, 0x3f, 0x65, 0xbe, 0x4b, 0x18, 0xf9,
+	0x34, 0x09, 0xa7, 0xfa, 0x7f, 0x1c, 0xf9, 0x3e, 0xe6, 0xc9, 0x6c, 0xbe, 0x7f, 0x5f, 0x07, 0x9b,
+	0xff, 0x08, 0xcc, 0x87, 0x44, 0x04, 0xf0, 0x07, 0x50, 0x4f, 0xd7, 0xd1, 0xa4, 0xc8, 0xc3, 0xaa,
+	0xb2, 0xa7, 0x1c, 0x54, 0x8d, 0xad, 0x34, 0x78, 0x83, 0x3c, 0x0c, 0x7f, 0x02, 0x15, 0x62, 0xab,
+	0x95, 0x3d, 0xe5, 0xa0, 0x76, 0xf8, 0x4d, 0xb2, 0x09, 0xb4, 0x54, 0x5e, 0xbb, 0xa4, 0xc1, 0x2f,
+	0xc7, 0xf7, 0xc8, 0x0d, 0xb1, 0x51, 0x21, 0x36, 0xfc, 0x15, 0x54, 0x39, 0x46, 0xb6, 0xc9, 0xa8,
+	0x3b, 0x53, 0xd7, 0x24, 0xb3, 0xfb, 0x8c, 0xe9, 0x33, 0xe6, 0xc6, 0xc8, 0x66, 0x94, 0xfc, 0x37,
+	0x75, 0x67, 0xb0, 0x0b, 0xd6, 0xe5, 0x0c, 0xd6, 0x25, 0xf3, 0xed, 0x33, 0x66, 0x14, 0x70, 0x42,
+	0x9d, 0x98, 0x92, 0x99, 0xf0, 0x77, 0x50, 0xb3, 0xb1, 0xb0, 0x38, 0xf1, 0x03, 0xc2, 0xa8, 0xfa,
+	0x65, 0x09, 0x30, 0x0f, 0xc0, 0x57, 0x0a, 0x68, 0x3f, 0x5b, 0x33, 0x75, 0x63, 0x4f, 0x39, 0x68,
+	0x1c, 0xde, 0x69, 0xcb, 0xf6, 0xbd, 0x6c, 0xbd, 0x96, 0x76, 0xf0, 0x3a, 0xe3, 0x47, 0x12, 0x3f,
+	0xa3, 0xa1, 0xb7, 0xf4, 0xa5, 0xd1, 0xf2, 0x16, 0x22, 0xf0, 0x02, 0xb4, 0x08, 0x0d, 0xb0, 0xc3,
+	0x51, 0x34, 0x25, 0xd3, 0x62, 0x36, 0x56, 0xbf, 0x2a, 0x51, 0x48, 0x33, 0x47, 0x0d, 0x98, 0x8d,
+	0xe1, 0x35, 0xd8, 0xce, 0xd5, 0xe2, 0x92, 0x29, 0x36, 0x85, 0x8f, 0xa8, 0xba, 0xb9, 0x7a, 0xd9,
+	0xe0, 0x1c, 0x1c, 0x92, 0x29, 0x1e, 0xf9, 0x88, 0xc2, 0x33, 0xd0, 0x92, 0xbb, 0x71, 0xca, 0xb8,
+	0x69, 0x13, 0xe1, 0xbb, 0x68, 0xa6, 0x56, 0x57, 0x4b, 0x35, 0x22, 0xe8, 0x9c, 0xf1, 0x3f, 0x63,
+	0x04, 0xfe, 0x0f, 0xbe, 0x9e, 0x6f, 0xea, 0x82, 0x18, 0x90, 0x6d, 0x3e, 0x2f, 0xd9, 0xe6, 0x11,
+	0x79, 0xc2, 0x46, 0xa4, 0x51, 0xe8, 0x6f, 0x16, 0x35, 0x3a, 0x22, 0x1d, 0xe6, 0xcc, 0x07, 0xa0,
+	0x99, 0xd5, 0x20, 0x30, 0xe2, 0xd6, 0x83, 0x5a, 0x5b, 0x5d, 0x42, 0x3d, 0x29, 0x61, 0x24, 0x09,
+	0x38, 0x03, 0x3b, 0x0b, 0x15, 0x24, 0x52, 0x5b, 0x9f, 0xb5, 0x00, 0x98, 0x2f, 0x20, 0xb1, 0xbe,
+	0x05, 0xeb, 0xd1, 0xb9, 0x56, 0xeb, 0xd2, 0xe9, 0xb4, 0xa4, 0xd3, 0xdd, 0xcc, 0x2f, 0x9a, 0x44,
+	0x01, 0x43, 0x2a, 0xc1, 0x10, 0x34, 0x8a, 0x57, 0x9c, 0xda, 0x90, 0xda, 0x37, 0x25, 0xb5, 0x07,
+	0x31, 0x6c, 0x48, 0xb6, 0x60, 0x52, 0x78, 0x63, 0xd4, 0xad, 0xfc, 0x23, 0x44, 0xa0, 0x5e, 0xb8,
+	0xd3, 0xd5, 0x66, 0xa9, 0x8a, 0x7a, 0x92, 0xc9, 0x99, 0xe5, 0x03, 0xc6, 0x16, 0xca, 0x3d, 0xc1,
+	0xd7, 0x0a, 0x50, 0x91, 0x65, 0xb1, 0x90, 0x06, 0x66, 0xee, 0x42, 0x8d, 0x8f, 0x74, 0x4b, 0xda,
+	0x0d, 0x4b, 0x16, 0x19, 0xbb, 0x7c, 0xe2, 0x38, 0xe7, 0x5f, 0x18, 0x3b, 0x89, 0x5b, 0xb6, 0x94,
+	0xf1, 0x79, 0xbe, 0x02, 0x1d, 0xec, 0x12, 0x87, 0x4c, 0xdc, 0xc2, 0x66, 0x69, 0xaf, 0xbc, 0x08,
+	0xdb, 0x29, 0x36, 0x5f, 0xff, 0x21, 0xd8, 0x2e, 0x68, 0xa5, 0x47, 0x07, 0xae, 0x14, 0x83, 0x39,
+	0xb1, 0xf4, 0x34, 0x60, 0xd0, 0xb1, 0xb8, 0x67, 0x4e, 0x90, 0xc0, 0xf6, 0xbc, 0x45, 0x6a, 0x47,
+	0x8a, 0x1d, 0x2f, 0xed, 0x4d, 0xfc, 0x0d, 0xd7, 0x06, 0xdc, 0xeb, 0x47, 0x64, 0x5a, 0xee, 0x25,
+	0x9d, 0xb2, 0xbf, 0xbe, 0x30, 0x5a, 0xd6, 0x42, 0x1c, 0x22, 0xd0, 0x16, 0xc4, 0x23, 0x2e, 0xe2,
+	0x39, 0x93, 0x6d, 0x69, 0x72, 0xb4, 0xca, 0x64, 0x14, 0x83, 0x0b, 0x1e, 0x4d, 0x51, 0x0c, 0xf7,
+	0x6b, 0xa0, 0x9a, 0x49, 0xf7, 0x3f, 0x28, 0xe0, 0x47, 0x8b, 0x79, 0xda, 0xca, 0xdf, 0x94, 0x7e,
+	0x3d, 0x15, 0xb8, 0x8d, 0x1a, 0x76, 0xab, 0xfc, 0x7b, 0x95, 0x30, 0x0e, 0x73, 0x11, 0x75, 0x34,
+	0xc6, 0x1d, 0xdd, 0xc1, 0x54, 0xb6, 0x33, 0xfd, 0xda, 0xfa, 0x44, 0xbc, 0xf0, 0xb3, 0x74, 0x92,
+	0x8d, 0xde, 0x54, 0xd6, 0x2e, 0x7a, 0xbd, 0xb7, 0x95, 0xfd, 0x8b, 0x58, 0xb2, 0x67, 0x0b, 0x2d,
+	0x1e, 0x46, 0xa3, 0xfb, 0xae, 0x66, 0xa4, 0x99, 0xef, 0xd2, 0x9c, 0x71, 0xcf, 0x16, 0xe3, 0x2c,
+	0x67, 0x7c, 0xdf, 0x1d, 0x67, 0x39, 0x93, 0x0d, 0x39, 0x89, 0xa3, 0x8f, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0xbc, 0x72, 0x4d, 0xf8, 0xb0, 0x09, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/resources/video.pb.go b/googleapis/ads/googleads/v0/resources/video.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..eca780aa42728544d3c640bfe2cbcb7d95e5d299
--- /dev/null
+++ b/googleapis/ads/googleads/v0/resources/video.pb.go
@@ -0,0 +1,132 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/resources/video.proto
+
+package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A video.
+type Video struct {
+	// The resource name of the video.
+	// Video resource names have the form:
+	//
+	// `customers/{customer_id}/videos/{video_id}`
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// The ID of the video.
+	Id *wrappers.StringValue `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	// The owner channel id of the video.
+	ChannelId *wrappers.StringValue `protobuf:"bytes,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"`
+	// The duration of the video in milliseconds.
+	DurationMillis *wrappers.Int64Value `protobuf:"bytes,4,opt,name=duration_millis,json=durationMillis,proto3" json:"duration_millis,omitempty"`
+	// The title of the video.
+	Title                *wrappers.StringValue `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *Video) Reset()         { *m = Video{} }
+func (m *Video) String() string { return proto.CompactTextString(m) }
+func (*Video) ProtoMessage()    {}
+func (*Video) Descriptor() ([]byte, []int) {
+	return fileDescriptor_video_458a9931a36deb41, []int{0}
+}
+func (m *Video) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Video.Unmarshal(m, b)
+}
+func (m *Video) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Video.Marshal(b, m, deterministic)
+}
+func (dst *Video) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Video.Merge(dst, src)
+}
+func (m *Video) XXX_Size() int {
+	return xxx_messageInfo_Video.Size(m)
+}
+func (m *Video) XXX_DiscardUnknown() {
+	xxx_messageInfo_Video.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Video proto.InternalMessageInfo
+
+func (m *Video) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func (m *Video) GetId() *wrappers.StringValue {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+func (m *Video) GetChannelId() *wrappers.StringValue {
+	if m != nil {
+		return m.ChannelId
+	}
+	return nil
+}
+
+func (m *Video) GetDurationMillis() *wrappers.Int64Value {
+	if m != nil {
+		return m.DurationMillis
+	}
+	return nil
+}
+
+func (m *Video) GetTitle() *wrappers.StringValue {
+	if m != nil {
+		return m.Title
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Video)(nil), "google.ads.googleads.v0.resources.Video")
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/resources/video.proto", fileDescriptor_video_458a9931a36deb41)
+}
+
+var fileDescriptor_video_458a9931a36deb41 = []byte{
+	// 336 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x4f, 0x4b, 0xfb, 0x30,
+	0x18, 0xc7, 0x69, 0xf7, 0xdb, 0x0f, 0x16, 0xff, 0x41, 0x4f, 0x45, 0x45, 0x36, 0x45, 0xd8, 0x41,
+	0xd3, 0x32, 0xc5, 0xcb, 0x4e, 0x1d, 0xc2, 0x98, 0xa0, 0x8c, 0x09, 0x3d, 0x48, 0x61, 0x64, 0x4b,
+	0x8c, 0x81, 0x34, 0x29, 0x49, 0x3b, 0x5f, 0x87, 0x6f, 0xc1, 0xa3, 0x2f, 0xc5, 0x8b, 0x6f, 0x49,
+	0x9a, 0x34, 0xbd, 0x08, 0xba, 0xdb, 0x97, 0xf0, 0xf9, 0x7e, 0x9e, 0xf0, 0x3c, 0xe0, 0x92, 0x4a,
+	0x49, 0x39, 0x89, 0x10, 0xd6, 0x91, 0x8d, 0x75, 0xda, 0xc4, 0x91, 0x22, 0x5a, 0x56, 0x6a, 0x4d,
+	0x74, 0xb4, 0x61, 0x98, 0x48, 0x58, 0x28, 0x59, 0xca, 0x60, 0x60, 0x19, 0x88, 0xb0, 0x86, 0x2d,
+	0x0e, 0x37, 0x31, 0x6c, 0xf1, 0xc3, 0x93, 0xc6, 0x68, 0x0a, 0xab, 0xea, 0x39, 0x7a, 0x55, 0xa8,
+	0x28, 0x88, 0xd2, 0x56, 0x71, 0xfa, 0xe6, 0x83, 0x6e, 0x5a, 0x2b, 0x83, 0x33, 0xb0, 0xe7, 0x6a,
+	0x4b, 0x81, 0x72, 0x12, 0x7a, 0x7d, 0x6f, 0xd8, 0x5b, 0xec, 0xba, 0xc7, 0x07, 0x94, 0x93, 0xe0,
+	0x02, 0xf8, 0x0c, 0x87, 0x7e, 0xdf, 0x1b, 0xee, 0x8c, 0x8e, 0x9b, 0x99, 0xd0, 0xb9, 0xe1, 0x63,
+	0xa9, 0x98, 0xa0, 0x29, 0xe2, 0x15, 0x59, 0xf8, 0x0c, 0x07, 0x63, 0x00, 0xd6, 0x2f, 0x48, 0x08,
+	0xc2, 0x97, 0x0c, 0x87, 0x9d, 0x2d, 0x5a, 0xbd, 0x86, 0x9f, 0xe1, 0xe0, 0x16, 0x1c, 0xe0, 0x4a,
+	0xa1, 0x92, 0x49, 0xb1, 0xcc, 0x19, 0xe7, 0x4c, 0x87, 0xff, 0x8c, 0xe1, 0xe8, 0x87, 0x61, 0x26,
+	0xca, 0x9b, 0x6b, 0x2b, 0xd8, 0x77, 0x9d, 0x7b, 0x53, 0x09, 0x46, 0xa0, 0x5b, 0xb2, 0x92, 0x93,
+	0xb0, 0xbb, 0xc5, 0x74, 0x8b, 0x4e, 0xbe, 0x3c, 0x70, 0xbe, 0x96, 0x39, 0xfc, 0x73, 0xbb, 0x13,
+	0x60, 0x56, 0x37, 0xaf, 0x5d, 0x73, 0xef, 0xe9, 0xae, 0x29, 0x50, 0xc9, 0x91, 0xa0, 0x50, 0x2a,
+	0x1a, 0x51, 0x22, 0xcc, 0x24, 0x77, 0xcd, 0x82, 0xe9, 0x5f, 0x8e, 0x3b, 0x6e, 0xd3, 0xbb, 0xdf,
+	0x99, 0x26, 0xc9, 0x87, 0x3f, 0x98, 0x5a, 0x65, 0x82, 0x35, 0xb4, 0xb1, 0x4e, 0x69, 0x0c, 0x17,
+	0x8e, 0xfc, 0x74, 0x4c, 0x96, 0x60, 0x9d, 0xb5, 0x4c, 0x96, 0xc6, 0x59, 0xcb, 0xac, 0xfe, 0x9b,
+	0x4f, 0x5c, 0x7d, 0x07, 0x00, 0x00, 0xff, 0xff, 0x47, 0x06, 0x9e, 0x37, 0x60, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/account_budget_proposal_service.pb.go b/googleapis/ads/googleads/v0/services/account_budget_proposal_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6365476abeb6cf08de104787960bd10ed5dc72ac
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/account_budget_proposal_service.pb.go
@@ -0,0 +1,521 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/account_budget_proposal_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for
+// [AccountBudgetProposalService.GetAccountBudgetProposal][google.ads.googleads.v0.services.AccountBudgetProposalService.GetAccountBudgetProposal].
+type GetAccountBudgetProposalRequest struct {
+	// The resource name of the account-level budget proposal to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAccountBudgetProposalRequest) Reset()         { *m = GetAccountBudgetProposalRequest{} }
+func (m *GetAccountBudgetProposalRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAccountBudgetProposalRequest) ProtoMessage()    {}
+func (*GetAccountBudgetProposalRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_service_3710de127b17772d, []int{0}
+}
+func (m *GetAccountBudgetProposalRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAccountBudgetProposalRequest.Unmarshal(m, b)
+}
+func (m *GetAccountBudgetProposalRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAccountBudgetProposalRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAccountBudgetProposalRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAccountBudgetProposalRequest.Merge(dst, src)
+}
+func (m *GetAccountBudgetProposalRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAccountBudgetProposalRequest.Size(m)
+}
+func (m *GetAccountBudgetProposalRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAccountBudgetProposalRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAccountBudgetProposalRequest proto.InternalMessageInfo
+
+func (m *GetAccountBudgetProposalRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [AccountBudgetProposalService.MutateAccountBudgetProposal][google.ads.googleads.v0.services.AccountBudgetProposalService.MutateAccountBudgetProposal].
+type MutateAccountBudgetProposalRequest struct {
+	// The ID of the customer.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The operation to perform on an individual account-level budget proposal.
+	Operation            *AccountBudgetProposalOperation `protobuf:"bytes,2,opt,name=operation,proto3" json:"operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateAccountBudgetProposalRequest) Reset()         { *m = MutateAccountBudgetProposalRequest{} }
+func (m *MutateAccountBudgetProposalRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAccountBudgetProposalRequest) ProtoMessage()    {}
+func (*MutateAccountBudgetProposalRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_service_3710de127b17772d, []int{1}
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAccountBudgetProposalRequest.Unmarshal(m, b)
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAccountBudgetProposalRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateAccountBudgetProposalRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAccountBudgetProposalRequest.Merge(dst, src)
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAccountBudgetProposalRequest.Size(m)
+}
+func (m *MutateAccountBudgetProposalRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAccountBudgetProposalRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAccountBudgetProposalRequest proto.InternalMessageInfo
+
+func (m *MutateAccountBudgetProposalRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAccountBudgetProposalRequest) GetOperation() *AccountBudgetProposalOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+// A single operation to propose the creation of a new account-level budget or
+// edit/end/remove an existing one.
+type AccountBudgetProposalOperation struct {
+	// FieldMask that determines which budget fields are modified.  While budgets
+	// may be modified, proposals that propose such modifications are final.
+	// Therefore, update operations are not supported for proposals.
+	//
+	// Proposals that modify budgets have the 'update' proposal type.  Specifying
+	// a mask for any other proposal type is considered an error.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AccountBudgetProposalOperation_Create
+	//	*AccountBudgetProposalOperation_Remove
+	Operation            isAccountBudgetProposalOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                   `json:"-"`
+	XXX_unrecognized     []byte                                     `json:"-"`
+	XXX_sizecache        int32                                      `json:"-"`
+}
+
+func (m *AccountBudgetProposalOperation) Reset()         { *m = AccountBudgetProposalOperation{} }
+func (m *AccountBudgetProposalOperation) String() string { return proto.CompactTextString(m) }
+func (*AccountBudgetProposalOperation) ProtoMessage()    {}
+func (*AccountBudgetProposalOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_service_3710de127b17772d, []int{2}
+}
+func (m *AccountBudgetProposalOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountBudgetProposalOperation.Unmarshal(m, b)
+}
+func (m *AccountBudgetProposalOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountBudgetProposalOperation.Marshal(b, m, deterministic)
+}
+func (dst *AccountBudgetProposalOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountBudgetProposalOperation.Merge(dst, src)
+}
+func (m *AccountBudgetProposalOperation) XXX_Size() int {
+	return xxx_messageInfo_AccountBudgetProposalOperation.Size(m)
+}
+func (m *AccountBudgetProposalOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountBudgetProposalOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountBudgetProposalOperation proto.InternalMessageInfo
+
+func (m *AccountBudgetProposalOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAccountBudgetProposalOperation_Operation interface {
+	isAccountBudgetProposalOperation_Operation()
+}
+
+type AccountBudgetProposalOperation_Create struct {
+	Create *resources.AccountBudgetProposal `protobuf:"bytes,2,opt,name=create,proto3,oneof"`
+}
+
+type AccountBudgetProposalOperation_Remove struct {
+	Remove string `protobuf:"bytes,1,opt,name=remove,proto3,oneof"`
+}
+
+func (*AccountBudgetProposalOperation_Create) isAccountBudgetProposalOperation_Operation() {}
+
+func (*AccountBudgetProposalOperation_Remove) isAccountBudgetProposalOperation_Operation() {}
+
+func (m *AccountBudgetProposalOperation) GetOperation() isAccountBudgetProposalOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposalOperation) GetCreate() *resources.AccountBudgetProposal {
+	if x, ok := m.GetOperation().(*AccountBudgetProposalOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AccountBudgetProposalOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AccountBudgetProposalOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AccountBudgetProposalOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AccountBudgetProposalOperation_OneofMarshaler, _AccountBudgetProposalOperation_OneofUnmarshaler, _AccountBudgetProposalOperation_OneofSizer, []interface{}{
+		(*AccountBudgetProposalOperation_Create)(nil),
+		(*AccountBudgetProposalOperation_Remove)(nil),
+	}
+}
+
+func _AccountBudgetProposalOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AccountBudgetProposalOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AccountBudgetProposalOperation_Create:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *AccountBudgetProposalOperation_Remove:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("AccountBudgetProposalOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AccountBudgetProposalOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AccountBudgetProposalOperation)
+	switch tag {
+	case 2: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AccountBudgetProposal)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AccountBudgetProposalOperation_Create{msg}
+		return true, err
+	case 1: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &AccountBudgetProposalOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AccountBudgetProposalOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AccountBudgetProposalOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AccountBudgetProposalOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AccountBudgetProposalOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for account-level budget mutate operations.
+type MutateAccountBudgetProposalResponse struct {
+	// The result of the mutate.
+	Result               *MutateAccountBudgetProposalResult `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateAccountBudgetProposalResponse) Reset()         { *m = MutateAccountBudgetProposalResponse{} }
+func (m *MutateAccountBudgetProposalResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAccountBudgetProposalResponse) ProtoMessage()    {}
+func (*MutateAccountBudgetProposalResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_service_3710de127b17772d, []int{3}
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAccountBudgetProposalResponse.Unmarshal(m, b)
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAccountBudgetProposalResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateAccountBudgetProposalResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAccountBudgetProposalResponse.Merge(dst, src)
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAccountBudgetProposalResponse.Size(m)
+}
+func (m *MutateAccountBudgetProposalResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAccountBudgetProposalResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAccountBudgetProposalResponse proto.InternalMessageInfo
+
+func (m *MutateAccountBudgetProposalResponse) GetResult() *MutateAccountBudgetProposalResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// The result for the account budget proposal mutate.
+type MutateAccountBudgetProposalResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAccountBudgetProposalResult) Reset()         { *m = MutateAccountBudgetProposalResult{} }
+func (m *MutateAccountBudgetProposalResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAccountBudgetProposalResult) ProtoMessage()    {}
+func (*MutateAccountBudgetProposalResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_proposal_service_3710de127b17772d, []int{4}
+}
+func (m *MutateAccountBudgetProposalResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAccountBudgetProposalResult.Unmarshal(m, b)
+}
+func (m *MutateAccountBudgetProposalResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAccountBudgetProposalResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateAccountBudgetProposalResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAccountBudgetProposalResult.Merge(dst, src)
+}
+func (m *MutateAccountBudgetProposalResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAccountBudgetProposalResult.Size(m)
+}
+func (m *MutateAccountBudgetProposalResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAccountBudgetProposalResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAccountBudgetProposalResult proto.InternalMessageInfo
+
+func (m *MutateAccountBudgetProposalResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAccountBudgetProposalRequest)(nil), "google.ads.googleads.v0.services.GetAccountBudgetProposalRequest")
+	proto.RegisterType((*MutateAccountBudgetProposalRequest)(nil), "google.ads.googleads.v0.services.MutateAccountBudgetProposalRequest")
+	proto.RegisterType((*AccountBudgetProposalOperation)(nil), "google.ads.googleads.v0.services.AccountBudgetProposalOperation")
+	proto.RegisterType((*MutateAccountBudgetProposalResponse)(nil), "google.ads.googleads.v0.services.MutateAccountBudgetProposalResponse")
+	proto.RegisterType((*MutateAccountBudgetProposalResult)(nil), "google.ads.googleads.v0.services.MutateAccountBudgetProposalResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AccountBudgetProposalServiceClient is the client API for AccountBudgetProposalService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AccountBudgetProposalServiceClient interface {
+	// Returns an account-level budget proposal in full detail.
+	GetAccountBudgetProposal(ctx context.Context, in *GetAccountBudgetProposalRequest, opts ...grpc.CallOption) (*resources.AccountBudgetProposal, error)
+	// Creates, updates, or removes account budget proposals.  Operation statuses
+	// are returned.
+	MutateAccountBudgetProposal(ctx context.Context, in *MutateAccountBudgetProposalRequest, opts ...grpc.CallOption) (*MutateAccountBudgetProposalResponse, error)
+}
+
+type accountBudgetProposalServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAccountBudgetProposalServiceClient(cc *grpc.ClientConn) AccountBudgetProposalServiceClient {
+	return &accountBudgetProposalServiceClient{cc}
+}
+
+func (c *accountBudgetProposalServiceClient) GetAccountBudgetProposal(ctx context.Context, in *GetAccountBudgetProposalRequest, opts ...grpc.CallOption) (*resources.AccountBudgetProposal, error) {
+	out := new(resources.AccountBudgetProposal)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AccountBudgetProposalService/GetAccountBudgetProposal", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountBudgetProposalServiceClient) MutateAccountBudgetProposal(ctx context.Context, in *MutateAccountBudgetProposalRequest, opts ...grpc.CallOption) (*MutateAccountBudgetProposalResponse, error) {
+	out := new(MutateAccountBudgetProposalResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AccountBudgetProposalService/MutateAccountBudgetProposal", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AccountBudgetProposalServiceServer is the server API for AccountBudgetProposalService service.
+type AccountBudgetProposalServiceServer interface {
+	// Returns an account-level budget proposal in full detail.
+	GetAccountBudgetProposal(context.Context, *GetAccountBudgetProposalRequest) (*resources.AccountBudgetProposal, error)
+	// Creates, updates, or removes account budget proposals.  Operation statuses
+	// are returned.
+	MutateAccountBudgetProposal(context.Context, *MutateAccountBudgetProposalRequest) (*MutateAccountBudgetProposalResponse, error)
+}
+
+func RegisterAccountBudgetProposalServiceServer(s *grpc.Server, srv AccountBudgetProposalServiceServer) {
+	s.RegisterService(&_AccountBudgetProposalService_serviceDesc, srv)
+}
+
+func _AccountBudgetProposalService_GetAccountBudgetProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAccountBudgetProposalRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountBudgetProposalServiceServer).GetAccountBudgetProposal(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AccountBudgetProposalService/GetAccountBudgetProposal",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountBudgetProposalServiceServer).GetAccountBudgetProposal(ctx, req.(*GetAccountBudgetProposalRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AccountBudgetProposalService_MutateAccountBudgetProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAccountBudgetProposalRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountBudgetProposalServiceServer).MutateAccountBudgetProposal(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AccountBudgetProposalService/MutateAccountBudgetProposal",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountBudgetProposalServiceServer).MutateAccountBudgetProposal(ctx, req.(*MutateAccountBudgetProposalRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AccountBudgetProposalService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AccountBudgetProposalService",
+	HandlerType: (*AccountBudgetProposalServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAccountBudgetProposal",
+			Handler:    _AccountBudgetProposalService_GetAccountBudgetProposal_Handler,
+		},
+		{
+			MethodName: "MutateAccountBudgetProposal",
+			Handler:    _AccountBudgetProposalService_MutateAccountBudgetProposal_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/account_budget_proposal_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/account_budget_proposal_service.proto", fileDescriptor_account_budget_proposal_service_3710de127b17772d)
+}
+
+var fileDescriptor_account_budget_proposal_service_3710de127b17772d = []byte{
+	// 586 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x31, 0x6f, 0xd3, 0x40,
+	0x14, 0xe6, 0x52, 0x29, 0x52, 0x2f, 0xb0, 0xdc, 0x14, 0x85, 0x8a, 0xa6, 0x2e, 0x43, 0x95, 0xe1,
+	0x1c, 0x95, 0xa5, 0x4a, 0x54, 0x11, 0x07, 0x48, 0xc2, 0x50, 0x88, 0x8c, 0xd4, 0x01, 0x22, 0xac,
+	0x8b, 0x7d, 0xb5, 0xac, 0xda, 0x3e, 0xe3, 0x3b, 0x67, 0xa9, 0xba, 0xf4, 0x2f, 0xf0, 0x0f, 0x90,
+	0x58, 0xf8, 0x29, 0xac, 0x2c, 0x30, 0x22, 0xb1, 0x23, 0xf1, 0x0b, 0x90, 0x7d, 0x77, 0x69, 0x2b,
+	0xc5, 0x36, 0xa2, 0xdb, 0xb3, 0xef, 0xdd, 0xf7, 0x7d, 0xef, 0x7b, 0xef, 0x1d, 0x9c, 0xf8, 0x8c,
+	0xf9, 0x21, 0x35, 0x89, 0xc7, 0x4d, 0x19, 0xe6, 0xd1, 0xaa, 0x6f, 0x72, 0x9a, 0xae, 0x02, 0x97,
+	0x72, 0x93, 0xb8, 0x2e, 0xcb, 0x62, 0xe1, 0x2c, 0x33, 0xcf, 0xa7, 0xc2, 0x49, 0x52, 0x96, 0x30,
+	0x4e, 0x42, 0x47, 0x25, 0xe0, 0x24, 0x65, 0x82, 0xa1, 0xae, 0xbc, 0x8c, 0x89, 0xc7, 0xf1, 0x1a,
+	0x07, 0xaf, 0xfa, 0x58, 0xe3, 0x74, 0x9e, 0x96, 0x31, 0xa5, 0x94, 0xb3, 0x2c, 0xad, 0xa0, 0x92,
+	0x14, 0x9d, 0x1d, 0x0d, 0x90, 0x04, 0x26, 0x89, 0x63, 0x26, 0x88, 0x08, 0x58, 0xcc, 0xd5, 0xa9,
+	0x12, 0x60, 0x16, 0x5f, 0xcb, 0xec, 0xcc, 0x3c, 0x0b, 0x68, 0xe8, 0x39, 0x11, 0xe1, 0xe7, 0x32,
+	0xc3, 0x98, 0xc0, 0xdd, 0x29, 0x15, 0x96, 0xe4, 0x18, 0x17, 0x14, 0x73, 0xc5, 0x60, 0xd3, 0x0f,
+	0x19, 0xe5, 0x02, 0xed, 0xc3, 0x07, 0x5a, 0x8d, 0x13, 0x93, 0x88, 0xb6, 0x41, 0x17, 0x1c, 0x6c,
+	0xdb, 0xf7, 0xf5, 0xcf, 0x57, 0x24, 0xa2, 0xc6, 0x67, 0x00, 0x8d, 0x93, 0x4c, 0x10, 0x41, 0x2b,
+	0xb1, 0x76, 0x61, 0xcb, 0xcd, 0xb8, 0x60, 0x11, 0x4d, 0x9d, 0xc0, 0x53, 0x48, 0x50, 0xff, 0x7a,
+	0xe9, 0xa1, 0xf7, 0x70, 0x9b, 0x25, 0x34, 0x2d, 0xaa, 0x68, 0x37, 0xba, 0xe0, 0xa0, 0x75, 0x38,
+	0xc2, 0x75, 0x36, 0xe2, 0x8d, 0x9c, 0xaf, 0x35, 0x8e, 0x7d, 0x0d, 0x69, 0x7c, 0x07, 0xf0, 0x51,
+	0x75, 0x36, 0x1a, 0xc2, 0x56, 0x96, 0x78, 0x44, 0xd0, 0xc2, 0xa7, 0xf6, 0x56, 0x21, 0xa2, 0xa3,
+	0x45, 0x68, 0x2b, 0xf1, 0x24, 0xb7, 0xf2, 0x84, 0xf0, 0x73, 0x1b, 0xca, 0xf4, 0x3c, 0x46, 0x36,
+	0x6c, 0xba, 0x29, 0x25, 0x82, 0x2a, 0xf1, 0x47, 0xa5, 0xe2, 0xd7, 0x1d, 0xde, 0xac, 0x7e, 0x76,
+	0xcf, 0x56, 0x48, 0xa8, 0x0d, 0x9b, 0x29, 0x8d, 0xd8, 0x4a, 0x39, 0x9f, 0x9f, 0xc8, 0xef, 0x71,
+	0xeb, 0x86, 0x5b, 0xc6, 0x15, 0x80, 0xfb, 0x95, 0x2d, 0xe0, 0x09, 0x8b, 0x39, 0x45, 0xef, 0x72,
+	0x38, 0x9e, 0x85, 0x42, 0x49, 0x7c, 0x56, 0xef, 0x6f, 0x35, 0x6c, 0x16, 0x0a, 0x5b, 0x41, 0x1a,
+	0x33, 0xb8, 0x57, 0x9b, 0xfc, 0x4f, 0x13, 0x75, 0xf8, 0x7b, 0x0b, 0xee, 0x6c, 0x04, 0x79, 0x23,
+	0x55, 0xa1, 0x1f, 0x00, 0xb6, 0xcb, 0x66, 0x17, 0x59, 0xf5, 0x45, 0xd5, 0xcc, 0x7d, 0xe7, 0xbf,
+	0x5b, 0x67, 0x8c, 0xae, 0xbe, 0xfd, 0xfa, 0xd8, 0x18, 0xa0, 0xa3, 0x7c, 0x93, 0x2f, 0x6e, 0x95,
+	0x7a, 0xac, 0x67, 0x9d, 0x9b, 0x3d, 0xbd, 0xda, 0xb7, 0x6f, 0x73, 0xb3, 0x77, 0x89, 0xfe, 0x00,
+	0xf8, 0xb0, 0xc2, 0x47, 0xf4, 0xfc, 0x8e, 0x3d, 0x93, 0x15, 0xbe, 0xb8, 0x6b, 0xe7, 0x8b, 0x81,
+	0x32, 0x26, 0x45, 0xb9, 0x23, 0x63, 0x98, 0x97, 0x7b, 0x5d, 0xdf, 0xc5, 0x8d, 0x4d, 0x3f, 0xee,
+	0x5d, 0x96, 0x54, 0x3b, 0x88, 0x0a, 0x86, 0x01, 0xe8, 0x8d, 0x7f, 0x02, 0xf8, 0xd8, 0x65, 0x51,
+	0xad, 0xa8, 0xf1, 0x5e, 0xd5, 0x5c, 0xcc, 0xf3, 0x05, 0x9d, 0x83, 0xb7, 0x33, 0x05, 0xe3, 0xb3,
+	0x90, 0xc4, 0x3e, 0x66, 0xa9, 0x6f, 0xfa, 0x34, 0x2e, 0xd6, 0x57, 0x3f, 0xb5, 0x49, 0xc0, 0xcb,
+	0xdf, 0xf8, 0xa1, 0x0e, 0x3e, 0x35, 0xb6, 0xa6, 0x96, 0xf5, 0xa5, 0xd1, 0x9d, 0x4a, 0x40, 0xcb,
+	0xe3, 0x58, 0x86, 0x79, 0x74, 0xda, 0xc7, 0x8a, 0x98, 0x7f, 0xd5, 0x29, 0x0b, 0xcb, 0xe3, 0x8b,
+	0x75, 0xca, 0xe2, 0xb4, 0xbf, 0xd0, 0x29, 0xcb, 0x66, 0x21, 0xe0, 0xc9, 0xdf, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xf1, 0xe7, 0x42, 0x94, 0x63, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/account_budget_service.pb.go b/googleapis/ads/googleads/v0/services/account_budget_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..18f6cb357784443665a56095f9fd72544e1f2abd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/account_budget_service.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/account_budget_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for
+// [AccountBudgetService.GetAccountBudget][google.ads.googleads.v0.services.AccountBudgetService.GetAccountBudget].
+type GetAccountBudgetRequest struct {
+	// The resource name of the account-level budget to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAccountBudgetRequest) Reset()         { *m = GetAccountBudgetRequest{} }
+func (m *GetAccountBudgetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAccountBudgetRequest) ProtoMessage()    {}
+func (*GetAccountBudgetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_account_budget_service_35b87f079f622fe3, []int{0}
+}
+func (m *GetAccountBudgetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAccountBudgetRequest.Unmarshal(m, b)
+}
+func (m *GetAccountBudgetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAccountBudgetRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAccountBudgetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAccountBudgetRequest.Merge(dst, src)
+}
+func (m *GetAccountBudgetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAccountBudgetRequest.Size(m)
+}
+func (m *GetAccountBudgetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAccountBudgetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAccountBudgetRequest proto.InternalMessageInfo
+
+func (m *GetAccountBudgetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAccountBudgetRequest)(nil), "google.ads.googleads.v0.services.GetAccountBudgetRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AccountBudgetServiceClient is the client API for AccountBudgetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AccountBudgetServiceClient interface {
+	// Returns an account-level budget in full detail.
+	GetAccountBudget(ctx context.Context, in *GetAccountBudgetRequest, opts ...grpc.CallOption) (*resources.AccountBudget, error)
+}
+
+type accountBudgetServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAccountBudgetServiceClient(cc *grpc.ClientConn) AccountBudgetServiceClient {
+	return &accountBudgetServiceClient{cc}
+}
+
+func (c *accountBudgetServiceClient) GetAccountBudget(ctx context.Context, in *GetAccountBudgetRequest, opts ...grpc.CallOption) (*resources.AccountBudget, error) {
+	out := new(resources.AccountBudget)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AccountBudgetService/GetAccountBudget", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AccountBudgetServiceServer is the server API for AccountBudgetService service.
+type AccountBudgetServiceServer interface {
+	// Returns an account-level budget in full detail.
+	GetAccountBudget(context.Context, *GetAccountBudgetRequest) (*resources.AccountBudget, error)
+}
+
+func RegisterAccountBudgetServiceServer(s *grpc.Server, srv AccountBudgetServiceServer) {
+	s.RegisterService(&_AccountBudgetService_serviceDesc, srv)
+}
+
+func _AccountBudgetService_GetAccountBudget_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAccountBudgetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountBudgetServiceServer).GetAccountBudget(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AccountBudgetService/GetAccountBudget",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountBudgetServiceServer).GetAccountBudget(ctx, req.(*GetAccountBudgetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AccountBudgetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AccountBudgetService",
+	HandlerType: (*AccountBudgetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAccountBudget",
+			Handler:    _AccountBudgetService_GetAccountBudget_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/account_budget_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/account_budget_service.proto", fileDescriptor_account_budget_service_35b87f079f622fe3)
+}
+
+var fileDescriptor_account_budget_service_35b87f079f622fe3 = []byte{
+	// 344 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xc4, 0xe4, 0xe4, 0xfc, 0xd2, 0xbc, 0x92, 0xf8, 0xa4,
+	0xd2, 0x94, 0xf4, 0xd4, 0x92, 0x78, 0xa8, 0xb8, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02,
+	0x44, 0x8f, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xbb, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xbb, 0x94,
+	0x19, 0x2e, 0x0b, 0x8a, 0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0x30, 0x6d, 0x80, 0x98, 0x2c, 0x25, 0x03,
+	0xd3, 0x57, 0x90, 0xa9, 0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c,
+	0x91, 0x55, 0xb2, 0xe3, 0x12, 0x77, 0x4f, 0x2d, 0x71, 0x84, 0x68, 0x74, 0x02, 0xeb, 0x0b, 0x4a,
+	0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0x11, 0x52, 0xe6, 0xe2, 0x85, 0x19, 0x1d, 0x9f, 0x97, 0x98, 0x9b,
+	0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x03, 0x13, 0xf4, 0x4b, 0xcc, 0x4d, 0x35, 0xba,
+	0xc4, 0xc8, 0x25, 0x82, 0xa2, 0x3b, 0x18, 0xe2, 0x5e, 0xa1, 0x9d, 0x8c, 0x5c, 0x02, 0xe8, 0x26,
+	0x0b, 0x59, 0xea, 0x11, 0xf2, 0xa6, 0x1e, 0x0e, 0xd7, 0x48, 0x19, 0xe0, 0xd4, 0x0a, 0xf7, 0xbf,
+	0x1e, 0x8a, 0x46, 0x25, 0x8b, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x19, 0x09, 0x19, 0x80, 0x02, 0xa9,
+	0x1a, 0xc5, 0x2b, 0xb6, 0xc9, 0xa5, 0xc5, 0x25, 0xf9, 0xb9, 0xa9, 0x45, 0xc5, 0xfa, 0x5a, 0xb0,
+	0x50, 0x83, 0xe8, 0x2a, 0xd6, 0xd7, 0xaa, 0x75, 0xba, 0xc9, 0xc8, 0xa5, 0x92, 0x9c, 0x9f, 0x4b,
+	0xd0, 0xb1, 0x4e, 0x92, 0xd8, 0xbc, 0x1e, 0x00, 0x0a, 0xd8, 0x00, 0xc6, 0x28, 0x0f, 0xa8, 0xf6,
+	0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0x70, 0xb0,
+	0xc3, 0x22, 0xb0, 0x20, 0xb3, 0x18, 0x77, 0x82, 0xb1, 0x86, 0x31, 0x16, 0x31, 0x31, 0xbb, 0x3b,
+	0x3a, 0xae, 0x62, 0x52, 0x70, 0x87, 0x18, 0xe8, 0x98, 0x52, 0xac, 0x07, 0x61, 0x82, 0x58, 0x61,
+	0x06, 0x7a, 0x50, 0x8b, 0x8b, 0x4f, 0xc1, 0x94, 0xc4, 0x38, 0xa6, 0x14, 0xc7, 0xc0, 0x95, 0xc4,
+	0x84, 0x19, 0xc4, 0xc0, 0x94, 0x24, 0xb1, 0x81, 0x1d, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff,
+	0xcd, 0xfb, 0x18, 0x58, 0xb0, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/ad_group_ad_service.pb.go b/googleapis/ads/googleads/v0/services/ad_group_ad_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b3e1de15cd017f1ccf0d6e536d85af054e1e04ae
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/ad_group_ad_service.pb.go
@@ -0,0 +1,558 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/ad_group_ad_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [AdGroupAdService.GetAdGroupAd][google.ads.googleads.v0.services.AdGroupAdService.GetAdGroupAd].
+type GetAdGroupAdRequest struct {
+	// The resource name of the ad to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupAdRequest) Reset()         { *m = GetAdGroupAdRequest{} }
+func (m *GetAdGroupAdRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupAdRequest) ProtoMessage()    {}
+func (*GetAdGroupAdRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_service_f5afe93c5fff3c55, []int{0}
+}
+func (m *GetAdGroupAdRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupAdRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupAdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupAdRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAdGroupAdRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupAdRequest.Merge(dst, src)
+}
+func (m *GetAdGroupAdRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupAdRequest.Size(m)
+}
+func (m *GetAdGroupAdRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupAdRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupAdRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupAdRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupAdService.MutateAdGroupAds][google.ads.googleads.v0.services.AdGroupAdService.MutateAdGroupAds].
+type MutateAdGroupAdsRequest struct {
+	// The ID of the customer whose ads are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual ads.
+	Operations           []*AdGroupAdOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MutateAdGroupAdsRequest) Reset()         { *m = MutateAdGroupAdsRequest{} }
+func (m *MutateAdGroupAdsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdsRequest) ProtoMessage()    {}
+func (*MutateAdGroupAdsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_service_f5afe93c5fff3c55, []int{1}
+}
+func (m *MutateAdGroupAdsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupAdsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdsRequest.Merge(dst, src)
+}
+func (m *MutateAdGroupAdsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdsRequest.Size(m)
+}
+func (m *MutateAdGroupAdsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupAdsRequest) GetOperations() []*AdGroupAdOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on an ad group ad.
+type AdGroupAdOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// Configuration for how policies are validated.
+	PolicyValidationParameter *common.PolicyValidationParameter `protobuf:"bytes,5,opt,name=policy_validation_parameter,json=policyValidationParameter,proto3" json:"policy_validation_parameter,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupAdOperation_Create
+	//	*AdGroupAdOperation_Update
+	//	*AdGroupAdOperation_Remove
+	Operation            isAdGroupAdOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *AdGroupAdOperation) Reset()         { *m = AdGroupAdOperation{} }
+func (m *AdGroupAdOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupAdOperation) ProtoMessage()    {}
+func (*AdGroupAdOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_service_f5afe93c5fff3c55, []int{2}
+}
+func (m *AdGroupAdOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupAdOperation.Unmarshal(m, b)
+}
+func (m *AdGroupAdOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupAdOperation.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupAdOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupAdOperation.Merge(dst, src)
+}
+func (m *AdGroupAdOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupAdOperation.Size(m)
+}
+func (m *AdGroupAdOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupAdOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupAdOperation proto.InternalMessageInfo
+
+func (m *AdGroupAdOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetPolicyValidationParameter() *common.PolicyValidationParameter {
+	if m != nil {
+		return m.PolicyValidationParameter
+	}
+	return nil
+}
+
+type isAdGroupAdOperation_Operation interface {
+	isAdGroupAdOperation_Operation()
+}
+
+type AdGroupAdOperation_Create struct {
+	Create *resources.AdGroupAd `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupAdOperation_Update struct {
+	Update *resources.AdGroupAd `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupAdOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupAdOperation_Create) isAdGroupAdOperation_Operation() {}
+
+func (*AdGroupAdOperation_Update) isAdGroupAdOperation_Operation() {}
+
+func (*AdGroupAdOperation_Remove) isAdGroupAdOperation_Operation() {}
+
+func (m *AdGroupAdOperation) GetOperation() isAdGroupAdOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetCreate() *resources.AdGroupAd {
+	if x, ok := m.GetOperation().(*AdGroupAdOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetUpdate() *resources.AdGroupAd {
+	if x, ok := m.GetOperation().(*AdGroupAdOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupAdOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupAdOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AdGroupAdOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AdGroupAdOperation_OneofMarshaler, _AdGroupAdOperation_OneofUnmarshaler, _AdGroupAdOperation_OneofSizer, []interface{}{
+		(*AdGroupAdOperation_Create)(nil),
+		(*AdGroupAdOperation_Update)(nil),
+		(*AdGroupAdOperation_Remove)(nil),
+	}
+}
+
+func _AdGroupAdOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AdGroupAdOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupAdOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *AdGroupAdOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *AdGroupAdOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("AdGroupAdOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AdGroupAdOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AdGroupAdOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupAd)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupAdOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupAd)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupAdOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &AdGroupAdOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AdGroupAdOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AdGroupAdOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupAdOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupAdOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupAdOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for an ad group ad mutate.
+type MutateAdGroupAdsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateAdGroupAdResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateAdGroupAdsResponse) Reset()         { *m = MutateAdGroupAdsResponse{} }
+func (m *MutateAdGroupAdsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdsResponse) ProtoMessage()    {}
+func (*MutateAdGroupAdsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_service_f5afe93c5fff3c55, []int{3}
+}
+func (m *MutateAdGroupAdsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupAdsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdsResponse.Merge(dst, src)
+}
+func (m *MutateAdGroupAdsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdsResponse.Size(m)
+}
+func (m *MutateAdGroupAdsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdsResponse) GetResults() []*MutateAdGroupAdResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad mutate.
+type MutateAdGroupAdResult struct {
+	// The resource name returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupAdResult) Reset()         { *m = MutateAdGroupAdResult{} }
+func (m *MutateAdGroupAdResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupAdResult) ProtoMessage()    {}
+func (*MutateAdGroupAdResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_ad_service_f5afe93c5fff3c55, []int{4}
+}
+func (m *MutateAdGroupAdResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupAdResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupAdResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupAdResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupAdResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupAdResult.Merge(dst, src)
+}
+func (m *MutateAdGroupAdResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupAdResult.Size(m)
+}
+func (m *MutateAdGroupAdResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupAdResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupAdResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupAdResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupAdRequest)(nil), "google.ads.googleads.v0.services.GetAdGroupAdRequest")
+	proto.RegisterType((*MutateAdGroupAdsRequest)(nil), "google.ads.googleads.v0.services.MutateAdGroupAdsRequest")
+	proto.RegisterType((*AdGroupAdOperation)(nil), "google.ads.googleads.v0.services.AdGroupAdOperation")
+	proto.RegisterType((*MutateAdGroupAdsResponse)(nil), "google.ads.googleads.v0.services.MutateAdGroupAdsResponse")
+	proto.RegisterType((*MutateAdGroupAdResult)(nil), "google.ads.googleads.v0.services.MutateAdGroupAdResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AdGroupAdServiceClient is the client API for AdGroupAdService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupAdServiceClient interface {
+	// Returns the requested ad in full detail.
+	GetAdGroupAd(ctx context.Context, in *GetAdGroupAdRequest, opts ...grpc.CallOption) (*resources.AdGroupAd, error)
+	// Creates, updates, or removes ads. Operation statuses are returned.
+	MutateAdGroupAds(ctx context.Context, in *MutateAdGroupAdsRequest, opts ...grpc.CallOption) (*MutateAdGroupAdsResponse, error)
+}
+
+type adGroupAdServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAdGroupAdServiceClient(cc *grpc.ClientConn) AdGroupAdServiceClient {
+	return &adGroupAdServiceClient{cc}
+}
+
+func (c *adGroupAdServiceClient) GetAdGroupAd(ctx context.Context, in *GetAdGroupAdRequest, opts ...grpc.CallOption) (*resources.AdGroupAd, error) {
+	out := new(resources.AdGroupAd)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupAdService/GetAdGroupAd", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupAdServiceClient) MutateAdGroupAds(ctx context.Context, in *MutateAdGroupAdsRequest, opts ...grpc.CallOption) (*MutateAdGroupAdsResponse, error) {
+	out := new(MutateAdGroupAdsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupAdService/MutateAdGroupAds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupAdServiceServer is the server API for AdGroupAdService service.
+type AdGroupAdServiceServer interface {
+	// Returns the requested ad in full detail.
+	GetAdGroupAd(context.Context, *GetAdGroupAdRequest) (*resources.AdGroupAd, error)
+	// Creates, updates, or removes ads. Operation statuses are returned.
+	MutateAdGroupAds(context.Context, *MutateAdGroupAdsRequest) (*MutateAdGroupAdsResponse, error)
+}
+
+func RegisterAdGroupAdServiceServer(s *grpc.Server, srv AdGroupAdServiceServer) {
+	s.RegisterService(&_AdGroupAdService_serviceDesc, srv)
+}
+
+func _AdGroupAdService_GetAdGroupAd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupAdRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAdServiceServer).GetAdGroupAd(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupAdService/GetAdGroupAd",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAdServiceServer).GetAdGroupAd(ctx, req.(*GetAdGroupAdRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupAdService_MutateAdGroupAds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupAdsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAdServiceServer).MutateAdGroupAds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupAdService/MutateAdGroupAds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAdServiceServer).MutateAdGroupAds(ctx, req.(*MutateAdGroupAdsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupAdService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AdGroupAdService",
+	HandlerType: (*AdGroupAdServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupAd",
+			Handler:    _AdGroupAdService_GetAdGroupAd_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupAds",
+			Handler:    _AdGroupAdService_MutateAdGroupAds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/ad_group_ad_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/ad_group_ad_service.proto", fileDescriptor_ad_group_ad_service_f5afe93c5fff3c55)
+}
+
+var fileDescriptor_ad_group_ad_service_f5afe93c5fff3c55 = []byte{
+	// 648 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6f, 0xd3, 0x30,
+	0x14, 0x26, 0x2d, 0x0c, 0xcd, 0x1d, 0xd2, 0x64, 0x34, 0x11, 0x0a, 0x12, 0x55, 0xe0, 0x30, 0x95,
+	0xc9, 0xae, 0xba, 0x21, 0xb4, 0x8e, 0x1d, 0xba, 0xc3, 0x3a, 0x0e, 0x83, 0x12, 0xd0, 0x0e, 0xa8,
+	0x52, 0xe4, 0xd5, 0x5e, 0x14, 0x2d, 0x89, 0x83, 0xed, 0x54, 0x9a, 0xa6, 0x5d, 0x40, 0xe2, 0x8c,
+	0xc4, 0x3f, 0xe0, 0x06, 0xff, 0x83, 0x0b, 0x57, 0xc4, 0x3f, 0xe0, 0x87, 0xa0, 0xc4, 0x71, 0x28,
+	0xdd, 0xa2, 0xb2, 0xdd, 0x9e, 0xed, 0xf7, 0x7d, 0xef, 0xf9, 0xfb, 0xfc, 0x0c, 0x7a, 0x3e, 0xe7,
+	0x7e, 0xc8, 0x30, 0xa1, 0x12, 0xeb, 0x30, 0x8b, 0x26, 0x1d, 0x2c, 0x99, 0x98, 0x04, 0x63, 0x26,
+	0x31, 0xa1, 0x9e, 0x2f, 0x78, 0x9a, 0x78, 0x84, 0x7a, 0xc5, 0x26, 0x4a, 0x04, 0x57, 0x1c, 0xb6,
+	0x34, 0x00, 0x11, 0x2a, 0x51, 0x89, 0x45, 0x93, 0x0e, 0x32, 0xd8, 0xe6, 0xe3, 0x2a, 0xf6, 0x31,
+	0x8f, 0x22, 0x1e, 0xe3, 0x84, 0x87, 0xc1, 0xf8, 0x44, 0xd3, 0x35, 0xd7, 0xab, 0x92, 0x05, 0x93,
+	0x3c, 0x15, 0x33, 0xbd, 0x14, 0xa0, 0xfb, 0x06, 0x94, 0x04, 0x98, 0xc4, 0x31, 0x57, 0x44, 0x05,
+	0x3c, 0x96, 0xc5, 0x69, 0xd1, 0x21, 0xce, 0x57, 0x87, 0xe9, 0x11, 0x3e, 0x0a, 0x58, 0x48, 0xbd,
+	0x88, 0xc8, 0x63, 0x9d, 0xe1, 0xf4, 0xc0, 0xed, 0x01, 0x53, 0x7d, 0x3a, 0xc8, 0x68, 0xfb, 0xd4,
+	0x65, 0xef, 0x52, 0x26, 0x15, 0x7c, 0x08, 0x6e, 0x99, 0xaa, 0x5e, 0x4c, 0x22, 0x66, 0x5b, 0x2d,
+	0x6b, 0x75, 0xd1, 0x5d, 0x32, 0x9b, 0x2f, 0x48, 0xc4, 0x9c, 0x4f, 0x16, 0xb8, 0xb3, 0x9f, 0x2a,
+	0xa2, 0x58, 0x89, 0x97, 0x86, 0xe0, 0x01, 0x68, 0x8c, 0x53, 0xa9, 0x78, 0xc4, 0x84, 0x17, 0xd0,
+	0x02, 0x0e, 0xcc, 0xd6, 0x73, 0x0a, 0xdf, 0x00, 0xc0, 0x13, 0x26, 0x74, 0xbb, 0x76, 0xad, 0x55,
+	0x5f, 0x6d, 0x74, 0x37, 0xd0, 0x3c, 0x45, 0x51, 0x59, 0xe9, 0xa5, 0x01, 0xbb, 0x53, 0x3c, 0xce,
+	0x87, 0x3a, 0x80, 0xe7, 0x53, 0xe0, 0x16, 0x68, 0xa4, 0x09, 0x25, 0x8a, 0xe5, 0x57, 0xb7, 0xaf,
+	0xb7, 0xac, 0xd5, 0x46, 0xb7, 0x69, 0xaa, 0x19, 0x75, 0xd0, 0x6e, 0xa6, 0xce, 0x3e, 0x91, 0xc7,
+	0x2e, 0xd0, 0xe9, 0x59, 0x0c, 0x4f, 0xc0, 0x3d, 0xed, 0x93, 0x37, 0x21, 0x61, 0x40, 0x73, 0x46,
+	0x2f, 0x21, 0x82, 0x44, 0x4c, 0x31, 0x61, 0xdf, 0xc8, 0xc9, 0x36, 0x2b, 0x5b, 0xd7, 0x56, 0xa3,
+	0x61, 0x4e, 0x71, 0x50, 0x32, 0x0c, 0x0d, 0x81, 0x7b, 0x37, 0xa9, 0x3a, 0x82, 0xbb, 0x60, 0x61,
+	0x2c, 0x18, 0x51, 0x5a, 0xff, 0x46, 0x77, 0xad, 0xb2, 0x4a, 0xf9, 0x46, 0xfe, 0x2a, 0xb4, 0x77,
+	0xcd, 0x2d, 0xd0, 0x19, 0x8f, 0xbe, 0x90, 0x5d, 0xbb, 0x1a, 0x8f, 0x46, 0x43, 0x1b, 0x2c, 0x08,
+	0x16, 0xf1, 0x09, 0xb3, 0xeb, 0x99, 0xa1, 0xd9, 0x89, 0x5e, 0xef, 0x34, 0xc0, 0x62, 0x69, 0x83,
+	0x13, 0x01, 0xfb, 0xfc, 0xbb, 0x90, 0x09, 0x8f, 0x25, 0x83, 0xaf, 0xc0, 0x4d, 0xc1, 0x64, 0x1a,
+	0x2a, 0x63, 0xfa, 0xd3, 0xf9, 0xa6, 0xcf, 0x90, 0xb9, 0x39, 0xde, 0x35, 0x3c, 0xce, 0x33, 0xb0,
+	0x72, 0x61, 0xc6, 0x7f, 0xbd, 0xe2, 0xee, 0xc7, 0x3a, 0x58, 0x2e, 0x81, 0xaf, 0x75, 0x49, 0xf8,
+	0xd5, 0x02, 0x4b, 0xd3, 0x73, 0x01, 0x9f, 0xcc, 0xef, 0xf2, 0x82, 0x39, 0x6a, 0x5e, 0x4a, 0x68,
+	0x67, 0xe3, 0xfd, 0xcf, 0xdf, 0x9f, 0x6b, 0x08, 0xae, 0x65, 0x53, 0x7f, 0xfa, 0x4f, 0xeb, 0xdb,
+	0x66, 0x74, 0x24, 0x6e, 0x63, 0x52, 0xca, 0x8a, 0xdb, 0x67, 0xf0, 0xbb, 0x05, 0x96, 0x67, 0xe5,
+	0x86, 0x9b, 0x97, 0x56, 0xd5, 0x8c, 0x6e, 0xb3, 0x77, 0x15, 0xa8, 0x76, 0xd7, 0xe9, 0xe5, 0x37,
+	0xd8, 0x70, 0x70, 0xfe, 0xc9, 0x95, 0x2d, 0x9f, 0x4e, 0xfd, 0x05, 0xdb, 0xed, 0xb3, 0xa9, 0x0b,
+	0xf4, 0xa2, 0x9c, 0xaa, 0x67, 0xb5, 0x77, 0x7e, 0x59, 0xe0, 0xd1, 0x98, 0x47, 0x73, 0xab, 0xef,
+	0xac, 0xcc, 0xda, 0x35, 0xcc, 0x06, 0x78, 0x68, 0xbd, 0xdd, 0x2b, 0xa0, 0x3e, 0x0f, 0x49, 0xec,
+	0x23, 0x2e, 0x7c, 0xec, 0xb3, 0x38, 0x1f, 0x6f, 0xf3, 0xa3, 0x26, 0x81, 0xac, 0xfe, 0xeb, 0xb7,
+	0x4c, 0xf0, 0xa5, 0x56, 0x1f, 0xf4, 0xfb, 0xdf, 0x6a, 0xad, 0x81, 0x26, 0xec, 0x53, 0x89, 0x74,
+	0x98, 0x45, 0x07, 0x1d, 0x54, 0x14, 0x96, 0x3f, 0x4c, 0xca, 0xa8, 0x4f, 0xe5, 0xa8, 0x4c, 0x19,
+	0x1d, 0x74, 0x46, 0x26, 0xe5, 0x70, 0x21, 0x6f, 0x60, 0xfd, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x1d, 0x5f, 0xf4, 0x20, 0x6b, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/ad_group_audience_view_service.pb.go b/googleapis/ads/googleads/v0/services/ad_group_audience_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..50d00007e1f72568f07d332d5960b1ed5c7bba28
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/ad_group_audience_view_service.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/ad_group_audience_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [AdGroupAudienceViewService.GetAdGoupAudienceView][].
+type GetAdGroupAudienceViewRequest struct {
+	// The resource name of the ad group audience view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupAudienceViewRequest) Reset()         { *m = GetAdGroupAudienceViewRequest{} }
+func (m *GetAdGroupAudienceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupAudienceViewRequest) ProtoMessage()    {}
+func (*GetAdGroupAudienceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_audience_view_service_606af6b4aae1215b, []int{0}
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupAudienceViewRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupAudienceViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAdGroupAudienceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupAudienceViewRequest.Merge(dst, src)
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupAudienceViewRequest.Size(m)
+}
+func (m *GetAdGroupAudienceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupAudienceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupAudienceViewRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupAudienceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupAudienceViewRequest)(nil), "google.ads.googleads.v0.services.GetAdGroupAudienceViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AdGroupAudienceViewServiceClient is the client API for AdGroupAudienceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupAudienceViewServiceClient interface {
+	// Returns the requested ad group audience view in full detail.
+	GetAdGroupAudienceView(ctx context.Context, in *GetAdGroupAudienceViewRequest, opts ...grpc.CallOption) (*resources.AdGroupAudienceView, error)
+}
+
+type adGroupAudienceViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAdGroupAudienceViewServiceClient(cc *grpc.ClientConn) AdGroupAudienceViewServiceClient {
+	return &adGroupAudienceViewServiceClient{cc}
+}
+
+func (c *adGroupAudienceViewServiceClient) GetAdGroupAudienceView(ctx context.Context, in *GetAdGroupAudienceViewRequest, opts ...grpc.CallOption) (*resources.AdGroupAudienceView, error) {
+	out := new(resources.AdGroupAudienceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupAudienceViewService/GetAdGroupAudienceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupAudienceViewServiceServer is the server API for AdGroupAudienceViewService service.
+type AdGroupAudienceViewServiceServer interface {
+	// Returns the requested ad group audience view in full detail.
+	GetAdGroupAudienceView(context.Context, *GetAdGroupAudienceViewRequest) (*resources.AdGroupAudienceView, error)
+}
+
+func RegisterAdGroupAudienceViewServiceServer(s *grpc.Server, srv AdGroupAudienceViewServiceServer) {
+	s.RegisterService(&_AdGroupAudienceViewService_serviceDesc, srv)
+}
+
+func _AdGroupAudienceViewService_GetAdGroupAudienceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupAudienceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupAudienceViewServiceServer).GetAdGroupAudienceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupAudienceViewService/GetAdGroupAudienceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupAudienceViewServiceServer).GetAdGroupAudienceView(ctx, req.(*GetAdGroupAudienceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupAudienceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AdGroupAudienceViewService",
+	HandlerType: (*AdGroupAudienceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupAudienceView",
+			Handler:    _AdGroupAudienceViewService_GetAdGroupAudienceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/ad_group_audience_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/ad_group_audience_view_service.proto", fileDescriptor_ad_group_audience_view_service_606af6b4aae1215b)
+}
+
+var fileDescriptor_ad_group_audience_view_service_606af6b4aae1215b = []byte{
+	// 359 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x4a, 0xeb, 0x40,
+	0x14, 0x25, 0x7d, 0xf0, 0xe0, 0x85, 0xf7, 0x36, 0x59, 0x3c, 0x24, 0x28, 0x96, 0xea, 0x42, 0xba,
+	0x98, 0x09, 0x0a, 0x45, 0x10, 0x2b, 0x29, 0x4a, 0x5c, 0x49, 0xa9, 0xd0, 0x85, 0x04, 0xc2, 0x98,
+	0x5c, 0xc2, 0x40, 0x33, 0x13, 0xe7, 0x26, 0xe9, 0x42, 0xdc, 0xf8, 0x0b, 0xfe, 0x81, 0x4b, 0x3f,
+	0xc5, 0x9d, 0xf8, 0x01, 0x6e, 0xfc, 0x00, 0x3f, 0x41, 0xd2, 0xc9, 0x14, 0xc4, 0xc6, 0xee, 0x0e,
+	0x73, 0xef, 0x39, 0xe7, 0xde, 0x73, 0xc7, 0x3e, 0x4b, 0xa5, 0x4c, 0x67, 0x40, 0x59, 0x82, 0x54,
+	0xc3, 0x1a, 0x55, 0x1e, 0x45, 0x50, 0x15, 0x8f, 0x01, 0x29, 0x4b, 0xa2, 0x54, 0xc9, 0x32, 0x8f,
+	0x58, 0x99, 0x70, 0x10, 0x31, 0x44, 0x15, 0x87, 0x79, 0xd4, 0xd4, 0x49, 0xae, 0x64, 0x21, 0x9d,
+	0xae, 0xe6, 0x12, 0x96, 0x20, 0x59, 0xca, 0x90, 0xca, 0x23, 0x46, 0xc6, 0x1d, 0xb6, 0x19, 0x29,
+	0x40, 0x59, 0xaa, 0x76, 0x27, 0xed, 0xe0, 0x6e, 0x1a, 0x7e, 0xce, 0x29, 0x13, 0x42, 0x16, 0xac,
+	0xe0, 0x52, 0xa0, 0xae, 0xf6, 0x4e, 0xed, 0xad, 0x00, 0x0a, 0x3f, 0x09, 0x6a, 0xbe, 0xdf, 0xd0,
+	0xa7, 0x1c, 0xe6, 0x13, 0xb8, 0x29, 0x01, 0x0b, 0x67, 0xc7, 0xfe, 0x67, 0x8c, 0x22, 0xc1, 0x32,
+	0xd8, 0xb0, 0xba, 0xd6, 0xde, 0x9f, 0xc9, 0x5f, 0xf3, 0x78, 0xc1, 0x32, 0xd8, 0xff, 0xb0, 0x6c,
+	0x77, 0x85, 0xc6, 0xa5, 0xde, 0xc1, 0x79, 0xb1, 0xec, 0xff, 0xab, 0x5d, 0x9c, 0x13, 0xb2, 0x2e,
+	0x00, 0xf2, 0xe3, 0x7c, 0xee, 0xa0, 0x55, 0x60, 0x99, 0x0f, 0x59, 0x41, 0xef, 0x0d, 0xef, 0x5f,
+	0xdf, 0x1f, 0x3a, 0x87, 0xce, 0xa0, 0x8e, 0xf2, 0xf6, 0xcb, 0x8a, 0xc7, 0x71, 0x89, 0x85, 0xcc,
+	0x40, 0x21, 0xed, 0x53, 0xf6, 0x9d, 0x8b, 0xb4, 0x7f, 0x37, 0x7a, 0xb3, 0xec, 0xdd, 0x58, 0x66,
+	0x6b, 0xc7, 0x1f, 0x6d, 0xb7, 0x07, 0x33, 0xae, 0x4f, 0x30, 0xb6, 0xae, 0xce, 0x1b, 0x91, 0x54,
+	0xce, 0x98, 0x48, 0x89, 0x54, 0x29, 0x4d, 0x41, 0x2c, 0x0e, 0x64, 0x4e, 0x9e, 0x73, 0x6c, 0xff,
+	0x6a, 0x47, 0x06, 0x3c, 0x76, 0x7e, 0x05, 0xbe, 0xff, 0xd4, 0xe9, 0x06, 0x5a, 0xd0, 0x4f, 0x90,
+	0x68, 0x58, 0xa3, 0xa9, 0x47, 0x1a, 0x63, 0x7c, 0x36, 0x2d, 0xa1, 0x9f, 0x60, 0xb8, 0x6c, 0x09,
+	0xa7, 0x5e, 0x68, 0x5a, 0xae, 0x7f, 0x2f, 0x06, 0x38, 0xf8, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xf0,
+	0x63, 0x70, 0x60, 0xea, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/ad_group_bid_modifier_service.pb.go b/googleapis/ads/googleads/v0/services/ad_group_bid_modifier_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9d4b697fbe0ed31d52fa7ad6ee6278ec2cb3e0e1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/ad_group_bid_modifier_service.pb.go
@@ -0,0 +1,547 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/ad_group_bid_modifier_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [AdGroupBidModifierService.GetAdGroupBidModifier][google.ads.googleads.v0.services.AdGroupBidModifierService.GetAdGroupBidModifier].
+type GetAdGroupBidModifierRequest struct {
+	// The resource name of the ad group bid modifier to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupBidModifierRequest) Reset()         { *m = GetAdGroupBidModifierRequest{} }
+func (m *GetAdGroupBidModifierRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupBidModifierRequest) ProtoMessage()    {}
+func (*GetAdGroupBidModifierRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_service_fbd69257eb9b6c8d, []int{0}
+}
+func (m *GetAdGroupBidModifierRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupBidModifierRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupBidModifierRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupBidModifierRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAdGroupBidModifierRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupBidModifierRequest.Merge(dst, src)
+}
+func (m *GetAdGroupBidModifierRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupBidModifierRequest.Size(m)
+}
+func (m *GetAdGroupBidModifierRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupBidModifierRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupBidModifierRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupBidModifierRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupBidModifierService.MutateAdGroupBidModifiers][google.ads.googleads.v0.services.AdGroupBidModifierService.MutateAdGroupBidModifiers].
+type MutateAdGroupBidModifiersRequest struct {
+	// ID of the customer whose ad group bid modifiers are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual ad group bid modifiers.
+	Operations           []*AdGroupBidModifierOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MutateAdGroupBidModifiersRequest) Reset()         { *m = MutateAdGroupBidModifiersRequest{} }
+func (m *MutateAdGroupBidModifiersRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupBidModifiersRequest) ProtoMessage()    {}
+func (*MutateAdGroupBidModifiersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_service_fbd69257eb9b6c8d, []int{1}
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupBidModifiersRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupBidModifiersRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupBidModifiersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupBidModifiersRequest.Merge(dst, src)
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupBidModifiersRequest.Size(m)
+}
+func (m *MutateAdGroupBidModifiersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupBidModifiersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupBidModifiersRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupBidModifiersRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupBidModifiersRequest) GetOperations() []*AdGroupBidModifierOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, remove, update) on an ad group bid modifier.
+type AdGroupBidModifierOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupBidModifierOperation_Create
+	//	*AdGroupBidModifierOperation_Update
+	//	*AdGroupBidModifierOperation_Remove
+	Operation            isAdGroupBidModifierOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *AdGroupBidModifierOperation) Reset()         { *m = AdGroupBidModifierOperation{} }
+func (m *AdGroupBidModifierOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupBidModifierOperation) ProtoMessage()    {}
+func (*AdGroupBidModifierOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_service_fbd69257eb9b6c8d, []int{2}
+}
+func (m *AdGroupBidModifierOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupBidModifierOperation.Unmarshal(m, b)
+}
+func (m *AdGroupBidModifierOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupBidModifierOperation.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupBidModifierOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupBidModifierOperation.Merge(dst, src)
+}
+func (m *AdGroupBidModifierOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupBidModifierOperation.Size(m)
+}
+func (m *AdGroupBidModifierOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupBidModifierOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupBidModifierOperation proto.InternalMessageInfo
+
+func (m *AdGroupBidModifierOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupBidModifierOperation_Operation interface {
+	isAdGroupBidModifierOperation_Operation()
+}
+
+type AdGroupBidModifierOperation_Create struct {
+	Create *resources.AdGroupBidModifier `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupBidModifierOperation_Update struct {
+	Update *resources.AdGroupBidModifier `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupBidModifierOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupBidModifierOperation_Create) isAdGroupBidModifierOperation_Operation() {}
+
+func (*AdGroupBidModifierOperation_Update) isAdGroupBidModifierOperation_Operation() {}
+
+func (*AdGroupBidModifierOperation_Remove) isAdGroupBidModifierOperation_Operation() {}
+
+func (m *AdGroupBidModifierOperation) GetOperation() isAdGroupBidModifierOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifierOperation) GetCreate() *resources.AdGroupBidModifier {
+	if x, ok := m.GetOperation().(*AdGroupBidModifierOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifierOperation) GetUpdate() *resources.AdGroupBidModifier {
+	if x, ok := m.GetOperation().(*AdGroupBidModifierOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupBidModifierOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupBidModifierOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AdGroupBidModifierOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AdGroupBidModifierOperation_OneofMarshaler, _AdGroupBidModifierOperation_OneofUnmarshaler, _AdGroupBidModifierOperation_OneofSizer, []interface{}{
+		(*AdGroupBidModifierOperation_Create)(nil),
+		(*AdGroupBidModifierOperation_Update)(nil),
+		(*AdGroupBidModifierOperation_Remove)(nil),
+	}
+}
+
+func _AdGroupBidModifierOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AdGroupBidModifierOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupBidModifierOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *AdGroupBidModifierOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *AdGroupBidModifierOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("AdGroupBidModifierOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AdGroupBidModifierOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AdGroupBidModifierOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupBidModifier)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupBidModifierOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupBidModifier)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupBidModifierOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &AdGroupBidModifierOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AdGroupBidModifierOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AdGroupBidModifierOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupBidModifierOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupBidModifierOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupBidModifierOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for ad group bid modifiers mutate.
+type MutateAdGroupBidModifiersResponse struct {
+	// All results for the mutate.
+	Results              []*MutateAdGroupBidModifierResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *MutateAdGroupBidModifiersResponse) Reset()         { *m = MutateAdGroupBidModifiersResponse{} }
+func (m *MutateAdGroupBidModifiersResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupBidModifiersResponse) ProtoMessage()    {}
+func (*MutateAdGroupBidModifiersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_service_fbd69257eb9b6c8d, []int{3}
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupBidModifiersResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupBidModifiersResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupBidModifiersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupBidModifiersResponse.Merge(dst, src)
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupBidModifiersResponse.Size(m)
+}
+func (m *MutateAdGroupBidModifiersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupBidModifiersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupBidModifiersResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupBidModifiersResponse) GetResults() []*MutateAdGroupBidModifierResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateAdGroupBidModifierResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupBidModifierResult) Reset()         { *m = MutateAdGroupBidModifierResult{} }
+func (m *MutateAdGroupBidModifierResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupBidModifierResult) ProtoMessage()    {}
+func (*MutateAdGroupBidModifierResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_bid_modifier_service_fbd69257eb9b6c8d, []int{4}
+}
+func (m *MutateAdGroupBidModifierResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupBidModifierResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupBidModifierResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupBidModifierResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupBidModifierResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupBidModifierResult.Merge(dst, src)
+}
+func (m *MutateAdGroupBidModifierResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupBidModifierResult.Size(m)
+}
+func (m *MutateAdGroupBidModifierResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupBidModifierResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupBidModifierResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupBidModifierResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupBidModifierRequest)(nil), "google.ads.googleads.v0.services.GetAdGroupBidModifierRequest")
+	proto.RegisterType((*MutateAdGroupBidModifiersRequest)(nil), "google.ads.googleads.v0.services.MutateAdGroupBidModifiersRequest")
+	proto.RegisterType((*AdGroupBidModifierOperation)(nil), "google.ads.googleads.v0.services.AdGroupBidModifierOperation")
+	proto.RegisterType((*MutateAdGroupBidModifiersResponse)(nil), "google.ads.googleads.v0.services.MutateAdGroupBidModifiersResponse")
+	proto.RegisterType((*MutateAdGroupBidModifierResult)(nil), "google.ads.googleads.v0.services.MutateAdGroupBidModifierResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AdGroupBidModifierServiceClient is the client API for AdGroupBidModifierService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupBidModifierServiceClient interface {
+	// Returns the requested ad group bid modifier in full detail.
+	GetAdGroupBidModifier(ctx context.Context, in *GetAdGroupBidModifierRequest, opts ...grpc.CallOption) (*resources.AdGroupBidModifier, error)
+	// Creates, updates, or removes ad group bid modifiers.
+	// Operation statuses are returned.
+	MutateAdGroupBidModifiers(ctx context.Context, in *MutateAdGroupBidModifiersRequest, opts ...grpc.CallOption) (*MutateAdGroupBidModifiersResponse, error)
+}
+
+type adGroupBidModifierServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAdGroupBidModifierServiceClient(cc *grpc.ClientConn) AdGroupBidModifierServiceClient {
+	return &adGroupBidModifierServiceClient{cc}
+}
+
+func (c *adGroupBidModifierServiceClient) GetAdGroupBidModifier(ctx context.Context, in *GetAdGroupBidModifierRequest, opts ...grpc.CallOption) (*resources.AdGroupBidModifier, error) {
+	out := new(resources.AdGroupBidModifier)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupBidModifierService/GetAdGroupBidModifier", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupBidModifierServiceClient) MutateAdGroupBidModifiers(ctx context.Context, in *MutateAdGroupBidModifiersRequest, opts ...grpc.CallOption) (*MutateAdGroupBidModifiersResponse, error) {
+	out := new(MutateAdGroupBidModifiersResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupBidModifierService/MutateAdGroupBidModifiers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupBidModifierServiceServer is the server API for AdGroupBidModifierService service.
+type AdGroupBidModifierServiceServer interface {
+	// Returns the requested ad group bid modifier in full detail.
+	GetAdGroupBidModifier(context.Context, *GetAdGroupBidModifierRequest) (*resources.AdGroupBidModifier, error)
+	// Creates, updates, or removes ad group bid modifiers.
+	// Operation statuses are returned.
+	MutateAdGroupBidModifiers(context.Context, *MutateAdGroupBidModifiersRequest) (*MutateAdGroupBidModifiersResponse, error)
+}
+
+func RegisterAdGroupBidModifierServiceServer(s *grpc.Server, srv AdGroupBidModifierServiceServer) {
+	s.RegisterService(&_AdGroupBidModifierService_serviceDesc, srv)
+}
+
+func _AdGroupBidModifierService_GetAdGroupBidModifier_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupBidModifierRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupBidModifierServiceServer).GetAdGroupBidModifier(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupBidModifierService/GetAdGroupBidModifier",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupBidModifierServiceServer).GetAdGroupBidModifier(ctx, req.(*GetAdGroupBidModifierRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupBidModifierService_MutateAdGroupBidModifiers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupBidModifiersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupBidModifierServiceServer).MutateAdGroupBidModifiers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupBidModifierService/MutateAdGroupBidModifiers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupBidModifierServiceServer).MutateAdGroupBidModifiers(ctx, req.(*MutateAdGroupBidModifiersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupBidModifierService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AdGroupBidModifierService",
+	HandlerType: (*AdGroupBidModifierServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupBidModifier",
+			Handler:    _AdGroupBidModifierService_GetAdGroupBidModifier_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupBidModifiers",
+			Handler:    _AdGroupBidModifierService_MutateAdGroupBidModifiers_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/ad_group_bid_modifier_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/ad_group_bid_modifier_service.proto", fileDescriptor_ad_group_bid_modifier_service_fbd69257eb9b6c8d)
+}
+
+var fileDescriptor_ad_group_bid_modifier_service_fbd69257eb9b6c8d = []byte{
+	// 607 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4d, 0x6f, 0xd3, 0x30,
+	0x18, 0xc7, 0x49, 0x8a, 0x86, 0xe6, 0xc0, 0xc5, 0x12, 0x52, 0x56, 0xa6, 0x11, 0x02, 0x87, 0xaa,
+	0x87, 0xa4, 0x2a, 0x9a, 0x40, 0x9b, 0x82, 0x68, 0x0b, 0x74, 0x1c, 0xca, 0xa6, 0x20, 0xed, 0x30,
+	0x15, 0x45, 0x6e, 0xed, 0x46, 0xd1, 0x9a, 0x38, 0xd8, 0x49, 0x2f, 0xd3, 0x84, 0xc4, 0x57, 0xe0,
+	0x1b, 0x8c, 0x1b, 0x1f, 0x05, 0x89, 0x13, 0x07, 0x6e, 0x9c, 0xb8, 0xf0, 0x2d, 0x90, 0xe3, 0xb8,
+	0x0c, 0xb5, 0x69, 0xd1, 0x76, 0x7b, 0x62, 0x3f, 0xfe, 0x3d, 0x2f, 0x7f, 0x3f, 0x0e, 0x78, 0x11,
+	0x52, 0x1a, 0x4e, 0x89, 0x8b, 0x30, 0x77, 0xa5, 0x29, 0xac, 0x59, 0xcb, 0xe5, 0x84, 0xcd, 0xa2,
+	0x31, 0xe1, 0x2e, 0xc2, 0x41, 0xc8, 0x68, 0x9e, 0x06, 0xa3, 0x08, 0x07, 0x31, 0xc5, 0xd1, 0x24,
+	0x22, 0x2c, 0x28, 0xb7, 0x9d, 0x94, 0xd1, 0x8c, 0x42, 0x4b, 0x1e, 0x75, 0x10, 0xe6, 0xce, 0x9c,
+	0xe2, 0xcc, 0x5a, 0x8e, 0xa2, 0xd4, 0xbd, 0xaa, 0x38, 0x8c, 0x70, 0x9a, 0xb3, 0xca, 0x40, 0x32,
+	0x40, 0x7d, 0x5b, 0x1d, 0x4f, 0x23, 0x17, 0x25, 0x09, 0xcd, 0x50, 0x16, 0xd1, 0x84, 0x97, 0xbb,
+	0x65, 0x78, 0xb7, 0xf8, 0x1a, 0xe5, 0x13, 0x77, 0x12, 0x91, 0x29, 0x0e, 0x62, 0xc4, 0x4f, 0xa5,
+	0x87, 0xdd, 0x03, 0xdb, 0x7d, 0x92, 0x75, 0x70, 0x5f, 0x04, 0xe8, 0x46, 0x78, 0x50, 0xe2, 0x7d,
+	0xf2, 0x3e, 0x27, 0x3c, 0x83, 0x0f, 0xc1, 0x1d, 0x95, 0x48, 0x90, 0xa0, 0x98, 0x98, 0x9a, 0xa5,
+	0x35, 0x36, 0xfd, 0xdb, 0x6a, 0xf1, 0x0d, 0x8a, 0x89, 0x7d, 0xa1, 0x01, 0x6b, 0x90, 0x67, 0x28,
+	0x23, 0x8b, 0x20, 0xae, 0x48, 0xf7, 0x81, 0x31, 0xce, 0x79, 0x46, 0x63, 0xc2, 0x82, 0x08, 0x97,
+	0x1c, 0xa0, 0x96, 0x5e, 0x63, 0xf8, 0x0e, 0x00, 0x9a, 0x12, 0x26, 0x0b, 0x30, 0x75, 0xab, 0xd6,
+	0x30, 0xda, 0x9e, 0xb3, 0xae, 0x81, 0xce, 0x62, 0xc8, 0x43, 0x45, 0xf1, 0x2f, 0x01, 0xed, 0xcf,
+	0x3a, 0xb8, 0xb7, 0xc2, 0x17, 0xee, 0x03, 0x23, 0x4f, 0x31, 0xca, 0x48, 0xd1, 0x1e, 0xf3, 0xa6,
+	0xa5, 0x35, 0x8c, 0x76, 0x5d, 0xc5, 0x57, 0x1d, 0x74, 0x5e, 0x89, 0x0e, 0x0e, 0x10, 0x3f, 0xf5,
+	0x81, 0x74, 0x17, 0x36, 0x3c, 0x04, 0x1b, 0x63, 0x46, 0x50, 0x26, 0xfb, 0x63, 0xb4, 0x77, 0x2b,
+	0xf3, 0x9e, 0xcb, 0xba, 0x24, 0xf1, 0x83, 0x1b, 0x7e, 0x89, 0x11, 0x40, 0x89, 0x37, 0xf5, 0x6b,
+	0x02, 0x25, 0x06, 0x9a, 0x60, 0x83, 0x91, 0x98, 0xce, 0x88, 0x59, 0x13, 0x9d, 0x17, 0x3b, 0xf2,
+	0xbb, 0x6b, 0x80, 0xcd, 0x79, 0x9b, 0xec, 0x0f, 0xe0, 0xc1, 0x0a, 0x25, 0x79, 0x4a, 0x13, 0x4e,
+	0xe0, 0x09, 0xb8, 0xc5, 0x08, 0xcf, 0xa7, 0x99, 0x92, 0xe9, 0xf9, 0x7a, 0x99, 0xaa, 0xa8, 0x7e,
+	0x01, 0xf2, 0x15, 0xd0, 0x7e, 0x09, 0x76, 0x56, 0xbb, 0xfe, 0xd7, 0x95, 0x6c, 0xff, 0xa8, 0x81,
+	0xad, 0x45, 0xc2, 0x5b, 0x99, 0x0d, 0xfc, 0xa6, 0x81, 0xbb, 0x4b, 0xaf, 0x3d, 0x7c, 0xb6, 0xbe,
+	0x92, 0x55, 0xf3, 0x52, 0xbf, 0x9a, 0x4e, 0xb6, 0xf7, 0xf1, 0xfb, 0xaf, 0x4f, 0xfa, 0x13, 0xb8,
+	0x2b, 0x26, 0xff, 0xec, 0x9f, 0xf2, 0x3c, 0x35, 0x22, 0xdc, 0x6d, 0xba, 0x68, 0x51, 0x15, 0xb7,
+	0x79, 0x0e, 0x7f, 0x6b, 0x60, 0xab, 0x52, 0x36, 0xd8, 0xbd, 0xba, 0x3a, 0x6a, 0x7a, 0xeb, 0xbd,
+	0x6b, 0x31, 0xe4, 0xbd, 0xb1, 0x7b, 0x45, 0x95, 0x9e, 0xfd, 0x54, 0x54, 0xf9, 0xb7, 0xac, 0xb3,
+	0x4b, 0xef, 0x82, 0xd7, 0x3c, 0x5f, 0x56, 0xe4, 0x5e, 0x5c, 0xc0, 0xf7, 0xb4, 0x66, 0xf7, 0xa7,
+	0x06, 0x1e, 0x8d, 0x69, 0xbc, 0x36, 0x9f, 0xee, 0x4e, 0xa5, 0xfe, 0x47, 0x62, 0x98, 0x8f, 0xb4,
+	0x93, 0x83, 0x92, 0x11, 0xd2, 0x29, 0x4a, 0x42, 0x87, 0xb2, 0xd0, 0x0d, 0x49, 0x52, 0x8c, 0xba,
+	0x7a, 0x8b, 0xd3, 0x88, 0x57, 0xff, 0x02, 0xf6, 0x95, 0x71, 0xa1, 0xd7, 0xfa, 0x9d, 0xce, 0x17,
+	0xdd, 0xea, 0x4b, 0x60, 0x07, 0x73, 0x47, 0x9a, 0xc2, 0x3a, 0x6e, 0x39, 0x65, 0x60, 0xfe, 0x55,
+	0xb9, 0x0c, 0x3b, 0x98, 0x0f, 0xe7, 0x2e, 0xc3, 0xe3, 0xd6, 0x50, 0xb9, 0x8c, 0x36, 0x8a, 0x04,
+	0x1e, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x68, 0xc5, 0x0e, 0x82, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/ad_group_criterion_service.pb.go b/googleapis/ads/googleads/v0/services/ad_group_criterion_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..07cbdfd3b4482be06c5e3dffdb5093b69803718c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/ad_group_criterion_service.pb.go
@@ -0,0 +1,545 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/ad_group_criterion_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [AdGroupCriterionService.GetAdGroupCriterion][google.ads.googleads.v0.services.AdGroupCriterionService.GetAdGroupCriterion].
+type GetAdGroupCriterionRequest struct {
+	// The resource name of the criterion to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupCriterionRequest) Reset()         { *m = GetAdGroupCriterionRequest{} }
+func (m *GetAdGroupCriterionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupCriterionRequest) ProtoMessage()    {}
+func (*GetAdGroupCriterionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_service_3645d889d01f8ec1, []int{0}
+}
+func (m *GetAdGroupCriterionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupCriterionRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupCriterionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupCriterionRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAdGroupCriterionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupCriterionRequest.Merge(dst, src)
+}
+func (m *GetAdGroupCriterionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupCriterionRequest.Size(m)
+}
+func (m *GetAdGroupCriterionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupCriterionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupCriterionRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupCriterionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupCriterionService.MutateAdGroupCriteria][google.ads.googleads.v0.services.AdGroupCriterionService.MutateAdGroupCriteria].
+type MutateAdGroupCriteriaRequest struct {
+	// ID of the customer whose criteria are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual criteria.
+	Operations           []*AdGroupCriterionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateAdGroupCriteriaRequest) Reset()         { *m = MutateAdGroupCriteriaRequest{} }
+func (m *MutateAdGroupCriteriaRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriteriaRequest) ProtoMessage()    {}
+func (*MutateAdGroupCriteriaRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_service_3645d889d01f8ec1, []int{1}
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriteriaRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriteriaRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupCriteriaRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriteriaRequest.Merge(dst, src)
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriteriaRequest.Size(m)
+}
+func (m *MutateAdGroupCriteriaRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriteriaRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriteriaRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriteriaRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupCriteriaRequest) GetOperations() []*AdGroupCriterionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, remove, update) on an ad group criterion.
+type AdGroupCriterionOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupCriterionOperation_Create
+	//	*AdGroupCriterionOperation_Update
+	//	*AdGroupCriterionOperation_Remove
+	Operation            isAdGroupCriterionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *AdGroupCriterionOperation) Reset()         { *m = AdGroupCriterionOperation{} }
+func (m *AdGroupCriterionOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupCriterionOperation) ProtoMessage()    {}
+func (*AdGroupCriterionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_service_3645d889d01f8ec1, []int{2}
+}
+func (m *AdGroupCriterionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupCriterionOperation.Unmarshal(m, b)
+}
+func (m *AdGroupCriterionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupCriterionOperation.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupCriterionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupCriterionOperation.Merge(dst, src)
+}
+func (m *AdGroupCriterionOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupCriterionOperation.Size(m)
+}
+func (m *AdGroupCriterionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupCriterionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupCriterionOperation proto.InternalMessageInfo
+
+func (m *AdGroupCriterionOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupCriterionOperation_Operation interface {
+	isAdGroupCriterionOperation_Operation()
+}
+
+type AdGroupCriterionOperation_Create struct {
+	Create *resources.AdGroupCriterion `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupCriterionOperation_Update struct {
+	Update *resources.AdGroupCriterion `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupCriterionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupCriterionOperation_Create) isAdGroupCriterionOperation_Operation() {}
+
+func (*AdGroupCriterionOperation_Update) isAdGroupCriterionOperation_Operation() {}
+
+func (*AdGroupCriterionOperation_Remove) isAdGroupCriterionOperation_Operation() {}
+
+func (m *AdGroupCriterionOperation) GetOperation() isAdGroupCriterionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionOperation) GetCreate() *resources.AdGroupCriterion {
+	if x, ok := m.GetOperation().(*AdGroupCriterionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionOperation) GetUpdate() *resources.AdGroupCriterion {
+	if x, ok := m.GetOperation().(*AdGroupCriterionOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupCriterionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupCriterionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AdGroupCriterionOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AdGroupCriterionOperation_OneofMarshaler, _AdGroupCriterionOperation_OneofUnmarshaler, _AdGroupCriterionOperation_OneofSizer, []interface{}{
+		(*AdGroupCriterionOperation_Create)(nil),
+		(*AdGroupCriterionOperation_Update)(nil),
+		(*AdGroupCriterionOperation_Remove)(nil),
+	}
+}
+
+func _AdGroupCriterionOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AdGroupCriterionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupCriterionOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *AdGroupCriterionOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *AdGroupCriterionOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("AdGroupCriterionOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AdGroupCriterionOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AdGroupCriterionOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupCriterion)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupCriterionOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupCriterion)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupCriterionOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &AdGroupCriterionOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AdGroupCriterionOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AdGroupCriterionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupCriterionOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterionOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupCriterionOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for an ad group criterion mutate.
+type MutateAdGroupCriteriaResponse struct {
+	// All results for the mutate.
+	Results              []*MutateAdGroupCriterionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateAdGroupCriteriaResponse) Reset()         { *m = MutateAdGroupCriteriaResponse{} }
+func (m *MutateAdGroupCriteriaResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriteriaResponse) ProtoMessage()    {}
+func (*MutateAdGroupCriteriaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_service_3645d889d01f8ec1, []int{3}
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriteriaResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriteriaResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupCriteriaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriteriaResponse.Merge(dst, src)
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriteriaResponse.Size(m)
+}
+func (m *MutateAdGroupCriteriaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriteriaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriteriaResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriteriaResponse) GetResults() []*MutateAdGroupCriterionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateAdGroupCriterionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupCriterionResult) Reset()         { *m = MutateAdGroupCriterionResult{} }
+func (m *MutateAdGroupCriterionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupCriterionResult) ProtoMessage()    {}
+func (*MutateAdGroupCriterionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_criterion_service_3645d889d01f8ec1, []int{4}
+}
+func (m *MutateAdGroupCriterionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupCriterionResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupCriterionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupCriterionResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupCriterionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupCriterionResult.Merge(dst, src)
+}
+func (m *MutateAdGroupCriterionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupCriterionResult.Size(m)
+}
+func (m *MutateAdGroupCriterionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupCriterionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupCriterionResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupCriterionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupCriterionRequest)(nil), "google.ads.googleads.v0.services.GetAdGroupCriterionRequest")
+	proto.RegisterType((*MutateAdGroupCriteriaRequest)(nil), "google.ads.googleads.v0.services.MutateAdGroupCriteriaRequest")
+	proto.RegisterType((*AdGroupCriterionOperation)(nil), "google.ads.googleads.v0.services.AdGroupCriterionOperation")
+	proto.RegisterType((*MutateAdGroupCriteriaResponse)(nil), "google.ads.googleads.v0.services.MutateAdGroupCriteriaResponse")
+	proto.RegisterType((*MutateAdGroupCriterionResult)(nil), "google.ads.googleads.v0.services.MutateAdGroupCriterionResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AdGroupCriterionServiceClient is the client API for AdGroupCriterionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupCriterionServiceClient interface {
+	// Returns the requested criterion in full detail.
+	GetAdGroupCriterion(ctx context.Context, in *GetAdGroupCriterionRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateAdGroupCriteria(ctx context.Context, in *MutateAdGroupCriteriaRequest, opts ...grpc.CallOption) (*MutateAdGroupCriteriaResponse, error)
+}
+
+type adGroupCriterionServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAdGroupCriterionServiceClient(cc *grpc.ClientConn) AdGroupCriterionServiceClient {
+	return &adGroupCriterionServiceClient{cc}
+}
+
+func (c *adGroupCriterionServiceClient) GetAdGroupCriterion(ctx context.Context, in *GetAdGroupCriterionRequest, opts ...grpc.CallOption) (*resources.AdGroupCriterion, error) {
+	out := new(resources.AdGroupCriterion)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupCriterionService/GetAdGroupCriterion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupCriterionServiceClient) MutateAdGroupCriteria(ctx context.Context, in *MutateAdGroupCriteriaRequest, opts ...grpc.CallOption) (*MutateAdGroupCriteriaResponse, error) {
+	out := new(MutateAdGroupCriteriaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupCriterionService/MutateAdGroupCriteria", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupCriterionServiceServer is the server API for AdGroupCriterionService service.
+type AdGroupCriterionServiceServer interface {
+	// Returns the requested criterion in full detail.
+	GetAdGroupCriterion(context.Context, *GetAdGroupCriterionRequest) (*resources.AdGroupCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateAdGroupCriteria(context.Context, *MutateAdGroupCriteriaRequest) (*MutateAdGroupCriteriaResponse, error)
+}
+
+func RegisterAdGroupCriterionServiceServer(s *grpc.Server, srv AdGroupCriterionServiceServer) {
+	s.RegisterService(&_AdGroupCriterionService_serviceDesc, srv)
+}
+
+func _AdGroupCriterionService_GetAdGroupCriterion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupCriterionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupCriterionServiceServer).GetAdGroupCriterion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupCriterionService/GetAdGroupCriterion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupCriterionServiceServer).GetAdGroupCriterion(ctx, req.(*GetAdGroupCriterionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupCriterionService_MutateAdGroupCriteria_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupCriteriaRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupCriterionServiceServer).MutateAdGroupCriteria(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupCriterionService/MutateAdGroupCriteria",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupCriterionServiceServer).MutateAdGroupCriteria(ctx, req.(*MutateAdGroupCriteriaRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupCriterionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AdGroupCriterionService",
+	HandlerType: (*AdGroupCriterionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupCriterion",
+			Handler:    _AdGroupCriterionService_GetAdGroupCriterion_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupCriteria",
+			Handler:    _AdGroupCriterionService_MutateAdGroupCriteria_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/ad_group_criterion_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/ad_group_criterion_service.proto", fileDescriptor_ad_group_criterion_service_3645d889d01f8ec1)
+}
+
+var fileDescriptor_ad_group_criterion_service_3645d889d01f8ec1 = []byte{
+	// 603 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x4f, 0x8b, 0xd3, 0x4e,
+	0x18, 0xc7, 0x7f, 0x49, 0x7f, 0x54, 0x76, 0xa2, 0x97, 0x11, 0x31, 0x86, 0x8a, 0x25, 0x7a, 0x28,
+	0x3d, 0x24, 0xb5, 0xf5, 0xb2, 0xad, 0xeb, 0x92, 0x2e, 0xd8, 0xf5, 0x50, 0x5d, 0x22, 0x2c, 0xa2,
+	0x85, 0x30, 0xdb, 0xcc, 0x86, 0xb0, 0x4d, 0x26, 0xce, 0x4c, 0x0a, 0xb2, 0xec, 0xc5, 0xb7, 0xe0,
+	0x55, 0x2f, 0x1e, 0x7d, 0x0b, 0x1e, 0xbd, 0x79, 0xf5, 0x24, 0x78, 0xf4, 0x85, 0xc8, 0x64, 0x32,
+	0x75, 0x5b, 0x1b, 0x2a, 0xf5, 0xf6, 0x24, 0xf3, 0xcc, 0xe7, 0xf9, 0xf3, 0x7d, 0x9e, 0x01, 0x5e,
+	0x44, 0x48, 0x34, 0xc3, 0x2e, 0x0a, 0x99, 0x2b, 0x4d, 0x61, 0xcd, 0x3b, 0x2e, 0xc3, 0x74, 0x1e,
+	0x4f, 0x31, 0x73, 0x51, 0x18, 0x44, 0x94, 0xe4, 0x59, 0x30, 0xa5, 0x31, 0xc7, 0x34, 0x26, 0x69,
+	0x50, 0x9e, 0x39, 0x19, 0x25, 0x9c, 0xc0, 0xa6, 0xbc, 0xe7, 0xa0, 0x90, 0x39, 0x0b, 0x84, 0x33,
+	0xef, 0x38, 0x0a, 0x61, 0xf5, 0xab, 0x82, 0x50, 0xcc, 0x48, 0x4e, 0xd7, 0x47, 0x91, 0x74, 0xab,
+	0xa1, 0xee, 0x66, 0xb1, 0x8b, 0xd2, 0x94, 0x70, 0xc4, 0x63, 0x92, 0xb2, 0xf2, 0xb4, 0x8c, 0xed,
+	0x16, 0x5f, 0x27, 0xf9, 0xa9, 0x7b, 0x1a, 0xe3, 0x59, 0x18, 0x24, 0x88, 0x9d, 0x49, 0x0f, 0xdb,
+	0x03, 0xd6, 0x08, 0x73, 0x2f, 0x1c, 0x09, 0xfa, 0x81, 0x82, 0xfb, 0xf8, 0x75, 0x8e, 0x19, 0x87,
+	0x77, 0xc1, 0x35, 0x95, 0x43, 0x90, 0xa2, 0x04, 0x9b, 0x5a, 0x53, 0x6b, 0xed, 0xf8, 0x57, 0xd5,
+	0xcf, 0xa7, 0x28, 0xc1, 0xf6, 0x7b, 0x0d, 0x34, 0xc6, 0x39, 0x47, 0x1c, 0x2f, 0x63, 0x90, 0xa2,
+	0xdc, 0x01, 0xc6, 0x34, 0x67, 0x9c, 0x24, 0x98, 0x06, 0x71, 0x58, 0x32, 0x80, 0xfa, 0xf5, 0x24,
+	0x84, 0xaf, 0x00, 0x20, 0x19, 0xa6, 0x32, 0x75, 0x53, 0x6f, 0xd6, 0x5a, 0x46, 0x77, 0xe0, 0x6c,
+	0xea, 0x9b, 0xb3, 0x9a, 0xf5, 0x33, 0xc5, 0xf0, 0x2f, 0xe1, 0xec, 0x0f, 0x3a, 0xb8, 0x55, 0xe9,
+	0x09, 0x07, 0xc0, 0xc8, 0xb3, 0x10, 0x71, 0x5c, 0x34, 0xc5, 0xfc, 0xbf, 0xa9, 0xb5, 0x8c, 0xae,
+	0xa5, 0x62, 0xab, 0xbe, 0x39, 0x8f, 0x45, 0xdf, 0xc6, 0x88, 0x9d, 0xf9, 0x40, 0xba, 0x0b, 0x1b,
+	0x8e, 0x41, 0x7d, 0x4a, 0x31, 0xe2, 0xb2, 0x2f, 0x46, 0xb7, 0x57, 0x99, 0xf3, 0x42, 0xc9, 0x3f,
+	0x92, 0x3e, 0xfc, 0xcf, 0x2f, 0x21, 0x02, 0x27, 0xe1, 0xa6, 0xfe, 0x4f, 0x38, 0x09, 0x81, 0x26,
+	0xa8, 0x53, 0x9c, 0x90, 0x39, 0x36, 0x6b, 0xa2, 0xe3, 0xe2, 0x44, 0x7e, 0x0f, 0x0d, 0xb0, 0xb3,
+	0x68, 0x90, 0xfd, 0x06, 0xdc, 0xae, 0x50, 0x8f, 0x65, 0x24, 0x65, 0x18, 0xbe, 0x00, 0x57, 0x28,
+	0x66, 0xf9, 0x8c, 0x2b, 0x69, 0x1e, 0x6d, 0x96, 0x66, 0x1d, 0x51, 0x8c, 0x95, 0xc0, 0xf8, 0x0a,
+	0x67, 0x1f, 0xac, 0x1f, 0x1c, 0xe5, 0xf8, 0x57, 0xe3, 0xd7, 0xfd, 0x5c, 0x03, 0x37, 0x57, 0xef,
+	0x3f, 0x97, 0x79, 0xc0, 0x2f, 0x1a, 0xb8, 0xbe, 0x66, 0xbc, 0xe1, 0xc3, 0xcd, 0x15, 0x54, 0x6f,
+	0x85, 0xb5, 0x8d, 0x2e, 0xf6, 0xee, 0xdb, 0x6f, 0x3f, 0xdf, 0xe9, 0x3d, 0x78, 0x5f, 0x2c, 0xf6,
+	0xf9, 0x52, 0x59, 0x7b, 0x6a, 0x15, 0x98, 0xdb, 0x76, 0xd1, 0xb2, 0x0a, 0x6e, 0xfb, 0x02, 0x7e,
+	0xd7, 0xc0, 0x8d, 0xb5, 0x12, 0xc1, 0x2d, 0x95, 0x50, 0x9b, 0x69, 0xed, 0x6f, 0x7d, 0x5f, 0xce,
+	0x86, 0xbd, 0x5f, 0x54, 0xb5, 0x6b, 0x3f, 0x10, 0x55, 0xfd, 0x2e, 0xe3, 0xfc, 0xd2, 0xbe, 0xef,
+	0xb5, 0x2f, 0x56, 0x8b, 0xea, 0x27, 0x05, 0xb4, 0xaf, 0xb5, 0x87, 0x3f, 0x34, 0x70, 0x6f, 0x4a,
+	0x92, 0x8d, 0x79, 0x0c, 0x1b, 0x15, 0x1a, 0x1f, 0x89, 0x15, 0x3d, 0xd2, 0x5e, 0x1e, 0x96, 0x84,
+	0x88, 0xcc, 0x50, 0x1a, 0x39, 0x84, 0x46, 0x6e, 0x84, 0xd3, 0x62, 0x81, 0xd5, 0xa3, 0x9a, 0xc5,
+	0xac, 0xfa, 0x21, 0x1f, 0x28, 0xe3, 0xa3, 0x5e, 0x1b, 0x79, 0xde, 0x27, 0xbd, 0x39, 0x92, 0x40,
+	0x2f, 0x64, 0x8e, 0x34, 0x85, 0x75, 0xdc, 0x71, 0xca, 0xc0, 0xec, 0xab, 0x72, 0x99, 0x78, 0x21,
+	0x9b, 0x2c, 0x5c, 0x26, 0xc7, 0x9d, 0x89, 0x72, 0x39, 0xa9, 0x17, 0x09, 0xf4, 0x7e, 0x05, 0x00,
+	0x00, 0xff, 0xff, 0xf1, 0xe2, 0x63, 0x62, 0x48, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/ad_group_feed_service.pb.go b/googleapis/ads/googleads/v0/services/ad_group_feed_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f37b5e395faa9a1245b8695e79ea7751762a7559
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/ad_group_feed_service.pb.go
@@ -0,0 +1,547 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/ad_group_feed_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [AdGroupFeedService.GetAdGroupFeed][google.ads.googleads.v0.services.AdGroupFeedService.GetAdGroupFeed].
+type GetAdGroupFeedRequest struct {
+	// The resource name of the ad group feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupFeedRequest) Reset()         { *m = GetAdGroupFeedRequest{} }
+func (m *GetAdGroupFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupFeedRequest) ProtoMessage()    {}
+func (*GetAdGroupFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_service_846fa7679024c025, []int{0}
+}
+func (m *GetAdGroupFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupFeedRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupFeedRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAdGroupFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupFeedRequest.Merge(dst, src)
+}
+func (m *GetAdGroupFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupFeedRequest.Size(m)
+}
+func (m *GetAdGroupFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupFeedRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupFeedService.MutateAdGroupFeeds][google.ads.googleads.v0.services.AdGroupFeedService.MutateAdGroupFeeds].
+type MutateAdGroupFeedsRequest struct {
+	// The ID of the customer whose ad group feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual ad group feeds.
+	Operations           []*AdGroupFeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateAdGroupFeedsRequest) Reset()         { *m = MutateAdGroupFeedsRequest{} }
+func (m *MutateAdGroupFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupFeedsRequest) ProtoMessage()    {}
+func (*MutateAdGroupFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_service_846fa7679024c025, []int{1}
+}
+func (m *MutateAdGroupFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupFeedsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupFeedsRequest.Merge(dst, src)
+}
+func (m *MutateAdGroupFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupFeedsRequest.Size(m)
+}
+func (m *MutateAdGroupFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupFeedsRequest) GetOperations() []*AdGroupFeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on an ad group feed.
+type AdGroupFeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupFeedOperation_Create
+	//	*AdGroupFeedOperation_Update
+	//	*AdGroupFeedOperation_Remove
+	Operation            isAdGroupFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *AdGroupFeedOperation) Reset()         { *m = AdGroupFeedOperation{} }
+func (m *AdGroupFeedOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupFeedOperation) ProtoMessage()    {}
+func (*AdGroupFeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_service_846fa7679024c025, []int{2}
+}
+func (m *AdGroupFeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupFeedOperation.Unmarshal(m, b)
+}
+func (m *AdGroupFeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupFeedOperation.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupFeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupFeedOperation.Merge(dst, src)
+}
+func (m *AdGroupFeedOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupFeedOperation.Size(m)
+}
+func (m *AdGroupFeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupFeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupFeedOperation proto.InternalMessageInfo
+
+func (m *AdGroupFeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupFeedOperation_Operation interface {
+	isAdGroupFeedOperation_Operation()
+}
+
+type AdGroupFeedOperation_Create struct {
+	Create *resources.AdGroupFeed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupFeedOperation_Update struct {
+	Update *resources.AdGroupFeed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupFeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupFeedOperation_Create) isAdGroupFeedOperation_Operation() {}
+
+func (*AdGroupFeedOperation_Update) isAdGroupFeedOperation_Operation() {}
+
+func (*AdGroupFeedOperation_Remove) isAdGroupFeedOperation_Operation() {}
+
+func (m *AdGroupFeedOperation) GetOperation() isAdGroupFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupFeedOperation) GetCreate() *resources.AdGroupFeed {
+	if x, ok := m.GetOperation().(*AdGroupFeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupFeedOperation) GetUpdate() *resources.AdGroupFeed {
+	if x, ok := m.GetOperation().(*AdGroupFeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupFeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupFeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AdGroupFeedOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AdGroupFeedOperation_OneofMarshaler, _AdGroupFeedOperation_OneofUnmarshaler, _AdGroupFeedOperation_OneofSizer, []interface{}{
+		(*AdGroupFeedOperation_Create)(nil),
+		(*AdGroupFeedOperation_Update)(nil),
+		(*AdGroupFeedOperation_Remove)(nil),
+	}
+}
+
+func _AdGroupFeedOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AdGroupFeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupFeedOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *AdGroupFeedOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *AdGroupFeedOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("AdGroupFeedOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AdGroupFeedOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AdGroupFeedOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupFeed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupFeedOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroupFeed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupFeedOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &AdGroupFeedOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AdGroupFeedOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AdGroupFeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupFeedOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupFeedOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupFeedOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for an ad group feed mutate.
+type MutateAdGroupFeedsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateAdGroupFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MutateAdGroupFeedsResponse) Reset()         { *m = MutateAdGroupFeedsResponse{} }
+func (m *MutateAdGroupFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupFeedsResponse) ProtoMessage()    {}
+func (*MutateAdGroupFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_service_846fa7679024c025, []int{3}
+}
+func (m *MutateAdGroupFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupFeedsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupFeedsResponse.Merge(dst, src)
+}
+func (m *MutateAdGroupFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupFeedsResponse.Size(m)
+}
+func (m *MutateAdGroupFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupFeedsResponse) GetResults() []*MutateAdGroupFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad group feed mutate.
+type MutateAdGroupFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupFeedResult) Reset()         { *m = MutateAdGroupFeedResult{} }
+func (m *MutateAdGroupFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupFeedResult) ProtoMessage()    {}
+func (*MutateAdGroupFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_feed_service_846fa7679024c025, []int{4}
+}
+func (m *MutateAdGroupFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupFeedResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupFeedResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupFeedResult.Merge(dst, src)
+}
+func (m *MutateAdGroupFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupFeedResult.Size(m)
+}
+func (m *MutateAdGroupFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupFeedResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupFeedRequest)(nil), "google.ads.googleads.v0.services.GetAdGroupFeedRequest")
+	proto.RegisterType((*MutateAdGroupFeedsRequest)(nil), "google.ads.googleads.v0.services.MutateAdGroupFeedsRequest")
+	proto.RegisterType((*AdGroupFeedOperation)(nil), "google.ads.googleads.v0.services.AdGroupFeedOperation")
+	proto.RegisterType((*MutateAdGroupFeedsResponse)(nil), "google.ads.googleads.v0.services.MutateAdGroupFeedsResponse")
+	proto.RegisterType((*MutateAdGroupFeedResult)(nil), "google.ads.googleads.v0.services.MutateAdGroupFeedResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AdGroupFeedServiceClient is the client API for AdGroupFeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupFeedServiceClient interface {
+	// Returns the requested ad group feed in full detail.
+	GetAdGroupFeed(ctx context.Context, in *GetAdGroupFeedRequest, opts ...grpc.CallOption) (*resources.AdGroupFeed, error)
+	// Creates, updates, or removes ad group feeds. Operation statuses are
+	// returned.
+	MutateAdGroupFeeds(ctx context.Context, in *MutateAdGroupFeedsRequest, opts ...grpc.CallOption) (*MutateAdGroupFeedsResponse, error)
+}
+
+type adGroupFeedServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAdGroupFeedServiceClient(cc *grpc.ClientConn) AdGroupFeedServiceClient {
+	return &adGroupFeedServiceClient{cc}
+}
+
+func (c *adGroupFeedServiceClient) GetAdGroupFeed(ctx context.Context, in *GetAdGroupFeedRequest, opts ...grpc.CallOption) (*resources.AdGroupFeed, error) {
+	out := new(resources.AdGroupFeed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupFeedService/GetAdGroupFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupFeedServiceClient) MutateAdGroupFeeds(ctx context.Context, in *MutateAdGroupFeedsRequest, opts ...grpc.CallOption) (*MutateAdGroupFeedsResponse, error) {
+	out := new(MutateAdGroupFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupFeedService/MutateAdGroupFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupFeedServiceServer is the server API for AdGroupFeedService service.
+type AdGroupFeedServiceServer interface {
+	// Returns the requested ad group feed in full detail.
+	GetAdGroupFeed(context.Context, *GetAdGroupFeedRequest) (*resources.AdGroupFeed, error)
+	// Creates, updates, or removes ad group feeds. Operation statuses are
+	// returned.
+	MutateAdGroupFeeds(context.Context, *MutateAdGroupFeedsRequest) (*MutateAdGroupFeedsResponse, error)
+}
+
+func RegisterAdGroupFeedServiceServer(s *grpc.Server, srv AdGroupFeedServiceServer) {
+	s.RegisterService(&_AdGroupFeedService_serviceDesc, srv)
+}
+
+func _AdGroupFeedService_GetAdGroupFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupFeedServiceServer).GetAdGroupFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupFeedService/GetAdGroupFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupFeedServiceServer).GetAdGroupFeed(ctx, req.(*GetAdGroupFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupFeedService_MutateAdGroupFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupFeedServiceServer).MutateAdGroupFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupFeedService/MutateAdGroupFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupFeedServiceServer).MutateAdGroupFeeds(ctx, req.(*MutateAdGroupFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupFeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AdGroupFeedService",
+	HandlerType: (*AdGroupFeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroupFeed",
+			Handler:    _AdGroupFeedService_GetAdGroupFeed_Handler,
+		},
+		{
+			MethodName: "MutateAdGroupFeeds",
+			Handler:    _AdGroupFeedService_MutateAdGroupFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/ad_group_feed_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/ad_group_feed_service.proto", fileDescriptor_ad_group_feed_service_846fa7679024c025)
+}
+
+var fileDescriptor_ad_group_feed_service_846fa7679024c025 = []byte{
+	// 595 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x31, 0x6f, 0xd3, 0x40,
+	0x14, 0xc6, 0x0e, 0x2a, 0xea, 0x19, 0x18, 0x4e, 0xa0, 0x1a, 0x0b, 0x89, 0xc8, 0x30, 0x54, 0x19,
+	0xce, 0x21, 0x88, 0x22, 0x9a, 0x14, 0x29, 0x19, 0x9a, 0x30, 0x14, 0x2a, 0x57, 0xca, 0x80, 0x22,
+	0x59, 0xd7, 0xdc, 0x8b, 0x65, 0x35, 0xf6, 0xb9, 0x3e, 0x3b, 0x4b, 0xd5, 0x85, 0x1f, 0xc0, 0x02,
+	0x03, 0x33, 0x23, 0x1b, 0x7f, 0x03, 0x89, 0x89, 0x81, 0x3f, 0xc0, 0x0f, 0x41, 0xf6, 0xf9, 0x82,
+	0xa3, 0x24, 0x0a, 0x64, 0x7b, 0x77, 0xf7, 0xbe, 0xef, 0xbd, 0xf7, 0xbd, 0xf7, 0x0e, 0x75, 0x7c,
+	0xce, 0xfd, 0x29, 0x38, 0x94, 0x09, 0x47, 0x9a, 0xb9, 0x35, 0x6b, 0x3a, 0x02, 0x92, 0x59, 0x30,
+	0x06, 0xe1, 0x50, 0xe6, 0xf9, 0x09, 0xcf, 0x62, 0x6f, 0x02, 0xc0, 0xbc, 0xf2, 0x9a, 0xc4, 0x09,
+	0x4f, 0x39, 0xae, 0x4b, 0x08, 0xa1, 0x4c, 0x90, 0x39, 0x9a, 0xcc, 0x9a, 0x44, 0xa1, 0xad, 0xe7,
+	0xeb, 0xf8, 0x13, 0x10, 0x3c, 0x4b, 0x96, 0x02, 0x48, 0x62, 0xeb, 0xa1, 0x82, 0xc5, 0x81, 0x43,
+	0xa3, 0x88, 0xa7, 0x34, 0x0d, 0x78, 0x24, 0xca, 0xd7, 0x32, 0xac, 0x53, 0x9c, 0xce, 0xb3, 0x89,
+	0x33, 0x09, 0x60, 0xca, 0xbc, 0x90, 0x8a, 0x0b, 0xe9, 0x61, 0x77, 0xd0, 0xfd, 0x3e, 0xa4, 0x5d,
+	0xd6, 0xcf, 0x89, 0x8f, 0x01, 0x98, 0x0b, 0x97, 0x19, 0x88, 0x14, 0x3f, 0x46, 0x77, 0x54, 0x64,
+	0x2f, 0xa2, 0x21, 0x98, 0x5a, 0x5d, 0xdb, 0xdf, 0x75, 0x6f, 0xab, 0xcb, 0x37, 0x34, 0x04, 0xfb,
+	0x93, 0x86, 0x1e, 0x9c, 0x64, 0x29, 0x4d, 0xa1, 0xc2, 0x20, 0x14, 0xc5, 0x23, 0x64, 0x8c, 0x33,
+	0x91, 0xf2, 0x10, 0x12, 0x2f, 0x60, 0x25, 0x01, 0x52, 0x57, 0xaf, 0x19, 0x1e, 0x22, 0xc4, 0x63,
+	0x48, 0x64, 0xca, 0xa6, 0x5e, 0xaf, 0xed, 0x1b, 0xad, 0x03, 0xb2, 0x49, 0x2a, 0x52, 0x89, 0xf5,
+	0x56, 0xc1, 0xdd, 0x0a, 0x93, 0xfd, 0x41, 0x47, 0xf7, 0x56, 0x39, 0xe1, 0x36, 0x32, 0xb2, 0x98,
+	0xd1, 0x14, 0x0a, 0x09, 0xcc, 0x9b, 0x75, 0x6d, 0xdf, 0x68, 0x59, 0x2a, 0xa2, 0x52, 0x89, 0x1c,
+	0xe7, 0x2a, 0x9d, 0x50, 0x71, 0xe1, 0x22, 0xe9, 0x9e, 0xdb, 0x78, 0x80, 0x76, 0xc6, 0x09, 0xd0,
+	0x54, 0x4a, 0x61, 0xb4, 0xc8, 0xda, 0x4c, 0xe7, 0x2d, 0xab, 0xa6, 0x3a, 0xb8, 0xe1, 0x96, 0xf8,
+	0x9c, 0x49, 0xf2, 0x9a, 0xfa, 0xb6, 0x4c, 0x12, 0x8f, 0x4d, 0xb4, 0x93, 0x40, 0xc8, 0x67, 0x60,
+	0xd6, 0x72, 0x75, 0xf3, 0x17, 0x79, 0xee, 0x19, 0x68, 0x77, 0xae, 0x88, 0x7d, 0x89, 0xac, 0x55,
+	0x6d, 0x12, 0x31, 0x8f, 0x04, 0xe0, 0x33, 0x74, 0x2b, 0x01, 0x91, 0x4d, 0x53, 0xd5, 0x83, 0x97,
+	0x9b, 0x7b, 0xb0, 0x44, 0xe7, 0x16, 0x0c, 0xae, 0x62, 0xb2, 0x5f, 0xa1, 0xbd, 0x35, 0x3e, 0xff,
+	0x34, 0x5a, 0xad, 0xcf, 0x35, 0x84, 0x2b, 0xd0, 0x33, 0x19, 0x18, 0x7f, 0xd3, 0xd0, 0xdd, 0xc5,
+	0x81, 0xc5, 0x2f, 0x36, 0x67, 0xbb, 0x72, 0xc4, 0xad, 0xff, 0x94, 0xdd, 0x3e, 0x78, 0xff, 0xf3,
+	0xf7, 0x47, 0xbd, 0x89, 0x49, 0xbe, 0x96, 0x57, 0x0b, 0x25, 0x1c, 0xa9, 0xa9, 0x16, 0x4e, 0xc3,
+	0xa1, 0x15, 0x91, 0x9d, 0xc6, 0x35, 0xfe, 0xa1, 0x21, 0xbc, 0x2c, 0x3f, 0x6e, 0x6f, 0xa1, 0xb2,
+	0xda, 0x2d, 0xab, 0xb3, 0x1d, 0x58, 0x76, 0xdc, 0xee, 0x14, 0x95, 0x1c, 0xd8, 0x4f, 0xf3, 0x4a,
+	0xfe, 0xa6, 0x7e, 0x55, 0x59, 0xd7, 0xa3, 0xc6, 0xf5, 0x42, 0x21, 0x87, 0x61, 0x41, 0x77, 0xa8,
+	0x35, 0x7a, 0xbf, 0x34, 0xf4, 0x64, 0xcc, 0xc3, 0x8d, 0x19, 0xf4, 0xf6, 0x96, 0x1b, 0x78, 0x9a,
+	0xef, 0xd8, 0xa9, 0xf6, 0x6e, 0x50, 0x82, 0x7d, 0x3e, 0xa5, 0x91, 0x4f, 0x78, 0xe2, 0x3b, 0x3e,
+	0x44, 0xc5, 0x06, 0xaa, 0xef, 0x2f, 0x0e, 0xc4, 0xfa, 0xdf, 0xb6, 0xad, 0x8c, 0x2f, 0x7a, 0xad,
+	0xdf, 0xed, 0x7e, 0xd5, 0xeb, 0x7d, 0x49, 0xd8, 0x65, 0x82, 0x48, 0x33, 0xb7, 0x86, 0x4d, 0x52,
+	0x06, 0x16, 0xdf, 0x95, 0xcb, 0xa8, 0xcb, 0xc4, 0x68, 0xee, 0x32, 0x1a, 0x36, 0x47, 0xca, 0xe5,
+	0x7c, 0xa7, 0x48, 0xe0, 0xd9, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x08, 0x96, 0x6e, 0xed,
+	0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/ad_group_service.pb.go b/googleapis/ads/googleads/v0/services/ad_group_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f6daf668d9cb39427dabf92327d8b06d102b657a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/ad_group_service.pb.go
@@ -0,0 +1,544 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/ad_group_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [AdGroupService.GetAdGroup][google.ads.googleads.v0.services.AdGroupService.GetAdGroup].
+type GetAdGroupRequest struct {
+	// The resource name of the ad group to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAdGroupRequest) Reset()         { *m = GetAdGroupRequest{} }
+func (m *GetAdGroupRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAdGroupRequest) ProtoMessage()    {}
+func (*GetAdGroupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_service_ac847ce94dace47a, []int{0}
+}
+func (m *GetAdGroupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAdGroupRequest.Unmarshal(m, b)
+}
+func (m *GetAdGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAdGroupRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAdGroupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAdGroupRequest.Merge(dst, src)
+}
+func (m *GetAdGroupRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAdGroupRequest.Size(m)
+}
+func (m *GetAdGroupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAdGroupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAdGroupRequest proto.InternalMessageInfo
+
+func (m *GetAdGroupRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [AdGroupService.MutateAdGroups][google.ads.googleads.v0.services.AdGroupService.MutateAdGroups].
+type MutateAdGroupsRequest struct {
+	// The ID of the customer whose ad groups are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual ad groups.
+	Operations           []*AdGroupOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *MutateAdGroupsRequest) Reset()         { *m = MutateAdGroupsRequest{} }
+func (m *MutateAdGroupsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupsRequest) ProtoMessage()    {}
+func (*MutateAdGroupsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_service_ac847ce94dace47a, []int{1}
+}
+func (m *MutateAdGroupsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupsRequest.Unmarshal(m, b)
+}
+func (m *MutateAdGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupsRequest.Merge(dst, src)
+}
+func (m *MutateAdGroupsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupsRequest.Size(m)
+}
+func (m *MutateAdGroupsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupsRequest proto.InternalMessageInfo
+
+func (m *MutateAdGroupsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateAdGroupsRequest) GetOperations() []*AdGroupOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on an ad group.
+type AdGroupOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*AdGroupOperation_Create
+	//	*AdGroupOperation_Update
+	//	*AdGroupOperation_Remove
+	Operation            isAdGroupOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *AdGroupOperation) Reset()         { *m = AdGroupOperation{} }
+func (m *AdGroupOperation) String() string { return proto.CompactTextString(m) }
+func (*AdGroupOperation) ProtoMessage()    {}
+func (*AdGroupOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_service_ac847ce94dace47a, []int{2}
+}
+func (m *AdGroupOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdGroupOperation.Unmarshal(m, b)
+}
+func (m *AdGroupOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdGroupOperation.Marshal(b, m, deterministic)
+}
+func (dst *AdGroupOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdGroupOperation.Merge(dst, src)
+}
+func (m *AdGroupOperation) XXX_Size() int {
+	return xxx_messageInfo_AdGroupOperation.Size(m)
+}
+func (m *AdGroupOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdGroupOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdGroupOperation proto.InternalMessageInfo
+
+func (m *AdGroupOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isAdGroupOperation_Operation interface {
+	isAdGroupOperation_Operation()
+}
+
+type AdGroupOperation_Create struct {
+	Create *resources.AdGroup `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type AdGroupOperation_Update struct {
+	Update *resources.AdGroup `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type AdGroupOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*AdGroupOperation_Create) isAdGroupOperation_Operation() {}
+
+func (*AdGroupOperation_Update) isAdGroupOperation_Operation() {}
+
+func (*AdGroupOperation_Remove) isAdGroupOperation_Operation() {}
+
+func (m *AdGroupOperation) GetOperation() isAdGroupOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *AdGroupOperation) GetCreate() *resources.AdGroup {
+	if x, ok := m.GetOperation().(*AdGroupOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *AdGroupOperation) GetUpdate() *resources.AdGroup {
+	if x, ok := m.GetOperation().(*AdGroupOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *AdGroupOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*AdGroupOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*AdGroupOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _AdGroupOperation_OneofMarshaler, _AdGroupOperation_OneofUnmarshaler, _AdGroupOperation_OneofSizer, []interface{}{
+		(*AdGroupOperation_Create)(nil),
+		(*AdGroupOperation_Update)(nil),
+		(*AdGroupOperation_Remove)(nil),
+	}
+}
+
+func _AdGroupOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*AdGroupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *AdGroupOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *AdGroupOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("AdGroupOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _AdGroupOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*AdGroupOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroup)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.AdGroup)
+		err := b.DecodeMessage(msg)
+		m.Operation = &AdGroupOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &AdGroupOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _AdGroupOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*AdGroupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *AdGroupOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *AdGroupOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for an ad group mutate.
+type MutateAdGroupsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateAdGroupResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *MutateAdGroupsResponse) Reset()         { *m = MutateAdGroupsResponse{} }
+func (m *MutateAdGroupsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupsResponse) ProtoMessage()    {}
+func (*MutateAdGroupsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_service_ac847ce94dace47a, []int{3}
+}
+func (m *MutateAdGroupsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupsResponse.Unmarshal(m, b)
+}
+func (m *MutateAdGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupsResponse.Merge(dst, src)
+}
+func (m *MutateAdGroupsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupsResponse.Size(m)
+}
+func (m *MutateAdGroupsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupsResponse proto.InternalMessageInfo
+
+func (m *MutateAdGroupsResponse) GetResults() []*MutateAdGroupResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the ad group mutate.
+type MutateAdGroupResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateAdGroupResult) Reset()         { *m = MutateAdGroupResult{} }
+func (m *MutateAdGroupResult) String() string { return proto.CompactTextString(m) }
+func (*MutateAdGroupResult) ProtoMessage()    {}
+func (*MutateAdGroupResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ad_group_service_ac847ce94dace47a, []int{4}
+}
+func (m *MutateAdGroupResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateAdGroupResult.Unmarshal(m, b)
+}
+func (m *MutateAdGroupResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateAdGroupResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateAdGroupResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateAdGroupResult.Merge(dst, src)
+}
+func (m *MutateAdGroupResult) XXX_Size() int {
+	return xxx_messageInfo_MutateAdGroupResult.Size(m)
+}
+func (m *MutateAdGroupResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateAdGroupResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateAdGroupResult proto.InternalMessageInfo
+
+func (m *MutateAdGroupResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAdGroupRequest)(nil), "google.ads.googleads.v0.services.GetAdGroupRequest")
+	proto.RegisterType((*MutateAdGroupsRequest)(nil), "google.ads.googleads.v0.services.MutateAdGroupsRequest")
+	proto.RegisterType((*AdGroupOperation)(nil), "google.ads.googleads.v0.services.AdGroupOperation")
+	proto.RegisterType((*MutateAdGroupsResponse)(nil), "google.ads.googleads.v0.services.MutateAdGroupsResponse")
+	proto.RegisterType((*MutateAdGroupResult)(nil), "google.ads.googleads.v0.services.MutateAdGroupResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AdGroupServiceClient is the client API for AdGroupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdGroupServiceClient interface {
+	// Returns the requested ad group in full detail.
+	GetAdGroup(ctx context.Context, in *GetAdGroupRequest, opts ...grpc.CallOption) (*resources.AdGroup, error)
+	// Creates, updates, or removes ad groups. Operation statuses are returned.
+	MutateAdGroups(ctx context.Context, in *MutateAdGroupsRequest, opts ...grpc.CallOption) (*MutateAdGroupsResponse, error)
+}
+
+type adGroupServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAdGroupServiceClient(cc *grpc.ClientConn) AdGroupServiceClient {
+	return &adGroupServiceClient{cc}
+}
+
+func (c *adGroupServiceClient) GetAdGroup(ctx context.Context, in *GetAdGroupRequest, opts ...grpc.CallOption) (*resources.AdGroup, error) {
+	out := new(resources.AdGroup)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupService/GetAdGroup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *adGroupServiceClient) MutateAdGroups(ctx context.Context, in *MutateAdGroupsRequest, opts ...grpc.CallOption) (*MutateAdGroupsResponse, error) {
+	out := new(MutateAdGroupsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AdGroupService/MutateAdGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdGroupServiceServer is the server API for AdGroupService service.
+type AdGroupServiceServer interface {
+	// Returns the requested ad group in full detail.
+	GetAdGroup(context.Context, *GetAdGroupRequest) (*resources.AdGroup, error)
+	// Creates, updates, or removes ad groups. Operation statuses are returned.
+	MutateAdGroups(context.Context, *MutateAdGroupsRequest) (*MutateAdGroupsResponse, error)
+}
+
+func RegisterAdGroupServiceServer(s *grpc.Server, srv AdGroupServiceServer) {
+	s.RegisterService(&_AdGroupService_serviceDesc, srv)
+}
+
+func _AdGroupService_GetAdGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAdGroupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupServiceServer).GetAdGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupService/GetAdGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupServiceServer).GetAdGroup(ctx, req.(*GetAdGroupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AdGroupService_MutateAdGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateAdGroupsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdGroupServiceServer).MutateAdGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AdGroupService/MutateAdGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdGroupServiceServer).MutateAdGroups(ctx, req.(*MutateAdGroupsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AdGroupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AdGroupService",
+	HandlerType: (*AdGroupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAdGroup",
+			Handler:    _AdGroupService_GetAdGroup_Handler,
+		},
+		{
+			MethodName: "MutateAdGroups",
+			Handler:    _AdGroupService_MutateAdGroups_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/ad_group_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/ad_group_service.proto", fileDescriptor_ad_group_service_ac847ce94dace47a)
+}
+
+var fileDescriptor_ad_group_service_ac847ce94dace47a = []byte{
+	// 585 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6e, 0xd3, 0x40,
+	0x10, 0xc5, 0x0e, 0x0a, 0xea, 0x18, 0x2a, 0xd8, 0x0a, 0x64, 0x45, 0x48, 0x44, 0x86, 0x43, 0x64,
+	0x81, 0x1d, 0xb9, 0x42, 0x8d, 0x52, 0xf5, 0x90, 0x08, 0x91, 0x72, 0x28, 0xad, 0x8c, 0xd4, 0x03,
+	0x8a, 0x14, 0x6d, 0xe3, 0xad, 0x65, 0x35, 0xf6, 0x1a, 0xef, 0x3a, 0x97, 0xaa, 0x97, 0x9e, 0xb9,
+	0xf1, 0x05, 0x70, 0xe4, 0x1f, 0xf8, 0x01, 0xae, 0xfd, 0x05, 0x3e, 0x81, 0x0f, 0x40, 0xeb, 0xdd,
+	0x4d, 0x93, 0x42, 0x14, 0xd2, 0xdb, 0x78, 0x77, 0xde, 0x9b, 0xe7, 0x37, 0x33, 0x0b, 0x3b, 0x31,
+	0xa5, 0xf1, 0x84, 0xf8, 0x38, 0x62, 0xbe, 0x0c, 0x45, 0x34, 0x6d, 0xfb, 0x8c, 0x14, 0xd3, 0x64,
+	0x4c, 0x98, 0x8f, 0xa3, 0x51, 0x5c, 0xd0, 0x32, 0x1f, 0xa9, 0x13, 0x2f, 0x2f, 0x28, 0xa7, 0xa8,
+	0x29, 0xb3, 0x3d, 0x1c, 0x31, 0x6f, 0x06, 0xf4, 0xa6, 0x6d, 0x4f, 0x03, 0x1b, 0xed, 0x65, 0xd4,
+	0x05, 0x61, 0xb4, 0x2c, 0xe6, 0xb9, 0x25, 0x67, 0xe3, 0xa9, 0x46, 0xe4, 0x89, 0x8f, 0xb3, 0x8c,
+	0x72, 0xcc, 0x13, 0x9a, 0x31, 0x75, 0xab, 0x2a, 0xfa, 0xd5, 0xd7, 0x49, 0x79, 0xea, 0x9f, 0x26,
+	0x64, 0x12, 0x8d, 0x52, 0xcc, 0xce, 0x64, 0x86, 0xd3, 0x81, 0x47, 0x03, 0xc2, 0x7b, 0xd1, 0x40,
+	0x70, 0x86, 0xe4, 0x53, 0x49, 0x18, 0x47, 0xcf, 0xe1, 0x81, 0x2e, 0x38, 0xca, 0x70, 0x4a, 0x6c,
+	0xa3, 0x69, 0xb4, 0x36, 0xc2, 0xfb, 0xfa, 0xf0, 0x3d, 0x4e, 0x89, 0xf3, 0xd9, 0x80, 0xc7, 0x07,
+	0x25, 0xc7, 0x9c, 0x28, 0x34, 0xd3, 0xf0, 0x67, 0x60, 0x8d, 0x4b, 0xc6, 0x69, 0x4a, 0x8a, 0x51,
+	0x12, 0x29, 0x30, 0xe8, 0xa3, 0x77, 0x11, 0x0a, 0x01, 0x68, 0x4e, 0x0a, 0x29, 0xd5, 0x36, 0x9b,
+	0xb5, 0x96, 0x15, 0x04, 0xde, 0x2a, 0x77, 0x3c, 0x55, 0xe7, 0x50, 0x43, 0xc3, 0x39, 0x16, 0xe7,
+	0xd2, 0x84, 0x87, 0x37, 0x13, 0xd0, 0x2e, 0x58, 0x65, 0x1e, 0x61, 0x4e, 0xaa, 0x5f, 0xb6, 0xef,
+	0x36, 0x8d, 0x96, 0x15, 0x34, 0x74, 0x25, 0xed, 0x8a, 0xf7, 0x56, 0xb8, 0x72, 0x80, 0xd9, 0x59,
+	0x08, 0x32, 0x5d, 0xc4, 0xe8, 0x0d, 0xd4, 0xc7, 0x05, 0xc1, 0x5c, 0xfe, 0xbe, 0x15, 0xb8, 0x4b,
+	0x15, 0xce, 0xba, 0xa3, 0x25, 0xee, 0xdf, 0x09, 0x15, 0x56, 0xb0, 0x48, 0x4e, 0xdb, 0xbc, 0x0d,
+	0x8b, 0xc4, 0x22, 0x1b, 0xea, 0x05, 0x49, 0xe9, 0x94, 0xd8, 0x35, 0xe1, 0xa6, 0xb8, 0x91, 0xdf,
+	0x7d, 0x0b, 0x36, 0x66, 0x2e, 0x38, 0x09, 0x3c, 0xb9, 0xd9, 0x12, 0x96, 0xd3, 0x8c, 0x11, 0x74,
+	0x08, 0xf7, 0x0a, 0xc2, 0xca, 0x09, 0xd7, 0x7e, 0xbf, 0x5e, 0xed, 0xf7, 0x02, 0x55, 0x58, 0xa1,
+	0x43, 0xcd, 0xe2, 0x74, 0x61, 0xeb, 0x1f, 0xf7, 0xff, 0x35, 0x3a, 0xc1, 0x6f, 0x13, 0x36, 0x15,
+	0xec, 0x83, 0x2c, 0x86, 0xbe, 0x1a, 0x00, 0xd7, 0x83, 0x88, 0xb6, 0x57, 0xab, 0xfb, 0x6b, 0x6c,
+	0x1b, 0x6b, 0x58, 0xeb, 0x04, 0x97, 0x57, 0xbf, 0xbe, 0x98, 0x2f, 0x91, 0x2b, 0xb6, 0xeb, 0x7c,
+	0x41, 0xf2, 0x9e, 0x9e, 0x54, 0xe6, 0xbb, 0x3e, 0x56, 0x46, 0xfa, 0xee, 0x05, 0xfa, 0x61, 0xc0,
+	0xe6, 0xa2, 0xbd, 0x68, 0x67, 0x4d, 0x17, 0xf5, 0x8e, 0x34, 0x3a, 0xeb, 0x03, 0x65, 0x27, 0x9d,
+	0x4e, 0xa5, 0x3c, 0x70, 0x5e, 0x09, 0xe5, 0xd7, 0x52, 0xcf, 0xe7, 0x56, 0x6e, 0xcf, 0xbd, 0x98,
+	0x09, 0xef, 0xa6, 0x15, 0x4d, 0xd7, 0x70, 0xfb, 0x57, 0x06, 0xbc, 0x18, 0xd3, 0x74, 0x65, 0xe5,
+	0xfe, 0xd6, 0x62, 0x73, 0x8e, 0xc4, 0x9e, 0x1c, 0x19, 0x1f, 0xf7, 0x15, 0x30, 0xa6, 0x13, 0x9c,
+	0xc5, 0x1e, 0x2d, 0x62, 0x3f, 0x26, 0x59, 0xb5, 0x45, 0xfa, 0xb5, 0xca, 0x13, 0xb6, 0xfc, 0x5d,
+	0xdc, 0xd5, 0xc1, 0x37, 0xb3, 0x36, 0xe8, 0xf5, 0xbe, 0x9b, 0xcd, 0x81, 0x24, 0xec, 0x45, 0xcc,
+	0x93, 0xa1, 0x88, 0x8e, 0xdb, 0x9e, 0x2a, 0xcc, 0x7e, 0xea, 0x94, 0x61, 0x2f, 0x62, 0xc3, 0x59,
+	0xca, 0xf0, 0xb8, 0x3d, 0xd4, 0x29, 0x27, 0xf5, 0x4a, 0xc0, 0xf6, 0x9f, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x08, 0x37, 0xc8, 0x48, 0x97, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/age_range_view_service.pb.go b/googleapis/ads/googleads/v0/services/age_range_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d852a90eadbd494318ef0c1360f1902d67c2f2d7
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/age_range_view_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/age_range_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [AgeRangeViewService.GetAgeRangeView][google.ads.googleads.v0.services.AgeRangeViewService.GetAgeRangeView].
+type GetAgeRangeViewRequest struct {
+	// The resource name of the age range view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetAgeRangeViewRequest) Reset()         { *m = GetAgeRangeViewRequest{} }
+func (m *GetAgeRangeViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetAgeRangeViewRequest) ProtoMessage()    {}
+func (*GetAgeRangeViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_age_range_view_service_74c6bf1381994fec, []int{0}
+}
+func (m *GetAgeRangeViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetAgeRangeViewRequest.Unmarshal(m, b)
+}
+func (m *GetAgeRangeViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetAgeRangeViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetAgeRangeViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetAgeRangeViewRequest.Merge(dst, src)
+}
+func (m *GetAgeRangeViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetAgeRangeViewRequest.Size(m)
+}
+func (m *GetAgeRangeViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetAgeRangeViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetAgeRangeViewRequest proto.InternalMessageInfo
+
+func (m *GetAgeRangeViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetAgeRangeViewRequest)(nil), "google.ads.googleads.v0.services.GetAgeRangeViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AgeRangeViewServiceClient is the client API for AgeRangeViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AgeRangeViewServiceClient interface {
+	// Returns the requested age range view in full detail.
+	GetAgeRangeView(ctx context.Context, in *GetAgeRangeViewRequest, opts ...grpc.CallOption) (*resources.AgeRangeView, error)
+}
+
+type ageRangeViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAgeRangeViewServiceClient(cc *grpc.ClientConn) AgeRangeViewServiceClient {
+	return &ageRangeViewServiceClient{cc}
+}
+
+func (c *ageRangeViewServiceClient) GetAgeRangeView(ctx context.Context, in *GetAgeRangeViewRequest, opts ...grpc.CallOption) (*resources.AgeRangeView, error) {
+	out := new(resources.AgeRangeView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.AgeRangeViewService/GetAgeRangeView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AgeRangeViewServiceServer is the server API for AgeRangeViewService service.
+type AgeRangeViewServiceServer interface {
+	// Returns the requested age range view in full detail.
+	GetAgeRangeView(context.Context, *GetAgeRangeViewRequest) (*resources.AgeRangeView, error)
+}
+
+func RegisterAgeRangeViewServiceServer(s *grpc.Server, srv AgeRangeViewServiceServer) {
+	s.RegisterService(&_AgeRangeViewService_serviceDesc, srv)
+}
+
+func _AgeRangeViewService_GetAgeRangeView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAgeRangeViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AgeRangeViewServiceServer).GetAgeRangeView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.AgeRangeViewService/GetAgeRangeView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AgeRangeViewServiceServer).GetAgeRangeView(ctx, req.(*GetAgeRangeViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _AgeRangeViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.AgeRangeViewService",
+	HandlerType: (*AgeRangeViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetAgeRangeView",
+			Handler:    _AgeRangeViewService_GetAgeRangeView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/age_range_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/age_range_view_service.proto", fileDescriptor_age_range_view_service_74c6bf1381994fec)
+}
+
+var fileDescriptor_age_range_view_service_74c6bf1381994fec = []byte{
+	// 348 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xc4, 0xf4, 0xd4, 0xf8, 0xa2, 0xc4, 0xbc, 0xf4, 0xd4,
+	0xf8, 0xb2, 0xcc, 0xd4, 0xf2, 0x78, 0xa8, 0xb8, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02,
+	0x44, 0x8f, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xbb, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xbb, 0x94,
+	0x19, 0x2e, 0x0b, 0x8a, 0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0x30, 0x6d, 0x80, 0x98, 0x2c, 0x25, 0x03,
+	0xd3, 0x57, 0x90, 0xa9, 0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c,
+	0x91, 0x55, 0xb2, 0xe5, 0x12, 0x73, 0x4f, 0x2d, 0x71, 0x4c, 0x4f, 0x0d, 0x02, 0xe9, 0x0b, 0xcb,
+	0x4c, 0x2d, 0x0f, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0x11, 0x52, 0xe6, 0xe2, 0x85, 0x99, 0x1c,
+	0x9f, 0x97, 0x98, 0x9b, 0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x03, 0x13, 0xf4, 0x4b,
+	0xcc, 0x4d, 0x35, 0x3a, 0xcb, 0xc8, 0x25, 0x8c, 0xac, 0x39, 0x18, 0xe2, 0x5a, 0xa1, 0xad, 0x8c,
+	0x5c, 0xfc, 0x68, 0xe6, 0x0a, 0x59, 0xe8, 0x11, 0xf2, 0xa3, 0x1e, 0x76, 0xa7, 0x48, 0xe9, 0xe3,
+	0xd4, 0x09, 0xf7, 0xbb, 0x1e, 0xb2, 0x3e, 0x25, 0xf3, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x19, 0x0a,
+	0xe9, 0x83, 0xc2, 0xa7, 0x1a, 0xc5, 0x1b, 0xb6, 0xc9, 0xa5, 0xc5, 0x25, 0xf9, 0xb9, 0xa9, 0x45,
+	0xc5, 0xfa, 0x5a, 0xa0, 0x00, 0x83, 0x6b, 0x2a, 0xd6, 0xd7, 0xaa, 0x75, 0xba, 0xc1, 0xc8, 0xa5,
+	0x92, 0x9c, 0x9f, 0x4b, 0xd0, 0xa5, 0x4e, 0x12, 0x58, 0x7c, 0x1d, 0x00, 0x0a, 0xd1, 0x00, 0xc6,
+	0x28, 0x0f, 0xa8, 0xee, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4,
+	0xd4, 0x3c, 0x70, 0x78, 0xc3, 0x62, 0xae, 0x20, 0xb3, 0x18, 0x77, 0x4a, 0xb1, 0x86, 0x31, 0x16,
+	0x31, 0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62, 0x52, 0x70, 0x87, 0x18, 0xe8, 0x98, 0x52, 0xac, 0x07,
+	0x61, 0x82, 0x58, 0x61, 0x06, 0x7a, 0x50, 0x8b, 0x8b, 0x4f, 0xc1, 0x94, 0xc4, 0x38, 0xa6, 0x14,
+	0xc7, 0xc0, 0x95, 0xc4, 0x84, 0x19, 0xc4, 0xc0, 0x94, 0x24, 0xb1, 0x81, 0x1d, 0x60, 0x0c, 0x08,
+	0x00, 0x00, 0xff, 0xff, 0xf2, 0xcb, 0xcf, 0x38, 0xa9, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/bidding_strategy_service.pb.go b/googleapis/ads/googleads/v0/services/bidding_strategy_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0660c3b40e0d3838993a785277fc2dd9b966d993
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/bidding_strategy_service.pb.go
@@ -0,0 +1,547 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/bidding_strategy_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [BiddingStrategyService.GetBiddingStrategy][google.ads.googleads.v0.services.BiddingStrategyService.GetBiddingStrategy].
+type GetBiddingStrategyRequest struct {
+	// The resource name of the bidding strategy to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetBiddingStrategyRequest) Reset()         { *m = GetBiddingStrategyRequest{} }
+func (m *GetBiddingStrategyRequest) String() string { return proto.CompactTextString(m) }
+func (*GetBiddingStrategyRequest) ProtoMessage()    {}
+func (*GetBiddingStrategyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_service_e353af7be94060a5, []int{0}
+}
+func (m *GetBiddingStrategyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBiddingStrategyRequest.Unmarshal(m, b)
+}
+func (m *GetBiddingStrategyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBiddingStrategyRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetBiddingStrategyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBiddingStrategyRequest.Merge(dst, src)
+}
+func (m *GetBiddingStrategyRequest) XXX_Size() int {
+	return xxx_messageInfo_GetBiddingStrategyRequest.Size(m)
+}
+func (m *GetBiddingStrategyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBiddingStrategyRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBiddingStrategyRequest proto.InternalMessageInfo
+
+func (m *GetBiddingStrategyRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [BiddingStrategyService.MutateBiddingStrategies][google.ads.googleads.v0.services.BiddingStrategyService.MutateBiddingStrategies].
+type MutateBiddingStrategiesRequest struct {
+	// The ID of the customer whose bidding strategies are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual bidding strategies.
+	Operations           []*BiddingStrategyOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateBiddingStrategiesRequest) Reset()         { *m = MutateBiddingStrategiesRequest{} }
+func (m *MutateBiddingStrategiesRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateBiddingStrategiesRequest) ProtoMessage()    {}
+func (*MutateBiddingStrategiesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_service_e353af7be94060a5, []int{1}
+}
+func (m *MutateBiddingStrategiesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBiddingStrategiesRequest.Unmarshal(m, b)
+}
+func (m *MutateBiddingStrategiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBiddingStrategiesRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateBiddingStrategiesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBiddingStrategiesRequest.Merge(dst, src)
+}
+func (m *MutateBiddingStrategiesRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateBiddingStrategiesRequest.Size(m)
+}
+func (m *MutateBiddingStrategiesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBiddingStrategiesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBiddingStrategiesRequest proto.InternalMessageInfo
+
+func (m *MutateBiddingStrategiesRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateBiddingStrategiesRequest) GetOperations() []*BiddingStrategyOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a bidding strategy.
+type BiddingStrategyOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*BiddingStrategyOperation_Create
+	//	*BiddingStrategyOperation_Update
+	//	*BiddingStrategyOperation_Remove
+	Operation            isBiddingStrategyOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *BiddingStrategyOperation) Reset()         { *m = BiddingStrategyOperation{} }
+func (m *BiddingStrategyOperation) String() string { return proto.CompactTextString(m) }
+func (*BiddingStrategyOperation) ProtoMessage()    {}
+func (*BiddingStrategyOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_service_e353af7be94060a5, []int{2}
+}
+func (m *BiddingStrategyOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BiddingStrategyOperation.Unmarshal(m, b)
+}
+func (m *BiddingStrategyOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BiddingStrategyOperation.Marshal(b, m, deterministic)
+}
+func (dst *BiddingStrategyOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BiddingStrategyOperation.Merge(dst, src)
+}
+func (m *BiddingStrategyOperation) XXX_Size() int {
+	return xxx_messageInfo_BiddingStrategyOperation.Size(m)
+}
+func (m *BiddingStrategyOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_BiddingStrategyOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BiddingStrategyOperation proto.InternalMessageInfo
+
+func (m *BiddingStrategyOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isBiddingStrategyOperation_Operation interface {
+	isBiddingStrategyOperation_Operation()
+}
+
+type BiddingStrategyOperation_Create struct {
+	Create *resources.BiddingStrategy `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type BiddingStrategyOperation_Update struct {
+	Update *resources.BiddingStrategy `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type BiddingStrategyOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*BiddingStrategyOperation_Create) isBiddingStrategyOperation_Operation() {}
+
+func (*BiddingStrategyOperation_Update) isBiddingStrategyOperation_Operation() {}
+
+func (*BiddingStrategyOperation_Remove) isBiddingStrategyOperation_Operation() {}
+
+func (m *BiddingStrategyOperation) GetOperation() isBiddingStrategyOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *BiddingStrategyOperation) GetCreate() *resources.BiddingStrategy {
+	if x, ok := m.GetOperation().(*BiddingStrategyOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *BiddingStrategyOperation) GetUpdate() *resources.BiddingStrategy {
+	if x, ok := m.GetOperation().(*BiddingStrategyOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *BiddingStrategyOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*BiddingStrategyOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*BiddingStrategyOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _BiddingStrategyOperation_OneofMarshaler, _BiddingStrategyOperation_OneofUnmarshaler, _BiddingStrategyOperation_OneofSizer, []interface{}{
+		(*BiddingStrategyOperation_Create)(nil),
+		(*BiddingStrategyOperation_Update)(nil),
+		(*BiddingStrategyOperation_Remove)(nil),
+	}
+}
+
+func _BiddingStrategyOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*BiddingStrategyOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *BiddingStrategyOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *BiddingStrategyOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *BiddingStrategyOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("BiddingStrategyOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _BiddingStrategyOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*BiddingStrategyOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.BiddingStrategy)
+		err := b.DecodeMessage(msg)
+		m.Operation = &BiddingStrategyOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.BiddingStrategy)
+		err := b.DecodeMessage(msg)
+		m.Operation = &BiddingStrategyOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &BiddingStrategyOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _BiddingStrategyOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*BiddingStrategyOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *BiddingStrategyOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BiddingStrategyOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BiddingStrategyOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for bidding strategy mutate.
+type MutateBiddingStrategiesResponse struct {
+	// All results for the mutate.
+	Results              []*MutateBiddingStrategyResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MutateBiddingStrategiesResponse) Reset()         { *m = MutateBiddingStrategiesResponse{} }
+func (m *MutateBiddingStrategiesResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateBiddingStrategiesResponse) ProtoMessage()    {}
+func (*MutateBiddingStrategiesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_service_e353af7be94060a5, []int{3}
+}
+func (m *MutateBiddingStrategiesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBiddingStrategiesResponse.Unmarshal(m, b)
+}
+func (m *MutateBiddingStrategiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBiddingStrategiesResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateBiddingStrategiesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBiddingStrategiesResponse.Merge(dst, src)
+}
+func (m *MutateBiddingStrategiesResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateBiddingStrategiesResponse.Size(m)
+}
+func (m *MutateBiddingStrategiesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBiddingStrategiesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBiddingStrategiesResponse proto.InternalMessageInfo
+
+func (m *MutateBiddingStrategiesResponse) GetResults() []*MutateBiddingStrategyResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the bidding strategy mutate.
+type MutateBiddingStrategyResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateBiddingStrategyResult) Reset()         { *m = MutateBiddingStrategyResult{} }
+func (m *MutateBiddingStrategyResult) String() string { return proto.CompactTextString(m) }
+func (*MutateBiddingStrategyResult) ProtoMessage()    {}
+func (*MutateBiddingStrategyResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_bidding_strategy_service_e353af7be94060a5, []int{4}
+}
+func (m *MutateBiddingStrategyResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBiddingStrategyResult.Unmarshal(m, b)
+}
+func (m *MutateBiddingStrategyResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBiddingStrategyResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateBiddingStrategyResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBiddingStrategyResult.Merge(dst, src)
+}
+func (m *MutateBiddingStrategyResult) XXX_Size() int {
+	return xxx_messageInfo_MutateBiddingStrategyResult.Size(m)
+}
+func (m *MutateBiddingStrategyResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBiddingStrategyResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBiddingStrategyResult proto.InternalMessageInfo
+
+func (m *MutateBiddingStrategyResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetBiddingStrategyRequest)(nil), "google.ads.googleads.v0.services.GetBiddingStrategyRequest")
+	proto.RegisterType((*MutateBiddingStrategiesRequest)(nil), "google.ads.googleads.v0.services.MutateBiddingStrategiesRequest")
+	proto.RegisterType((*BiddingStrategyOperation)(nil), "google.ads.googleads.v0.services.BiddingStrategyOperation")
+	proto.RegisterType((*MutateBiddingStrategiesResponse)(nil), "google.ads.googleads.v0.services.MutateBiddingStrategiesResponse")
+	proto.RegisterType((*MutateBiddingStrategyResult)(nil), "google.ads.googleads.v0.services.MutateBiddingStrategyResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// BiddingStrategyServiceClient is the client API for BiddingStrategyService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type BiddingStrategyServiceClient interface {
+	// Returns the requested bidding strategy in full detail.
+	GetBiddingStrategy(ctx context.Context, in *GetBiddingStrategyRequest, opts ...grpc.CallOption) (*resources.BiddingStrategy, error)
+	// Creates, updates, or removes bidding strategies. Operation statuses are
+	// returned.
+	MutateBiddingStrategies(ctx context.Context, in *MutateBiddingStrategiesRequest, opts ...grpc.CallOption) (*MutateBiddingStrategiesResponse, error)
+}
+
+type biddingStrategyServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewBiddingStrategyServiceClient(cc *grpc.ClientConn) BiddingStrategyServiceClient {
+	return &biddingStrategyServiceClient{cc}
+}
+
+func (c *biddingStrategyServiceClient) GetBiddingStrategy(ctx context.Context, in *GetBiddingStrategyRequest, opts ...grpc.CallOption) (*resources.BiddingStrategy, error) {
+	out := new(resources.BiddingStrategy)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.BiddingStrategyService/GetBiddingStrategy", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *biddingStrategyServiceClient) MutateBiddingStrategies(ctx context.Context, in *MutateBiddingStrategiesRequest, opts ...grpc.CallOption) (*MutateBiddingStrategiesResponse, error) {
+	out := new(MutateBiddingStrategiesResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.BiddingStrategyService/MutateBiddingStrategies", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BiddingStrategyServiceServer is the server API for BiddingStrategyService service.
+type BiddingStrategyServiceServer interface {
+	// Returns the requested bidding strategy in full detail.
+	GetBiddingStrategy(context.Context, *GetBiddingStrategyRequest) (*resources.BiddingStrategy, error)
+	// Creates, updates, or removes bidding strategies. Operation statuses are
+	// returned.
+	MutateBiddingStrategies(context.Context, *MutateBiddingStrategiesRequest) (*MutateBiddingStrategiesResponse, error)
+}
+
+func RegisterBiddingStrategyServiceServer(s *grpc.Server, srv BiddingStrategyServiceServer) {
+	s.RegisterService(&_BiddingStrategyService_serviceDesc, srv)
+}
+
+func _BiddingStrategyService_GetBiddingStrategy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetBiddingStrategyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BiddingStrategyServiceServer).GetBiddingStrategy(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.BiddingStrategyService/GetBiddingStrategy",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BiddingStrategyServiceServer).GetBiddingStrategy(ctx, req.(*GetBiddingStrategyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BiddingStrategyService_MutateBiddingStrategies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateBiddingStrategiesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BiddingStrategyServiceServer).MutateBiddingStrategies(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.BiddingStrategyService/MutateBiddingStrategies",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BiddingStrategyServiceServer).MutateBiddingStrategies(ctx, req.(*MutateBiddingStrategiesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _BiddingStrategyService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.BiddingStrategyService",
+	HandlerType: (*BiddingStrategyServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetBiddingStrategy",
+			Handler:    _BiddingStrategyService_GetBiddingStrategy_Handler,
+		},
+		{
+			MethodName: "MutateBiddingStrategies",
+			Handler:    _BiddingStrategyService_MutateBiddingStrategies_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/bidding_strategy_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/bidding_strategy_service.proto", fileDescriptor_bidding_strategy_service_e353af7be94060a5)
+}
+
+var fileDescriptor_bidding_strategy_service_e353af7be94060a5 = []byte{
+	// 602 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x31, 0x6f, 0xd3, 0x40,
+	0x14, 0xc7, 0xb1, 0x83, 0x8a, 0x7a, 0x86, 0xe5, 0x06, 0x30, 0x29, 0xa2, 0x91, 0x61, 0x88, 0x32,
+	0xd8, 0x51, 0x2a, 0x10, 0x4a, 0x14, 0x51, 0x67, 0x20, 0x45, 0xa2, 0x50, 0xb9, 0x52, 0x91, 0xaa,
+	0x48, 0xd1, 0x25, 0x7e, 0xb5, 0xac, 0xc6, 0x3e, 0x73, 0x77, 0x8e, 0x54, 0xaa, 0x2e, 0x7c, 0x05,
+	0x36, 0x24, 0x16, 0x46, 0xbe, 0x05, 0x8c, 0xac, 0x8c, 0x4c, 0x48, 0x7c, 0x10, 0x64, 0x9f, 0x2f,
+	0x69, 0xd3, 0x98, 0xa0, 0x76, 0x7b, 0xb6, 0xdf, 0xfd, 0xde, 0xff, 0xbd, 0xff, 0x3d, 0xa3, 0xe7,
+	0x01, 0xa5, 0xc1, 0x04, 0x1c, 0xe2, 0x73, 0x47, 0x86, 0x59, 0x34, 0x6d, 0x3a, 0x1c, 0xd8, 0x34,
+	0x1c, 0x03, 0x77, 0x46, 0xa1, 0xef, 0x87, 0x71, 0x30, 0xe4, 0x82, 0x11, 0x01, 0xc1, 0xc9, 0xb0,
+	0xf8, 0x62, 0x27, 0x8c, 0x0a, 0x8a, 0x6b, 0xf2, 0x94, 0x4d, 0x7c, 0x6e, 0xcf, 0x00, 0xf6, 0xb4,
+	0x69, 0x2b, 0x40, 0xf5, 0x59, 0x59, 0x09, 0x06, 0x9c, 0xa6, 0x6c, 0x59, 0x0d, 0xc9, 0xae, 0x3e,
+	0x50, 0x27, 0x93, 0xd0, 0x21, 0x71, 0x4c, 0x05, 0x11, 0x21, 0x8d, 0x79, 0xf1, 0xb5, 0xa8, 0xec,
+	0xe4, 0x4f, 0xa3, 0xf4, 0xc8, 0x39, 0x0a, 0x61, 0xe2, 0x0f, 0x23, 0xc2, 0x8f, 0x65, 0x86, 0xb5,
+	0x8d, 0xee, 0xf7, 0x41, 0xf4, 0x24, 0x7c, 0xbf, 0x60, 0x7b, 0xf0, 0x2e, 0x05, 0x2e, 0xf0, 0x23,
+	0x74, 0x47, 0x09, 0x18, 0xc6, 0x24, 0x02, 0x53, 0xab, 0x69, 0xf5, 0x75, 0xef, 0xb6, 0x7a, 0xf9,
+	0x9a, 0x44, 0x60, 0x7d, 0xd6, 0xd0, 0xc3, 0xdd, 0x54, 0x10, 0x01, 0x17, 0x29, 0x21, 0x70, 0xc5,
+	0xd9, 0x44, 0xc6, 0x38, 0xe5, 0x82, 0x46, 0xc0, 0x86, 0xa1, 0x5f, 0x50, 0x90, 0x7a, 0xf5, 0xd2,
+	0xc7, 0x87, 0x08, 0xd1, 0x04, 0x98, 0xd4, 0x6e, 0xea, 0xb5, 0x4a, 0xdd, 0x68, 0xb5, 0xed, 0x55,
+	0x63, 0xb3, 0x17, 0x64, 0xbf, 0x51, 0x08, 0xef, 0x1c, 0xcd, 0xfa, 0xa4, 0x23, 0xb3, 0x2c, 0x11,
+	0x77, 0x90, 0x91, 0x26, 0x3e, 0x11, 0x90, 0xcf, 0xc4, 0xbc, 0x59, 0xd3, 0xea, 0x46, 0xab, 0xaa,
+	0x2a, 0xab, 0xb1, 0xd9, 0x2f, 0xb2, 0xb1, 0xed, 0x12, 0x7e, 0xec, 0x21, 0x99, 0x9e, 0xc5, 0xf8,
+	0x15, 0x5a, 0x1b, 0x33, 0x20, 0x42, 0xce, 0xc5, 0x68, 0xb5, 0x4a, 0x15, 0xcf, 0x6c, 0x5c, 0x94,
+	0xbc, 0x73, 0xc3, 0x2b, 0x18, 0x19, 0x4d, 0xb2, 0x4d, 0xfd, 0x3a, 0x34, 0xc9, 0xc0, 0x26, 0x5a,
+	0x63, 0x10, 0xd1, 0x29, 0x98, 0x95, 0x6c, 0xda, 0xd9, 0x17, 0xf9, 0xdc, 0x33, 0xd0, 0xfa, 0x6c,
+	0x3a, 0xd6, 0x7b, 0xb4, 0x59, 0xea, 0x1d, 0x4f, 0x68, 0xcc, 0x01, 0xbf, 0x45, 0xb7, 0x18, 0xf0,
+	0x74, 0x22, 0x94, 0x31, 0xdd, 0xd5, 0xc6, 0x2c, 0x63, 0x9e, 0x78, 0x39, 0xc5, 0x53, 0x34, 0xab,
+	0x87, 0x36, 0xfe, 0x91, 0xf7, 0x5f, 0x97, 0xaf, 0xf5, 0xad, 0x82, 0xee, 0x2e, 0x1c, 0xdf, 0x97,
+	0x22, 0xf0, 0x77, 0x0d, 0xe1, 0xcb, 0x57, 0x1b, 0x77, 0x56, 0xab, 0x2f, 0x5d, 0x88, 0xea, 0x15,
+	0x3c, 0xb1, 0x3a, 0x1f, 0x7e, 0xfe, 0xf9, 0xa8, 0x3f, 0xc1, 0x5b, 0xd9, 0x3e, 0x9f, 0x5e, 0x68,
+	0xa9, 0xab, 0x56, 0x80, 0x3b, 0x0d, 0xb5, 0xe0, 0x73, 0x07, 0x9c, 0xc6, 0x19, 0xfe, 0xad, 0xa1,
+	0x7b, 0x25, 0x06, 0xe1, 0xed, 0xab, 0xf9, 0x30, 0xdf, 0xcb, 0xaa, 0x7b, 0x0d, 0x82, 0xbc, 0x1d,
+	0x96, 0x9b, 0x77, 0xd7, 0xb1, 0x9e, 0x66, 0xdd, 0xcd, 0xdb, 0x39, 0x3d, 0xb7, 0xef, 0xdd, 0xc6,
+	0xd9, 0xe5, 0xe6, 0xda, 0x51, 0x0e, 0x6e, 0x6b, 0x8d, 0xde, 0x2f, 0x0d, 0x3d, 0x1e, 0xd3, 0x68,
+	0xa5, 0x96, 0xde, 0xc6, 0x72, 0xa7, 0xf7, 0xb2, 0x2d, 0xdd, 0xd3, 0x0e, 0x77, 0x0a, 0x40, 0x40,
+	0x27, 0x24, 0x0e, 0x6c, 0xca, 0x02, 0x27, 0x80, 0x38, 0xdf, 0x61, 0xf5, 0x53, 0x4d, 0x42, 0x5e,
+	0xfe, 0x1b, 0xef, 0xa8, 0xe0, 0x8b, 0x5e, 0xe9, 0xbb, 0xee, 0x57, 0xbd, 0xd6, 0x97, 0x40, 0xd7,
+	0xe7, 0xb6, 0x0c, 0xb3, 0xe8, 0xa0, 0x69, 0x17, 0x85, 0xf9, 0x0f, 0x95, 0x32, 0x70, 0x7d, 0x3e,
+	0x98, 0xa5, 0x0c, 0x0e, 0x9a, 0x03, 0x95, 0x32, 0x5a, 0xcb, 0x05, 0x6c, 0xfd, 0x0d, 0x00, 0x00,
+	0xff, 0xff, 0x09, 0xdb, 0xf0, 0x1a, 0x46, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/billing_setup_service.pb.go b/googleapis/ads/googleads/v0/services/billing_setup_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..297886b19868d86bb2ea1c1b465e3d84915b75ff
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/billing_setup_service.pb.go
@@ -0,0 +1,500 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/billing_setup_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for
+// [BillingSetupService.GetBillingSetup][google.ads.googleads.v0.services.BillingSetupService.GetBillingSetup].
+type GetBillingSetupRequest struct {
+	// The resource name of the billing setup to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetBillingSetupRequest) Reset()         { *m = GetBillingSetupRequest{} }
+func (m *GetBillingSetupRequest) String() string { return proto.CompactTextString(m) }
+func (*GetBillingSetupRequest) ProtoMessage()    {}
+func (*GetBillingSetupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_service_386280c726f2299e, []int{0}
+}
+func (m *GetBillingSetupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetBillingSetupRequest.Unmarshal(m, b)
+}
+func (m *GetBillingSetupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetBillingSetupRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetBillingSetupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBillingSetupRequest.Merge(dst, src)
+}
+func (m *GetBillingSetupRequest) XXX_Size() int {
+	return xxx_messageInfo_GetBillingSetupRequest.Size(m)
+}
+func (m *GetBillingSetupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBillingSetupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBillingSetupRequest proto.InternalMessageInfo
+
+func (m *GetBillingSetupRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for billing setup mutate operations.
+type MutateBillingSetupRequest struct {
+	// Id of the customer to apply the billing setup mutate operation to.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The operation to perform.
+	Operation            *BillingSetupOperation `protobuf:"bytes,2,opt,name=operation,proto3" json:"operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *MutateBillingSetupRequest) Reset()         { *m = MutateBillingSetupRequest{} }
+func (m *MutateBillingSetupRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateBillingSetupRequest) ProtoMessage()    {}
+func (*MutateBillingSetupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_service_386280c726f2299e, []int{1}
+}
+func (m *MutateBillingSetupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBillingSetupRequest.Unmarshal(m, b)
+}
+func (m *MutateBillingSetupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBillingSetupRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateBillingSetupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBillingSetupRequest.Merge(dst, src)
+}
+func (m *MutateBillingSetupRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateBillingSetupRequest.Size(m)
+}
+func (m *MutateBillingSetupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBillingSetupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBillingSetupRequest proto.InternalMessageInfo
+
+func (m *MutateBillingSetupRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateBillingSetupRequest) GetOperation() *BillingSetupOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+// A single operation on a billing setup, which describes the cancellation of an
+// existing billing setup.
+type BillingSetupOperation struct {
+	// Only one of these operations can be set. "Update" operations are not
+	// supported.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*BillingSetupOperation_Create
+	//	*BillingSetupOperation_Remove
+	Operation            isBillingSetupOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *BillingSetupOperation) Reset()         { *m = BillingSetupOperation{} }
+func (m *BillingSetupOperation) String() string { return proto.CompactTextString(m) }
+func (*BillingSetupOperation) ProtoMessage()    {}
+func (*BillingSetupOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_service_386280c726f2299e, []int{2}
+}
+func (m *BillingSetupOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BillingSetupOperation.Unmarshal(m, b)
+}
+func (m *BillingSetupOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BillingSetupOperation.Marshal(b, m, deterministic)
+}
+func (dst *BillingSetupOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BillingSetupOperation.Merge(dst, src)
+}
+func (m *BillingSetupOperation) XXX_Size() int {
+	return xxx_messageInfo_BillingSetupOperation.Size(m)
+}
+func (m *BillingSetupOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_BillingSetupOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BillingSetupOperation proto.InternalMessageInfo
+
+type isBillingSetupOperation_Operation interface {
+	isBillingSetupOperation_Operation()
+}
+
+type BillingSetupOperation_Create struct {
+	Create *resources.BillingSetup `protobuf:"bytes,2,opt,name=create,proto3,oneof"`
+}
+
+type BillingSetupOperation_Remove struct {
+	Remove string `protobuf:"bytes,1,opt,name=remove,proto3,oneof"`
+}
+
+func (*BillingSetupOperation_Create) isBillingSetupOperation_Operation() {}
+
+func (*BillingSetupOperation_Remove) isBillingSetupOperation_Operation() {}
+
+func (m *BillingSetupOperation) GetOperation() isBillingSetupOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *BillingSetupOperation) GetCreate() *resources.BillingSetup {
+	if x, ok := m.GetOperation().(*BillingSetupOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *BillingSetupOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*BillingSetupOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*BillingSetupOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _BillingSetupOperation_OneofMarshaler, _BillingSetupOperation_OneofUnmarshaler, _BillingSetupOperation_OneofSizer, []interface{}{
+		(*BillingSetupOperation_Create)(nil),
+		(*BillingSetupOperation_Remove)(nil),
+	}
+}
+
+func _BillingSetupOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*BillingSetupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *BillingSetupOperation_Create:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *BillingSetupOperation_Remove:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("BillingSetupOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _BillingSetupOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*BillingSetupOperation)
+	switch tag {
+	case 2: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.BillingSetup)
+		err := b.DecodeMessage(msg)
+		m.Operation = &BillingSetupOperation_Create{msg}
+		return true, err
+	case 1: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &BillingSetupOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _BillingSetupOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*BillingSetupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *BillingSetupOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *BillingSetupOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a billing setup operation.
+type MutateBillingSetupResponse struct {
+	// A result that identifies the resource affected by the mutate request.
+	Result               *MutateBillingSetupResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *MutateBillingSetupResponse) Reset()         { *m = MutateBillingSetupResponse{} }
+func (m *MutateBillingSetupResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateBillingSetupResponse) ProtoMessage()    {}
+func (*MutateBillingSetupResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_service_386280c726f2299e, []int{3}
+}
+func (m *MutateBillingSetupResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBillingSetupResponse.Unmarshal(m, b)
+}
+func (m *MutateBillingSetupResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBillingSetupResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateBillingSetupResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBillingSetupResponse.Merge(dst, src)
+}
+func (m *MutateBillingSetupResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateBillingSetupResponse.Size(m)
+}
+func (m *MutateBillingSetupResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBillingSetupResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBillingSetupResponse proto.InternalMessageInfo
+
+func (m *MutateBillingSetupResponse) GetResult() *MutateBillingSetupResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// Result for a single billing setup mutate.
+type MutateBillingSetupResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateBillingSetupResult) Reset()         { *m = MutateBillingSetupResult{} }
+func (m *MutateBillingSetupResult) String() string { return proto.CompactTextString(m) }
+func (*MutateBillingSetupResult) ProtoMessage()    {}
+func (*MutateBillingSetupResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_billing_setup_service_386280c726f2299e, []int{4}
+}
+func (m *MutateBillingSetupResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateBillingSetupResult.Unmarshal(m, b)
+}
+func (m *MutateBillingSetupResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateBillingSetupResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateBillingSetupResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateBillingSetupResult.Merge(dst, src)
+}
+func (m *MutateBillingSetupResult) XXX_Size() int {
+	return xxx_messageInfo_MutateBillingSetupResult.Size(m)
+}
+func (m *MutateBillingSetupResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateBillingSetupResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateBillingSetupResult proto.InternalMessageInfo
+
+func (m *MutateBillingSetupResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetBillingSetupRequest)(nil), "google.ads.googleads.v0.services.GetBillingSetupRequest")
+	proto.RegisterType((*MutateBillingSetupRequest)(nil), "google.ads.googleads.v0.services.MutateBillingSetupRequest")
+	proto.RegisterType((*BillingSetupOperation)(nil), "google.ads.googleads.v0.services.BillingSetupOperation")
+	proto.RegisterType((*MutateBillingSetupResponse)(nil), "google.ads.googleads.v0.services.MutateBillingSetupResponse")
+	proto.RegisterType((*MutateBillingSetupResult)(nil), "google.ads.googleads.v0.services.MutateBillingSetupResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// BillingSetupServiceClient is the client API for BillingSetupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type BillingSetupServiceClient interface {
+	// Returns a billing setup.
+	GetBillingSetup(ctx context.Context, in *GetBillingSetupRequest, opts ...grpc.CallOption) (*resources.BillingSetup, error)
+	// Creates a billing setup, or cancels an existing billing setup.
+	MutateBillingSetup(ctx context.Context, in *MutateBillingSetupRequest, opts ...grpc.CallOption) (*MutateBillingSetupResponse, error)
+}
+
+type billingSetupServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewBillingSetupServiceClient(cc *grpc.ClientConn) BillingSetupServiceClient {
+	return &billingSetupServiceClient{cc}
+}
+
+func (c *billingSetupServiceClient) GetBillingSetup(ctx context.Context, in *GetBillingSetupRequest, opts ...grpc.CallOption) (*resources.BillingSetup, error) {
+	out := new(resources.BillingSetup)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.BillingSetupService/GetBillingSetup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *billingSetupServiceClient) MutateBillingSetup(ctx context.Context, in *MutateBillingSetupRequest, opts ...grpc.CallOption) (*MutateBillingSetupResponse, error) {
+	out := new(MutateBillingSetupResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.BillingSetupService/MutateBillingSetup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BillingSetupServiceServer is the server API for BillingSetupService service.
+type BillingSetupServiceServer interface {
+	// Returns a billing setup.
+	GetBillingSetup(context.Context, *GetBillingSetupRequest) (*resources.BillingSetup, error)
+	// Creates a billing setup, or cancels an existing billing setup.
+	MutateBillingSetup(context.Context, *MutateBillingSetupRequest) (*MutateBillingSetupResponse, error)
+}
+
+func RegisterBillingSetupServiceServer(s *grpc.Server, srv BillingSetupServiceServer) {
+	s.RegisterService(&_BillingSetupService_serviceDesc, srv)
+}
+
+func _BillingSetupService_GetBillingSetup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetBillingSetupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BillingSetupServiceServer).GetBillingSetup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.BillingSetupService/GetBillingSetup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BillingSetupServiceServer).GetBillingSetup(ctx, req.(*GetBillingSetupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BillingSetupService_MutateBillingSetup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateBillingSetupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BillingSetupServiceServer).MutateBillingSetup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.BillingSetupService/MutateBillingSetup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BillingSetupServiceServer).MutateBillingSetup(ctx, req.(*MutateBillingSetupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _BillingSetupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.BillingSetupService",
+	HandlerType: (*BillingSetupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetBillingSetup",
+			Handler:    _BillingSetupService_GetBillingSetup_Handler,
+		},
+		{
+			MethodName: "MutateBillingSetup",
+			Handler:    _BillingSetupService_MutateBillingSetup_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/billing_setup_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/billing_setup_service.proto", fileDescriptor_billing_setup_service_386280c726f2299e)
+}
+
+var fileDescriptor_billing_setup_service_386280c726f2299e = []byte{
+	// 527 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x31, 0x6f, 0xd3, 0x40,
+	0x14, 0xe6, 0x52, 0x29, 0x52, 0x2f, 0x20, 0xa4, 0x43, 0xa0, 0x10, 0x21, 0x11, 0x19, 0x86, 0x2a,
+	0xc3, 0x5d, 0x08, 0x42, 0x41, 0x69, 0x23, 0x94, 0x2c, 0x69, 0x07, 0xa0, 0x72, 0x45, 0x07, 0x14,
+	0x29, 0x72, 0xe3, 0x27, 0xcb, 0x92, 0xed, 0x33, 0xf7, 0xce, 0x59, 0xaa, 0x2e, 0x6c, 0xcc, 0xdd,
+	0x19, 0x18, 0xd9, 0xf9, 0x13, 0x0c, 0x2c, 0x2c, 0xfc, 0x00, 0x7e, 0x08, 0xb2, 0xcf, 0x97, 0x26,
+	0xd4, 0x51, 0xa0, 0xdb, 0xf3, 0xf9, 0x7d, 0xdf, 0xf7, 0xde, 0xf7, 0xde, 0x1d, 0x3d, 0x08, 0xa4,
+	0x0c, 0x22, 0x10, 0x9e, 0x8f, 0xc2, 0x84, 0x79, 0xb4, 0xe8, 0x0a, 0x04, 0xb5, 0x08, 0xe7, 0x80,
+	0xe2, 0x2c, 0x8c, 0xa2, 0x30, 0x09, 0x66, 0x08, 0x3a, 0x4b, 0x67, 0xe5, 0x31, 0x4f, 0x95, 0xd4,
+	0x92, 0xb5, 0x0d, 0x84, 0x7b, 0x3e, 0xf2, 0x25, 0x9a, 0x2f, 0xba, 0xdc, 0xa2, 0x5b, 0x2f, 0x36,
+	0xf1, 0x2b, 0x40, 0x99, 0xa9, 0x6b, 0x02, 0x86, 0xb8, 0xf5, 0xc8, 0xc2, 0xd2, 0x50, 0x78, 0x49,
+	0x22, 0xb5, 0xa7, 0x43, 0x99, 0xa0, 0xf9, 0xeb, 0x0c, 0xe9, 0x83, 0x09, 0xe8, 0xb1, 0xc1, 0x9d,
+	0xe4, 0x30, 0x17, 0x3e, 0x64, 0x80, 0x9a, 0x3d, 0xa1, 0x77, 0x2c, 0xf1, 0x2c, 0xf1, 0x62, 0x68,
+	0x92, 0x36, 0xd9, 0xdb, 0x75, 0x6f, 0xdb, 0xc3, 0x37, 0x5e, 0x0c, 0xce, 0x25, 0xa1, 0x0f, 0x5f,
+	0x67, 0xda, 0xd3, 0x50, 0x45, 0xf1, 0x98, 0x36, 0xe6, 0x19, 0x6a, 0x19, 0x83, 0x9a, 0x85, 0x7e,
+	0x49, 0x40, 0xed, 0xd1, 0x91, 0xcf, 0xde, 0xd1, 0x5d, 0x99, 0x82, 0x2a, 0x2a, 0x6a, 0xd6, 0xda,
+	0x64, 0xaf, 0xd1, 0xeb, 0xf3, 0x6d, 0x46, 0xf0, 0x55, 0xa9, 0xb7, 0x16, 0xee, 0x5e, 0x31, 0x39,
+	0x9f, 0x08, 0xbd, 0x5f, 0x99, 0xc4, 0x8e, 0x68, 0x7d, 0xae, 0xc0, 0xd3, 0x50, 0xaa, 0x89, 0x8d,
+	0x6a, 0x4b, 0x53, 0xd7, 0xe4, 0x0e, 0x6f, 0xb9, 0x25, 0x01, 0x6b, 0xd2, 0xba, 0x82, 0x58, 0x2e,
+	0x4a, 0x63, 0xf2, 0x3f, 0xe6, 0x7b, 0xdc, 0x58, 0xe9, 0xca, 0x49, 0x69, 0xab, 0xca, 0x20, 0x4c,
+	0x65, 0x82, 0xc0, 0xdc, 0x9c, 0x04, 0xb3, 0x48, 0x17, 0x24, 0x8d, 0xde, 0x60, 0x7b, 0xf7, 0x95,
+	0x6c, 0x59, 0xa4, 0xdd, 0x92, 0xc9, 0x79, 0x45, 0x9b, 0x9b, 0x72, 0xfe, 0x69, 0xa8, 0xbd, 0xcf,
+	0x3b, 0xf4, 0xde, 0x2a, 0xf6, 0xc4, 0x48, 0xb3, 0x6f, 0x84, 0xde, 0xfd, 0x6b, 0x59, 0xd8, 0xcb,
+	0xed, 0x05, 0x57, 0xef, 0x57, 0xeb, 0x7f, 0xad, 0x77, 0xfa, 0x1f, 0x7f, 0xfe, 0xbe, 0xac, 0x3d,
+	0x63, 0x22, 0xdf, 0xf9, 0xf3, 0xb5, 0x36, 0x86, 0x76, 0xa7, 0x50, 0x74, 0xec, 0x25, 0x28, 0x40,
+	0x28, 0x3a, 0x17, 0xec, 0x07, 0xa1, 0xec, 0xba, 0x23, 0x6c, 0xff, 0x66, 0x5e, 0x9b, 0xea, 0x0f,
+	0x6e, 0x38, 0xa8, 0x62, 0xec, 0xce, 0xb0, 0x68, 0xa5, 0xef, 0xf4, 0xf2, 0x56, 0xae, 0x6a, 0x3f,
+	0x5f, 0xb9, 0x2d, 0xc3, 0xce, 0xc5, 0x7a, 0x27, 0x83, 0xb8, 0xe0, 0x1b, 0x90, 0xce, 0xf8, 0x17,
+	0xa1, 0x4f, 0xe7, 0x32, 0xde, 0x5a, 0xc2, 0xb8, 0x59, 0x31, 0xc6, 0xe3, 0xfc, 0xde, 0x1f, 0x93,
+	0xf7, 0x87, 0x25, 0x3a, 0x90, 0x91, 0x97, 0x04, 0x5c, 0xaa, 0x40, 0x04, 0x90, 0x14, 0xaf, 0x82,
+	0x7d, 0x5e, 0xd2, 0x10, 0x37, 0xbf, 0x66, 0xfb, 0x36, 0xf8, 0x52, 0xdb, 0x99, 0x8c, 0x46, 0x5f,
+	0x6b, 0xed, 0x89, 0x21, 0x1c, 0xf9, 0xc8, 0x4d, 0x98, 0x47, 0xa7, 0x5d, 0x5e, 0x0a, 0xe3, 0x77,
+	0x9b, 0x32, 0x1d, 0xf9, 0x38, 0x5d, 0xa6, 0x4c, 0x4f, 0xbb, 0x53, 0x9b, 0x72, 0x56, 0x2f, 0x0a,
+	0x78, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x41, 0x49, 0x73, 0x64, 0x4d, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_audience_view_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_audience_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ba379ea06a3fd21df75047f07d9827a7ac4811d5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_audience_view_service.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_audience_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignAudienceViewService.GetCampaignAudienceView][google.ads.googleads.v0.services.CampaignAudienceViewService.GetCampaignAudienceView].
+type GetCampaignAudienceViewRequest struct {
+	// The resource name of the campaign audience view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignAudienceViewRequest) Reset()         { *m = GetCampaignAudienceViewRequest{} }
+func (m *GetCampaignAudienceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignAudienceViewRequest) ProtoMessage()    {}
+func (*GetCampaignAudienceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_audience_view_service_ca4474627cace15d, []int{0}
+}
+func (m *GetCampaignAudienceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignAudienceViewRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignAudienceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignAudienceViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignAudienceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignAudienceViewRequest.Merge(dst, src)
+}
+func (m *GetCampaignAudienceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignAudienceViewRequest.Size(m)
+}
+func (m *GetCampaignAudienceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignAudienceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignAudienceViewRequest proto.InternalMessageInfo
+
+func (m *GetCampaignAudienceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignAudienceViewRequest)(nil), "google.ads.googleads.v0.services.GetCampaignAudienceViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignAudienceViewServiceClient is the client API for CampaignAudienceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignAudienceViewServiceClient interface {
+	// Returns the requested campaign audience view in full detail.
+	GetCampaignAudienceView(ctx context.Context, in *GetCampaignAudienceViewRequest, opts ...grpc.CallOption) (*resources.CampaignAudienceView, error)
+}
+
+type campaignAudienceViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignAudienceViewServiceClient(cc *grpc.ClientConn) CampaignAudienceViewServiceClient {
+	return &campaignAudienceViewServiceClient{cc}
+}
+
+func (c *campaignAudienceViewServiceClient) GetCampaignAudienceView(ctx context.Context, in *GetCampaignAudienceViewRequest, opts ...grpc.CallOption) (*resources.CampaignAudienceView, error) {
+	out := new(resources.CampaignAudienceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignAudienceViewService/GetCampaignAudienceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignAudienceViewServiceServer is the server API for CampaignAudienceViewService service.
+type CampaignAudienceViewServiceServer interface {
+	// Returns the requested campaign audience view in full detail.
+	GetCampaignAudienceView(context.Context, *GetCampaignAudienceViewRequest) (*resources.CampaignAudienceView, error)
+}
+
+func RegisterCampaignAudienceViewServiceServer(s *grpc.Server, srv CampaignAudienceViewServiceServer) {
+	s.RegisterService(&_CampaignAudienceViewService_serviceDesc, srv)
+}
+
+func _CampaignAudienceViewService_GetCampaignAudienceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignAudienceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignAudienceViewServiceServer).GetCampaignAudienceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignAudienceViewService/GetCampaignAudienceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignAudienceViewServiceServer).GetCampaignAudienceView(ctx, req.(*GetCampaignAudienceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignAudienceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignAudienceViewService",
+	HandlerType: (*CampaignAudienceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignAudienceView",
+			Handler:    _CampaignAudienceViewService_GetCampaignAudienceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_audience_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_audience_view_service.proto", fileDescriptor_campaign_audience_view_service_ca4474627cace15d)
+}
+
+var fileDescriptor_campaign_audience_view_service_ca4474627cace15d = []byte{
+	// 356 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x4b, 0xfb, 0x40,
+	0x10, 0x25, 0xfd, 0xc1, 0x0f, 0x0c, 0x7a, 0xc9, 0x45, 0xa9, 0x22, 0xa1, 0x7a, 0x90, 0x1e, 0x76,
+	0x83, 0x1e, 0x8a, 0x88, 0x7f, 0x52, 0x29, 0xf5, 0x24, 0xa5, 0x42, 0x0f, 0x12, 0x08, 0x6b, 0x32,
+	0x84, 0x85, 0x66, 0x37, 0x66, 0x92, 0xf4, 0x20, 0x5e, 0xfc, 0x0a, 0x7e, 0x03, 0x8f, 0x7e, 0x14,
+	0xaf, 0xe2, 0xdd, 0x83, 0x5f, 0xc1, 0xbb, 0xa4, 0x9b, 0x0d, 0x0a, 0x4d, 0x7b, 0x7b, 0xec, 0xcc,
+	0x7b, 0x6f, 0xe6, 0xcd, 0x9a, 0x83, 0x48, 0xca, 0x68, 0x0a, 0x94, 0x85, 0x48, 0x15, 0x2c, 0x51,
+	0xe1, 0x50, 0x84, 0xb4, 0xe0, 0x01, 0x20, 0x0d, 0x58, 0x9c, 0x30, 0x1e, 0x09, 0x9f, 0xe5, 0x21,
+	0x07, 0x11, 0x80, 0x5f, 0x70, 0x98, 0xf9, 0x55, 0x9d, 0x24, 0xa9, 0xcc, 0xa4, 0x65, 0x2b, 0x2e,
+	0x61, 0x21, 0x92, 0x5a, 0x86, 0x14, 0x0e, 0xd1, 0x32, 0xed, 0xb3, 0x26, 0xa3, 0x14, 0x50, 0xe6,
+	0x69, 0xb3, 0x93, 0x72, 0x68, 0xef, 0x68, 0x7e, 0xc2, 0x29, 0x13, 0x42, 0x66, 0x2c, 0xe3, 0x52,
+	0xa0, 0xaa, 0x76, 0x06, 0xe6, 0xee, 0x10, 0xb2, 0xcb, 0x4a, 0xc0, 0xad, 0xf8, 0x13, 0x0e, 0xb3,
+	0x31, 0xdc, 0xe7, 0x80, 0x99, 0xb5, 0x67, 0x6e, 0x68, 0x27, 0x5f, 0xb0, 0x18, 0xb6, 0x0c, 0xdb,
+	0x38, 0x58, 0x1b, 0xaf, 0xeb, 0xc7, 0x6b, 0x16, 0xc3, 0xe1, 0xb7, 0x61, 0x6e, 0x2f, 0x12, 0xb9,
+	0x51, 0x5b, 0x58, 0x1f, 0x86, 0xb9, 0xd9, 0xe0, 0x63, 0x5d, 0x90, 0x55, 0x19, 0x90, 0xe5, 0x23,
+	0xb6, 0x7b, 0x8d, 0x0a, 0x75, 0x46, 0x64, 0x11, 0xbf, 0x73, 0xfe, 0xf4, 0xfe, 0xf5, 0xdc, 0x3a,
+	0xb6, 0x7a, 0x65, 0x9e, 0x0f, 0x7f, 0xd6, 0x3c, 0x0d, 0x72, 0xcc, 0x64, 0x0c, 0x29, 0xd2, 0x6e,
+	0x1d, 0xf0, 0x6f, 0x32, 0xd2, 0xee, 0x63, 0xff, 0xd3, 0x30, 0xf7, 0x03, 0x19, 0xaf, 0xdc, 0xa0,
+	0x6f, 0x2f, 0x49, 0x67, 0x54, 0x5e, 0x62, 0x64, 0xdc, 0x5e, 0x55, 0x2a, 0x91, 0x9c, 0x32, 0x11,
+	0x11, 0x99, 0x46, 0x34, 0x02, 0x31, 0xbf, 0x93, 0xbe, 0x7c, 0xc2, 0xb1, 0xf9, 0xc7, 0x9d, 0x68,
+	0xf0, 0xd2, 0xfa, 0x37, 0x74, 0xdd, 0xd7, 0x96, 0x3d, 0x54, 0x82, 0x6e, 0x88, 0x44, 0xc1, 0x12,
+	0x4d, 0x1c, 0x52, 0x19, 0xe3, 0x9b, 0x6e, 0xf1, 0xdc, 0x10, 0xbd, 0xba, 0xc5, 0x9b, 0x38, 0x9e,
+	0x6e, 0xb9, 0xfb, 0x3f, 0x1f, 0xe0, 0xe8, 0x27, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x3a, 0xb9, 0x69,
+	0xf1, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_bid_modifier_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_bid_modifier_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..734f857b350666466667da6de666989f5814ab52
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_bid_modifier_service.pb.go
@@ -0,0 +1,548 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_bid_modifier_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignBidModifierService.GetCampaignBidModifier][google.ads.googleads.v0.services.CampaignBidModifierService.GetCampaignBidModifier].
+type GetCampaignBidModifierRequest struct {
+	// The resource name of the campaign bid modifier to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignBidModifierRequest) Reset()         { *m = GetCampaignBidModifierRequest{} }
+func (m *GetCampaignBidModifierRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignBidModifierRequest) ProtoMessage()    {}
+func (*GetCampaignBidModifierRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_bid_modifier_service_2bb6851aed97491b, []int{0}
+}
+func (m *GetCampaignBidModifierRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignBidModifierRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignBidModifierRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignBidModifierRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignBidModifierRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignBidModifierRequest.Merge(dst, src)
+}
+func (m *GetCampaignBidModifierRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignBidModifierRequest.Size(m)
+}
+func (m *GetCampaignBidModifierRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignBidModifierRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignBidModifierRequest proto.InternalMessageInfo
+
+func (m *GetCampaignBidModifierRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignBidModifierService.MutateCampaignBidModifier][].
+type MutateCampaignBidModifiersRequest struct {
+	// ID of the customer whose campaign bid modifiers are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual campaign bid modifiers.
+	Operations           []*CampaignBidModifierOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateCampaignBidModifiersRequest) Reset()         { *m = MutateCampaignBidModifiersRequest{} }
+func (m *MutateCampaignBidModifiersRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBidModifiersRequest) ProtoMessage()    {}
+func (*MutateCampaignBidModifiersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_bid_modifier_service_2bb6851aed97491b, []int{1}
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBidModifiersRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBidModifiersRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignBidModifiersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBidModifiersRequest.Merge(dst, src)
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBidModifiersRequest.Size(m)
+}
+func (m *MutateCampaignBidModifiersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBidModifiersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBidModifiersRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignBidModifiersRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignBidModifiersRequest) GetOperations() []*CampaignBidModifierOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, remove, update) on a campaign bid modifier.
+type CampaignBidModifierOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignBidModifierOperation_Create
+	//	*CampaignBidModifierOperation_Update
+	//	*CampaignBidModifierOperation_Remove
+	Operation            isCampaignBidModifierOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *CampaignBidModifierOperation) Reset()         { *m = CampaignBidModifierOperation{} }
+func (m *CampaignBidModifierOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignBidModifierOperation) ProtoMessage()    {}
+func (*CampaignBidModifierOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_bid_modifier_service_2bb6851aed97491b, []int{2}
+}
+func (m *CampaignBidModifierOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBidModifierOperation.Unmarshal(m, b)
+}
+func (m *CampaignBidModifierOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBidModifierOperation.Marshal(b, m, deterministic)
+}
+func (dst *CampaignBidModifierOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBidModifierOperation.Merge(dst, src)
+}
+func (m *CampaignBidModifierOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignBidModifierOperation.Size(m)
+}
+func (m *CampaignBidModifierOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBidModifierOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBidModifierOperation proto.InternalMessageInfo
+
+func (m *CampaignBidModifierOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignBidModifierOperation_Operation interface {
+	isCampaignBidModifierOperation_Operation()
+}
+
+type CampaignBidModifierOperation_Create struct {
+	Create *resources.CampaignBidModifier `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignBidModifierOperation_Update struct {
+	Update *resources.CampaignBidModifier `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignBidModifierOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignBidModifierOperation_Create) isCampaignBidModifierOperation_Operation() {}
+
+func (*CampaignBidModifierOperation_Update) isCampaignBidModifierOperation_Operation() {}
+
+func (*CampaignBidModifierOperation_Remove) isCampaignBidModifierOperation_Operation() {}
+
+func (m *CampaignBidModifierOperation) GetOperation() isCampaignBidModifierOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignBidModifierOperation) GetCreate() *resources.CampaignBidModifier {
+	if x, ok := m.GetOperation().(*CampaignBidModifierOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignBidModifierOperation) GetUpdate() *resources.CampaignBidModifier {
+	if x, ok := m.GetOperation().(*CampaignBidModifierOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignBidModifierOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignBidModifierOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignBidModifierOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignBidModifierOperation_OneofMarshaler, _CampaignBidModifierOperation_OneofUnmarshaler, _CampaignBidModifierOperation_OneofSizer, []interface{}{
+		(*CampaignBidModifierOperation_Create)(nil),
+		(*CampaignBidModifierOperation_Update)(nil),
+		(*CampaignBidModifierOperation_Remove)(nil),
+	}
+}
+
+func _CampaignBidModifierOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignBidModifierOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignBidModifierOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CampaignBidModifierOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *CampaignBidModifierOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CampaignBidModifierOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignBidModifierOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignBidModifierOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignBidModifier)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignBidModifierOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignBidModifier)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignBidModifierOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CampaignBidModifierOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignBidModifierOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignBidModifierOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignBidModifierOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignBidModifierOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignBidModifierOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for campaign bid modifiers mutate.
+type MutateCampaignBidModifiersResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCampaignBidModifierResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateCampaignBidModifiersResponse) Reset()         { *m = MutateCampaignBidModifiersResponse{} }
+func (m *MutateCampaignBidModifiersResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBidModifiersResponse) ProtoMessage()    {}
+func (*MutateCampaignBidModifiersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_bid_modifier_service_2bb6851aed97491b, []int{3}
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBidModifiersResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBidModifiersResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignBidModifiersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBidModifiersResponse.Merge(dst, src)
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBidModifiersResponse.Size(m)
+}
+func (m *MutateCampaignBidModifiersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBidModifiersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBidModifiersResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignBidModifiersResponse) GetResults() []*MutateCampaignBidModifierResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateCampaignBidModifierResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignBidModifierResult) Reset()         { *m = MutateCampaignBidModifierResult{} }
+func (m *MutateCampaignBidModifierResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBidModifierResult) ProtoMessage()    {}
+func (*MutateCampaignBidModifierResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_bid_modifier_service_2bb6851aed97491b, []int{4}
+}
+func (m *MutateCampaignBidModifierResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBidModifierResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignBidModifierResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBidModifierResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignBidModifierResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBidModifierResult.Merge(dst, src)
+}
+func (m *MutateCampaignBidModifierResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBidModifierResult.Size(m)
+}
+func (m *MutateCampaignBidModifierResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBidModifierResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBidModifierResult proto.InternalMessageInfo
+
+func (m *MutateCampaignBidModifierResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignBidModifierRequest)(nil), "google.ads.googleads.v0.services.GetCampaignBidModifierRequest")
+	proto.RegisterType((*MutateCampaignBidModifiersRequest)(nil), "google.ads.googleads.v0.services.MutateCampaignBidModifiersRequest")
+	proto.RegisterType((*CampaignBidModifierOperation)(nil), "google.ads.googleads.v0.services.CampaignBidModifierOperation")
+	proto.RegisterType((*MutateCampaignBidModifiersResponse)(nil), "google.ads.googleads.v0.services.MutateCampaignBidModifiersResponse")
+	proto.RegisterType((*MutateCampaignBidModifierResult)(nil), "google.ads.googleads.v0.services.MutateCampaignBidModifierResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignBidModifierServiceClient is the client API for CampaignBidModifierService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignBidModifierServiceClient interface {
+	// Returns the requested campaign bid modifier in full detail.
+	GetCampaignBidModifier(ctx context.Context, in *GetCampaignBidModifierRequest, opts ...grpc.CallOption) (*resources.CampaignBidModifier, error)
+	// Creates, updates, or removes campaign bid modifiers.
+	// Operation statuses are returned.
+	MutateCampaignBidModifiers(ctx context.Context, in *MutateCampaignBidModifiersRequest, opts ...grpc.CallOption) (*MutateCampaignBidModifiersResponse, error)
+}
+
+type campaignBidModifierServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignBidModifierServiceClient(cc *grpc.ClientConn) CampaignBidModifierServiceClient {
+	return &campaignBidModifierServiceClient{cc}
+}
+
+func (c *campaignBidModifierServiceClient) GetCampaignBidModifier(ctx context.Context, in *GetCampaignBidModifierRequest, opts ...grpc.CallOption) (*resources.CampaignBidModifier, error) {
+	out := new(resources.CampaignBidModifier)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignBidModifierService/GetCampaignBidModifier", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignBidModifierServiceClient) MutateCampaignBidModifiers(ctx context.Context, in *MutateCampaignBidModifiersRequest, opts ...grpc.CallOption) (*MutateCampaignBidModifiersResponse, error) {
+	out := new(MutateCampaignBidModifiersResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignBidModifierService/MutateCampaignBidModifiers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignBidModifierServiceServer is the server API for CampaignBidModifierService service.
+type CampaignBidModifierServiceServer interface {
+	// Returns the requested campaign bid modifier in full detail.
+	GetCampaignBidModifier(context.Context, *GetCampaignBidModifierRequest) (*resources.CampaignBidModifier, error)
+	// Creates, updates, or removes campaign bid modifiers.
+	// Operation statuses are returned.
+	MutateCampaignBidModifiers(context.Context, *MutateCampaignBidModifiersRequest) (*MutateCampaignBidModifiersResponse, error)
+}
+
+func RegisterCampaignBidModifierServiceServer(s *grpc.Server, srv CampaignBidModifierServiceServer) {
+	s.RegisterService(&_CampaignBidModifierService_serviceDesc, srv)
+}
+
+func _CampaignBidModifierService_GetCampaignBidModifier_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignBidModifierRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBidModifierServiceServer).GetCampaignBidModifier(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignBidModifierService/GetCampaignBidModifier",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBidModifierServiceServer).GetCampaignBidModifier(ctx, req.(*GetCampaignBidModifierRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignBidModifierService_MutateCampaignBidModifiers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignBidModifiersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBidModifierServiceServer).MutateCampaignBidModifiers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignBidModifierService/MutateCampaignBidModifiers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBidModifierServiceServer).MutateCampaignBidModifiers(ctx, req.(*MutateCampaignBidModifiersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignBidModifierService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignBidModifierService",
+	HandlerType: (*CampaignBidModifierServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignBidModifier",
+			Handler:    _CampaignBidModifierService_GetCampaignBidModifier_Handler,
+		},
+		{
+			MethodName: "MutateCampaignBidModifiers",
+			Handler:    _CampaignBidModifierService_MutateCampaignBidModifiers_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_bid_modifier_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_bid_modifier_service.proto", fileDescriptor_campaign_bid_modifier_service_2bb6851aed97491b)
+}
+
+var fileDescriptor_campaign_bid_modifier_service_2bb6851aed97491b = []byte{
+	// 609 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4f, 0x8b, 0xd3, 0x4e,
+	0x18, 0xc7, 0x7f, 0x49, 0x7f, 0xac, 0xec, 0x44, 0x2f, 0x73, 0x90, 0x10, 0x56, 0xb6, 0x46, 0x0f,
+	0xa5, 0x87, 0xa4, 0x54, 0x58, 0x74, 0x97, 0x56, 0xda, 0x2d, 0xdb, 0xf5, 0x50, 0x2d, 0x11, 0xf6,
+	0xa0, 0xc5, 0x30, 0x6d, 0xa6, 0x61, 0xd8, 0x26, 0x13, 0x67, 0x26, 0xbd, 0x2c, 0x7b, 0xd0, 0xb7,
+	0xe0, 0x3b, 0x10, 0xf1, 0xe0, 0x4b, 0xf1, 0x26, 0xbe, 0x00, 0x3d, 0x78, 0xf5, 0x3d, 0x48, 0x32,
+	0x99, 0x5a, 0x21, 0x69, 0xc5, 0xde, 0x9e, 0x64, 0x9e, 0x7c, 0x9e, 0x3f, 0xdf, 0x79, 0x9e, 0x80,
+	0x41, 0x48, 0x69, 0xb8, 0xc0, 0x2e, 0x0a, 0xb8, 0x2b, 0xcd, 0xcc, 0x5a, 0xb6, 0x5c, 0x8e, 0xd9,
+	0x92, 0xcc, 0x30, 0x77, 0x67, 0x28, 0x4a, 0x10, 0x09, 0x63, 0x7f, 0x4a, 0x02, 0x3f, 0xa2, 0x01,
+	0x99, 0x13, 0xcc, 0xfc, 0xe2, 0xd8, 0x49, 0x18, 0x15, 0x14, 0xd6, 0xe5, 0xa7, 0x0e, 0x0a, 0xb8,
+	0xb3, 0xa2, 0x38, 0xcb, 0x96, 0xa3, 0x28, 0x56, 0xa7, 0x2a, 0x0e, 0xc3, 0x9c, 0xa6, 0xac, 0x32,
+	0x90, 0x0c, 0x60, 0x1d, 0xa8, 0xcf, 0x13, 0xe2, 0xa2, 0x38, 0xa6, 0x02, 0x09, 0x42, 0x63, 0x5e,
+	0x9c, 0x16, 0xe1, 0xdd, 0xfc, 0x69, 0x9a, 0xce, 0xdd, 0x39, 0xc1, 0x8b, 0xc0, 0x8f, 0x10, 0xbf,
+	0x94, 0x1e, 0xf6, 0x00, 0xdc, 0x19, 0x62, 0x71, 0x5a, 0x44, 0xe8, 0x93, 0x60, 0x54, 0xf0, 0x3d,
+	0xfc, 0x3a, 0xc5, 0x5c, 0xc0, 0x7b, 0xe0, 0x96, 0xca, 0xc4, 0x8f, 0x51, 0x84, 0x4d, 0xad, 0xae,
+	0x35, 0xf6, 0xbd, 0x9b, 0xea, 0xe5, 0x53, 0x14, 0x61, 0xfb, 0x83, 0x06, 0xee, 0x8e, 0x52, 0x81,
+	0x04, 0x2e, 0x21, 0x71, 0x85, 0x3a, 0x04, 0xc6, 0x2c, 0xe5, 0x82, 0x46, 0x98, 0xf9, 0x24, 0x28,
+	0x40, 0x40, 0xbd, 0x7a, 0x12, 0xc0, 0x57, 0x00, 0xd0, 0x04, 0x33, 0x59, 0x82, 0xa9, 0xd7, 0x6b,
+	0x0d, 0xa3, 0xdd, 0x75, 0xb6, 0xb5, 0xd0, 0x29, 0x89, 0xf9, 0x4c, 0x61, 0xbc, 0x35, 0xa2, 0xfd,
+	0x51, 0x07, 0x07, 0x9b, 0x9c, 0xe1, 0x09, 0x30, 0xd2, 0x24, 0x40, 0x02, 0xe7, 0x2d, 0x32, 0xff,
+	0xaf, 0x6b, 0x0d, 0xa3, 0x6d, 0xa9, 0x0c, 0x54, 0x17, 0x9d, 0xb3, 0xac, 0x8b, 0x23, 0xc4, 0x2f,
+	0x3d, 0x20, 0xdd, 0x33, 0x1b, 0x8e, 0xc1, 0xde, 0x8c, 0x61, 0x24, 0x64, 0x8b, 0x8c, 0xf6, 0x51,
+	0x65, 0xe6, 0x2b, 0x69, 0xcb, 0x52, 0x3f, 0xff, 0xcf, 0x2b, 0x38, 0x19, 0x51, 0xf2, 0x4d, 0x7d,
+	0x57, 0xa2, 0xe4, 0x40, 0x13, 0xec, 0x31, 0x1c, 0xd1, 0x25, 0x36, 0x6b, 0x59, 0xf7, 0xb3, 0x13,
+	0xf9, 0xdc, 0x37, 0xc0, 0xfe, 0xaa, 0x53, 0xf6, 0x1b, 0x0d, 0xd8, 0x9b, 0xf4, 0xe4, 0x09, 0x8d,
+	0x39, 0x86, 0x2f, 0xc1, 0x0d, 0x86, 0x79, 0xba, 0x10, 0x4a, 0xac, 0xde, 0x76, 0xb1, 0x2a, 0xb1,
+	0x5e, 0x4e, 0xf2, 0x14, 0xd1, 0x3e, 0x03, 0x87, 0x5b, 0x7c, 0xff, 0xea, 0x6e, 0xb6, 0xbf, 0xd7,
+	0x80, 0x55, 0x82, 0x78, 0x2e, 0x13, 0x82, 0x5f, 0x34, 0x70, 0xbb, 0x7c, 0x02, 0xe0, 0xe3, 0xed,
+	0xd5, 0x6c, 0x9c, 0x1d, 0xeb, 0x1f, 0xf5, 0xb2, 0xbb, 0x6f, 0xbf, 0xfe, 0x78, 0xa7, 0x3f, 0x84,
+	0x47, 0xd9, 0x1e, 0xb8, 0xfa, 0xa3, 0xc4, 0x8e, 0x1a, 0x17, 0xee, 0x36, 0x57, 0x8b, 0x61, 0x5d,
+	0x1c, 0xb7, 0x79, 0x0d, 0x7f, 0x6a, 0xc0, 0xaa, 0x96, 0x0f, 0x9e, 0xee, 0xa0, 0x92, 0x1a, 0x66,
+	0x6b, 0xb0, 0x1b, 0x44, 0xde, 0x20, 0x7b, 0x90, 0x57, 0xda, 0xb5, 0x1f, 0x65, 0x95, 0xfe, 0x2e,
+	0xed, 0x6a, 0x6d, 0x4f, 0x74, 0x9a, 0xd7, 0xa5, 0x85, 0x1e, 0x47, 0x39, 0xfe, 0x58, 0x6b, 0xf6,
+	0xbf, 0x69, 0xe0, 0xfe, 0x8c, 0x46, 0x5b, 0x33, 0xea, 0x1f, 0x56, 0x5f, 0x84, 0x71, 0x36, 0xdc,
+	0x63, 0xed, 0xc5, 0x79, 0x01, 0x09, 0xe9, 0x02, 0xc5, 0xa1, 0x43, 0x59, 0xe8, 0x86, 0x38, 0xce,
+	0x47, 0x5f, 0xed, 0xe7, 0x84, 0xf0, 0xea, 0xdf, 0xc2, 0x89, 0x32, 0xde, 0xeb, 0xb5, 0x61, 0xaf,
+	0xf7, 0x49, 0xaf, 0x0f, 0x25, 0xb0, 0x17, 0x70, 0x47, 0x9a, 0x99, 0x75, 0xd1, 0x72, 0x8a, 0xc0,
+	0xfc, 0xb3, 0x72, 0x99, 0xf4, 0x02, 0x3e, 0x59, 0xb9, 0x4c, 0x2e, 0x5a, 0x13, 0xe5, 0x32, 0xdd,
+	0xcb, 0x13, 0x78, 0xf0, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x12, 0xbd, 0x83, 0x1c, 0x96, 0x06, 0x00,
+	0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_budget_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_budget_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..47c189525002e22d0ca713f8ae119adc78b06ae4
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_budget_service.pb.go
@@ -0,0 +1,547 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_budget_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignBudgetService.GetCampaignBudget][google.ads.googleads.v0.services.CampaignBudgetService.GetCampaignBudget].
+type GetCampaignBudgetRequest struct {
+	// The resource name of the campaign budget to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignBudgetRequest) Reset()         { *m = GetCampaignBudgetRequest{} }
+func (m *GetCampaignBudgetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignBudgetRequest) ProtoMessage()    {}
+func (*GetCampaignBudgetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_service_4de5d27918721d20, []int{0}
+}
+func (m *GetCampaignBudgetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignBudgetRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignBudgetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignBudgetRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignBudgetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignBudgetRequest.Merge(dst, src)
+}
+func (m *GetCampaignBudgetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignBudgetRequest.Size(m)
+}
+func (m *GetCampaignBudgetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignBudgetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignBudgetRequest proto.InternalMessageInfo
+
+func (m *GetCampaignBudgetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignBudgetService.MutateCampaignBudgets][google.ads.googleads.v0.services.CampaignBudgetService.MutateCampaignBudgets].
+type MutateCampaignBudgetsRequest struct {
+	// The ID of the customer whose campaign budgets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual campaign budgets.
+	Operations           []*CampaignBudgetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MutateCampaignBudgetsRequest) Reset()         { *m = MutateCampaignBudgetsRequest{} }
+func (m *MutateCampaignBudgetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBudgetsRequest) ProtoMessage()    {}
+func (*MutateCampaignBudgetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_service_4de5d27918721d20, []int{1}
+}
+func (m *MutateCampaignBudgetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBudgetsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignBudgetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBudgetsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignBudgetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBudgetsRequest.Merge(dst, src)
+}
+func (m *MutateCampaignBudgetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBudgetsRequest.Size(m)
+}
+func (m *MutateCampaignBudgetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBudgetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBudgetsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignBudgetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignBudgetsRequest) GetOperations() []*CampaignBudgetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a campaign budget.
+type CampaignBudgetOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignBudgetOperation_Create
+	//	*CampaignBudgetOperation_Update
+	//	*CampaignBudgetOperation_Remove
+	Operation            isCampaignBudgetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *CampaignBudgetOperation) Reset()         { *m = CampaignBudgetOperation{} }
+func (m *CampaignBudgetOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignBudgetOperation) ProtoMessage()    {}
+func (*CampaignBudgetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_service_4de5d27918721d20, []int{2}
+}
+func (m *CampaignBudgetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignBudgetOperation.Unmarshal(m, b)
+}
+func (m *CampaignBudgetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignBudgetOperation.Marshal(b, m, deterministic)
+}
+func (dst *CampaignBudgetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignBudgetOperation.Merge(dst, src)
+}
+func (m *CampaignBudgetOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignBudgetOperation.Size(m)
+}
+func (m *CampaignBudgetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignBudgetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignBudgetOperation proto.InternalMessageInfo
+
+func (m *CampaignBudgetOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignBudgetOperation_Operation interface {
+	isCampaignBudgetOperation_Operation()
+}
+
+type CampaignBudgetOperation_Create struct {
+	Create *resources.CampaignBudget `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignBudgetOperation_Update struct {
+	Update *resources.CampaignBudget `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignBudgetOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignBudgetOperation_Create) isCampaignBudgetOperation_Operation() {}
+
+func (*CampaignBudgetOperation_Update) isCampaignBudgetOperation_Operation() {}
+
+func (*CampaignBudgetOperation_Remove) isCampaignBudgetOperation_Operation() {}
+
+func (m *CampaignBudgetOperation) GetOperation() isCampaignBudgetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignBudgetOperation) GetCreate() *resources.CampaignBudget {
+	if x, ok := m.GetOperation().(*CampaignBudgetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignBudgetOperation) GetUpdate() *resources.CampaignBudget {
+	if x, ok := m.GetOperation().(*CampaignBudgetOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignBudgetOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignBudgetOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignBudgetOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignBudgetOperation_OneofMarshaler, _CampaignBudgetOperation_OneofUnmarshaler, _CampaignBudgetOperation_OneofSizer, []interface{}{
+		(*CampaignBudgetOperation_Create)(nil),
+		(*CampaignBudgetOperation_Update)(nil),
+		(*CampaignBudgetOperation_Remove)(nil),
+	}
+}
+
+func _CampaignBudgetOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignBudgetOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignBudgetOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CampaignBudgetOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *CampaignBudgetOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CampaignBudgetOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignBudgetOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignBudgetOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignBudget)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignBudgetOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignBudget)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignBudgetOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CampaignBudgetOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignBudgetOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignBudgetOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignBudgetOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignBudgetOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignBudgetOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for campaign budget mutate.
+type MutateCampaignBudgetsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCampaignBudgetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *MutateCampaignBudgetsResponse) Reset()         { *m = MutateCampaignBudgetsResponse{} }
+func (m *MutateCampaignBudgetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBudgetsResponse) ProtoMessage()    {}
+func (*MutateCampaignBudgetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_service_4de5d27918721d20, []int{3}
+}
+func (m *MutateCampaignBudgetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBudgetsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignBudgetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBudgetsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignBudgetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBudgetsResponse.Merge(dst, src)
+}
+func (m *MutateCampaignBudgetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBudgetsResponse.Size(m)
+}
+func (m *MutateCampaignBudgetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBudgetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBudgetsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignBudgetsResponse) GetResults() []*MutateCampaignBudgetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign budget mutate.
+type MutateCampaignBudgetResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignBudgetResult) Reset()         { *m = MutateCampaignBudgetResult{} }
+func (m *MutateCampaignBudgetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignBudgetResult) ProtoMessage()    {}
+func (*MutateCampaignBudgetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_budget_service_4de5d27918721d20, []int{4}
+}
+func (m *MutateCampaignBudgetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignBudgetResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignBudgetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignBudgetResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignBudgetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignBudgetResult.Merge(dst, src)
+}
+func (m *MutateCampaignBudgetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignBudgetResult.Size(m)
+}
+func (m *MutateCampaignBudgetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignBudgetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignBudgetResult proto.InternalMessageInfo
+
+func (m *MutateCampaignBudgetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignBudgetRequest)(nil), "google.ads.googleads.v0.services.GetCampaignBudgetRequest")
+	proto.RegisterType((*MutateCampaignBudgetsRequest)(nil), "google.ads.googleads.v0.services.MutateCampaignBudgetsRequest")
+	proto.RegisterType((*CampaignBudgetOperation)(nil), "google.ads.googleads.v0.services.CampaignBudgetOperation")
+	proto.RegisterType((*MutateCampaignBudgetsResponse)(nil), "google.ads.googleads.v0.services.MutateCampaignBudgetsResponse")
+	proto.RegisterType((*MutateCampaignBudgetResult)(nil), "google.ads.googleads.v0.services.MutateCampaignBudgetResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignBudgetServiceClient is the client API for CampaignBudgetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignBudgetServiceClient interface {
+	// Returns the requested Campaign Budget in full detail.
+	GetCampaignBudget(ctx context.Context, in *GetCampaignBudgetRequest, opts ...grpc.CallOption) (*resources.CampaignBudget, error)
+	// Creates, updates, or removes campaign budgets. Operation statuses are
+	// returned.
+	MutateCampaignBudgets(ctx context.Context, in *MutateCampaignBudgetsRequest, opts ...grpc.CallOption) (*MutateCampaignBudgetsResponse, error)
+}
+
+type campaignBudgetServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignBudgetServiceClient(cc *grpc.ClientConn) CampaignBudgetServiceClient {
+	return &campaignBudgetServiceClient{cc}
+}
+
+func (c *campaignBudgetServiceClient) GetCampaignBudget(ctx context.Context, in *GetCampaignBudgetRequest, opts ...grpc.CallOption) (*resources.CampaignBudget, error) {
+	out := new(resources.CampaignBudget)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignBudgetService/GetCampaignBudget", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignBudgetServiceClient) MutateCampaignBudgets(ctx context.Context, in *MutateCampaignBudgetsRequest, opts ...grpc.CallOption) (*MutateCampaignBudgetsResponse, error) {
+	out := new(MutateCampaignBudgetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignBudgetService/MutateCampaignBudgets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignBudgetServiceServer is the server API for CampaignBudgetService service.
+type CampaignBudgetServiceServer interface {
+	// Returns the requested Campaign Budget in full detail.
+	GetCampaignBudget(context.Context, *GetCampaignBudgetRequest) (*resources.CampaignBudget, error)
+	// Creates, updates, or removes campaign budgets. Operation statuses are
+	// returned.
+	MutateCampaignBudgets(context.Context, *MutateCampaignBudgetsRequest) (*MutateCampaignBudgetsResponse, error)
+}
+
+func RegisterCampaignBudgetServiceServer(s *grpc.Server, srv CampaignBudgetServiceServer) {
+	s.RegisterService(&_CampaignBudgetService_serviceDesc, srv)
+}
+
+func _CampaignBudgetService_GetCampaignBudget_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignBudgetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBudgetServiceServer).GetCampaignBudget(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignBudgetService/GetCampaignBudget",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBudgetServiceServer).GetCampaignBudget(ctx, req.(*GetCampaignBudgetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignBudgetService_MutateCampaignBudgets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignBudgetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignBudgetServiceServer).MutateCampaignBudgets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignBudgetService/MutateCampaignBudgets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignBudgetServiceServer).MutateCampaignBudgets(ctx, req.(*MutateCampaignBudgetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignBudgetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignBudgetService",
+	HandlerType: (*CampaignBudgetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignBudget",
+			Handler:    _CampaignBudgetService_GetCampaignBudget_Handler,
+		},
+		{
+			MethodName: "MutateCampaignBudgets",
+			Handler:    _CampaignBudgetService_MutateCampaignBudgets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_budget_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_budget_service.proto", fileDescriptor_campaign_budget_service_4de5d27918721d20)
+}
+
+var fileDescriptor_campaign_budget_service_4de5d27918721d20 = []byte{
+	// 600 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x41, 0x8b, 0xd3, 0x40,
+	0x14, 0xc7, 0x4d, 0x2a, 0x95, 0x9d, 0xe8, 0xc1, 0x81, 0xc5, 0x10, 0x56, 0x2c, 0xd1, 0x43, 0xe9,
+	0x61, 0xd2, 0xed, 0x0a, 0xd2, 0xae, 0xbb, 0xa5, 0x15, 0xec, 0x8a, 0xac, 0x2e, 0x11, 0x0a, 0x4a,
+	0xa1, 0x4c, 0x9b, 0xb7, 0x21, 0x6c, 0x93, 0x89, 0x99, 0x49, 0x3d, 0x2c, 0x7b, 0xf1, 0x2b, 0x78,
+	0x10, 0x3c, 0x7a, 0xf4, 0xea, 0xd9, 0x2f, 0xe0, 0xd5, 0x93, 0x9e, 0xfd, 0x20, 0x92, 0x4c, 0xa6,
+	0x6e, 0xd7, 0x86, 0xea, 0x7a, 0x7b, 0xc9, 0xbc, 0xf7, 0x7b, 0xef, 0xfd, 0xdf, 0xbc, 0x41, 0xfb,
+	0x3e, 0x63, 0xfe, 0x0c, 0x1c, 0xea, 0x71, 0x47, 0x9a, 0x99, 0x35, 0x6f, 0x3a, 0x1c, 0x92, 0x79,
+	0x30, 0x05, 0xee, 0x4c, 0x69, 0x18, 0xd3, 0xc0, 0x8f, 0xc6, 0x93, 0xd4, 0xf3, 0x41, 0x8c, 0x8b,
+	0x03, 0x12, 0x27, 0x4c, 0x30, 0x5c, 0x93, 0x41, 0x84, 0x7a, 0x9c, 0x2c, 0xe2, 0xc9, 0xbc, 0x49,
+	0x54, 0xbc, 0xf5, 0xa0, 0x2c, 0x43, 0x02, 0x9c, 0xa5, 0xc9, 0x8a, 0x14, 0x12, 0x6d, 0x6d, 0xa9,
+	0xc0, 0x38, 0x70, 0x68, 0x14, 0x31, 0x41, 0x45, 0xc0, 0x22, 0x5e, 0x9c, 0x16, 0x89, 0x9d, 0xfc,
+	0x6b, 0x92, 0x1e, 0x3b, 0xc7, 0x01, 0xcc, 0xbc, 0x71, 0x48, 0xf9, 0x89, 0xf4, 0xb0, 0xbb, 0xc8,
+	0x1c, 0x80, 0x78, 0x54, 0xb0, 0xfb, 0x39, 0xda, 0x85, 0xd7, 0x29, 0x70, 0x81, 0xef, 0xa2, 0x1b,
+	0x2a, 0xfd, 0x38, 0xa2, 0x21, 0x98, 0x5a, 0x4d, 0xab, 0x6f, 0xb8, 0xd7, 0xd5, 0xcf, 0x67, 0x34,
+	0x04, 0xfb, 0x83, 0x86, 0xb6, 0x0e, 0x53, 0x41, 0x05, 0x2c, 0x43, 0xb8, 0xa2, 0xdc, 0x41, 0xc6,
+	0x34, 0xe5, 0x82, 0x85, 0x90, 0x8c, 0x03, 0xaf, 0x60, 0x20, 0xf5, 0xeb, 0x89, 0x87, 0x5f, 0x22,
+	0xc4, 0x62, 0x48, 0x64, 0xe1, 0xa6, 0x5e, 0xab, 0xd4, 0x8d, 0x56, 0x9b, 0xac, 0x93, 0x8c, 0x2c,
+	0xa7, 0x7b, 0xae, 0x08, 0xee, 0x39, 0x98, 0xfd, 0x5e, 0x47, 0xb7, 0x4a, 0xfc, 0xf0, 0x2e, 0x32,
+	0xd2, 0xd8, 0xa3, 0x02, 0x72, 0x39, 0xcc, 0xab, 0x35, 0xad, 0x6e, 0xb4, 0x2c, 0x95, 0x57, 0x29,
+	0x46, 0x1e, 0x67, 0x8a, 0x1d, 0x52, 0x7e, 0xe2, 0x22, 0xe9, 0x9e, 0xd9, 0xf8, 0x29, 0xaa, 0x4e,
+	0x13, 0xa0, 0x42, 0x6a, 0x62, 0xb4, 0xb6, 0x4b, 0xeb, 0x5d, 0x0c, 0xf0, 0x42, 0xc1, 0x07, 0x57,
+	0xdc, 0x02, 0x91, 0xc1, 0x24, 0xda, 0xd4, 0xff, 0x03, 0x26, 0x11, 0xd8, 0x44, 0xd5, 0x04, 0x42,
+	0x36, 0x07, 0xb3, 0x92, 0x29, 0x9d, 0x9d, 0xc8, 0xef, 0xbe, 0x81, 0x36, 0x16, 0xd2, 0xd8, 0x6f,
+	0xd0, 0xed, 0x92, 0xa9, 0xf1, 0x98, 0x45, 0x1c, 0xf0, 0x10, 0x5d, 0x4b, 0x80, 0xa7, 0x33, 0xa1,
+	0x46, 0xf2, 0x70, 0xfd, 0x48, 0x56, 0x11, 0xdd, 0x1c, 0xe2, 0x2a, 0x98, 0xdd, 0x43, 0x56, 0xb9,
+	0xdb, 0x5f, 0x5d, 0xb9, 0xd6, 0xe7, 0x0a, 0xda, 0x5c, 0x8e, 0x7e, 0x21, 0x2b, 0xc0, 0x5f, 0x34,
+	0x74, 0xf3, 0x8f, 0xeb, 0x8c, 0x3b, 0xeb, 0x2b, 0x2f, 0xdb, 0x01, 0xeb, 0xdf, 0x67, 0x61, 0xb7,
+	0xdf, 0x7e, 0xfb, 0xf9, 0x4e, 0xdf, 0xc1, 0xdb, 0xd9, 0xfe, 0x9e, 0x2e, 0xb5, 0xb3, 0xa7, 0xae,
+	0x3d, 0x77, 0x1a, 0x8b, 0x85, 0x2e, 0x94, 0x77, 0x1a, 0x67, 0xf8, 0xbb, 0x86, 0x36, 0x57, 0x8e,
+	0x05, 0xef, 0x5f, 0x4e, 0x7d, 0xb5, 0x85, 0x56, 0xf7, 0xd2, 0xf1, 0xf2, 0x3e, 0xd8, 0xdd, 0xbc,
+	0xab, 0xb6, 0x7d, 0x3f, 0xeb, 0xea, 0x77, 0x1b, 0xa7, 0xe7, 0x76, 0x7b, 0xaf, 0x71, 0x76, 0xb1,
+	0xa9, 0x4e, 0x98, 0x43, 0x3b, 0x5a, 0xa3, 0xff, 0x43, 0x43, 0xf7, 0xa6, 0x2c, 0x5c, 0x5b, 0x47,
+	0xdf, 0x5a, 0x39, 0xdb, 0xa3, 0x6c, 0x21, 0x8f, 0xb4, 0x57, 0x07, 0x45, 0xbc, 0xcf, 0x66, 0x34,
+	0xf2, 0x09, 0x4b, 0x7c, 0xc7, 0x87, 0x28, 0x5f, 0x57, 0xf5, 0x72, 0xc6, 0x01, 0x2f, 0x7f, 0xaa,
+	0x77, 0x95, 0xf1, 0x51, 0xaf, 0x0c, 0x7a, 0xbd, 0x4f, 0x7a, 0x6d, 0x20, 0x81, 0x3d, 0x8f, 0x13,
+	0x69, 0x66, 0xd6, 0xb0, 0x49, 0x8a, 0xc4, 0xfc, 0xab, 0x72, 0x19, 0xf5, 0x3c, 0x3e, 0x5a, 0xb8,
+	0x8c, 0x86, 0xcd, 0x91, 0x72, 0x99, 0x54, 0xf3, 0x02, 0x76, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff,
+	0x4d, 0x55, 0x22, 0x99, 0x2a, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_criterion_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_criterion_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..96d587f7c5f25fb56293d07ffded0f4a37f442c6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_criterion_service.pb.go
@@ -0,0 +1,545 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_criterion_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignCriterionService.GetCampaignCriterion][google.ads.googleads.v0.services.CampaignCriterionService.GetCampaignCriterion].
+type GetCampaignCriterionRequest struct {
+	// The resource name of the criterion to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignCriterionRequest) Reset()         { *m = GetCampaignCriterionRequest{} }
+func (m *GetCampaignCriterionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignCriterionRequest) ProtoMessage()    {}
+func (*GetCampaignCriterionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_service_9e44f1f5d681490b, []int{0}
+}
+func (m *GetCampaignCriterionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignCriterionRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignCriterionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignCriterionRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignCriterionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignCriterionRequest.Merge(dst, src)
+}
+func (m *GetCampaignCriterionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignCriterionRequest.Size(m)
+}
+func (m *GetCampaignCriterionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignCriterionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignCriterionRequest proto.InternalMessageInfo
+
+func (m *GetCampaignCriterionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignCriterionService.MutateCampaignCriteria][google.ads.googleads.v0.services.CampaignCriterionService.MutateCampaignCriteria].
+type MutateCampaignCriteriaRequest struct {
+	// The ID of the customer whose criteria are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual criteria.
+	Operations           []*CampaignCriterionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *MutateCampaignCriteriaRequest) Reset()         { *m = MutateCampaignCriteriaRequest{} }
+func (m *MutateCampaignCriteriaRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignCriteriaRequest) ProtoMessage()    {}
+func (*MutateCampaignCriteriaRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_service_9e44f1f5d681490b, []int{1}
+}
+func (m *MutateCampaignCriteriaRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignCriteriaRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignCriteriaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignCriteriaRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignCriteriaRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignCriteriaRequest.Merge(dst, src)
+}
+func (m *MutateCampaignCriteriaRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignCriteriaRequest.Size(m)
+}
+func (m *MutateCampaignCriteriaRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignCriteriaRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignCriteriaRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignCriteriaRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignCriteriaRequest) GetOperations() []*CampaignCriterionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a campaign criterion.
+type CampaignCriterionOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignCriterionOperation_Create
+	//	*CampaignCriterionOperation_Update
+	//	*CampaignCriterionOperation_Remove
+	Operation            isCampaignCriterionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *CampaignCriterionOperation) Reset()         { *m = CampaignCriterionOperation{} }
+func (m *CampaignCriterionOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignCriterionOperation) ProtoMessage()    {}
+func (*CampaignCriterionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_service_9e44f1f5d681490b, []int{2}
+}
+func (m *CampaignCriterionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignCriterionOperation.Unmarshal(m, b)
+}
+func (m *CampaignCriterionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignCriterionOperation.Marshal(b, m, deterministic)
+}
+func (dst *CampaignCriterionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignCriterionOperation.Merge(dst, src)
+}
+func (m *CampaignCriterionOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignCriterionOperation.Size(m)
+}
+func (m *CampaignCriterionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignCriterionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignCriterionOperation proto.InternalMessageInfo
+
+func (m *CampaignCriterionOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignCriterionOperation_Operation interface {
+	isCampaignCriterionOperation_Operation()
+}
+
+type CampaignCriterionOperation_Create struct {
+	Create *resources.CampaignCriterion `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignCriterionOperation_Update struct {
+	Update *resources.CampaignCriterion `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignCriterionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignCriterionOperation_Create) isCampaignCriterionOperation_Operation() {}
+
+func (*CampaignCriterionOperation_Update) isCampaignCriterionOperation_Operation() {}
+
+func (*CampaignCriterionOperation_Remove) isCampaignCriterionOperation_Operation() {}
+
+func (m *CampaignCriterionOperation) GetOperation() isCampaignCriterionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignCriterionOperation) GetCreate() *resources.CampaignCriterion {
+	if x, ok := m.GetOperation().(*CampaignCriterionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignCriterionOperation) GetUpdate() *resources.CampaignCriterion {
+	if x, ok := m.GetOperation().(*CampaignCriterionOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignCriterionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignCriterionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignCriterionOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignCriterionOperation_OneofMarshaler, _CampaignCriterionOperation_OneofUnmarshaler, _CampaignCriterionOperation_OneofSizer, []interface{}{
+		(*CampaignCriterionOperation_Create)(nil),
+		(*CampaignCriterionOperation_Update)(nil),
+		(*CampaignCriterionOperation_Remove)(nil),
+	}
+}
+
+func _CampaignCriterionOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignCriterionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignCriterionOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CampaignCriterionOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *CampaignCriterionOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CampaignCriterionOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignCriterionOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignCriterionOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignCriterion)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignCriterionOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignCriterion)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignCriterionOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CampaignCriterionOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignCriterionOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignCriterionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignCriterionOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterionOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignCriterionOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for campaign criterion mutate.
+type MutateCampaignCriteriaResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCampaignCriterionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *MutateCampaignCriteriaResponse) Reset()         { *m = MutateCampaignCriteriaResponse{} }
+func (m *MutateCampaignCriteriaResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignCriteriaResponse) ProtoMessage()    {}
+func (*MutateCampaignCriteriaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_service_9e44f1f5d681490b, []int{3}
+}
+func (m *MutateCampaignCriteriaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignCriteriaResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignCriteriaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignCriteriaResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignCriteriaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignCriteriaResponse.Merge(dst, src)
+}
+func (m *MutateCampaignCriteriaResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignCriteriaResponse.Size(m)
+}
+func (m *MutateCampaignCriteriaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignCriteriaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignCriteriaResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignCriteriaResponse) GetResults() []*MutateCampaignCriterionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the criterion mutate.
+type MutateCampaignCriterionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignCriterionResult) Reset()         { *m = MutateCampaignCriterionResult{} }
+func (m *MutateCampaignCriterionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignCriterionResult) ProtoMessage()    {}
+func (*MutateCampaignCriterionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_criterion_service_9e44f1f5d681490b, []int{4}
+}
+func (m *MutateCampaignCriterionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignCriterionResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignCriterionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignCriterionResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignCriterionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignCriterionResult.Merge(dst, src)
+}
+func (m *MutateCampaignCriterionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignCriterionResult.Size(m)
+}
+func (m *MutateCampaignCriterionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignCriterionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignCriterionResult proto.InternalMessageInfo
+
+func (m *MutateCampaignCriterionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignCriterionRequest)(nil), "google.ads.googleads.v0.services.GetCampaignCriterionRequest")
+	proto.RegisterType((*MutateCampaignCriteriaRequest)(nil), "google.ads.googleads.v0.services.MutateCampaignCriteriaRequest")
+	proto.RegisterType((*CampaignCriterionOperation)(nil), "google.ads.googleads.v0.services.CampaignCriterionOperation")
+	proto.RegisterType((*MutateCampaignCriteriaResponse)(nil), "google.ads.googleads.v0.services.MutateCampaignCriteriaResponse")
+	proto.RegisterType((*MutateCampaignCriterionResult)(nil), "google.ads.googleads.v0.services.MutateCampaignCriterionResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignCriterionServiceClient is the client API for CampaignCriterionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignCriterionServiceClient interface {
+	// Returns the requested criterion in full detail.
+	GetCampaignCriterion(ctx context.Context, in *GetCampaignCriterionRequest, opts ...grpc.CallOption) (*resources.CampaignCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateCampaignCriteria(ctx context.Context, in *MutateCampaignCriteriaRequest, opts ...grpc.CallOption) (*MutateCampaignCriteriaResponse, error)
+}
+
+type campaignCriterionServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignCriterionServiceClient(cc *grpc.ClientConn) CampaignCriterionServiceClient {
+	return &campaignCriterionServiceClient{cc}
+}
+
+func (c *campaignCriterionServiceClient) GetCampaignCriterion(ctx context.Context, in *GetCampaignCriterionRequest, opts ...grpc.CallOption) (*resources.CampaignCriterion, error) {
+	out := new(resources.CampaignCriterion)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignCriterionService/GetCampaignCriterion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignCriterionServiceClient) MutateCampaignCriteria(ctx context.Context, in *MutateCampaignCriteriaRequest, opts ...grpc.CallOption) (*MutateCampaignCriteriaResponse, error) {
+	out := new(MutateCampaignCriteriaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignCriterionService/MutateCampaignCriteria", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignCriterionServiceServer is the server API for CampaignCriterionService service.
+type CampaignCriterionServiceServer interface {
+	// Returns the requested criterion in full detail.
+	GetCampaignCriterion(context.Context, *GetCampaignCriterionRequest) (*resources.CampaignCriterion, error)
+	// Creates, updates, or removes criteria. Operation statuses are returned.
+	MutateCampaignCriteria(context.Context, *MutateCampaignCriteriaRequest) (*MutateCampaignCriteriaResponse, error)
+}
+
+func RegisterCampaignCriterionServiceServer(s *grpc.Server, srv CampaignCriterionServiceServer) {
+	s.RegisterService(&_CampaignCriterionService_serviceDesc, srv)
+}
+
+func _CampaignCriterionService_GetCampaignCriterion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignCriterionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignCriterionServiceServer).GetCampaignCriterion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignCriterionService/GetCampaignCriterion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignCriterionServiceServer).GetCampaignCriterion(ctx, req.(*GetCampaignCriterionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignCriterionService_MutateCampaignCriteria_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignCriteriaRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignCriterionServiceServer).MutateCampaignCriteria(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignCriterionService/MutateCampaignCriteria",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignCriterionServiceServer).MutateCampaignCriteria(ctx, req.(*MutateCampaignCriteriaRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignCriterionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignCriterionService",
+	HandlerType: (*CampaignCriterionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignCriterion",
+			Handler:    _CampaignCriterionService_GetCampaignCriterion_Handler,
+		},
+		{
+			MethodName: "MutateCampaignCriteria",
+			Handler:    _CampaignCriterionService_MutateCampaignCriteria_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_criterion_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_criterion_service.proto", fileDescriptor_campaign_criterion_service_9e44f1f5d681490b)
+}
+
+var fileDescriptor_campaign_criterion_service_9e44f1f5d681490b = []byte{
+	// 599 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x4f, 0x6f, 0xd3, 0x3e,
+	0x18, 0xc7, 0x7f, 0x49, 0x7f, 0x2a, 0x9a, 0x03, 0x17, 0x0b, 0xa1, 0x28, 0x30, 0xa8, 0x02, 0x87,
+	0xaa, 0x07, 0xa7, 0x2a, 0xe3, 0xd2, 0x51, 0xb1, 0x76, 0x88, 0x8e, 0xc3, 0xc6, 0x14, 0xa4, 0x49,
+	0xa0, 0x4a, 0x95, 0x97, 0x78, 0x51, 0xb4, 0x26, 0x0e, 0xb6, 0xd3, 0x4b, 0xb5, 0x0b, 0x6f, 0x81,
+	0x3b, 0x42, 0x1c, 0x79, 0x1d, 0x48, 0x48, 0x5c, 0x39, 0xef, 0xc6, 0x0b, 0x41, 0x8e, 0xe3, 0x30,
+	0x68, 0x43, 0x51, 0xb9, 0x3d, 0x89, 0x1f, 0x7f, 0x9e, 0x3f, 0xdf, 0xe7, 0x31, 0x18, 0x46, 0x94,
+	0x46, 0x33, 0xe2, 0xe1, 0x90, 0x7b, 0xca, 0x94, 0xd6, 0xbc, 0xeb, 0x71, 0xc2, 0xe6, 0x71, 0x40,
+	0xb8, 0x17, 0xe0, 0x24, 0xc3, 0x71, 0x94, 0x4e, 0x03, 0x16, 0x0b, 0xc2, 0x62, 0x9a, 0x4e, 0xcb,
+	0x33, 0x94, 0x31, 0x2a, 0x28, 0x6c, 0xa9, 0x7b, 0x08, 0x87, 0x1c, 0x55, 0x08, 0x34, 0xef, 0x22,
+	0x8d, 0x70, 0xfa, 0x75, 0x41, 0x18, 0xe1, 0x34, 0x67, 0xab, 0xa3, 0x28, 0xba, 0x73, 0x47, 0xdf,
+	0xcd, 0x62, 0x0f, 0xa7, 0x29, 0x15, 0x58, 0xc4, 0x34, 0xe5, 0xe5, 0x69, 0x19, 0xdb, 0x2b, 0xbe,
+	0x4e, 0xf3, 0x33, 0xef, 0x2c, 0x26, 0xb3, 0x70, 0x9a, 0x60, 0x7e, 0xae, 0x3c, 0xdc, 0x11, 0xb8,
+	0x3d, 0x26, 0x62, 0xbf, 0xc4, 0xef, 0x6b, 0xba, 0x4f, 0xde, 0xe4, 0x84, 0x0b, 0x78, 0x1f, 0xdc,
+	0xd0, 0x49, 0x4c, 0x53, 0x9c, 0x10, 0xdb, 0x68, 0x19, 0xed, 0x2d, 0xff, 0xba, 0xfe, 0x79, 0x84,
+	0x13, 0xe2, 0xbe, 0x37, 0xc0, 0xf6, 0x61, 0x2e, 0xb0, 0x20, 0xbf, 0x71, 0xb0, 0xc6, 0xdc, 0x03,
+	0x56, 0x90, 0x73, 0x41, 0x13, 0xc2, 0xa6, 0x71, 0x58, 0x42, 0x80, 0xfe, 0xf5, 0x3c, 0x84, 0x13,
+	0x00, 0x68, 0x46, 0x98, 0x4a, 0xde, 0x36, 0x5b, 0x8d, 0xb6, 0xd5, 0x7b, 0x8c, 0xd6, 0x75, 0x0e,
+	0x2d, 0xe5, 0xfd, 0x42, 0x43, 0xfc, 0x2b, 0x3c, 0xf7, 0x83, 0x09, 0x9c, 0x7a, 0x57, 0xb8, 0x0b,
+	0xac, 0x3c, 0x0b, 0xb1, 0x20, 0x45, 0x63, 0xec, 0xff, 0x5b, 0x46, 0xdb, 0xea, 0x39, 0x3a, 0xba,
+	0xee, 0x1d, 0x7a, 0x26, 0x7b, 0x77, 0x88, 0xf9, 0xb9, 0x0f, 0x94, 0xbb, 0xb4, 0xe1, 0x11, 0x68,
+	0x06, 0x8c, 0x60, 0xa1, 0x5a, 0x63, 0xf5, 0x76, 0x6a, 0xb3, 0xae, 0xd4, 0x5c, 0x4e, 0xfb, 0xe0,
+	0x3f, 0xbf, 0xa4, 0x48, 0x9e, 0xa2, 0xdb, 0xe6, 0xbf, 0xf1, 0x14, 0x05, 0xda, 0xa0, 0xc9, 0x48,
+	0x42, 0xe7, 0xc4, 0x6e, 0xc8, 0xae, 0xcb, 0x13, 0xf5, 0x3d, 0xb2, 0xc0, 0x56, 0xd5, 0x23, 0x77,
+	0x01, 0xee, 0xd6, 0x49, 0xc8, 0x33, 0x9a, 0x72, 0x02, 0x5f, 0x81, 0x6b, 0x8c, 0xf0, 0x7c, 0x26,
+	0xb4, 0x3e, 0x4f, 0xd6, 0xeb, 0xb3, 0x12, 0x29, 0xa7, 0x4b, 0x72, 0x7c, 0xcd, 0x73, 0x9f, 0xd6,
+	0xcc, 0x8f, 0xf6, 0xfc, 0xab, 0x31, 0xec, 0x7d, 0x6e, 0x00, 0x7b, 0x09, 0xf0, 0x52, 0xa5, 0x02,
+	0xbf, 0x18, 0xe0, 0xe6, 0xaa, 0x41, 0x87, 0x83, 0xf5, 0x55, 0xfc, 0x61, 0x41, 0x9c, 0x8d, 0xe4,
+	0x71, 0xfb, 0x6f, 0xbf, 0x7d, 0x7f, 0x67, 0xee, 0xc0, 0x9e, 0xdc, 0xf2, 0xc5, 0x2f, 0xa5, 0x0d,
+	0xf4, 0x56, 0x70, 0xaf, 0x53, 0xad, 0xbd, 0x16, 0xc3, 0xeb, 0x5c, 0xc0, 0x4b, 0x03, 0xdc, 0x5a,
+	0x2d, 0x15, 0xdc, 0x54, 0x11, 0xbd, 0xa7, 0xce, 0xde, 0xe6, 0x00, 0x35, 0x25, 0xee, 0x5e, 0x51,
+	0x59, 0xdf, 0x7d, 0x24, 0x2b, 0xfb, 0x59, 0xca, 0xe2, 0xca, 0xfa, 0x0f, 0x3a, 0x17, 0x4b, 0x85,
+	0xf5, 0x93, 0x02, 0xdb, 0x37, 0x3a, 0xa3, 0x4b, 0x03, 0x3c, 0x08, 0x68, 0xb2, 0x36, 0x93, 0xd1,
+	0x76, 0x9d, 0xd8, 0xc7, 0x72, 0x63, 0x8f, 0x8d, 0xd7, 0x07, 0x25, 0x22, 0xa2, 0x33, 0x9c, 0x46,
+	0x88, 0xb2, 0xc8, 0x8b, 0x48, 0x5a, 0xec, 0xb3, 0x7e, 0x67, 0xb3, 0x98, 0xd7, 0xbf, 0xed, 0xbb,
+	0xda, 0xf8, 0x68, 0x36, 0xc6, 0xc3, 0xe1, 0x27, 0xb3, 0x35, 0x56, 0xc0, 0x61, 0xc8, 0x91, 0x32,
+	0xa5, 0x75, 0xd2, 0x45, 0x65, 0x60, 0xfe, 0x55, 0xbb, 0x4c, 0x86, 0x21, 0x9f, 0x54, 0x2e, 0x93,
+	0x93, 0xee, 0x44, 0xbb, 0x9c, 0x36, 0x8b, 0x04, 0x1e, 0xfe, 0x08, 0x00, 0x00, 0xff, 0xff, 0x12,
+	0xdf, 0x1f, 0x23, 0x5b, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_feed_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_feed_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e8cb9bca564c8377a352e36cdbca13c98d0a58e0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_feed_service.pb.go
@@ -0,0 +1,547 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_feed_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignFeedService.GetCampaignFeed][google.ads.googleads.v0.services.CampaignFeedService.GetCampaignFeed].
+type GetCampaignFeedRequest struct {
+	// The resource name of the campaign feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignFeedRequest) Reset()         { *m = GetCampaignFeedRequest{} }
+func (m *GetCampaignFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignFeedRequest) ProtoMessage()    {}
+func (*GetCampaignFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_service_0c772cfa4dcff26c, []int{0}
+}
+func (m *GetCampaignFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignFeedRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignFeedRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignFeedRequest.Merge(dst, src)
+}
+func (m *GetCampaignFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignFeedRequest.Size(m)
+}
+func (m *GetCampaignFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignFeedRequest proto.InternalMessageInfo
+
+func (m *GetCampaignFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignFeedService.MutateCampaignFeeds][google.ads.googleads.v0.services.CampaignFeedService.MutateCampaignFeeds].
+type MutateCampaignFeedsRequest struct {
+	// The ID of the customer whose campaign feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual campaign feeds.
+	Operations           []*CampaignFeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateCampaignFeedsRequest) Reset()         { *m = MutateCampaignFeedsRequest{} }
+func (m *MutateCampaignFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignFeedsRequest) ProtoMessage()    {}
+func (*MutateCampaignFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_service_0c772cfa4dcff26c, []int{1}
+}
+func (m *MutateCampaignFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignFeedsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignFeedsRequest.Merge(dst, src)
+}
+func (m *MutateCampaignFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignFeedsRequest.Size(m)
+}
+func (m *MutateCampaignFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignFeedsRequest) GetOperations() []*CampaignFeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a campaign feed.
+type CampaignFeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignFeedOperation_Create
+	//	*CampaignFeedOperation_Update
+	//	*CampaignFeedOperation_Remove
+	Operation            isCampaignFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *CampaignFeedOperation) Reset()         { *m = CampaignFeedOperation{} }
+func (m *CampaignFeedOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignFeedOperation) ProtoMessage()    {}
+func (*CampaignFeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_service_0c772cfa4dcff26c, []int{2}
+}
+func (m *CampaignFeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignFeedOperation.Unmarshal(m, b)
+}
+func (m *CampaignFeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignFeedOperation.Marshal(b, m, deterministic)
+}
+func (dst *CampaignFeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignFeedOperation.Merge(dst, src)
+}
+func (m *CampaignFeedOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignFeedOperation.Size(m)
+}
+func (m *CampaignFeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignFeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignFeedOperation proto.InternalMessageInfo
+
+func (m *CampaignFeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignFeedOperation_Operation interface {
+	isCampaignFeedOperation_Operation()
+}
+
+type CampaignFeedOperation_Create struct {
+	Create *resources.CampaignFeed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignFeedOperation_Update struct {
+	Update *resources.CampaignFeed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignFeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignFeedOperation_Create) isCampaignFeedOperation_Operation() {}
+
+func (*CampaignFeedOperation_Update) isCampaignFeedOperation_Operation() {}
+
+func (*CampaignFeedOperation_Remove) isCampaignFeedOperation_Operation() {}
+
+func (m *CampaignFeedOperation) GetOperation() isCampaignFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignFeedOperation) GetCreate() *resources.CampaignFeed {
+	if x, ok := m.GetOperation().(*CampaignFeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignFeedOperation) GetUpdate() *resources.CampaignFeed {
+	if x, ok := m.GetOperation().(*CampaignFeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignFeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignFeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignFeedOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignFeedOperation_OneofMarshaler, _CampaignFeedOperation_OneofUnmarshaler, _CampaignFeedOperation_OneofSizer, []interface{}{
+		(*CampaignFeedOperation_Create)(nil),
+		(*CampaignFeedOperation_Update)(nil),
+		(*CampaignFeedOperation_Remove)(nil),
+	}
+}
+
+func _CampaignFeedOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignFeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignFeedOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CampaignFeedOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *CampaignFeedOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CampaignFeedOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignFeedOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignFeedOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignFeed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignFeedOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignFeed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignFeedOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CampaignFeedOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignFeedOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignFeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignFeedOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignFeedOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignFeedOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a campaign feed mutate.
+type MutateCampaignFeedsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCampaignFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateCampaignFeedsResponse) Reset()         { *m = MutateCampaignFeedsResponse{} }
+func (m *MutateCampaignFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignFeedsResponse) ProtoMessage()    {}
+func (*MutateCampaignFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_service_0c772cfa4dcff26c, []int{3}
+}
+func (m *MutateCampaignFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignFeedsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignFeedsResponse.Merge(dst, src)
+}
+func (m *MutateCampaignFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignFeedsResponse.Size(m)
+}
+func (m *MutateCampaignFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignFeedsResponse) GetResults() []*MutateCampaignFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign feed mutate.
+type MutateCampaignFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignFeedResult) Reset()         { *m = MutateCampaignFeedResult{} }
+func (m *MutateCampaignFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignFeedResult) ProtoMessage()    {}
+func (*MutateCampaignFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_feed_service_0c772cfa4dcff26c, []int{4}
+}
+func (m *MutateCampaignFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignFeedResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignFeedResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignFeedResult.Merge(dst, src)
+}
+func (m *MutateCampaignFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignFeedResult.Size(m)
+}
+func (m *MutateCampaignFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignFeedResult proto.InternalMessageInfo
+
+func (m *MutateCampaignFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignFeedRequest)(nil), "google.ads.googleads.v0.services.GetCampaignFeedRequest")
+	proto.RegisterType((*MutateCampaignFeedsRequest)(nil), "google.ads.googleads.v0.services.MutateCampaignFeedsRequest")
+	proto.RegisterType((*CampaignFeedOperation)(nil), "google.ads.googleads.v0.services.CampaignFeedOperation")
+	proto.RegisterType((*MutateCampaignFeedsResponse)(nil), "google.ads.googleads.v0.services.MutateCampaignFeedsResponse")
+	proto.RegisterType((*MutateCampaignFeedResult)(nil), "google.ads.googleads.v0.services.MutateCampaignFeedResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignFeedServiceClient is the client API for CampaignFeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignFeedServiceClient interface {
+	// Returns the requested campaign feed in full detail.
+	GetCampaignFeed(ctx context.Context, in *GetCampaignFeedRequest, opts ...grpc.CallOption) (*resources.CampaignFeed, error)
+	// Creates, updates, or removes campaign feeds. Operation statuses are
+	// returned.
+	MutateCampaignFeeds(ctx context.Context, in *MutateCampaignFeedsRequest, opts ...grpc.CallOption) (*MutateCampaignFeedsResponse, error)
+}
+
+type campaignFeedServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignFeedServiceClient(cc *grpc.ClientConn) CampaignFeedServiceClient {
+	return &campaignFeedServiceClient{cc}
+}
+
+func (c *campaignFeedServiceClient) GetCampaignFeed(ctx context.Context, in *GetCampaignFeedRequest, opts ...grpc.CallOption) (*resources.CampaignFeed, error) {
+	out := new(resources.CampaignFeed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignFeedService/GetCampaignFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignFeedServiceClient) MutateCampaignFeeds(ctx context.Context, in *MutateCampaignFeedsRequest, opts ...grpc.CallOption) (*MutateCampaignFeedsResponse, error) {
+	out := new(MutateCampaignFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignFeedService/MutateCampaignFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignFeedServiceServer is the server API for CampaignFeedService service.
+type CampaignFeedServiceServer interface {
+	// Returns the requested campaign feed in full detail.
+	GetCampaignFeed(context.Context, *GetCampaignFeedRequest) (*resources.CampaignFeed, error)
+	// Creates, updates, or removes campaign feeds. Operation statuses are
+	// returned.
+	MutateCampaignFeeds(context.Context, *MutateCampaignFeedsRequest) (*MutateCampaignFeedsResponse, error)
+}
+
+func RegisterCampaignFeedServiceServer(s *grpc.Server, srv CampaignFeedServiceServer) {
+	s.RegisterService(&_CampaignFeedService_serviceDesc, srv)
+}
+
+func _CampaignFeedService_GetCampaignFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignFeedServiceServer).GetCampaignFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignFeedService/GetCampaignFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignFeedServiceServer).GetCampaignFeed(ctx, req.(*GetCampaignFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignFeedService_MutateCampaignFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignFeedServiceServer).MutateCampaignFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignFeedService/MutateCampaignFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignFeedServiceServer).MutateCampaignFeeds(ctx, req.(*MutateCampaignFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignFeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignFeedService",
+	HandlerType: (*CampaignFeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignFeed",
+			Handler:    _CampaignFeedService_GetCampaignFeed_Handler,
+		},
+		{
+			MethodName: "MutateCampaignFeeds",
+			Handler:    _CampaignFeedService_MutateCampaignFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_feed_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_feed_service.proto", fileDescriptor_campaign_feed_service_0c772cfa4dcff26c)
+}
+
+var fileDescriptor_campaign_feed_service_0c772cfa4dcff26c = []byte{
+	// 595 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x41, 0x8b, 0xd3, 0x40,
+	0x14, 0xc7, 0x4d, 0x2a, 0x2b, 0x3b, 0x51, 0x84, 0x59, 0x94, 0x10, 0x05, 0x4b, 0xf4, 0x50, 0x7a,
+	0x98, 0xa9, 0x15, 0xa9, 0x74, 0xb7, 0x48, 0x2b, 0x6c, 0x77, 0x0f, 0xab, 0x4b, 0x94, 0x15, 0xa4,
+	0x50, 0x66, 0x9b, 0xd7, 0x10, 0xb6, 0xc9, 0xc4, 0xcc, 0xa4, 0x97, 0x65, 0x2f, 0x7e, 0x03, 0x11,
+	0xbc, 0xeb, 0xd1, 0xbb, 0x5f, 0xc2, 0x9b, 0x78, 0xf1, 0x03, 0xf8, 0x41, 0x24, 0x99, 0x4c, 0x6d,
+	0xdd, 0x96, 0x6a, 0x6f, 0x2f, 0x93, 0xf7, 0x7e, 0xef, 0xcd, 0xff, 0xbd, 0x37, 0x68, 0x2f, 0xe0,
+	0x3c, 0x98, 0x00, 0x65, 0xbe, 0xa0, 0xca, 0xcc, 0xad, 0x69, 0x83, 0x0a, 0x48, 0xa7, 0xe1, 0x08,
+	0x04, 0x1d, 0xb1, 0x28, 0x61, 0x61, 0x10, 0x0f, 0xc7, 0x00, 0xfe, 0xb0, 0x3c, 0x26, 0x49, 0xca,
+	0x25, 0xc7, 0x55, 0x15, 0x42, 0x98, 0x2f, 0xc8, 0x2c, 0x9a, 0x4c, 0x1b, 0x44, 0x47, 0x3b, 0x8f,
+	0x57, 0xf1, 0x53, 0x10, 0x3c, 0x4b, 0x2f, 0x25, 0x50, 0x60, 0xe7, 0xae, 0x0e, 0x4b, 0x42, 0xca,
+	0xe2, 0x98, 0x4b, 0x26, 0x43, 0x1e, 0x8b, 0xf2, 0x6f, 0x99, 0x96, 0x16, 0x5f, 0xa7, 0xd9, 0x98,
+	0x8e, 0x43, 0x98, 0xf8, 0xc3, 0x88, 0x89, 0x33, 0xe5, 0xe1, 0x76, 0xd0, 0xed, 0x3e, 0xc8, 0x67,
+	0x25, 0x79, 0x1f, 0xc0, 0xf7, 0xe0, 0x6d, 0x06, 0x42, 0xe2, 0xfb, 0xe8, 0x86, 0x4e, 0x3d, 0x8c,
+	0x59, 0x04, 0xb6, 0x51, 0x35, 0x6a, 0xdb, 0xde, 0x75, 0x7d, 0xf8, 0x9c, 0x45, 0xe0, 0x7e, 0x34,
+	0x90, 0x73, 0x94, 0x49, 0x26, 0x61, 0x1e, 0x21, 0x34, 0xe3, 0x1e, 0xb2, 0x46, 0x99, 0x90, 0x3c,
+	0x82, 0x74, 0x18, 0xfa, 0x25, 0x01, 0xe9, 0xa3, 0x43, 0x1f, 0xbf, 0x46, 0x88, 0x27, 0x90, 0xaa,
+	0xa2, 0x6d, 0xb3, 0x5a, 0xa9, 0x59, 0xcd, 0x16, 0x59, 0x27, 0x16, 0x99, 0x4f, 0xf6, 0x42, 0xc7,
+	0x7b, 0x73, 0x28, 0xf7, 0xbd, 0x89, 0x6e, 0x2d, 0xf5, 0xc2, 0xbb, 0xc8, 0xca, 0x12, 0x9f, 0x49,
+	0x28, 0x64, 0xb0, 0xaf, 0x56, 0x8d, 0x9a, 0xd5, 0x74, 0x74, 0x4e, 0xad, 0x14, 0xd9, 0xcf, 0x95,
+	0x3a, 0x62, 0xe2, 0xcc, 0x43, 0xca, 0x3d, 0xb7, 0xf1, 0x21, 0xda, 0x1a, 0xa5, 0xc0, 0xa4, 0x52,
+	0xc3, 0x6a, 0xd2, 0x95, 0xb5, 0xce, 0xda, 0xb6, 0x50, 0xec, 0xc1, 0x15, 0xaf, 0x04, 0xe4, 0x28,
+	0x05, 0xb6, 0xcd, 0x8d, 0x51, 0x0a, 0x80, 0x6d, 0xb4, 0x95, 0x42, 0xc4, 0xa7, 0x60, 0x57, 0x72,
+	0x85, 0xf3, 0x3f, 0xea, 0xbb, 0x67, 0xa1, 0xed, 0x99, 0x28, 0xae, 0x40, 0x77, 0x96, 0xf6, 0x4a,
+	0x24, 0x3c, 0x16, 0x80, 0x5f, 0xa1, 0x6b, 0x29, 0x88, 0x6c, 0x22, 0x75, 0x23, 0xda, 0xeb, 0x1b,
+	0x71, 0x99, 0xe7, 0x15, 0x08, 0x4f, 0xa3, 0xdc, 0xa7, 0xc8, 0x5e, 0xe5, 0xf4, 0x4f, 0x23, 0xd6,
+	0xfc, 0x54, 0x41, 0x3b, 0xf3, 0xb1, 0x2f, 0x55, 0x6e, 0xfc, 0xd5, 0x40, 0x37, 0xff, 0x1a, 0x5d,
+	0xfc, 0x64, 0x7d, 0xc5, 0xcb, 0xa7, 0xdd, 0xf9, 0x5f, 0xf5, 0xdd, 0xd6, 0xbb, 0x1f, 0xbf, 0x3e,
+	0x98, 0x0f, 0x31, 0xcd, 0x77, 0xf4, 0x7c, 0xe1, 0x1a, 0x1d, 0x3d, 0xe0, 0x82, 0xd6, 0x67, 0x4b,
+	0x5b, 0x68, 0x4d, 0xeb, 0x17, 0xf8, 0xbb, 0x81, 0x76, 0x96, 0xb4, 0x01, 0xef, 0x6d, 0xa2, 0xb6,
+	0xde, 0x34, 0xa7, 0xb3, 0x61, 0xb4, 0xea, 0xbd, 0xdb, 0x29, 0x6e, 0xd3, 0x72, 0x9b, 0xf9, 0x6d,
+	0xfe, 0x94, 0x7f, 0x3e, 0xb7, 0xbd, 0x9d, 0xfa, 0xc5, 0xe2, 0x65, 0xda, 0x51, 0x01, 0x6c, 0x1b,
+	0xf5, 0xde, 0x4f, 0x03, 0x3d, 0x18, 0xf1, 0x68, 0x6d, 0x0d, 0x3d, 0x7b, 0x49, 0x27, 0x8f, 0xf3,
+	0x95, 0x3b, 0x36, 0xde, 0x1c, 0x94, 0xd1, 0x01, 0x9f, 0xb0, 0x38, 0x20, 0x3c, 0x0d, 0x68, 0x00,
+	0x71, 0xb1, 0x90, 0xfa, 0x45, 0x4c, 0x42, 0xb1, 0xfa, 0x01, 0xde, 0xd5, 0xc6, 0x67, 0xb3, 0xd2,
+	0xef, 0x76, 0xbf, 0x98, 0xd5, 0xbe, 0x02, 0x76, 0x7d, 0x41, 0x94, 0x99, 0x5b, 0x27, 0x0d, 0x52,
+	0x26, 0x16, 0xdf, 0xb4, 0xcb, 0xa0, 0xeb, 0x8b, 0xc1, 0xcc, 0x65, 0x70, 0xd2, 0x18, 0x68, 0x97,
+	0xd3, 0xad, 0xa2, 0x80, 0x47, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xf8, 0x14, 0xa6, 0x00,
+	0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_group_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_group_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..2d4c1eac2814b9096c41765e1e278eab6266416d
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_group_service.pb.go
@@ -0,0 +1,547 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_group_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignGroupService.GetCampaignGroup][google.ads.googleads.v0.services.CampaignGroupService.GetCampaignGroup].
+type GetCampaignGroupRequest struct {
+	// The resource name of the campaign group to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignGroupRequest) Reset()         { *m = GetCampaignGroupRequest{} }
+func (m *GetCampaignGroupRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignGroupRequest) ProtoMessage()    {}
+func (*GetCampaignGroupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_service_c6f1b213514585b6, []int{0}
+}
+func (m *GetCampaignGroupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignGroupRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignGroupRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignGroupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignGroupRequest.Merge(dst, src)
+}
+func (m *GetCampaignGroupRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignGroupRequest.Size(m)
+}
+func (m *GetCampaignGroupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignGroupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignGroupRequest proto.InternalMessageInfo
+
+func (m *GetCampaignGroupRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignGroupService.MutateCampaignGroups][google.ads.googleads.v0.services.CampaignGroupService.MutateCampaignGroups].
+type MutateCampaignGroupsRequest struct {
+	// The ID of the customer whose campaign groups are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual campaign groups.
+	Operations           []*CampaignGroupOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *MutateCampaignGroupsRequest) Reset()         { *m = MutateCampaignGroupsRequest{} }
+func (m *MutateCampaignGroupsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignGroupsRequest) ProtoMessage()    {}
+func (*MutateCampaignGroupsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_service_c6f1b213514585b6, []int{1}
+}
+func (m *MutateCampaignGroupsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignGroupsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignGroupsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignGroupsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignGroupsRequest.Merge(dst, src)
+}
+func (m *MutateCampaignGroupsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignGroupsRequest.Size(m)
+}
+func (m *MutateCampaignGroupsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignGroupsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignGroupsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignGroupsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignGroupsRequest) GetOperations() []*CampaignGroupOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a campaign group.
+type CampaignGroupOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignGroupOperation_Create
+	//	*CampaignGroupOperation_Update
+	//	*CampaignGroupOperation_Remove
+	Operation            isCampaignGroupOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *CampaignGroupOperation) Reset()         { *m = CampaignGroupOperation{} }
+func (m *CampaignGroupOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignGroupOperation) ProtoMessage()    {}
+func (*CampaignGroupOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_service_c6f1b213514585b6, []int{2}
+}
+func (m *CampaignGroupOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignGroupOperation.Unmarshal(m, b)
+}
+func (m *CampaignGroupOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignGroupOperation.Marshal(b, m, deterministic)
+}
+func (dst *CampaignGroupOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignGroupOperation.Merge(dst, src)
+}
+func (m *CampaignGroupOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignGroupOperation.Size(m)
+}
+func (m *CampaignGroupOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignGroupOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignGroupOperation proto.InternalMessageInfo
+
+func (m *CampaignGroupOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignGroupOperation_Operation interface {
+	isCampaignGroupOperation_Operation()
+}
+
+type CampaignGroupOperation_Create struct {
+	Create *resources.CampaignGroup `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignGroupOperation_Update struct {
+	Update *resources.CampaignGroup `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignGroupOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignGroupOperation_Create) isCampaignGroupOperation_Operation() {}
+
+func (*CampaignGroupOperation_Update) isCampaignGroupOperation_Operation() {}
+
+func (*CampaignGroupOperation_Remove) isCampaignGroupOperation_Operation() {}
+
+func (m *CampaignGroupOperation) GetOperation() isCampaignGroupOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignGroupOperation) GetCreate() *resources.CampaignGroup {
+	if x, ok := m.GetOperation().(*CampaignGroupOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignGroupOperation) GetUpdate() *resources.CampaignGroup {
+	if x, ok := m.GetOperation().(*CampaignGroupOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignGroupOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignGroupOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignGroupOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignGroupOperation_OneofMarshaler, _CampaignGroupOperation_OneofUnmarshaler, _CampaignGroupOperation_OneofSizer, []interface{}{
+		(*CampaignGroupOperation_Create)(nil),
+		(*CampaignGroupOperation_Update)(nil),
+		(*CampaignGroupOperation_Remove)(nil),
+	}
+}
+
+func _CampaignGroupOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignGroupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignGroupOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CampaignGroupOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *CampaignGroupOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CampaignGroupOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignGroupOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignGroupOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignGroup)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignGroupOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignGroup)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignGroupOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CampaignGroupOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignGroupOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignGroupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignGroupOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignGroupOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignGroupOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for campaign group mutate.
+type MutateCampaignGroupsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCampaignGroupResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateCampaignGroupsResponse) Reset()         { *m = MutateCampaignGroupsResponse{} }
+func (m *MutateCampaignGroupsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignGroupsResponse) ProtoMessage()    {}
+func (*MutateCampaignGroupsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_service_c6f1b213514585b6, []int{3}
+}
+func (m *MutateCampaignGroupsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignGroupsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignGroupsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignGroupsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignGroupsResponse.Merge(dst, src)
+}
+func (m *MutateCampaignGroupsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignGroupsResponse.Size(m)
+}
+func (m *MutateCampaignGroupsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignGroupsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignGroupsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignGroupsResponse) GetResults() []*MutateCampaignGroupResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign group mutate.
+type MutateCampaignGroupResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignGroupResult) Reset()         { *m = MutateCampaignGroupResult{} }
+func (m *MutateCampaignGroupResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignGroupResult) ProtoMessage()    {}
+func (*MutateCampaignGroupResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_group_service_c6f1b213514585b6, []int{4}
+}
+func (m *MutateCampaignGroupResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignGroupResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignGroupResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignGroupResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignGroupResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignGroupResult.Merge(dst, src)
+}
+func (m *MutateCampaignGroupResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignGroupResult.Size(m)
+}
+func (m *MutateCampaignGroupResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignGroupResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignGroupResult proto.InternalMessageInfo
+
+func (m *MutateCampaignGroupResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignGroupRequest)(nil), "google.ads.googleads.v0.services.GetCampaignGroupRequest")
+	proto.RegisterType((*MutateCampaignGroupsRequest)(nil), "google.ads.googleads.v0.services.MutateCampaignGroupsRequest")
+	proto.RegisterType((*CampaignGroupOperation)(nil), "google.ads.googleads.v0.services.CampaignGroupOperation")
+	proto.RegisterType((*MutateCampaignGroupsResponse)(nil), "google.ads.googleads.v0.services.MutateCampaignGroupsResponse")
+	proto.RegisterType((*MutateCampaignGroupResult)(nil), "google.ads.googleads.v0.services.MutateCampaignGroupResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignGroupServiceClient is the client API for CampaignGroupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignGroupServiceClient interface {
+	// Returns the requested campaign group in full detail.
+	GetCampaignGroup(ctx context.Context, in *GetCampaignGroupRequest, opts ...grpc.CallOption) (*resources.CampaignGroup, error)
+	// Creates, updates, or removes campaign groups. Operation statuses are
+	// returned.
+	MutateCampaignGroups(ctx context.Context, in *MutateCampaignGroupsRequest, opts ...grpc.CallOption) (*MutateCampaignGroupsResponse, error)
+}
+
+type campaignGroupServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignGroupServiceClient(cc *grpc.ClientConn) CampaignGroupServiceClient {
+	return &campaignGroupServiceClient{cc}
+}
+
+func (c *campaignGroupServiceClient) GetCampaignGroup(ctx context.Context, in *GetCampaignGroupRequest, opts ...grpc.CallOption) (*resources.CampaignGroup, error) {
+	out := new(resources.CampaignGroup)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignGroupService/GetCampaignGroup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignGroupServiceClient) MutateCampaignGroups(ctx context.Context, in *MutateCampaignGroupsRequest, opts ...grpc.CallOption) (*MutateCampaignGroupsResponse, error) {
+	out := new(MutateCampaignGroupsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignGroupService/MutateCampaignGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignGroupServiceServer is the server API for CampaignGroupService service.
+type CampaignGroupServiceServer interface {
+	// Returns the requested campaign group in full detail.
+	GetCampaignGroup(context.Context, *GetCampaignGroupRequest) (*resources.CampaignGroup, error)
+	// Creates, updates, or removes campaign groups. Operation statuses are
+	// returned.
+	MutateCampaignGroups(context.Context, *MutateCampaignGroupsRequest) (*MutateCampaignGroupsResponse, error)
+}
+
+func RegisterCampaignGroupServiceServer(s *grpc.Server, srv CampaignGroupServiceServer) {
+	s.RegisterService(&_CampaignGroupService_serviceDesc, srv)
+}
+
+func _CampaignGroupService_GetCampaignGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignGroupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignGroupServiceServer).GetCampaignGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignGroupService/GetCampaignGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignGroupServiceServer).GetCampaignGroup(ctx, req.(*GetCampaignGroupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignGroupService_MutateCampaignGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignGroupsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignGroupServiceServer).MutateCampaignGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignGroupService/MutateCampaignGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignGroupServiceServer).MutateCampaignGroups(ctx, req.(*MutateCampaignGroupsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignGroupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignGroupService",
+	HandlerType: (*CampaignGroupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignGroup",
+			Handler:    _CampaignGroupService_GetCampaignGroup_Handler,
+		},
+		{
+			MethodName: "MutateCampaignGroups",
+			Handler:    _CampaignGroupService_MutateCampaignGroups_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_group_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_group_service.proto", fileDescriptor_campaign_group_service_c6f1b213514585b6)
+}
+
+var fileDescriptor_campaign_group_service_c6f1b213514585b6 = []byte{
+	// 597 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x41, 0x8b, 0xd3, 0x40,
+	0x14, 0xc7, 0x4d, 0x2a, 0x2b, 0xfb, 0xa2, 0x20, 0xc3, 0xa2, 0xd9, 0xba, 0x60, 0x89, 0x1e, 0x4a,
+	0x0f, 0x49, 0xe8, 0x82, 0xd4, 0x2d, 0x2d, 0xb6, 0x82, 0x5d, 0x85, 0xd5, 0x25, 0xe2, 0x22, 0x52,
+	0x28, 0xb3, 0xcd, 0x6c, 0x08, 0xdb, 0x64, 0xe2, 0xcc, 0xa4, 0x97, 0x65, 0x2f, 0x7e, 0x05, 0x3d,
+	0x78, 0xf6, 0xb8, 0xdf, 0xc0, 0xaf, 0xe0, 0x55, 0x3c, 0x78, 0xf7, 0x83, 0xc8, 0x64, 0x32, 0x75,
+	0xbb, 0xb6, 0x54, 0x7b, 0x7b, 0x49, 0xde, 0xfb, 0xbd, 0xf7, 0xfe, 0xef, 0xbd, 0x40, 0x27, 0xa2,
+	0x34, 0x9a, 0x10, 0x0f, 0x87, 0xdc, 0x53, 0xa6, 0xb4, 0xa6, 0xbe, 0xc7, 0x09, 0x9b, 0xc6, 0x63,
+	0xc2, 0xbd, 0x31, 0x4e, 0x32, 0x1c, 0x47, 0xe9, 0x28, 0x62, 0x34, 0xcf, 0x46, 0xe5, 0x7b, 0x37,
+	0x63, 0x54, 0x50, 0x54, 0x53, 0x31, 0x2e, 0x0e, 0xb9, 0x3b, 0x0b, 0x77, 0xa7, 0xbe, 0xab, 0xc3,
+	0xab, 0x8f, 0x96, 0x25, 0x60, 0x84, 0xd3, 0x9c, 0xfd, 0x9d, 0x41, 0x91, 0xab, 0x3b, 0x3a, 0x2e,
+	0x8b, 0x3d, 0x9c, 0xa6, 0x54, 0x60, 0x11, 0xd3, 0x94, 0x97, 0x5f, 0xcb, 0xbc, 0x5e, 0xf1, 0x74,
+	0x9c, 0x9f, 0x78, 0x27, 0x31, 0x99, 0x84, 0xa3, 0x04, 0xf3, 0x53, 0xe5, 0xe1, 0x74, 0xe1, 0xee,
+	0x80, 0x88, 0xa7, 0x25, 0x7a, 0x20, 0xc9, 0x01, 0x79, 0x9f, 0x13, 0x2e, 0xd0, 0x03, 0xb8, 0xa5,
+	0x93, 0x8f, 0x52, 0x9c, 0x10, 0xdb, 0xa8, 0x19, 0xf5, 0xcd, 0xe0, 0xa6, 0x7e, 0xf9, 0x12, 0x27,
+	0xc4, 0xf9, 0x6c, 0xc0, 0xbd, 0x83, 0x5c, 0x60, 0x41, 0xe6, 0x18, 0x5c, 0x43, 0xee, 0x83, 0x35,
+	0xce, 0xb9, 0xa0, 0x09, 0x61, 0xa3, 0x38, 0x2c, 0x11, 0xa0, 0x5f, 0x3d, 0x0f, 0xd1, 0x5b, 0x00,
+	0x9a, 0x11, 0xa6, 0xca, 0xb6, 0xcd, 0x5a, 0xa5, 0x6e, 0x35, 0x5b, 0xee, 0x2a, 0xbd, 0xdc, 0xb9,
+	0x6c, 0xaf, 0x34, 0x20, 0xb8, 0xc4, 0x72, 0x3e, 0x99, 0x70, 0x67, 0xb1, 0x1b, 0x6a, 0x83, 0x95,
+	0x67, 0x21, 0x16, 0xa4, 0x90, 0xc2, 0xbe, 0x5e, 0x33, 0xea, 0x56, 0xb3, 0xaa, 0xb3, 0x6a, 0xb5,
+	0xdc, 0x67, 0x52, 0xad, 0x03, 0xcc, 0x4f, 0x03, 0x50, 0xee, 0xd2, 0x46, 0x2f, 0x60, 0x63, 0xcc,
+	0x08, 0x16, 0x4a, 0x10, 0xab, 0xe9, 0x2f, 0xad, 0x76, 0x36, 0xbb, 0xf9, 0x72, 0xf7, 0xaf, 0x05,
+	0x25, 0x41, 0xb2, 0x14, 0xd9, 0x36, 0xd7, 0x67, 0x29, 0x02, 0xb2, 0x61, 0x83, 0x91, 0x84, 0x4e,
+	0x89, 0x5d, 0x91, 0x2a, 0xcb, 0x2f, 0xea, 0xb9, 0x6f, 0xc1, 0xe6, 0x4c, 0x17, 0x27, 0x87, 0x9d,
+	0xc5, 0x03, 0xe3, 0x19, 0x4d, 0x39, 0x41, 0x6f, 0xe0, 0x06, 0x23, 0x3c, 0x9f, 0x08, 0x3d, 0x8d,
+	0xf6, 0xea, 0x69, 0x2c, 0x00, 0x06, 0x05, 0x23, 0xd0, 0x2c, 0xe7, 0x09, 0x6c, 0x2f, 0xf5, 0xfa,
+	0xa7, 0x55, 0x6b, 0x5e, 0x54, 0x60, 0x6b, 0x2e, 0xf8, 0xb5, 0x4a, 0x8f, 0xbe, 0x1a, 0x70, 0xfb,
+	0xea, 0x12, 0xa3, 0xc7, 0xab, 0xab, 0x5e, 0xb2, 0xf8, 0xd5, 0xff, 0x1e, 0x82, 0xd3, 0xfa, 0xf0,
+	0xfd, 0xd7, 0x47, 0xb3, 0x89, 0x7c, 0x79, 0xb1, 0x67, 0x73, 0xad, 0x74, 0xf4, 0xae, 0x73, 0xaf,
+	0x31, 0x3b, 0x61, 0x25, 0xb9, 0xd7, 0x38, 0x47, 0x3f, 0x0c, 0xd8, 0x5a, 0x34, 0x0e, 0xd4, 0x59,
+	0x4b, 0x75, 0x7d, 0x77, 0xd5, 0xee, 0xba, 0xe1, 0x6a, 0x0b, 0x9c, 0x6e, 0xd1, 0x51, 0xcb, 0xd9,
+	0x95, 0x1d, 0xfd, 0x69, 0xe1, 0xec, 0xd2, 0x31, 0x77, 0x1a, 0xe7, 0x57, 0x1a, 0xda, 0x4b, 0x0a,
+	0xe4, 0x9e, 0xd1, 0xe8, 0xff, 0x34, 0xe0, 0xe1, 0x98, 0x26, 0x2b, 0xab, 0xe8, 0x6f, 0x2f, 0x1a,
+	0xe9, 0xa1, 0xbc, 0xc0, 0x43, 0xe3, 0xdd, 0x7e, 0x19, 0x1e, 0xd1, 0x09, 0x4e, 0x23, 0x97, 0xb2,
+	0xc8, 0x8b, 0x48, 0x5a, 0xdc, 0xa7, 0xfe, 0x4b, 0x66, 0x31, 0x5f, 0xfe, 0x57, 0x6e, 0x6b, 0xe3,
+	0x8b, 0x59, 0x19, 0xf4, 0x7a, 0x17, 0x66, 0x6d, 0xa0, 0x80, 0xbd, 0x90, 0xbb, 0xca, 0x94, 0xd6,
+	0x91, 0xef, 0x96, 0x89, 0xf9, 0x37, 0xed, 0x32, 0xec, 0x85, 0x7c, 0x38, 0x73, 0x19, 0x1e, 0xf9,
+	0x43, 0xed, 0x72, 0xbc, 0x51, 0x14, 0xb0, 0xfb, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x61, 0x8d, 0x4c,
+	0x3f, 0x15, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3a7c0fde87195a3eee056fb81f447175d16c6ef0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_service.pb.go
@@ -0,0 +1,544 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignService.GetCampaign][google.ads.googleads.v0.services.CampaignService.GetCampaign].
+type GetCampaignRequest struct {
+	// The resource name of the campaign to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignRequest) Reset()         { *m = GetCampaignRequest{} }
+func (m *GetCampaignRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignRequest) ProtoMessage()    {}
+func (*GetCampaignRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_service_d0bd40746319e2f2, []int{0}
+}
+func (m *GetCampaignRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignRequest.Merge(dst, src)
+}
+func (m *GetCampaignRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignRequest.Size(m)
+}
+func (m *GetCampaignRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignRequest proto.InternalMessageInfo
+
+func (m *GetCampaignRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignService.MutateCampaigns][google.ads.googleads.v0.services.CampaignService.MutateCampaigns].
+type MutateCampaignsRequest struct {
+	// The ID of the customer whose campaigns are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual campaigns.
+	Operations           []*CampaignOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MutateCampaignsRequest) Reset()         { *m = MutateCampaignsRequest{} }
+func (m *MutateCampaignsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignsRequest) ProtoMessage()    {}
+func (*MutateCampaignsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_service_d0bd40746319e2f2, []int{1}
+}
+func (m *MutateCampaignsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignsRequest.Merge(dst, src)
+}
+func (m *MutateCampaignsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignsRequest.Size(m)
+}
+func (m *MutateCampaignsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignsRequest) GetOperations() []*CampaignOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a campaign.
+type CampaignOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignOperation_Create
+	//	*CampaignOperation_Update
+	//	*CampaignOperation_Remove
+	Operation            isCampaignOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *CampaignOperation) Reset()         { *m = CampaignOperation{} }
+func (m *CampaignOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignOperation) ProtoMessage()    {}
+func (*CampaignOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_service_d0bd40746319e2f2, []int{2}
+}
+func (m *CampaignOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignOperation.Unmarshal(m, b)
+}
+func (m *CampaignOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignOperation.Marshal(b, m, deterministic)
+}
+func (dst *CampaignOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignOperation.Merge(dst, src)
+}
+func (m *CampaignOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignOperation.Size(m)
+}
+func (m *CampaignOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignOperation proto.InternalMessageInfo
+
+func (m *CampaignOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCampaignOperation_Operation interface {
+	isCampaignOperation_Operation()
+}
+
+type CampaignOperation_Create struct {
+	Create *resources.Campaign `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignOperation_Update struct {
+	Update *resources.Campaign `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CampaignOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignOperation_Create) isCampaignOperation_Operation() {}
+
+func (*CampaignOperation_Update) isCampaignOperation_Operation() {}
+
+func (*CampaignOperation_Remove) isCampaignOperation_Operation() {}
+
+func (m *CampaignOperation) GetOperation() isCampaignOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignOperation) GetCreate() *resources.Campaign {
+	if x, ok := m.GetOperation().(*CampaignOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignOperation) GetUpdate() *resources.Campaign {
+	if x, ok := m.GetOperation().(*CampaignOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CampaignOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignOperation_OneofMarshaler, _CampaignOperation_OneofUnmarshaler, _CampaignOperation_OneofSizer, []interface{}{
+		(*CampaignOperation_Create)(nil),
+		(*CampaignOperation_Update)(nil),
+		(*CampaignOperation_Remove)(nil),
+	}
+}
+
+func _CampaignOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CampaignOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *CampaignOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CampaignOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.Campaign)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.Campaign)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CampaignOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for campaign mutate.
+type MutateCampaignsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCampaignResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateCampaignsResponse) Reset()         { *m = MutateCampaignsResponse{} }
+func (m *MutateCampaignsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignsResponse) ProtoMessage()    {}
+func (*MutateCampaignsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_service_d0bd40746319e2f2, []int{3}
+}
+func (m *MutateCampaignsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignsResponse.Merge(dst, src)
+}
+func (m *MutateCampaignsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignsResponse.Size(m)
+}
+func (m *MutateCampaignsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignsResponse) GetResults() []*MutateCampaignResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign mutate.
+type MutateCampaignResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignResult) Reset()         { *m = MutateCampaignResult{} }
+func (m *MutateCampaignResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignResult) ProtoMessage()    {}
+func (*MutateCampaignResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_service_d0bd40746319e2f2, []int{4}
+}
+func (m *MutateCampaignResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignResult.Merge(dst, src)
+}
+func (m *MutateCampaignResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignResult.Size(m)
+}
+func (m *MutateCampaignResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignResult proto.InternalMessageInfo
+
+func (m *MutateCampaignResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignRequest)(nil), "google.ads.googleads.v0.services.GetCampaignRequest")
+	proto.RegisterType((*MutateCampaignsRequest)(nil), "google.ads.googleads.v0.services.MutateCampaignsRequest")
+	proto.RegisterType((*CampaignOperation)(nil), "google.ads.googleads.v0.services.CampaignOperation")
+	proto.RegisterType((*MutateCampaignsResponse)(nil), "google.ads.googleads.v0.services.MutateCampaignsResponse")
+	proto.RegisterType((*MutateCampaignResult)(nil), "google.ads.googleads.v0.services.MutateCampaignResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignServiceClient is the client API for CampaignService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignServiceClient interface {
+	// Returns the requested campaign in full detail.
+	GetCampaign(ctx context.Context, in *GetCampaignRequest, opts ...grpc.CallOption) (*resources.Campaign, error)
+	// Creates, updates, or removes campaigns. Operation statuses are returned.
+	MutateCampaigns(ctx context.Context, in *MutateCampaignsRequest, opts ...grpc.CallOption) (*MutateCampaignsResponse, error)
+}
+
+type campaignServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignServiceClient(cc *grpc.ClientConn) CampaignServiceClient {
+	return &campaignServiceClient{cc}
+}
+
+func (c *campaignServiceClient) GetCampaign(ctx context.Context, in *GetCampaignRequest, opts ...grpc.CallOption) (*resources.Campaign, error) {
+	out := new(resources.Campaign)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignService/GetCampaign", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignServiceClient) MutateCampaigns(ctx context.Context, in *MutateCampaignsRequest, opts ...grpc.CallOption) (*MutateCampaignsResponse, error) {
+	out := new(MutateCampaignsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignService/MutateCampaigns", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignServiceServer is the server API for CampaignService service.
+type CampaignServiceServer interface {
+	// Returns the requested campaign in full detail.
+	GetCampaign(context.Context, *GetCampaignRequest) (*resources.Campaign, error)
+	// Creates, updates, or removes campaigns. Operation statuses are returned.
+	MutateCampaigns(context.Context, *MutateCampaignsRequest) (*MutateCampaignsResponse, error)
+}
+
+func RegisterCampaignServiceServer(s *grpc.Server, srv CampaignServiceServer) {
+	s.RegisterService(&_CampaignService_serviceDesc, srv)
+}
+
+func _CampaignService_GetCampaign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignServiceServer).GetCampaign(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignService/GetCampaign",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignServiceServer).GetCampaign(ctx, req.(*GetCampaignRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignService_MutateCampaigns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignServiceServer).MutateCampaigns(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignService/MutateCampaigns",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignServiceServer).MutateCampaigns(ctx, req.(*MutateCampaignsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignService",
+	HandlerType: (*CampaignServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaign",
+			Handler:    _CampaignService_GetCampaign_Handler,
+		},
+		{
+			MethodName: "MutateCampaigns",
+			Handler:    _CampaignService_MutateCampaigns_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_service.proto", fileDescriptor_campaign_service_d0bd40746319e2f2)
+}
+
+var fileDescriptor_campaign_service_d0bd40746319e2f2 = []byte{
+	// 585 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x8b, 0xd3, 0x40,
+	0x14, 0x36, 0xa9, 0x54, 0xf6, 0x45, 0x59, 0x1c, 0x16, 0x0d, 0x45, 0xb0, 0x44, 0x0f, 0xa5, 0x8b,
+	0x93, 0xd2, 0x8a, 0xda, 0x2d, 0x7b, 0x68, 0x45, 0xbb, 0x1e, 0x56, 0x4b, 0x16, 0xf6, 0x20, 0x85,
+	0x32, 0x9b, 0xcc, 0x86, 0xd0, 0x26, 0x13, 0x33, 0x93, 0x5e, 0x96, 0xbd, 0x08, 0x5e, 0xbd, 0xf8,
+	0x0f, 0x04, 0x2f, 0xfe, 0x0b, 0xaf, 0x5e, 0xf5, 0x27, 0xf8, 0x37, 0x04, 0x49, 0x26, 0x93, 0xed,
+	0x6e, 0x2d, 0xdd, 0xdd, 0xdb, 0xcb, 0xe4, 0xfb, 0xbe, 0xf7, 0xe5, 0x9b, 0xf7, 0x02, 0xcf, 0x7d,
+	0xc6, 0xfc, 0x19, 0xb5, 0x89, 0xc7, 0x6d, 0x59, 0x66, 0xd5, 0xbc, 0x65, 0x73, 0x9a, 0xcc, 0x03,
+	0x97, 0x72, 0xdb, 0x25, 0x61, 0x4c, 0x02, 0x3f, 0x9a, 0x14, 0x27, 0x38, 0x4e, 0x98, 0x60, 0xa8,
+	0x2e, 0xd1, 0x98, 0x78, 0x1c, 0x97, 0x44, 0x3c, 0x6f, 0x61, 0x45, 0xac, 0xb5, 0x56, 0x49, 0x27,
+	0x94, 0xb3, 0x34, 0x59, 0xd4, 0x96, 0x9a, 0xb5, 0x07, 0x8a, 0x11, 0x07, 0x36, 0x89, 0x22, 0x26,
+	0x88, 0x08, 0x58, 0xc4, 0x8b, 0xb7, 0x45, 0x47, 0x3b, 0x7f, 0x3a, 0x4a, 0x8f, 0xed, 0xe3, 0x80,
+	0xce, 0xbc, 0x49, 0x48, 0xf8, 0x54, 0x22, 0xac, 0x2e, 0xa0, 0x21, 0x15, 0x2f, 0x0b, 0x51, 0x87,
+	0x7e, 0x48, 0x29, 0x17, 0xe8, 0x11, 0xdc, 0x51, 0x1d, 0x27, 0x11, 0x09, 0xa9, 0xa9, 0xd5, 0xb5,
+	0xc6, 0x86, 0x73, 0x5b, 0x1d, 0xbe, 0x25, 0x21, 0xb5, 0x3e, 0x6b, 0x70, 0x6f, 0x3f, 0x15, 0x44,
+	0x50, 0x45, 0xe7, 0x8a, 0xff, 0x10, 0x0c, 0x37, 0xe5, 0x82, 0x85, 0x34, 0x99, 0x04, 0x5e, 0xc1,
+	0x06, 0x75, 0xf4, 0xc6, 0x43, 0x07, 0x00, 0x2c, 0xa6, 0x89, 0x34, 0x6b, 0xea, 0xf5, 0x4a, 0xc3,
+	0x68, 0x77, 0xf0, 0xba, 0x7c, 0xb0, 0x6a, 0xf4, 0x4e, 0x71, 0x9d, 0x05, 0x19, 0xeb, 0x93, 0x0e,
+	0x77, 0x97, 0x10, 0xa8, 0x07, 0x46, 0x1a, 0x7b, 0x44, 0xd0, 0xfc, 0xb3, 0xcd, 0x9b, 0x75, 0xad,
+	0x61, 0xb4, 0x6b, 0xaa, 0x97, 0x4a, 0x06, 0xbf, 0xce, 0x92, 0xd9, 0x27, 0x7c, 0xea, 0x80, 0x84,
+	0x67, 0x35, 0x7a, 0x05, 0x55, 0x37, 0xa1, 0x44, 0xc8, 0x04, 0x8c, 0xf6, 0xf6, 0x4a, 0x8f, 0xe5,
+	0x0d, 0x95, 0x26, 0xf7, 0x6e, 0x38, 0x05, 0x39, 0x93, 0x91, 0xa2, 0xa6, 0x7e, 0x2d, 0x19, 0x49,
+	0x46, 0x26, 0x54, 0x13, 0x1a, 0xb2, 0x39, 0x35, 0x2b, 0x59, 0xa2, 0xd9, 0x1b, 0xf9, 0x3c, 0x30,
+	0x60, 0xa3, 0x0c, 0xc2, 0x9a, 0xc2, 0xfd, 0xa5, 0x7b, 0xe1, 0x31, 0x8b, 0x38, 0x45, 0x23, 0xb8,
+	0x95, 0x50, 0x9e, 0xce, 0x84, 0x0a, 0xfd, 0xd9, 0xfa, 0xd0, 0xcf, 0x6b, 0x39, 0x39, 0xdd, 0x51,
+	0x32, 0x56, 0x0f, 0xb6, 0xfe, 0x07, 0xb8, 0xd4, 0x08, 0xb5, 0xff, 0xea, 0xb0, 0xa9, 0x78, 0x07,
+	0xb2, 0x1f, 0xfa, 0xa6, 0x81, 0xb1, 0x30, 0x92, 0xe8, 0xe9, 0x7a, 0x87, 0xcb, 0x13, 0x5c, 0xbb,
+	0x4a, 0xc2, 0x56, 0xe7, 0xe3, 0xaf, 0x3f, 0x5f, 0xf4, 0x27, 0x68, 0x3b, 0x5b, 0xb5, 0x93, 0x73,
+	0xb6, 0x77, 0xd5, 0xd0, 0x72, 0xbb, 0x59, 0xee, 0x1e, 0xb7, 0x9b, 0xa7, 0xe8, 0x87, 0x06, 0x9b,
+	0x17, 0x62, 0x46, 0x2f, 0xae, 0x9a, 0xa6, 0xda, 0x98, 0x5a, 0xf7, 0x1a, 0x4c, 0x79, 0xa7, 0x56,
+	0x37, 0x77, 0xdf, 0xb1, 0x70, 0xe6, 0xfe, 0xcc, 0xee, 0xc9, 0xc2, 0x06, 0xee, 0x36, 0x4f, 0xcf,
+	0xcc, 0xef, 0x84, 0xb9, 0xd0, 0x8e, 0xd6, 0x1c, 0xfc, 0xd6, 0xe0, 0xb1, 0xcb, 0xc2, 0xb5, 0xbd,
+	0x07, 0x5b, 0x17, 0x6e, 0x69, 0x94, 0xad, 0xcd, 0x48, 0x7b, 0xbf, 0x57, 0x30, 0x7d, 0x36, 0x23,
+	0x91, 0x8f, 0x59, 0xe2, 0xdb, 0x3e, 0x8d, 0xf2, 0xa5, 0x52, 0x3f, 0xb0, 0x38, 0xe0, 0xab, 0x7f,
+	0x95, 0x3d, 0x55, 0x7c, 0xd5, 0x2b, 0xc3, 0x7e, 0xff, 0xbb, 0x5e, 0x1f, 0x4a, 0xc1, 0xbe, 0xc7,
+	0xb1, 0x2c, 0xb3, 0xea, 0xb0, 0x85, 0x8b, 0xc6, 0xfc, 0xa7, 0x82, 0x8c, 0xfb, 0x1e, 0x1f, 0x97,
+	0x90, 0xf1, 0x61, 0x6b, 0xac, 0x20, 0x47, 0xd5, 0xdc, 0x40, 0xe7, 0x5f, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x2c, 0x6a, 0xa9, 0xd9, 0xaa, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/campaign_shared_set_service.pb.go b/googleapis/ads/googleads/v0/services/campaign_shared_set_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..cdab53cb09b8156e45f4ed0070e41d3ffc9a3975
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/campaign_shared_set_service.pb.go
@@ -0,0 +1,498 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/campaign_shared_set_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CampaignSharedSetService.GetCampaignSharedSet][google.ads.googleads.v0.services.CampaignSharedSetService.GetCampaignSharedSet].
+type GetCampaignSharedSetRequest struct {
+	// The resource name of the campaign shared set to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCampaignSharedSetRequest) Reset()         { *m = GetCampaignSharedSetRequest{} }
+func (m *GetCampaignSharedSetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCampaignSharedSetRequest) ProtoMessage()    {}
+func (*GetCampaignSharedSetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_service_e990dcd14e355acc, []int{0}
+}
+func (m *GetCampaignSharedSetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCampaignSharedSetRequest.Unmarshal(m, b)
+}
+func (m *GetCampaignSharedSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCampaignSharedSetRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCampaignSharedSetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCampaignSharedSetRequest.Merge(dst, src)
+}
+func (m *GetCampaignSharedSetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCampaignSharedSetRequest.Size(m)
+}
+func (m *GetCampaignSharedSetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCampaignSharedSetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCampaignSharedSetRequest proto.InternalMessageInfo
+
+func (m *GetCampaignSharedSetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CampaignSharedSetService.MutateCampaignSharedSets][google.ads.googleads.v0.services.CampaignSharedSetService.MutateCampaignSharedSets].
+type MutateCampaignSharedSetsRequest struct {
+	// The ID of the customer whose campaign shared sets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual campaign shared sets.
+	Operations           []*CampaignSharedSetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *MutateCampaignSharedSetsRequest) Reset()         { *m = MutateCampaignSharedSetsRequest{} }
+func (m *MutateCampaignSharedSetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignSharedSetsRequest) ProtoMessage()    {}
+func (*MutateCampaignSharedSetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_service_e990dcd14e355acc, []int{1}
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignSharedSetsRequest.Unmarshal(m, b)
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignSharedSetsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignSharedSetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignSharedSetsRequest.Merge(dst, src)
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignSharedSetsRequest.Size(m)
+}
+func (m *MutateCampaignSharedSetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignSharedSetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignSharedSetsRequest proto.InternalMessageInfo
+
+func (m *MutateCampaignSharedSetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCampaignSharedSetsRequest) GetOperations() []*CampaignSharedSetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, remove) on an campaign shared set.
+type CampaignSharedSetOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CampaignSharedSetOperation_Create
+	//	*CampaignSharedSetOperation_Remove
+	Operation            isCampaignSharedSetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *CampaignSharedSetOperation) Reset()         { *m = CampaignSharedSetOperation{} }
+func (m *CampaignSharedSetOperation) String() string { return proto.CompactTextString(m) }
+func (*CampaignSharedSetOperation) ProtoMessage()    {}
+func (*CampaignSharedSetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_service_e990dcd14e355acc, []int{2}
+}
+func (m *CampaignSharedSetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CampaignSharedSetOperation.Unmarshal(m, b)
+}
+func (m *CampaignSharedSetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CampaignSharedSetOperation.Marshal(b, m, deterministic)
+}
+func (dst *CampaignSharedSetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CampaignSharedSetOperation.Merge(dst, src)
+}
+func (m *CampaignSharedSetOperation) XXX_Size() int {
+	return xxx_messageInfo_CampaignSharedSetOperation.Size(m)
+}
+func (m *CampaignSharedSetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CampaignSharedSetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CampaignSharedSetOperation proto.InternalMessageInfo
+
+type isCampaignSharedSetOperation_Operation interface {
+	isCampaignSharedSetOperation_Operation()
+}
+
+type CampaignSharedSetOperation_Create struct {
+	Create *resources.CampaignSharedSet `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CampaignSharedSetOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CampaignSharedSetOperation_Create) isCampaignSharedSetOperation_Operation() {}
+
+func (*CampaignSharedSetOperation_Remove) isCampaignSharedSetOperation_Operation() {}
+
+func (m *CampaignSharedSetOperation) GetOperation() isCampaignSharedSetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CampaignSharedSetOperation) GetCreate() *resources.CampaignSharedSet {
+	if x, ok := m.GetOperation().(*CampaignSharedSetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CampaignSharedSetOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CampaignSharedSetOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CampaignSharedSetOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CampaignSharedSetOperation_OneofMarshaler, _CampaignSharedSetOperation_OneofUnmarshaler, _CampaignSharedSetOperation_OneofSizer, []interface{}{
+		(*CampaignSharedSetOperation_Create)(nil),
+		(*CampaignSharedSetOperation_Remove)(nil),
+	}
+}
+
+func _CampaignSharedSetOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CampaignSharedSetOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignSharedSetOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CampaignSharedSetOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CampaignSharedSetOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CampaignSharedSetOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CampaignSharedSetOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CampaignSharedSet)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CampaignSharedSetOperation_Create{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CampaignSharedSetOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CampaignSharedSetOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CampaignSharedSetOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CampaignSharedSetOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CampaignSharedSetOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a campaign shared set mutate.
+type MutateCampaignSharedSetsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCampaignSharedSetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *MutateCampaignSharedSetsResponse) Reset()         { *m = MutateCampaignSharedSetsResponse{} }
+func (m *MutateCampaignSharedSetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignSharedSetsResponse) ProtoMessage()    {}
+func (*MutateCampaignSharedSetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_service_e990dcd14e355acc, []int{3}
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignSharedSetsResponse.Unmarshal(m, b)
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignSharedSetsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignSharedSetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignSharedSetsResponse.Merge(dst, src)
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignSharedSetsResponse.Size(m)
+}
+func (m *MutateCampaignSharedSetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignSharedSetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignSharedSetsResponse proto.InternalMessageInfo
+
+func (m *MutateCampaignSharedSetsResponse) GetResults() []*MutateCampaignSharedSetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the campaign shared set mutate.
+type MutateCampaignSharedSetResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCampaignSharedSetResult) Reset()         { *m = MutateCampaignSharedSetResult{} }
+func (m *MutateCampaignSharedSetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCampaignSharedSetResult) ProtoMessage()    {}
+func (*MutateCampaignSharedSetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_campaign_shared_set_service_e990dcd14e355acc, []int{4}
+}
+func (m *MutateCampaignSharedSetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCampaignSharedSetResult.Unmarshal(m, b)
+}
+func (m *MutateCampaignSharedSetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCampaignSharedSetResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCampaignSharedSetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCampaignSharedSetResult.Merge(dst, src)
+}
+func (m *MutateCampaignSharedSetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCampaignSharedSetResult.Size(m)
+}
+func (m *MutateCampaignSharedSetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCampaignSharedSetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCampaignSharedSetResult proto.InternalMessageInfo
+
+func (m *MutateCampaignSharedSetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCampaignSharedSetRequest)(nil), "google.ads.googleads.v0.services.GetCampaignSharedSetRequest")
+	proto.RegisterType((*MutateCampaignSharedSetsRequest)(nil), "google.ads.googleads.v0.services.MutateCampaignSharedSetsRequest")
+	proto.RegisterType((*CampaignSharedSetOperation)(nil), "google.ads.googleads.v0.services.CampaignSharedSetOperation")
+	proto.RegisterType((*MutateCampaignSharedSetsResponse)(nil), "google.ads.googleads.v0.services.MutateCampaignSharedSetsResponse")
+	proto.RegisterType((*MutateCampaignSharedSetResult)(nil), "google.ads.googleads.v0.services.MutateCampaignSharedSetResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CampaignSharedSetServiceClient is the client API for CampaignSharedSetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CampaignSharedSetServiceClient interface {
+	// Returns the requested campaign shared set in full detail.
+	GetCampaignSharedSet(ctx context.Context, in *GetCampaignSharedSetRequest, opts ...grpc.CallOption) (*resources.CampaignSharedSet, error)
+	// Creates or removes campaign shared sets. Operation statuses are returned.
+	MutateCampaignSharedSets(ctx context.Context, in *MutateCampaignSharedSetsRequest, opts ...grpc.CallOption) (*MutateCampaignSharedSetsResponse, error)
+}
+
+type campaignSharedSetServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCampaignSharedSetServiceClient(cc *grpc.ClientConn) CampaignSharedSetServiceClient {
+	return &campaignSharedSetServiceClient{cc}
+}
+
+func (c *campaignSharedSetServiceClient) GetCampaignSharedSet(ctx context.Context, in *GetCampaignSharedSetRequest, opts ...grpc.CallOption) (*resources.CampaignSharedSet, error) {
+	out := new(resources.CampaignSharedSet)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignSharedSetService/GetCampaignSharedSet", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *campaignSharedSetServiceClient) MutateCampaignSharedSets(ctx context.Context, in *MutateCampaignSharedSetsRequest, opts ...grpc.CallOption) (*MutateCampaignSharedSetsResponse, error) {
+	out := new(MutateCampaignSharedSetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CampaignSharedSetService/MutateCampaignSharedSets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CampaignSharedSetServiceServer is the server API for CampaignSharedSetService service.
+type CampaignSharedSetServiceServer interface {
+	// Returns the requested campaign shared set in full detail.
+	GetCampaignSharedSet(context.Context, *GetCampaignSharedSetRequest) (*resources.CampaignSharedSet, error)
+	// Creates or removes campaign shared sets. Operation statuses are returned.
+	MutateCampaignSharedSets(context.Context, *MutateCampaignSharedSetsRequest) (*MutateCampaignSharedSetsResponse, error)
+}
+
+func RegisterCampaignSharedSetServiceServer(s *grpc.Server, srv CampaignSharedSetServiceServer) {
+	s.RegisterService(&_CampaignSharedSetService_serviceDesc, srv)
+}
+
+func _CampaignSharedSetService_GetCampaignSharedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCampaignSharedSetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignSharedSetServiceServer).GetCampaignSharedSet(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignSharedSetService/GetCampaignSharedSet",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignSharedSetServiceServer).GetCampaignSharedSet(ctx, req.(*GetCampaignSharedSetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CampaignSharedSetService_MutateCampaignSharedSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCampaignSharedSetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CampaignSharedSetServiceServer).MutateCampaignSharedSets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CampaignSharedSetService/MutateCampaignSharedSets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CampaignSharedSetServiceServer).MutateCampaignSharedSets(ctx, req.(*MutateCampaignSharedSetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CampaignSharedSetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CampaignSharedSetService",
+	HandlerType: (*CampaignSharedSetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCampaignSharedSet",
+			Handler:    _CampaignSharedSetService_GetCampaignSharedSet_Handler,
+		},
+		{
+			MethodName: "MutateCampaignSharedSets",
+			Handler:    _CampaignSharedSetService_MutateCampaignSharedSets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/campaign_shared_set_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/campaign_shared_set_service.proto", fileDescriptor_campaign_shared_set_service_e990dcd14e355acc)
+}
+
+var fileDescriptor_campaign_shared_set_service_e990dcd14e355acc = []byte{
+	// 542 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x41, 0x6b, 0xd4, 0x40,
+	0x14, 0xc7, 0xcd, 0x2e, 0x54, 0x3a, 0xab, 0x97, 0xc1, 0x43, 0x58, 0x2d, 0x5d, 0xa2, 0x87, 0xb2,
+	0x87, 0xc9, 0xb2, 0x16, 0x85, 0x76, 0x17, 0x49, 0x14, 0xb6, 0x1e, 0xac, 0x25, 0x0b, 0x05, 0x25,
+	0x10, 0xc6, 0xe4, 0x11, 0x03, 0x9b, 0x4c, 0x9c, 0x99, 0xec, 0xa5, 0xec, 0xc5, 0xaf, 0xd0, 0x2f,
+	0x20, 0x1e, 0xfd, 0x26, 0x7a, 0xf0, 0xe2, 0xd9, 0x9b, 0x7e, 0x0f, 0x49, 0x26, 0x93, 0x56, 0xb6,
+	0xe9, 0x4a, 0xbd, 0xbd, 0x64, 0xde, 0xfc, 0xde, 0xfb, 0xbf, 0x37, 0xef, 0x21, 0x37, 0x66, 0x2c,
+	0x5e, 0x80, 0x4d, 0x23, 0x61, 0x2b, 0xb3, 0xb4, 0x96, 0x23, 0x5b, 0x00, 0x5f, 0x26, 0x21, 0x08,
+	0x3b, 0xa4, 0x69, 0x4e, 0x93, 0x38, 0x0b, 0xc4, 0x7b, 0xca, 0x21, 0x0a, 0x04, 0xc8, 0xa0, 0x3e,
+	0x24, 0x39, 0x67, 0x92, 0xe1, 0x81, 0xba, 0x48, 0x68, 0x24, 0x48, 0xc3, 0x20, 0xcb, 0x11, 0xd1,
+	0x8c, 0xfe, 0x61, 0x5b, 0x14, 0x0e, 0x82, 0x15, 0xbc, 0x25, 0x8c, 0xc2, 0xf7, 0x1f, 0xe8, 0xcb,
+	0x79, 0x62, 0xd3, 0x2c, 0x63, 0x92, 0xca, 0x84, 0x65, 0x42, 0x9d, 0x5a, 0x2e, 0xba, 0x3f, 0x03,
+	0xf9, 0xbc, 0xbe, 0x3d, 0xaf, 0x2e, 0xcf, 0x41, 0x7a, 0xf0, 0xa1, 0x00, 0x21, 0xf1, 0x43, 0x74,
+	0x57, 0xc7, 0x08, 0x32, 0x9a, 0x82, 0x69, 0x0c, 0x8c, 0xbd, 0x6d, 0xef, 0x8e, 0xfe, 0x79, 0x4c,
+	0x53, 0xb0, 0x3e, 0x19, 0x68, 0xf7, 0x55, 0x21, 0xa9, 0x84, 0x35, 0x8e, 0xd0, 0xa0, 0x5d, 0xd4,
+	0x0b, 0x0b, 0x21, 0x59, 0x0a, 0x3c, 0x48, 0xa2, 0x1a, 0x83, 0xf4, 0xaf, 0x97, 0x11, 0xf6, 0x11,
+	0x62, 0x39, 0x70, 0x95, 0x9c, 0xd9, 0x19, 0x74, 0xf7, 0x7a, 0xe3, 0x09, 0xd9, 0x54, 0x1a, 0xb2,
+	0x16, 0xf1, 0xb5, 0x86, 0x78, 0x97, 0x78, 0xd6, 0xb9, 0x81, 0xfa, 0xed, 0xae, 0xf8, 0x18, 0x6d,
+	0x85, 0x1c, 0xa8, 0x54, 0xfa, 0x7a, 0xe3, 0xfd, 0xd6, 0xc0, 0x4d, 0xc5, 0xd7, 0x23, 0x1f, 0xdd,
+	0xf2, 0x6a, 0x0a, 0x36, 0xd1, 0x16, 0x87, 0x94, 0x2d, 0xc1, 0xec, 0x96, 0x42, 0xcb, 0x13, 0xf5,
+	0xed, 0xf6, 0xd0, 0x76, 0x93, 0x96, 0xb5, 0x42, 0x83, 0xf6, 0xba, 0x89, 0x9c, 0x65, 0x02, 0xf0,
+	0x1b, 0x74, 0x9b, 0x83, 0x28, 0x16, 0x52, 0x17, 0xe5, 0xd9, 0xe6, 0xa2, 0xb4, 0x40, 0xbd, 0x8a,
+	0xe3, 0x69, 0x9e, 0xf5, 0x02, 0xed, 0x5c, 0xeb, 0xf9, 0x4f, 0xdd, 0x1f, 0x7f, 0xef, 0x22, 0x73,
+	0x0d, 0x30, 0x57, 0xa9, 0xe0, 0xaf, 0x06, 0xba, 0x77, 0xd5, 0xfb, 0xc2, 0xd3, 0xcd, 0x2a, 0xae,
+	0x79, 0x97, 0xfd, 0x1b, 0x35, 0xc8, 0x9a, 0x7c, 0xfc, 0xf1, 0xeb, 0xbc, 0xf3, 0x04, 0xef, 0x97,
+	0xb3, 0x73, 0xf6, 0x97, 0xb4, 0xa9, 0x7e, 0x8a, 0xc2, 0x1e, 0x36, 0xc3, 0x74, 0xd1, 0x0e, 0x7b,
+	0xb8, 0xc2, 0xbf, 0x0d, 0x64, 0xb6, 0xb5, 0x0b, 0x3b, 0x37, 0xee, 0x8a, 0x1e, 0x91, 0xbe, 0xfb,
+	0x3f, 0x08, 0xf5, 0x5a, 0x2c, 0xb7, 0x52, 0x38, 0xb1, 0x9e, 0x96, 0x0a, 0x2f, 0x24, 0x9d, 0x5d,
+	0x9a, 0xbd, 0xe9, 0x70, 0x75, 0x85, 0xc0, 0x83, 0xb4, 0x42, 0x1f, 0x18, 0x43, 0xf7, 0xa7, 0x81,
+	0x1e, 0x85, 0x2c, 0xdd, 0x98, 0x8d, 0xbb, 0xd3, 0xd6, 0xf6, 0x93, 0x72, 0xb5, 0x9c, 0x18, 0x6f,
+	0x8f, 0x6a, 0x44, 0xcc, 0x16, 0x34, 0x8b, 0x09, 0xe3, 0xb1, 0x1d, 0x43, 0x56, 0x2d, 0x1e, 0xbd,
+	0xc7, 0xf2, 0x44, 0xb4, 0x2f, 0xcf, 0x43, 0x6d, 0x7c, 0xee, 0x74, 0x67, 0x8e, 0xf3, 0xa5, 0x33,
+	0x98, 0x29, 0xa0, 0x13, 0x09, 0xa2, 0xcc, 0xd2, 0x3a, 0x1d, 0x91, 0x3a, 0xb0, 0xf8, 0xa6, 0x5d,
+	0x7c, 0x27, 0x12, 0x7e, 0xe3, 0xe2, 0x9f, 0x8e, 0x7c, 0xed, 0xf2, 0x6e, 0xab, 0x4a, 0xe0, 0xf1,
+	0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0x01, 0x00, 0x4c, 0xbc, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/carrier_constant_service.pb.go b/googleapis/ads/googleads/v0/services/carrier_constant_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..376074019b430eab018a784752eabe254c6319a7
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/carrier_constant_service.pb.go
@@ -0,0 +1,173 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/carrier_constant_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CarrierConstantService.GetCarrierConstant][google.ads.googleads.v0.services.CarrierConstantService.GetCarrierConstant].
+type GetCarrierConstantRequest struct {
+	// Resource name of the carrier constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCarrierConstantRequest) Reset()         { *m = GetCarrierConstantRequest{} }
+func (m *GetCarrierConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCarrierConstantRequest) ProtoMessage()    {}
+func (*GetCarrierConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_carrier_constant_service_6ffed320151f7dbf, []int{0}
+}
+func (m *GetCarrierConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCarrierConstantRequest.Unmarshal(m, b)
+}
+func (m *GetCarrierConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCarrierConstantRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCarrierConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCarrierConstantRequest.Merge(dst, src)
+}
+func (m *GetCarrierConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCarrierConstantRequest.Size(m)
+}
+func (m *GetCarrierConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCarrierConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCarrierConstantRequest proto.InternalMessageInfo
+
+func (m *GetCarrierConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCarrierConstantRequest)(nil), "google.ads.googleads.v0.services.GetCarrierConstantRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CarrierConstantServiceClient is the client API for CarrierConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CarrierConstantServiceClient interface {
+	// Returns the requested carrier constant in full detail.
+	GetCarrierConstant(ctx context.Context, in *GetCarrierConstantRequest, opts ...grpc.CallOption) (*resources.CarrierConstant, error)
+}
+
+type carrierConstantServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCarrierConstantServiceClient(cc *grpc.ClientConn) CarrierConstantServiceClient {
+	return &carrierConstantServiceClient{cc}
+}
+
+func (c *carrierConstantServiceClient) GetCarrierConstant(ctx context.Context, in *GetCarrierConstantRequest, opts ...grpc.CallOption) (*resources.CarrierConstant, error) {
+	out := new(resources.CarrierConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CarrierConstantService/GetCarrierConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CarrierConstantServiceServer is the server API for CarrierConstantService service.
+type CarrierConstantServiceServer interface {
+	// Returns the requested carrier constant in full detail.
+	GetCarrierConstant(context.Context, *GetCarrierConstantRequest) (*resources.CarrierConstant, error)
+}
+
+func RegisterCarrierConstantServiceServer(s *grpc.Server, srv CarrierConstantServiceServer) {
+	s.RegisterService(&_CarrierConstantService_serviceDesc, srv)
+}
+
+func _CarrierConstantService_GetCarrierConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCarrierConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CarrierConstantServiceServer).GetCarrierConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CarrierConstantService/GetCarrierConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CarrierConstantServiceServer).GetCarrierConstant(ctx, req.(*GetCarrierConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CarrierConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CarrierConstantService",
+	HandlerType: (*CarrierConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCarrierConstant",
+			Handler:    _CarrierConstantService_GetCarrierConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/carrier_constant_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/carrier_constant_service.proto", fileDescriptor_carrier_constant_service_6ffed320151f7dbf)
+}
+
+var fileDescriptor_carrier_constant_service_6ffed320151f7dbf = []byte{
+	// 335 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xe4, 0xc4, 0xa2, 0xa2, 0xcc, 0xd4, 0xa2, 0xf8, 0xe4,
+	0xfc, 0xbc, 0xe2, 0x92, 0xc4, 0xbc, 0x92, 0x78, 0xa8, 0x8c, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe,
+	0x90, 0x02, 0x44, 0x97, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0xdc, 0x00, 0xbd, 0x32, 0x03, 0x3d, 0x98,
+	0x01, 0x52, 0x16, 0xb8, 0xac, 0x28, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0xc2, 0x66, 0x07, 0xc4, 0x6c,
+	0x29, 0x19, 0x98, 0xce, 0x82, 0x4c, 0xfd, 0xc4, 0xbc, 0xbc, 0xfc, 0x92, 0xc4, 0x92, 0xcc, 0xfc,
+	0xbc, 0x62, 0x88, 0xac, 0x92, 0x03, 0x97, 0xa4, 0x7b, 0x6a, 0x89, 0x33, 0x44, 0xab, 0x33, 0x54,
+	0x67, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x90, 0x32, 0x17, 0x2f, 0xcc, 0xf8, 0xf8, 0xbc,
+	0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x1e, 0x98, 0xa0, 0x5f, 0x62, 0x6e,
+	0xaa, 0xd1, 0x05, 0x46, 0x2e, 0x31, 0x34, 0xfd, 0xc1, 0x10, 0x57, 0x0b, 0x6d, 0x65, 0xe4, 0x12,
+	0xc2, 0x34, 0x5d, 0xc8, 0x5a, 0x8f, 0x90, 0x77, 0xf5, 0x70, 0xba, 0x49, 0xca, 0x08, 0xa7, 0x66,
+	0x78, 0x48, 0xe8, 0xa1, 0x69, 0x55, 0xd2, 0x6b, 0xba, 0xfc, 0x64, 0x32, 0x93, 0x86, 0x90, 0x1a,
+	0x28, 0xc0, 0xaa, 0x51, 0xbc, 0x64, 0x9b, 0x8c, 0xaa, 0xb6, 0x58, 0x5f, 0xab, 0xd6, 0xe9, 0x36,
+	0x23, 0x97, 0x4a, 0x72, 0x7e, 0x2e, 0x41, 0x67, 0x3a, 0x49, 0x63, 0xf7, 0x78, 0x00, 0x28, 0x68,
+	0x03, 0x18, 0xa3, 0x3c, 0xa0, 0x06, 0xa4, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0xe5, 0x17, 0xa5,
+	0xeb, 0xa7, 0xa7, 0xe6, 0x81, 0x03, 0x1e, 0x16, 0x89, 0x05, 0x99, 0xc5, 0xb8, 0x93, 0x8d, 0x35,
+	0x8c, 0xb1, 0x88, 0x89, 0xd9, 0xdd, 0xd1, 0x71, 0x15, 0x93, 0x82, 0x3b, 0xc4, 0x40, 0xc7, 0x94,
+	0x62, 0x3d, 0x08, 0x13, 0xc4, 0x0a, 0x33, 0xd0, 0x83, 0x5a, 0x5c, 0x7c, 0x0a, 0xa6, 0x24, 0xc6,
+	0x31, 0xa5, 0x38, 0x06, 0xae, 0x24, 0x26, 0xcc, 0x20, 0x06, 0xa6, 0x24, 0x89, 0x0d, 0xec, 0x00,
+	0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x47, 0xb5, 0xfd, 0xa7, 0xb6, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/change_status_service.pb.go b/googleapis/ads/googleads/v0/services/change_status_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..494adc5e40c461a5908bc7f277235944c1f78dea
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/change_status_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/change_status_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for '[ChangeStatusService.GetChangeStatus][google.ads.googleads.v0.services.ChangeStatusService.GetChangeStatus]'.
+type GetChangeStatusRequest struct {
+	// The resource name of the change status to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetChangeStatusRequest) Reset()         { *m = GetChangeStatusRequest{} }
+func (m *GetChangeStatusRequest) String() string { return proto.CompactTextString(m) }
+func (*GetChangeStatusRequest) ProtoMessage()    {}
+func (*GetChangeStatusRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_change_status_service_2dac1c94f57649f6, []int{0}
+}
+func (m *GetChangeStatusRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetChangeStatusRequest.Unmarshal(m, b)
+}
+func (m *GetChangeStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetChangeStatusRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetChangeStatusRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetChangeStatusRequest.Merge(dst, src)
+}
+func (m *GetChangeStatusRequest) XXX_Size() int {
+	return xxx_messageInfo_GetChangeStatusRequest.Size(m)
+}
+func (m *GetChangeStatusRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetChangeStatusRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetChangeStatusRequest proto.InternalMessageInfo
+
+func (m *GetChangeStatusRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetChangeStatusRequest)(nil), "google.ads.googleads.v0.services.GetChangeStatusRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// ChangeStatusServiceClient is the client API for ChangeStatusService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ChangeStatusServiceClient interface {
+	// Returns the requested change status in full detail.
+	GetChangeStatus(ctx context.Context, in *GetChangeStatusRequest, opts ...grpc.CallOption) (*resources.ChangeStatus, error)
+}
+
+type changeStatusServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewChangeStatusServiceClient(cc *grpc.ClientConn) ChangeStatusServiceClient {
+	return &changeStatusServiceClient{cc}
+}
+
+func (c *changeStatusServiceClient) GetChangeStatus(ctx context.Context, in *GetChangeStatusRequest, opts ...grpc.CallOption) (*resources.ChangeStatus, error) {
+	out := new(resources.ChangeStatus)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.ChangeStatusService/GetChangeStatus", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ChangeStatusServiceServer is the server API for ChangeStatusService service.
+type ChangeStatusServiceServer interface {
+	// Returns the requested change status in full detail.
+	GetChangeStatus(context.Context, *GetChangeStatusRequest) (*resources.ChangeStatus, error)
+}
+
+func RegisterChangeStatusServiceServer(s *grpc.Server, srv ChangeStatusServiceServer) {
+	s.RegisterService(&_ChangeStatusService_serviceDesc, srv)
+}
+
+func _ChangeStatusService_GetChangeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetChangeStatusRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ChangeStatusServiceServer).GetChangeStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.ChangeStatusService/GetChangeStatus",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ChangeStatusServiceServer).GetChangeStatus(ctx, req.(*GetChangeStatusRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ChangeStatusService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.ChangeStatusService",
+	HandlerType: (*ChangeStatusServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetChangeStatus",
+			Handler:    _ChangeStatusService_GetChangeStatus_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/change_status_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/change_status_service.proto", fileDescriptor_change_status_service_2dac1c94f57649f6)
+}
+
+var fileDescriptor_change_status_service_2dac1c94f57649f6 = []byte{
+	// 341 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xe4, 0x8c, 0xc4, 0xbc, 0xf4, 0xd4, 0xf8, 0xe2, 0x92,
+	0xc4, 0x92, 0xd2, 0xe2, 0x78, 0xa8, 0xb0, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02, 0x44,
+	0x8b, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xb7, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xb7, 0x94, 0x29,
+	0x2e, 0xf3, 0x8b, 0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0x30, 0x2c, 0x80, 0x18, 0x2c, 0x25, 0x03, 0xd3,
+	0x56, 0x90, 0xa9, 0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x07, 0x95, 0x55,
+	0xb2, 0xe5, 0x12, 0x73, 0x4f, 0x2d, 0x71, 0x06, 0xeb, 0x0b, 0x06, 0x6b, 0x0b, 0x4a, 0x2d, 0x2c,
+	0x4d, 0x2d, 0x2e, 0x11, 0x52, 0xe6, 0xe2, 0x85, 0x19, 0x1c, 0x9f, 0x97, 0x98, 0x9b, 0x2a, 0xc1,
+	0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x03, 0x13, 0xf4, 0x4b, 0xcc, 0x4d, 0x35, 0x3a, 0xc3, 0xc8,
+	0x25, 0x8c, 0xac, 0x39, 0x18, 0xe2, 0x58, 0xa1, 0x2d, 0x8c, 0x5c, 0xfc, 0x68, 0xe6, 0x0a, 0x59,
+	0xe8, 0x11, 0xf2, 0xa2, 0x1e, 0x76, 0xa7, 0x48, 0xe9, 0xe3, 0xd4, 0x09, 0xf7, 0xba, 0x1e, 0xb2,
+	0x3e, 0x25, 0xb3, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x19, 0x08, 0xe9, 0x81, 0x82, 0xa7, 0x1a, 0xc5,
+	0x1b, 0xb6, 0xc9, 0xa5, 0xc5, 0x25, 0xf9, 0xb9, 0xa9, 0x45, 0xc5, 0xfa, 0x5a, 0xd0, 0xf0, 0x82,
+	0x68, 0xd2, 0xd7, 0xaa, 0x75, 0xba, 0xc1, 0xc8, 0xa5, 0x92, 0x9c, 0x9f, 0x4b, 0xd0, 0xa1, 0x4e,
+	0x12, 0x58, 0x3c, 0x1d, 0x00, 0x0a, 0xd0, 0x00, 0xc6, 0x28, 0x0f, 0xa8, 0xee, 0xf4, 0xfc, 0x9c,
+	0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0x70, 0x70, 0xc3, 0xe2, 0xad,
+	0x20, 0xb3, 0x18, 0x77, 0x32, 0xb1, 0x86, 0x31, 0x16, 0x31, 0x31, 0xbb, 0x3b, 0x3a, 0xae, 0x62,
+	0x52, 0x70, 0x87, 0x18, 0xe8, 0x98, 0x52, 0xac, 0x07, 0x61, 0x82, 0x58, 0x61, 0x06, 0x7a, 0x50,
+	0x8b, 0x8b, 0x4f, 0xc1, 0x94, 0xc4, 0x38, 0xa6, 0x14, 0xc7, 0xc0, 0x95, 0xc4, 0x84, 0x19, 0xc4,
+	0xc0, 0x94, 0x24, 0xb1, 0x81, 0x1d, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x60, 0xd2,
+	0x4a, 0xa6, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/conversion_action_service.pb.go b/googleapis/ads/googleads/v0/services/conversion_action_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..141e3a2f224bebe580ea057ff719d7c1bf09a8e1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/conversion_action_service.pb.go
@@ -0,0 +1,547 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/conversion_action_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [ConversionActionService.GetConversionAction].
+type GetConversionActionRequest struct {
+	// The resource name of the conversion action to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetConversionActionRequest) Reset()         { *m = GetConversionActionRequest{} }
+func (m *GetConversionActionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetConversionActionRequest) ProtoMessage()    {}
+func (*GetConversionActionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_service_1d30046f4e1a0823, []int{0}
+}
+func (m *GetConversionActionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetConversionActionRequest.Unmarshal(m, b)
+}
+func (m *GetConversionActionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetConversionActionRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetConversionActionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetConversionActionRequest.Merge(dst, src)
+}
+func (m *GetConversionActionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetConversionActionRequest.Size(m)
+}
+func (m *GetConversionActionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetConversionActionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConversionActionRequest proto.InternalMessageInfo
+
+func (m *GetConversionActionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [ConversionActionService.MutateConversionActions].
+type MutateConversionActionsRequest struct {
+	// The ID of the customer whose conversion actions are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual conversion actions.
+	Operations           []*ConversionActionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *MutateConversionActionsRequest) Reset()         { *m = MutateConversionActionsRequest{} }
+func (m *MutateConversionActionsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateConversionActionsRequest) ProtoMessage()    {}
+func (*MutateConversionActionsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_service_1d30046f4e1a0823, []int{1}
+}
+func (m *MutateConversionActionsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateConversionActionsRequest.Unmarshal(m, b)
+}
+func (m *MutateConversionActionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateConversionActionsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateConversionActionsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateConversionActionsRequest.Merge(dst, src)
+}
+func (m *MutateConversionActionsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateConversionActionsRequest.Size(m)
+}
+func (m *MutateConversionActionsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateConversionActionsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateConversionActionsRequest proto.InternalMessageInfo
+
+func (m *MutateConversionActionsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateConversionActionsRequest) GetOperations() []*ConversionActionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a conversion action.
+type ConversionActionOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*ConversionActionOperation_Create
+	//	*ConversionActionOperation_Update
+	//	*ConversionActionOperation_Remove
+	Operation            isConversionActionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *ConversionActionOperation) Reset()         { *m = ConversionActionOperation{} }
+func (m *ConversionActionOperation) String() string { return proto.CompactTextString(m) }
+func (*ConversionActionOperation) ProtoMessage()    {}
+func (*ConversionActionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_service_1d30046f4e1a0823, []int{2}
+}
+func (m *ConversionActionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConversionActionOperation.Unmarshal(m, b)
+}
+func (m *ConversionActionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConversionActionOperation.Marshal(b, m, deterministic)
+}
+func (dst *ConversionActionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConversionActionOperation.Merge(dst, src)
+}
+func (m *ConversionActionOperation) XXX_Size() int {
+	return xxx_messageInfo_ConversionActionOperation.Size(m)
+}
+func (m *ConversionActionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConversionActionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConversionActionOperation proto.InternalMessageInfo
+
+func (m *ConversionActionOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isConversionActionOperation_Operation interface {
+	isConversionActionOperation_Operation()
+}
+
+type ConversionActionOperation_Create struct {
+	Create *resources.ConversionAction `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type ConversionActionOperation_Update struct {
+	Update *resources.ConversionAction `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type ConversionActionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*ConversionActionOperation_Create) isConversionActionOperation_Operation() {}
+
+func (*ConversionActionOperation_Update) isConversionActionOperation_Operation() {}
+
+func (*ConversionActionOperation_Remove) isConversionActionOperation_Operation() {}
+
+func (m *ConversionActionOperation) GetOperation() isConversionActionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *ConversionActionOperation) GetCreate() *resources.ConversionAction {
+	if x, ok := m.GetOperation().(*ConversionActionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *ConversionActionOperation) GetUpdate() *resources.ConversionAction {
+	if x, ok := m.GetOperation().(*ConversionActionOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *ConversionActionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*ConversionActionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ConversionActionOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ConversionActionOperation_OneofMarshaler, _ConversionActionOperation_OneofUnmarshaler, _ConversionActionOperation_OneofSizer, []interface{}{
+		(*ConversionActionOperation_Create)(nil),
+		(*ConversionActionOperation_Update)(nil),
+		(*ConversionActionOperation_Remove)(nil),
+	}
+}
+
+func _ConversionActionOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ConversionActionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *ConversionActionOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *ConversionActionOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *ConversionActionOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("ConversionActionOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ConversionActionOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ConversionActionOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.ConversionAction)
+		err := b.DecodeMessage(msg)
+		m.Operation = &ConversionActionOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.ConversionAction)
+		err := b.DecodeMessage(msg)
+		m.Operation = &ConversionActionOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &ConversionActionOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ConversionActionOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ConversionActionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *ConversionActionOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ConversionActionOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ConversionActionOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for conversion action mutate.
+type MutateConversionActionsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateConversionActionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateConversionActionsResponse) Reset()         { *m = MutateConversionActionsResponse{} }
+func (m *MutateConversionActionsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateConversionActionsResponse) ProtoMessage()    {}
+func (*MutateConversionActionsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_service_1d30046f4e1a0823, []int{3}
+}
+func (m *MutateConversionActionsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateConversionActionsResponse.Unmarshal(m, b)
+}
+func (m *MutateConversionActionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateConversionActionsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateConversionActionsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateConversionActionsResponse.Merge(dst, src)
+}
+func (m *MutateConversionActionsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateConversionActionsResponse.Size(m)
+}
+func (m *MutateConversionActionsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateConversionActionsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateConversionActionsResponse proto.InternalMessageInfo
+
+func (m *MutateConversionActionsResponse) GetResults() []*MutateConversionActionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the conversion action mutate.
+type MutateConversionActionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateConversionActionResult) Reset()         { *m = MutateConversionActionResult{} }
+func (m *MutateConversionActionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateConversionActionResult) ProtoMessage()    {}
+func (*MutateConversionActionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_conversion_action_service_1d30046f4e1a0823, []int{4}
+}
+func (m *MutateConversionActionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateConversionActionResult.Unmarshal(m, b)
+}
+func (m *MutateConversionActionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateConversionActionResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateConversionActionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateConversionActionResult.Merge(dst, src)
+}
+func (m *MutateConversionActionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateConversionActionResult.Size(m)
+}
+func (m *MutateConversionActionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateConversionActionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateConversionActionResult proto.InternalMessageInfo
+
+func (m *MutateConversionActionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetConversionActionRequest)(nil), "google.ads.googleads.v0.services.GetConversionActionRequest")
+	proto.RegisterType((*MutateConversionActionsRequest)(nil), "google.ads.googleads.v0.services.MutateConversionActionsRequest")
+	proto.RegisterType((*ConversionActionOperation)(nil), "google.ads.googleads.v0.services.ConversionActionOperation")
+	proto.RegisterType((*MutateConversionActionsResponse)(nil), "google.ads.googleads.v0.services.MutateConversionActionsResponse")
+	proto.RegisterType((*MutateConversionActionResult)(nil), "google.ads.googleads.v0.services.MutateConversionActionResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// ConversionActionServiceClient is the client API for ConversionActionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ConversionActionServiceClient interface {
+	// Returns the requested conversion action.
+	GetConversionAction(ctx context.Context, in *GetConversionActionRequest, opts ...grpc.CallOption) (*resources.ConversionAction, error)
+	// Creates, updates or removes conversion actions. Operation statuses are
+	// returned.
+	MutateConversionActions(ctx context.Context, in *MutateConversionActionsRequest, opts ...grpc.CallOption) (*MutateConversionActionsResponse, error)
+}
+
+type conversionActionServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewConversionActionServiceClient(cc *grpc.ClientConn) ConversionActionServiceClient {
+	return &conversionActionServiceClient{cc}
+}
+
+func (c *conversionActionServiceClient) GetConversionAction(ctx context.Context, in *GetConversionActionRequest, opts ...grpc.CallOption) (*resources.ConversionAction, error) {
+	out := new(resources.ConversionAction)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.ConversionActionService/GetConversionAction", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *conversionActionServiceClient) MutateConversionActions(ctx context.Context, in *MutateConversionActionsRequest, opts ...grpc.CallOption) (*MutateConversionActionsResponse, error) {
+	out := new(MutateConversionActionsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.ConversionActionService/MutateConversionActions", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ConversionActionServiceServer is the server API for ConversionActionService service.
+type ConversionActionServiceServer interface {
+	// Returns the requested conversion action.
+	GetConversionAction(context.Context, *GetConversionActionRequest) (*resources.ConversionAction, error)
+	// Creates, updates or removes conversion actions. Operation statuses are
+	// returned.
+	MutateConversionActions(context.Context, *MutateConversionActionsRequest) (*MutateConversionActionsResponse, error)
+}
+
+func RegisterConversionActionServiceServer(s *grpc.Server, srv ConversionActionServiceServer) {
+	s.RegisterService(&_ConversionActionService_serviceDesc, srv)
+}
+
+func _ConversionActionService_GetConversionAction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetConversionActionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConversionActionServiceServer).GetConversionAction(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.ConversionActionService/GetConversionAction",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConversionActionServiceServer).GetConversionAction(ctx, req.(*GetConversionActionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ConversionActionService_MutateConversionActions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateConversionActionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConversionActionServiceServer).MutateConversionActions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.ConversionActionService/MutateConversionActions",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConversionActionServiceServer).MutateConversionActions(ctx, req.(*MutateConversionActionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ConversionActionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.ConversionActionService",
+	HandlerType: (*ConversionActionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetConversionAction",
+			Handler:    _ConversionActionService_GetConversionAction_Handler,
+		},
+		{
+			MethodName: "MutateConversionActions",
+			Handler:    _ConversionActionService_MutateConversionActions_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/conversion_action_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/conversion_action_service.proto", fileDescriptor_conversion_action_service_1d30046f4e1a0823)
+}
+
+var fileDescriptor_conversion_action_service_1d30046f4e1a0823 = []byte{
+	// 595 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xbf, 0x6f, 0xd3, 0x40,
+	0x14, 0xc7, 0xb1, 0x83, 0x82, 0x7a, 0x86, 0xe5, 0x18, 0x6a, 0xac, 0x88, 0x46, 0x86, 0x21, 0xca,
+	0x60, 0x47, 0x89, 0x40, 0xa2, 0xa1, 0xa8, 0x4e, 0x25, 0x52, 0x86, 0x40, 0x65, 0xa4, 0x0a, 0x41,
+	0xa4, 0xe8, 0x6a, 0x5f, 0x2d, 0xab, 0xb1, 0xcf, 0xdc, 0x9d, 0xb3, 0x44, 0x5d, 0xf8, 0x17, 0x98,
+	0x61, 0x60, 0xe4, 0xff, 0xe8, 0xc2, 0xca, 0xca, 0x82, 0xc4, 0x1f, 0x82, 0xce, 0xe7, 0x0b, 0x21,
+	0x8d, 0x09, 0x6a, 0x27, 0x3f, 0xfb, 0xbd, 0xfb, 0xbc, 0x1f, 0xdf, 0x7b, 0x06, 0xfb, 0x11, 0x21,
+	0xd1, 0x14, 0xbb, 0x28, 0x64, 0xae, 0x34, 0x85, 0x35, 0xeb, 0xb8, 0x0c, 0xd3, 0x59, 0x1c, 0x60,
+	0xe6, 0x06, 0x24, 0x9d, 0x61, 0xca, 0x62, 0x92, 0x4e, 0x50, 0xc0, 0xc5, 0xa3, 0x74, 0x39, 0x19,
+	0x25, 0x9c, 0xc0, 0xa6, 0x3c, 0xe6, 0xa0, 0x90, 0x39, 0x0b, 0x82, 0x33, 0xeb, 0x38, 0x8a, 0x60,
+	0x3d, 0xa9, 0xca, 0x41, 0x31, 0x23, 0x39, 0x5d, 0x9b, 0x44, 0xc2, 0xad, 0x86, 0x3a, 0x9a, 0xc5,
+	0x2e, 0x4a, 0x53, 0xc2, 0x91, 0x70, 0xb2, 0xd2, 0x5b, 0xa6, 0x76, 0x8b, 0xb7, 0x93, 0xfc, 0xd4,
+	0x3d, 0x8d, 0xf1, 0x34, 0x9c, 0x24, 0x88, 0x9d, 0xc9, 0x08, 0xdb, 0x03, 0xd6, 0x10, 0xf3, 0x83,
+	0x05, 0xdd, 0x2b, 0xe0, 0x3e, 0x7e, 0x9f, 0x63, 0xc6, 0xe1, 0x03, 0x70, 0x47, 0x95, 0x30, 0x49,
+	0x51, 0x82, 0x4d, 0xad, 0xa9, 0xb5, 0xb6, 0xfc, 0xdb, 0xea, 0xe3, 0x4b, 0x94, 0x60, 0xfb, 0xb3,
+	0x06, 0xee, 0x8f, 0x72, 0x8e, 0x38, 0x5e, 0xc5, 0x30, 0xc5, 0xd9, 0x01, 0x46, 0x90, 0x33, 0x4e,
+	0x12, 0x4c, 0x27, 0x71, 0x58, 0x52, 0x80, 0xfa, 0xf4, 0x22, 0x84, 0xef, 0x00, 0x20, 0x19, 0xa6,
+	0xb2, 0x78, 0x53, 0x6f, 0xd6, 0x5a, 0x46, 0xb7, 0xef, 0x6c, 0x1a, 0x9c, 0xb3, 0x9a, 0xf0, 0x95,
+	0x62, 0xf8, 0x4b, 0x38, 0xfb, 0x93, 0x0e, 0xee, 0x55, 0x46, 0xc2, 0x3e, 0x30, 0xf2, 0x2c, 0x44,
+	0x1c, 0x17, 0x63, 0x31, 0x6f, 0x36, 0xb5, 0x96, 0xd1, 0xb5, 0x54, 0x6e, 0x35, 0x39, 0xe7, 0xb9,
+	0x98, 0xdc, 0x08, 0xb1, 0x33, 0x1f, 0xc8, 0x70, 0x61, 0xc3, 0x11, 0xa8, 0x07, 0x14, 0x23, 0x2e,
+	0x27, 0x63, 0x74, 0x7b, 0x95, 0x35, 0x2f, 0xa4, 0xbc, 0x54, 0xf4, 0xe1, 0x0d, 0xbf, 0x84, 0x08,
+	0x9c, 0x84, 0x9b, 0xfa, 0xb5, 0x70, 0x12, 0x02, 0x4d, 0x50, 0xa7, 0x38, 0x21, 0x33, 0x6c, 0xd6,
+	0xc4, 0xc4, 0x85, 0x47, 0xbe, 0x0f, 0x0c, 0xb0, 0xb5, 0x18, 0x90, 0x3d, 0x07, 0x3b, 0x95, 0xfa,
+	0xb1, 0x8c, 0xa4, 0x0c, 0xc3, 0x37, 0xe0, 0x16, 0xc5, 0x2c, 0x9f, 0x72, 0x25, 0xce, 0xb3, 0xcd,
+	0xe2, 0xac, 0x67, 0xfa, 0x05, 0xc6, 0x57, 0x38, 0xfb, 0x00, 0x34, 0xfe, 0x15, 0xf8, 0x5f, 0x57,
+	0xb0, 0x7b, 0x51, 0x03, 0xdb, 0xab, 0xe7, 0x5f, 0xcb, 0x3a, 0xe0, 0x85, 0x06, 0xee, 0xae, 0xb9,
+	0xe2, 0xf0, 0xe9, 0xe6, 0x0e, 0xaa, 0x37, 0xc3, 0xba, 0x8a, 0x32, 0x76, 0xff, 0xc3, 0xf7, 0x5f,
+	0x1f, 0xf5, 0x47, 0xb0, 0x27, 0x76, 0x7b, 0xfe, 0x57, 0x5b, 0x7b, 0x6a, 0x19, 0x98, 0xdb, 0x5e,
+	0x5a, 0xf6, 0x52, 0x07, 0xb7, 0x7d, 0x0e, 0x7f, 0x6a, 0x60, 0xbb, 0x42, 0x26, 0xb8, 0x7f, 0x55,
+	0x35, 0xd4, 0x86, 0x5a, 0xde, 0x35, 0x08, 0xf2, 0x8e, 0xd8, 0x5e, 0xd1, 0x5d, 0xdf, 0x7e, 0x2c,
+	0xba, 0xfb, 0xd3, 0xce, 0x7c, 0x69, 0xf3, 0xf7, 0xda, 0xe7, 0x97, 0x9b, 0xdb, 0x4d, 0x0a, 0xf0,
+	0xae, 0xd6, 0x1e, 0xfc, 0xd0, 0xc0, 0xc3, 0x80, 0x24, 0x1b, 0x6b, 0x19, 0x34, 0x2a, 0xd4, 0x3e,
+	0x12, 0xeb, 0x7a, 0xa4, 0xbd, 0x3d, 0x2c, 0x09, 0x11, 0x99, 0xa2, 0x34, 0x72, 0x08, 0x8d, 0xdc,
+	0x08, 0xa7, 0xc5, 0x32, 0xab, 0x3f, 0x6c, 0x16, 0xb3, 0xea, 0x9f, 0x7a, 0x5f, 0x19, 0x5f, 0xf4,
+	0xda, 0xd0, 0xf3, 0xbe, 0xea, 0xcd, 0xa1, 0x04, 0x7a, 0x21, 0x73, 0xa4, 0x29, 0xac, 0xe3, 0x8e,
+	0x53, 0x26, 0x66, 0xdf, 0x54, 0xc8, 0xd8, 0x0b, 0xd9, 0x78, 0x11, 0x32, 0x3e, 0xee, 0x8c, 0x55,
+	0xc8, 0x49, 0xbd, 0x28, 0xa0, 0xf7, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xb4, 0xca, 0x03, 0x54,
+	0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/customer_client_link_service.pb.go b/googleapis/ads/googleads/v0/services/customer_client_link_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ddeb6412a903b0fbf98cb393b6f5871cf5de7998
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/customer_client_link_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/customer_client_link_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CustomerClientLinkService.GetCustomerClientLink][google.ads.googleads.v0.services.CustomerClientLinkService.GetCustomerClientLink].
+type GetCustomerClientLinkRequest struct {
+	// The resource name of the customer client link to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerClientLinkRequest) Reset()         { *m = GetCustomerClientLinkRequest{} }
+func (m *GetCustomerClientLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerClientLinkRequest) ProtoMessage()    {}
+func (*GetCustomerClientLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_client_link_service_9bdafa43d925b47f, []int{0}
+}
+func (m *GetCustomerClientLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerClientLinkRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerClientLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerClientLinkRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCustomerClientLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerClientLinkRequest.Merge(dst, src)
+}
+func (m *GetCustomerClientLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerClientLinkRequest.Size(m)
+}
+func (m *GetCustomerClientLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerClientLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerClientLinkRequest proto.InternalMessageInfo
+
+func (m *GetCustomerClientLinkRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerClientLinkRequest)(nil), "google.ads.googleads.v0.services.GetCustomerClientLinkRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CustomerClientLinkServiceClient is the client API for CustomerClientLinkService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerClientLinkServiceClient interface {
+	// Returns the requested CustomerClientLink in full detail.
+	GetCustomerClientLink(ctx context.Context, in *GetCustomerClientLinkRequest, opts ...grpc.CallOption) (*resources.CustomerClientLink, error)
+}
+
+type customerClientLinkServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCustomerClientLinkServiceClient(cc *grpc.ClientConn) CustomerClientLinkServiceClient {
+	return &customerClientLinkServiceClient{cc}
+}
+
+func (c *customerClientLinkServiceClient) GetCustomerClientLink(ctx context.Context, in *GetCustomerClientLinkRequest, opts ...grpc.CallOption) (*resources.CustomerClientLink, error) {
+	out := new(resources.CustomerClientLink)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerClientLinkService/GetCustomerClientLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerClientLinkServiceServer is the server API for CustomerClientLinkService service.
+type CustomerClientLinkServiceServer interface {
+	// Returns the requested CustomerClientLink in full detail.
+	GetCustomerClientLink(context.Context, *GetCustomerClientLinkRequest) (*resources.CustomerClientLink, error)
+}
+
+func RegisterCustomerClientLinkServiceServer(s *grpc.Server, srv CustomerClientLinkServiceServer) {
+	s.RegisterService(&_CustomerClientLinkService_serviceDesc, srv)
+}
+
+func _CustomerClientLinkService_GetCustomerClientLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerClientLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerClientLinkServiceServer).GetCustomerClientLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerClientLinkService/GetCustomerClientLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerClientLinkServiceServer).GetCustomerClientLink(ctx, req.(*GetCustomerClientLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerClientLinkService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CustomerClientLinkService",
+	HandlerType: (*CustomerClientLinkServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerClientLink",
+			Handler:    _CustomerClientLinkService_GetCustomerClientLink_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/customer_client_link_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/customer_client_link_service.proto", fileDescriptor_customer_client_link_service_9bdafa43d925b47f)
+}
+
+var fileDescriptor_customer_client_link_service_9bdafa43d925b47f = []byte{
+	// 349 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xbf, 0x4a, 0xc3, 0x40,
+	0x18, 0x27, 0x15, 0x04, 0x83, 0x2e, 0x01, 0x41, 0x4b, 0x91, 0x52, 0x1d, 0xa4, 0xc3, 0x5d, 0x50,
+	0x8a, 0x83, 0x56, 0x48, 0x33, 0xd4, 0x41, 0xa4, 0x54, 0xe8, 0x20, 0x81, 0x70, 0x26, 0x47, 0x38,
+	0x9a, 0xdc, 0xd5, 0xfb, 0xae, 0x5d, 0xc4, 0xc5, 0x57, 0xf0, 0x0d, 0x1c, 0x7d, 0x14, 0xc1, 0xc9,
+	0xdd, 0xc9, 0xcd, 0x97, 0x90, 0xe4, 0x72, 0x11, 0xa9, 0xb1, 0xdb, 0x8f, 0xdc, 0xf7, 0xfb, 0xf3,
+	0xfd, 0xbe, 0xd8, 0x7e, 0x22, 0x44, 0x92, 0x52, 0x4c, 0x62, 0xc0, 0x1a, 0xe6, 0x68, 0xe1, 0x62,
+	0xa0, 0x72, 0xc1, 0x22, 0x0a, 0x38, 0x9a, 0x83, 0x12, 0x19, 0x95, 0x61, 0x94, 0x32, 0xca, 0x55,
+	0x98, 0x32, 0x3e, 0x0d, 0xcb, 0x57, 0x34, 0x93, 0x42, 0x09, 0xa7, 0xad, 0x99, 0x88, 0xc4, 0x80,
+	0x2a, 0x11, 0xb4, 0x70, 0x91, 0x11, 0x69, 0x9e, 0xd5, 0xd9, 0x48, 0x0a, 0x62, 0x2e, 0xeb, 0x7c,
+	0xb4, 0x7e, 0xb3, 0x65, 0xd8, 0x33, 0x86, 0x09, 0xe7, 0x42, 0x11, 0xc5, 0x04, 0x07, 0xfd, 0xda,
+	0xf1, 0xed, 0xd6, 0x90, 0x2a, 0xbf, 0xa4, 0xfb, 0x05, 0xfb, 0x92, 0xf1, 0xe9, 0x98, 0xde, 0xcd,
+	0x29, 0x28, 0x67, 0xdf, 0xde, 0x32, 0x2e, 0x21, 0x27, 0x19, 0xdd, 0xb1, 0xda, 0xd6, 0xe1, 0xc6,
+	0x78, 0xd3, 0x7c, 0xbc, 0x22, 0x19, 0x3d, 0xfa, 0xb2, 0xec, 0xdd, 0x65, 0x89, 0x6b, 0x9d, 0xdf,
+	0x79, 0xb3, 0xec, 0xed, 0x3f, 0x3d, 0x9c, 0x73, 0xb4, 0x6a, 0x77, 0xf4, 0x5f, 0xb8, 0x66, 0xaf,
+	0x96, 0x5f, 0x35, 0x83, 0x96, 0xd9, 0x9d, 0xfe, 0xe3, 0xfb, 0xe7, 0x53, 0xe3, 0xc4, 0xe9, 0xe5,
+	0x1d, 0xde, 0xff, 0x5a, 0xaf, 0x6f, 0x8a, 0x04, 0xdc, 0xad, 0x4a, 0xfd, 0xa1, 0x02, 0xee, 0x3e,
+	0x0c, 0x3e, 0x2c, 0xfb, 0x20, 0x12, 0xd9, 0xca, 0xec, 0x83, 0xbd, 0xda, 0x4e, 0x46, 0x79, 0xf7,
+	0x23, 0xeb, 0xe6, 0xa2, 0xd4, 0x48, 0x44, 0x4a, 0x78, 0x82, 0x84, 0x4c, 0x70, 0x42, 0x79, 0x71,
+	0x19, 0x73, 0xe9, 0x19, 0x83, 0xfa, 0xff, 0xeb, 0xd4, 0x80, 0xe7, 0xc6, 0xda, 0xd0, 0xf3, 0x5e,
+	0x1a, 0xed, 0xa1, 0x16, 0xf4, 0x62, 0x40, 0x1a, 0xe6, 0x68, 0xe2, 0xa2, 0xd2, 0x18, 0x5e, 0xcd,
+	0x48, 0xe0, 0xc5, 0x10, 0x54, 0x23, 0xc1, 0xc4, 0x0d, 0xcc, 0xc8, 0xed, 0x7a, 0x11, 0xe0, 0xf8,
+	0x3b, 0x00, 0x00, 0xff, 0xff, 0x53, 0x7b, 0xfc, 0x03, 0xdf, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/customer_client_service.pb.go b/googleapis/ads/googleads/v0/services/customer_client_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..0a06830e4bcbe76408498b17be3cf3472a6b74e6
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/customer_client_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/customer_client_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CustomerClientService.GetCustomerClient][google.ads.googleads.v0.services.CustomerClientService.GetCustomerClient].
+type GetCustomerClientRequest struct {
+	// The resource name of the customer client to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerClientRequest) Reset()         { *m = GetCustomerClientRequest{} }
+func (m *GetCustomerClientRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerClientRequest) ProtoMessage()    {}
+func (*GetCustomerClientRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_client_service_528cdd682e78fa39, []int{0}
+}
+func (m *GetCustomerClientRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerClientRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerClientRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerClientRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCustomerClientRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerClientRequest.Merge(dst, src)
+}
+func (m *GetCustomerClientRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerClientRequest.Size(m)
+}
+func (m *GetCustomerClientRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerClientRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerClientRequest proto.InternalMessageInfo
+
+func (m *GetCustomerClientRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerClientRequest)(nil), "google.ads.googleads.v0.services.GetCustomerClientRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CustomerClientServiceClient is the client API for CustomerClientService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerClientServiceClient interface {
+	// Returns the requested customer client in full detail.
+	GetCustomerClient(ctx context.Context, in *GetCustomerClientRequest, opts ...grpc.CallOption) (*resources.CustomerClient, error)
+}
+
+type customerClientServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCustomerClientServiceClient(cc *grpc.ClientConn) CustomerClientServiceClient {
+	return &customerClientServiceClient{cc}
+}
+
+func (c *customerClientServiceClient) GetCustomerClient(ctx context.Context, in *GetCustomerClientRequest, opts ...grpc.CallOption) (*resources.CustomerClient, error) {
+	out := new(resources.CustomerClient)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerClientService/GetCustomerClient", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerClientServiceServer is the server API for CustomerClientService service.
+type CustomerClientServiceServer interface {
+	// Returns the requested customer client in full detail.
+	GetCustomerClient(context.Context, *GetCustomerClientRequest) (*resources.CustomerClient, error)
+}
+
+func RegisterCustomerClientServiceServer(s *grpc.Server, srv CustomerClientServiceServer) {
+	s.RegisterService(&_CustomerClientService_serviceDesc, srv)
+}
+
+func _CustomerClientService_GetCustomerClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerClientRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerClientServiceServer).GetCustomerClient(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerClientService/GetCustomerClient",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerClientServiceServer).GetCustomerClient(ctx, req.(*GetCustomerClientRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerClientService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CustomerClientService",
+	HandlerType: (*CustomerClientServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerClient",
+			Handler:    _CustomerClientService_GetCustomerClient_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/customer_client_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/customer_client_service.proto", fileDescriptor_customer_client_service_528cdd682e78fa39)
+}
+
+var fileDescriptor_customer_client_service_528cdd682e78fa39 = []byte{
+	// 340 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xe4, 0xd2, 0xe2, 0x92, 0xfc, 0xdc, 0xd4, 0xa2, 0xf8,
+	0xe4, 0x9c, 0xcc, 0xd4, 0xbc, 0x92, 0x78, 0xa8, 0x84, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90,
+	0x02, 0x44, 0x93, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xbf, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xbf,
+	0x94, 0x39, 0x2e, 0x1b, 0x8a, 0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0xb0, 0x58, 0x01, 0x31, 0x5a, 0x4a,
+	0x06, 0xa6, 0xb1, 0x20, 0x53, 0x3f, 0x31, 0x2f, 0x2f, 0xbf, 0x24, 0xb1, 0x24, 0x33, 0x3f, 0xaf,
+	0x18, 0x22, 0xab, 0x64, 0xcf, 0x25, 0xe1, 0x9e, 0x5a, 0xe2, 0x0c, 0xd5, 0xe9, 0x0c, 0xd6, 0x18,
+	0x94, 0x5a, 0x58, 0x9a, 0x5a, 0x5c, 0x22, 0xa4, 0xcc, 0xc5, 0x0b, 0x33, 0x3c, 0x3e, 0x2f, 0x31,
+	0x37, 0x55, 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x88, 0x07, 0x26, 0xe8, 0x97, 0x98, 0x9b, 0x6a,
+	0x74, 0x9d, 0x91, 0x4b, 0x14, 0x55, 0x7b, 0x30, 0xc4, 0xc9, 0x42, 0x7b, 0x19, 0xb9, 0x04, 0x31,
+	0xcc, 0x16, 0xb2, 0xd2, 0x23, 0xe4, 0x55, 0x3d, 0x5c, 0x0e, 0x92, 0x32, 0xc4, 0xa9, 0x17, 0x1e,
+	0x08, 0x7a, 0xa8, 0x3a, 0x95, 0x2c, 0x9b, 0x2e, 0x3f, 0x99, 0xcc, 0x64, 0x2c, 0x64, 0x08, 0x0a,
+	0xaa, 0x6a, 0x14, 0xef, 0xd8, 0xc2, 0xc2, 0xab, 0x58, 0x5f, 0x0b, 0x1e, 0x76, 0x10, 0x6d, 0xc5,
+	0xfa, 0x5a, 0xb5, 0x4e, 0xb7, 0x18, 0xb9, 0x54, 0x92, 0xf3, 0x73, 0x09, 0xba, 0xd7, 0x49, 0x0a,
+	0xab, 0xff, 0x03, 0x40, 0xe1, 0x1b, 0xc0, 0x18, 0xe5, 0x01, 0xd5, 0x9f, 0x9e, 0x9f, 0x93, 0x98,
+	0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0x0e, 0x7d, 0x58, 0x44, 0x16, 0x64,
+	0x16, 0xe3, 0x4e, 0x39, 0xd6, 0x30, 0xc6, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c, 0x0a,
+	0xee, 0x10, 0x03, 0x1d, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0x6a, 0x71,
+	0xf1, 0x29, 0x98, 0x92, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x92, 0x98, 0x30, 0x83, 0x18, 0x98,
+	0x92, 0x24, 0x36, 0xb0, 0x03, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd1, 0xbb, 0x69, 0xb1,
+	0xb9, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/customer_feed_service.pb.go b/googleapis/ads/googleads/v0/services/customer_feed_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..86383efaaa877991d6cd0ab9b27d8d1da015ed15
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/customer_feed_service.pb.go
@@ -0,0 +1,546 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/customer_feed_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CustomerFeedService.GetCustomerFeed][google.ads.googleads.v0.services.CustomerFeedService.GetCustomerFeed].
+type GetCustomerFeedRequest struct {
+	// The resource name of the customer feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerFeedRequest) Reset()         { *m = GetCustomerFeedRequest{} }
+func (m *GetCustomerFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerFeedRequest) ProtoMessage()    {}
+func (*GetCustomerFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_service_33fd8a34f2b662ec, []int{0}
+}
+func (m *GetCustomerFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerFeedRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerFeedRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCustomerFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerFeedRequest.Merge(dst, src)
+}
+func (m *GetCustomerFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerFeedRequest.Size(m)
+}
+func (m *GetCustomerFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerFeedRequest proto.InternalMessageInfo
+
+func (m *GetCustomerFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerFeedService.MutateCustomerFeeds][google.ads.googleads.v0.services.CustomerFeedService.MutateCustomerFeeds].
+type MutateCustomerFeedsRequest struct {
+	// The ID of the customer whose customer feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual customer feeds.
+	Operations           []*CustomerFeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateCustomerFeedsRequest) Reset()         { *m = MutateCustomerFeedsRequest{} }
+func (m *MutateCustomerFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerFeedsRequest) ProtoMessage()    {}
+func (*MutateCustomerFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_service_33fd8a34f2b662ec, []int{1}
+}
+func (m *MutateCustomerFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerFeedsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCustomerFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerFeedsRequest.Merge(dst, src)
+}
+func (m *MutateCustomerFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerFeedsRequest.Size(m)
+}
+func (m *MutateCustomerFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerFeedsRequest) GetOperations() []*CustomerFeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a customer feed.
+type CustomerFeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*CustomerFeedOperation_Create
+	//	*CustomerFeedOperation_Update
+	//	*CustomerFeedOperation_Remove
+	Operation            isCustomerFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *CustomerFeedOperation) Reset()         { *m = CustomerFeedOperation{} }
+func (m *CustomerFeedOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerFeedOperation) ProtoMessage()    {}
+func (*CustomerFeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_service_33fd8a34f2b662ec, []int{2}
+}
+func (m *CustomerFeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerFeedOperation.Unmarshal(m, b)
+}
+func (m *CustomerFeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerFeedOperation.Marshal(b, m, deterministic)
+}
+func (dst *CustomerFeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerFeedOperation.Merge(dst, src)
+}
+func (m *CustomerFeedOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerFeedOperation.Size(m)
+}
+func (m *CustomerFeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerFeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerFeedOperation proto.InternalMessageInfo
+
+func (m *CustomerFeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isCustomerFeedOperation_Operation interface {
+	isCustomerFeedOperation_Operation()
+}
+
+type CustomerFeedOperation_Create struct {
+	Create *resources.CustomerFeed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type CustomerFeedOperation_Update struct {
+	Update *resources.CustomerFeed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type CustomerFeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*CustomerFeedOperation_Create) isCustomerFeedOperation_Operation() {}
+
+func (*CustomerFeedOperation_Update) isCustomerFeedOperation_Operation() {}
+
+func (*CustomerFeedOperation_Remove) isCustomerFeedOperation_Operation() {}
+
+func (m *CustomerFeedOperation) GetOperation() isCustomerFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *CustomerFeedOperation) GetCreate() *resources.CustomerFeed {
+	if x, ok := m.GetOperation().(*CustomerFeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *CustomerFeedOperation) GetUpdate() *resources.CustomerFeed {
+	if x, ok := m.GetOperation().(*CustomerFeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *CustomerFeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*CustomerFeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CustomerFeedOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CustomerFeedOperation_OneofMarshaler, _CustomerFeedOperation_OneofUnmarshaler, _CustomerFeedOperation_OneofSizer, []interface{}{
+		(*CustomerFeedOperation_Create)(nil),
+		(*CustomerFeedOperation_Update)(nil),
+		(*CustomerFeedOperation_Remove)(nil),
+	}
+}
+
+func _CustomerFeedOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CustomerFeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CustomerFeedOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *CustomerFeedOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *CustomerFeedOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("CustomerFeedOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CustomerFeedOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CustomerFeedOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CustomerFeed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CustomerFeedOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.CustomerFeed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &CustomerFeedOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &CustomerFeedOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CustomerFeedOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CustomerFeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *CustomerFeedOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CustomerFeedOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CustomerFeedOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a customer feed mutate.
+type MutateCustomerFeedsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateCustomerFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateCustomerFeedsResponse) Reset()         { *m = MutateCustomerFeedsResponse{} }
+func (m *MutateCustomerFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerFeedsResponse) ProtoMessage()    {}
+func (*MutateCustomerFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_service_33fd8a34f2b662ec, []int{3}
+}
+func (m *MutateCustomerFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerFeedsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCustomerFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerFeedsResponse.Merge(dst, src)
+}
+func (m *MutateCustomerFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerFeedsResponse.Size(m)
+}
+func (m *MutateCustomerFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerFeedsResponse) GetResults() []*MutateCustomerFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the customer feed mutate.
+type MutateCustomerFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerFeedResult) Reset()         { *m = MutateCustomerFeedResult{} }
+func (m *MutateCustomerFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerFeedResult) ProtoMessage()    {}
+func (*MutateCustomerFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_feed_service_33fd8a34f2b662ec, []int{4}
+}
+func (m *MutateCustomerFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerFeedResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerFeedResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCustomerFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerFeedResult.Merge(dst, src)
+}
+func (m *MutateCustomerFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerFeedResult.Size(m)
+}
+func (m *MutateCustomerFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerFeedResult proto.InternalMessageInfo
+
+func (m *MutateCustomerFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerFeedRequest)(nil), "google.ads.googleads.v0.services.GetCustomerFeedRequest")
+	proto.RegisterType((*MutateCustomerFeedsRequest)(nil), "google.ads.googleads.v0.services.MutateCustomerFeedsRequest")
+	proto.RegisterType((*CustomerFeedOperation)(nil), "google.ads.googleads.v0.services.CustomerFeedOperation")
+	proto.RegisterType((*MutateCustomerFeedsResponse)(nil), "google.ads.googleads.v0.services.MutateCustomerFeedsResponse")
+	proto.RegisterType((*MutateCustomerFeedResult)(nil), "google.ads.googleads.v0.services.MutateCustomerFeedResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CustomerFeedServiceClient is the client API for CustomerFeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerFeedServiceClient interface {
+	// Returns the requested customer feed in full detail.
+	GetCustomerFeed(ctx context.Context, in *GetCustomerFeedRequest, opts ...grpc.CallOption) (*resources.CustomerFeed, error)
+	// Creates, updates, or removes customer feeds. Operation statuses are
+	// returned.
+	MutateCustomerFeeds(ctx context.Context, in *MutateCustomerFeedsRequest, opts ...grpc.CallOption) (*MutateCustomerFeedsResponse, error)
+}
+
+type customerFeedServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCustomerFeedServiceClient(cc *grpc.ClientConn) CustomerFeedServiceClient {
+	return &customerFeedServiceClient{cc}
+}
+
+func (c *customerFeedServiceClient) GetCustomerFeed(ctx context.Context, in *GetCustomerFeedRequest, opts ...grpc.CallOption) (*resources.CustomerFeed, error) {
+	out := new(resources.CustomerFeed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerFeedService/GetCustomerFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerFeedServiceClient) MutateCustomerFeeds(ctx context.Context, in *MutateCustomerFeedsRequest, opts ...grpc.CallOption) (*MutateCustomerFeedsResponse, error) {
+	out := new(MutateCustomerFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerFeedService/MutateCustomerFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerFeedServiceServer is the server API for CustomerFeedService service.
+type CustomerFeedServiceServer interface {
+	// Returns the requested customer feed in full detail.
+	GetCustomerFeed(context.Context, *GetCustomerFeedRequest) (*resources.CustomerFeed, error)
+	// Creates, updates, or removes customer feeds. Operation statuses are
+	// returned.
+	MutateCustomerFeeds(context.Context, *MutateCustomerFeedsRequest) (*MutateCustomerFeedsResponse, error)
+}
+
+func RegisterCustomerFeedServiceServer(s *grpc.Server, srv CustomerFeedServiceServer) {
+	s.RegisterService(&_CustomerFeedService_serviceDesc, srv)
+}
+
+func _CustomerFeedService_GetCustomerFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerFeedServiceServer).GetCustomerFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerFeedService/GetCustomerFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerFeedServiceServer).GetCustomerFeed(ctx, req.(*GetCustomerFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerFeedService_MutateCustomerFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerFeedServiceServer).MutateCustomerFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerFeedService/MutateCustomerFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerFeedServiceServer).MutateCustomerFeeds(ctx, req.(*MutateCustomerFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerFeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CustomerFeedService",
+	HandlerType: (*CustomerFeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerFeed",
+			Handler:    _CustomerFeedService_GetCustomerFeed_Handler,
+		},
+		{
+			MethodName: "MutateCustomerFeeds",
+			Handler:    _CustomerFeedService_MutateCustomerFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/customer_feed_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/customer_feed_service.proto", fileDescriptor_customer_feed_service_33fd8a34f2b662ec)
+}
+
+var fileDescriptor_customer_feed_service_33fd8a34f2b662ec = []byte{
+	// 591 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x41, 0x8b, 0xd3, 0x40,
+	0x14, 0xc7, 0x4d, 0x2a, 0x2b, 0x3b, 0x51, 0x84, 0x59, 0x94, 0x10, 0x05, 0x4b, 0xf4, 0xb0, 0xf4,
+	0x30, 0x53, 0x2b, 0xb2, 0xd2, 0xdd, 0x22, 0xad, 0xb0, 0xdd, 0x3d, 0xac, 0x2e, 0x51, 0x56, 0x90,
+	0x42, 0x99, 0x6d, 0x5e, 0x43, 0xd8, 0x26, 0x13, 0x33, 0x93, 0x5e, 0x96, 0xbd, 0xf8, 0x0d, 0x44,
+	0xf0, 0xae, 0x47, 0xef, 0x7e, 0x09, 0x6f, 0xe2, 0xc5, 0x0f, 0xe0, 0x07, 0x91, 0x64, 0x32, 0xb1,
+	0x75, 0x5b, 0xaa, 0xbd, 0xbd, 0x4c, 0xde, 0xfb, 0xbd, 0x37, 0xff, 0xf7, 0xde, 0xa0, 0xbd, 0x80,
+	0xf3, 0x60, 0x02, 0x94, 0xf9, 0x82, 0x2a, 0x33, 0xb7, 0xa6, 0x4d, 0x2a, 0x20, 0x9d, 0x86, 0x23,
+	0x10, 0x74, 0x94, 0x09, 0xc9, 0x23, 0x48, 0x87, 0x63, 0x00, 0x7f, 0x58, 0x1e, 0x93, 0x24, 0xe5,
+	0x92, 0xe3, 0xba, 0x0a, 0x21, 0xcc, 0x17, 0xa4, 0x8a, 0x26, 0xd3, 0x26, 0xd1, 0xd1, 0xce, 0xe3,
+	0x65, 0xfc, 0x14, 0x04, 0xcf, 0xd2, 0x4b, 0x09, 0x14, 0xd8, 0xb9, 0xab, 0xc3, 0x92, 0x90, 0xb2,
+	0x38, 0xe6, 0x92, 0xc9, 0x90, 0xc7, 0xa2, 0xfc, 0x5b, 0xa6, 0xa5, 0xc5, 0xd7, 0x69, 0x36, 0xa6,
+	0xe3, 0x10, 0x26, 0xfe, 0x30, 0x62, 0xe2, 0x4c, 0x79, 0xb8, 0x1d, 0x74, 0xbb, 0x0f, 0xf2, 0x59,
+	0x49, 0xde, 0x07, 0xf0, 0x3d, 0x78, 0x9b, 0x81, 0x90, 0xf8, 0x3e, 0xba, 0xa1, 0x53, 0x0f, 0x63,
+	0x16, 0x81, 0x6d, 0xd4, 0x8d, 0xed, 0x4d, 0xef, 0xba, 0x3e, 0x7c, 0xce, 0x22, 0x70, 0x3f, 0x1a,
+	0xc8, 0x39, 0xca, 0x24, 0x93, 0x30, 0x8b, 0x10, 0x9a, 0x71, 0x0f, 0x59, 0x55, 0xd1, 0xa1, 0x5f,
+	0x12, 0x90, 0x3e, 0x3a, 0xf4, 0xf1, 0x6b, 0x84, 0x78, 0x02, 0xa9, 0x2a, 0xda, 0x36, 0xeb, 0xb5,
+	0x6d, 0xab, 0xb5, 0x43, 0x56, 0x89, 0x45, 0x66, 0x93, 0xbd, 0xd0, 0xf1, 0xde, 0x0c, 0xca, 0x7d,
+	0x6f, 0xa2, 0x5b, 0x0b, 0xbd, 0xf0, 0x2e, 0xb2, 0xb2, 0xc4, 0x67, 0x12, 0x0a, 0x19, 0xec, 0xab,
+	0x75, 0x63, 0xdb, 0x6a, 0x39, 0x3a, 0xa7, 0x56, 0x8a, 0xec, 0xe7, 0x4a, 0x1d, 0x31, 0x71, 0xe6,
+	0x21, 0xe5, 0x9e, 0xdb, 0xf8, 0x10, 0x6d, 0x8c, 0x52, 0x60, 0x52, 0xa9, 0x61, 0xb5, 0xe8, 0xd2,
+	0x5a, 0xab, 0xb6, 0xcd, 0x15, 0x7b, 0x70, 0xc5, 0x2b, 0x01, 0x39, 0x4a, 0x81, 0x6d, 0x73, 0x6d,
+	0x94, 0x02, 0x60, 0x1b, 0x6d, 0xa4, 0x10, 0xf1, 0x29, 0xd8, 0xb5, 0x5c, 0xe1, 0xfc, 0x8f, 0xfa,
+	0xee, 0x59, 0x68, 0xb3, 0x12, 0xc5, 0x15, 0xe8, 0xce, 0xc2, 0x5e, 0x89, 0x84, 0xc7, 0x02, 0xf0,
+	0x2b, 0x74, 0x2d, 0x05, 0x91, 0x4d, 0xa4, 0x6e, 0x44, 0x7b, 0x75, 0x23, 0x2e, 0xf3, 0xbc, 0x02,
+	0xe1, 0x69, 0x94, 0xfb, 0x14, 0xd9, 0xcb, 0x9c, 0xfe, 0x69, 0xc4, 0x5a, 0x9f, 0x6a, 0x68, 0x6b,
+	0x36, 0xf6, 0xa5, 0xca, 0x8d, 0xbf, 0x1a, 0xe8, 0xe6, 0x5f, 0xa3, 0x8b, 0x9f, 0xac, 0xae, 0x78,
+	0xf1, 0xb4, 0x3b, 0xff, 0xab, 0xbe, 0xbb, 0xf3, 0xee, 0xc7, 0xaf, 0x0f, 0xe6, 0x43, 0x4c, 0xf3,
+	0x1d, 0x3d, 0x9f, 0xbb, 0x46, 0x47, 0x0f, 0xb8, 0xa0, 0x8d, 0x6a, 0x69, 0x0b, 0xad, 0x69, 0xe3,
+	0x02, 0x7f, 0x37, 0xd0, 0xd6, 0x82, 0x36, 0xe0, 0xbd, 0x75, 0xd4, 0xd6, 0x9b, 0xe6, 0x74, 0xd6,
+	0x8c, 0x56, 0xbd, 0x77, 0x3b, 0xc5, 0x6d, 0x76, 0xdc, 0x56, 0x7e, 0x9b, 0x3f, 0xe5, 0x9f, 0xcf,
+	0x6c, 0x6f, 0xa7, 0x71, 0x31, 0x7f, 0x99, 0x76, 0x54, 0x00, 0xdb, 0x46, 0xa3, 0xf7, 0xd3, 0x40,
+	0x0f, 0x46, 0x3c, 0x5a, 0x59, 0x43, 0xcf, 0x5e, 0xd0, 0xc9, 0xe3, 0x7c, 0xe5, 0x8e, 0x8d, 0x37,
+	0x07, 0x65, 0x74, 0xc0, 0x27, 0x2c, 0x0e, 0x08, 0x4f, 0x03, 0x1a, 0x40, 0x5c, 0x2c, 0xa4, 0x7e,
+	0x11, 0x93, 0x50, 0x2c, 0x7f, 0x80, 0x77, 0xb5, 0xf1, 0xd9, 0xac, 0xf5, 0xbb, 0xdd, 0x2f, 0x66,
+	0xbd, 0xaf, 0x80, 0x5d, 0x5f, 0x10, 0x65, 0xe6, 0xd6, 0x49, 0x93, 0x94, 0x89, 0xc5, 0x37, 0xed,
+	0x32, 0xe8, 0xfa, 0x62, 0x50, 0xb9, 0x0c, 0x4e, 0x9a, 0x03, 0xed, 0x72, 0xba, 0x51, 0x14, 0xf0,
+	0xe8, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0x9c, 0x9d, 0xc9, 0x00, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/customer_manager_link_service.pb.go b/googleapis/ads/googleads/v0/services/customer_manager_link_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..d71420b44fd3dae785dcb661c47e5faec5e39459
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/customer_manager_link_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/customer_manager_link_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CustomerManagerLinkService.GetCustomerManagerLink][google.ads.googleads.v0.services.CustomerManagerLinkService.GetCustomerManagerLink].
+type GetCustomerManagerLinkRequest struct {
+	// The resource name of the CustomerManagerLink to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerManagerLinkRequest) Reset()         { *m = GetCustomerManagerLinkRequest{} }
+func (m *GetCustomerManagerLinkRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerManagerLinkRequest) ProtoMessage()    {}
+func (*GetCustomerManagerLinkRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_manager_link_service_9df054ecaf272672, []int{0}
+}
+func (m *GetCustomerManagerLinkRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerManagerLinkRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerManagerLinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerManagerLinkRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCustomerManagerLinkRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerManagerLinkRequest.Merge(dst, src)
+}
+func (m *GetCustomerManagerLinkRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerManagerLinkRequest.Size(m)
+}
+func (m *GetCustomerManagerLinkRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerManagerLinkRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerManagerLinkRequest proto.InternalMessageInfo
+
+func (m *GetCustomerManagerLinkRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerManagerLinkRequest)(nil), "google.ads.googleads.v0.services.GetCustomerManagerLinkRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CustomerManagerLinkServiceClient is the client API for CustomerManagerLinkService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerManagerLinkServiceClient interface {
+	// Returns the requested CustomerManagerLink in full detail.
+	GetCustomerManagerLink(ctx context.Context, in *GetCustomerManagerLinkRequest, opts ...grpc.CallOption) (*resources.CustomerManagerLink, error)
+}
+
+type customerManagerLinkServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCustomerManagerLinkServiceClient(cc *grpc.ClientConn) CustomerManagerLinkServiceClient {
+	return &customerManagerLinkServiceClient{cc}
+}
+
+func (c *customerManagerLinkServiceClient) GetCustomerManagerLink(ctx context.Context, in *GetCustomerManagerLinkRequest, opts ...grpc.CallOption) (*resources.CustomerManagerLink, error) {
+	out := new(resources.CustomerManagerLink)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerManagerLinkService/GetCustomerManagerLink", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerManagerLinkServiceServer is the server API for CustomerManagerLinkService service.
+type CustomerManagerLinkServiceServer interface {
+	// Returns the requested CustomerManagerLink in full detail.
+	GetCustomerManagerLink(context.Context, *GetCustomerManagerLinkRequest) (*resources.CustomerManagerLink, error)
+}
+
+func RegisterCustomerManagerLinkServiceServer(s *grpc.Server, srv CustomerManagerLinkServiceServer) {
+	s.RegisterService(&_CustomerManagerLinkService_serviceDesc, srv)
+}
+
+func _CustomerManagerLinkService_GetCustomerManagerLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerManagerLinkRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerManagerLinkServiceServer).GetCustomerManagerLink(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerManagerLinkService/GetCustomerManagerLink",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerManagerLinkServiceServer).GetCustomerManagerLink(ctx, req.(*GetCustomerManagerLinkRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerManagerLinkService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CustomerManagerLinkService",
+	HandlerType: (*CustomerManagerLinkServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomerManagerLink",
+			Handler:    _CustomerManagerLinkService_GetCustomerManagerLink_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/customer_manager_link_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/customer_manager_link_service.proto", fileDescriptor_customer_manager_link_service_9df054ecaf272672)
+}
+
+var fileDescriptor_customer_manager_link_service_9df054ecaf272672 = []byte{
+	// 351 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xe4, 0xd2, 0xe2, 0x92, 0xfc, 0xdc, 0xd4, 0xa2, 0xf8,
+	0xdc, 0xc4, 0xbc, 0xc4, 0xf4, 0xd4, 0xa2, 0xf8, 0x9c, 0xcc, 0xbc, 0xec, 0x78, 0xa8, 0xb4, 0x5e,
+	0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02, 0x44, 0xab, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0xdc, 0x14,
+	0xbd, 0x32, 0x03, 0x3d, 0x98, 0x29, 0x52, 0xb6, 0xb8, 0xec, 0x29, 0x4a, 0x2d, 0xce, 0x2f, 0x2d,
+	0xc2, 0x69, 0x11, 0xc4, 0x02, 0x29, 0x19, 0x98, 0xf6, 0x82, 0x4c, 0xfd, 0xc4, 0xbc, 0xbc, 0xfc,
+	0x92, 0xc4, 0x92, 0xcc, 0xfc, 0xbc, 0x62, 0x88, 0xac, 0x92, 0x0b, 0x97, 0xac, 0x7b, 0x6a, 0x89,
+	0x33, 0x54, 0xbf, 0x2f, 0x44, 0xbb, 0x4f, 0x66, 0x5e, 0x76, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71,
+	0x89, 0x90, 0x32, 0x17, 0x2f, 0xcc, 0x9e, 0xf8, 0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46,
+	0x0d, 0xce, 0x20, 0x1e, 0x98, 0xa0, 0x5f, 0x62, 0x6e, 0xaa, 0xd1, 0x07, 0x46, 0x2e, 0x29, 0x2c,
+	0x66, 0x04, 0x43, 0xbc, 0x20, 0x74, 0x91, 0x91, 0x4b, 0x0c, 0xbb, 0x2d, 0x42, 0xf6, 0x7a, 0x84,
+	0xfc, 0xaf, 0x87, 0xd7, 0x7d, 0x52, 0x66, 0x38, 0x0d, 0x80, 0x07, 0x8f, 0x1e, 0x16, 0xed, 0x4a,
+	0x76, 0x4d, 0x97, 0x9f, 0x4c, 0x66, 0xb2, 0x10, 0x32, 0x03, 0x85, 0x64, 0x35, 0x8a, 0x17, 0x6d,
+	0x61, 0xc1, 0x59, 0xac, 0xaf, 0x05, 0x0f, 0x5a, 0x24, 0xbd, 0xc5, 0xfa, 0x5a, 0xb5, 0x4e, 0xf7,
+	0x19, 0xb9, 0x54, 0x92, 0xf3, 0x73, 0x09, 0x3a, 0xdf, 0x49, 0x1e, 0x77, 0xc0, 0x04, 0x80, 0xa2,
+	0x20, 0x80, 0x31, 0xca, 0x03, 0x6a, 0x48, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51,
+	0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0x38, 0x82, 0x60, 0x31, 0x5e, 0x90, 0x59, 0x8c, 0x3b, 0xa1, 0x59,
+	0xc3, 0x18, 0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d, 0x57, 0x31, 0x29, 0xb8, 0x43, 0x0c, 0x74, 0x4c,
+	0x29, 0xd6, 0x83, 0x30, 0x41, 0xac, 0x30, 0x03, 0x3d, 0xa8, 0xc5, 0xc5, 0xa7, 0x60, 0x4a, 0x62,
+	0x1c, 0x53, 0x8a, 0x63, 0xe0, 0x4a, 0x62, 0xc2, 0x0c, 0x62, 0x60, 0x4a, 0x92, 0xd8, 0xc0, 0x0e,
+	0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xe5, 0xd3, 0xc2, 0xe8, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/customer_service.pb.go b/googleapis/ads/googleads/v0/services/customer_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..88d23aacb079c608201f843a2b2d76711d3e76a9
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/customer_service.pb.go
@@ -0,0 +1,653 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/customer_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "github.com/golang/protobuf/ptypes/wrappers"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [CustomerService.GetCustomer][google.ads.googleads.v0.services.CustomerService.GetCustomer].
+type GetCustomerRequest struct {
+	// The resource name of the customer to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCustomerRequest) Reset()         { *m = GetCustomerRequest{} }
+func (m *GetCustomerRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCustomerRequest) ProtoMessage()    {}
+func (*GetCustomerRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{0}
+}
+func (m *GetCustomerRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCustomerRequest.Unmarshal(m, b)
+}
+func (m *GetCustomerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCustomerRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCustomerRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCustomerRequest.Merge(dst, src)
+}
+func (m *GetCustomerRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCustomerRequest.Size(m)
+}
+func (m *GetCustomerRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCustomerRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCustomerRequest proto.InternalMessageInfo
+
+func (m *GetCustomerRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerService.MutateCustomer][google.ads.googleads.v0.services.CustomerService.MutateCustomer].
+type MutateCustomerRequest struct {
+	// The ID of the customer being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The operation to perform on the customer
+	Operation            *CustomerOperation `protobuf:"bytes,4,opt,name=operation,proto3" json:"operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *MutateCustomerRequest) Reset()         { *m = MutateCustomerRequest{} }
+func (m *MutateCustomerRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerRequest) ProtoMessage()    {}
+func (*MutateCustomerRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{1}
+}
+func (m *MutateCustomerRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerRequest.Unmarshal(m, b)
+}
+func (m *MutateCustomerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateCustomerRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerRequest.Merge(dst, src)
+}
+func (m *MutateCustomerRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerRequest.Size(m)
+}
+func (m *MutateCustomerRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerRequest proto.InternalMessageInfo
+
+func (m *MutateCustomerRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateCustomerRequest) GetOperation() *CustomerOperation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+// Request message for [CustomerService.CreateCustomerClient][google.ads.googleads.v0.services.CustomerService.CreateCustomerClient].
+type CreateCustomerClientRequest struct {
+	// The ID of the Manager under whom client customer is being created.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The new client customer to create. The resource name on this customer
+	// will be ignored.
+	CustomerClient       *resources.Customer `protobuf:"bytes,2,opt,name=customer_client,json=customerClient,proto3" json:"customer_client,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *CreateCustomerClientRequest) Reset()         { *m = CreateCustomerClientRequest{} }
+func (m *CreateCustomerClientRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateCustomerClientRequest) ProtoMessage()    {}
+func (*CreateCustomerClientRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{2}
+}
+func (m *CreateCustomerClientRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateCustomerClientRequest.Unmarshal(m, b)
+}
+func (m *CreateCustomerClientRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateCustomerClientRequest.Marshal(b, m, deterministic)
+}
+func (dst *CreateCustomerClientRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateCustomerClientRequest.Merge(dst, src)
+}
+func (m *CreateCustomerClientRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateCustomerClientRequest.Size(m)
+}
+func (m *CreateCustomerClientRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateCustomerClientRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateCustomerClientRequest proto.InternalMessageInfo
+
+func (m *CreateCustomerClientRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *CreateCustomerClientRequest) GetCustomerClient() *resources.Customer {
+	if m != nil {
+		return m.CustomerClient
+	}
+	return nil
+}
+
+// A single update on a customer.
+type CustomerOperation struct {
+	// Mutate operation. Only updates are supported for customer.
+	Update *resources.Customer `protobuf:"bytes,1,opt,name=update,proto3" json:"update,omitempty"`
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CustomerOperation) Reset()         { *m = CustomerOperation{} }
+func (m *CustomerOperation) String() string { return proto.CompactTextString(m) }
+func (*CustomerOperation) ProtoMessage()    {}
+func (*CustomerOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{3}
+}
+func (m *CustomerOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomerOperation.Unmarshal(m, b)
+}
+func (m *CustomerOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomerOperation.Marshal(b, m, deterministic)
+}
+func (dst *CustomerOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomerOperation.Merge(dst, src)
+}
+func (m *CustomerOperation) XXX_Size() int {
+	return xxx_messageInfo_CustomerOperation.Size(m)
+}
+func (m *CustomerOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomerOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomerOperation proto.InternalMessageInfo
+
+func (m *CustomerOperation) GetUpdate() *resources.Customer {
+	if m != nil {
+		return m.Update
+	}
+	return nil
+}
+
+func (m *CustomerOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Response message for CreateCustomerClient mutate.
+type CreateCustomerClientResponse struct {
+	// The resource name of the newly created customer client.
+	ResourceName         string   `protobuf:"bytes,2,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateCustomerClientResponse) Reset()         { *m = CreateCustomerClientResponse{} }
+func (m *CreateCustomerClientResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateCustomerClientResponse) ProtoMessage()    {}
+func (*CreateCustomerClientResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{4}
+}
+func (m *CreateCustomerClientResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateCustomerClientResponse.Unmarshal(m, b)
+}
+func (m *CreateCustomerClientResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateCustomerClientResponse.Marshal(b, m, deterministic)
+}
+func (dst *CreateCustomerClientResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateCustomerClientResponse.Merge(dst, src)
+}
+func (m *CreateCustomerClientResponse) XXX_Size() int {
+	return xxx_messageInfo_CreateCustomerClientResponse.Size(m)
+}
+func (m *CreateCustomerClientResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateCustomerClientResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateCustomerClientResponse proto.InternalMessageInfo
+
+func (m *CreateCustomerClientResponse) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Response message for customer mutate.
+type MutateCustomerResponse struct {
+	// Result for the mutate.
+	Result               *MutateCustomerResult `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MutateCustomerResponse) Reset()         { *m = MutateCustomerResponse{} }
+func (m *MutateCustomerResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerResponse) ProtoMessage()    {}
+func (*MutateCustomerResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{5}
+}
+func (m *MutateCustomerResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerResponse.Unmarshal(m, b)
+}
+func (m *MutateCustomerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateCustomerResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerResponse.Merge(dst, src)
+}
+func (m *MutateCustomerResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerResponse.Size(m)
+}
+func (m *MutateCustomerResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerResponse proto.InternalMessageInfo
+
+func (m *MutateCustomerResponse) GetResult() *MutateCustomerResult {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+// The result for the customer mutate.
+type MutateCustomerResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateCustomerResult) Reset()         { *m = MutateCustomerResult{} }
+func (m *MutateCustomerResult) String() string { return proto.CompactTextString(m) }
+func (*MutateCustomerResult) ProtoMessage()    {}
+func (*MutateCustomerResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{6}
+}
+func (m *MutateCustomerResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateCustomerResult.Unmarshal(m, b)
+}
+func (m *MutateCustomerResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateCustomerResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateCustomerResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateCustomerResult.Merge(dst, src)
+}
+func (m *MutateCustomerResult) XXX_Size() int {
+	return xxx_messageInfo_MutateCustomerResult.Size(m)
+}
+func (m *MutateCustomerResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateCustomerResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateCustomerResult proto.InternalMessageInfo
+
+func (m *MutateCustomerResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [CustomerService.ListAccessibleCustomers][google.ads.googleads.v0.services.CustomerService.ListAccessibleCustomers].
+type ListAccessibleCustomersRequest struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListAccessibleCustomersRequest) Reset()         { *m = ListAccessibleCustomersRequest{} }
+func (m *ListAccessibleCustomersRequest) String() string { return proto.CompactTextString(m) }
+func (*ListAccessibleCustomersRequest) ProtoMessage()    {}
+func (*ListAccessibleCustomersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{7}
+}
+func (m *ListAccessibleCustomersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListAccessibleCustomersRequest.Unmarshal(m, b)
+}
+func (m *ListAccessibleCustomersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListAccessibleCustomersRequest.Marshal(b, m, deterministic)
+}
+func (dst *ListAccessibleCustomersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListAccessibleCustomersRequest.Merge(dst, src)
+}
+func (m *ListAccessibleCustomersRequest) XXX_Size() int {
+	return xxx_messageInfo_ListAccessibleCustomersRequest.Size(m)
+}
+func (m *ListAccessibleCustomersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListAccessibleCustomersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListAccessibleCustomersRequest proto.InternalMessageInfo
+
+// Response message for [CustomerService.ListAccessibleCustomers][google.ads.googleads.v0.services.CustomerService.ListAccessibleCustomers].
+type ListAccessibleCustomersResponse struct {
+	// Resource name of customers directly accessible by the
+	// user authenticating the call.
+	ResourceNames        []string `protobuf:"bytes,1,rep,name=resource_names,json=resourceNames,proto3" json:"resource_names,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListAccessibleCustomersResponse) Reset()         { *m = ListAccessibleCustomersResponse{} }
+func (m *ListAccessibleCustomersResponse) String() string { return proto.CompactTextString(m) }
+func (*ListAccessibleCustomersResponse) ProtoMessage()    {}
+func (*ListAccessibleCustomersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_customer_service_90b708bb54f49834, []int{8}
+}
+func (m *ListAccessibleCustomersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListAccessibleCustomersResponse.Unmarshal(m, b)
+}
+func (m *ListAccessibleCustomersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListAccessibleCustomersResponse.Marshal(b, m, deterministic)
+}
+func (dst *ListAccessibleCustomersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListAccessibleCustomersResponse.Merge(dst, src)
+}
+func (m *ListAccessibleCustomersResponse) XXX_Size() int {
+	return xxx_messageInfo_ListAccessibleCustomersResponse.Size(m)
+}
+func (m *ListAccessibleCustomersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListAccessibleCustomersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListAccessibleCustomersResponse proto.InternalMessageInfo
+
+func (m *ListAccessibleCustomersResponse) GetResourceNames() []string {
+	if m != nil {
+		return m.ResourceNames
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GetCustomerRequest)(nil), "google.ads.googleads.v0.services.GetCustomerRequest")
+	proto.RegisterType((*MutateCustomerRequest)(nil), "google.ads.googleads.v0.services.MutateCustomerRequest")
+	proto.RegisterType((*CreateCustomerClientRequest)(nil), "google.ads.googleads.v0.services.CreateCustomerClientRequest")
+	proto.RegisterType((*CustomerOperation)(nil), "google.ads.googleads.v0.services.CustomerOperation")
+	proto.RegisterType((*CreateCustomerClientResponse)(nil), "google.ads.googleads.v0.services.CreateCustomerClientResponse")
+	proto.RegisterType((*MutateCustomerResponse)(nil), "google.ads.googleads.v0.services.MutateCustomerResponse")
+	proto.RegisterType((*MutateCustomerResult)(nil), "google.ads.googleads.v0.services.MutateCustomerResult")
+	proto.RegisterType((*ListAccessibleCustomersRequest)(nil), "google.ads.googleads.v0.services.ListAccessibleCustomersRequest")
+	proto.RegisterType((*ListAccessibleCustomersResponse)(nil), "google.ads.googleads.v0.services.ListAccessibleCustomersResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CustomerServiceClient is the client API for CustomerService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CustomerServiceClient interface {
+	// Returns the requested customer in full detail.
+	GetCustomer(ctx context.Context, in *GetCustomerRequest, opts ...grpc.CallOption) (*resources.Customer, error)
+	// Updates a customer. Operation statuses are returned.
+	MutateCustomer(ctx context.Context, in *MutateCustomerRequest, opts ...grpc.CallOption) (*MutateCustomerResponse, error)
+	// Returns resource names of customers directly accessible by the
+	// user authenticating the call.
+	ListAccessibleCustomers(ctx context.Context, in *ListAccessibleCustomersRequest, opts ...grpc.CallOption) (*ListAccessibleCustomersResponse, error)
+	// Creates a new client under manager. The new client customer is returned.
+	CreateCustomerClient(ctx context.Context, in *CreateCustomerClientRequest, opts ...grpc.CallOption) (*CreateCustomerClientResponse, error)
+}
+
+type customerServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCustomerServiceClient(cc *grpc.ClientConn) CustomerServiceClient {
+	return &customerServiceClient{cc}
+}
+
+func (c *customerServiceClient) GetCustomer(ctx context.Context, in *GetCustomerRequest, opts ...grpc.CallOption) (*resources.Customer, error) {
+	out := new(resources.Customer)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerService/GetCustomer", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerServiceClient) MutateCustomer(ctx context.Context, in *MutateCustomerRequest, opts ...grpc.CallOption) (*MutateCustomerResponse, error) {
+	out := new(MutateCustomerResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerService/MutateCustomer", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerServiceClient) ListAccessibleCustomers(ctx context.Context, in *ListAccessibleCustomersRequest, opts ...grpc.CallOption) (*ListAccessibleCustomersResponse, error) {
+	out := new(ListAccessibleCustomersResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerService/ListAccessibleCustomers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *customerServiceClient) CreateCustomerClient(ctx context.Context, in *CreateCustomerClientRequest, opts ...grpc.CallOption) (*CreateCustomerClientResponse, error) {
+	out := new(CreateCustomerClientResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.CustomerService/CreateCustomerClient", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CustomerServiceServer is the server API for CustomerService service.
+type CustomerServiceServer interface {
+	// Returns the requested customer in full detail.
+	GetCustomer(context.Context, *GetCustomerRequest) (*resources.Customer, error)
+	// Updates a customer. Operation statuses are returned.
+	MutateCustomer(context.Context, *MutateCustomerRequest) (*MutateCustomerResponse, error)
+	// Returns resource names of customers directly accessible by the
+	// user authenticating the call.
+	ListAccessibleCustomers(context.Context, *ListAccessibleCustomersRequest) (*ListAccessibleCustomersResponse, error)
+	// Creates a new client under manager. The new client customer is returned.
+	CreateCustomerClient(context.Context, *CreateCustomerClientRequest) (*CreateCustomerClientResponse, error)
+}
+
+func RegisterCustomerServiceServer(s *grpc.Server, srv CustomerServiceServer) {
+	s.RegisterService(&_CustomerService_serviceDesc, srv)
+}
+
+func _CustomerService_GetCustomer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCustomerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).GetCustomer(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerService/GetCustomer",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).GetCustomer(ctx, req.(*GetCustomerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerService_MutateCustomer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateCustomerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).MutateCustomer(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerService/MutateCustomer",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).MutateCustomer(ctx, req.(*MutateCustomerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerService_ListAccessibleCustomers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListAccessibleCustomersRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).ListAccessibleCustomers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerService/ListAccessibleCustomers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).ListAccessibleCustomers(ctx, req.(*ListAccessibleCustomersRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CustomerService_CreateCustomerClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateCustomerClientRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CustomerServiceServer).CreateCustomerClient(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.CustomerService/CreateCustomerClient",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CustomerServiceServer).CreateCustomerClient(ctx, req.(*CreateCustomerClientRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CustomerService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.CustomerService",
+	HandlerType: (*CustomerServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCustomer",
+			Handler:    _CustomerService_GetCustomer_Handler,
+		},
+		{
+			MethodName: "MutateCustomer",
+			Handler:    _CustomerService_MutateCustomer_Handler,
+		},
+		{
+			MethodName: "ListAccessibleCustomers",
+			Handler:    _CustomerService_ListAccessibleCustomers_Handler,
+		},
+		{
+			MethodName: "CreateCustomerClient",
+			Handler:    _CustomerService_CreateCustomerClient_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/customer_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/customer_service.proto", fileDescriptor_customer_service_90b708bb54f49834)
+}
+
+var fileDescriptor_customer_service_90b708bb54f49834 = []byte{
+	// 697 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x4f, 0xd4, 0x4e,
+	0x18, 0xce, 0x2c, 0xbf, 0x6c, 0xc2, 0xbb, 0x3f, 0x20, 0x4e, 0x50, 0x37, 0x2b, 0x81, 0xb5, 0x42,
+	0xc0, 0x35, 0xb6, 0x1b, 0x30, 0xa2, 0x4b, 0xd6, 0xb8, 0x6c, 0x22, 0x98, 0x08, 0x62, 0x35, 0x1c,
+	0xcc, 0x26, 0xa4, 0xb4, 0xc3, 0xda, 0xd0, 0x76, 0x6a, 0xa7, 0xc5, 0x03, 0xe1, 0xe2, 0x95, 0xa3,
+	0x7a, 0xf0, 0xea, 0xd1, 0xb3, 0x9f, 0xc2, 0xc4, 0x93, 0x7c, 0x04, 0x3f, 0x88, 0xe9, 0x74, 0xa6,
+	0xec, 0xbf, 0xb2, 0x2c, 0xde, 0xde, 0x9d, 0x7d, 0x9f, 0xe7, 0x7d, 0xde, 0xbf, 0x85, 0xd5, 0x36,
+	0xa5, 0x6d, 0x87, 0x68, 0x86, 0xc5, 0xb4, 0xc4, 0x8c, 0xad, 0xa3, 0xaa, 0xc6, 0x48, 0x70, 0x64,
+	0x9b, 0x84, 0x69, 0x66, 0xc4, 0x42, 0xea, 0x92, 0x60, 0x4f, 0xbc, 0xa8, 0x7e, 0x40, 0x43, 0x8a,
+	0xcb, 0x89, 0xb7, 0x6a, 0x58, 0x4c, 0x4d, 0x81, 0xea, 0x51, 0x55, 0x95, 0xc0, 0x52, 0x35, 0x8b,
+	0x3a, 0x20, 0x8c, 0x46, 0x41, 0x27, 0x77, 0xc2, 0x59, 0x9a, 0x91, 0x08, 0xdf, 0xd6, 0x0c, 0xcf,
+	0xa3, 0xa1, 0x11, 0xda, 0xd4, 0x63, 0xe2, 0x5f, 0x11, 0x51, 0xe3, 0xbf, 0xf6, 0xa3, 0x03, 0xed,
+	0xc0, 0x26, 0x8e, 0xb5, 0xe7, 0x1a, 0xec, 0x50, 0x78, 0xcc, 0xf6, 0x7a, 0x7c, 0x08, 0x0c, 0xdf,
+	0x27, 0x81, 0x60, 0x50, 0x1e, 0x03, 0xde, 0x20, 0x61, 0x53, 0x04, 0xd5, 0xc9, 0xfb, 0x88, 0xb0,
+	0x10, 0xdf, 0x81, 0x09, 0xa9, 0x68, 0xcf, 0x33, 0x5c, 0x52, 0x44, 0x65, 0xb4, 0x34, 0xae, 0xff,
+	0x2f, 0x1f, 0xb7, 0x0d, 0x97, 0x28, 0xa7, 0x08, 0xae, 0x6f, 0x45, 0xa1, 0x11, 0x92, 0x5e, 0xf8,
+	0x1c, 0x14, 0xd2, 0x12, 0xd9, 0x96, 0x00, 0x83, 0x7c, 0x7a, 0x6e, 0xe1, 0x57, 0x30, 0x4e, 0x7d,
+	0x12, 0xf0, 0x5c, 0x8a, 0xff, 0x95, 0xd1, 0x52, 0x61, 0x79, 0x45, 0x1d, 0x56, 0x3d, 0x55, 0x86,
+	0x79, 0x29, 0xa1, 0xfa, 0x39, 0x8b, 0xf2, 0x19, 0xc1, 0xad, 0x66, 0x40, 0x3a, 0xd4, 0x34, 0x1d,
+	0x9b, 0x78, 0xe1, 0xa5, 0x35, 0xbd, 0x81, 0xa9, 0xd4, 0xc1, 0xe4, 0xd0, 0x62, 0x8e, 0x2b, 0xbb,
+	0x97, 0xa9, 0x2c, 0xed, 0x5a, 0x2a, 0x4d, 0x9f, 0x34, 0xbb, 0xa2, 0x2b, 0x5f, 0x10, 0x5c, 0xeb,
+	0xd3, 0x8d, 0x9b, 0x90, 0x8f, 0x7c, 0xcb, 0x08, 0x93, 0xc2, 0x8e, 0x18, 0x42, 0x40, 0xf1, 0x1a,
+	0x14, 0x12, 0x8b, 0xf7, 0x5b, 0x88, 0x2d, 0x49, 0x26, 0xd9, 0x70, 0xf5, 0x59, 0x3c, 0x12, 0x5b,
+	0x06, 0x3b, 0xd4, 0x21, 0x71, 0x8f, 0x6d, 0xa5, 0x09, 0x33, 0x83, 0xab, 0xc5, 0x7c, 0xea, 0x31,
+	0xd2, 0x3f, 0x01, 0xb9, 0x01, 0x13, 0xf0, 0x0e, 0x6e, 0xf4, 0x0e, 0x80, 0x80, 0x6f, 0x43, 0x3e,
+	0x20, 0x2c, 0x72, 0x64, 0x0d, 0x1f, 0x0e, 0xef, 0x6e, 0x1f, 0x53, 0xe4, 0x84, 0xba, 0x60, 0x51,
+	0xd6, 0x60, 0x7a, 0xd0, 0xff, 0x97, 0x1b, 0xd4, 0x32, 0xcc, 0xbe, 0xb0, 0x59, 0xd8, 0x30, 0x4d,
+	0xc2, 0x98, 0xbd, 0xef, 0xa4, 0x24, 0x4c, 0x0c, 0x87, 0xb2, 0x09, 0x73, 0x99, 0x1e, 0x22, 0xa3,
+	0x05, 0x98, 0xec, 0x8a, 0xc4, 0x8a, 0xa8, 0x3c, 0xb6, 0x34, 0xae, 0x4f, 0x74, 0x86, 0x62, 0xcb,
+	0xa7, 0x79, 0x98, 0x92, 0xe0, 0xd7, 0x49, 0x6a, 0xf8, 0x2b, 0x82, 0x42, 0xc7, 0x92, 0xe1, 0x07,
+	0xc3, 0x8b, 0xd1, 0xbf, 0x93, 0xa5, 0x51, 0x66, 0x44, 0x59, 0xfc, 0xf8, 0xfb, 0xcf, 0xa7, 0xdc,
+	0x6d, 0x3c, 0x17, 0x1f, 0x97, 0xe3, 0x2e, 0xe1, 0x75, 0x39, 0xa1, 0x4c, 0xab, 0x9c, 0xe0, 0x1f,
+	0x08, 0x26, 0xbb, 0x2b, 0x8b, 0x57, 0x47, 0xef, 0x55, 0xa2, 0xf0, 0xd1, 0x15, 0x9a, 0xcc, 0x8b,
+	0xab, 0x68, 0x5c, 0xee, 0x5d, 0x65, 0x3e, 0x96, 0x7b, 0xae, 0xef, 0xb8, 0x63, 0x63, 0xeb, 0x95,
+	0x93, 0x9a, 0xcb, 0xd1, 0x35, 0x54, 0xc1, 0xbf, 0x10, 0xdc, 0xcc, 0xe8, 0x18, 0x7e, 0x3a, 0x5c,
+	0xc6, 0xc5, 0xe3, 0x50, 0x6a, 0xfc, 0x03, 0x83, 0xc8, 0xe8, 0x3e, 0xcf, 0x68, 0x11, 0x2f, 0x74,
+	0x65, 0x54, 0x73, 0x32, 0x34, 0x9f, 0x21, 0x98, 0x1e, 0xb4, 0x8f, 0xb8, 0x7e, 0x89, 0xb3, 0x98,
+	0x7d, 0xf5, 0x4a, 0x4f, 0xae, 0x0a, 0x17, 0x69, 0xd4, 0x79, 0x1a, 0xab, 0xca, 0xf2, 0xc5, 0x8d,
+	0x31, 0x07, 0x70, 0xd4, 0x50, 0x65, 0xfd, 0x0c, 0xc1, 0xbc, 0x49, 0xdd, 0xa1, 0x22, 0xd6, 0xa7,
+	0x7b, 0x76, 0x66, 0x27, 0xbe, 0x5e, 0x3b, 0xe8, 0xed, 0xa6, 0x40, 0xb6, 0xa9, 0x63, 0x78, 0x6d,
+	0x95, 0x06, 0x6d, 0xad, 0x4d, 0x3c, 0x7e, 0xdb, 0xe4, 0x07, 0xd4, 0xb7, 0x59, 0xf6, 0xa7, 0x7a,
+	0x4d, 0x1a, 0xdf, 0x72, 0x63, 0x1b, 0x8d, 0xc6, 0xf7, 0x5c, 0x79, 0x23, 0x21, 0x6c, 0x58, 0x4c,
+	0x4d, 0xcc, 0xd8, 0xda, 0xad, 0xaa, 0x22, 0x30, 0xfb, 0x29, 0x5d, 0x5a, 0x0d, 0x8b, 0xb5, 0x52,
+	0x97, 0xd6, 0x6e, 0xb5, 0x25, 0x5d, 0xf6, 0xf3, 0x5c, 0xc0, 0xca, 0xdf, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0x2a, 0x1f, 0x64, 0x81, 0x2a, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/display_keyword_view_service.pb.go b/googleapis/ads/googleads/v0/services/display_keyword_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6f3fb7bd923c2f5c9ead207b5cd1e010df8e2a07
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/display_keyword_view_service.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/display_keyword_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [DisplayKeywordViewService.GetDisplayKeywordView][google.ads.googleads.v0.services.DisplayKeywordViewService.GetDisplayKeywordView].
+type GetDisplayKeywordViewRequest struct {
+	// The resource name of the display keyword view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetDisplayKeywordViewRequest) Reset()         { *m = GetDisplayKeywordViewRequest{} }
+func (m *GetDisplayKeywordViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDisplayKeywordViewRequest) ProtoMessage()    {}
+func (*GetDisplayKeywordViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_display_keyword_view_service_5be79eacea48f3f3, []int{0}
+}
+func (m *GetDisplayKeywordViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetDisplayKeywordViewRequest.Unmarshal(m, b)
+}
+func (m *GetDisplayKeywordViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetDisplayKeywordViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetDisplayKeywordViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetDisplayKeywordViewRequest.Merge(dst, src)
+}
+func (m *GetDisplayKeywordViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetDisplayKeywordViewRequest.Size(m)
+}
+func (m *GetDisplayKeywordViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetDisplayKeywordViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDisplayKeywordViewRequest proto.InternalMessageInfo
+
+func (m *GetDisplayKeywordViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetDisplayKeywordViewRequest)(nil), "google.ads.googleads.v0.services.GetDisplayKeywordViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// DisplayKeywordViewServiceClient is the client API for DisplayKeywordViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type DisplayKeywordViewServiceClient interface {
+	// Returns the requested display keyword view in full detail.
+	GetDisplayKeywordView(ctx context.Context, in *GetDisplayKeywordViewRequest, opts ...grpc.CallOption) (*resources.DisplayKeywordView, error)
+}
+
+type displayKeywordViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewDisplayKeywordViewServiceClient(cc *grpc.ClientConn) DisplayKeywordViewServiceClient {
+	return &displayKeywordViewServiceClient{cc}
+}
+
+func (c *displayKeywordViewServiceClient) GetDisplayKeywordView(ctx context.Context, in *GetDisplayKeywordViewRequest, opts ...grpc.CallOption) (*resources.DisplayKeywordView, error) {
+	out := new(resources.DisplayKeywordView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.DisplayKeywordViewService/GetDisplayKeywordView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// DisplayKeywordViewServiceServer is the server API for DisplayKeywordViewService service.
+type DisplayKeywordViewServiceServer interface {
+	// Returns the requested display keyword view in full detail.
+	GetDisplayKeywordView(context.Context, *GetDisplayKeywordViewRequest) (*resources.DisplayKeywordView, error)
+}
+
+func RegisterDisplayKeywordViewServiceServer(s *grpc.Server, srv DisplayKeywordViewServiceServer) {
+	s.RegisterService(&_DisplayKeywordViewService_serviceDesc, srv)
+}
+
+func _DisplayKeywordViewService_GetDisplayKeywordView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDisplayKeywordViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DisplayKeywordViewServiceServer).GetDisplayKeywordView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.DisplayKeywordViewService/GetDisplayKeywordView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DisplayKeywordViewServiceServer).GetDisplayKeywordView(ctx, req.(*GetDisplayKeywordViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _DisplayKeywordViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.DisplayKeywordViewService",
+	HandlerType: (*DisplayKeywordViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetDisplayKeywordView",
+			Handler:    _DisplayKeywordViewService_GetDisplayKeywordView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/display_keyword_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/display_keyword_view_service.proto", fileDescriptor_display_keyword_view_service_5be79eacea48f3f3)
+}
+
+var fileDescriptor_display_keyword_view_service_5be79eacea48f3f3 = []byte{
+	// 354 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0x4a, 0xc3, 0x40,
+	0x10, 0x26, 0x15, 0x04, 0x83, 0x5e, 0x02, 0x82, 0x96, 0x22, 0xa5, 0x7a, 0x90, 0x1e, 0x76, 0x83,
+	0x52, 0x3c, 0x68, 0x85, 0xb4, 0x42, 0x05, 0x41, 0x4a, 0x85, 0x1e, 0x24, 0x10, 0xd6, 0x66, 0x08,
+	0x8b, 0x4d, 0x36, 0xee, 0x6c, 0x53, 0x8a, 0x78, 0xf1, 0x15, 0x7c, 0x03, 0x8f, 0x3e, 0x8a, 0xe0,
+	0xc9, 0xbb, 0x27, 0x6f, 0xbe, 0x84, 0xa4, 0xdb, 0x2d, 0x4a, 0x8d, 0xbd, 0x7d, 0x64, 0xe7, 0xfb,
+	0x99, 0x6f, 0x62, 0xb7, 0x23, 0x21, 0xa2, 0x21, 0x50, 0x16, 0x22, 0xd5, 0x30, 0x47, 0x99, 0x4b,
+	0x11, 0x64, 0xc6, 0x07, 0x80, 0x34, 0xe4, 0x98, 0x0e, 0xd9, 0x24, 0xb8, 0x85, 0xc9, 0x58, 0xc8,
+	0x30, 0xc8, 0x38, 0x8c, 0x83, 0xd9, 0x2b, 0x49, 0xa5, 0x50, 0xc2, 0xa9, 0x6a, 0x26, 0x61, 0x21,
+	0x92, 0xb9, 0x08, 0xc9, 0x5c, 0x62, 0x44, 0xca, 0x27, 0x45, 0x36, 0x12, 0x50, 0x8c, 0x64, 0x91,
+	0x8f, 0xd6, 0x2f, 0x57, 0x0c, 0x3b, 0xe5, 0x94, 0x25, 0x89, 0x50, 0x4c, 0x71, 0x91, 0xa0, 0x7e,
+	0xad, 0xb5, 0xed, 0x4a, 0x07, 0xd4, 0x99, 0xa6, 0x5f, 0x68, 0x76, 0x9f, 0xc3, 0xb8, 0x07, 0x77,
+	0x23, 0x40, 0xe5, 0xec, 0xda, 0x1b, 0xc6, 0x25, 0x48, 0x58, 0x0c, 0x5b, 0x56, 0xd5, 0xda, 0x5f,
+	0xeb, 0xad, 0x9b, 0x8f, 0x97, 0x2c, 0x86, 0x83, 0x2f, 0xcb, 0xde, 0x5e, 0x94, 0xb8, 0xd2, 0xf9,
+	0x9d, 0x37, 0xcb, 0xde, 0xfc, 0xd3, 0xc3, 0x39, 0x25, 0xcb, 0x76, 0x27, 0xff, 0x85, 0x2b, 0x37,
+	0x0a, 0xf9, 0xf3, 0x66, 0xc8, 0x22, 0xbb, 0xd6, 0x7c, 0x7c, 0xff, 0x7c, 0x2a, 0x1d, 0x39, 0x8d,
+	0xbc, 0xc3, 0xfb, 0x5f, 0xeb, 0x35, 0x07, 0x23, 0x54, 0x22, 0x06, 0x89, 0xb4, 0x6e, 0x4a, 0xfd,
+	0x41, 0x45, 0x5a, 0x7f, 0x68, 0x7d, 0x58, 0xf6, 0xde, 0x40, 0xc4, 0x4b, 0xb3, 0xb7, 0x76, 0x0a,
+	0x3b, 0xe9, 0xe6, 0xdd, 0x77, 0xad, 0xeb, 0xf3, 0x99, 0x46, 0x24, 0x86, 0x2c, 0x89, 0x88, 0x90,
+	0x11, 0x8d, 0x20, 0x99, 0x5e, 0xc6, 0x5c, 0x3a, 0xe5, 0x58, 0xfc, 0x7f, 0x1d, 0x1b, 0xf0, 0x5c,
+	0x5a, 0xe9, 0x78, 0xde, 0x4b, 0xa9, 0xda, 0xd1, 0x82, 0x5e, 0x88, 0x44, 0xc3, 0x1c, 0xf5, 0x5d,
+	0x32, 0x33, 0xc6, 0x57, 0x33, 0xe2, 0x7b, 0x21, 0xfa, 0xf3, 0x11, 0xbf, 0xef, 0xfa, 0x66, 0xe4,
+	0x66, 0x75, 0x1a, 0xe0, 0xf0, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xc8, 0x29, 0x64, 0xdf, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/feed_item_service.pb.go b/googleapis/ads/googleads/v0/services/feed_item_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6d9396e3867d29e1e605b48c65a8e7d39dd0f974
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/feed_item_service.pb.go
@@ -0,0 +1,546 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/feed_item_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [FeedItemService.GetFeedItem][google.ads.googleads.v0.services.FeedItemService.GetFeedItem].
+type GetFeedItemRequest struct {
+	// The resource name of the feed item to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedItemRequest) Reset()         { *m = GetFeedItemRequest{} }
+func (m *GetFeedItemRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedItemRequest) ProtoMessage()    {}
+func (*GetFeedItemRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_service_b421090e91948349, []int{0}
+}
+func (m *GetFeedItemRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedItemRequest.Unmarshal(m, b)
+}
+func (m *GetFeedItemRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedItemRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetFeedItemRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedItemRequest.Merge(dst, src)
+}
+func (m *GetFeedItemRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedItemRequest.Size(m)
+}
+func (m *GetFeedItemRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedItemRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedItemRequest proto.InternalMessageInfo
+
+func (m *GetFeedItemRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [FeedItemService.MutateFeedItems][google.ads.googleads.v0.services.FeedItemService.MutateFeedItems].
+type MutateFeedItemsRequest struct {
+	// The ID of the customer whose feed items are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual feed items.
+	Operations           []*FeedItemOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MutateFeedItemsRequest) Reset()         { *m = MutateFeedItemsRequest{} }
+func (m *MutateFeedItemsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemsRequest) ProtoMessage()    {}
+func (*MutateFeedItemsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_service_b421090e91948349, []int{1}
+}
+func (m *MutateFeedItemsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemsRequest.Unmarshal(m, b)
+}
+func (m *MutateFeedItemsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedItemsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemsRequest.Merge(dst, src)
+}
+func (m *MutateFeedItemsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemsRequest.Size(m)
+}
+func (m *MutateFeedItemsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemsRequest proto.InternalMessageInfo
+
+func (m *MutateFeedItemsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateFeedItemsRequest) GetOperations() []*FeedItemOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on an feed item.
+type FeedItemOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*FeedItemOperation_Create
+	//	*FeedItemOperation_Update
+	//	*FeedItemOperation_Remove
+	Operation            isFeedItemOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *FeedItemOperation) Reset()         { *m = FeedItemOperation{} }
+func (m *FeedItemOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedItemOperation) ProtoMessage()    {}
+func (*FeedItemOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_service_b421090e91948349, []int{2}
+}
+func (m *FeedItemOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedItemOperation.Unmarshal(m, b)
+}
+func (m *FeedItemOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedItemOperation.Marshal(b, m, deterministic)
+}
+func (dst *FeedItemOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedItemOperation.Merge(dst, src)
+}
+func (m *FeedItemOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedItemOperation.Size(m)
+}
+func (m *FeedItemOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedItemOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedItemOperation proto.InternalMessageInfo
+
+func (m *FeedItemOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isFeedItemOperation_Operation interface {
+	isFeedItemOperation_Operation()
+}
+
+type FeedItemOperation_Create struct {
+	Create *resources.FeedItem `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type FeedItemOperation_Update struct {
+	Update *resources.FeedItem `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type FeedItemOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*FeedItemOperation_Create) isFeedItemOperation_Operation() {}
+
+func (*FeedItemOperation_Update) isFeedItemOperation_Operation() {}
+
+func (*FeedItemOperation_Remove) isFeedItemOperation_Operation() {}
+
+func (m *FeedItemOperation) GetOperation() isFeedItemOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *FeedItemOperation) GetCreate() *resources.FeedItem {
+	if x, ok := m.GetOperation().(*FeedItemOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *FeedItemOperation) GetUpdate() *resources.FeedItem {
+	if x, ok := m.GetOperation().(*FeedItemOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *FeedItemOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*FeedItemOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*FeedItemOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _FeedItemOperation_OneofMarshaler, _FeedItemOperation_OneofUnmarshaler, _FeedItemOperation_OneofSizer, []interface{}{
+		(*FeedItemOperation_Create)(nil),
+		(*FeedItemOperation_Update)(nil),
+		(*FeedItemOperation_Remove)(nil),
+	}
+}
+
+func _FeedItemOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*FeedItemOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *FeedItemOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *FeedItemOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *FeedItemOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("FeedItemOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _FeedItemOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*FeedItemOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.FeedItem)
+		err := b.DecodeMessage(msg)
+		m.Operation = &FeedItemOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.FeedItem)
+		err := b.DecodeMessage(msg)
+		m.Operation = &FeedItemOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &FeedItemOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _FeedItemOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*FeedItemOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *FeedItemOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *FeedItemOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *FeedItemOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for an feed item mutate.
+type MutateFeedItemsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateFeedItemResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateFeedItemsResponse) Reset()         { *m = MutateFeedItemsResponse{} }
+func (m *MutateFeedItemsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemsResponse) ProtoMessage()    {}
+func (*MutateFeedItemsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_service_b421090e91948349, []int{3}
+}
+func (m *MutateFeedItemsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemsResponse.Unmarshal(m, b)
+}
+func (m *MutateFeedItemsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedItemsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemsResponse.Merge(dst, src)
+}
+func (m *MutateFeedItemsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemsResponse.Size(m)
+}
+func (m *MutateFeedItemsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemsResponse proto.InternalMessageInfo
+
+func (m *MutateFeedItemsResponse) GetResults() []*MutateFeedItemResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the feed item mutate.
+type MutateFeedItemResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedItemResult) Reset()         { *m = MutateFeedItemResult{} }
+func (m *MutateFeedItemResult) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedItemResult) ProtoMessage()    {}
+func (*MutateFeedItemResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_item_service_b421090e91948349, []int{4}
+}
+func (m *MutateFeedItemResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedItemResult.Unmarshal(m, b)
+}
+func (m *MutateFeedItemResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedItemResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedItemResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedItemResult.Merge(dst, src)
+}
+func (m *MutateFeedItemResult) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedItemResult.Size(m)
+}
+func (m *MutateFeedItemResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedItemResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedItemResult proto.InternalMessageInfo
+
+func (m *MutateFeedItemResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedItemRequest)(nil), "google.ads.googleads.v0.services.GetFeedItemRequest")
+	proto.RegisterType((*MutateFeedItemsRequest)(nil), "google.ads.googleads.v0.services.MutateFeedItemsRequest")
+	proto.RegisterType((*FeedItemOperation)(nil), "google.ads.googleads.v0.services.FeedItemOperation")
+	proto.RegisterType((*MutateFeedItemsResponse)(nil), "google.ads.googleads.v0.services.MutateFeedItemsResponse")
+	proto.RegisterType((*MutateFeedItemResult)(nil), "google.ads.googleads.v0.services.MutateFeedItemResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// FeedItemServiceClient is the client API for FeedItemService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedItemServiceClient interface {
+	// Returns the requested feed item in full detail.
+	GetFeedItem(ctx context.Context, in *GetFeedItemRequest, opts ...grpc.CallOption) (*resources.FeedItem, error)
+	// Creates, updates, or removes feed items. Operation statuses are
+	// returned.
+	MutateFeedItems(ctx context.Context, in *MutateFeedItemsRequest, opts ...grpc.CallOption) (*MutateFeedItemsResponse, error)
+}
+
+type feedItemServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewFeedItemServiceClient(cc *grpc.ClientConn) FeedItemServiceClient {
+	return &feedItemServiceClient{cc}
+}
+
+func (c *feedItemServiceClient) GetFeedItem(ctx context.Context, in *GetFeedItemRequest, opts ...grpc.CallOption) (*resources.FeedItem, error) {
+	out := new(resources.FeedItem)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.FeedItemService/GetFeedItem", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *feedItemServiceClient) MutateFeedItems(ctx context.Context, in *MutateFeedItemsRequest, opts ...grpc.CallOption) (*MutateFeedItemsResponse, error) {
+	out := new(MutateFeedItemsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.FeedItemService/MutateFeedItems", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedItemServiceServer is the server API for FeedItemService service.
+type FeedItemServiceServer interface {
+	// Returns the requested feed item in full detail.
+	GetFeedItem(context.Context, *GetFeedItemRequest) (*resources.FeedItem, error)
+	// Creates, updates, or removes feed items. Operation statuses are
+	// returned.
+	MutateFeedItems(context.Context, *MutateFeedItemsRequest) (*MutateFeedItemsResponse, error)
+}
+
+func RegisterFeedItemServiceServer(s *grpc.Server, srv FeedItemServiceServer) {
+	s.RegisterService(&_FeedItemService_serviceDesc, srv)
+}
+
+func _FeedItemService_GetFeedItem_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedItemRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedItemServiceServer).GetFeedItem(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.FeedItemService/GetFeedItem",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedItemServiceServer).GetFeedItem(ctx, req.(*GetFeedItemRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _FeedItemService_MutateFeedItems_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateFeedItemsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedItemServiceServer).MutateFeedItems(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.FeedItemService/MutateFeedItems",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedItemServiceServer).MutateFeedItems(ctx, req.(*MutateFeedItemsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedItemService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.FeedItemService",
+	HandlerType: (*FeedItemServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeedItem",
+			Handler:    _FeedItemService_GetFeedItem_Handler,
+		},
+		{
+			MethodName: "MutateFeedItems",
+			Handler:    _FeedItemService_MutateFeedItems_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/feed_item_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/feed_item_service.proto", fileDescriptor_feed_item_service_b421090e91948349)
+}
+
+var fileDescriptor_feed_item_service_b421090e91948349 = []byte{
+	// 591 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6a, 0xdb, 0x4a,
+	0x14, 0x7d, 0x92, 0x1f, 0x2e, 0x19, 0xb5, 0x84, 0x0e, 0xa1, 0x15, 0xa6, 0x50, 0xa3, 0x76, 0x61,
+	0x1c, 0x3a, 0x72, 0xed, 0x52, 0xe2, 0x98, 0x2c, 0x6c, 0x68, 0x9c, 0x2c, 0xd2, 0x1a, 0x05, 0xb2,
+	0x28, 0x06, 0x33, 0xb1, 0xae, 0x85, 0xb0, 0xa5, 0x51, 0x35, 0x23, 0x6f, 0x42, 0x36, 0x85, 0x6e,
+	0xbb, 0xe9, 0x1f, 0x14, 0xba, 0xe9, 0x5f, 0x74, 0xdb, 0x6d, 0xfb, 0x09, 0xfd, 0x8d, 0x42, 0x91,
+	0x46, 0xa3, 0xd8, 0x71, 0x8d, 0x9b, 0xec, 0xae, 0x46, 0xe7, 0x9c, 0x7b, 0x74, 0xe6, 0x5e, 0xa1,
+	0x3d, 0x8f, 0x31, 0x6f, 0x06, 0x36, 0x75, 0xb9, 0x2d, 0xcb, 0xb4, 0x9a, 0x37, 0x6c, 0x0e, 0xf1,
+	0xdc, 0x1f, 0x03, 0xb7, 0x27, 0x00, 0xee, 0xc8, 0x17, 0x10, 0x8c, 0xf2, 0x23, 0x12, 0xc5, 0x4c,
+	0x30, 0x5c, 0x95, 0x70, 0x42, 0x5d, 0x4e, 0x0a, 0x26, 0x99, 0x37, 0x88, 0x62, 0x56, 0x9e, 0xaf,
+	0xd3, 0x8e, 0x81, 0xb3, 0x24, 0x5e, 0x12, 0x97, 0xa2, 0x95, 0x47, 0x8a, 0x12, 0xf9, 0x36, 0x0d,
+	0x43, 0x26, 0xa8, 0xf0, 0x59, 0xc8, 0xf3, 0xb7, 0x79, 0x4b, 0x3b, 0x7b, 0x3a, 0x4f, 0x26, 0xf6,
+	0xc4, 0x87, 0x99, 0x3b, 0x0a, 0x28, 0x9f, 0x4a, 0x84, 0xd5, 0x46, 0xb8, 0x0f, 0xe2, 0x10, 0xc0,
+	0x3d, 0x16, 0x10, 0x38, 0xf0, 0x2e, 0x01, 0x2e, 0xf0, 0x13, 0x74, 0x4f, 0xb5, 0x1c, 0x85, 0x34,
+	0x00, 0x53, 0xab, 0x6a, 0xb5, 0x2d, 0xe7, 0xae, 0x3a, 0x7c, 0x4d, 0x03, 0xb0, 0x3e, 0x6a, 0xe8,
+	0xc1, 0x49, 0x22, 0xa8, 0x00, 0x45, 0xe7, 0x8a, 0xff, 0x18, 0x19, 0xe3, 0x84, 0x0b, 0x16, 0x40,
+	0x3c, 0xf2, 0xdd, 0x9c, 0x8d, 0xd4, 0xd1, 0xb1, 0x8b, 0x4f, 0x11, 0x62, 0x11, 0xc4, 0xd2, 0xac,
+	0xa9, 0x57, 0x4b, 0x35, 0xa3, 0xd9, 0x22, 0x9b, 0x02, 0x22, 0xaa, 0xd1, 0x1b, 0xc5, 0x75, 0x16,
+	0x64, 0xac, 0x0f, 0x3a, 0xba, 0xbf, 0x82, 0xc0, 0x1d, 0x64, 0x24, 0x91, 0x4b, 0x05, 0x64, 0x9f,
+	0x6d, 0xfe, 0x5f, 0xd5, 0x6a, 0x46, 0xb3, 0xa2, 0x7a, 0xa9, 0x64, 0xc8, 0x61, 0x9a, 0xcc, 0x09,
+	0xe5, 0x53, 0x07, 0x49, 0x78, 0x5a, 0xe3, 0x57, 0xa8, 0x3c, 0x8e, 0x81, 0x0a, 0x99, 0x80, 0xd1,
+	0xdc, 0x5d, 0xeb, 0xb1, 0xb8, 0xa2, 0xc2, 0xe4, 0xd1, 0x7f, 0x4e, 0x4e, 0x4e, 0x65, 0xa4, 0xa8,
+	0xa9, 0xdf, 0x4a, 0x46, 0x92, 0xb1, 0x89, 0xca, 0x31, 0x04, 0x6c, 0x0e, 0x66, 0x29, 0x4d, 0x34,
+	0x7d, 0x23, 0x9f, 0x7b, 0x06, 0xda, 0x2a, 0x82, 0xb0, 0xa6, 0xe8, 0xe1, 0xca, 0xbd, 0xf0, 0x88,
+	0x85, 0x1c, 0xf0, 0x00, 0xdd, 0x89, 0x81, 0x27, 0x33, 0xa1, 0x42, 0x7f, 0xb9, 0x39, 0xf4, 0x65,
+	0x2d, 0x27, 0xa3, 0x3b, 0x4a, 0xc6, 0xea, 0xa0, 0x9d, 0xbf, 0x01, 0xfe, 0x69, 0x84, 0x9a, 0xbf,
+	0x75, 0xb4, 0xad, 0x78, 0xa7, 0xb2, 0x1f, 0xfe, 0xa2, 0x21, 0x63, 0x61, 0x24, 0xf1, 0x8b, 0xcd,
+	0x0e, 0x57, 0x27, 0xb8, 0x72, 0x93, 0x84, 0xad, 0xd6, 0xfb, 0x1f, 0xbf, 0x3e, 0xe9, 0xcf, 0xf0,
+	0x6e, 0xba, 0x6b, 0x17, 0x4b, 0xb6, 0x0f, 0xd4, 0xd0, 0x72, 0xbb, 0x9e, 0x2d, 0x5f, 0x96, 0xa7,
+	0x5d, 0xbf, 0xc4, 0xdf, 0x34, 0xb4, 0x7d, 0x2d, 0x66, 0xbc, 0x77, 0xd3, 0x34, 0xd5, 0xc6, 0x54,
+	0xda, 0xb7, 0x60, 0xca, 0x3b, 0xb5, 0xda, 0x99, 0xfb, 0x96, 0x45, 0x52, 0xf7, 0x57, 0x76, 0x2f,
+	0x16, 0x36, 0xf0, 0xa0, 0x7e, 0x79, 0x65, 0x7e, 0x3f, 0xc8, 0x84, 0xf6, 0xb5, 0x7a, 0xef, 0xa7,
+	0x86, 0x9e, 0x8e, 0x59, 0xb0, 0xb1, 0x77, 0x6f, 0xe7, 0xda, 0x2d, 0x0d, 0xd2, 0xb5, 0x19, 0x68,
+	0x6f, 0x8f, 0x72, 0xa6, 0xc7, 0x66, 0x34, 0xf4, 0x08, 0x8b, 0x3d, 0xdb, 0x83, 0x30, 0x5b, 0x2a,
+	0xf5, 0x07, 0x8b, 0x7c, 0xbe, 0xfe, 0x67, 0xd9, 0x51, 0xc5, 0x67, 0xbd, 0xd4, 0xef, 0x76, 0xbf,
+	0xea, 0xd5, 0xbe, 0x14, 0xec, 0xba, 0x9c, 0xc8, 0x32, 0xad, 0xce, 0x1a, 0x24, 0x6f, 0xcc, 0xbf,
+	0x2b, 0xc8, 0xb0, 0xeb, 0xf2, 0x61, 0x01, 0x19, 0x9e, 0x35, 0x86, 0x0a, 0x72, 0x5e, 0xce, 0x0c,
+	0xb4, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x47, 0xea, 0xc7, 0xac, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/feed_mapping_service.pb.go b/googleapis/ads/googleads/v0/services/feed_mapping_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6267bb52cfe0b706f54a64f9a008efb7fb9a9763
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/feed_mapping_service.pb.go
@@ -0,0 +1,500 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/feed_mapping_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [FeedMappingService.GetFeedMapping][google.ads.googleads.v0.services.FeedMappingService.GetFeedMapping].
+type GetFeedMappingRequest struct {
+	// The resource name of the feed mapping to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedMappingRequest) Reset()         { *m = GetFeedMappingRequest{} }
+func (m *GetFeedMappingRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedMappingRequest) ProtoMessage()    {}
+func (*GetFeedMappingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_service_ca2fb087e0520133, []int{0}
+}
+func (m *GetFeedMappingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedMappingRequest.Unmarshal(m, b)
+}
+func (m *GetFeedMappingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedMappingRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetFeedMappingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedMappingRequest.Merge(dst, src)
+}
+func (m *GetFeedMappingRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedMappingRequest.Size(m)
+}
+func (m *GetFeedMappingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedMappingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedMappingRequest proto.InternalMessageInfo
+
+func (m *GetFeedMappingRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [FeedMappingService.MutateFeedMappings][google.ads.googleads.v0.services.FeedMappingService.MutateFeedMappings].
+type MutateFeedMappingsRequest struct {
+	// The ID of the customer whose feed mappings are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual feed mappings.
+	Operations           []*FeedMappingOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateFeedMappingsRequest) Reset()         { *m = MutateFeedMappingsRequest{} }
+func (m *MutateFeedMappingsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedMappingsRequest) ProtoMessage()    {}
+func (*MutateFeedMappingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_service_ca2fb087e0520133, []int{1}
+}
+func (m *MutateFeedMappingsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedMappingsRequest.Unmarshal(m, b)
+}
+func (m *MutateFeedMappingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedMappingsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedMappingsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedMappingsRequest.Merge(dst, src)
+}
+func (m *MutateFeedMappingsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedMappingsRequest.Size(m)
+}
+func (m *MutateFeedMappingsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedMappingsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedMappingsRequest proto.InternalMessageInfo
+
+func (m *MutateFeedMappingsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateFeedMappingsRequest) GetOperations() []*FeedMappingOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, remove) on a feed mapping.
+type FeedMappingOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*FeedMappingOperation_Create
+	//	*FeedMappingOperation_Remove
+	Operation            isFeedMappingOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *FeedMappingOperation) Reset()         { *m = FeedMappingOperation{} }
+func (m *FeedMappingOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedMappingOperation) ProtoMessage()    {}
+func (*FeedMappingOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_service_ca2fb087e0520133, []int{2}
+}
+func (m *FeedMappingOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedMappingOperation.Unmarshal(m, b)
+}
+func (m *FeedMappingOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedMappingOperation.Marshal(b, m, deterministic)
+}
+func (dst *FeedMappingOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMappingOperation.Merge(dst, src)
+}
+func (m *FeedMappingOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedMappingOperation.Size(m)
+}
+func (m *FeedMappingOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedMappingOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedMappingOperation proto.InternalMessageInfo
+
+type isFeedMappingOperation_Operation interface {
+	isFeedMappingOperation_Operation()
+}
+
+type FeedMappingOperation_Create struct {
+	Create *resources.FeedMapping `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type FeedMappingOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*FeedMappingOperation_Create) isFeedMappingOperation_Operation() {}
+
+func (*FeedMappingOperation_Remove) isFeedMappingOperation_Operation() {}
+
+func (m *FeedMappingOperation) GetOperation() isFeedMappingOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *FeedMappingOperation) GetCreate() *resources.FeedMapping {
+	if x, ok := m.GetOperation().(*FeedMappingOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *FeedMappingOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*FeedMappingOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*FeedMappingOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _FeedMappingOperation_OneofMarshaler, _FeedMappingOperation_OneofUnmarshaler, _FeedMappingOperation_OneofSizer, []interface{}{
+		(*FeedMappingOperation_Create)(nil),
+		(*FeedMappingOperation_Remove)(nil),
+	}
+}
+
+func _FeedMappingOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*FeedMappingOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *FeedMappingOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *FeedMappingOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("FeedMappingOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _FeedMappingOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*FeedMappingOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.FeedMapping)
+		err := b.DecodeMessage(msg)
+		m.Operation = &FeedMappingOperation_Create{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &FeedMappingOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _FeedMappingOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*FeedMappingOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *FeedMappingOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *FeedMappingOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a feed mapping mutate.
+type MutateFeedMappingsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateFeedMappingResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MutateFeedMappingsResponse) Reset()         { *m = MutateFeedMappingsResponse{} }
+func (m *MutateFeedMappingsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedMappingsResponse) ProtoMessage()    {}
+func (*MutateFeedMappingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_service_ca2fb087e0520133, []int{3}
+}
+func (m *MutateFeedMappingsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedMappingsResponse.Unmarshal(m, b)
+}
+func (m *MutateFeedMappingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedMappingsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedMappingsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedMappingsResponse.Merge(dst, src)
+}
+func (m *MutateFeedMappingsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedMappingsResponse.Size(m)
+}
+func (m *MutateFeedMappingsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedMappingsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedMappingsResponse proto.InternalMessageInfo
+
+func (m *MutateFeedMappingsResponse) GetResults() []*MutateFeedMappingResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the feed mapping mutate.
+type MutateFeedMappingResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedMappingResult) Reset()         { *m = MutateFeedMappingResult{} }
+func (m *MutateFeedMappingResult) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedMappingResult) ProtoMessage()    {}
+func (*MutateFeedMappingResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_mapping_service_ca2fb087e0520133, []int{4}
+}
+func (m *MutateFeedMappingResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedMappingResult.Unmarshal(m, b)
+}
+func (m *MutateFeedMappingResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedMappingResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedMappingResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedMappingResult.Merge(dst, src)
+}
+func (m *MutateFeedMappingResult) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedMappingResult.Size(m)
+}
+func (m *MutateFeedMappingResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedMappingResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedMappingResult proto.InternalMessageInfo
+
+func (m *MutateFeedMappingResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedMappingRequest)(nil), "google.ads.googleads.v0.services.GetFeedMappingRequest")
+	proto.RegisterType((*MutateFeedMappingsRequest)(nil), "google.ads.googleads.v0.services.MutateFeedMappingsRequest")
+	proto.RegisterType((*FeedMappingOperation)(nil), "google.ads.googleads.v0.services.FeedMappingOperation")
+	proto.RegisterType((*MutateFeedMappingsResponse)(nil), "google.ads.googleads.v0.services.MutateFeedMappingsResponse")
+	proto.RegisterType((*MutateFeedMappingResult)(nil), "google.ads.googleads.v0.services.MutateFeedMappingResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// FeedMappingServiceClient is the client API for FeedMappingService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedMappingServiceClient interface {
+	// Returns the requested feed mapping in full detail.
+	GetFeedMapping(ctx context.Context, in *GetFeedMappingRequest, opts ...grpc.CallOption) (*resources.FeedMapping, error)
+	// Creates or removes feed mappings. Operation statuses are
+	// returned.
+	MutateFeedMappings(ctx context.Context, in *MutateFeedMappingsRequest, opts ...grpc.CallOption) (*MutateFeedMappingsResponse, error)
+}
+
+type feedMappingServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewFeedMappingServiceClient(cc *grpc.ClientConn) FeedMappingServiceClient {
+	return &feedMappingServiceClient{cc}
+}
+
+func (c *feedMappingServiceClient) GetFeedMapping(ctx context.Context, in *GetFeedMappingRequest, opts ...grpc.CallOption) (*resources.FeedMapping, error) {
+	out := new(resources.FeedMapping)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.FeedMappingService/GetFeedMapping", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *feedMappingServiceClient) MutateFeedMappings(ctx context.Context, in *MutateFeedMappingsRequest, opts ...grpc.CallOption) (*MutateFeedMappingsResponse, error) {
+	out := new(MutateFeedMappingsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.FeedMappingService/MutateFeedMappings", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedMappingServiceServer is the server API for FeedMappingService service.
+type FeedMappingServiceServer interface {
+	// Returns the requested feed mapping in full detail.
+	GetFeedMapping(context.Context, *GetFeedMappingRequest) (*resources.FeedMapping, error)
+	// Creates or removes feed mappings. Operation statuses are
+	// returned.
+	MutateFeedMappings(context.Context, *MutateFeedMappingsRequest) (*MutateFeedMappingsResponse, error)
+}
+
+func RegisterFeedMappingServiceServer(s *grpc.Server, srv FeedMappingServiceServer) {
+	s.RegisterService(&_FeedMappingService_serviceDesc, srv)
+}
+
+func _FeedMappingService_GetFeedMapping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedMappingRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedMappingServiceServer).GetFeedMapping(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.FeedMappingService/GetFeedMapping",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedMappingServiceServer).GetFeedMapping(ctx, req.(*GetFeedMappingRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _FeedMappingService_MutateFeedMappings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateFeedMappingsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedMappingServiceServer).MutateFeedMappings(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.FeedMappingService/MutateFeedMappings",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedMappingServiceServer).MutateFeedMappings(ctx, req.(*MutateFeedMappingsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedMappingService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.FeedMappingService",
+	HandlerType: (*FeedMappingServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeedMapping",
+			Handler:    _FeedMappingService_GetFeedMapping_Handler,
+		},
+		{
+			MethodName: "MutateFeedMappings",
+			Handler:    _FeedMappingService_MutateFeedMappings_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/feed_mapping_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/feed_mapping_service.proto", fileDescriptor_feed_mapping_service_ca2fb087e0520133)
+}
+
+var fileDescriptor_feed_mapping_service_ca2fb087e0520133 = []byte{
+	// 534 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xb1, 0x8e, 0xd3, 0x40,
+	0x10, 0xc5, 0x89, 0x14, 0x74, 0x13, 0xa0, 0x58, 0x81, 0x2e, 0x44, 0x48, 0x44, 0x86, 0xe2, 0x94,
+	0x62, 0x1d, 0x02, 0x0a, 0xe2, 0x92, 0x43, 0x4a, 0x0a, 0x12, 0x8a, 0x83, 0x93, 0x4f, 0x4a, 0x81,
+	0x22, 0x45, 0x4b, 0x3c, 0x58, 0x96, 0x62, 0xaf, 0x6f, 0x77, 0x9d, 0xe6, 0x74, 0x0d, 0x0d, 0x1f,
+	0x00, 0x05, 0x35, 0x25, 0x1d, 0xbf, 0x81, 0x44, 0x45, 0xc1, 0x0f, 0xf0, 0x21, 0xc8, 0x5e, 0x6f,
+	0x70, 0x48, 0xa2, 0x70, 0xd7, 0x8d, 0xd7, 0xf3, 0xde, 0xcc, 0x7b, 0x3b, 0x3b, 0xd0, 0xf5, 0x39,
+	0xf7, 0xe7, 0xe8, 0x30, 0x4f, 0x3a, 0x3a, 0x4c, 0xa3, 0x45, 0xcb, 0x91, 0x28, 0x16, 0xc1, 0x0c,
+	0xa5, 0xf3, 0x0e, 0xd1, 0x9b, 0x86, 0x2c, 0x8e, 0x83, 0xc8, 0x9f, 0xe6, 0xa7, 0x34, 0x16, 0x5c,
+	0x71, 0xd2, 0xd0, 0x08, 0xca, 0x3c, 0x49, 0x97, 0x60, 0xba, 0x68, 0x51, 0x03, 0xae, 0x3f, 0xd9,
+	0x46, 0x2f, 0x50, 0xf2, 0x44, 0xfc, 0xcb, 0xaf, 0x79, 0xeb, 0xf7, 0x0c, 0x2a, 0x0e, 0x1c, 0x16,
+	0x45, 0x5c, 0x31, 0x15, 0xf0, 0x48, 0xea, 0xbf, 0x76, 0x0f, 0xee, 0x0c, 0x51, 0xbd, 0x40, 0xf4,
+	0x8e, 0x35, 0xca, 0xc5, 0xb3, 0x04, 0xa5, 0x22, 0x0f, 0xe0, 0xa6, 0xa1, 0x9d, 0x46, 0x2c, 0xc4,
+	0x9a, 0xd5, 0xb0, 0x0e, 0xf6, 0xdc, 0x1b, 0xe6, 0xf0, 0x15, 0x0b, 0xd1, 0xfe, 0x64, 0xc1, 0xdd,
+	0xe3, 0x44, 0x31, 0x85, 0x05, 0x06, 0x69, 0x28, 0xee, 0x43, 0x75, 0x96, 0x48, 0xc5, 0x43, 0x14,
+	0xd3, 0xc0, 0xcb, 0x09, 0xc0, 0x1c, 0xbd, 0xf4, 0xc8, 0x18, 0x80, 0xc7, 0x28, 0x74, 0x43, 0xb5,
+	0x52, 0xa3, 0x7c, 0x50, 0x6d, 0x77, 0xe8, 0x2e, 0x1f, 0x68, 0xa1, 0xd6, 0x6b, 0x03, 0x77, 0x0b,
+	0x4c, 0xf6, 0x07, 0x0b, 0x6e, 0x6f, 0x4a, 0x22, 0x23, 0xa8, 0xcc, 0x04, 0x32, 0xa5, 0xd5, 0x54,
+	0xdb, 0x74, 0x6b, 0xb1, 0xa5, 0xa5, 0xc5, 0x6a, 0xa3, 0x6b, 0x6e, 0x8e, 0x27, 0x35, 0xa8, 0x08,
+	0x0c, 0xf9, 0x02, 0x6b, 0xe5, 0x54, 0x56, 0xfa, 0x47, 0x7f, 0x0f, 0xaa, 0xb0, 0xb7, 0x6c, 0xc5,
+	0x3e, 0x83, 0xfa, 0x26, 0x7f, 0x64, 0xcc, 0x23, 0x89, 0xe4, 0x14, 0xae, 0x0b, 0x94, 0xc9, 0x5c,
+	0x19, 0xf1, 0xcf, 0x76, 0x8b, 0x5f, 0xa3, 0x73, 0x33, 0x06, 0xd7, 0x30, 0xd9, 0xcf, 0x61, 0x7f,
+	0x4b, 0xce, 0x7f, 0xdd, 0x69, 0xfb, 0x73, 0x19, 0x48, 0x01, 0x7a, 0xaa, 0x0b, 0x93, 0x6f, 0x16,
+	0xdc, 0x5a, 0x9d, 0x14, 0xf2, 0x74, 0x77, 0xb7, 0x1b, 0x67, 0xab, 0x7e, 0x49, 0xdb, 0xed, 0xce,
+	0xfb, 0x9f, 0xbf, 0x3f, 0x96, 0x5a, 0x84, 0xa6, 0xc3, 0x7e, 0xbe, 0x22, 0xe1, 0xc8, 0x8c, 0x93,
+	0x74, 0x9a, 0xd9, 0xf4, 0x1b, 0x93, 0x9d, 0xe6, 0x05, 0xf9, 0x61, 0x01, 0x59, 0xb7, 0x9f, 0x74,
+	0xaf, 0xe0, 0xb2, 0x19, 0xea, 0x7a, 0xef, 0x6a, 0x60, 0x7d, 0xe3, 0x76, 0x2f, 0x53, 0xd2, 0xb1,
+	0x1f, 0xa5, 0x4a, 0xfe, 0xb6, 0x7e, 0x5e, 0x78, 0x27, 0x47, 0xcd, 0x8b, 0x15, 0x21, 0x87, 0x61,
+	0x46, 0x77, 0x68, 0x35, 0x07, 0xbf, 0x2c, 0x78, 0x38, 0xe3, 0xe1, 0xce, 0x0e, 0x06, 0xfb, 0xeb,
+	0x17, 0x78, 0x92, 0x3e, 0xf7, 0x13, 0xeb, 0xcd, 0x28, 0x07, 0xfb, 0x7c, 0xce, 0x22, 0x9f, 0x72,
+	0xe1, 0x3b, 0x3e, 0x46, 0xd9, 0x32, 0x30, 0x4b, 0x25, 0x0e, 0xe4, 0xf6, 0x15, 0xd6, 0x35, 0xc1,
+	0x97, 0x52, 0x79, 0xd8, 0xef, 0x7f, 0x2d, 0x35, 0x86, 0x9a, 0xb0, 0xef, 0x49, 0xaa, 0xc3, 0x34,
+	0x1a, 0xb7, 0x68, 0x5e, 0x58, 0x7e, 0x37, 0x29, 0x93, 0xbe, 0x27, 0x27, 0xcb, 0x94, 0xc9, 0xb8,
+	0x35, 0x31, 0x29, 0x6f, 0x2b, 0x59, 0x03, 0x8f, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xef, 0x54,
+	0xde, 0x9f, 0x42, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/feed_service.pb.go b/googleapis/ads/googleads/v0/services/feed_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..84c25f42a72b955c01769657c2a1d7c320bf8cbd
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/feed_service.pb.go
@@ -0,0 +1,546 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/feed_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [FeedService.GetFeed][google.ads.googleads.v0.services.FeedService.GetFeed].
+type GetFeedRequest struct {
+	// The resource name of the feed to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetFeedRequest) Reset()         { *m = GetFeedRequest{} }
+func (m *GetFeedRequest) String() string { return proto.CompactTextString(m) }
+func (*GetFeedRequest) ProtoMessage()    {}
+func (*GetFeedRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_service_49f38c65d8e855b8, []int{0}
+}
+func (m *GetFeedRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetFeedRequest.Unmarshal(m, b)
+}
+func (m *GetFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetFeedRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetFeedRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetFeedRequest.Merge(dst, src)
+}
+func (m *GetFeedRequest) XXX_Size() int {
+	return xxx_messageInfo_GetFeedRequest.Size(m)
+}
+func (m *GetFeedRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetFeedRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetFeedRequest proto.InternalMessageInfo
+
+func (m *GetFeedRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [FeedService.MutateFeeds][google.ads.googleads.v0.services.FeedService.MutateFeeds].
+type MutateFeedsRequest struct {
+	// The ID of the customer whose feeds are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual feeds.
+	Operations           []*FeedOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *MutateFeedsRequest) Reset()         { *m = MutateFeedsRequest{} }
+func (m *MutateFeedsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedsRequest) ProtoMessage()    {}
+func (*MutateFeedsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_service_49f38c65d8e855b8, []int{1}
+}
+func (m *MutateFeedsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedsRequest.Unmarshal(m, b)
+}
+func (m *MutateFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedsRequest.Merge(dst, src)
+}
+func (m *MutateFeedsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedsRequest.Size(m)
+}
+func (m *MutateFeedsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedsRequest proto.InternalMessageInfo
+
+func (m *MutateFeedsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateFeedsRequest) GetOperations() []*FeedOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on an feed.
+type FeedOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*FeedOperation_Create
+	//	*FeedOperation_Update
+	//	*FeedOperation_Remove
+	Operation            isFeedOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *FeedOperation) Reset()         { *m = FeedOperation{} }
+func (m *FeedOperation) String() string { return proto.CompactTextString(m) }
+func (*FeedOperation) ProtoMessage()    {}
+func (*FeedOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_service_49f38c65d8e855b8, []int{2}
+}
+func (m *FeedOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FeedOperation.Unmarshal(m, b)
+}
+func (m *FeedOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FeedOperation.Marshal(b, m, deterministic)
+}
+func (dst *FeedOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedOperation.Merge(dst, src)
+}
+func (m *FeedOperation) XXX_Size() int {
+	return xxx_messageInfo_FeedOperation.Size(m)
+}
+func (m *FeedOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_FeedOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FeedOperation proto.InternalMessageInfo
+
+func (m *FeedOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isFeedOperation_Operation interface {
+	isFeedOperation_Operation()
+}
+
+type FeedOperation_Create struct {
+	Create *resources.Feed `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type FeedOperation_Update struct {
+	Update *resources.Feed `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type FeedOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*FeedOperation_Create) isFeedOperation_Operation() {}
+
+func (*FeedOperation_Update) isFeedOperation_Operation() {}
+
+func (*FeedOperation_Remove) isFeedOperation_Operation() {}
+
+func (m *FeedOperation) GetOperation() isFeedOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *FeedOperation) GetCreate() *resources.Feed {
+	if x, ok := m.GetOperation().(*FeedOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *FeedOperation) GetUpdate() *resources.Feed {
+	if x, ok := m.GetOperation().(*FeedOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *FeedOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*FeedOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*FeedOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _FeedOperation_OneofMarshaler, _FeedOperation_OneofUnmarshaler, _FeedOperation_OneofSizer, []interface{}{
+		(*FeedOperation_Create)(nil),
+		(*FeedOperation_Update)(nil),
+		(*FeedOperation_Remove)(nil),
+	}
+}
+
+func _FeedOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*FeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *FeedOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *FeedOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *FeedOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("FeedOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _FeedOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*FeedOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.Feed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &FeedOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.Feed)
+		err := b.DecodeMessage(msg)
+		m.Operation = &FeedOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &FeedOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _FeedOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*FeedOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *FeedOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *FeedOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *FeedOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for an feed mutate.
+type MutateFeedsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateFeedResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *MutateFeedsResponse) Reset()         { *m = MutateFeedsResponse{} }
+func (m *MutateFeedsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedsResponse) ProtoMessage()    {}
+func (*MutateFeedsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_service_49f38c65d8e855b8, []int{3}
+}
+func (m *MutateFeedsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedsResponse.Unmarshal(m, b)
+}
+func (m *MutateFeedsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedsResponse.Merge(dst, src)
+}
+func (m *MutateFeedsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedsResponse.Size(m)
+}
+func (m *MutateFeedsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedsResponse proto.InternalMessageInfo
+
+func (m *MutateFeedsResponse) GetResults() []*MutateFeedResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the feed mutate.
+type MutateFeedResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateFeedResult) Reset()         { *m = MutateFeedResult{} }
+func (m *MutateFeedResult) String() string { return proto.CompactTextString(m) }
+func (*MutateFeedResult) ProtoMessage()    {}
+func (*MutateFeedResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_feed_service_49f38c65d8e855b8, []int{4}
+}
+func (m *MutateFeedResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateFeedResult.Unmarshal(m, b)
+}
+func (m *MutateFeedResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateFeedResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateFeedResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateFeedResult.Merge(dst, src)
+}
+func (m *MutateFeedResult) XXX_Size() int {
+	return xxx_messageInfo_MutateFeedResult.Size(m)
+}
+func (m *MutateFeedResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateFeedResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateFeedResult proto.InternalMessageInfo
+
+func (m *MutateFeedResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetFeedRequest)(nil), "google.ads.googleads.v0.services.GetFeedRequest")
+	proto.RegisterType((*MutateFeedsRequest)(nil), "google.ads.googleads.v0.services.MutateFeedsRequest")
+	proto.RegisterType((*FeedOperation)(nil), "google.ads.googleads.v0.services.FeedOperation")
+	proto.RegisterType((*MutateFeedsResponse)(nil), "google.ads.googleads.v0.services.MutateFeedsResponse")
+	proto.RegisterType((*MutateFeedResult)(nil), "google.ads.googleads.v0.services.MutateFeedResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// FeedServiceClient is the client API for FeedService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FeedServiceClient interface {
+	// Returns the requested feed in full detail.
+	GetFeed(ctx context.Context, in *GetFeedRequest, opts ...grpc.CallOption) (*resources.Feed, error)
+	// Creates, updates, or removes feeds. Operation statuses are
+	// returned.
+	MutateFeeds(ctx context.Context, in *MutateFeedsRequest, opts ...grpc.CallOption) (*MutateFeedsResponse, error)
+}
+
+type feedServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewFeedServiceClient(cc *grpc.ClientConn) FeedServiceClient {
+	return &feedServiceClient{cc}
+}
+
+func (c *feedServiceClient) GetFeed(ctx context.Context, in *GetFeedRequest, opts ...grpc.CallOption) (*resources.Feed, error) {
+	out := new(resources.Feed)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.FeedService/GetFeed", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *feedServiceClient) MutateFeeds(ctx context.Context, in *MutateFeedsRequest, opts ...grpc.CallOption) (*MutateFeedsResponse, error) {
+	out := new(MutateFeedsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.FeedService/MutateFeeds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// FeedServiceServer is the server API for FeedService service.
+type FeedServiceServer interface {
+	// Returns the requested feed in full detail.
+	GetFeed(context.Context, *GetFeedRequest) (*resources.Feed, error)
+	// Creates, updates, or removes feeds. Operation statuses are
+	// returned.
+	MutateFeeds(context.Context, *MutateFeedsRequest) (*MutateFeedsResponse, error)
+}
+
+func RegisterFeedServiceServer(s *grpc.Server, srv FeedServiceServer) {
+	s.RegisterService(&_FeedService_serviceDesc, srv)
+}
+
+func _FeedService_GetFeed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetFeedRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedServiceServer).GetFeed(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.FeedService/GetFeed",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedServiceServer).GetFeed(ctx, req.(*GetFeedRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _FeedService_MutateFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateFeedsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(FeedServiceServer).MutateFeeds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.FeedService/MutateFeeds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(FeedServiceServer).MutateFeeds(ctx, req.(*MutateFeedsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _FeedService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.FeedService",
+	HandlerType: (*FeedServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetFeed",
+			Handler:    _FeedService_GetFeed_Handler,
+		},
+		{
+			MethodName: "MutateFeeds",
+			Handler:    _FeedService_MutateFeeds_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/feed_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/feed_service.proto", fileDescriptor_feed_service_49f38c65d8e855b8)
+}
+
+var fileDescriptor_feed_service_49f38c65d8e855b8 = []byte{
+	// 578 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x41, 0x6b, 0x13, 0x41,
+	0x14, 0x76, 0x37, 0x92, 0xd2, 0x59, 0x2b, 0x65, 0xbc, 0x2c, 0x41, 0x30, 0xac, 0x42, 0x63, 0x90,
+	0x99, 0x90, 0x1a, 0x84, 0x96, 0x1e, 0x92, 0x43, 0x53, 0xc1, 0xda, 0xb2, 0x42, 0x0f, 0x12, 0x08,
+	0xd3, 0xdd, 0x97, 0x65, 0x69, 0x76, 0x67, 0xdd, 0x99, 0xcd, 0xa5, 0xf4, 0xe2, 0xc1, 0x3f, 0x20,
+	0xfe, 0x01, 0x8f, 0xde, 0xfc, 0x1b, 0x9e, 0x04, 0x4f, 0xde, 0xfd, 0x13, 0xde, 0x64, 0x76, 0x76,
+	0xd2, 0x44, 0x08, 0x69, 0x6e, 0x6f, 0x76, 0xde, 0xf7, 0xbd, 0x6f, 0xbe, 0xf7, 0xde, 0xa2, 0xfd,
+	0x88, 0xf3, 0x68, 0x0a, 0x94, 0x85, 0x82, 0xea, 0x50, 0x45, 0xb3, 0x0e, 0x15, 0x90, 0xcf, 0xe2,
+	0x00, 0x04, 0x9d, 0x00, 0x84, 0xe3, 0xea, 0x44, 0xb2, 0x9c, 0x4b, 0x8e, 0x9b, 0x3a, 0x93, 0xb0,
+	0x50, 0x90, 0x39, 0x88, 0xcc, 0x3a, 0xc4, 0x80, 0x1a, 0x2f, 0x56, 0xd1, 0xe6, 0x20, 0x78, 0x91,
+	0x1b, 0x5e, 0xcd, 0xd7, 0x78, 0x6c, 0xb2, 0xb3, 0x98, 0xb2, 0x34, 0xe5, 0x92, 0xc9, 0x98, 0xa7,
+	0xa2, 0xba, 0xad, 0xaa, 0xd1, 0xf2, 0x74, 0x59, 0x4c, 0xe8, 0x24, 0x86, 0x69, 0x38, 0x4e, 0x98,
+	0xb8, 0xd2, 0x19, 0x5e, 0x0f, 0x3d, 0x1c, 0x82, 0x3c, 0x06, 0x08, 0x7d, 0xf8, 0x50, 0x80, 0x90,
+	0xf8, 0x29, 0xda, 0x31, 0x95, 0xc6, 0x29, 0x4b, 0xc0, 0xb5, 0x9a, 0x56, 0x6b, 0xdb, 0x7f, 0x60,
+	0x3e, 0xbe, 0x65, 0x09, 0x78, 0x9f, 0x2c, 0x84, 0x4f, 0x0b, 0xc9, 0x24, 0x28, 0xa8, 0x30, 0xd8,
+	0x27, 0xc8, 0x09, 0x0a, 0x21, 0x79, 0x02, 0xf9, 0x38, 0x0e, 0x2b, 0x24, 0x32, 0x9f, 0x5e, 0x87,
+	0xf8, 0x0c, 0x21, 0x9e, 0x41, 0xae, 0x45, 0xba, 0x76, 0xb3, 0xd6, 0x72, 0xba, 0x94, 0xac, 0xf3,
+	0x84, 0xa8, 0x22, 0x67, 0x06, 0xe7, 0x2f, 0x50, 0x78, 0x7f, 0x2d, 0xb4, 0xb3, 0x74, 0x8b, 0x0f,
+	0x91, 0x53, 0x64, 0x21, 0x93, 0x50, 0x3e, 0xd3, 0xbd, 0xdf, 0xb4, 0x5a, 0x4e, 0xb7, 0x61, 0x6a,
+	0x18, 0x27, 0xc8, 0xb1, 0x72, 0xe2, 0x94, 0x89, 0x2b, 0x1f, 0xe9, 0x74, 0x15, 0xe3, 0x3e, 0xaa,
+	0x07, 0x39, 0x30, 0xa9, 0x5f, 0xed, 0x74, 0xf7, 0x56, 0x6a, 0x9b, 0x77, 0xa3, 0x14, 0x77, 0x72,
+	0xcf, 0xaf, 0x80, 0x8a, 0x42, 0x13, 0xba, 0xf6, 0xc6, 0x14, 0x1a, 0x88, 0x5d, 0x54, 0xcf, 0x21,
+	0xe1, 0x33, 0x70, 0x6b, 0xca, 0x41, 0x75, 0xa3, 0xcf, 0x03, 0x07, 0x6d, 0xcf, 0x1f, 0xef, 0x05,
+	0xe8, 0xd1, 0x52, 0x0f, 0x44, 0xc6, 0x53, 0x01, 0xf8, 0x0d, 0xda, 0xca, 0x41, 0x14, 0x53, 0x69,
+	0x0c, 0xee, 0xae, 0x37, 0xf8, 0x96, 0xc7, 0x2f, 0xa1, 0xbe, 0xa1, 0xf0, 0x5e, 0xa1, 0xdd, 0xff,
+	0x2f, 0xef, 0x34, 0x22, 0xdd, 0xdf, 0x36, 0x72, 0x14, 0xe6, 0x9d, 0xae, 0x81, 0xbf, 0x58, 0x68,
+	0xab, 0x1a, 0x35, 0xdc, 0x59, 0xaf, 0x68, 0x79, 0x2a, 0x1b, 0x77, 0x75, 0xd1, 0xa3, 0x1f, 0x7f,
+	0xfd, 0xf9, 0x6c, 0x3f, 0xc7, 0x7b, 0x6a, 0x65, 0xae, 0x97, 0x64, 0x1e, 0x99, 0x41, 0x14, 0xb4,
+	0x5d, 0xee, 0x90, 0xa0, 0xed, 0x1b, 0xfc, 0xdd, 0x42, 0xce, 0x82, 0x8d, 0xf8, 0xe5, 0x26, 0x6e,
+	0x99, 0xc9, 0x6f, 0xf4, 0x36, 0x44, 0xe9, 0x5e, 0x79, 0xbd, 0x52, 0x2d, 0xf5, 0xda, 0x4a, 0xed,
+	0xad, 0xbc, 0xeb, 0x85, 0x2d, 0x3a, 0x6a, 0xdf, 0x68, 0xb1, 0x07, 0x49, 0x49, 0x70, 0x60, 0xb5,
+	0x07, 0x3f, 0x2d, 0xf4, 0x2c, 0xe0, 0xc9, 0xda, 0x9a, 0x83, 0xdd, 0x85, 0x0e, 0x9c, 0xab, 0xd1,
+	0x3f, 0xb7, 0xde, 0x9f, 0x54, 0xa8, 0x88, 0x4f, 0x59, 0x1a, 0x11, 0x9e, 0x47, 0x34, 0x82, 0xb4,
+	0x5c, 0x0c, 0xf3, 0xc3, 0xc9, 0x62, 0xb1, 0xfa, 0xb7, 0x76, 0x68, 0x82, 0xaf, 0x76, 0x6d, 0xd8,
+	0xef, 0x7f, 0xb3, 0x9b, 0x43, 0x4d, 0xd8, 0x0f, 0x05, 0xd1, 0xa1, 0x8a, 0x2e, 0x3a, 0xa4, 0x2a,
+	0x2c, 0x7e, 0x98, 0x94, 0x51, 0x3f, 0x14, 0xa3, 0x79, 0xca, 0xe8, 0xa2, 0x33, 0x32, 0x29, 0x97,
+	0xf5, 0x52, 0xc0, 0xfe, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x35, 0xe0, 0x55, 0x56, 0x05,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/gender_view_service.pb.go b/googleapis/ads/googleads/v0/services/gender_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..29c710c0f87fe30fd9688cba549353034b499b4f
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/gender_view_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/gender_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [GenderViewService.GetGenderView][google.ads.googleads.v0.services.GenderViewService.GetGenderView].
+type GetGenderViewRequest struct {
+	// The resource name of the gender view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGenderViewRequest) Reset()         { *m = GetGenderViewRequest{} }
+func (m *GetGenderViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGenderViewRequest) ProtoMessage()    {}
+func (*GetGenderViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_gender_view_service_24d25db8a4dd9eb3, []int{0}
+}
+func (m *GetGenderViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGenderViewRequest.Unmarshal(m, b)
+}
+func (m *GetGenderViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGenderViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetGenderViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGenderViewRequest.Merge(dst, src)
+}
+func (m *GetGenderViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGenderViewRequest.Size(m)
+}
+func (m *GetGenderViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGenderViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGenderViewRequest proto.InternalMessageInfo
+
+func (m *GetGenderViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetGenderViewRequest)(nil), "google.ads.googleads.v0.services.GetGenderViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// GenderViewServiceClient is the client API for GenderViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GenderViewServiceClient interface {
+	// Returns the requested gender view in full detail.
+	GetGenderView(ctx context.Context, in *GetGenderViewRequest, opts ...grpc.CallOption) (*resources.GenderView, error)
+}
+
+type genderViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewGenderViewServiceClient(cc *grpc.ClientConn) GenderViewServiceClient {
+	return &genderViewServiceClient{cc}
+}
+
+func (c *genderViewServiceClient) GetGenderView(ctx context.Context, in *GetGenderViewRequest, opts ...grpc.CallOption) (*resources.GenderView, error) {
+	out := new(resources.GenderView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.GenderViewService/GetGenderView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GenderViewServiceServer is the server API for GenderViewService service.
+type GenderViewServiceServer interface {
+	// Returns the requested gender view in full detail.
+	GetGenderView(context.Context, *GetGenderViewRequest) (*resources.GenderView, error)
+}
+
+func RegisterGenderViewServiceServer(s *grpc.Server, srv GenderViewServiceServer) {
+	s.RegisterService(&_GenderViewService_serviceDesc, srv)
+}
+
+func _GenderViewService_GetGenderView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGenderViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GenderViewServiceServer).GetGenderView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.GenderViewService/GetGenderView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GenderViewServiceServer).GetGenderView(ctx, req.(*GetGenderViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GenderViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.GenderViewService",
+	HandlerType: (*GenderViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGenderView",
+			Handler:    _GenderViewService_GetGenderView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/gender_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/gender_view_service.proto", fileDescriptor_gender_view_service_24d25db8a4dd9eb3)
+}
+
+var fileDescriptor_gender_view_service_24d25db8a4dd9eb3 = []byte{
+	// 340 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4a, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xf4, 0xd4, 0xbc, 0x94, 0xd4, 0xa2, 0xf8, 0xb2, 0xcc,
+	0xd4, 0xf2, 0x78, 0xa8, 0xa0, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02, 0x44, 0x83, 0x5e,
+	0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xaf, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xaf, 0x94, 0x31, 0x2e, 0xd3,
+	0x8b, 0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0xd0, 0x8c, 0x87, 0x18, 0x2b, 0x25, 0x03, 0xd3, 0x54, 0x90,
+	0xa9, 0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c, 0x91, 0x55, 0xb2,
+	0xe6, 0x12, 0x71, 0x4f, 0x2d, 0x71, 0x07, 0xeb, 0x0a, 0xcb, 0x4c, 0x2d, 0x0f, 0x4a, 0x2d, 0x2c,
+	0x4d, 0x2d, 0x2e, 0x11, 0x52, 0xe6, 0xe2, 0x85, 0x19, 0x1a, 0x9f, 0x97, 0x98, 0x9b, 0x2a, 0xc1,
+	0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x03, 0x13, 0xf4, 0x4b, 0xcc, 0x4d, 0x35, 0x3a, 0xcc, 0xc8,
+	0x25, 0x88, 0xd0, 0x1a, 0x0c, 0x71, 0xa6, 0xd0, 0x5a, 0x46, 0x2e, 0x5e, 0x14, 0x33, 0x85, 0xcc,
+	0xf4, 0x08, 0x79, 0x4d, 0x0f, 0x9b, 0x23, 0xa4, 0x74, 0x71, 0xea, 0x83, 0x7b, 0x58, 0x0f, 0xa1,
+	0x4b, 0xc9, 0xb4, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0xfa, 0x42, 0xba, 0xa0, 0x20, 0xa9, 0x46, 0x71,
+	0xbe, 0x6d, 0x72, 0x69, 0x71, 0x49, 0x7e, 0x6e, 0x6a, 0x51, 0xb1, 0xbe, 0x16, 0x34, 0x8c, 0x40,
+	0x5a, 0x8a, 0xf5, 0xb5, 0x6a, 0x9d, 0xae, 0x31, 0x72, 0xa9, 0x24, 0xe7, 0xe7, 0x12, 0x74, 0xa3,
+	0x93, 0x18, 0x86, 0x5f, 0x03, 0x40, 0x61, 0x18, 0xc0, 0x18, 0xe5, 0x01, 0xd5, 0x9b, 0x9e, 0x9f,
+	0x93, 0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0x0e, 0xb2, 0x04, 0x1c, 0xc2, 0xb0, 0x88, 0x2a, 0xc8,
+	0x2c, 0xc6, 0x9d, 0x2a, 0xac, 0x61, 0x8c, 0x45, 0x4c, 0xcc, 0xee, 0x8e, 0x8e, 0xab, 0x98, 0x14,
+	0xdc, 0x21, 0x06, 0x3a, 0xa6, 0x14, 0xeb, 0x41, 0x98, 0x20, 0x56, 0x98, 0x81, 0x1e, 0xd4, 0xe2,
+	0xe2, 0x53, 0x30, 0x25, 0x31, 0x8e, 0x29, 0xc5, 0x31, 0x70, 0x25, 0x31, 0x61, 0x06, 0x31, 0x30,
+	0x25, 0x49, 0x6c, 0x60, 0x07, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xf5, 0x86, 0x9c,
+	0x95, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/geo_target_constant_service.pb.go b/googleapis/ads/googleads/v0/services/geo_target_constant_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c321becf9f1460d3e95de56d62d27b6896cafada
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/geo_target_constant_service.pb.go
@@ -0,0 +1,615 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/geo_target_constant_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [GeoTargetConstantService.GetGeoTargetConstant][google.ads.googleads.v0.services.GeoTargetConstantService.GetGeoTargetConstant].
+type GetGeoTargetConstantRequest struct {
+	// The resource name of the geo target constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGeoTargetConstantRequest) Reset()         { *m = GetGeoTargetConstantRequest{} }
+func (m *GetGeoTargetConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGeoTargetConstantRequest) ProtoMessage()    {}
+func (*GetGeoTargetConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b, []int{0}
+}
+func (m *GetGeoTargetConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGeoTargetConstantRequest.Unmarshal(m, b)
+}
+func (m *GetGeoTargetConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGeoTargetConstantRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetGeoTargetConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGeoTargetConstantRequest.Merge(dst, src)
+}
+func (m *GetGeoTargetConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGeoTargetConstantRequest.Size(m)
+}
+func (m *GetGeoTargetConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGeoTargetConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGeoTargetConstantRequest proto.InternalMessageInfo
+
+func (m *GetGeoTargetConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [GeoTargetConstantService.SuggestGeoTargetConstantsRequest][].
+type SuggestGeoTargetConstantsRequest struct {
+	// If possible, returned geo targets are translated using this locale. If not,
+	// en is used by default. This is also used as a hint for returned geo
+	// targets.
+	Locale *wrappers.StringValue `protobuf:"bytes,3,opt,name=locale,proto3" json:"locale,omitempty"`
+	// Returned geo targets are restricted to this country code.
+	CountryCode *wrappers.StringValue `protobuf:"bytes,5,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"`
+	// Required. A selector of geo target constants.
+	//
+	// Types that are valid to be assigned to Query:
+	//	*SuggestGeoTargetConstantsRequest_LocationNames_
+	//	*SuggestGeoTargetConstantsRequest_GeoTargets_
+	Query                isSuggestGeoTargetConstantsRequest_Query `protobuf_oneof:"query"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsRequest) Reset()         { *m = SuggestGeoTargetConstantsRequest{} }
+func (m *SuggestGeoTargetConstantsRequest) String() string { return proto.CompactTextString(m) }
+func (*SuggestGeoTargetConstantsRequest) ProtoMessage()    {}
+func (*SuggestGeoTargetConstantsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b, []int{1}
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest.Marshal(b, m, deterministic)
+}
+func (dst *SuggestGeoTargetConstantsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest.Merge(dst, src)
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest.Size(m)
+}
+func (m *SuggestGeoTargetConstantsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsRequest proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsRequest) GetLocale() *wrappers.StringValue {
+	if m != nil {
+		return m.Locale
+	}
+	return nil
+}
+
+func (m *SuggestGeoTargetConstantsRequest) GetCountryCode() *wrappers.StringValue {
+	if m != nil {
+		return m.CountryCode
+	}
+	return nil
+}
+
+type isSuggestGeoTargetConstantsRequest_Query interface {
+	isSuggestGeoTargetConstantsRequest_Query()
+}
+
+type SuggestGeoTargetConstantsRequest_LocationNames_ struct {
+	LocationNames *SuggestGeoTargetConstantsRequest_LocationNames `protobuf:"bytes,1,opt,name=location_names,json=locationNames,proto3,oneof"`
+}
+
+type SuggestGeoTargetConstantsRequest_GeoTargets_ struct {
+	GeoTargets *SuggestGeoTargetConstantsRequest_GeoTargets `protobuf:"bytes,2,opt,name=geo_targets,json=geoTargets,proto3,oneof"`
+}
+
+func (*SuggestGeoTargetConstantsRequest_LocationNames_) isSuggestGeoTargetConstantsRequest_Query() {}
+
+func (*SuggestGeoTargetConstantsRequest_GeoTargets_) isSuggestGeoTargetConstantsRequest_Query() {}
+
+func (m *SuggestGeoTargetConstantsRequest) GetQuery() isSuggestGeoTargetConstantsRequest_Query {
+	if m != nil {
+		return m.Query
+	}
+	return nil
+}
+
+func (m *SuggestGeoTargetConstantsRequest) GetLocationNames() *SuggestGeoTargetConstantsRequest_LocationNames {
+	if x, ok := m.GetQuery().(*SuggestGeoTargetConstantsRequest_LocationNames_); ok {
+		return x.LocationNames
+	}
+	return nil
+}
+
+func (m *SuggestGeoTargetConstantsRequest) GetGeoTargets() *SuggestGeoTargetConstantsRequest_GeoTargets {
+	if x, ok := m.GetQuery().(*SuggestGeoTargetConstantsRequest_GeoTargets_); ok {
+		return x.GeoTargets
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*SuggestGeoTargetConstantsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _SuggestGeoTargetConstantsRequest_OneofMarshaler, _SuggestGeoTargetConstantsRequest_OneofUnmarshaler, _SuggestGeoTargetConstantsRequest_OneofSizer, []interface{}{
+		(*SuggestGeoTargetConstantsRequest_LocationNames_)(nil),
+		(*SuggestGeoTargetConstantsRequest_GeoTargets_)(nil),
+	}
+}
+
+func _SuggestGeoTargetConstantsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*SuggestGeoTargetConstantsRequest)
+	// query
+	switch x := m.Query.(type) {
+	case *SuggestGeoTargetConstantsRequest_LocationNames_:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.LocationNames); err != nil {
+			return err
+		}
+	case *SuggestGeoTargetConstantsRequest_GeoTargets_:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.GeoTargets); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("SuggestGeoTargetConstantsRequest.Query has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _SuggestGeoTargetConstantsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*SuggestGeoTargetConstantsRequest)
+	switch tag {
+	case 1: // query.location_names
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(SuggestGeoTargetConstantsRequest_LocationNames)
+		err := b.DecodeMessage(msg)
+		m.Query = &SuggestGeoTargetConstantsRequest_LocationNames_{msg}
+		return true, err
+	case 2: // query.geo_targets
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(SuggestGeoTargetConstantsRequest_GeoTargets)
+		err := b.DecodeMessage(msg)
+		m.Query = &SuggestGeoTargetConstantsRequest_GeoTargets_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _SuggestGeoTargetConstantsRequest_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*SuggestGeoTargetConstantsRequest)
+	// query
+	switch x := m.Query.(type) {
+	case *SuggestGeoTargetConstantsRequest_LocationNames_:
+		s := proto.Size(x.LocationNames)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *SuggestGeoTargetConstantsRequest_GeoTargets_:
+		s := proto.Size(x.GeoTargets)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A list of location names.
+type SuggestGeoTargetConstantsRequest_LocationNames struct {
+	// A list of location names.
+	Names                []*wrappers.StringValue `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) Reset() {
+	*m = SuggestGeoTargetConstantsRequest_LocationNames{}
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) String() string {
+	return proto.CompactTextString(m)
+}
+func (*SuggestGeoTargetConstantsRequest_LocationNames) ProtoMessage() {}
+func (*SuggestGeoTargetConstantsRequest_LocationNames) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b, []int{1, 0}
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Marshal(b, m, deterministic)
+}
+func (dst *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Merge(dst, src)
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.Size(m)
+}
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsRequest_LocationNames proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsRequest_LocationNames) GetNames() []*wrappers.StringValue {
+	if m != nil {
+		return m.Names
+	}
+	return nil
+}
+
+// A list of geo target constant resource names.
+type SuggestGeoTargetConstantsRequest_GeoTargets struct {
+	// A list of geo target constant resource names.
+	GeoTargetConstants   []*wrappers.StringValue `protobuf:"bytes,1,rep,name=geo_target_constants,json=geoTargetConstants,proto3" json:"geo_target_constants,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) Reset() {
+	*m = SuggestGeoTargetConstantsRequest_GeoTargets{}
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) String() string {
+	return proto.CompactTextString(m)
+}
+func (*SuggestGeoTargetConstantsRequest_GeoTargets) ProtoMessage() {}
+func (*SuggestGeoTargetConstantsRequest_GeoTargets) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b, []int{1, 1}
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Marshal(b, m, deterministic)
+}
+func (dst *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Merge(dst, src)
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.Size(m)
+}
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsRequest_GeoTargets proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsRequest_GeoTargets) GetGeoTargetConstants() []*wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstants
+	}
+	return nil
+}
+
+// Response message for [GeoTargetConstantService.SuggestGeoTargetConstants][google.ads.googleads.v0.services.GeoTargetConstantService.SuggestGeoTargetConstants]
+type SuggestGeoTargetConstantsResponse struct {
+	// Geo target constant suggestions.
+	GeoTargetConstantSuggestions []*GeoTargetConstantSuggestion `protobuf:"bytes,1,rep,name=geo_target_constant_suggestions,json=geoTargetConstantSuggestions,proto3" json:"geo_target_constant_suggestions,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}                       `json:"-"`
+	XXX_unrecognized             []byte                         `json:"-"`
+	XXX_sizecache                int32                          `json:"-"`
+}
+
+func (m *SuggestGeoTargetConstantsResponse) Reset()         { *m = SuggestGeoTargetConstantsResponse{} }
+func (m *SuggestGeoTargetConstantsResponse) String() string { return proto.CompactTextString(m) }
+func (*SuggestGeoTargetConstantsResponse) ProtoMessage()    {}
+func (*SuggestGeoTargetConstantsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b, []int{2}
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SuggestGeoTargetConstantsResponse.Unmarshal(m, b)
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SuggestGeoTargetConstantsResponse.Marshal(b, m, deterministic)
+}
+func (dst *SuggestGeoTargetConstantsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SuggestGeoTargetConstantsResponse.Merge(dst, src)
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_Size() int {
+	return xxx_messageInfo_SuggestGeoTargetConstantsResponse.Size(m)
+}
+func (m *SuggestGeoTargetConstantsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SuggestGeoTargetConstantsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SuggestGeoTargetConstantsResponse proto.InternalMessageInfo
+
+func (m *SuggestGeoTargetConstantsResponse) GetGeoTargetConstantSuggestions() []*GeoTargetConstantSuggestion {
+	if m != nil {
+		return m.GeoTargetConstantSuggestions
+	}
+	return nil
+}
+
+// A geo target constant suggestion.
+type GeoTargetConstantSuggestion struct {
+	// The language this GeoTargetConstantSuggestion is currently translated to.
+	// It affects the name of geo target fields. For example, if locale=en, then
+	// name=Spain. If locale=es, then name=España. The default locale will be
+	// returned if no translation exists for the locale in the request.
+	Locale *wrappers.StringValue `protobuf:"bytes,1,opt,name=locale,proto3" json:"locale,omitempty"`
+	// Approximate user population that will be targeted, rounded to the
+	// nearest 100.
+	Reach *wrappers.Int64Value `protobuf:"bytes,2,opt,name=reach,proto3" json:"reach,omitempty"`
+	// If the request searched by location name, this is the location name that
+	// matched the geo target.
+	SearchTerm *wrappers.StringValue `protobuf:"bytes,3,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"`
+	// The GeoTargetConstant result.
+	GeoTargetConstant *resources.GeoTargetConstant `protobuf:"bytes,4,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	// The list of parents of the geo target constant.
+	GeoTargetConstantParents []*resources.GeoTargetConstant `protobuf:"bytes,5,rep,name=geo_target_constant_parents,json=geoTargetConstantParents,proto3" json:"geo_target_constant_parents,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}                       `json:"-"`
+	XXX_unrecognized         []byte                         `json:"-"`
+	XXX_sizecache            int32                          `json:"-"`
+}
+
+func (m *GeoTargetConstantSuggestion) Reset()         { *m = GeoTargetConstantSuggestion{} }
+func (m *GeoTargetConstantSuggestion) String() string { return proto.CompactTextString(m) }
+func (*GeoTargetConstantSuggestion) ProtoMessage()    {}
+func (*GeoTargetConstantSuggestion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b, []int{3}
+}
+func (m *GeoTargetConstantSuggestion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeoTargetConstantSuggestion.Unmarshal(m, b)
+}
+func (m *GeoTargetConstantSuggestion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeoTargetConstantSuggestion.Marshal(b, m, deterministic)
+}
+func (dst *GeoTargetConstantSuggestion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeoTargetConstantSuggestion.Merge(dst, src)
+}
+func (m *GeoTargetConstantSuggestion) XXX_Size() int {
+	return xxx_messageInfo_GeoTargetConstantSuggestion.Size(m)
+}
+func (m *GeoTargetConstantSuggestion) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeoTargetConstantSuggestion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeoTargetConstantSuggestion proto.InternalMessageInfo
+
+func (m *GeoTargetConstantSuggestion) GetLocale() *wrappers.StringValue {
+	if m != nil {
+		return m.Locale
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetReach() *wrappers.Int64Value {
+	if m != nil {
+		return m.Reach
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetSearchTerm() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchTerm
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetGeoTargetConstant() *resources.GeoTargetConstant {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+func (m *GeoTargetConstantSuggestion) GetGeoTargetConstantParents() []*resources.GeoTargetConstant {
+	if m != nil {
+		return m.GeoTargetConstantParents
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GetGeoTargetConstantRequest)(nil), "google.ads.googleads.v0.services.GetGeoTargetConstantRequest")
+	proto.RegisterType((*SuggestGeoTargetConstantsRequest)(nil), "google.ads.googleads.v0.services.SuggestGeoTargetConstantsRequest")
+	proto.RegisterType((*SuggestGeoTargetConstantsRequest_LocationNames)(nil), "google.ads.googleads.v0.services.SuggestGeoTargetConstantsRequest.LocationNames")
+	proto.RegisterType((*SuggestGeoTargetConstantsRequest_GeoTargets)(nil), "google.ads.googleads.v0.services.SuggestGeoTargetConstantsRequest.GeoTargets")
+	proto.RegisterType((*SuggestGeoTargetConstantsResponse)(nil), "google.ads.googleads.v0.services.SuggestGeoTargetConstantsResponse")
+	proto.RegisterType((*GeoTargetConstantSuggestion)(nil), "google.ads.googleads.v0.services.GeoTargetConstantSuggestion")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// GeoTargetConstantServiceClient is the client API for GeoTargetConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GeoTargetConstantServiceClient interface {
+	// Returns the requested geo target constant in full detail.
+	GetGeoTargetConstant(ctx context.Context, in *GetGeoTargetConstantRequest, opts ...grpc.CallOption) (*resources.GeoTargetConstant, error)
+	// Returns GeoTargetConstant suggestions by location name or by resource name.
+	SuggestGeoTargetConstants(ctx context.Context, in *SuggestGeoTargetConstantsRequest, opts ...grpc.CallOption) (*SuggestGeoTargetConstantsResponse, error)
+}
+
+type geoTargetConstantServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewGeoTargetConstantServiceClient(cc *grpc.ClientConn) GeoTargetConstantServiceClient {
+	return &geoTargetConstantServiceClient{cc}
+}
+
+func (c *geoTargetConstantServiceClient) GetGeoTargetConstant(ctx context.Context, in *GetGeoTargetConstantRequest, opts ...grpc.CallOption) (*resources.GeoTargetConstant, error) {
+	out := new(resources.GeoTargetConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.GeoTargetConstantService/GetGeoTargetConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *geoTargetConstantServiceClient) SuggestGeoTargetConstants(ctx context.Context, in *SuggestGeoTargetConstantsRequest, opts ...grpc.CallOption) (*SuggestGeoTargetConstantsResponse, error) {
+	out := new(SuggestGeoTargetConstantsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.GeoTargetConstantService/SuggestGeoTargetConstants", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GeoTargetConstantServiceServer is the server API for GeoTargetConstantService service.
+type GeoTargetConstantServiceServer interface {
+	// Returns the requested geo target constant in full detail.
+	GetGeoTargetConstant(context.Context, *GetGeoTargetConstantRequest) (*resources.GeoTargetConstant, error)
+	// Returns GeoTargetConstant suggestions by location name or by resource name.
+	SuggestGeoTargetConstants(context.Context, *SuggestGeoTargetConstantsRequest) (*SuggestGeoTargetConstantsResponse, error)
+}
+
+func RegisterGeoTargetConstantServiceServer(s *grpc.Server, srv GeoTargetConstantServiceServer) {
+	s.RegisterService(&_GeoTargetConstantService_serviceDesc, srv)
+}
+
+func _GeoTargetConstantService_GetGeoTargetConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGeoTargetConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GeoTargetConstantServiceServer).GetGeoTargetConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.GeoTargetConstantService/GetGeoTargetConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GeoTargetConstantServiceServer).GetGeoTargetConstant(ctx, req.(*GetGeoTargetConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _GeoTargetConstantService_SuggestGeoTargetConstants_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SuggestGeoTargetConstantsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GeoTargetConstantServiceServer).SuggestGeoTargetConstants(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.GeoTargetConstantService/SuggestGeoTargetConstants",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GeoTargetConstantServiceServer).SuggestGeoTargetConstants(ctx, req.(*SuggestGeoTargetConstantsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GeoTargetConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.GeoTargetConstantService",
+	HandlerType: (*GeoTargetConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGeoTargetConstant",
+			Handler:    _GeoTargetConstantService_GetGeoTargetConstant_Handler,
+		},
+		{
+			MethodName: "SuggestGeoTargetConstants",
+			Handler:    _GeoTargetConstantService_SuggestGeoTargetConstants_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/geo_target_constant_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/geo_target_constant_service.proto", fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b)
+}
+
+var fileDescriptor_geo_target_constant_service_cb9e61b3d70ff45b = []byte{
+	// 696 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x6e, 0xd3, 0x4a,
+	0x14, 0xbe, 0x4e, 0x9a, 0x5e, 0xdd, 0x93, 0xf6, 0x4a, 0x77, 0x6e, 0x17, 0x26, 0x2d, 0x25, 0xb8,
+	0x2c, 0x4a, 0x17, 0x76, 0x08, 0x15, 0x8b, 0x56, 0x15, 0x4a, 0xb2, 0x48, 0x91, 0xa0, 0x8a, 0xd2,
+	0xaa, 0x0b, 0x14, 0x29, 0x9a, 0xda, 0x87, 0x69, 0xa4, 0xc4, 0xe3, 0xce, 0x8c, 0x8b, 0x2a, 0xc4,
+	0x06, 0xf1, 0x06, 0xbc, 0x00, 0x62, 0x59, 0xb1, 0x62, 0xcf, 0x0b, 0xb0, 0x61, 0xc1, 0x9a, 0x1d,
+	0x0f, 0x82, 0x6c, 0x8f, 0xd3, 0x56, 0x8e, 0x49, 0x68, 0xd9, 0x8d, 0x7d, 0xce, 0xf9, 0xbe, 0xf9,
+	0xce, 0xdf, 0x40, 0x93, 0x71, 0xce, 0x86, 0xe8, 0x50, 0x4f, 0x3a, 0xc9, 0x31, 0x3a, 0x9d, 0xd6,
+	0x1c, 0x89, 0xe2, 0x74, 0xe0, 0xa2, 0x74, 0x18, 0xf2, 0xbe, 0xa2, 0x82, 0xa1, 0xea, 0xbb, 0xdc,
+	0x97, 0x8a, 0xfa, 0xaa, 0xaf, 0x8d, 0x76, 0x20, 0xb8, 0xe2, 0xa4, 0x9a, 0x04, 0xda, 0xd4, 0x93,
+	0xf6, 0x18, 0xc3, 0x3e, 0xad, 0xd9, 0x29, 0x46, 0x65, 0x3b, 0x8f, 0x45, 0xa0, 0xe4, 0xa1, 0xc8,
+	0xa1, 0x49, 0xe0, 0x2b, 0x2b, 0x69, 0x70, 0x30, 0x70, 0xa8, 0xef, 0x73, 0x45, 0xd5, 0x80, 0xfb,
+	0x52, 0x5b, 0x57, 0xb5, 0x35, 0xfe, 0x3a, 0x0a, 0x5f, 0x38, 0x2f, 0x05, 0x0d, 0x02, 0x14, 0xda,
+	0x6e, 0x35, 0x61, 0xb9, 0x8d, 0xaa, 0x8d, 0xfc, 0x20, 0x06, 0x6f, 0x69, 0xec, 0x2e, 0x9e, 0x84,
+	0x28, 0x15, 0x59, 0x83, 0xc5, 0xf4, 0x0e, 0x7d, 0x9f, 0x8e, 0xd0, 0x34, 0xaa, 0xc6, 0xfa, 0x3f,
+	0xdd, 0x85, 0xf4, 0xe7, 0x1e, 0x1d, 0xa1, 0xf5, 0x69, 0x0e, 0xaa, 0xfb, 0x21, 0x63, 0x28, 0xb3,
+	0x40, 0x32, 0x45, 0xda, 0x84, 0xf9, 0x21, 0x77, 0xe9, 0x10, 0xcd, 0x62, 0xd5, 0x58, 0x2f, 0xd7,
+	0x57, 0x74, 0x2e, 0xec, 0xf4, 0x66, 0xf6, 0xbe, 0x12, 0x03, 0x9f, 0x1d, 0xd2, 0x61, 0x88, 0x5d,
+	0xed, 0x4b, 0x1e, 0xc3, 0x82, 0xcb, 0x43, 0x5f, 0x89, 0xb3, 0xbe, 0xcb, 0x3d, 0x34, 0x4b, 0x33,
+	0xc4, 0x96, 0x75, 0x44, 0x8b, 0x7b, 0x48, 0xce, 0xe0, 0xdf, 0x08, 0x2a, 0x4a, 0x49, 0x2c, 0x40,
+	0xc6, 0x0a, 0xca, 0xf5, 0x8e, 0x3d, 0xad, 0x2a, 0xf6, 0x34, 0x49, 0xf6, 0x53, 0x0d, 0x1c, 0x25,
+	0x41, 0xee, 0xfe, 0xd5, 0x5d, 0x1c, 0x5e, 0xfe, 0x41, 0x02, 0x28, 0x5f, 0x54, 0x4d, 0x9a, 0x85,
+	0x98, 0xf7, 0xd9, 0x1f, 0xe0, 0x1d, 0x5b, 0x22, 0x52, 0x60, 0xe3, 0xaf, 0x4a, 0x0b, 0x16, 0xaf,
+	0xdc, 0x89, 0xd4, 0xa1, 0x94, 0x8a, 0x2e, 0x4e, 0xcd, 0x5b, 0xe2, 0x5a, 0xe9, 0x01, 0x5c, 0x10,
+	0x90, 0x3d, 0x58, 0x9a, 0xd0, 0x7a, 0xb3, 0x01, 0x12, 0x96, 0x91, 0xd0, 0xfc, 0x1b, 0x4a, 0x27,
+	0x21, 0x8a, 0x33, 0xeb, 0xdc, 0x80, 0xbb, 0xbf, 0x50, 0x2a, 0x03, 0xee, 0x4b, 0x24, 0x6f, 0x0d,
+	0xb8, 0x33, 0x71, 0xc2, 0x92, 0xc8, 0xa8, 0xd1, 0xf5, 0x55, 0x76, 0xa6, 0x27, 0x36, 0xc3, 0xb3,
+	0x3f, 0x46, 0xe9, 0xae, 0xb0, 0x7c, 0xa3, 0xb4, 0xde, 0x17, 0xa3, 0x31, 0xc9, 0x75, 0xb8, 0xd4,
+	0xdc, 0xc6, 0x6f, 0x34, 0xf7, 0x03, 0x28, 0x09, 0xa4, 0xee, 0xb1, 0x6e, 0x8d, 0xe5, 0x4c, 0xd0,
+	0x13, 0x5f, 0x3d, 0xda, 0xd4, 0xc5, 0x89, 0x3d, 0xc9, 0x0e, 0x94, 0x25, 0x52, 0xe1, 0x1e, 0xf7,
+	0x15, 0x8a, 0xd1, 0x4c, 0xa3, 0x04, 0x49, 0xc0, 0x01, 0x8a, 0x11, 0xf1, 0xe0, 0xff, 0x09, 0xd9,
+	0x34, 0xe7, 0x62, 0x98, 0xcd, 0xdc, 0x0c, 0x8e, 0xd7, 0x50, 0x36, 0x85, 0xdd, 0xff, 0x32, 0x89,
+	0x23, 0x12, 0x96, 0x27, 0xd5, 0x2c, 0xa0, 0x02, 0xa3, 0xd6, 0x29, 0xc5, 0xf5, 0xba, 0x1e, 0x9b,
+	0x99, 0x61, 0xeb, 0x24, 0xa8, 0xf5, 0x8f, 0x45, 0x30, 0xb3, 0x25, 0x4a, 0x4a, 0x4f, 0x3e, 0x1b,
+	0xb0, 0x34, 0x69, 0xcd, 0x91, 0x99, 0xba, 0x26, 0x77, 0x3d, 0x56, 0xae, 0x25, 0xc2, 0xaa, 0xbd,
+	0xf9, 0xf6, 0xe3, 0x5d, 0x61, 0x83, 0xac, 0x47, 0x2b, 0xfe, 0xd5, 0x95, 0xfd, 0xba, 0x93, 0x1d,
+	0x19, 0x67, 0xe3, 0x35, 0xf9, 0x6a, 0xc0, 0xad, 0xdc, 0x61, 0x21, 0xcd, 0x9b, 0xef, 0x94, 0x4a,
+	0xeb, 0x46, 0x18, 0xc9, 0xb4, 0x5a, 0xf7, 0x63, 0x61, 0x6b, 0xd6, 0x6a, 0x24, 0x2c, 0xab, 0x64,
+	0x4b, 0x4f, 0xed, 0x96, 0xb1, 0xd1, 0xfc, 0x6e, 0xc0, 0x3d, 0x97, 0x8f, 0xa6, 0xb2, 0x36, 0x6f,
+	0xe7, 0x15, 0xb5, 0x13, 0x35, 0x7b, 0xc7, 0x78, 0xbe, 0xab, 0x21, 0x18, 0x1f, 0x52, 0x9f, 0xd9,
+	0x5c, 0x30, 0x87, 0xa1, 0x1f, 0x8f, 0x42, 0xfa, 0x98, 0x06, 0x03, 0x99, 0xff, 0x82, 0x6f, 0xa7,
+	0x87, 0x0f, 0x85, 0x62, 0xbb, 0xd1, 0x38, 0x2f, 0x54, 0xdb, 0x09, 0x60, 0xc3, 0x93, 0x76, 0x72,
+	0x8c, 0x4e, 0x87, 0x35, 0x5b, 0x13, 0xcb, 0x2f, 0xa9, 0x4b, 0xaf, 0xe1, 0xc9, 0xde, 0xd8, 0xa5,
+	0x77, 0x58, 0xeb, 0xa5, 0x2e, 0x47, 0xf3, 0xf1, 0x05, 0x1e, 0xfe, 0x0c, 0x00, 0x00, 0xff, 0xff,
+	0x9e, 0x4b, 0x04, 0xea, 0x41, 0x08, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/google_ads_field_service.pb.go b/googleapis/ads/googleads/v0/services/google_ads_field_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8df1c3d8bafacbb62197ff28ec22d0fd8d949ff2
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/google_ads_field_service.pb.go
@@ -0,0 +1,344 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/google_ads_field_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [GoogleAdsFieldService.GetGoogleAdsField][google.ads.googleads.v0.services.GoogleAdsFieldService.GetGoogleAdsField].
+type GetGoogleAdsFieldRequest struct {
+	// The resource name of the field to get.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetGoogleAdsFieldRequest) Reset()         { *m = GetGoogleAdsFieldRequest{} }
+func (m *GetGoogleAdsFieldRequest) String() string { return proto.CompactTextString(m) }
+func (*GetGoogleAdsFieldRequest) ProtoMessage()    {}
+func (*GetGoogleAdsFieldRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_service_68d4cc408e069062, []int{0}
+}
+func (m *GetGoogleAdsFieldRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetGoogleAdsFieldRequest.Unmarshal(m, b)
+}
+func (m *GetGoogleAdsFieldRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetGoogleAdsFieldRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetGoogleAdsFieldRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetGoogleAdsFieldRequest.Merge(dst, src)
+}
+func (m *GetGoogleAdsFieldRequest) XXX_Size() int {
+	return xxx_messageInfo_GetGoogleAdsFieldRequest.Size(m)
+}
+func (m *GetGoogleAdsFieldRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetGoogleAdsFieldRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetGoogleAdsFieldRequest proto.InternalMessageInfo
+
+func (m *GetGoogleAdsFieldRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [GoogleAdsFieldService.SearchGoogleAdsFields][google.ads.googleads.v0.services.GoogleAdsFieldService.SearchGoogleAdsFields].
+type SearchGoogleAdsFieldsRequest struct {
+	// The query string.
+	Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"`
+	// Token of the page to retrieve. If not specified, the first page of
+	// results will be returned. Use the value obtained from `next_page_token`
+	// in the previous response in order to request the next page of results.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Number of elements to retrieve in a single page.
+	// When too large a page is requested, the server may decide to further
+	// limit the number of returned resources.
+	PageSize             int32    `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchGoogleAdsFieldsRequest) Reset()         { *m = SearchGoogleAdsFieldsRequest{} }
+func (m *SearchGoogleAdsFieldsRequest) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsFieldsRequest) ProtoMessage()    {}
+func (*SearchGoogleAdsFieldsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_service_68d4cc408e069062, []int{1}
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsFieldsRequest.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsFieldsRequest.Marshal(b, m, deterministic)
+}
+func (dst *SearchGoogleAdsFieldsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsFieldsRequest.Merge(dst, src)
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsFieldsRequest.Size(m)
+}
+func (m *SearchGoogleAdsFieldsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsFieldsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsFieldsRequest proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsFieldsRequest) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsFieldsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsFieldsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for [GoogleAdsFieldService.SearchGoogleAdsFields][google.ads.googleads.v0.services.GoogleAdsFieldService.SearchGoogleAdsFields].
+type SearchGoogleAdsFieldsResponse struct {
+	// The list of fields that matched the query.
+	Results []*resources.GoogleAdsField `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Pagination token used to retrieve the next page of results. Pass the
+	// content of this string as the `page_token` attribute of the next request.
+	// `next_page_token` is not returned for the last page.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// Total number of results that match the query ignoring the LIMIT clause.
+	TotalResultsCount    int64    `protobuf:"varint,3,opt,name=total_results_count,json=totalResultsCount,proto3" json:"total_results_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchGoogleAdsFieldsResponse) Reset()         { *m = SearchGoogleAdsFieldsResponse{} }
+func (m *SearchGoogleAdsFieldsResponse) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsFieldsResponse) ProtoMessage()    {}
+func (*SearchGoogleAdsFieldsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_field_service_68d4cc408e069062, []int{2}
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsFieldsResponse.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsFieldsResponse.Marshal(b, m, deterministic)
+}
+func (dst *SearchGoogleAdsFieldsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsFieldsResponse.Merge(dst, src)
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsFieldsResponse.Size(m)
+}
+func (m *SearchGoogleAdsFieldsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsFieldsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsFieldsResponse proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsFieldsResponse) GetResults() []*resources.GoogleAdsField {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *SearchGoogleAdsFieldsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsFieldsResponse) GetTotalResultsCount() int64 {
+	if m != nil {
+		return m.TotalResultsCount
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*GetGoogleAdsFieldRequest)(nil), "google.ads.googleads.v0.services.GetGoogleAdsFieldRequest")
+	proto.RegisterType((*SearchGoogleAdsFieldsRequest)(nil), "google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest")
+	proto.RegisterType((*SearchGoogleAdsFieldsResponse)(nil), "google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// GoogleAdsFieldServiceClient is the client API for GoogleAdsFieldService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GoogleAdsFieldServiceClient interface {
+	// Returns just the requested field.
+	GetGoogleAdsField(ctx context.Context, in *GetGoogleAdsFieldRequest, opts ...grpc.CallOption) (*resources.GoogleAdsField, error)
+	// Returns all fields that match the search query.
+	SearchGoogleAdsFields(ctx context.Context, in *SearchGoogleAdsFieldsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsFieldsResponse, error)
+}
+
+type googleAdsFieldServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewGoogleAdsFieldServiceClient(cc *grpc.ClientConn) GoogleAdsFieldServiceClient {
+	return &googleAdsFieldServiceClient{cc}
+}
+
+func (c *googleAdsFieldServiceClient) GetGoogleAdsField(ctx context.Context, in *GetGoogleAdsFieldRequest, opts ...grpc.CallOption) (*resources.GoogleAdsField, error) {
+	out := new(resources.GoogleAdsField)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.GoogleAdsFieldService/GetGoogleAdsField", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *googleAdsFieldServiceClient) SearchGoogleAdsFields(ctx context.Context, in *SearchGoogleAdsFieldsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsFieldsResponse, error) {
+	out := new(SearchGoogleAdsFieldsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.GoogleAdsFieldService/SearchGoogleAdsFields", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GoogleAdsFieldServiceServer is the server API for GoogleAdsFieldService service.
+type GoogleAdsFieldServiceServer interface {
+	// Returns just the requested field.
+	GetGoogleAdsField(context.Context, *GetGoogleAdsFieldRequest) (*resources.GoogleAdsField, error)
+	// Returns all fields that match the search query.
+	SearchGoogleAdsFields(context.Context, *SearchGoogleAdsFieldsRequest) (*SearchGoogleAdsFieldsResponse, error)
+}
+
+func RegisterGoogleAdsFieldServiceServer(s *grpc.Server, srv GoogleAdsFieldServiceServer) {
+	s.RegisterService(&_GoogleAdsFieldService_serviceDesc, srv)
+}
+
+func _GoogleAdsFieldService_GetGoogleAdsField_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetGoogleAdsFieldRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsFieldServiceServer).GetGoogleAdsField(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.GoogleAdsFieldService/GetGoogleAdsField",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsFieldServiceServer).GetGoogleAdsField(ctx, req.(*GetGoogleAdsFieldRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _GoogleAdsFieldService_SearchGoogleAdsFields_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SearchGoogleAdsFieldsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsFieldServiceServer).SearchGoogleAdsFields(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.GoogleAdsFieldService/SearchGoogleAdsFields",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsFieldServiceServer).SearchGoogleAdsFields(ctx, req.(*SearchGoogleAdsFieldsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GoogleAdsFieldService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.GoogleAdsFieldService",
+	HandlerType: (*GoogleAdsFieldServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetGoogleAdsField",
+			Handler:    _GoogleAdsFieldService_GetGoogleAdsField_Handler,
+		},
+		{
+			MethodName: "SearchGoogleAdsFields",
+			Handler:    _GoogleAdsFieldService_SearchGoogleAdsFields_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/google_ads_field_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/google_ads_field_service.proto", fileDescriptor_google_ads_field_service_68d4cc408e069062)
+}
+
+var fileDescriptor_google_ads_field_service_68d4cc408e069062 = []byte{
+	// 519 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x8b, 0xd3, 0x4e,
+	0x14, 0x66, 0x5a, 0xf6, 0xf7, 0x73, 0x47, 0x17, 0xd9, 0xd1, 0x85, 0x10, 0x77, 0x31, 0x44, 0x57,
+	0xcb, 0x82, 0x93, 0xba, 0x5e, 0xa4, 0xa2, 0x25, 0x2b, 0x58, 0x41, 0x90, 0x92, 0xca, 0x1e, 0xa4,
+	0x10, 0xc6, 0xe6, 0x19, 0x83, 0xe9, 0x4c, 0x36, 0x33, 0x29, 0xba, 0xe2, 0xc5, 0xbb, 0x27, 0xff,
+	0x03, 0x8f, 0xde, 0xfc, 0x0b, 0xbc, 0x78, 0xf2, 0xea, 0xcd, 0xb3, 0x7f, 0x88, 0x4c, 0x92, 0x29,
+	0x76, 0xb7, 0xb1, 0xe8, 0x6d, 0xf2, 0xbe, 0xf7, 0x7d, 0xdf, 0x9b, 0xf7, 0xde, 0x04, 0xf7, 0x63,
+	0x21, 0xe2, 0x14, 0x3c, 0x16, 0x49, 0xaf, 0x3a, 0xea, 0xd3, 0xac, 0xeb, 0x49, 0xc8, 0x67, 0xc9,
+	0x04, 0x4c, 0x34, 0x64, 0x91, 0x0c, 0x9f, 0x27, 0x90, 0x46, 0x61, 0x8d, 0xd0, 0x2c, 0x17, 0x4a,
+	0x10, 0xa7, 0xc2, 0x29, 0x8b, 0x24, 0x9d, 0x0b, 0xd0, 0x59, 0x97, 0x1a, 0x01, 0xfb, 0x76, 0x93,
+	0x45, 0x0e, 0x52, 0x14, 0xf9, 0x32, 0x8f, 0x4a, 0xdb, 0xde, 0x36, 0xcc, 0x2c, 0xf1, 0x18, 0xe7,
+	0x42, 0x31, 0x95, 0x08, 0x2e, 0x2b, 0xd4, 0xed, 0x63, 0x6b, 0x00, 0x6a, 0x50, 0xa6, 0xf8, 0x91,
+	0x7c, 0xa0, 0x89, 0x01, 0x1c, 0x15, 0x20, 0x15, 0xb9, 0x82, 0x37, 0x8c, 0x7a, 0xc8, 0xd9, 0x14,
+	0x2c, 0xe4, 0xa0, 0xce, 0x7a, 0x70, 0xce, 0x04, 0x1f, 0xb3, 0x29, 0xb8, 0x19, 0xde, 0x1e, 0x01,
+	0xcb, 0x27, 0x2f, 0x16, 0x35, 0xa4, 0x11, 0xb9, 0x88, 0xd7, 0x8e, 0x0a, 0xc8, 0x5f, 0xd7, 0xe4,
+	0xea, 0x83, 0xec, 0x60, 0x9c, 0xb1, 0x18, 0x42, 0x25, 0x5e, 0x02, 0xb7, 0x5a, 0x25, 0xb4, 0xae,
+	0x23, 0x4f, 0x74, 0x80, 0x5c, 0xc2, 0xe5, 0x47, 0x28, 0x93, 0x63, 0xb0, 0xda, 0x0e, 0xea, 0xac,
+	0x05, 0x67, 0x74, 0x60, 0x94, 0x1c, 0x83, 0xfb, 0x15, 0xe1, 0x9d, 0x06, 0x4b, 0x99, 0x09, 0x2e,
+	0x81, 0x3c, 0xc2, 0xff, 0xe7, 0x20, 0x8b, 0x54, 0x49, 0x0b, 0x39, 0xed, 0xce, 0xd9, 0xfd, 0x9b,
+	0xb4, 0xa9, 0xc1, 0xf3, 0xf6, 0xd1, 0x13, 0x3d, 0x30, 0x0a, 0xe4, 0x1a, 0x3e, 0xcf, 0xe1, 0x95,
+	0x0a, 0x4f, 0xd5, 0xbb, 0xa1, 0xc3, 0xc3, 0x79, 0xcd, 0x14, 0x5f, 0x50, 0x42, 0xb1, 0x34, 0xac,
+	0x89, 0xe1, 0x44, 0x14, 0x5c, 0x95, 0xd5, 0xb7, 0x83, 0xcd, 0x12, 0x0a, 0x2a, 0xe4, 0xbe, 0x06,
+	0xf6, 0xdf, 0xb7, 0xf1, 0xd6, 0xa2, 0xe7, 0xa8, 0x1a, 0x36, 0xf9, 0x8c, 0xf0, 0xe6, 0xa9, 0xa1,
+	0x90, 0x1e, 0x5d, 0xb5, 0x24, 0xb4, 0x69, 0x92, 0xf6, 0xdf, 0xdf, 0xdf, 0xbd, 0xf1, 0xee, 0xfb,
+	0xcf, 0x0f, 0xad, 0xeb, 0x64, 0x57, 0x2f, 0xd9, 0x9b, 0x85, 0x3d, 0xb8, 0x1b, 0x2f, 0xf6, 0xdd,
+	0xdb, 0x7b, 0x4b, 0xbe, 0x20, 0xbc, 0xb5, 0x74, 0x28, 0xe4, 0xde, 0xea, 0xba, 0xff, 0xb4, 0x40,
+	0x76, 0xff, 0x9f, 0xf9, 0xd5, 0x36, 0xb8, 0xbb, 0xe5, 0x4d, 0x2e, 0xbb, 0xb6, 0xbe, 0xc9, 0x89,
+	0xd2, 0x7b, 0xb2, 0xa4, 0xf6, 0xd0, 0xde, 0xc1, 0x0f, 0x84, 0xaf, 0x4e, 0xc4, 0x74, 0xa5, 0xdb,
+	0x81, 0xbd, 0x74, 0x6a, 0x43, 0xfd, 0x9c, 0x86, 0xe8, 0xe9, 0xc3, 0x9a, 0x1f, 0x8b, 0x94, 0xf1,
+	0x98, 0x8a, 0x3c, 0xf6, 0x62, 0xe0, 0xe5, 0x63, 0x33, 0x0f, 0x37, 0x4b, 0x64, 0xf3, 0xaf, 0xe2,
+	0x8e, 0x39, 0x7c, 0x6c, 0xb5, 0x07, 0xbe, 0xff, 0xa9, 0xe5, 0x54, 0x76, 0xd4, 0x8f, 0x7e, 0x9b,
+	0x11, 0x3d, 0xec, 0xd2, 0xda, 0x58, 0x7e, 0x33, 0x29, 0x63, 0x3f, 0x92, 0xe3, 0x79, 0xca, 0xf8,
+	0xb0, 0x3b, 0x36, 0x29, 0xcf, 0xfe, 0x2b, 0x0b, 0xb8, 0xf5, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xbb,
+	0xb6, 0x6e, 0x67, 0xaa, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/google_ads_service.pb.go b/googleapis/ads/googleads/v0/services/google_ads_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e4c64b28f94517f84a57df472e029662a70a783e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/google_ads_service.pb.go
@@ -0,0 +1,2504 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/google_ads_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [GoogleAdsService.Search][google.ads.googleads.v0.services.GoogleAdsService.Search].
+type SearchGoogleAdsRequest struct {
+	// The ID of the customer being queried.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The query string.
+	Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"`
+	// Token of the page to retrieve. If not specified, the first
+	// page of results will be returned. Use the value obtained from
+	// `next_page_token` in the previous response in order to request
+	// the next page of results.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Number of elements to retrieve in a single page.
+	// When too large a page is requested, the server may decide to
+	// further limit the number of returned resources.
+	PageSize             int32    `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchGoogleAdsRequest) Reset()         { *m = SearchGoogleAdsRequest{} }
+func (m *SearchGoogleAdsRequest) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsRequest) ProtoMessage()    {}
+func (*SearchGoogleAdsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_service_537fcb76d9dc142d, []int{0}
+}
+func (m *SearchGoogleAdsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsRequest.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsRequest.Marshal(b, m, deterministic)
+}
+func (dst *SearchGoogleAdsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsRequest.Merge(dst, src)
+}
+func (m *SearchGoogleAdsRequest) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsRequest.Size(m)
+}
+func (m *SearchGoogleAdsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsRequest proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsRequest) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+// Response message for [GoogleAdsService.Search][google.ads.googleads.v0.services.GoogleAdsService.Search].
+type SearchGoogleAdsResponse struct {
+	// The list of rows that matched the query.
+	Results []*GoogleAdsRow `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Pagination token used to retrieve the next page of results.
+	// Pass the content of this string as the `page_token` attribute of
+	// the next request. `next_page_token` is not returned for the last
+	// page.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// Total number of results that match the query ignoring the LIMIT
+	// clause.
+	TotalResultsCount int64 `protobuf:"varint,3,opt,name=total_results_count,json=totalResultsCount,proto3" json:"total_results_count,omitempty"`
+	// FieldMask that represents what fields were requested by the user.
+	FieldMask            *field_mask.FieldMask `protobuf:"bytes,5,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *SearchGoogleAdsResponse) Reset()         { *m = SearchGoogleAdsResponse{} }
+func (m *SearchGoogleAdsResponse) String() string { return proto.CompactTextString(m) }
+func (*SearchGoogleAdsResponse) ProtoMessage()    {}
+func (*SearchGoogleAdsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_service_537fcb76d9dc142d, []int{1}
+}
+func (m *SearchGoogleAdsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchGoogleAdsResponse.Unmarshal(m, b)
+}
+func (m *SearchGoogleAdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchGoogleAdsResponse.Marshal(b, m, deterministic)
+}
+func (dst *SearchGoogleAdsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchGoogleAdsResponse.Merge(dst, src)
+}
+func (m *SearchGoogleAdsResponse) XXX_Size() int {
+	return xxx_messageInfo_SearchGoogleAdsResponse.Size(m)
+}
+func (m *SearchGoogleAdsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchGoogleAdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchGoogleAdsResponse proto.InternalMessageInfo
+
+func (m *SearchGoogleAdsResponse) GetResults() []*GoogleAdsRow {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *SearchGoogleAdsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *SearchGoogleAdsResponse) GetTotalResultsCount() int64 {
+	if m != nil {
+		return m.TotalResultsCount
+	}
+	return 0
+}
+
+func (m *SearchGoogleAdsResponse) GetFieldMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.FieldMask
+	}
+	return nil
+}
+
+// A returned row from the query.
+type GoogleAdsRow struct {
+	// The account budget in the query.
+	AccountBudget *resources.AccountBudget `protobuf:"bytes,42,opt,name=account_budget,json=accountBudget,proto3" json:"account_budget,omitempty"`
+	// The account budget proposal referenced in the query.
+	AccountBudgetProposal *resources.AccountBudgetProposal `protobuf:"bytes,43,opt,name=account_budget_proposal,json=accountBudgetProposal,proto3" json:"account_budget_proposal,omitempty"`
+	// The ad group referenced in the query.
+	AdGroup *resources.AdGroup `protobuf:"bytes,3,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The ad referenced in the query.
+	AdGroupAd *resources.AdGroupAd `protobuf:"bytes,16,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
+	// The ad group audience view referenced in the query.
+	AdGroupAudienceView *resources.AdGroupAudienceView `protobuf:"bytes,57,opt,name=ad_group_audience_view,json=adGroupAudienceView,proto3" json:"ad_group_audience_view,omitempty"`
+	// The bid modifier referenced in the query.
+	AdGroupBidModifier *resources.AdGroupBidModifier `protobuf:"bytes,24,opt,name=ad_group_bid_modifier,json=adGroupBidModifier,proto3" json:"ad_group_bid_modifier,omitempty"`
+	// The criterion referenced in the query.
+	AdGroupCriterion *resources.AdGroupCriterion `protobuf:"bytes,17,opt,name=ad_group_criterion,json=adGroupCriterion,proto3" json:"ad_group_criterion,omitempty"`
+	// The ad group feed referenced in the query.
+	AdGroupFeed *resources.AdGroupFeed `protobuf:"bytes,67,opt,name=ad_group_feed,json=adGroupFeed,proto3" json:"ad_group_feed,omitempty"`
+	// The age range view referenced in the query.
+	AgeRangeView *resources.AgeRangeView `protobuf:"bytes,48,opt,name=age_range_view,json=ageRangeView,proto3" json:"age_range_view,omitempty"`
+	// The bidding strategy referenced in the query.
+	BiddingStrategy *resources.BiddingStrategy `protobuf:"bytes,18,opt,name=bidding_strategy,json=biddingStrategy,proto3" json:"bidding_strategy,omitempty"`
+	// The billing setup referenced in the query.
+	BillingSetup *resources.BillingSetup `protobuf:"bytes,41,opt,name=billing_setup,json=billingSetup,proto3" json:"billing_setup,omitempty"`
+	// The campaign budget referenced in the query.
+	CampaignBudget *resources.CampaignBudget `protobuf:"bytes,19,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
+	// The campaign referenced in the query.
+	Campaign *resources.Campaign `protobuf:"bytes,2,opt,name=campaign,proto3" json:"campaign,omitempty"`
+	// The campaign audience view referenced in the query.
+	CampaignAudienceView *resources.CampaignAudienceView `protobuf:"bytes,69,opt,name=campaign_audience_view,json=campaignAudienceView,proto3" json:"campaign_audience_view,omitempty"`
+	// The campaign bid modifier referenced in the query.
+	CampaignBidModifier *resources.CampaignBidModifier `protobuf:"bytes,26,opt,name=campaign_bid_modifier,json=campaignBidModifier,proto3" json:"campaign_bid_modifier,omitempty"`
+	// The campaign criterion referenced in the query.
+	CampaignCriterion *resources.CampaignCriterion `protobuf:"bytes,20,opt,name=campaign_criterion,json=campaignCriterion,proto3" json:"campaign_criterion,omitempty"`
+	// The campaign feed referenced in the query.
+	CampaignFeed *resources.CampaignFeed `protobuf:"bytes,63,opt,name=campaign_feed,json=campaignFeed,proto3" json:"campaign_feed,omitempty"`
+	// Campaign Group referenced in AWQL query.
+	CampaignGroup *resources.CampaignGroup `protobuf:"bytes,25,opt,name=campaign_group,json=campaignGroup,proto3" json:"campaign_group,omitempty"`
+	// Campaign Shared Set referenced in AWQL query.
+	CampaignSharedSet *resources.CampaignSharedSet `protobuf:"bytes,30,opt,name=campaign_shared_set,json=campaignSharedSet,proto3" json:"campaign_shared_set,omitempty"`
+	// The carrier constant referenced in the query.
+	CarrierConstant *resources.CarrierConstant `protobuf:"bytes,66,opt,name=carrier_constant,json=carrierConstant,proto3" json:"carrier_constant,omitempty"`
+	// The ChangeStatus referenced in the query.
+	ChangeStatus *resources.ChangeStatus `protobuf:"bytes,37,opt,name=change_status,json=changeStatus,proto3" json:"change_status,omitempty"`
+	// The customer referenced in the query.
+	Customer *resources.Customer `protobuf:"bytes,1,opt,name=customer,proto3" json:"customer,omitempty"`
+	// The CustomerManagerLink referenced in the query.
+	CustomerManagerLink *resources.CustomerManagerLink `protobuf:"bytes,61,opt,name=customer_manager_link,json=customerManagerLink,proto3" json:"customer_manager_link,omitempty"`
+	// The CustomerClientLink referenced in the query.
+	CustomerClientLink *resources.CustomerClientLink `protobuf:"bytes,62,opt,name=customer_client_link,json=customerClientLink,proto3" json:"customer_client_link,omitempty"`
+	// The CustomerClient referenced in the query.
+	CustomerClient *resources.CustomerClient `protobuf:"bytes,70,opt,name=customer_client,json=customerClient,proto3" json:"customer_client,omitempty"`
+	// The customer feed referenced in the query.
+	CustomerFeed *resources.CustomerFeed `protobuf:"bytes,64,opt,name=customer_feed,json=customerFeed,proto3" json:"customer_feed,omitempty"`
+	// The display keyword view referenced in the query.
+	DisplayKeywordView *resources.DisplayKeywordView `protobuf:"bytes,47,opt,name=display_keyword_view,json=displayKeywordView,proto3" json:"display_keyword_view,omitempty"`
+	// The feed referenced in the query.
+	Feed *resources.Feed `protobuf:"bytes,46,opt,name=feed,proto3" json:"feed,omitempty"`
+	// The feed item referenced in the query.
+	FeedItem *resources.FeedItem `protobuf:"bytes,50,opt,name=feed_item,json=feedItem,proto3" json:"feed_item,omitempty"`
+	// The feed mapping referenced in the query.
+	FeedMapping *resources.FeedMapping `protobuf:"bytes,58,opt,name=feed_mapping,json=feedMapping,proto3" json:"feed_mapping,omitempty"`
+	// The gender view referenced in the query.
+	GenderView *resources.GenderView `protobuf:"bytes,40,opt,name=gender_view,json=genderView,proto3" json:"gender_view,omitempty"`
+	// The geo target constant referenced in the query.
+	GeoTargetConstant *resources.GeoTargetConstant `protobuf:"bytes,23,opt,name=geo_target_constant,json=geoTargetConstant,proto3" json:"geo_target_constant,omitempty"`
+	// The hotel group view referenced in the query.
+	HotelGroupView *resources.HotelGroupView `protobuf:"bytes,51,opt,name=hotel_group_view,json=hotelGroupView,proto3" json:"hotel_group_view,omitempty"`
+	// The hotel performance view referenced in the query.
+	HotelPerformanceView *resources.HotelPerformanceView `protobuf:"bytes,71,opt,name=hotel_performance_view,json=hotelPerformanceView,proto3" json:"hotel_performance_view,omitempty"`
+	// The keyword view referenced in the query.
+	KeywordView *resources.KeywordView `protobuf:"bytes,21,opt,name=keyword_view,json=keywordView,proto3" json:"keyword_view,omitempty"`
+	// The keyword plan referenced in the query.
+	KeywordPlan *resources.KeywordPlan `protobuf:"bytes,32,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	// The keyword plan campaign referenced in the query.
+	KeywordPlanCampaign *resources.KeywordPlanCampaign `protobuf:"bytes,33,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The keyword plan negative keyword referenced in the query.
+	KeywordPlanNegativeKeyword *resources.KeywordPlanNegativeKeyword `protobuf:"bytes,34,opt,name=keyword_plan_negative_keyword,json=keywordPlanNegativeKeyword,proto3" json:"keyword_plan_negative_keyword,omitempty"`
+	// The keyword plan ad group referenced in the query.
+	KeywordPlanAdGroup *resources.KeywordPlanAdGroup `protobuf:"bytes,35,opt,name=keyword_plan_ad_group,json=keywordPlanAdGroup,proto3" json:"keyword_plan_ad_group,omitempty"`
+	// The keyword plan keyword referenced in the query.
+	KeywordPlanKeyword *resources.KeywordPlanKeyword `protobuf:"bytes,36,opt,name=keyword_plan_keyword,json=keywordPlanKeyword,proto3" json:"keyword_plan_keyword,omitempty"`
+	// The language constant referenced in the query.
+	LanguageConstant *resources.LanguageConstant `protobuf:"bytes,55,opt,name=language_constant,json=languageConstant,proto3" json:"language_constant,omitempty"`
+	// The managed placement view referenced in the query.
+	ManagedPlacementView *resources.ManagedPlacementView `protobuf:"bytes,53,opt,name=managed_placement_view,json=managedPlacementView,proto3" json:"managed_placement_view,omitempty"`
+	// The parental status view referenced in the query.
+	ParentalStatusView *resources.ParentalStatusView `protobuf:"bytes,45,opt,name=parental_status_view,json=parentalStatusView,proto3" json:"parental_status_view,omitempty"`
+	// The product group view referenced in the query.
+	ProductGroupView *resources.ProductGroupView `protobuf:"bytes,54,opt,name=product_group_view,json=productGroupView,proto3" json:"product_group_view,omitempty"`
+	// The recommendation referenced in the query.
+	Recommendation *resources.Recommendation `protobuf:"bytes,22,opt,name=recommendation,proto3" json:"recommendation,omitempty"`
+	// The search term view referenced in the query.
+	SearchTermView *resources.SearchTermView `protobuf:"bytes,68,opt,name=search_term_view,json=searchTermView,proto3" json:"search_term_view,omitempty"`
+	// The shared set referenced in the query.
+	SharedCriterion *resources.SharedCriterion `protobuf:"bytes,29,opt,name=shared_criterion,json=sharedCriterion,proto3" json:"shared_criterion,omitempty"`
+	// The shared set referenced in the query.
+	SharedSet *resources.SharedSet `protobuf:"bytes,27,opt,name=shared_set,json=sharedSet,proto3" json:"shared_set,omitempty"`
+	// The topic view referenced in the query.
+	TopicView *resources.TopicView `protobuf:"bytes,44,opt,name=topic_view,json=topicView,proto3" json:"topic_view,omitempty"`
+	// The user interest referenced in the query.
+	UserInterest *resources.UserInterest `protobuf:"bytes,59,opt,name=user_interest,json=userInterest,proto3" json:"user_interest,omitempty"`
+	// The user list referenced in the query.
+	UserList *resources.UserList `protobuf:"bytes,38,opt,name=user_list,json=userList,proto3" json:"user_list,omitempty"`
+	// The topic constant referenced in the query.
+	TopicConstant *resources.TopicConstant `protobuf:"bytes,31,opt,name=topic_constant,json=topicConstant,proto3" json:"topic_constant,omitempty"`
+	// The video referenced in the query.
+	Video *resources.Video `protobuf:"bytes,39,opt,name=video,proto3" json:"video,omitempty"`
+	// The metrics.
+	Metrics *common.Metrics `protobuf:"bytes,4,opt,name=metrics,proto3" json:"metrics,omitempty"`
+	// Ad network type.
+	AdNetworkType enums.AdNetworkTypeEnum_AdNetworkType `protobuf:"varint,5,opt,name=ad_network_type,json=adNetworkType,proto3,enum=google.ads.googleads.v0.enums.AdNetworkTypeEnum_AdNetworkType" json:"ad_network_type,omitempty"`
+	// Date to which metrics apply.
+	// yyyy-MM-dd format, e.g., 2018-04-17.
+	Date *wrappers.StringValue `protobuf:"bytes,6,opt,name=date,proto3" json:"date,omitempty"`
+	// Day of the week, e.g., MONDAY.
+	DayOfWeek enums.DayOfWeekEnum_DayOfWeek `protobuf:"varint,7,opt,name=day_of_week,json=dayOfWeek,proto3,enum=google.ads.googleads.v0.enums.DayOfWeekEnum_DayOfWeek" json:"day_of_week,omitempty"`
+	// Device to which metrics apply.
+	Device enums.DeviceEnum_Device `protobuf:"varint,8,opt,name=device,proto3,enum=google.ads.googleads.v0.enums.DeviceEnum_Device" json:"device,omitempty"`
+	// Hotel booking window in days.
+	HotelBookingWindowDays *wrappers.Int64Value `protobuf:"bytes,83,opt,name=hotel_booking_window_days,json=hotelBookingWindowDays,proto3" json:"hotel_booking_window_days,omitempty"`
+	// Hotel center ID.
+	HotelCenterId *wrappers.Int64Value `protobuf:"bytes,72,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,73,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,74,opt,name=hotel_check_in_day_of_week,json=hotelCheckInDayOfWeek,proto3,enum=google.ads.googleads.v0.enums.DayOfWeekEnum_DayOfWeek" json:"hotel_check_in_day_of_week,omitempty"`
+	// Hotel city.
+	HotelCity *wrappers.StringValue `protobuf:"bytes,75,opt,name=hotel_city,json=hotelCity,proto3" json:"hotel_city,omitempty"`
+	// Hotel class.
+	HotelClass *wrappers.Int32Value `protobuf:"bytes,76,opt,name=hotel_class,json=hotelClass,proto3" json:"hotel_class,omitempty"`
+	// Hotel country.
+	HotelCountry *wrappers.StringValue `protobuf:"bytes,77,opt,name=hotel_country,json=hotelCountry,proto3" json:"hotel_country,omitempty"`
+	// Hotel date selection type.
+	HotelDateSelectionType enums.HotelDateSelectionTypeEnum_HotelDateSelectionType `protobuf:"varint,78,opt,name=hotel_date_selection_type,json=hotelDateSelectionType,proto3,enum=google.ads.googleads.v0.enums.HotelDateSelectionTypeEnum_HotelDateSelectionType" json:"hotel_date_selection_type,omitempty"`
+	// Hotel length of stay.
+	HotelLengthOfStay *wrappers.Int32Value `protobuf:"bytes,79,opt,name=hotel_length_of_stay,json=hotelLengthOfStay,proto3" json:"hotel_length_of_stay,omitempty"`
+	// Hotel state.
+	HotelState *wrappers.StringValue `protobuf:"bytes,81,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,9,opt,name=hour,proto3" json:"hour,omitempty"`
+	// Month as represented by the date of the first day of a month. Formatted as
+	// yyyy-MM-dd.
+	Month *wrappers.StringValue `protobuf:"bytes,10,opt,name=month,proto3" json:"month,omitempty"`
+	// Month of the year, e.g., January.
+	MonthOfYear enums.MonthOfYearEnum_MonthOfYear `protobuf:"varint,28,opt,name=month_of_year,json=monthOfYear,proto3,enum=google.ads.googleads.v0.enums.MonthOfYearEnum_MonthOfYear" json:"month_of_year,omitempty"`
+	// Partner hotel ID.
+	PartnerHotelId *wrappers.StringValue `protobuf:"bytes,82,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,65,opt,name=placeholder_type,json=placeholderType,proto3,enum=google.ads.googleads.v0.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_type,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,12,opt,name=quarter,proto3" json:"quarter,omitempty"`
+	// Match type of the keyword that triggered the ad, including variants.
+	SearchTermMatchType enums.SearchTermMatchTypeEnum_SearchTermMatchType `protobuf:"varint,56,opt,name=search_term_match_type,json=searchTermMatchType,proto3,enum=google.ads.googleads.v0.enums.SearchTermMatchTypeEnum_SearchTermMatchType" json:"search_term_match_type,omitempty"`
+	// Position of the ad.
+	Slot enums.SlotEnum_Slot `protobuf:"varint,13,opt,name=slot,proto3,enum=google.ads.googleads.v0.enums.SlotEnum_Slot" json:"slot,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,14,opt,name=week,proto3" json:"week,omitempty"`
+	// Year, formatted as yyyy.
+	Year                 *wrappers.Int32Value `protobuf:"bytes,15,opt,name=year,proto3" json:"year,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *GoogleAdsRow) Reset()         { *m = GoogleAdsRow{} }
+func (m *GoogleAdsRow) String() string { return proto.CompactTextString(m) }
+func (*GoogleAdsRow) ProtoMessage()    {}
+func (*GoogleAdsRow) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_service_537fcb76d9dc142d, []int{2}
+}
+func (m *GoogleAdsRow) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GoogleAdsRow.Unmarshal(m, b)
+}
+func (m *GoogleAdsRow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GoogleAdsRow.Marshal(b, m, deterministic)
+}
+func (dst *GoogleAdsRow) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GoogleAdsRow.Merge(dst, src)
+}
+func (m *GoogleAdsRow) XXX_Size() int {
+	return xxx_messageInfo_GoogleAdsRow.Size(m)
+}
+func (m *GoogleAdsRow) XXX_DiscardUnknown() {
+	xxx_messageInfo_GoogleAdsRow.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GoogleAdsRow proto.InternalMessageInfo
+
+func (m *GoogleAdsRow) GetAccountBudget() *resources.AccountBudget {
+	if m != nil {
+		return m.AccountBudget
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAccountBudgetProposal() *resources.AccountBudgetProposal {
+	if m != nil {
+		return m.AccountBudgetProposal
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroup() *resources.AdGroup {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupAd() *resources.AdGroupAd {
+	if m != nil {
+		return m.AdGroupAd
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupAudienceView() *resources.AdGroupAudienceView {
+	if m != nil {
+		return m.AdGroupAudienceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupBidModifier() *resources.AdGroupBidModifier {
+	if m != nil {
+		return m.AdGroupBidModifier
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupCriterion() *resources.AdGroupCriterion {
+	if m != nil {
+		return m.AdGroupCriterion
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdGroupFeed() *resources.AdGroupFeed {
+	if m != nil {
+		return m.AdGroupFeed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAgeRangeView() *resources.AgeRangeView {
+	if m != nil {
+		return m.AgeRangeView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetBiddingStrategy() *resources.BiddingStrategy {
+	if m != nil {
+		return m.BiddingStrategy
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetBillingSetup() *resources.BillingSetup {
+	if m != nil {
+		return m.BillingSetup
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignBudget() *resources.CampaignBudget {
+	if m != nil {
+		return m.CampaignBudget
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaign() *resources.Campaign {
+	if m != nil {
+		return m.Campaign
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignAudienceView() *resources.CampaignAudienceView {
+	if m != nil {
+		return m.CampaignAudienceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignBidModifier() *resources.CampaignBidModifier {
+	if m != nil {
+		return m.CampaignBidModifier
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignCriterion() *resources.CampaignCriterion {
+	if m != nil {
+		return m.CampaignCriterion
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignFeed() *resources.CampaignFeed {
+	if m != nil {
+		return m.CampaignFeed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignGroup() *resources.CampaignGroup {
+	if m != nil {
+		return m.CampaignGroup
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCampaignSharedSet() *resources.CampaignSharedSet {
+	if m != nil {
+		return m.CampaignSharedSet
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCarrierConstant() *resources.CarrierConstant {
+	if m != nil {
+		return m.CarrierConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetChangeStatus() *resources.ChangeStatus {
+	if m != nil {
+		return m.ChangeStatus
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomer() *resources.Customer {
+	if m != nil {
+		return m.Customer
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerManagerLink() *resources.CustomerManagerLink {
+	if m != nil {
+		return m.CustomerManagerLink
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerClientLink() *resources.CustomerClientLink {
+	if m != nil {
+		return m.CustomerClientLink
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerClient() *resources.CustomerClient {
+	if m != nil {
+		return m.CustomerClient
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetCustomerFeed() *resources.CustomerFeed {
+	if m != nil {
+		return m.CustomerFeed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetDisplayKeywordView() *resources.DisplayKeywordView {
+	if m != nil {
+		return m.DisplayKeywordView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeed() *resources.Feed {
+	if m != nil {
+		return m.Feed
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeedItem() *resources.FeedItem {
+	if m != nil {
+		return m.FeedItem
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetFeedMapping() *resources.FeedMapping {
+	if m != nil {
+		return m.FeedMapping
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetGenderView() *resources.GenderView {
+	if m != nil {
+		return m.GenderView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetGeoTargetConstant() *resources.GeoTargetConstant {
+	if m != nil {
+		return m.GeoTargetConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelGroupView() *resources.HotelGroupView {
+	if m != nil {
+		return m.HotelGroupView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelPerformanceView() *resources.HotelPerformanceView {
+	if m != nil {
+		return m.HotelPerformanceView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordView() *resources.KeywordView {
+	if m != nil {
+		return m.KeywordView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlan() *resources.KeywordPlan {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanCampaign() *resources.KeywordPlanCampaign {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanNegativeKeyword() *resources.KeywordPlanNegativeKeyword {
+	if m != nil {
+		return m.KeywordPlanNegativeKeyword
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanAdGroup() *resources.KeywordPlanAdGroup {
+	if m != nil {
+		return m.KeywordPlanAdGroup
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetKeywordPlanKeyword() *resources.KeywordPlanKeyword {
+	if m != nil {
+		return m.KeywordPlanKeyword
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetLanguageConstant() *resources.LanguageConstant {
+	if m != nil {
+		return m.LanguageConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetManagedPlacementView() *resources.ManagedPlacementView {
+	if m != nil {
+		return m.ManagedPlacementView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetParentalStatusView() *resources.ParentalStatusView {
+	if m != nil {
+		return m.ParentalStatusView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetProductGroupView() *resources.ProductGroupView {
+	if m != nil {
+		return m.ProductGroupView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetRecommendation() *resources.Recommendation {
+	if m != nil {
+		return m.Recommendation
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSearchTermView() *resources.SearchTermView {
+	if m != nil {
+		return m.SearchTermView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSharedCriterion() *resources.SharedCriterion {
+	if m != nil {
+		return m.SharedCriterion
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSharedSet() *resources.SharedSet {
+	if m != nil {
+		return m.SharedSet
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetTopicView() *resources.TopicView {
+	if m != nil {
+		return m.TopicView
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetUserInterest() *resources.UserInterest {
+	if m != nil {
+		return m.UserInterest
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetUserList() *resources.UserList {
+	if m != nil {
+		return m.UserList
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetTopicConstant() *resources.TopicConstant {
+	if m != nil {
+		return m.TopicConstant
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetVideo() *resources.Video {
+	if m != nil {
+		return m.Video
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMetrics() *common.Metrics {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetAdNetworkType() enums.AdNetworkTypeEnum_AdNetworkType {
+	if m != nil {
+		return m.AdNetworkType
+	}
+	return enums.AdNetworkTypeEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetDate() *wrappers.StringValue {
+	if m != nil {
+		return m.Date
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.DayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetDevice() enums.DeviceEnum_Device {
+	if m != nil {
+		return m.Device
+	}
+	return enums.DeviceEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetHotelBookingWindowDays() *wrappers.Int64Value {
+	if m != nil {
+		return m.HotelBookingWindowDays
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelCenterId() *wrappers.Int64Value {
+	if m != nil {
+		return m.HotelCenterId
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelCheckInDate() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelCheckInDate
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelCheckInDayOfWeek() enums.DayOfWeekEnum_DayOfWeek {
+	if m != nil {
+		return m.HotelCheckInDayOfWeek
+	}
+	return enums.DayOfWeekEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetHotelCity() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelCity
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelClass() *wrappers.Int32Value {
+	if m != nil {
+		return m.HotelClass
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelCountry() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelCountry
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelDateSelectionType() enums.HotelDateSelectionTypeEnum_HotelDateSelectionType {
+	if m != nil {
+		return m.HotelDateSelectionType
+	}
+	return enums.HotelDateSelectionTypeEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetHotelLengthOfStay() *wrappers.Int32Value {
+	if m != nil {
+		return m.HotelLengthOfStay
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHotelState() *wrappers.StringValue {
+	if m != nil {
+		return m.HotelState
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetHour() *wrappers.Int32Value {
+	if m != nil {
+		return m.Hour
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMonth() *wrappers.StringValue {
+	if m != nil {
+		return m.Month
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetMonthOfYear() enums.MonthOfYearEnum_MonthOfYear {
+	if m != nil {
+		return m.MonthOfYear
+	}
+	return enums.MonthOfYearEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetPartnerHotelId() *wrappers.StringValue {
+	if m != nil {
+		return m.PartnerHotelId
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetPlaceholderType() enums.PlaceholderTypeEnum_PlaceholderType {
+	if m != nil {
+		return m.PlaceholderType
+	}
+	return enums.PlaceholderTypeEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetQuarter() *wrappers.StringValue {
+	if m != nil {
+		return m.Quarter
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetSearchTermMatchType() enums.SearchTermMatchTypeEnum_SearchTermMatchType {
+	if m != nil {
+		return m.SearchTermMatchType
+	}
+	return enums.SearchTermMatchTypeEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetSlot() enums.SlotEnum_Slot {
+	if m != nil {
+		return m.Slot
+	}
+	return enums.SlotEnum_UNSPECIFIED
+}
+
+func (m *GoogleAdsRow) GetWeek() *wrappers.StringValue {
+	if m != nil {
+		return m.Week
+	}
+	return nil
+}
+
+func (m *GoogleAdsRow) GetYear() *wrappers.Int32Value {
+	if m != nil {
+		return m.Year
+	}
+	return nil
+}
+
+// Request message for [GoogleAdsService.Mutate][google.ads.googleads.v0.services.GoogleAdsService.Mutate].
+type MutateGoogleAdsRequest struct {
+	// The ID of the customer whose resources are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual resources.
+	MutateOperations     []*MutateOperation `protobuf:"bytes,2,rep,name=mutate_operations,json=mutateOperations,proto3" json:"mutate_operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *MutateGoogleAdsRequest) Reset()         { *m = MutateGoogleAdsRequest{} }
+func (m *MutateGoogleAdsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateGoogleAdsRequest) ProtoMessage()    {}
+func (*MutateGoogleAdsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_service_537fcb76d9dc142d, []int{3}
+}
+func (m *MutateGoogleAdsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateGoogleAdsRequest.Unmarshal(m, b)
+}
+func (m *MutateGoogleAdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateGoogleAdsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateGoogleAdsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateGoogleAdsRequest.Merge(dst, src)
+}
+func (m *MutateGoogleAdsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateGoogleAdsRequest.Size(m)
+}
+func (m *MutateGoogleAdsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateGoogleAdsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateGoogleAdsRequest proto.InternalMessageInfo
+
+func (m *MutateGoogleAdsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateGoogleAdsRequest) GetMutateOperations() []*MutateOperation {
+	if m != nil {
+		return m.MutateOperations
+	}
+	return nil
+}
+
+// Response message for [GoogleAdsService.Mutate][google.ads.googleads.v0.services.GoogleAdsService.Mutate].
+type MutateGoogleAdsResponse struct {
+	// All responses for the mutate.
+	MutateOperationResponses []*MutateOperationResponse `protobuf:"bytes,1,rep,name=mutate_operation_responses,json=mutateOperationResponses,proto3" json:"mutate_operation_responses,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}                   `json:"-"`
+	XXX_unrecognized         []byte                     `json:"-"`
+	XXX_sizecache            int32                      `json:"-"`
+}
+
+func (m *MutateGoogleAdsResponse) Reset()         { *m = MutateGoogleAdsResponse{} }
+func (m *MutateGoogleAdsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateGoogleAdsResponse) ProtoMessage()    {}
+func (*MutateGoogleAdsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_service_537fcb76d9dc142d, []int{4}
+}
+func (m *MutateGoogleAdsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateGoogleAdsResponse.Unmarshal(m, b)
+}
+func (m *MutateGoogleAdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateGoogleAdsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateGoogleAdsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateGoogleAdsResponse.Merge(dst, src)
+}
+func (m *MutateGoogleAdsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateGoogleAdsResponse.Size(m)
+}
+func (m *MutateGoogleAdsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateGoogleAdsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateGoogleAdsResponse proto.InternalMessageInfo
+
+func (m *MutateGoogleAdsResponse) GetMutateOperationResponses() []*MutateOperationResponse {
+	if m != nil {
+		return m.MutateOperationResponses
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a resource.
+type MutateOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*MutateOperation_AdGroupAdOperation
+	//	*MutateOperation_AdGroupBidModifierOperation
+	//	*MutateOperation_AdGroupCriterionOperation
+	//	*MutateOperation_AdGroupOperation
+	//	*MutateOperation_BiddingStrategyOperation
+	//	*MutateOperation_CampaignBidModifierOperation
+	//	*MutateOperation_CampaignBudgetOperation
+	//	*MutateOperation_CampaignGroupOperation
+	//	*MutateOperation_CampaignOperation
+	//	*MutateOperation_CampaignSharedSetOperation
+	//	*MutateOperation_ConversionActionOperation
+	//	*MutateOperation_CampaignCriterionOperation
+	//	*MutateOperation_SharedCriterionOperation
+	//	*MutateOperation_SharedSetOperation
+	//	*MutateOperation_UserListOperation
+	Operation            isMutateOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateOperation) Reset()         { *m = MutateOperation{} }
+func (m *MutateOperation) String() string { return proto.CompactTextString(m) }
+func (*MutateOperation) ProtoMessage()    {}
+func (*MutateOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_service_537fcb76d9dc142d, []int{5}
+}
+func (m *MutateOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateOperation.Unmarshal(m, b)
+}
+func (m *MutateOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateOperation.Marshal(b, m, deterministic)
+}
+func (dst *MutateOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateOperation.Merge(dst, src)
+}
+func (m *MutateOperation) XXX_Size() int {
+	return xxx_messageInfo_MutateOperation.Size(m)
+}
+func (m *MutateOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateOperation proto.InternalMessageInfo
+
+type isMutateOperation_Operation interface {
+	isMutateOperation_Operation()
+}
+
+type MutateOperation_AdGroupAdOperation struct {
+	AdGroupAdOperation *AdGroupAdOperation `protobuf:"bytes,1,opt,name=ad_group_ad_operation,json=adGroupAdOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupBidModifierOperation struct {
+	AdGroupBidModifierOperation *AdGroupBidModifierOperation `protobuf:"bytes,2,opt,name=ad_group_bid_modifier_operation,json=adGroupBidModifierOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupCriterionOperation struct {
+	AdGroupCriterionOperation *AdGroupCriterionOperation `protobuf:"bytes,3,opt,name=ad_group_criterion_operation,json=adGroupCriterionOperation,proto3,oneof"`
+}
+
+type MutateOperation_AdGroupOperation struct {
+	AdGroupOperation *AdGroupOperation `protobuf:"bytes,5,opt,name=ad_group_operation,json=adGroupOperation,proto3,oneof"`
+}
+
+type MutateOperation_BiddingStrategyOperation struct {
+	BiddingStrategyOperation *BiddingStrategyOperation `protobuf:"bytes,6,opt,name=bidding_strategy_operation,json=biddingStrategyOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignBidModifierOperation struct {
+	CampaignBidModifierOperation *CampaignBidModifierOperation `protobuf:"bytes,7,opt,name=campaign_bid_modifier_operation,json=campaignBidModifierOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignBudgetOperation struct {
+	CampaignBudgetOperation *CampaignBudgetOperation `protobuf:"bytes,8,opt,name=campaign_budget_operation,json=campaignBudgetOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignGroupOperation struct {
+	CampaignGroupOperation *CampaignGroupOperation `protobuf:"bytes,9,opt,name=campaign_group_operation,json=campaignGroupOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignOperation struct {
+	CampaignOperation *CampaignOperation `protobuf:"bytes,10,opt,name=campaign_operation,json=campaignOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignSharedSetOperation struct {
+	CampaignSharedSetOperation *CampaignSharedSetOperation `protobuf:"bytes,11,opt,name=campaign_shared_set_operation,json=campaignSharedSetOperation,proto3,oneof"`
+}
+
+type MutateOperation_ConversionActionOperation struct {
+	ConversionActionOperation *ConversionActionOperation `protobuf:"bytes,12,opt,name=conversion_action_operation,json=conversionActionOperation,proto3,oneof"`
+}
+
+type MutateOperation_CampaignCriterionOperation struct {
+	CampaignCriterionOperation *CampaignCriterionOperation `protobuf:"bytes,13,opt,name=campaign_criterion_operation,json=campaignCriterionOperation,proto3,oneof"`
+}
+
+type MutateOperation_SharedCriterionOperation struct {
+	SharedCriterionOperation *SharedCriterionOperation `protobuf:"bytes,14,opt,name=shared_criterion_operation,json=sharedCriterionOperation,proto3,oneof"`
+}
+
+type MutateOperation_SharedSetOperation struct {
+	SharedSetOperation *SharedSetOperation `protobuf:"bytes,15,opt,name=shared_set_operation,json=sharedSetOperation,proto3,oneof"`
+}
+
+type MutateOperation_UserListOperation struct {
+	UserListOperation *UserListOperation `protobuf:"bytes,16,opt,name=user_list_operation,json=userListOperation,proto3,oneof"`
+}
+
+func (*MutateOperation_AdGroupAdOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupBidModifierOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupCriterionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_AdGroupOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_BiddingStrategyOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignBidModifierOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignBudgetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignGroupOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignSharedSetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_ConversionActionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_CampaignCriterionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_SharedCriterionOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_SharedSetOperation) isMutateOperation_Operation() {}
+
+func (*MutateOperation_UserListOperation) isMutateOperation_Operation() {}
+
+func (m *MutateOperation) GetOperation() isMutateOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupAdOperation() *AdGroupAdOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupAdOperation); ok {
+		return x.AdGroupAdOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupBidModifierOperation() *AdGroupBidModifierOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupBidModifierOperation); ok {
+		return x.AdGroupBidModifierOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupCriterionOperation() *AdGroupCriterionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupCriterionOperation); ok {
+		return x.AdGroupCriterionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetAdGroupOperation() *AdGroupOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_AdGroupOperation); ok {
+		return x.AdGroupOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetBiddingStrategyOperation() *BiddingStrategyOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_BiddingStrategyOperation); ok {
+		return x.BiddingStrategyOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignBidModifierOperation() *CampaignBidModifierOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignBidModifierOperation); ok {
+		return x.CampaignBidModifierOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignBudgetOperation() *CampaignBudgetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignBudgetOperation); ok {
+		return x.CampaignBudgetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignGroupOperation() *CampaignGroupOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignGroupOperation); ok {
+		return x.CampaignGroupOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignOperation() *CampaignOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignOperation); ok {
+		return x.CampaignOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignSharedSetOperation() *CampaignSharedSetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignSharedSetOperation); ok {
+		return x.CampaignSharedSetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetConversionActionOperation() *ConversionActionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_ConversionActionOperation); ok {
+		return x.ConversionActionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetCampaignCriterionOperation() *CampaignCriterionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_CampaignCriterionOperation); ok {
+		return x.CampaignCriterionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetSharedCriterionOperation() *SharedCriterionOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_SharedCriterionOperation); ok {
+		return x.SharedCriterionOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetSharedSetOperation() *SharedSetOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_SharedSetOperation); ok {
+		return x.SharedSetOperation
+	}
+	return nil
+}
+
+func (m *MutateOperation) GetUserListOperation() *UserListOperation {
+	if x, ok := m.GetOperation().(*MutateOperation_UserListOperation); ok {
+		return x.UserListOperation
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*MutateOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _MutateOperation_OneofMarshaler, _MutateOperation_OneofUnmarshaler, _MutateOperation_OneofSizer, []interface{}{
+		(*MutateOperation_AdGroupAdOperation)(nil),
+		(*MutateOperation_AdGroupBidModifierOperation)(nil),
+		(*MutateOperation_AdGroupCriterionOperation)(nil),
+		(*MutateOperation_AdGroupOperation)(nil),
+		(*MutateOperation_BiddingStrategyOperation)(nil),
+		(*MutateOperation_CampaignBidModifierOperation)(nil),
+		(*MutateOperation_CampaignBudgetOperation)(nil),
+		(*MutateOperation_CampaignGroupOperation)(nil),
+		(*MutateOperation_CampaignOperation)(nil),
+		(*MutateOperation_CampaignSharedSetOperation)(nil),
+		(*MutateOperation_ConversionActionOperation)(nil),
+		(*MutateOperation_CampaignCriterionOperation)(nil),
+		(*MutateOperation_SharedCriterionOperation)(nil),
+		(*MutateOperation_SharedSetOperation)(nil),
+		(*MutateOperation_UserListOperation)(nil),
+	}
+}
+
+func _MutateOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*MutateOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *MutateOperation_AdGroupAdOperation:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupAdOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_AdGroupBidModifierOperation:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupBidModifierOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_AdGroupCriterionOperation:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupCriterionOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_AdGroupOperation:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_BiddingStrategyOperation:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.BiddingStrategyOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_CampaignBidModifierOperation:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignBidModifierOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_CampaignBudgetOperation:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignBudgetOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_CampaignGroupOperation:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignGroupOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_CampaignOperation:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_CampaignSharedSetOperation:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignSharedSetOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_ConversionActionOperation:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ConversionActionOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_CampaignCriterionOperation:
+		b.EncodeVarint(13<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignCriterionOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_SharedCriterionOperation:
+		b.EncodeVarint(14<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SharedCriterionOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_SharedSetOperation:
+		b.EncodeVarint(15<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SharedSetOperation); err != nil {
+			return err
+		}
+	case *MutateOperation_UserListOperation:
+		b.EncodeVarint(16<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.UserListOperation); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("MutateOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _MutateOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*MutateOperation)
+	switch tag {
+	case 1: // operation.ad_group_ad_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AdGroupAdOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_AdGroupAdOperation{msg}
+		return true, err
+	case 2: // operation.ad_group_bid_modifier_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AdGroupBidModifierOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_AdGroupBidModifierOperation{msg}
+		return true, err
+	case 3: // operation.ad_group_criterion_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AdGroupCriterionOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_AdGroupCriterionOperation{msg}
+		return true, err
+	case 5: // operation.ad_group_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(AdGroupOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_AdGroupOperation{msg}
+		return true, err
+	case 6: // operation.bidding_strategy_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(BiddingStrategyOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_BiddingStrategyOperation{msg}
+		return true, err
+	case 7: // operation.campaign_bid_modifier_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CampaignBidModifierOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_CampaignBidModifierOperation{msg}
+		return true, err
+	case 8: // operation.campaign_budget_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CampaignBudgetOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_CampaignBudgetOperation{msg}
+		return true, err
+	case 9: // operation.campaign_group_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CampaignGroupOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_CampaignGroupOperation{msg}
+		return true, err
+	case 10: // operation.campaign_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CampaignOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_CampaignOperation{msg}
+		return true, err
+	case 11: // operation.campaign_shared_set_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CampaignSharedSetOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_CampaignSharedSetOperation{msg}
+		return true, err
+	case 12: // operation.conversion_action_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ConversionActionOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_ConversionActionOperation{msg}
+		return true, err
+	case 13: // operation.campaign_criterion_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CampaignCriterionOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_CampaignCriterionOperation{msg}
+		return true, err
+	case 14: // operation.shared_criterion_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(SharedCriterionOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_SharedCriterionOperation{msg}
+		return true, err
+	case 15: // operation.shared_set_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(SharedSetOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_SharedSetOperation{msg}
+		return true, err
+	case 16: // operation.user_list_operation
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(UserListOperation)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MutateOperation_UserListOperation{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _MutateOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*MutateOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *MutateOperation_AdGroupAdOperation:
+		s := proto.Size(x.AdGroupAdOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_AdGroupBidModifierOperation:
+		s := proto.Size(x.AdGroupBidModifierOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_AdGroupCriterionOperation:
+		s := proto.Size(x.AdGroupCriterionOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_AdGroupOperation:
+		s := proto.Size(x.AdGroupOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_BiddingStrategyOperation:
+		s := proto.Size(x.BiddingStrategyOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_CampaignBidModifierOperation:
+		s := proto.Size(x.CampaignBidModifierOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_CampaignBudgetOperation:
+		s := proto.Size(x.CampaignBudgetOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_CampaignGroupOperation:
+		s := proto.Size(x.CampaignGroupOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_CampaignOperation:
+		s := proto.Size(x.CampaignOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_CampaignSharedSetOperation:
+		s := proto.Size(x.CampaignSharedSetOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_ConversionActionOperation:
+		s := proto.Size(x.ConversionActionOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_CampaignCriterionOperation:
+		s := proto.Size(x.CampaignCriterionOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_SharedCriterionOperation:
+		s := proto.Size(x.SharedCriterionOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_SharedSetOperation:
+		s := proto.Size(x.SharedSetOperation)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperation_UserListOperation:
+		s := proto.Size(x.UserListOperation)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for the resource mutate.
+type MutateOperationResponse struct {
+	// The mutate response
+	//
+	// Types that are valid to be assigned to Response:
+	//	*MutateOperationResponse_AdGroupAdResult
+	//	*MutateOperationResponse_AdGroupBidModifierResult
+	//	*MutateOperationResponse_AdGroupCriterionResult
+	//	*MutateOperationResponse_AdGroupResult
+	//	*MutateOperationResponse_BiddingStrategyResult
+	//	*MutateOperationResponse_CampaignBidModifierResult
+	//	*MutateOperationResponse_CampaignBudgetResult
+	//	*MutateOperationResponse_CampaignGroupResult
+	//	*MutateOperationResponse_CampaignResult
+	//	*MutateOperationResponse_CampaignSharedSetResult
+	//	*MutateOperationResponse_ConversionActionResult
+	//	*MutateOperationResponse_CampaignCriterionResult
+	//	*MutateOperationResponse_SharedCriterionResult
+	//	*MutateOperationResponse_SharedSetResult
+	//	*MutateOperationResponse_UserListResult
+	Response             isMutateOperationResponse_Response `protobuf_oneof:"response"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateOperationResponse) Reset()         { *m = MutateOperationResponse{} }
+func (m *MutateOperationResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateOperationResponse) ProtoMessage()    {}
+func (*MutateOperationResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_google_ads_service_537fcb76d9dc142d, []int{6}
+}
+func (m *MutateOperationResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateOperationResponse.Unmarshal(m, b)
+}
+func (m *MutateOperationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateOperationResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateOperationResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateOperationResponse.Merge(dst, src)
+}
+func (m *MutateOperationResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateOperationResponse.Size(m)
+}
+func (m *MutateOperationResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateOperationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateOperationResponse proto.InternalMessageInfo
+
+type isMutateOperationResponse_Response interface {
+	isMutateOperationResponse_Response()
+}
+
+type MutateOperationResponse_AdGroupAdResult struct {
+	AdGroupAdResult *MutateAdGroupAdResult `protobuf:"bytes,1,opt,name=ad_group_ad_result,json=adGroupAdResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupBidModifierResult struct {
+	AdGroupBidModifierResult *MutateAdGroupBidModifierResult `protobuf:"bytes,2,opt,name=ad_group_bid_modifier_result,json=adGroupBidModifierResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupCriterionResult struct {
+	AdGroupCriterionResult *MutateAdGroupCriterionResult `protobuf:"bytes,3,opt,name=ad_group_criterion_result,json=adGroupCriterionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_AdGroupResult struct {
+	AdGroupResult *MutateAdGroupResult `protobuf:"bytes,5,opt,name=ad_group_result,json=adGroupResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_BiddingStrategyResult struct {
+	BiddingStrategyResult *MutateBiddingStrategyResult `protobuf:"bytes,6,opt,name=bidding_strategy_result,json=biddingStrategyResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignBidModifierResult struct {
+	CampaignBidModifierResult *MutateCampaignBidModifierResult `protobuf:"bytes,7,opt,name=campaign_bid_modifier_result,json=campaignBidModifierResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignBudgetResult struct {
+	CampaignBudgetResult *MutateCampaignBudgetResult `protobuf:"bytes,8,opt,name=campaign_budget_result,json=campaignBudgetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignGroupResult struct {
+	CampaignGroupResult *MutateCampaignGroupResult `protobuf:"bytes,9,opt,name=campaign_group_result,json=campaignGroupResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignResult struct {
+	CampaignResult *MutateCampaignResult `protobuf:"bytes,10,opt,name=campaign_result,json=campaignResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignSharedSetResult struct {
+	CampaignSharedSetResult *MutateCampaignSharedSetResult `protobuf:"bytes,11,opt,name=campaign_shared_set_result,json=campaignSharedSetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_ConversionActionResult struct {
+	ConversionActionResult *MutateConversionActionResult `protobuf:"bytes,12,opt,name=conversion_action_result,json=conversionActionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_CampaignCriterionResult struct {
+	CampaignCriterionResult *MutateCampaignCriterionResult `protobuf:"bytes,13,opt,name=campaign_criterion_result,json=campaignCriterionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_SharedCriterionResult struct {
+	SharedCriterionResult *MutateSharedCriterionResult `protobuf:"bytes,14,opt,name=shared_criterion_result,json=sharedCriterionResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_SharedSetResult struct {
+	SharedSetResult *MutateSharedSetResult `protobuf:"bytes,15,opt,name=shared_set_result,json=sharedSetResult,proto3,oneof"`
+}
+
+type MutateOperationResponse_UserListResult struct {
+	UserListResult *MutateUserListResult `protobuf:"bytes,16,opt,name=user_list_result,json=userListResult,proto3,oneof"`
+}
+
+func (*MutateOperationResponse_AdGroupAdResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupBidModifierResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupCriterionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_AdGroupResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_BiddingStrategyResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignBidModifierResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignBudgetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignGroupResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignSharedSetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_ConversionActionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_CampaignCriterionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_SharedCriterionResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_SharedSetResult) isMutateOperationResponse_Response() {}
+
+func (*MutateOperationResponse_UserListResult) isMutateOperationResponse_Response() {}
+
+func (m *MutateOperationResponse) GetResponse() isMutateOperationResponse_Response {
+	if m != nil {
+		return m.Response
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupAdResult() *MutateAdGroupAdResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupAdResult); ok {
+		return x.AdGroupAdResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupBidModifierResult() *MutateAdGroupBidModifierResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupBidModifierResult); ok {
+		return x.AdGroupBidModifierResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupCriterionResult() *MutateAdGroupCriterionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupCriterionResult); ok {
+		return x.AdGroupCriterionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetAdGroupResult() *MutateAdGroupResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_AdGroupResult); ok {
+		return x.AdGroupResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetBiddingStrategyResult() *MutateBiddingStrategyResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_BiddingStrategyResult); ok {
+		return x.BiddingStrategyResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignBidModifierResult() *MutateCampaignBidModifierResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignBidModifierResult); ok {
+		return x.CampaignBidModifierResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignBudgetResult() *MutateCampaignBudgetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignBudgetResult); ok {
+		return x.CampaignBudgetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignGroupResult() *MutateCampaignGroupResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignGroupResult); ok {
+		return x.CampaignGroupResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignResult() *MutateCampaignResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignResult); ok {
+		return x.CampaignResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignSharedSetResult() *MutateCampaignSharedSetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignSharedSetResult); ok {
+		return x.CampaignSharedSetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetConversionActionResult() *MutateConversionActionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_ConversionActionResult); ok {
+		return x.ConversionActionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetCampaignCriterionResult() *MutateCampaignCriterionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_CampaignCriterionResult); ok {
+		return x.CampaignCriterionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetSharedCriterionResult() *MutateSharedCriterionResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_SharedCriterionResult); ok {
+		return x.SharedCriterionResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetSharedSetResult() *MutateSharedSetResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_SharedSetResult); ok {
+		return x.SharedSetResult
+	}
+	return nil
+}
+
+func (m *MutateOperationResponse) GetUserListResult() *MutateUserListResult {
+	if x, ok := m.GetResponse().(*MutateOperationResponse_UserListResult); ok {
+		return x.UserListResult
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*MutateOperationResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _MutateOperationResponse_OneofMarshaler, _MutateOperationResponse_OneofUnmarshaler, _MutateOperationResponse_OneofSizer, []interface{}{
+		(*MutateOperationResponse_AdGroupAdResult)(nil),
+		(*MutateOperationResponse_AdGroupBidModifierResult)(nil),
+		(*MutateOperationResponse_AdGroupCriterionResult)(nil),
+		(*MutateOperationResponse_AdGroupResult)(nil),
+		(*MutateOperationResponse_BiddingStrategyResult)(nil),
+		(*MutateOperationResponse_CampaignBidModifierResult)(nil),
+		(*MutateOperationResponse_CampaignBudgetResult)(nil),
+		(*MutateOperationResponse_CampaignGroupResult)(nil),
+		(*MutateOperationResponse_CampaignResult)(nil),
+		(*MutateOperationResponse_CampaignSharedSetResult)(nil),
+		(*MutateOperationResponse_ConversionActionResult)(nil),
+		(*MutateOperationResponse_CampaignCriterionResult)(nil),
+		(*MutateOperationResponse_SharedCriterionResult)(nil),
+		(*MutateOperationResponse_SharedSetResult)(nil),
+		(*MutateOperationResponse_UserListResult)(nil),
+	}
+}
+
+func _MutateOperationResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*MutateOperationResponse)
+	// response
+	switch x := m.Response.(type) {
+	case *MutateOperationResponse_AdGroupAdResult:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupAdResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_AdGroupBidModifierResult:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupBidModifierResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_AdGroupCriterionResult:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupCriterionResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_AdGroupResult:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AdGroupResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_BiddingStrategyResult:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.BiddingStrategyResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_CampaignBidModifierResult:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignBidModifierResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_CampaignBudgetResult:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignBudgetResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_CampaignGroupResult:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignGroupResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_CampaignResult:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_CampaignSharedSetResult:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignSharedSetResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_ConversionActionResult:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ConversionActionResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_CampaignCriterionResult:
+		b.EncodeVarint(13<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignCriterionResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_SharedCriterionResult:
+		b.EncodeVarint(14<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SharedCriterionResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_SharedSetResult:
+		b.EncodeVarint(15<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SharedSetResult); err != nil {
+			return err
+		}
+	case *MutateOperationResponse_UserListResult:
+		b.EncodeVarint(16<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.UserListResult); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("MutateOperationResponse.Response has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _MutateOperationResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*MutateOperationResponse)
+	switch tag {
+	case 1: // response.ad_group_ad_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateAdGroupAdResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_AdGroupAdResult{msg}
+		return true, err
+	case 2: // response.ad_group_bid_modifier_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateAdGroupBidModifierResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_AdGroupBidModifierResult{msg}
+		return true, err
+	case 3: // response.ad_group_criterion_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateAdGroupCriterionResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_AdGroupCriterionResult{msg}
+		return true, err
+	case 5: // response.ad_group_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateAdGroupResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_AdGroupResult{msg}
+		return true, err
+	case 6: // response.bidding_strategy_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateBiddingStrategyResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_BiddingStrategyResult{msg}
+		return true, err
+	case 7: // response.campaign_bid_modifier_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateCampaignBidModifierResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_CampaignBidModifierResult{msg}
+		return true, err
+	case 8: // response.campaign_budget_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateCampaignBudgetResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_CampaignBudgetResult{msg}
+		return true, err
+	case 9: // response.campaign_group_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateCampaignGroupResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_CampaignGroupResult{msg}
+		return true, err
+	case 10: // response.campaign_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateCampaignResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_CampaignResult{msg}
+		return true, err
+	case 11: // response.campaign_shared_set_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateCampaignSharedSetResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_CampaignSharedSetResult{msg}
+		return true, err
+	case 12: // response.conversion_action_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateConversionActionResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_ConversionActionResult{msg}
+		return true, err
+	case 13: // response.campaign_criterion_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateCampaignCriterionResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_CampaignCriterionResult{msg}
+		return true, err
+	case 14: // response.shared_criterion_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateSharedCriterionResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_SharedCriterionResult{msg}
+		return true, err
+	case 15: // response.shared_set_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateSharedSetResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_SharedSetResult{msg}
+		return true, err
+	case 16: // response.user_list_result
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MutateUserListResult)
+		err := b.DecodeMessage(msg)
+		m.Response = &MutateOperationResponse_UserListResult{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _MutateOperationResponse_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*MutateOperationResponse)
+	// response
+	switch x := m.Response.(type) {
+	case *MutateOperationResponse_AdGroupAdResult:
+		s := proto.Size(x.AdGroupAdResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_AdGroupBidModifierResult:
+		s := proto.Size(x.AdGroupBidModifierResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_AdGroupCriterionResult:
+		s := proto.Size(x.AdGroupCriterionResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_AdGroupResult:
+		s := proto.Size(x.AdGroupResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_BiddingStrategyResult:
+		s := proto.Size(x.BiddingStrategyResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_CampaignBidModifierResult:
+		s := proto.Size(x.CampaignBidModifierResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_CampaignBudgetResult:
+		s := proto.Size(x.CampaignBudgetResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_CampaignGroupResult:
+		s := proto.Size(x.CampaignGroupResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_CampaignResult:
+		s := proto.Size(x.CampaignResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_CampaignSharedSetResult:
+		s := proto.Size(x.CampaignSharedSetResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_ConversionActionResult:
+		s := proto.Size(x.ConversionActionResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_CampaignCriterionResult:
+		s := proto.Size(x.CampaignCriterionResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_SharedCriterionResult:
+		s := proto.Size(x.SharedCriterionResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_SharedSetResult:
+		s := proto.Size(x.SharedSetResult)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MutateOperationResponse_UserListResult:
+		s := proto.Size(x.UserListResult)
+		n += 2 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	proto.RegisterType((*SearchGoogleAdsRequest)(nil), "google.ads.googleads.v0.services.SearchGoogleAdsRequest")
+	proto.RegisterType((*SearchGoogleAdsResponse)(nil), "google.ads.googleads.v0.services.SearchGoogleAdsResponse")
+	proto.RegisterType((*GoogleAdsRow)(nil), "google.ads.googleads.v0.services.GoogleAdsRow")
+	proto.RegisterType((*MutateGoogleAdsRequest)(nil), "google.ads.googleads.v0.services.MutateGoogleAdsRequest")
+	proto.RegisterType((*MutateGoogleAdsResponse)(nil), "google.ads.googleads.v0.services.MutateGoogleAdsResponse")
+	proto.RegisterType((*MutateOperation)(nil), "google.ads.googleads.v0.services.MutateOperation")
+	proto.RegisterType((*MutateOperationResponse)(nil), "google.ads.googleads.v0.services.MutateOperationResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// GoogleAdsServiceClient is the client API for GoogleAdsService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GoogleAdsServiceClient interface {
+	// Returns all rows that match the search query.
+	Search(ctx context.Context, in *SearchGoogleAdsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsResponse, error)
+	// Creates, updates, or removes resources. Operation statuses are returned.
+	Mutate(ctx context.Context, in *MutateGoogleAdsRequest, opts ...grpc.CallOption) (*MutateGoogleAdsResponse, error)
+}
+
+type googleAdsServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewGoogleAdsServiceClient(cc *grpc.ClientConn) GoogleAdsServiceClient {
+	return &googleAdsServiceClient{cc}
+}
+
+func (c *googleAdsServiceClient) Search(ctx context.Context, in *SearchGoogleAdsRequest, opts ...grpc.CallOption) (*SearchGoogleAdsResponse, error) {
+	out := new(SearchGoogleAdsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.GoogleAdsService/Search", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *googleAdsServiceClient) Mutate(ctx context.Context, in *MutateGoogleAdsRequest, opts ...grpc.CallOption) (*MutateGoogleAdsResponse, error) {
+	out := new(MutateGoogleAdsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.GoogleAdsService/Mutate", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GoogleAdsServiceServer is the server API for GoogleAdsService service.
+type GoogleAdsServiceServer interface {
+	// Returns all rows that match the search query.
+	Search(context.Context, *SearchGoogleAdsRequest) (*SearchGoogleAdsResponse, error)
+	// Creates, updates, or removes resources. Operation statuses are returned.
+	Mutate(context.Context, *MutateGoogleAdsRequest) (*MutateGoogleAdsResponse, error)
+}
+
+func RegisterGoogleAdsServiceServer(s *grpc.Server, srv GoogleAdsServiceServer) {
+	s.RegisterService(&_GoogleAdsService_serviceDesc, srv)
+}
+
+func _GoogleAdsService_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SearchGoogleAdsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsServiceServer).Search(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.GoogleAdsService/Search",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsServiceServer).Search(ctx, req.(*SearchGoogleAdsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _GoogleAdsService_Mutate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateGoogleAdsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GoogleAdsServiceServer).Mutate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.GoogleAdsService/Mutate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GoogleAdsServiceServer).Mutate(ctx, req.(*MutateGoogleAdsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _GoogleAdsService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.GoogleAdsService",
+	HandlerType: (*GoogleAdsServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "Search",
+			Handler:    _GoogleAdsService_Search_Handler,
+		},
+		{
+			MethodName: "Mutate",
+			Handler:    _GoogleAdsService_Mutate_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/google_ads_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/google_ads_service.proto", fileDescriptor_google_ads_service_537fcb76d9dc142d)
+}
+
+var fileDescriptor_google_ads_service_537fcb76d9dc142d = []byte{
+	// 3568 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x5b, 0x49, 0x77, 0xdc, 0xc6,
+	0xb5, 0x76, 0x6b, 0x24, 0xab, 0x39, 0x16, 0x25, 0xb2, 0xd4, 0x92, 0x2c, 0x3d, 0x3e, 0x3f, 0x5b,
+	0x4f, 0x96, 0x9b, 0x14, 0x35, 0x92, 0x1a, 0x9b, 0xd4, 0x40, 0x5a, 0xa2, 0x44, 0x83, 0xb2, 0x7c,
+	0xec, 0xa7, 0x67, 0xa4, 0x08, 0x14, 0x9b, 0x48, 0x77, 0x03, 0x10, 0x50, 0x2d, 0xa6, 0xe5, 0x63,
+	0xc7, 0xf1, 0x49, 0x4e, 0x72, 0x8e, 0x77, 0xc9, 0x2a, 0xdb, 0x64, 0x97, 0x5f, 0x90, 0xdf, 0xe0,
+	0x6d, 0x4e, 0xfe, 0x41, 0x7e, 0x43, 0x36, 0xd9, 0xe4, 0xd4, 0x00, 0xa0, 0x30, 0x34, 0x51, 0x50,
+	0x76, 0x5d, 0xb7, 0xf0, 0xdd, 0xef, 0xa2, 0x86, 0x7b, 0x2f, 0x6e, 0x55, 0x83, 0xe5, 0xb6, 0xe7,
+	0xb5, 0xbb, 0x64, 0x01, 0xdb, 0xe1, 0x82, 0xf8, 0xc9, 0x7e, 0xbd, 0x59, 0x5c, 0x08, 0x49, 0xf0,
+	0xc6, 0xb1, 0x48, 0x24, 0x35, 0xb1, 0x1d, 0x9a, 0x52, 0xd6, 0xf4, 0x03, 0x8f, 0x7a, 0xf0, 0xbc,
+	0xe8, 0x69, 0x62, 0x3b, 0x6c, 0xc6, 0xd0, 0xe6, 0x9b, 0xc5, 0x66, 0x04, 0x6d, 0x5c, 0x1a, 0xa6,
+	0xdc, 0xf2, 0x7a, 0x3d, 0xcf, 0x5d, 0xe8, 0x11, 0x1a, 0x38, 0x56, 0x28, 0xf4, 0x35, 0xae, 0x0c,
+	0x7b, 0x9a, 0xb8, 0xfd, 0x5e, 0xb8, 0x80, 0x6d, 0xd3, 0x25, 0x74, 0xdf, 0x0b, 0x3a, 0x26, 0x1d,
+	0xf8, 0xd2, 0x88, 0xc6, 0xc2, 0xc1, 0x20, 0x1b, 0x0f, 0x4c, 0x6f, 0xd7, 0xdc, 0x27, 0xa4, 0x23,
+	0x01, 0x17, 0x4b, 0x00, 0x24, 0x79, 0xc3, 0xc6, 0x9d, 0x83, 0x9f, 0xdd, 0xf3, 0x28, 0xe9, 0x9a,
+	0x36, 0xa6, 0xc4, 0x0c, 0x49, 0x97, 0x58, 0xd4, 0xf1, 0x5c, 0xd5, 0xb6, 0xcb, 0x07, 0xc3, 0x7b,
+	0x9e, 0x4b, 0xf7, 0x98, 0x75, 0x03, 0x82, 0x03, 0x09, 0xb9, 0x7a, 0x30, 0xc4, 0xef, 0x62, 0x8b,
+	0xec, 0x79, 0x5d, 0x9b, 0x04, 0x2a, 0xd1, 0xca, 0xc1, 0xa8, 0x90, 0xe0, 0xc0, 0xda, 0x33, 0x29,
+	0x09, 0x7a, 0x66, 0x0f, 0x53, 0xf6, 0x33, 0xc1, 0x5e, 0x28, 0xc1, 0x76, 0x3d, 0x2a, 0x9f, 0xbc,
+	0x3e, 0xec, 0xc9, 0x80, 0x84, 0x5e, 0x3f, 0x60, 0x6b, 0x05, 0x5b, 0x96, 0xd7, 0x77, 0xa9, 0xb9,
+	0xd3, 0xb7, 0xdb, 0x24, 0xc2, 0xdd, 0xab, 0x8a, 0x33, 0xfd, 0xc0, 0xf3, 0xbd, 0x10, 0x77, 0xa5,
+	0x82, 0x45, 0x0d, 0x05, 0xb6, 0xd9, 0x0e, 0xbc, 0xbe, 0x5f, 0xb6, 0x94, 0xf2, 0x08, 0x13, 0xdb,
+	0x12, 0x74, 0xb7, 0x0a, 0xa8, 0x6f, 0x3b, 0xc4, 0xb5, 0x88, 0xf9, 0xc6, 0x21, 0xfb, 0x65, 0xab,
+	0xa5, 0x00, 0xbf, 0xe3, 0xd8, 0x66, 0xcf, 0xb3, 0x9d, 0x5d, 0x87, 0x04, 0x65, 0x93, 0x58, 0x00,
+	0xb7, 0x02, 0x87, 0x92, 0xc0, 0xf1, 0x5c, 0x89, 0xbd, 0x56, 0x01, 0xbb, 0x4b, 0x88, 0x5d, 0x61,
+	0x46, 0xdb, 0xc4, 0x0c, 0xb0, 0xdb, 0x4e, 0xbd, 0xe9, 0xcd, 0x72, 0xdc, 0x8e, 0x63, 0xdb, 0x8e,
+	0xdb, 0x36, 0x43, 0x1a, 0x60, 0x4a, 0xda, 0x03, 0x7d, 0x43, 0x77, 0x9c, 0x6e, 0x97, 0x23, 0x09,
+	0x8d, 0xe7, 0x53, 0x63, 0x05, 0x58, 0xb8, 0xe7, 0x63, 0xa7, 0xed, 0xea, 0x4f, 0x66, 0x84, 0x78,
+	0xd7, 0xc9, 0x8c, 0xf1, 0x05, 0x93, 0x79, 0xa3, 0x0a, 0x5c, 0xdd, 0x2c, 0x2b, 0x15, 0x80, 0xef,
+	0xb0, 0x0a, 0x62, 0x6c, 0xb5, 0x55, 0x10, 0xc3, 0xd4, 0x4d, 0x76, 0xab, 0x02, 0x2e, 0xdc, 0xc3,
+	0x01, 0xb1, 0xd9, 0x9c, 0xea, 0x2f, 0x21, 0x0b, 0x07, 0x81, 0x43, 0x02, 0xd3, 0xf2, 0xdc, 0x90,
+	0x62, 0x97, 0x56, 0x78, 0xcb, 0x3d, 0xbe, 0x62, 0x43, 0x8a, 0x69, 0x3f, 0xac, 0xb0, 0x84, 0xfa,
+	0x21, 0xf5, 0x7a, 0x95, 0xe6, 0x50, 0x22, 0x4c, 0xab, 0xeb, 0x90, 0xd8, 0xc2, 0xdb, 0x95, 0x81,
+	0x66, 0xd7, 0x71, 0x3b, 0x15, 0xde, 0x2f, 0x42, 0x2b, 0xb3, 0x78, 0xa7, 0x02, 0xac, 0x87, 0x5d,
+	0xdc, 0x26, 0x81, 0xca, 0xaa, 0x61, 0xb3, 0xed, 0x84, 0x7e, 0x17, 0x0f, 0xcc, 0x0e, 0x19, 0xec,
+	0x7b, 0x81, 0xad, 0xee, 0x96, 0x4b, 0xe5, 0x68, 0xc5, 0xd4, 0xcb, 0x7a, 0x4f, 0x9b, 0x0e, 0x25,
+	0xbd, 0xb2, 0xb8, 0x98, 0x81, 0xf4, 0xb0, 0xef, 0x3b, 0x6e, 0x5b, 0x3f, 0x0c, 0xb4, 0x89, 0xcb,
+	0x82, 0xa9, 0xf2, 0x2e, 0xb7, 0x74, 0x40, 0x9e, 0x49, 0x71, 0xc0, 0x42, 0x55, 0x66, 0x71, 0x6a,
+	0x2c, 0x6b, 0x91, 0x35, 0x08, 0x5f, 0xac, 0xd0, 0xde, 0xd5, 0x45, 0xfa, 0x24, 0xd8, 0xf5, 0x82,
+	0x1e, 0xce, 0x38, 0x2c, 0x8d, 0x11, 0x8a, 0x26, 0xce, 0xef, 0x62, 0x57, 0x7f, 0xd5, 0xa8, 0x28,
+	0x33, 0x13, 0x67, 0xab, 0xc2, 0x33, 0x4e, 0xfa, 0x76, 0x45, 0xb8, 0x6c, 0x48, 0xf4, 0xc3, 0x8a,
+	0x68, 0x97, 0xb4, 0x31, 0x75, 0xde, 0x90, 0x8c, 0x9a, 0x0a, 0x03, 0xa7, 0x0c, 0xf7, 0x72, 0x39,
+	0xaa, 0x8b, 0xdd, 0x76, 0x9f, 0xc5, 0xcf, 0xcc, 0x1a, 0xd1, 0x98, 0x69, 0xb1, 0x41, 0xb9, 0xdd,
+	0x16, 0xe9, 0x31, 0x07, 0xa1, 0x50, 0x6b, 0x8c, 0x9a, 0x8f, 0x03, 0xe2, 0x52, 0xdc, 0x95, 0x2e,
+	0x50, 0x45, 0x6b, 0x04, 0x18, 0x3f, 0xf0, 0xec, 0xbe, 0x45, 0xf3, 0x6b, 0x54, 0x23, 0x52, 0x04,
+	0x84, 0xe5, 0xf6, 0xc4, 0xb5, 0x31, 0x4d, 0x02, 0x93, 0xc6, 0xae, 0x50, 0x73, 0xd4, 0x6a, 0x99,
+	0x86, 0x0c, 0x2d, 0xd9, 0x60, 0xb8, 0xa4, 0x8d, 0x4c, 0x82, 0x92, 0xc6, 0xfb, 0x51, 0xcf, 0x77,
+	0xac, 0xec, 0x8c, 0x2e, 0xe9, 0xe2, 0x94, 0x37, 0xd3, 0x70, 0xf3, 0xfd, 0x90, 0x04, 0xa6, 0xe3,
+	0x52, 0x12, 0x90, 0x90, 0xea, 0xfb, 0x4e, 0x0e, 0xeb, 0x3a, 0x31, 0xe4, 0x93, 0x72, 0xc8, 0x1b,
+	0xc7, 0x26, 0x5e, 0xd9, 0x02, 0x89, 0xbf, 0x08, 0x95, 0xd4, 0x39, 0xfd, 0x49, 0xd8, 0x78, 0xa0,
+	0x8f, 0x55, 0x93, 0xa6, 0x8c, 0x96, 0x96, 0xbe, 0x96, 0x78, 0xd6, 0x33, 0x2a, 0x6e, 0xe8, 0xab,
+	0x48, 0x03, 0xef, 0x95, 0x02, 0xb3, 0x99, 0x6d, 0xe5, 0x21, 0x28, 0xcc, 0x1b, 0x33, 0x5a, 0xee,
+	0x56, 0xd0, 0x22, 0xbe, 0x99, 0xaa, 0x0e, 0x61, 0x3e, 0x8b, 0xcc, 0xa8, 0xb8, 0xa3, 0xaf, 0xa2,
+	0x68, 0x20, 0x6f, 0xe8, 0xc3, 0xd3, 0xc0, 0xd5, 0x0a, 0xc0, 0x78, 0x03, 0x67, 0x74, 0xdc, 0x2f,
+	0xd7, 0xe1, 0xb9, 0x6f, 0x48, 0x10, 0xb2, 0xd7, 0xc6, 0xe2, 0xc3, 0xbd, 0xea, 0x3a, 0xc8, 0xfa,
+	0x9d, 0x8c, 0x82, 0x65, 0x5d, 0x05, 0x79, 0xeb, 0x6f, 0x96, 0x42, 0xe3, 0x2d, 0x9e, 0x41, 0x9e,
+	0x89, 0x90, 0xbe, 0xb3, 0x80, 0x5d, 0xd7, 0xa3, 0xdc, 0x0b, 0x47, 0x29, 0xb0, 0x2c, 0xd8, 0x2c,
+	0xf0, 0xd6, 0x4e, 0x7f, 0x77, 0x61, 0xd7, 0x21, 0x5d, 0x96, 0x33, 0x85, 0x51, 0x16, 0xf8, 0x7e,
+	0xf6, 0x89, 0xfd, 0x00, 0xfb, 0x3e, 0x09, 0xa4, 0x86, 0xf9, 0x1f, 0x6b, 0x60, 0x76, 0x9b, 0x7b,
+	0xea, 0xc7, 0xfc, 0xc1, 0x96, 0x1d, 0x1a, 0xe4, 0x75, 0x9f, 0x84, 0x14, 0x9e, 0x03, 0xf5, 0x38,
+	0xbf, 0x74, 0x6c, 0x54, 0x3b, 0x5f, 0xbb, 0x30, 0x6a, 0x80, 0x48, 0xb4, 0x61, 0xc3, 0x13, 0xe0,
+	0xe8, 0xeb, 0x3e, 0x09, 0x06, 0xe8, 0x10, 0xef, 0x12, 0x0d, 0x78, 0x16, 0x00, 0x9f, 0xc5, 0x48,
+	0xea, 0x75, 0x88, 0x8b, 0x0e, 0xf3, 0xae, 0x51, 0x26, 0x79, 0xc1, 0x04, 0xf0, 0x34, 0xe0, 0x0d,
+	0x33, 0x74, 0xde, 0x12, 0x74, 0xe4, 0x7c, 0xed, 0xc2, 0x51, 0x63, 0x84, 0x09, 0xb6, 0x9d, 0xb7,
+	0x64, 0xfe, 0x9f, 0x35, 0x30, 0x97, 0xb3, 0x26, 0xf4, 0x3d, 0x37, 0x24, 0x70, 0x1d, 0x1c, 0x0f,
+	0x48, 0xd8, 0xef, 0xd2, 0x10, 0xd5, 0xce, 0x1f, 0xbe, 0x50, 0x5f, 0x6a, 0x36, 0xcb, 0xca, 0x55,
+	0xcd, 0x44, 0x8b, 0xb7, 0x6f, 0x44, 0x70, 0xf8, 0x21, 0x98, 0x74, 0xc9, 0x2f, 0xa8, 0xa9, 0x98,
+	0x29, 0xde, 0x60, 0x9c, 0x89, 0xb7, 0x62, 0x53, 0x9b, 0x60, 0x86, 0x7a, 0x2c, 0xe6, 0x4a, 0xa0,
+	0xc9, 0x4b, 0x1a, 0xfc, 0x95, 0x0e, 0x1b, 0xd3, 0xbc, 0xcb, 0x10, 0x3d, 0x6b, 0xac, 0x03, 0x2e,
+	0x03, 0x90, 0x8c, 0x3f, 0x3a, 0x7a, 0xbe, 0x76, 0xa1, 0xbe, 0xd4, 0x88, 0x8c, 0x8c, 0x26, 0xa0,
+	0xf9, 0x88, 0x3d, 0xb2, 0x89, 0xc3, 0x8e, 0x31, 0xba, 0x1b, 0xfd, 0x9c, 0xff, 0xe9, 0x1a, 0x18,
+	0x53, 0x8d, 0x85, 0x5f, 0x80, 0x89, 0x74, 0x09, 0x05, 0x5d, 0xe4, 0xfa, 0x16, 0x87, 0xbe, 0x74,
+	0xec, 0xfb, 0x9b, 0x2d, 0x01, 0x5c, 0xe5, 0x38, 0x63, 0x1c, 0xab, 0x4d, 0xe8, 0x83, 0xb9, 0x21,
+	0xb5, 0x19, 0xf4, 0x31, 0x67, 0xb8, 0x59, 0x95, 0x61, 0x4b, 0xe2, 0x8d, 0x93, 0xb8, 0x48, 0x0c,
+	0x1f, 0x82, 0x91, 0xc8, 0x35, 0xf3, 0xb1, 0xab, 0x2f, 0x5d, 0xd4, 0xa1, 0xb0, 0x1f, 0x33, 0x84,
+	0x71, 0x1c, 0x8b, 0x1f, 0xf0, 0x29, 0xa8, 0x2b, 0x61, 0x0a, 0x4d, 0x71, 0x4d, 0x97, 0xf4, 0x35,
+	0xb5, 0x6c, 0x63, 0x14, 0x47, 0x3f, 0x61, 0x07, 0xcc, 0x16, 0x97, 0x7e, 0xd0, 0x32, 0x57, 0x7c,
+	0xbd, 0x82, 0x62, 0x09, 0x7f, 0xe9, 0x90, 0x7d, 0x63, 0x06, 0xe7, 0x85, 0x70, 0x0f, 0x9c, 0x2c,
+	0x8c, 0x92, 0x08, 0x71, 0xae, 0x6b, 0xfa, 0x5c, 0xab, 0x8e, 0xbd, 0x29, 0xc1, 0x06, 0xc4, 0x39,
+	0x19, 0xc4, 0x00, 0xe6, 0x23, 0x29, 0x9a, 0xe6, 0x34, 0x57, 0xf4, 0x69, 0xd6, 0x22, 0xa8, 0x31,
+	0x85, 0x33, 0x12, 0x68, 0x80, 0xf1, 0x54, 0xe5, 0x09, 0xad, 0x71, 0xed, 0x4d, 0x7d, 0xed, 0x8f,
+	0x08, 0xb1, 0x8d, 0x3a, 0x4e, 0x1a, 0xf0, 0x73, 0x30, 0x91, 0x2e, 0x4b, 0xa1, 0x45, 0xae, 0x74,
+	0x41, 0x47, 0x69, 0x9b, 0x18, 0x0c, 0xc7, 0x87, 0x7f, 0x0c, 0x2b, 0x2d, 0xf8, 0xff, 0x60, 0x2a,
+	0x1b, 0xdb, 0x11, 0xe4, 0x8a, 0x97, 0x34, 0x14, 0xaf, 0x0a, 0xe8, 0xb6, 0x44, 0x1a, 0x93, 0x3b,
+	0x69, 0x01, 0x7c, 0x01, 0xc6, 0x53, 0xa5, 0x2d, 0xf4, 0xbf, 0xda, 0x46, 0xaf, 0x0a, 0xdc, 0x36,
+	0x83, 0x19, 0x63, 0x3b, 0x4a, 0x0b, 0x7e, 0x05, 0x26, 0x33, 0x99, 0x00, 0x9a, 0xe1, 0x7a, 0x2f,
+	0x6b, 0xe8, 0x5d, 0x93, 0x48, 0xb9, 0xf7, 0x27, 0xac, 0x54, 0x1b, 0x3e, 0x06, 0x23, 0x91, 0x84,
+	0xbb, 0xbc, 0xfa, 0xd2, 0xc7, 0x15, 0x94, 0x1a, 0x31, 0x18, 0xf6, 0xc0, 0x6c, 0x71, 0xb1, 0x0d,
+	0x3d, 0xe4, 0x6a, 0x6f, 0x54, 0x50, 0x9b, 0xda, 0x3f, 0x27, 0xac, 0x02, 0x29, 0xfc, 0x39, 0x38,
+	0x59, 0x98, 0x63, 0xa1, 0x86, 0xf6, 0x66, 0x8d, 0x47, 0x46, 0xd9, 0x41, 0x33, 0x56, 0x5e, 0x08,
+	0x2d, 0x00, 0xf3, 0x99, 0x14, 0x3a, 0xc1, 0x89, 0xae, 0x56, 0x20, 0x4a, 0xf6, 0xd0, 0xb4, 0x95,
+	0x15, 0xb1, 0xa5, 0x93, 0x2a, 0xdc, 0xa1, 0x7b, 0xda, 0x4b, 0x27, 0xd2, 0xcf, 0x77, 0xd1, 0x98,
+	0xa5, 0xb4, 0x58, 0xd0, 0x48, 0x67, 0x70, 0xe8, 0x94, 0x76, 0xd0, 0x88, 0xd4, 0x0a, 0xaf, 0x1b,
+	0x5b, 0x27, 0x7c, 0xaf, 0x0d, 0x66, 0x0a, 0x52, 0x34, 0xf4, 0x7e, 0xe5, 0x41, 0xd9, 0xe6, 0xe0,
+	0x6d, 0x42, 0x93, 0x41, 0x89, 0x45, 0x6c, 0xbb, 0x66, 0x2b, 0x84, 0x68, 0x55, 0x7b, 0xbb, 0xae,
+	0x09, 0xe8, 0x9a, 0x44, 0x1a, 0x93, 0x56, 0x5a, 0xc0, 0xc7, 0x5c, 0x2d, 0x23, 0xa2, 0xff, 0xd1,
+	0x1f, 0x73, 0x8e, 0xdb, 0xe6, 0x30, 0x63, 0xcc, 0x52, 0x5a, 0x7c, 0x4b, 0xc9, 0x94, 0x88, 0xa7,
+	0x48, 0x9a, 0x5b, 0x4a, 0x42, 0x8c, 0x18, 0xcc, 0xd7, 0x78, 0x51, 0x39, 0x0f, 0xdd, 0xd1, 0x5f,
+	0xe3, 0x12, 0xbf, 0x29, 0xe0, 0x4f, 0x1d, 0xb7, 0x63, 0xcc, 0x58, 0x79, 0x21, 0x6c, 0x83, 0x13,
+	0x45, 0xf5, 0x4a, 0x74, 0x57, 0x3b, 0x1e, 0x45, 0x54, 0x6b, 0x1c, 0xcd, 0x99, 0xa0, 0x95, 0x93,
+	0x71, 0x67, 0x96, 0x26, 0x42, 0x8f, 0xf4, 0x9d, 0x59, 0x4a, 0x9f, 0x31, 0x91, 0xd6, 0xcf, 0xe7,
+	0x53, 0x2d, 0x9b, 0xa2, 0xfb, 0xfa, 0xf3, 0x29, 0x71, 0x72, 0x0f, 0x29, 0x2d, 0x36, 0x34, 0x45,
+	0x65, 0x51, 0xb4, 0xa0, 0x3d, 0x34, 0x0f, 0x04, 0xfc, 0x89, 0x40, 0x73, 0xaf, 0x06, 0xed, 0x9c,
+	0x0c, 0xde, 0x02, 0x47, 0xb8, 0xd5, 0x4d, 0xae, 0xf8, 0x23, 0x0d, 0xc5, 0xdc, 0x5a, 0x0e, 0x82,
+	0xeb, 0x60, 0x34, 0x2e, 0xa8, 0xa2, 0x25, 0xed, 0x65, 0xc7, 0x34, 0x6c, 0x50, 0xd2, 0x33, 0x46,
+	0x76, 0xe5, 0x2f, 0xf8, 0x19, 0x18, 0x53, 0xeb, 0xac, 0x68, 0x45, 0x3b, 0x9a, 0x33, 0x65, 0x9b,
+	0x02, 0x65, 0xd4, 0x77, 0x93, 0x06, 0x7c, 0x06, 0xea, 0x4a, 0x11, 0x16, 0x5d, 0xe0, 0x1a, 0x3f,
+	0xd1, 0xd0, 0xf8, 0x98, 0xa3, 0xf8, 0x88, 0x81, 0x76, 0xfc, 0x9b, 0x79, 0x9f, 0x82, 0xfa, 0x2c,
+	0x9a, 0xd3, 0xf6, 0x3e, 0x8f, 0x89, 0xf7, 0x82, 0x83, 0x63, 0xe7, 0x30, 0xdd, 0xce, 0x8a, 0xe0,
+	0xff, 0x81, 0xa9, 0x6c, 0x21, 0x17, 0x5d, 0xd1, 0x5e, 0xab, 0xeb, 0x0c, 0xca, 0x9d, 0x25, 0x37,
+	0x7f, 0x62, 0x2f, 0xd5, 0x66, 0xf1, 0xb2, 0xb8, 0xd6, 0x8b, 0x1e, 0x6b, 0xc7, 0x4b, 0x4e, 0xb1,
+	0x95, 0xe0, 0x45, 0xbc, 0xdc, 0x2b, 0x90, 0xb2, 0x49, 0x4d, 0x2d, 0xde, 0x93, 0xda, 0x93, 0xaa,
+	0xae, 0xda, 0x7a, 0x47, 0x59, 0xae, 0x8a, 0x4a, 0xbf, 0x8b, 0x5d, 0x74, 0xbe, 0xaa, 0xca, 0xad,
+	0x2e, 0x76, 0x63, 0x95, 0xac, 0xc1, 0x3c, 0x5e, 0x61, 0x2d, 0x19, 0xfd, 0x97, 0xb6, 0xc7, 0x53,
+	0x74, 0xc7, 0x59, 0xca, 0x4c, 0x27, 0x2f, 0x84, 0xdf, 0xd7, 0xc0, 0xd9, 0x03, 0x6b, 0xc7, 0x68,
+	0x9e, 0x93, 0xde, 0xa9, 0x46, 0xfa, 0x4c, 0x6a, 0x91, 0x22, 0xa3, 0xd1, 0x19, 0xda, 0xc7, 0xbe,
+	0x02, 0x0a, 0x2b, 0xef, 0xe8, 0xbf, 0xb5, 0x5d, 0x8b, 0xc2, 0x1c, 0x7d, 0x1f, 0xc1, 0x4e, 0x4e,
+	0xc6, 0x7c, 0x58, 0x51, 0x95, 0x1d, 0x7d, 0xf0, 0x2e, 0x44, 0xd1, 0xab, 0xa9, 0x44, 0xd1, 0x2b,
+	0xfd, 0x0c, 0x4c, 0xe7, 0x6a, 0xe2, 0xe8, 0x86, 0xf6, 0xd7, 0xc6, 0x53, 0x89, 0x8d, 0xb7, 0xe5,
+	0x54, 0x37, 0x23, 0x61, 0x1b, 0xa7, 0xb8, 0x74, 0x8e, 0xae, 0x69, 0x6f, 0x1c, 0x11, 0xf9, 0x98,
+	0xe1, 0x02, 0x2f, 0x36, 0x4e, 0xaf, 0x40, 0xca, 0x46, 0xae, 0xa8, 0xd2, 0x8e, 0x3e, 0xd1, 0x1e,
+	0xb9, 0x2d, 0x09, 0x17, 0xe9, 0x81, 0xf0, 0xfe, 0x7e, 0x4e, 0xc6, 0x3e, 0xd4, 0xf2, 0x45, 0x79,
+	0x74, 0x5d, 0x7b, 0xe8, 0xb6, 0x04, 0x38, 0xf1, 0x38, 0x53, 0x7e, 0x46, 0x02, 0xbf, 0x04, 0x13,
+	0xe9, 0xda, 0x3d, 0x9a, 0xd5, 0x76, 0x67, 0x46, 0x0a, 0x68, 0x64, 0x14, 0x31, 0x5f, 0x99, 0x2d,
+	0xef, 0xa3, 0x07, 0xda, 0xca, 0x45, 0x85, 0xe7, 0x05, 0x09, 0x7a, 0xc2, 0x57, 0x86, 0xa9, 0x36,
+	0x4b, 0x03, 0xb3, 0x95, 0x38, 0x74, 0x56, 0x3b, 0x0d, 0x14, 0xe9, 0x64, 0x92, 0x7c, 0x4f, 0x86,
+	0x69, 0x01, 0x7c, 0x02, 0x80, 0x92, 0xc2, 0x9e, 0xd6, 0x2e, 0x23, 0x24, 0xa9, 0xeb, 0x68, 0x18,
+	0xa7, 0xac, 0x4f, 0x00, 0x48, 0xce, 0x01, 0xd0, 0x25, 0x6d, 0x65, 0x2f, 0x18, 0x88, 0xbf, 0xfd,
+	0x28, 0x8d, 0x7e, 0xb2, 0x84, 0x26, 0x75, 0x40, 0x80, 0x6e, 0x69, 0x27, 0x34, 0x9f, 0x87, 0x24,
+	0xd8, 0x90, 0x30, 0x63, 0xac, 0xaf, 0xb4, 0x58, 0xaa, 0x10, 0x17, 0x17, 0xd1, 0x87, 0xda, 0xa9,
+	0x02, 0xd3, 0xf8, 0xd4, 0x09, 0xa9, 0x31, 0xd2, 0x97, 0xbf, 0xd8, 0xe7, 0x45, 0xfa, 0xb0, 0x04,
+	0x9d, 0xd3, 0xfe, 0xbc, 0xe0, 0x2f, 0x1c, 0xef, 0xf3, 0x71, 0xaa, 0x36, 0xe1, 0x5d, 0x70, 0x94,
+	0x9f, 0x57, 0xa0, 0x8f, 0xb8, 0xbe, 0x0b, 0x1a, 0xfa, 0x5e, 0xb2, 0xe7, 0x0d, 0x01, 0x83, 0x2d,
+	0x70, 0x5c, 0x5e, 0x3c, 0xe3, 0x15, 0xc5, 0x83, 0xb2, 0x29, 0x71, 0x4f, 0xad, 0xb9, 0x29, 0x1e,
+	0x37, 0x22, 0x1c, 0xdc, 0x05, 0x93, 0x99, 0xeb, 0x68, 0xbc, 0x80, 0x37, 0xb1, 0x74, 0x77, 0xa8,
+	0x2a, 0x7e, 0x9d, 0xaa, 0xd9, 0xb2, 0x9f, 0x09, 0xd0, 0x8b, 0x81, 0x4f, 0x1e, 0xba, 0xfd, 0x5e,
+	0x5a, 0x62, 0x8c, 0x63, 0xb5, 0x09, 0x17, 0xc1, 0x11, 0x1b, 0x53, 0x82, 0x8e, 0x71, 0x3b, 0xcf,
+	0xe4, 0xaa, 0x83, 0xdb, 0x34, 0x70, 0xdc, 0xf6, 0x4b, 0xdc, 0xed, 0x13, 0x83, 0x3f, 0x09, 0x5f,
+	0x82, 0xba, 0x72, 0xe7, 0x0d, 0x1d, 0xe7, 0x56, 0x5d, 0x2f, 0xb1, 0xea, 0x01, 0x1e, 0x3c, 0xdf,
+	0xfd, 0x82, 0x90, 0x0e, 0xb7, 0x28, 0x6e, 0x19, 0xa3, 0x76, 0xf4, 0x13, 0xae, 0x83, 0x63, 0xe2,
+	0x6a, 0x1c, 0x1a, 0xe1, 0x2a, 0x17, 0xcb, 0x54, 0xf2, 0x87, 0x85, 0x3e, 0xfe, 0xd3, 0x90, 0x78,
+	0xf8, 0x12, 0x9c, 0x12, 0xc9, 0xcd, 0x8e, 0xe7, 0x75, 0x1c, 0xb7, 0x6d, 0xee, 0x3b, 0xae, 0xed,
+	0xed, 0x9b, 0x36, 0x1e, 0x84, 0x68, 0x9b, 0xbf, 0xe8, 0xe9, 0xdc, 0x8b, 0x6e, 0xb8, 0xf4, 0xfa,
+	0x55, 0xf1, 0x9e, 0x22, 0x35, 0x5a, 0x15, 0xe0, 0x2f, 0x38, 0xf6, 0x01, 0x1e, 0x84, 0x70, 0x0d,
+	0x4c, 0x0a, 0xbd, 0x16, 0x61, 0x8b, 0xd9, 0x74, 0x6c, 0xb4, 0x5e, 0xae, 0x6d, 0x9c, 0x63, 0xd6,
+	0x38, 0x64, 0xc3, 0x86, 0x4f, 0xc0, 0x8c, 0x54, 0xb2, 0x47, 0xac, 0x8e, 0xe9, 0xb8, 0xfc, 0x7a,
+	0x1f, 0xda, 0xd0, 0x18, 0x7f, 0x91, 0x0f, 0xae, 0x31, 0xdc, 0x86, 0xfb, 0x80, 0xcd, 0xc5, 0x6b,
+	0xd0, 0xc8, 0x29, 0x4b, 0xa6, 0xe6, 0xd3, 0xff, 0x68, 0x6a, 0x4e, 0xa6, 0xd9, 0xa2, 0x69, 0xba,
+	0x05, 0x80, 0xa4, 0x74, 0xe8, 0x00, 0x3d, 0xd1, 0x30, 0x7b, 0x54, 0x28, 0x72, 0xe8, 0x00, 0xde,
+	0x06, 0x75, 0x09, 0xee, 0xe2, 0x30, 0x44, 0x4f, 0x87, 0x8f, 0xde, 0x95, 0x25, 0x01, 0x16, 0x64,
+	0x6b, 0xec, 0x71, 0xd8, 0x02, 0xe3, 0x12, 0xed, 0xf5, 0x5d, 0x1a, 0x0c, 0xd0, 0xa6, 0x06, 0xfb,
+	0x98, 0x50, 0x20, 0x10, 0xf0, 0xc7, 0x5a, 0xb4, 0x36, 0x0a, 0x2e, 0x55, 0xa2, 0x67, 0x7c, 0xc0,
+	0xb6, 0x4a, 0x06, 0x8c, 0xe7, 0xbd, 0x6c, 0xf8, 0xb7, 0x23, 0x74, 0xbc, 0xd5, 0x8a, 0xbb, 0xe4,
+	0x82, 0xca, 0xc9, 0xe1, 0x53, 0x20, 0xd2, 0x65, 0xb3, 0x4b, 0xdc, 0xb6, 0xb8, 0xa9, 0x19, 0x52,
+	0x3c, 0x40, 0xcf, 0xcb, 0xc7, 0x65, 0x9a, 0x03, 0x9f, 0x72, 0xdc, 0xf3, 0xdd, 0x6d, 0x8a, 0x07,
+	0xf0, 0x4e, 0x34, 0xb8, 0x2c, 0x51, 0x20, 0xe8, 0x33, 0x8d, 0xc1, 0x11, 0xa3, 0xcb, 0xd2, 0x00,
+	0x02, 0x17, 0xc0, 0x91, 0x3d, 0xaf, 0x1f, 0xa0, 0xd1, 0x72, 0x72, 0xfe, 0x20, 0x5c, 0x02, 0x47,
+	0xf9, 0x05, 0x53, 0x04, 0x34, 0x98, 0xc4, 0xa3, 0xf0, 0x6b, 0x30, 0x9e, 0xba, 0x94, 0x8a, 0xce,
+	0xf0, 0x21, 0x5f, 0x29, 0x19, 0xf2, 0x4d, 0x86, 0x79, 0xbe, 0xfb, 0x25, 0xc1, 0x01, 0x1f, 0x67,
+	0xa5, 0x6d, 0xd4, 0x7b, 0x49, 0x03, 0x3e, 0x02, 0x53, 0x3e, 0x0e, 0xa8, 0x4b, 0x02, 0x53, 0x8c,
+	0x85, 0x63, 0x23, 0x43, 0xc3, 0xbc, 0x09, 0x89, 0xe2, 0x13, 0xb8, 0x61, 0xc3, 0x1e, 0x98, 0xca,
+	0xde, 0x84, 0x45, 0x2d, 0x6e, 0xea, 0x6a, 0x89, 0xa9, 0x5b, 0x09, 0x2c, 0x5e, 0x16, 0x19, 0x99,
+	0x31, 0xe9, 0xa7, 0x05, 0xf0, 0x3a, 0x38, 0xfe, 0xba, 0x8f, 0x03, 0x4a, 0x02, 0x34, 0xa6, 0x61,
+	0x6d, 0xf4, 0x30, 0xfc, 0x25, 0x98, 0x2d, 0xbe, 0x7a, 0x8b, 0x6e, 0x72, 0x63, 0x3f, 0x2d, 0x31,
+	0x36, 0xc9, 0x7c, 0x36, 0x19, 0x34, 0x36, 0xb8, 0x40, 0x6e, 0xcc, 0x84, 0x79, 0x21, 0xbc, 0x0f,
+	0x8e, 0x84, 0x5d, 0x8f, 0xa2, 0x71, 0x4e, 0x77, 0xa9, 0x8c, 0xae, 0xeb, 0x51, 0xa1, 0xbf, 0xeb,
+	0x51, 0x83, 0x23, 0x59, 0x00, 0xe2, 0xce, 0x6a, 0x42, 0x27, 0x00, 0xb1, 0x27, 0xd9, 0x42, 0xe5,
+	0x4b, 0x67, 0x52, 0x63, 0xa1, 0xb2, 0x07, 0xe7, 0xff, 0x58, 0x03, 0xb3, 0x9b, 0x7d, 0xb6, 0xc8,
+	0xab, 0x9f, 0x29, 0x7e, 0x0d, 0xa6, 0x7b, 0x1c, 0x6a, 0x7a, 0x3e, 0x09, 0xc4, 0x61, 0x27, 0x3a,
+	0xc4, 0xcf, 0xfb, 0x2e, 0x97, 0x9f, 0xf7, 0x09, 0xd6, 0xe7, 0x11, 0xd2, 0x98, 0xea, 0xa5, 0x05,
+	0xe1, 0xfc, 0xef, 0x6b, 0x60, 0x2e, 0x67, 0x9b, 0x3c, 0x61, 0xdc, 0x07, 0x8d, 0x2c, 0xb7, 0x19,
+	0xc8, 0xce, 0xe8, 0xd0, 0x71, 0xb9, 0xba, 0x11, 0x52, 0x83, 0x81, 0x7a, 0xc5, 0x1d, 0xe1, 0xfc,
+	0x9f, 0x27, 0xc0, 0x64, 0x06, 0x05, 0x1d, 0xe5, 0xcc, 0x08, 0xdb, 0x89, 0x45, 0xb2, 0xc8, 0x78,
+	0xb5, 0xdc, 0x8e, 0xf8, 0xdc, 0x2b, 0x56, 0xba, 0xfe, 0x5e, 0x7c, 0x68, 0xa4, 0x48, 0xe1, 0x6f,
+	0x6a, 0xe0, 0x5c, 0xf1, 0x2d, 0x8e, 0x84, 0xf5, 0x50, 0xc9, 0xd7, 0x71, 0x96, 0x55, 0xa9, 0xa8,
+	0xab, 0xf4, 0xa7, 0xf1, 0xf0, 0x6e, 0xf8, 0x1d, 0x38, 0x53, 0x70, 0x0d, 0x24, 0xb1, 0x41, 0x1c,
+	0x1e, 0xde, 0xd2, 0xb6, 0x21, 0xce, 0xf9, 0x55, 0x0b, 0x4e, 0xe1, 0x61, 0x9d, 0x70, 0x47, 0x39,
+	0x3c, 0x4b, 0x58, 0x8f, 0x96, 0x7c, 0x7a, 0x64, 0x59, 0x55, 0xb2, 0xe8, 0xf4, 0x2c, 0xe1, 0x78,
+	0x0b, 0x1a, 0xb9, 0xeb, 0x26, 0x09, 0x97, 0xc8, 0x0a, 0x57, 0xca, 0xb9, 0x32, 0x67, 0x53, 0x2a,
+	0x27, 0xda, 0x19, 0xd2, 0x07, 0x7f, 0x5b, 0x03, 0xe7, 0x8a, 0xaf, 0xaa, 0x24, 0x16, 0x1c, 0xe7,
+	0x16, 0xdc, 0x2d, 0xb7, 0xa0, 0xe0, 0x3c, 0x45, 0xb5, 0xe2, 0x8c, 0x75, 0x40, 0x3f, 0xdc, 0x07,
+	0xa7, 0xb2, 0xb7, 0x5d, 0x12, 0x13, 0x46, 0xb8, 0x09, 0xcb, 0x15, 0x4c, 0xe0, 0x1a, 0x54, 0xf6,
+	0x39, 0xab, 0xb8, 0x0b, 0x52, 0x80, 0x32, 0x77, 0x5c, 0x12, 0xde, 0xd1, 0x92, 0xe3, 0xef, 0x1c,
+	0x6f, 0x6e, 0xba, 0x67, 0xad, 0xc2, 0x1e, 0x68, 0x2b, 0x47, 0x4a, 0x09, 0x1f, 0x28, 0xf9, 0xd8,
+	0xcf, 0xf1, 0xa9, 0x54, 0xf1, 0xf1, 0x49, 0xc2, 0xf2, 0xab, 0x1a, 0x38, 0x5b, 0x74, 0x91, 0x26,
+	0x61, 0xac, 0x73, 0xc6, 0xdb, 0xfa, 0x8c, 0xf1, 0x37, 0xaf, 0x4a, 0xdd, 0xb0, 0x86, 0xf6, 0xc2,
+	0x6f, 0xc1, 0xe9, 0xfc, 0x3d, 0x9c, 0xc4, 0x80, 0x31, 0xdd, 0x1d, 0xbc, 0x16, 0x2b, 0x69, 0x71,
+	0x1d, 0xa9, 0x1d, 0x6c, 0x0d, 0xeb, 0x84, 0xdf, 0xd7, 0xc0, 0x99, 0x82, 0x6b, 0x50, 0x89, 0x01,
+	0xe3, 0x55, 0x47, 0xa0, 0xd0, 0x87, 0x34, 0xac, 0xa1, 0xbd, 0x6c, 0x83, 0xe7, 0xee, 0x11, 0x25,
+	0xfc, 0x13, 0xba, 0x1b, 0x3c, 0x53, 0xc6, 0x48, 0x6d, 0xf0, 0x70, 0x48, 0x1f, 0xdc, 0x03, 0x27,
+	0x0a, 0xe7, 0x7d, 0x52, 0x37, 0x64, 0x14, 0xce, 0x37, 0x0c, 0xf3, 0xf3, 0x4c, 0xc0, 0x4c, 0x72,
+	0x63, 0x29, 0x21, 0x9a, 0xd2, 0x5d, 0xd2, 0x51, 0x75, 0x21, 0xb5, 0xa4, 0xfb, 0x59, 0xe1, 0x6a,
+	0x1d, 0x8c, 0xc6, 0xca, 0xe7, 0xff, 0x35, 0x1e, 0x85, 0xee, 0x5c, 0x08, 0x85, 0xbb, 0x8a, 0xeb,
+	0xc6, 0xb6, 0xbc, 0xb0, 0x23, 0x43, 0xe5, 0x0d, 0xdd, 0x90, 0x9d, 0x5c, 0x14, 0xe1, 0xf0, 0xf5,
+	0xf7, 0x8c, 0x49, 0x9c, 0x16, 0xc1, 0x1f, 0x6a, 0x4a, 0x8c, 0x4a, 0xb9, 0x50, 0x49, 0x29, 0xe2,
+	0xe4, 0xfd, 0x8a, 0x94, 0xea, 0xa1, 0x74, 0xc4, 0x8d, 0xf0, 0x90, 0x3e, 0xf8, 0x0d, 0x38, 0x55,
+	0x10, 0x27, 0xa5, 0x01, 0x87, 0x75, 0x1d, 0x78, 0xca, 0x80, 0xa4, 0x5e, 0x16, 0xd1, 0xcf, 0xe2,
+	0xc2, 0x1e, 0x68, 0xf2, 0x42, 0x89, 0x20, 0x97, 0x94, 0x47, 0x4b, 0x8a, 0xa3, 0xc5, 0x94, 0x31,
+	0xd3, 0x38, 0x56, 0x05, 0x70, 0x1f, 0xcc, 0xe5, 0x22, 0xa4, 0x24, 0x3a, 0xa6, 0x9b, 0x84, 0x08,
+	0xa2, 0xec, 0x05, 0x8e, 0x88, 0xf0, 0xe4, 0x4e, 0x51, 0x07, 0xfc, 0xb5, 0xea, 0x3c, 0x8a, 0xe6,
+	0x56, 0xc4, 0xc6, 0x96, 0x2e, 0x7d, 0xd1, 0x8d, 0x83, 0xc8, 0x84, 0x53, 0xd6, 0xb0, 0x4e, 0x48,
+	0x95, 0xab, 0x15, 0x32, 0x36, 0x4a, 0xfe, 0x11, 0x5d, 0xe7, 0x95, 0xe1, 0x17, 0x77, 0x41, 0x22,
+	0xea, 0x13, 0x56, 0x81, 0x1c, 0xbe, 0x56, 0x6e, 0x58, 0xa4, 0x26, 0x77, 0x54, 0xd7, 0x65, 0xa7,
+	0x49, 0xd3, 0x53, 0x3c, 0x63, 0xe5, 0xc5, 0x10, 0x2b, 0x17, 0x5d, 0x24, 0x19, 0x28, 0x39, 0xf8,
+	0x19, 0x42, 0x16, 0xf3, 0xc4, 0xd7, 0x1f, 0x24, 0xc5, 0x77, 0xa0, 0x51, 0x14, 0x11, 0x25, 0x9b,
+	0x08, 0x87, 0xf7, 0xaa, 0xb2, 0x25, 0x85, 0xe0, 0x88, 0x76, 0xce, 0x2a, 0xee, 0x82, 0x6f, 0x01,
+	0xca, 0x87, 0x43, 0xc9, 0x3e, 0x56, 0x6d, 0xa3, 0x66, 0x23, 0x62, 0xb2, 0x51, 0xad, 0xc2, 0x1e,
+	0xf8, 0xad, 0x92, 0x63, 0xe5, 0xbc, 0xc4, 0xf8, 0xbb, 0xbd, 0x7a, 0xde, 0x4d, 0xcc, 0x59, 0xc5,
+	0x5d, 0x6c, 0x1b, 0xe7, 0xe2, 0xa0, 0x24, 0x9f, 0xa8, 0xb6, 0x8d, 0xb3, 0x15, 0xfd, 0x78, 0x1b,
+	0x87, 0x45, 0x1d, 0x90, 0x80, 0xe9, 0xfc, 0x54, 0x4f, 0x56, 0x8b, 0x04, 0xf9, 0x29, 0x9e, 0x0c,
+	0x33, 0x53, 0xbb, 0x03, 0xa6, 0x92, 0x08, 0x28, 0x59, 0xa6, 0xaa, 0x2d, 0xdf, 0xb8, 0xc4, 0x1e,
+	0x2f, 0xdf, 0x7e, 0x4a, 0xb2, 0x0a, 0xc0, 0x48, 0xf4, 0xfd, 0xb9, 0xf4, 0xbb, 0xc3, 0x60, 0x2a,
+	0xfe, 0x64, 0xdd, 0x16, 0x8a, 0xe0, 0x5f, 0x6b, 0xe0, 0x98, 0xa8, 0x1d, 0x40, 0x8d, 0xbc, 0xb5,
+	0xf8, 0x9e, 0x6f, 0x63, 0xf9, 0x1d, 0x90, 0xc2, 0xa8, 0xf9, 0xe5, 0x1f, 0xfe, 0xf6, 0x8f, 0x3f,
+	0x1c, 0xba, 0x32, 0xdf, 0xe4, 0x7f, 0x01, 0x97, 0x5f, 0xf1, 0xe1, 0xc2, 0x37, 0xca, 0x37, 0xfe,
+	0x9d, 0x8b, 0xdf, 0xca, 0x2b, 0xcf, 0x2d, 0x3b, 0x5c, 0x11, 0x35, 0x8d, 0x95, 0xda, 0x45, 0x6e,
+	0xba, 0x18, 0x06, 0x1d, 0xd3, 0x8b, 0xcb, 0x09, 0x8d, 0xe5, 0x77, 0x40, 0xbe, 0xab, 0xe9, 0xe2,
+	0xeb, 0x7d, 0xa5, 0x76, 0x71, 0xf5, 0xef, 0x35, 0xf0, 0x81, 0xe5, 0xf5, 0x4a, 0xb9, 0x57, 0x4f,
+	0x66, 0x27, 0x6c, 0x2b, 0xf0, 0xa8, 0xb7, 0x55, 0xfb, 0x6a, 0x5d, 0x42, 0xdb, 0x5e, 0x17, 0xbb,
+	0xed, 0xa6, 0x17, 0xb4, 0x17, 0xda, 0xc4, 0xe5, 0x15, 0x95, 0xe8, 0x7e, 0xb8, 0xef, 0x84, 0xc3,
+	0xaf, 0x8b, 0xdf, 0x8a, 0x7e, 0xfc, 0xe9, 0xd0, 0xe1, 0xc7, 0xad, 0xd6, 0x5f, 0x0e, 0x9d, 0x17,
+	0x4c, 0xcd, 0x96, 0xad, 0x5c, 0x7a, 0x6e, 0xbe, 0x5c, 0x6c, 0x4a, 0xe2, 0xf0, 0xa7, 0xe8, 0x91,
+	0x57, 0x2d, 0x3b, 0x7c, 0x15, 0x3f, 0xf2, 0xea, 0xe5, 0xe2, 0xab, 0xe8, 0x91, 0x9d, 0x63, 0xdc,
+	0x80, 0x2b, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x68, 0xc3, 0x82, 0x42, 0x40, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/hotel_group_view_service.pb.go b/googleapis/ads/googleads/v0/services/hotel_group_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e659204814488fd63dae061f06055c0c7551f6de
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/hotel_group_view_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/hotel_group_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [HotelGroupViewService.GetHotelGroupView][google.ads.googleads.v0.services.HotelGroupViewService.GetHotelGroupView].
+type GetHotelGroupViewRequest struct {
+	// Resource name of the Hotel Group View to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetHotelGroupViewRequest) Reset()         { *m = GetHotelGroupViewRequest{} }
+func (m *GetHotelGroupViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetHotelGroupViewRequest) ProtoMessage()    {}
+func (*GetHotelGroupViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_group_view_service_d553180658033695, []int{0}
+}
+func (m *GetHotelGroupViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetHotelGroupViewRequest.Unmarshal(m, b)
+}
+func (m *GetHotelGroupViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetHotelGroupViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetHotelGroupViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetHotelGroupViewRequest.Merge(dst, src)
+}
+func (m *GetHotelGroupViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetHotelGroupViewRequest.Size(m)
+}
+func (m *GetHotelGroupViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetHotelGroupViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetHotelGroupViewRequest proto.InternalMessageInfo
+
+func (m *GetHotelGroupViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetHotelGroupViewRequest)(nil), "google.ads.googleads.v0.services.GetHotelGroupViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// HotelGroupViewServiceClient is the client API for HotelGroupViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type HotelGroupViewServiceClient interface {
+	// Returns the requested Hotel Group View in full detail.
+	GetHotelGroupView(ctx context.Context, in *GetHotelGroupViewRequest, opts ...grpc.CallOption) (*resources.HotelGroupView, error)
+}
+
+type hotelGroupViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewHotelGroupViewServiceClient(cc *grpc.ClientConn) HotelGroupViewServiceClient {
+	return &hotelGroupViewServiceClient{cc}
+}
+
+func (c *hotelGroupViewServiceClient) GetHotelGroupView(ctx context.Context, in *GetHotelGroupViewRequest, opts ...grpc.CallOption) (*resources.HotelGroupView, error) {
+	out := new(resources.HotelGroupView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.HotelGroupViewService/GetHotelGroupView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// HotelGroupViewServiceServer is the server API for HotelGroupViewService service.
+type HotelGroupViewServiceServer interface {
+	// Returns the requested Hotel Group View in full detail.
+	GetHotelGroupView(context.Context, *GetHotelGroupViewRequest) (*resources.HotelGroupView, error)
+}
+
+func RegisterHotelGroupViewServiceServer(s *grpc.Server, srv HotelGroupViewServiceServer) {
+	s.RegisterService(&_HotelGroupViewService_serviceDesc, srv)
+}
+
+func _HotelGroupViewService_GetHotelGroupView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetHotelGroupViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(HotelGroupViewServiceServer).GetHotelGroupView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.HotelGroupViewService/GetHotelGroupView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(HotelGroupViewServiceServer).GetHotelGroupView(ctx, req.(*GetHotelGroupViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _HotelGroupViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.HotelGroupViewService",
+	HandlerType: (*HotelGroupViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetHotelGroupView",
+			Handler:    _HotelGroupViewService_GetHotelGroupView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/hotel_group_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/hotel_group_view_service.proto", fileDescriptor_hotel_group_view_service_d553180658033695)
+}
+
+var fileDescriptor_hotel_group_view_service_d553180658033695 = []byte{
+	// 351 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0x8c, 0xfc, 0x92, 0xd4, 0x9c, 0xf8, 0xf4, 0xa2, 0xfc,
+	0xd2, 0x82, 0xf8, 0xb2, 0xcc, 0xd4, 0xf2, 0x78, 0xa8, 0x8c, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe,
+	0x90, 0x02, 0x44, 0x97, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0xdc, 0x00, 0xbd, 0x32, 0x03, 0x3d, 0x98,
+	0x01, 0x52, 0x16, 0xb8, 0xac, 0x28, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0xc2, 0x66, 0x07, 0xc4, 0x6c,
+	0x29, 0x19, 0x98, 0xce, 0x82, 0x4c, 0xfd, 0xc4, 0xbc, 0xbc, 0xfc, 0x92, 0xc4, 0x92, 0xcc, 0xfc,
+	0xbc, 0x62, 0x88, 0xac, 0x92, 0x3d, 0x97, 0x84, 0x7b, 0x6a, 0x89, 0x07, 0x48, 0xab, 0x3b, 0x48,
+	0x67, 0x58, 0x66, 0x6a, 0x79, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x90, 0x32, 0x17, 0x2f,
+	0xcc, 0xf4, 0xf8, 0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x1e, 0x98,
+	0xa0, 0x5f, 0x62, 0x6e, 0xaa, 0xd1, 0x75, 0x46, 0x2e, 0x51, 0x54, 0xed, 0xc1, 0x10, 0x37, 0x0b,
+	0xed, 0x65, 0xe4, 0x12, 0xc4, 0x30, 0x5b, 0xc8, 0x4a, 0x8f, 0x90, 0x5f, 0xf5, 0x70, 0x39, 0x48,
+	0xca, 0x10, 0xa7, 0x5e, 0x78, 0x28, 0xe8, 0xa1, 0xea, 0x54, 0xb2, 0x6c, 0xba, 0xfc, 0x64, 0x32,
+	0x93, 0xb1, 0x90, 0x21, 0x28, 0xac, 0xaa, 0x51, 0xbc, 0x63, 0x9b, 0x5c, 0x5a, 0x5c, 0x92, 0x9f,
+	0x9b, 0x5a, 0x54, 0xac, 0xaf, 0x05, 0x09, 0x3c, 0xb8, 0xb6, 0x62, 0x7d, 0xad, 0x5a, 0xa7, 0x5b,
+	0x8c, 0x5c, 0x2a, 0xc9, 0xf9, 0xb9, 0x04, 0xdd, 0xeb, 0x24, 0x85, 0xd5, 0xff, 0x01, 0xa0, 0xf0,
+	0x0d, 0x60, 0x8c, 0xf2, 0x80, 0xea, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0xcb, 0x2f, 0x4a,
+	0xd7, 0x4f, 0x4f, 0xcd, 0x03, 0x87, 0x3e, 0x2c, 0x26, 0x0b, 0x32, 0x8b, 0x71, 0xa7, 0x1d, 0x6b,
+	0x18, 0x63, 0x11, 0x13, 0xb3, 0xbb, 0xa3, 0xe3, 0x2a, 0x26, 0x05, 0x77, 0x88, 0x81, 0x8e, 0x29,
+	0xc5, 0x7a, 0x10, 0x26, 0x88, 0x15, 0x66, 0xa0, 0x07, 0xb5, 0xb8, 0xf8, 0x14, 0x4c, 0x49, 0x8c,
+	0x63, 0x4a, 0x71, 0x0c, 0x5c, 0x49, 0x4c, 0x98, 0x41, 0x0c, 0x4c, 0x49, 0x12, 0x1b, 0xd8, 0x01,
+	0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0xe6, 0xf0, 0xd1, 0xbb, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/hotel_performance_view_service.pb.go b/googleapis/ads/googleads/v0/services/hotel_performance_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3f1c11eee284d737d3c839fd49e0ac81020983c2
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/hotel_performance_view_service.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/hotel_performance_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [HotelPerformanceViewService.GetHotelPerformanceView][google.ads.googleads.v0.services.HotelPerformanceViewService.GetHotelPerformanceView].
+type GetHotelPerformanceViewRequest struct {
+	// Resource name of the Hotel Performance View to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetHotelPerformanceViewRequest) Reset()         { *m = GetHotelPerformanceViewRequest{} }
+func (m *GetHotelPerformanceViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetHotelPerformanceViewRequest) ProtoMessage()    {}
+func (*GetHotelPerformanceViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_hotel_performance_view_service_91d056d973d5a9fa, []int{0}
+}
+func (m *GetHotelPerformanceViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetHotelPerformanceViewRequest.Unmarshal(m, b)
+}
+func (m *GetHotelPerformanceViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetHotelPerformanceViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetHotelPerformanceViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetHotelPerformanceViewRequest.Merge(dst, src)
+}
+func (m *GetHotelPerformanceViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetHotelPerformanceViewRequest.Size(m)
+}
+func (m *GetHotelPerformanceViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetHotelPerformanceViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetHotelPerformanceViewRequest proto.InternalMessageInfo
+
+func (m *GetHotelPerformanceViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetHotelPerformanceViewRequest)(nil), "google.ads.googleads.v0.services.GetHotelPerformanceViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// HotelPerformanceViewServiceClient is the client API for HotelPerformanceViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type HotelPerformanceViewServiceClient interface {
+	// Returns the requested Hotel Performance View in full detail.
+	GetHotelPerformanceView(ctx context.Context, in *GetHotelPerformanceViewRequest, opts ...grpc.CallOption) (*resources.HotelPerformanceView, error)
+}
+
+type hotelPerformanceViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewHotelPerformanceViewServiceClient(cc *grpc.ClientConn) HotelPerformanceViewServiceClient {
+	return &hotelPerformanceViewServiceClient{cc}
+}
+
+func (c *hotelPerformanceViewServiceClient) GetHotelPerformanceView(ctx context.Context, in *GetHotelPerformanceViewRequest, opts ...grpc.CallOption) (*resources.HotelPerformanceView, error) {
+	out := new(resources.HotelPerformanceView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.HotelPerformanceViewService/GetHotelPerformanceView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// HotelPerformanceViewServiceServer is the server API for HotelPerformanceViewService service.
+type HotelPerformanceViewServiceServer interface {
+	// Returns the requested Hotel Performance View in full detail.
+	GetHotelPerformanceView(context.Context, *GetHotelPerformanceViewRequest) (*resources.HotelPerformanceView, error)
+}
+
+func RegisterHotelPerformanceViewServiceServer(s *grpc.Server, srv HotelPerformanceViewServiceServer) {
+	s.RegisterService(&_HotelPerformanceViewService_serviceDesc, srv)
+}
+
+func _HotelPerformanceViewService_GetHotelPerformanceView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetHotelPerformanceViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(HotelPerformanceViewServiceServer).GetHotelPerformanceView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.HotelPerformanceViewService/GetHotelPerformanceView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(HotelPerformanceViewServiceServer).GetHotelPerformanceView(ctx, req.(*GetHotelPerformanceViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _HotelPerformanceViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.HotelPerformanceViewService",
+	HandlerType: (*HotelPerformanceViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetHotelPerformanceView",
+			Handler:    _HotelPerformanceViewService_GetHotelPerformanceView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/hotel_performance_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/hotel_performance_view_service.proto", fileDescriptor_hotel_performance_view_service_91d056d973d5a9fa)
+}
+
+var fileDescriptor_hotel_performance_view_service_91d056d973d5a9fa = []byte{
+	// 355 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0x8c, 0xfc, 0x92, 0xd4, 0x9c, 0xf8, 0x82, 0xd4, 0xa2,
+	0xb4, 0xfc, 0xa2, 0xdc, 0xc4, 0xbc, 0xe4, 0xd4, 0xf8, 0xb2, 0xcc, 0xd4, 0xf2, 0x78, 0xa8, 0xbc,
+	0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02, 0x44, 0xaf, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0xdc,
+	0x18, 0xbd, 0x32, 0x03, 0x3d, 0x98, 0x31, 0x52, 0x76, 0xb8, 0x2c, 0x2a, 0x4a, 0x2d, 0xce, 0x2f,
+	0x2d, 0xc2, 0x6d, 0x13, 0xc4, 0x06, 0x29, 0x19, 0x98, 0xfe, 0x82, 0x4c, 0xfd, 0xc4, 0xbc, 0xbc,
+	0xfc, 0x92, 0xc4, 0x92, 0xcc, 0xfc, 0xbc, 0x62, 0x88, 0xac, 0x92, 0x2b, 0x97, 0x9c, 0x7b, 0x6a,
+	0x89, 0x07, 0xc8, 0x80, 0x00, 0x84, 0xfe, 0xb0, 0xcc, 0xd4, 0xf2, 0xa0, 0xd4, 0xc2, 0xd2, 0xd4,
+	0xe2, 0x12, 0x21, 0x65, 0x2e, 0x5e, 0x98, 0x4d, 0xf1, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a,
+	0x8c, 0x1a, 0x9c, 0x41, 0x3c, 0x30, 0x41, 0xbf, 0xc4, 0xdc, 0x54, 0xa3, 0x4f, 0x8c, 0x5c, 0xd2,
+	0xd8, 0x0c, 0x09, 0x86, 0xf8, 0x42, 0xe8, 0x12, 0x23, 0x97, 0x38, 0x0e, 0x7b, 0x84, 0x1c, 0xf4,
+	0x08, 0x85, 0x81, 0x1e, 0x7e, 0x27, 0x4a, 0x99, 0xe3, 0x34, 0x01, 0x1e, 0x46, 0x7a, 0xd8, 0xf4,
+	0x2b, 0xd9, 0x34, 0x5d, 0x7e, 0x32, 0x99, 0xc9, 0x4c, 0xc8, 0x04, 0x14, 0x9e, 0xd5, 0x28, 0xde,
+	0xb4, 0x4d, 0x2e, 0x2d, 0x2e, 0xc9, 0xcf, 0x4d, 0x2d, 0x2a, 0xd6, 0xd7, 0x82, 0x04, 0x30, 0x9a,
+	0xe6, 0x5a, 0xa7, 0x07, 0x8c, 0x5c, 0x2a, 0xc9, 0xf9, 0xb9, 0x04, 0x9d, 0xef, 0xa4, 0x80, 0x27,
+	0x68, 0x02, 0x40, 0xd1, 0x10, 0xc0, 0x18, 0xe5, 0x01, 0x35, 0x25, 0x3d, 0x3f, 0x27, 0x31, 0x2f,
+	0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, 0x1c, 0x49, 0xb0, 0x68, 0x2f, 0xc8, 0x2c,
+	0xc6, 0x9d, 0xdc, 0xac, 0x61, 0x8c, 0x45, 0x4c, 0xcc, 0xee, 0x8e, 0x8e, 0xab, 0x98, 0x14, 0xdc,
+	0x21, 0x06, 0x3a, 0xa6, 0x14, 0xeb, 0x41, 0x98, 0x20, 0x56, 0x98, 0x81, 0x1e, 0xd4, 0xe2, 0xe2,
+	0x53, 0x30, 0x25, 0x31, 0x8e, 0x29, 0xc5, 0x31, 0x70, 0x25, 0x31, 0x61, 0x06, 0x31, 0x30, 0x25,
+	0x49, 0x6c, 0x60, 0x07, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3e, 0x98, 0x29, 0x9f, 0xee,
+	0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/keyword_plan_ad_group_service.pb.go b/googleapis/ads/googleads/v0/services/keyword_plan_ad_group_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3aa3b748fd0736c30e962523147b51f0e6456327
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/keyword_plan_ad_group_service.pb.go
@@ -0,0 +1,549 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/keyword_plan_ad_group_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [KeywordPlanAdGroupService.GetKeywordPlanAdGroup][google.ads.googleads.v0.services.KeywordPlanAdGroupService.GetKeywordPlanAdGroup].
+type GetKeywordPlanAdGroupRequest struct {
+	// The resource name of the Keyword Plan ad group to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanAdGroupRequest) Reset()         { *m = GetKeywordPlanAdGroupRequest{} }
+func (m *GetKeywordPlanAdGroupRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanAdGroupRequest) ProtoMessage()    {}
+func (*GetKeywordPlanAdGroupRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_service_4b428822531a4896, []int{0}
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanAdGroupRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanAdGroupRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetKeywordPlanAdGroupRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanAdGroupRequest.Merge(dst, src)
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanAdGroupRequest.Size(m)
+}
+func (m *GetKeywordPlanAdGroupRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanAdGroupRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanAdGroupRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanAdGroupRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanAdGroupService.MutateKeywordPlanAdGroups][google.ads.googleads.v0.services.KeywordPlanAdGroupService.MutateKeywordPlanAdGroups].
+type MutateKeywordPlanAdGroupsRequest struct {
+	// The ID of the customer whose Keyword Plan ad groups are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual Keyword Plan ad groups.
+	Operations           []*KeywordPlanAdGroupOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MutateKeywordPlanAdGroupsRequest) Reset()         { *m = MutateKeywordPlanAdGroupsRequest{} }
+func (m *MutateKeywordPlanAdGroupsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanAdGroupsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanAdGroupsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_service_4b428822531a4896, []int{1}
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanAdGroupsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Merge(dst, src)
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.Size(m)
+}
+func (m *MutateKeywordPlanAdGroupsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanAdGroupsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanAdGroupsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanAdGroupsRequest) GetOperations() []*KeywordPlanAdGroupOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a Keyword Plan ad group.
+type KeywordPlanAdGroupOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanAdGroupOperation_Create
+	//	*KeywordPlanAdGroupOperation_Update
+	//	*KeywordPlanAdGroupOperation_Remove
+	Operation            isKeywordPlanAdGroupOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *KeywordPlanAdGroupOperation) Reset()         { *m = KeywordPlanAdGroupOperation{} }
+func (m *KeywordPlanAdGroupOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroupOperation) ProtoMessage()    {}
+func (*KeywordPlanAdGroupOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_service_4b428822531a4896, []int{2}
+}
+func (m *KeywordPlanAdGroupOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroupOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroupOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroupOperation.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanAdGroupOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroupOperation.Merge(dst, src)
+}
+func (m *KeywordPlanAdGroupOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroupOperation.Size(m)
+}
+func (m *KeywordPlanAdGroupOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroupOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroupOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanAdGroupOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanAdGroupOperation_Operation interface {
+	isKeywordPlanAdGroupOperation_Operation()
+}
+
+type KeywordPlanAdGroupOperation_Create struct {
+	Create *resources.KeywordPlanAdGroup `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanAdGroupOperation_Update struct {
+	Update *resources.KeywordPlanAdGroup `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanAdGroupOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanAdGroupOperation_Create) isKeywordPlanAdGroupOperation_Operation() {}
+
+func (*KeywordPlanAdGroupOperation_Update) isKeywordPlanAdGroupOperation_Operation() {}
+
+func (*KeywordPlanAdGroupOperation_Remove) isKeywordPlanAdGroupOperation_Operation() {}
+
+func (m *KeywordPlanAdGroupOperation) GetOperation() isKeywordPlanAdGroupOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupOperation) GetCreate() *resources.KeywordPlanAdGroup {
+	if x, ok := m.GetOperation().(*KeywordPlanAdGroupOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupOperation) GetUpdate() *resources.KeywordPlanAdGroup {
+	if x, ok := m.GetOperation().(*KeywordPlanAdGroupOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanAdGroupOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*KeywordPlanAdGroupOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _KeywordPlanAdGroupOperation_OneofMarshaler, _KeywordPlanAdGroupOperation_OneofUnmarshaler, _KeywordPlanAdGroupOperation_OneofSizer, []interface{}{
+		(*KeywordPlanAdGroupOperation_Create)(nil),
+		(*KeywordPlanAdGroupOperation_Update)(nil),
+		(*KeywordPlanAdGroupOperation_Remove)(nil),
+	}
+}
+
+func _KeywordPlanAdGroupOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*KeywordPlanAdGroupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanAdGroupOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *KeywordPlanAdGroupOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *KeywordPlanAdGroupOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("KeywordPlanAdGroupOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _KeywordPlanAdGroupOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*KeywordPlanAdGroupOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanAdGroup)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanAdGroupOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanAdGroup)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanAdGroupOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &KeywordPlanAdGroupOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _KeywordPlanAdGroupOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*KeywordPlanAdGroupOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanAdGroupOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanAdGroupOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanAdGroupOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a Keyword Plan ad group mutate.
+type MutateKeywordPlanAdGroupsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanAdGroupResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *MutateKeywordPlanAdGroupsResponse) Reset()         { *m = MutateKeywordPlanAdGroupsResponse{} }
+func (m *MutateKeywordPlanAdGroupsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanAdGroupsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanAdGroupsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_service_4b428822531a4896, []int{3}
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanAdGroupsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Merge(dst, src)
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.Size(m)
+}
+func (m *MutateKeywordPlanAdGroupsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanAdGroupsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanAdGroupsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanAdGroupsResponse) GetResults() []*MutateKeywordPlanAdGroupResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan ad group mutate.
+type MutateKeywordPlanAdGroupResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanAdGroupResult) Reset()         { *m = MutateKeywordPlanAdGroupResult{} }
+func (m *MutateKeywordPlanAdGroupResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanAdGroupResult) ProtoMessage()    {}
+func (*MutateKeywordPlanAdGroupResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_ad_group_service_4b428822531a4896, []int{4}
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanAdGroupResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanAdGroupResult.Merge(dst, src)
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanAdGroupResult.Size(m)
+}
+func (m *MutateKeywordPlanAdGroupResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanAdGroupResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanAdGroupResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanAdGroupResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanAdGroupRequest)(nil), "google.ads.googleads.v0.services.GetKeywordPlanAdGroupRequest")
+	proto.RegisterType((*MutateKeywordPlanAdGroupsRequest)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanAdGroupsRequest")
+	proto.RegisterType((*KeywordPlanAdGroupOperation)(nil), "google.ads.googleads.v0.services.KeywordPlanAdGroupOperation")
+	proto.RegisterType((*MutateKeywordPlanAdGroupsResponse)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanAdGroupsResponse")
+	proto.RegisterType((*MutateKeywordPlanAdGroupResult)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanAdGroupResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// KeywordPlanAdGroupServiceClient is the client API for KeywordPlanAdGroupService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanAdGroupServiceClient interface {
+	// Returns the requested Keyword Plan ad group in full detail.
+	GetKeywordPlanAdGroup(ctx context.Context, in *GetKeywordPlanAdGroupRequest, opts ...grpc.CallOption) (*resources.KeywordPlanAdGroup, error)
+	// Creates, updates, or removes Keyword Plan ad groups. Operation statuses are
+	// returned.
+	MutateKeywordPlanAdGroups(ctx context.Context, in *MutateKeywordPlanAdGroupsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanAdGroupsResponse, error)
+}
+
+type keywordPlanAdGroupServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewKeywordPlanAdGroupServiceClient(cc *grpc.ClientConn) KeywordPlanAdGroupServiceClient {
+	return &keywordPlanAdGroupServiceClient{cc}
+}
+
+func (c *keywordPlanAdGroupServiceClient) GetKeywordPlanAdGroup(ctx context.Context, in *GetKeywordPlanAdGroupRequest, opts ...grpc.CallOption) (*resources.KeywordPlanAdGroup, error) {
+	out := new(resources.KeywordPlanAdGroup)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanAdGroupService/GetKeywordPlanAdGroup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanAdGroupServiceClient) MutateKeywordPlanAdGroups(ctx context.Context, in *MutateKeywordPlanAdGroupsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanAdGroupsResponse, error) {
+	out := new(MutateKeywordPlanAdGroupsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanAdGroupService/MutateKeywordPlanAdGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanAdGroupServiceServer is the server API for KeywordPlanAdGroupService service.
+type KeywordPlanAdGroupServiceServer interface {
+	// Returns the requested Keyword Plan ad group in full detail.
+	GetKeywordPlanAdGroup(context.Context, *GetKeywordPlanAdGroupRequest) (*resources.KeywordPlanAdGroup, error)
+	// Creates, updates, or removes Keyword Plan ad groups. Operation statuses are
+	// returned.
+	MutateKeywordPlanAdGroups(context.Context, *MutateKeywordPlanAdGroupsRequest) (*MutateKeywordPlanAdGroupsResponse, error)
+}
+
+func RegisterKeywordPlanAdGroupServiceServer(s *grpc.Server, srv KeywordPlanAdGroupServiceServer) {
+	s.RegisterService(&_KeywordPlanAdGroupService_serviceDesc, srv)
+}
+
+func _KeywordPlanAdGroupService_GetKeywordPlanAdGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanAdGroupRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanAdGroupServiceServer).GetKeywordPlanAdGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanAdGroupService/GetKeywordPlanAdGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanAdGroupServiceServer).GetKeywordPlanAdGroup(ctx, req.(*GetKeywordPlanAdGroupRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanAdGroupService_MutateKeywordPlanAdGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanAdGroupsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanAdGroupServiceServer).MutateKeywordPlanAdGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanAdGroupService/MutateKeywordPlanAdGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanAdGroupServiceServer).MutateKeywordPlanAdGroups(ctx, req.(*MutateKeywordPlanAdGroupsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanAdGroupService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.KeywordPlanAdGroupService",
+	HandlerType: (*KeywordPlanAdGroupServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanAdGroup",
+			Handler:    _KeywordPlanAdGroupService_GetKeywordPlanAdGroup_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanAdGroups",
+			Handler:    _KeywordPlanAdGroupService_MutateKeywordPlanAdGroups_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/keyword_plan_ad_group_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/keyword_plan_ad_group_service.proto", fileDescriptor_keyword_plan_ad_group_service_4b428822531a4896)
+}
+
+var fileDescriptor_keyword_plan_ad_group_service_4b428822531a4896 = []byte{
+	// 612 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4f, 0x8b, 0xd3, 0x4e,
+	0x18, 0xc7, 0x7f, 0x49, 0x7f, 0x54, 0x76, 0xa2, 0x97, 0x01, 0x21, 0x5b, 0x97, 0x35, 0x46, 0x0f,
+	0xa5, 0x87, 0xa4, 0x54, 0x16, 0x65, 0x97, 0x88, 0x6d, 0xd5, 0xae, 0xc8, 0xba, 0x25, 0xc2, 0x1e,
+	0x96, 0x4a, 0x98, 0x6d, 0x66, 0x43, 0x68, 0x92, 0x89, 0x33, 0x49, 0x45, 0x96, 0x45, 0xf0, 0x2d,
+	0xf8, 0x0e, 0xd6, 0x9b, 0x2f, 0x45, 0xf0, 0xe4, 0xc1, 0x9b, 0x27, 0x2f, 0xbe, 0x0b, 0x99, 0x4c,
+	0xa6, 0x56, 0xda, 0xb4, 0xb2, 0x7b, 0x7b, 0x32, 0xf3, 0xcc, 0xe7, 0xf9, 0xf3, 0x9d, 0x67, 0x02,
+	0x9e, 0x04, 0x84, 0x04, 0x11, 0xb6, 0x91, 0xcf, 0x6c, 0x61, 0x72, 0x6b, 0xda, 0xb6, 0x19, 0xa6,
+	0xd3, 0x70, 0x8c, 0x99, 0x3d, 0xc1, 0xef, 0xde, 0x12, 0xea, 0x7b, 0x69, 0x84, 0x12, 0x0f, 0xf9,
+	0x5e, 0x40, 0x49, 0x9e, 0x7a, 0xe5, 0xb6, 0x95, 0x52, 0x92, 0x11, 0x68, 0x88, 0xa3, 0x16, 0xf2,
+	0x99, 0x35, 0xa3, 0x58, 0xd3, 0xb6, 0x25, 0x29, 0x0d, 0xa7, 0x2a, 0x0e, 0xc5, 0x8c, 0xe4, 0xb4,
+	0x32, 0x90, 0x08, 0xd0, 0xd8, 0x92, 0xc7, 0xd3, 0xd0, 0x46, 0x49, 0x42, 0x32, 0x94, 0x85, 0x24,
+	0x61, 0xe5, 0x6e, 0x19, 0xde, 0x2e, 0xbe, 0x4e, 0xf2, 0x53, 0xfb, 0x34, 0xc4, 0x91, 0xef, 0xc5,
+	0x88, 0x4d, 0x84, 0x87, 0xd9, 0x07, 0x5b, 0x03, 0x9c, 0xbd, 0x10, 0x11, 0x86, 0x11, 0x4a, 0xba,
+	0xfe, 0x80, 0xe3, 0x5d, 0xfc, 0x26, 0xc7, 0x2c, 0x83, 0x77, 0xc1, 0x0d, 0x99, 0x88, 0x97, 0xa0,
+	0x18, 0xeb, 0x8a, 0xa1, 0x34, 0x37, 0xdc, 0xeb, 0x72, 0xf1, 0x25, 0x8a, 0xb1, 0x79, 0xa1, 0x00,
+	0xe3, 0x20, 0xcf, 0x50, 0x86, 0x17, 0x41, 0x4c, 0x92, 0x6e, 0x03, 0x6d, 0x9c, 0xb3, 0x8c, 0xc4,
+	0x98, 0x7a, 0xa1, 0x5f, 0x72, 0x80, 0x5c, 0x7a, 0xee, 0xc3, 0xd7, 0x00, 0x90, 0x14, 0x53, 0x51,
+	0x80, 0xae, 0x1a, 0xb5, 0xa6, 0xd6, 0x71, 0xac, 0x75, 0x0d, 0xb4, 0x16, 0x43, 0x1e, 0x4a, 0x8a,
+	0x3b, 0x07, 0x34, 0x3f, 0xa9, 0xe0, 0xd6, 0x0a, 0x5f, 0xb8, 0x07, 0xb4, 0x3c, 0xf5, 0x51, 0x86,
+	0x8b, 0xf6, 0xe8, 0xff, 0x1b, 0x4a, 0x53, 0xeb, 0x34, 0x64, 0x7c, 0xd9, 0x41, 0xeb, 0x19, 0xef,
+	0xe0, 0x01, 0x62, 0x13, 0x17, 0x08, 0x77, 0x6e, 0xc3, 0x43, 0x50, 0x1f, 0x53, 0x8c, 0x32, 0xd1,
+	0x1f, 0xad, 0xb3, 0x53, 0x99, 0xf7, 0x4c, 0xd6, 0x25, 0x89, 0xef, 0xff, 0xe7, 0x96, 0x18, 0x0e,
+	0x14, 0x78, 0x5d, 0xbd, 0x22, 0x50, 0x60, 0xa0, 0x0e, 0xea, 0x14, 0xc7, 0x64, 0x8a, 0xf5, 0x1a,
+	0xef, 0x3c, 0xdf, 0x11, 0xdf, 0x3d, 0x0d, 0x6c, 0xcc, 0xda, 0x64, 0xbe, 0x07, 0x77, 0x56, 0x28,
+	0xc9, 0x52, 0x92, 0x30, 0x0c, 0x8f, 0xc1, 0x35, 0x8a, 0x59, 0x1e, 0x65, 0x52, 0xa6, 0xc7, 0xeb,
+	0x65, 0xaa, 0xa2, 0xba, 0x05, 0xc8, 0x95, 0x40, 0xf3, 0x29, 0xd8, 0x5e, 0xed, 0xfa, 0x4f, 0x57,
+	0xb2, 0xf3, 0xbd, 0x06, 0x36, 0x17, 0x09, 0xaf, 0x44, 0x36, 0xf0, 0xab, 0x02, 0x6e, 0x2e, 0xbd,
+	0xf6, 0xf0, 0xd1, 0xfa, 0x4a, 0x56, 0xcd, 0x4b, 0xe3, 0x72, 0x3a, 0x99, 0xce, 0x87, 0x6f, 0x3f,
+	0x3f, 0xaa, 0x0f, 0xe0, 0x0e, 0x9f, 0xfc, 0xb3, 0xbf, 0xca, 0x73, 0xe4, 0x88, 0x30, 0xbb, 0x25,
+	0x9f, 0x82, 0x79, 0x55, 0xec, 0xd6, 0x39, 0xfc, 0xa5, 0x80, 0xcd, 0x4a, 0xd9, 0x60, 0xef, 0xf2,
+	0xea, 0xc8, 0xe9, 0x6d, 0xf4, 0xaf, 0xc4, 0x10, 0xf7, 0xc6, 0xec, 0x17, 0x55, 0x3a, 0xe6, 0x43,
+	0x5e, 0xe5, 0x9f, 0xb2, 0xce, 0xe6, 0xde, 0x05, 0xa7, 0x75, 0xbe, 0xac, 0xc8, 0xdd, 0xb8, 0x80,
+	0xef, 0x2a, 0xad, 0xde, 0x0f, 0x05, 0xdc, 0x1b, 0x93, 0x78, 0x6d, 0x3e, 0xbd, 0xed, 0x4a, 0xfd,
+	0x87, 0x7c, 0x98, 0x87, 0xca, 0xf1, 0x7e, 0xc9, 0x08, 0x48, 0x84, 0x92, 0xc0, 0x22, 0x34, 0xb0,
+	0x03, 0x9c, 0x14, 0xa3, 0x2e, 0xdf, 0xe2, 0x34, 0x64, 0xd5, 0xbf, 0x80, 0x3d, 0x69, 0x5c, 0xa8,
+	0xb5, 0x41, 0xb7, 0xfb, 0x59, 0x35, 0x06, 0x02, 0xd8, 0xf5, 0x99, 0x25, 0x4c, 0x6e, 0x1d, 0xb5,
+	0xad, 0x32, 0x30, 0xfb, 0x22, 0x5d, 0x46, 0x5d, 0x9f, 0x8d, 0x66, 0x2e, 0xa3, 0xa3, 0xf6, 0x48,
+	0xba, 0x9c, 0xd4, 0x8b, 0x04, 0xee, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x19, 0x0f, 0xc5,
+	0x82, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/keyword_plan_campaign_service.pb.go b/googleapis/ads/googleads/v0/services/keyword_plan_campaign_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4b477abe12863112bf611beb2598761ec44c2b44
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/keyword_plan_campaign_service.pb.go
@@ -0,0 +1,550 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/keyword_plan_campaign_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [KeywordPlanCampaignService.GetKeywordPlanCampaign][google.ads.googleads.v0.services.KeywordPlanCampaignService.GetKeywordPlanCampaign].
+type GetKeywordPlanCampaignRequest struct {
+	// The resource name of the Keyword Plan campaign to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanCampaignRequest) Reset()         { *m = GetKeywordPlanCampaignRequest{} }
+func (m *GetKeywordPlanCampaignRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanCampaignRequest) ProtoMessage()    {}
+func (*GetKeywordPlanCampaignRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_service_ec02efaeac104dba, []int{0}
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanCampaignRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanCampaignRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetKeywordPlanCampaignRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanCampaignRequest.Merge(dst, src)
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanCampaignRequest.Size(m)
+}
+func (m *GetKeywordPlanCampaignRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanCampaignRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanCampaignRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanCampaignRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [KeywordPlanCampaignService.MutateKeywordPlanCampaigns][google.ads.googleads.v0.services.KeywordPlanCampaignService.MutateKeywordPlanCampaigns].
+type MutateKeywordPlanCampaignsRequest struct {
+	// The ID of the customer whose Keyword Plan campaigns are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual Keyword Plan campaigns.
+	Operations           []*KeywordPlanCampaignOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *MutateKeywordPlanCampaignsRequest) Reset()         { *m = MutateKeywordPlanCampaignsRequest{} }
+func (m *MutateKeywordPlanCampaignsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanCampaignsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanCampaignsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_service_ec02efaeac104dba, []int{1}
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanCampaignsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Merge(dst, src)
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsRequest.Size(m)
+}
+func (m *MutateKeywordPlanCampaignsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanCampaignsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanCampaignsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanCampaignsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanCampaignsRequest) GetOperations() []*KeywordPlanCampaignOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a Keyword Plan campaign.
+type KeywordPlanCampaignOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanCampaignOperation_Create
+	//	*KeywordPlanCampaignOperation_Update
+	//	*KeywordPlanCampaignOperation_Remove
+	Operation            isKeywordPlanCampaignOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *KeywordPlanCampaignOperation) Reset()         { *m = KeywordPlanCampaignOperation{} }
+func (m *KeywordPlanCampaignOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaignOperation) ProtoMessage()    {}
+func (*KeywordPlanCampaignOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_service_ec02efaeac104dba, []int{2}
+}
+func (m *KeywordPlanCampaignOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaignOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaignOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaignOperation.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanCampaignOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaignOperation.Merge(dst, src)
+}
+func (m *KeywordPlanCampaignOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaignOperation.Size(m)
+}
+func (m *KeywordPlanCampaignOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaignOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaignOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanCampaignOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanCampaignOperation_Operation interface {
+	isKeywordPlanCampaignOperation_Operation()
+}
+
+type KeywordPlanCampaignOperation_Create struct {
+	Create *resources.KeywordPlanCampaign `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanCampaignOperation_Update struct {
+	Update *resources.KeywordPlanCampaign `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanCampaignOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanCampaignOperation_Create) isKeywordPlanCampaignOperation_Operation() {}
+
+func (*KeywordPlanCampaignOperation_Update) isKeywordPlanCampaignOperation_Operation() {}
+
+func (*KeywordPlanCampaignOperation_Remove) isKeywordPlanCampaignOperation_Operation() {}
+
+func (m *KeywordPlanCampaignOperation) GetOperation() isKeywordPlanCampaignOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignOperation) GetCreate() *resources.KeywordPlanCampaign {
+	if x, ok := m.GetOperation().(*KeywordPlanCampaignOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignOperation) GetUpdate() *resources.KeywordPlanCampaign {
+	if x, ok := m.GetOperation().(*KeywordPlanCampaignOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanCampaignOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*KeywordPlanCampaignOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _KeywordPlanCampaignOperation_OneofMarshaler, _KeywordPlanCampaignOperation_OneofUnmarshaler, _KeywordPlanCampaignOperation_OneofSizer, []interface{}{
+		(*KeywordPlanCampaignOperation_Create)(nil),
+		(*KeywordPlanCampaignOperation_Update)(nil),
+		(*KeywordPlanCampaignOperation_Remove)(nil),
+	}
+}
+
+func _KeywordPlanCampaignOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*KeywordPlanCampaignOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanCampaignOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *KeywordPlanCampaignOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *KeywordPlanCampaignOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("KeywordPlanCampaignOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _KeywordPlanCampaignOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*KeywordPlanCampaignOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanCampaign)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanCampaignOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanCampaign)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanCampaignOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &KeywordPlanCampaignOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _KeywordPlanCampaignOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*KeywordPlanCampaignOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanCampaignOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanCampaignOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanCampaignOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a Keyword Plan campaign mutate.
+type MutateKeywordPlanCampaignsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanCampaignResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *MutateKeywordPlanCampaignsResponse) Reset()         { *m = MutateKeywordPlanCampaignsResponse{} }
+func (m *MutateKeywordPlanCampaignsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanCampaignsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanCampaignsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_service_ec02efaeac104dba, []int{3}
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanCampaignsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Merge(dst, src)
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanCampaignsResponse.Size(m)
+}
+func (m *MutateKeywordPlanCampaignsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanCampaignsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanCampaignsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanCampaignsResponse) GetResults() []*MutateKeywordPlanCampaignResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan campaign mutate.
+type MutateKeywordPlanCampaignResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanCampaignResult) Reset()         { *m = MutateKeywordPlanCampaignResult{} }
+func (m *MutateKeywordPlanCampaignResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanCampaignResult) ProtoMessage()    {}
+func (*MutateKeywordPlanCampaignResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_campaign_service_ec02efaeac104dba, []int{4}
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanCampaignResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanCampaignResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanCampaignResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanCampaignResult.Merge(dst, src)
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanCampaignResult.Size(m)
+}
+func (m *MutateKeywordPlanCampaignResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanCampaignResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanCampaignResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanCampaignResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanCampaignRequest)(nil), "google.ads.googleads.v0.services.GetKeywordPlanCampaignRequest")
+	proto.RegisterType((*MutateKeywordPlanCampaignsRequest)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanCampaignsRequest")
+	proto.RegisterType((*KeywordPlanCampaignOperation)(nil), "google.ads.googleads.v0.services.KeywordPlanCampaignOperation")
+	proto.RegisterType((*MutateKeywordPlanCampaignsResponse)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanCampaignsResponse")
+	proto.RegisterType((*MutateKeywordPlanCampaignResult)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanCampaignResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// KeywordPlanCampaignServiceClient is the client API for KeywordPlanCampaignService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanCampaignServiceClient interface {
+	// Returns the requested Keyword Plan campaign in full detail.
+	GetKeywordPlanCampaign(ctx context.Context, in *GetKeywordPlanCampaignRequest, opts ...grpc.CallOption) (*resources.KeywordPlanCampaign, error)
+	// Creates, updates, or removes Keyword Plan campaigns. Operation statuses are
+	// returned.
+	MutateKeywordPlanCampaigns(ctx context.Context, in *MutateKeywordPlanCampaignsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanCampaignsResponse, error)
+}
+
+type keywordPlanCampaignServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewKeywordPlanCampaignServiceClient(cc *grpc.ClientConn) KeywordPlanCampaignServiceClient {
+	return &keywordPlanCampaignServiceClient{cc}
+}
+
+func (c *keywordPlanCampaignServiceClient) GetKeywordPlanCampaign(ctx context.Context, in *GetKeywordPlanCampaignRequest, opts ...grpc.CallOption) (*resources.KeywordPlanCampaign, error) {
+	out := new(resources.KeywordPlanCampaign)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanCampaignService/GetKeywordPlanCampaign", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanCampaignServiceClient) MutateKeywordPlanCampaigns(ctx context.Context, in *MutateKeywordPlanCampaignsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanCampaignsResponse, error) {
+	out := new(MutateKeywordPlanCampaignsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanCampaignService/MutateKeywordPlanCampaigns", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanCampaignServiceServer is the server API for KeywordPlanCampaignService service.
+type KeywordPlanCampaignServiceServer interface {
+	// Returns the requested Keyword Plan campaign in full detail.
+	GetKeywordPlanCampaign(context.Context, *GetKeywordPlanCampaignRequest) (*resources.KeywordPlanCampaign, error)
+	// Creates, updates, or removes Keyword Plan campaigns. Operation statuses are
+	// returned.
+	MutateKeywordPlanCampaigns(context.Context, *MutateKeywordPlanCampaignsRequest) (*MutateKeywordPlanCampaignsResponse, error)
+}
+
+func RegisterKeywordPlanCampaignServiceServer(s *grpc.Server, srv KeywordPlanCampaignServiceServer) {
+	s.RegisterService(&_KeywordPlanCampaignService_serviceDesc, srv)
+}
+
+func _KeywordPlanCampaignService_GetKeywordPlanCampaign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanCampaignRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanCampaignServiceServer).GetKeywordPlanCampaign(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanCampaignService/GetKeywordPlanCampaign",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanCampaignServiceServer).GetKeywordPlanCampaign(ctx, req.(*GetKeywordPlanCampaignRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanCampaignService_MutateKeywordPlanCampaigns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanCampaignsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanCampaignServiceServer).MutateKeywordPlanCampaigns(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanCampaignService/MutateKeywordPlanCampaigns",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanCampaignServiceServer).MutateKeywordPlanCampaigns(ctx, req.(*MutateKeywordPlanCampaignsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanCampaignService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.KeywordPlanCampaignService",
+	HandlerType: (*KeywordPlanCampaignServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanCampaign",
+			Handler:    _KeywordPlanCampaignService_GetKeywordPlanCampaign_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanCampaigns",
+			Handler:    _KeywordPlanCampaignService_MutateKeywordPlanCampaigns_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/keyword_plan_campaign_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/keyword_plan_campaign_service.proto", fileDescriptor_keyword_plan_campaign_service_ec02efaeac104dba)
+}
+
+var fileDescriptor_keyword_plan_campaign_service_ec02efaeac104dba = []byte{
+	// 610 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4d, 0x8b, 0xd3, 0x40,
+	0x18, 0xc7, 0x4d, 0x2a, 0x95, 0x9d, 0xe8, 0x65, 0x0e, 0x12, 0xc2, 0x4a, 0x6b, 0xf4, 0x50, 0x7a,
+	0x48, 0x4a, 0x85, 0x45, 0x77, 0x69, 0xa5, 0xdd, 0xb2, 0x5d, 0x91, 0xd5, 0x12, 0x61, 0x0f, 0x5a,
+	0x0c, 0xb3, 0xcd, 0x6c, 0x08, 0x4d, 0x32, 0x71, 0x66, 0x52, 0x91, 0x65, 0x0f, 0xfa, 0x15, 0xfc,
+	0x06, 0x22, 0x1e, 0xfc, 0x28, 0xde, 0xc4, 0x0f, 0xa0, 0x07, 0xaf, 0x7e, 0x07, 0x49, 0x26, 0x53,
+	0x77, 0x21, 0x69, 0x65, 0x7b, 0x7b, 0x92, 0x79, 0xf2, 0x7b, 0x5e, 0xfe, 0xf3, 0x3c, 0x01, 0x23,
+	0x9f, 0x10, 0x3f, 0xc4, 0x36, 0xf2, 0x98, 0x2d, 0xcc, 0xcc, 0x5a, 0x74, 0x6c, 0x86, 0xe9, 0x22,
+	0x98, 0x61, 0x66, 0xcf, 0xf1, 0xbb, 0xb7, 0x84, 0x7a, 0x6e, 0x12, 0xa2, 0xd8, 0x9d, 0xa1, 0x28,
+	0x41, 0x81, 0x1f, 0xbb, 0xc5, 0xb1, 0x95, 0x50, 0xc2, 0x09, 0x6c, 0x8a, 0x4f, 0x2d, 0xe4, 0x31,
+	0x6b, 0x49, 0xb1, 0x16, 0x1d, 0x4b, 0x52, 0x8c, 0x5e, 0x55, 0x1c, 0x8a, 0x19, 0x49, 0x69, 0x65,
+	0x20, 0x11, 0xc0, 0xd8, 0x96, 0x9f, 0x27, 0x81, 0x8d, 0xe2, 0x98, 0x70, 0xc4, 0x03, 0x12, 0xb3,
+	0xe2, 0xb4, 0x08, 0x6f, 0xe7, 0x4f, 0x27, 0xe9, 0xa9, 0x7d, 0x1a, 0xe0, 0xd0, 0x73, 0x23, 0xc4,
+	0xe6, 0xc2, 0xc3, 0x1c, 0x81, 0x3b, 0x63, 0xcc, 0x9f, 0x8a, 0x08, 0x93, 0x10, 0xc5, 0xfb, 0x05,
+	0xdf, 0xc1, 0x6f, 0x52, 0xcc, 0x38, 0xbc, 0x07, 0x6e, 0xc9, 0x4c, 0xdc, 0x18, 0x45, 0x58, 0x57,
+	0x9a, 0x4a, 0x6b, 0xcb, 0xb9, 0x29, 0x5f, 0x3e, 0x43, 0x11, 0x36, 0x3f, 0x2b, 0xe0, 0xee, 0x51,
+	0xca, 0x11, 0xc7, 0x25, 0x24, 0x26, 0x51, 0x0d, 0xa0, 0xcd, 0x52, 0xc6, 0x49, 0x84, 0xa9, 0x1b,
+	0x78, 0x05, 0x08, 0xc8, 0x57, 0x4f, 0x3c, 0xf8, 0x1a, 0x00, 0x92, 0x60, 0x2a, 0x4a, 0xd0, 0xd5,
+	0x66, 0xad, 0xa5, 0x75, 0xfb, 0xd6, 0xba, 0x16, 0x5a, 0x25, 0x31, 0x9f, 0x4b, 0x8c, 0x73, 0x81,
+	0x68, 0x7e, 0x51, 0xc1, 0xf6, 0x2a, 0x67, 0xb8, 0x07, 0xb4, 0x34, 0xf1, 0x10, 0xc7, 0x79, 0x8b,
+	0xf4, 0xeb, 0x4d, 0xa5, 0xa5, 0x75, 0x0d, 0x99, 0x81, 0xec, 0xa2, 0x75, 0x90, 0x75, 0xf1, 0x08,
+	0xb1, 0xb9, 0x03, 0x84, 0x7b, 0x66, 0xc3, 0x09, 0xa8, 0xcf, 0x28, 0x46, 0x5c, 0xb4, 0x48, 0xeb,
+	0xee, 0x54, 0x66, 0xbe, 0x94, 0xb6, 0x2c, 0xf5, 0xc3, 0x6b, 0x4e, 0xc1, 0xc9, 0x88, 0x82, 0xaf,
+	0xab, 0x9b, 0x12, 0x05, 0x07, 0xea, 0xa0, 0x4e, 0x71, 0x44, 0x16, 0x58, 0xaf, 0x65, 0xdd, 0xcf,
+	0x4e, 0xc4, 0xf3, 0x50, 0x03, 0x5b, 0xcb, 0x4e, 0x99, 0xef, 0x15, 0x60, 0xae, 0xd2, 0x93, 0x25,
+	0x24, 0x66, 0x18, 0xbe, 0x02, 0x37, 0x28, 0x66, 0x69, 0xc8, 0xa5, 0x58, 0x83, 0xf5, 0x62, 0x55,
+	0x62, 0x9d, 0x9c, 0xe4, 0x48, 0xa2, 0x79, 0x00, 0x1a, 0x6b, 0x7c, 0xff, 0xeb, 0x6e, 0x76, 0x7f,
+	0xd5, 0x80, 0x51, 0x82, 0x78, 0x21, 0x12, 0x82, 0xdf, 0x15, 0x70, 0xbb, 0x7c, 0x02, 0xe0, 0xe3,
+	0xf5, 0xd5, 0xac, 0x9c, 0x1d, 0xe3, 0x8a, 0x7a, 0x99, 0xfd, 0x0f, 0x3f, 0x7e, 0x7f, 0x54, 0x1f,
+	0xc2, 0x9d, 0x6c, 0x0f, 0x9c, 0x5d, 0x2a, 0xb1, 0x27, 0xc7, 0x85, 0xd9, 0x6d, 0xb9, 0x18, 0x2e,
+	0x89, 0x63, 0xb7, 0xcf, 0xe1, 0x1f, 0x05, 0x18, 0xd5, 0xf2, 0xc1, 0xfd, 0x0d, 0x54, 0x92, 0xc3,
+	0x6c, 0x8c, 0x36, 0x83, 0x88, 0x1b, 0x64, 0x8e, 0xf2, 0x4a, 0xfb, 0xe6, 0xa3, 0xac, 0xd2, 0x7f,
+	0xa5, 0x9d, 0x5d, 0xd8, 0x13, 0xbd, 0xf6, 0x79, 0x69, 0xa1, 0xbb, 0x51, 0x8e, 0xdf, 0x55, 0xda,
+	0xc3, 0x9f, 0x0a, 0xb8, 0x3f, 0x23, 0xd1, 0xda, 0x8c, 0x86, 0x8d, 0xea, 0x8b, 0x30, 0xc9, 0x86,
+	0x7b, 0xa2, 0xbc, 0x3c, 0x2c, 0x20, 0x3e, 0x09, 0x51, 0xec, 0x5b, 0x84, 0xfa, 0xb6, 0x8f, 0xe3,
+	0x7c, 0xf4, 0xe5, 0x7e, 0x4e, 0x02, 0x56, 0xfd, 0x5b, 0xd8, 0x93, 0xc6, 0x27, 0xb5, 0x36, 0x1e,
+	0x0c, 0xbe, 0xaa, 0xcd, 0xb1, 0x00, 0x0e, 0x3c, 0x66, 0x09, 0x33, 0xb3, 0x8e, 0x3b, 0x56, 0x11,
+	0x98, 0x7d, 0x93, 0x2e, 0xd3, 0x81, 0xc7, 0xa6, 0x4b, 0x97, 0xe9, 0x71, 0x67, 0x2a, 0x5d, 0x4e,
+	0xea, 0x79, 0x02, 0x0f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x5b, 0x01, 0x1e, 0x6c, 0x96, 0x06,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/keyword_plan_idea_service.pb.go b/googleapis/ads/googleads/v0/services/keyword_plan_idea_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f2eb502a52821c3aee9bf4946c26356aece9dfc0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/keyword_plan_idea_service.pb.go
@@ -0,0 +1,604 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/keyword_plan_idea_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [KeywordIdeaService.GenerateKeywordIdeas][].
+type GenerateKeywordIdeasRequest struct {
+	// The ID of the customer with the recommendation.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The resource name of the language to target.
+	// Required
+	Language *wrappers.StringValue `protobuf:"bytes,7,opt,name=language,proto3" json:"language,omitempty"`
+	// The resource names of the location to target.
+	// Max 10
+	GeoTargetConstants []*wrappers.StringValue `protobuf:"bytes,8,rep,name=geo_target_constants,json=geoTargetConstants,proto3" json:"geo_target_constants,omitempty"`
+	// Targeting network.
+	KeywordPlanNetwork enums.KeywordPlanNetworkEnum_KeywordPlanNetwork `protobuf:"varint,9,opt,name=keyword_plan_network,json=keywordPlanNetwork,proto3,enum=google.ads.googleads.v0.enums.KeywordPlanNetworkEnum_KeywordPlanNetwork" json:"keyword_plan_network,omitempty"`
+	// The type of seed to generate keyword ideas.
+	//
+	// Types that are valid to be assigned to Seed:
+	//	*GenerateKeywordIdeasRequest_KeywordAndUrlSeed
+	//	*GenerateKeywordIdeasRequest_KeywordSeed
+	//	*GenerateKeywordIdeasRequest_UrlSeed
+	Seed                 isGenerateKeywordIdeasRequest_Seed `protobuf_oneof:"seed"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *GenerateKeywordIdeasRequest) Reset()         { *m = GenerateKeywordIdeasRequest{} }
+func (m *GenerateKeywordIdeasRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateKeywordIdeasRequest) ProtoMessage()    {}
+func (*GenerateKeywordIdeasRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_service_8eed2c943de898df, []int{0}
+}
+func (m *GenerateKeywordIdeasRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateKeywordIdeasRequest.Unmarshal(m, b)
+}
+func (m *GenerateKeywordIdeasRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateKeywordIdeasRequest.Marshal(b, m, deterministic)
+}
+func (dst *GenerateKeywordIdeasRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateKeywordIdeasRequest.Merge(dst, src)
+}
+func (m *GenerateKeywordIdeasRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateKeywordIdeasRequest.Size(m)
+}
+func (m *GenerateKeywordIdeasRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateKeywordIdeasRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateKeywordIdeasRequest proto.InternalMessageInfo
+
+func (m *GenerateKeywordIdeasRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *GenerateKeywordIdeasRequest) GetLanguage() *wrappers.StringValue {
+	if m != nil {
+		return m.Language
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetGeoTargetConstants() []*wrappers.StringValue {
+	if m != nil {
+		return m.GeoTargetConstants
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetKeywordPlanNetwork() enums.KeywordPlanNetworkEnum_KeywordPlanNetwork {
+	if m != nil {
+		return m.KeywordPlanNetwork
+	}
+	return enums.KeywordPlanNetworkEnum_UNSPECIFIED
+}
+
+type isGenerateKeywordIdeasRequest_Seed interface {
+	isGenerateKeywordIdeasRequest_Seed()
+}
+
+type GenerateKeywordIdeasRequest_KeywordAndUrlSeed struct {
+	KeywordAndUrlSeed *KeywordAndUrlSeed `protobuf:"bytes,2,opt,name=keyword_and_url_seed,json=keywordAndUrlSeed,proto3,oneof"`
+}
+
+type GenerateKeywordIdeasRequest_KeywordSeed struct {
+	KeywordSeed *KeywordSeed `protobuf:"bytes,3,opt,name=keyword_seed,json=keywordSeed,proto3,oneof"`
+}
+
+type GenerateKeywordIdeasRequest_UrlSeed struct {
+	UrlSeed *UrlSeed `protobuf:"bytes,5,opt,name=url_seed,json=urlSeed,proto3,oneof"`
+}
+
+func (*GenerateKeywordIdeasRequest_KeywordAndUrlSeed) isGenerateKeywordIdeasRequest_Seed() {}
+
+func (*GenerateKeywordIdeasRequest_KeywordSeed) isGenerateKeywordIdeasRequest_Seed() {}
+
+func (*GenerateKeywordIdeasRequest_UrlSeed) isGenerateKeywordIdeasRequest_Seed() {}
+
+func (m *GenerateKeywordIdeasRequest) GetSeed() isGenerateKeywordIdeasRequest_Seed {
+	if m != nil {
+		return m.Seed
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetKeywordAndUrlSeed() *KeywordAndUrlSeed {
+	if x, ok := m.GetSeed().(*GenerateKeywordIdeasRequest_KeywordAndUrlSeed); ok {
+		return x.KeywordAndUrlSeed
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetKeywordSeed() *KeywordSeed {
+	if x, ok := m.GetSeed().(*GenerateKeywordIdeasRequest_KeywordSeed); ok {
+		return x.KeywordSeed
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeasRequest) GetUrlSeed() *UrlSeed {
+	if x, ok := m.GetSeed().(*GenerateKeywordIdeasRequest_UrlSeed); ok {
+		return x.UrlSeed
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*GenerateKeywordIdeasRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _GenerateKeywordIdeasRequest_OneofMarshaler, _GenerateKeywordIdeasRequest_OneofUnmarshaler, _GenerateKeywordIdeasRequest_OneofSizer, []interface{}{
+		(*GenerateKeywordIdeasRequest_KeywordAndUrlSeed)(nil),
+		(*GenerateKeywordIdeasRequest_KeywordSeed)(nil),
+		(*GenerateKeywordIdeasRequest_UrlSeed)(nil),
+	}
+}
+
+func _GenerateKeywordIdeasRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*GenerateKeywordIdeasRequest)
+	// seed
+	switch x := m.Seed.(type) {
+	case *GenerateKeywordIdeasRequest_KeywordAndUrlSeed:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KeywordAndUrlSeed); err != nil {
+			return err
+		}
+	case *GenerateKeywordIdeasRequest_KeywordSeed:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.KeywordSeed); err != nil {
+			return err
+		}
+	case *GenerateKeywordIdeasRequest_UrlSeed:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.UrlSeed); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("GenerateKeywordIdeasRequest.Seed has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _GenerateKeywordIdeasRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*GenerateKeywordIdeasRequest)
+	switch tag {
+	case 2: // seed.keyword_and_url_seed
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(KeywordAndUrlSeed)
+		err := b.DecodeMessage(msg)
+		m.Seed = &GenerateKeywordIdeasRequest_KeywordAndUrlSeed{msg}
+		return true, err
+	case 3: // seed.keyword_seed
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(KeywordSeed)
+		err := b.DecodeMessage(msg)
+		m.Seed = &GenerateKeywordIdeasRequest_KeywordSeed{msg}
+		return true, err
+	case 5: // seed.url_seed
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(UrlSeed)
+		err := b.DecodeMessage(msg)
+		m.Seed = &GenerateKeywordIdeasRequest_UrlSeed{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _GenerateKeywordIdeasRequest_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*GenerateKeywordIdeasRequest)
+	// seed
+	switch x := m.Seed.(type) {
+	case *GenerateKeywordIdeasRequest_KeywordAndUrlSeed:
+		s := proto.Size(x.KeywordAndUrlSeed)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *GenerateKeywordIdeasRequest_KeywordSeed:
+		s := proto.Size(x.KeywordSeed)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *GenerateKeywordIdeasRequest_UrlSeed:
+		s := proto.Size(x.UrlSeed)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Keyword And Url Seed
+type KeywordAndUrlSeed struct {
+	// The URL to crawl in order to generate keyword ideas.
+	Url *wrappers.StringValue `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	// Requires at least one keyword.
+	Keywords             []*wrappers.StringValue `protobuf:"bytes,2,rep,name=keywords,proto3" json:"keywords,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *KeywordAndUrlSeed) Reset()         { *m = KeywordAndUrlSeed{} }
+func (m *KeywordAndUrlSeed) String() string { return proto.CompactTextString(m) }
+func (*KeywordAndUrlSeed) ProtoMessage()    {}
+func (*KeywordAndUrlSeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_service_8eed2c943de898df, []int{1}
+}
+func (m *KeywordAndUrlSeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordAndUrlSeed.Unmarshal(m, b)
+}
+func (m *KeywordAndUrlSeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordAndUrlSeed.Marshal(b, m, deterministic)
+}
+func (dst *KeywordAndUrlSeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordAndUrlSeed.Merge(dst, src)
+}
+func (m *KeywordAndUrlSeed) XXX_Size() int {
+	return xxx_messageInfo_KeywordAndUrlSeed.Size(m)
+}
+func (m *KeywordAndUrlSeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordAndUrlSeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordAndUrlSeed proto.InternalMessageInfo
+
+func (m *KeywordAndUrlSeed) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+func (m *KeywordAndUrlSeed) GetKeywords() []*wrappers.StringValue {
+	if m != nil {
+		return m.Keywords
+	}
+	return nil
+}
+
+// Keyword Seed
+type KeywordSeed struct {
+	// Requires at least one keyword.
+	Keywords             []*wrappers.StringValue `protobuf:"bytes,1,rep,name=keywords,proto3" json:"keywords,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *KeywordSeed) Reset()         { *m = KeywordSeed{} }
+func (m *KeywordSeed) String() string { return proto.CompactTextString(m) }
+func (*KeywordSeed) ProtoMessage()    {}
+func (*KeywordSeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_service_8eed2c943de898df, []int{2}
+}
+func (m *KeywordSeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordSeed.Unmarshal(m, b)
+}
+func (m *KeywordSeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordSeed.Marshal(b, m, deterministic)
+}
+func (dst *KeywordSeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordSeed.Merge(dst, src)
+}
+func (m *KeywordSeed) XXX_Size() int {
+	return xxx_messageInfo_KeywordSeed.Size(m)
+}
+func (m *KeywordSeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordSeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordSeed proto.InternalMessageInfo
+
+func (m *KeywordSeed) GetKeywords() []*wrappers.StringValue {
+	if m != nil {
+		return m.Keywords
+	}
+	return nil
+}
+
+// Url Seed
+type UrlSeed struct {
+	// The URL to crawl in order to generate keyword ideas.
+	Url                  *wrappers.StringValue `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UrlSeed) Reset()         { *m = UrlSeed{} }
+func (m *UrlSeed) String() string { return proto.CompactTextString(m) }
+func (*UrlSeed) ProtoMessage()    {}
+func (*UrlSeed) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_service_8eed2c943de898df, []int{3}
+}
+func (m *UrlSeed) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UrlSeed.Unmarshal(m, b)
+}
+func (m *UrlSeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UrlSeed.Marshal(b, m, deterministic)
+}
+func (dst *UrlSeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UrlSeed.Merge(dst, src)
+}
+func (m *UrlSeed) XXX_Size() int {
+	return xxx_messageInfo_UrlSeed.Size(m)
+}
+func (m *UrlSeed) XXX_DiscardUnknown() {
+	xxx_messageInfo_UrlSeed.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UrlSeed proto.InternalMessageInfo
+
+func (m *UrlSeed) GetUrl() *wrappers.StringValue {
+	if m != nil {
+		return m.Url
+	}
+	return nil
+}
+
+// Response message for [KeywordIdeaService.GenerateKeywordIdeas][].
+type GenerateKeywordIdeaResponse struct {
+	// Results of generating keyword ideas.
+	Results              []*GenerateKeywordIdeaResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *GenerateKeywordIdeaResponse) Reset()         { *m = GenerateKeywordIdeaResponse{} }
+func (m *GenerateKeywordIdeaResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateKeywordIdeaResponse) ProtoMessage()    {}
+func (*GenerateKeywordIdeaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_service_8eed2c943de898df, []int{4}
+}
+func (m *GenerateKeywordIdeaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateKeywordIdeaResponse.Unmarshal(m, b)
+}
+func (m *GenerateKeywordIdeaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateKeywordIdeaResponse.Marshal(b, m, deterministic)
+}
+func (dst *GenerateKeywordIdeaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateKeywordIdeaResponse.Merge(dst, src)
+}
+func (m *GenerateKeywordIdeaResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateKeywordIdeaResponse.Size(m)
+}
+func (m *GenerateKeywordIdeaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateKeywordIdeaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateKeywordIdeaResponse proto.InternalMessageInfo
+
+func (m *GenerateKeywordIdeaResponse) GetResults() []*GenerateKeywordIdeaResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result of generating keyword ideas.
+type GenerateKeywordIdeaResult struct {
+	// Text of the keyword idea.
+	// As in Keyword Plan historical metrics, this text may not be an actual
+	// keyword, but the canonical form of multiple keywords.
+	// See KeywordPlanKeywordHistoricalMetrics message in KeywordPlanService.
+	Text *wrappers.StringValue `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"`
+	// The historical metrics for the keyword
+	KeywordIdeaMetrics   *common.KeywordPlanHistoricalMetrics `protobuf:"bytes,3,opt,name=keyword_idea_metrics,json=keywordIdeaMetrics,proto3" json:"keyword_idea_metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *GenerateKeywordIdeaResult) Reset()         { *m = GenerateKeywordIdeaResult{} }
+func (m *GenerateKeywordIdeaResult) String() string { return proto.CompactTextString(m) }
+func (*GenerateKeywordIdeaResult) ProtoMessage()    {}
+func (*GenerateKeywordIdeaResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_idea_service_8eed2c943de898df, []int{5}
+}
+func (m *GenerateKeywordIdeaResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateKeywordIdeaResult.Unmarshal(m, b)
+}
+func (m *GenerateKeywordIdeaResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateKeywordIdeaResult.Marshal(b, m, deterministic)
+}
+func (dst *GenerateKeywordIdeaResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateKeywordIdeaResult.Merge(dst, src)
+}
+func (m *GenerateKeywordIdeaResult) XXX_Size() int {
+	return xxx_messageInfo_GenerateKeywordIdeaResult.Size(m)
+}
+func (m *GenerateKeywordIdeaResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateKeywordIdeaResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateKeywordIdeaResult proto.InternalMessageInfo
+
+func (m *GenerateKeywordIdeaResult) GetText() *wrappers.StringValue {
+	if m != nil {
+		return m.Text
+	}
+	return nil
+}
+
+func (m *GenerateKeywordIdeaResult) GetKeywordIdeaMetrics() *common.KeywordPlanHistoricalMetrics {
+	if m != nil {
+		return m.KeywordIdeaMetrics
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GenerateKeywordIdeasRequest)(nil), "google.ads.googleads.v0.services.GenerateKeywordIdeasRequest")
+	proto.RegisterType((*KeywordAndUrlSeed)(nil), "google.ads.googleads.v0.services.KeywordAndUrlSeed")
+	proto.RegisterType((*KeywordSeed)(nil), "google.ads.googleads.v0.services.KeywordSeed")
+	proto.RegisterType((*UrlSeed)(nil), "google.ads.googleads.v0.services.UrlSeed")
+	proto.RegisterType((*GenerateKeywordIdeaResponse)(nil), "google.ads.googleads.v0.services.GenerateKeywordIdeaResponse")
+	proto.RegisterType((*GenerateKeywordIdeaResult)(nil), "google.ads.googleads.v0.services.GenerateKeywordIdeaResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// KeywordPlanIdeaServiceClient is the client API for KeywordPlanIdeaService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanIdeaServiceClient interface {
+	// Returns a list of keyword ideas.
+	GenerateKeywordIdeas(ctx context.Context, in *GenerateKeywordIdeasRequest, opts ...grpc.CallOption) (*GenerateKeywordIdeaResponse, error)
+}
+
+type keywordPlanIdeaServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewKeywordPlanIdeaServiceClient(cc *grpc.ClientConn) KeywordPlanIdeaServiceClient {
+	return &keywordPlanIdeaServiceClient{cc}
+}
+
+func (c *keywordPlanIdeaServiceClient) GenerateKeywordIdeas(ctx context.Context, in *GenerateKeywordIdeasRequest, opts ...grpc.CallOption) (*GenerateKeywordIdeaResponse, error) {
+	out := new(GenerateKeywordIdeaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanIdeaService/GenerateKeywordIdeas", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanIdeaServiceServer is the server API for KeywordPlanIdeaService service.
+type KeywordPlanIdeaServiceServer interface {
+	// Returns a list of keyword ideas.
+	GenerateKeywordIdeas(context.Context, *GenerateKeywordIdeasRequest) (*GenerateKeywordIdeaResponse, error)
+}
+
+func RegisterKeywordPlanIdeaServiceServer(s *grpc.Server, srv KeywordPlanIdeaServiceServer) {
+	s.RegisterService(&_KeywordPlanIdeaService_serviceDesc, srv)
+}
+
+func _KeywordPlanIdeaService_GenerateKeywordIdeas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateKeywordIdeasRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanIdeaServiceServer).GenerateKeywordIdeas(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanIdeaService/GenerateKeywordIdeas",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanIdeaServiceServer).GenerateKeywordIdeas(ctx, req.(*GenerateKeywordIdeasRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanIdeaService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.KeywordPlanIdeaService",
+	HandlerType: (*KeywordPlanIdeaServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GenerateKeywordIdeas",
+			Handler:    _KeywordPlanIdeaService_GenerateKeywordIdeas_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/keyword_plan_idea_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/keyword_plan_idea_service.proto", fileDescriptor_keyword_plan_idea_service_8eed2c943de898df)
+}
+
+var fileDescriptor_keyword_plan_idea_service_8eed2c943de898df = []byte{
+	// 706 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xdf, 0x4e, 0x13, 0x4d,
+	0x14, 0xff, 0xb6, 0xe5, 0xa3, 0x30, 0xfd, 0xf2, 0x25, 0x4c, 0x88, 0xa9, 0x40, 0xb4, 0x69, 0xbc,
+	0x40, 0x12, 0x67, 0x9b, 0x72, 0x21, 0x82, 0x4d, 0x2c, 0x46, 0x5b, 0x62, 0x24, 0x64, 0x11, 0x2e,
+	0x4c, 0x93, 0xcd, 0xd0, 0x3d, 0x6c, 0x36, 0xdd, 0xce, 0xd4, 0x99, 0x59, 0xf0, 0x4f, 0xb8, 0xf1,
+	0x15, 0x7c, 0x03, 0x2f, 0x7d, 0x07, 0x5f, 0xc0, 0x2b, 0x13, 0x2e, 0xbd, 0xf5, 0xda, 0x67, 0x30,
+	0x3b, 0x3b, 0xd3, 0x16, 0x68, 0x2d, 0x72, 0x77, 0xf6, 0xfc, 0xf9, 0x9d, 0xdf, 0xf9, 0x33, 0x67,
+	0xd1, 0x93, 0x90, 0xf3, 0x30, 0x06, 0x97, 0x06, 0xd2, 0xcd, 0xc4, 0x54, 0x3a, 0xa9, 0xba, 0x12,
+	0xc4, 0x49, 0xd4, 0x01, 0xe9, 0x76, 0xe1, 0xdd, 0x29, 0x17, 0x81, 0xdf, 0x8f, 0x29, 0xf3, 0xa3,
+	0x00, 0xa8, 0x6f, 0x4c, 0xa4, 0x2f, 0xb8, 0xe2, 0xb8, 0x9c, 0x85, 0x11, 0x1a, 0x48, 0x32, 0x40,
+	0x20, 0x27, 0x55, 0x62, 0x11, 0x96, 0x36, 0x26, 0xe5, 0xe8, 0xf0, 0x5e, 0x8f, 0xb3, 0x8b, 0x19,
+	0x32, 0x5d, 0x86, 0x3d, 0x39, 0x12, 0x58, 0xd2, 0xbb, 0x44, 0x8d, 0x81, 0x3a, 0xe5, 0xa2, 0x6b,
+	0x22, 0x57, 0x6c, 0x64, 0x3f, 0x72, 0x29, 0x63, 0x5c, 0x51, 0x15, 0x71, 0x26, 0x8d, 0xf5, 0x8e,
+	0xb1, 0xea, 0xaf, 0xa3, 0xe4, 0xd8, 0x3d, 0x15, 0xb4, 0xdf, 0x07, 0x61, 0xec, 0x95, 0xef, 0x33,
+	0x68, 0xb9, 0x09, 0x0c, 0x04, 0x55, 0xf0, 0x22, 0x4b, 0xb2, 0x13, 0x00, 0x95, 0x1e, 0xbc, 0x49,
+	0x40, 0x2a, 0x7c, 0x17, 0x15, 0x3b, 0x89, 0x54, 0xbc, 0x07, 0xc2, 0x8f, 0x82, 0x92, 0x53, 0x76,
+	0x56, 0xe7, 0x3d, 0x64, 0x55, 0x3b, 0x01, 0xde, 0x40, 0x73, 0x31, 0x65, 0x61, 0x42, 0x43, 0x28,
+	0x15, 0xca, 0xce, 0x6a, 0xb1, 0xb6, 0x62, 0x9a, 0x43, 0x6c, 0x4e, 0xb2, 0xaf, 0x44, 0xc4, 0xc2,
+	0x43, 0x1a, 0x27, 0xe0, 0x0d, 0xbc, 0xf1, 0x2e, 0x5a, 0x0c, 0x81, 0xfb, 0x8a, 0x8a, 0x10, 0x94,
+	0xdf, 0xe1, 0x4c, 0x2a, 0xca, 0x94, 0x2c, 0xcd, 0x95, 0xf3, 0x53, 0x51, 0x70, 0x08, 0xfc, 0x95,
+	0x0e, 0x7c, 0x6a, 0xe3, 0xf0, 0x7b, 0xb4, 0x38, 0xae, 0x4d, 0xa5, 0xf9, 0xb2, 0xb3, 0xfa, 0x7f,
+	0xad, 0x45, 0x26, 0x4d, 0x4f, 0x77, 0x98, 0x98, 0xe2, 0xf7, 0x62, 0xca, 0x76, 0xb3, 0xc0, 0x67,
+	0x2c, 0xe9, 0x8d, 0x51, 0x7b, 0xb8, 0x7b, 0x45, 0x87, 0x8f, 0x87, 0xb9, 0x29, 0x0b, 0xfc, 0x44,
+	0xc4, 0xbe, 0x04, 0x08, 0x4a, 0x39, 0xdd, 0x91, 0x75, 0x32, 0x6d, 0x73, 0x6c, 0x9e, 0x06, 0x0b,
+	0x0e, 0x44, 0xbc, 0x0f, 0x10, 0xb4, 0xfe, 0xf1, 0x16, 0xba, 0x97, 0x95, 0xd8, 0x43, 0xff, 0xd9,
+	0x3c, 0x1a, 0x3f, 0xaf, 0xf1, 0x1f, 0x5c, 0x1b, 0xdf, 0x20, 0x17, 0xbb, 0xc3, 0x4f, 0xfc, 0x1c,
+	0xcd, 0x0d, 0xf8, 0xfe, 0xab, 0xf1, 0xee, 0x4f, 0xc7, 0x1b, 0xb2, 0x2c, 0x24, 0x99, 0xb8, 0x3d,
+	0x8b, 0x66, 0x52, 0x8c, 0xca, 0x19, 0x5a, 0xb8, 0x52, 0x0d, 0x26, 0x28, 0x9f, 0x88, 0x58, 0xef,
+	0xcf, 0xb4, 0xd9, 0xa6, 0x8e, 0xe9, 0x5a, 0x19, 0x8e, 0xb2, 0x94, 0xbb, 0xc6, 0x42, 0x0c, 0xbc,
+	0x2b, 0x4d, 0x54, 0x1c, 0x29, 0xf6, 0x02, 0x90, 0xf3, 0x57, 0x40, 0x8f, 0x50, 0xe1, 0x86, 0xec,
+	0x2b, 0x6a, 0xec, 0xa3, 0xf2, 0x40, 0xf6, 0x39, 0x93, 0x80, 0x0f, 0x50, 0x41, 0x80, 0x4c, 0x62,
+	0x65, 0x29, 0x6d, 0x4d, 0x6f, 0xf8, 0x78, 0xbc, 0x24, 0x56, 0x9e, 0xc5, 0xaa, 0x7c, 0x75, 0xd0,
+	0xed, 0x89, 0x6e, 0xb8, 0x8a, 0x66, 0x14, 0xbc, 0x55, 0x66, 0x25, 0xff, 0x5c, 0x84, 0xf6, 0xc4,
+	0x6c, 0xb8, 0xd4, 0xfa, 0x1a, 0xf6, 0x40, 0x89, 0xa8, 0x23, 0xcd, 0xd2, 0x3d, 0x9e, 0xc8, 0xd9,
+	0x1c, 0xb6, 0x91, 0xa7, 0xd3, 0x8a, 0xa4, 0xe2, 0x22, 0xea, 0xd0, 0xf8, 0x65, 0x86, 0x31, 0x78,
+	0x44, 0x29, 0x41, 0xa3, 0xab, 0xfd, 0x72, 0xd0, 0xad, 0x91, 0xa0, 0xd4, 0xb4, 0x9f, 0x95, 0x8f,
+	0xcf, 0x1d, 0xb4, 0x38, 0xee, 0x4c, 0xe1, 0xfa, 0x8d, 0x3a, 0x67, 0xcf, 0xdb, 0x52, 0xfd, 0xa6,
+	0x8d, 0xd7, 0x83, 0xac, 0xd4, 0x3f, 0x9e, 0xff, 0xfc, 0x94, 0x7b, 0x58, 0xa9, 0xe9, 0x1b, 0x6f,
+	0x8e, 0xa2, 0x74, 0x3f, 0x8c, 0x9c, 0xcc, 0xfa, 0xda, 0xd9, 0x66, 0x38, 0x86, 0xc1, 0xa6, 0xb3,
+	0xb6, 0xfd, 0xc3, 0x41, 0xf7, 0x3a, 0xbc, 0x37, 0x95, 0xc3, 0xf6, 0xf2, 0xf8, 0xb6, 0xec, 0xa5,
+	0xb3, 0xdb, 0x73, 0x5e, 0xb7, 0x0c, 0x40, 0xc8, 0xd3, 0xe3, 0x4a, 0xb8, 0x08, 0xdd, 0x10, 0x98,
+	0x9e, 0xac, 0xfd, 0x99, 0xf4, 0x23, 0x39, 0xf9, 0xcf, 0xb7, 0x65, 0x85, 0xcf, 0xb9, 0x7c, 0xb3,
+	0xd1, 0xf8, 0x92, 0x2b, 0x37, 0x33, 0xc0, 0x46, 0x20, 0x49, 0x26, 0xa6, 0xd2, 0x61, 0x95, 0x98,
+	0xc4, 0xf2, 0x9b, 0x75, 0x69, 0x37, 0x02, 0xd9, 0x1e, 0xb8, 0xb4, 0x0f, 0xab, 0x6d, 0xeb, 0x72,
+	0x34, 0xab, 0x09, 0xac, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x4b, 0xdd, 0x93, 0x1f, 0x79, 0x07,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/keyword_plan_keyword_service.pb.go b/googleapis/ads/googleads/v0/services/keyword_plan_keyword_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1cc083f47e6cb34e5ef46d39dacae01df415f56c
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/keyword_plan_keyword_service.pb.go
@@ -0,0 +1,548 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/keyword_plan_keyword_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [KeywordPlanKeywordService.GetKeywordPlanKeyword][google.ads.googleads.v0.services.KeywordPlanKeywordService.GetKeywordPlanKeyword].
+type GetKeywordPlanKeywordRequest struct {
+	// The resource name of the ad group keyword to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanKeywordRequest) Reset()         { *m = GetKeywordPlanKeywordRequest{} }
+func (m *GetKeywordPlanKeywordRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanKeywordRequest) ProtoMessage()    {}
+func (*GetKeywordPlanKeywordRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_service_2596e4a4df5e4576, []int{0}
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanKeywordRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanKeywordRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetKeywordPlanKeywordRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanKeywordRequest.Merge(dst, src)
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanKeywordRequest.Size(m)
+}
+func (m *GetKeywordPlanKeywordRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanKeywordRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanKeywordRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanKeywordRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanKeywordService.MutateKeywordPlanKeywords][google.ads.googleads.v0.services.KeywordPlanKeywordService.MutateKeywordPlanKeywords].
+type MutateKeywordPlanKeywordsRequest struct {
+	// The ID of the customer whose Keyword Plan keywords are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual Keyword Plan keywords.
+	Operations           []*KeywordPlanKeywordOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MutateKeywordPlanKeywordsRequest) Reset()         { *m = MutateKeywordPlanKeywordsRequest{} }
+func (m *MutateKeywordPlanKeywordsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanKeywordsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanKeywordsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_service_2596e4a4df5e4576, []int{1}
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanKeywordsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Merge(dst, src)
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsRequest.Size(m)
+}
+func (m *MutateKeywordPlanKeywordsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanKeywordsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanKeywordsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanKeywordsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanKeywordsRequest) GetOperations() []*KeywordPlanKeywordOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a Keyword Plan keyword.
+type KeywordPlanKeywordOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanKeywordOperation_Create
+	//	*KeywordPlanKeywordOperation_Update
+	//	*KeywordPlanKeywordOperation_Remove
+	Operation            isKeywordPlanKeywordOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
+	XXX_unrecognized     []byte                                  `json:"-"`
+	XXX_sizecache        int32                                   `json:"-"`
+}
+
+func (m *KeywordPlanKeywordOperation) Reset()         { *m = KeywordPlanKeywordOperation{} }
+func (m *KeywordPlanKeywordOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordOperation) ProtoMessage()    {}
+func (*KeywordPlanKeywordOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_service_2596e4a4df5e4576, []int{2}
+}
+func (m *KeywordPlanKeywordOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordOperation.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanKeywordOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordOperation.Merge(dst, src)
+}
+func (m *KeywordPlanKeywordOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordOperation.Size(m)
+}
+func (m *KeywordPlanKeywordOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanKeywordOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanKeywordOperation_Operation interface {
+	isKeywordPlanKeywordOperation_Operation()
+}
+
+type KeywordPlanKeywordOperation_Create struct {
+	Create *resources.KeywordPlanKeyword `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanKeywordOperation_Update struct {
+	Update *resources.KeywordPlanKeyword `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanKeywordOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanKeywordOperation_Create) isKeywordPlanKeywordOperation_Operation() {}
+
+func (*KeywordPlanKeywordOperation_Update) isKeywordPlanKeywordOperation_Operation() {}
+
+func (*KeywordPlanKeywordOperation_Remove) isKeywordPlanKeywordOperation_Operation() {}
+
+func (m *KeywordPlanKeywordOperation) GetOperation() isKeywordPlanKeywordOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordOperation) GetCreate() *resources.KeywordPlanKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanKeywordOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordOperation) GetUpdate() *resources.KeywordPlanKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanKeywordOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanKeywordOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*KeywordPlanKeywordOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _KeywordPlanKeywordOperation_OneofMarshaler, _KeywordPlanKeywordOperation_OneofUnmarshaler, _KeywordPlanKeywordOperation_OneofSizer, []interface{}{
+		(*KeywordPlanKeywordOperation_Create)(nil),
+		(*KeywordPlanKeywordOperation_Update)(nil),
+		(*KeywordPlanKeywordOperation_Remove)(nil),
+	}
+}
+
+func _KeywordPlanKeywordOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*KeywordPlanKeywordOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanKeywordOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *KeywordPlanKeywordOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *KeywordPlanKeywordOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("KeywordPlanKeywordOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _KeywordPlanKeywordOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*KeywordPlanKeywordOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanKeyword)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanKeywordOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanKeyword)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanKeywordOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &KeywordPlanKeywordOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _KeywordPlanKeywordOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*KeywordPlanKeywordOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanKeywordOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanKeywordOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanKeywordOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a Keyword Plan keyword mutate.
+type MutateKeywordPlanKeywordsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanKeywordResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
+	XXX_unrecognized     []byte                            `json:"-"`
+	XXX_sizecache        int32                             `json:"-"`
+}
+
+func (m *MutateKeywordPlanKeywordsResponse) Reset()         { *m = MutateKeywordPlanKeywordsResponse{} }
+func (m *MutateKeywordPlanKeywordsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanKeywordsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanKeywordsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_service_2596e4a4df5e4576, []int{3}
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanKeywordsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Merge(dst, src)
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanKeywordsResponse.Size(m)
+}
+func (m *MutateKeywordPlanKeywordsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanKeywordsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanKeywordsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanKeywordsResponse) GetResults() []*MutateKeywordPlanKeywordResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan keyword mutate.
+type MutateKeywordPlanKeywordResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanKeywordResult) Reset()         { *m = MutateKeywordPlanKeywordResult{} }
+func (m *MutateKeywordPlanKeywordResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanKeywordResult) ProtoMessage()    {}
+func (*MutateKeywordPlanKeywordResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_keyword_service_2596e4a4df5e4576, []int{4}
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanKeywordResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanKeywordResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanKeywordResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanKeywordResult.Merge(dst, src)
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanKeywordResult.Size(m)
+}
+func (m *MutateKeywordPlanKeywordResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanKeywordResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanKeywordResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanKeywordResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanKeywordRequest)(nil), "google.ads.googleads.v0.services.GetKeywordPlanKeywordRequest")
+	proto.RegisterType((*MutateKeywordPlanKeywordsRequest)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanKeywordsRequest")
+	proto.RegisterType((*KeywordPlanKeywordOperation)(nil), "google.ads.googleads.v0.services.KeywordPlanKeywordOperation")
+	proto.RegisterType((*MutateKeywordPlanKeywordsResponse)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanKeywordsResponse")
+	proto.RegisterType((*MutateKeywordPlanKeywordResult)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanKeywordResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// KeywordPlanKeywordServiceClient is the client API for KeywordPlanKeywordService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanKeywordServiceClient interface {
+	// Returns the requested Keyword Plan keyword in full detail.
+	GetKeywordPlanKeyword(ctx context.Context, in *GetKeywordPlanKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanKeyword, error)
+	// Creates, updates, or removes Keyword Plan keywords. Operation statuses are
+	// returned.
+	MutateKeywordPlanKeywords(ctx context.Context, in *MutateKeywordPlanKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanKeywordsResponse, error)
+}
+
+type keywordPlanKeywordServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewKeywordPlanKeywordServiceClient(cc *grpc.ClientConn) KeywordPlanKeywordServiceClient {
+	return &keywordPlanKeywordServiceClient{cc}
+}
+
+func (c *keywordPlanKeywordServiceClient) GetKeywordPlanKeyword(ctx context.Context, in *GetKeywordPlanKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanKeyword, error) {
+	out := new(resources.KeywordPlanKeyword)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanKeywordService/GetKeywordPlanKeyword", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanKeywordServiceClient) MutateKeywordPlanKeywords(ctx context.Context, in *MutateKeywordPlanKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanKeywordsResponse, error) {
+	out := new(MutateKeywordPlanKeywordsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanKeywordService/MutateKeywordPlanKeywords", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanKeywordServiceServer is the server API for KeywordPlanKeywordService service.
+type KeywordPlanKeywordServiceServer interface {
+	// Returns the requested Keyword Plan keyword in full detail.
+	GetKeywordPlanKeyword(context.Context, *GetKeywordPlanKeywordRequest) (*resources.KeywordPlanKeyword, error)
+	// Creates, updates, or removes Keyword Plan keywords. Operation statuses are
+	// returned.
+	MutateKeywordPlanKeywords(context.Context, *MutateKeywordPlanKeywordsRequest) (*MutateKeywordPlanKeywordsResponse, error)
+}
+
+func RegisterKeywordPlanKeywordServiceServer(s *grpc.Server, srv KeywordPlanKeywordServiceServer) {
+	s.RegisterService(&_KeywordPlanKeywordService_serviceDesc, srv)
+}
+
+func _KeywordPlanKeywordService_GetKeywordPlanKeyword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanKeywordRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanKeywordServiceServer).GetKeywordPlanKeyword(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanKeywordService/GetKeywordPlanKeyword",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanKeywordServiceServer).GetKeywordPlanKeyword(ctx, req.(*GetKeywordPlanKeywordRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanKeywordService_MutateKeywordPlanKeywords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanKeywordsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanKeywordServiceServer).MutateKeywordPlanKeywords(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanKeywordService/MutateKeywordPlanKeywords",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanKeywordServiceServer).MutateKeywordPlanKeywords(ctx, req.(*MutateKeywordPlanKeywordsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanKeywordService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.KeywordPlanKeywordService",
+	HandlerType: (*KeywordPlanKeywordServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanKeyword",
+			Handler:    _KeywordPlanKeywordService_GetKeywordPlanKeyword_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanKeywords",
+			Handler:    _KeywordPlanKeywordService_MutateKeywordPlanKeywords_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/keyword_plan_keyword_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/keyword_plan_keyword_service.proto", fileDescriptor_keyword_plan_keyword_service_2596e4a4df5e4576)
+}
+
+var fileDescriptor_keyword_plan_keyword_service_2596e4a4df5e4576 = []byte{
+	// 604 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x4f, 0x8b, 0xd3, 0x4e,
+	0x18, 0xc7, 0x7f, 0x49, 0x7f, 0x54, 0x76, 0xa2, 0x97, 0x01, 0x21, 0x5b, 0x97, 0x35, 0x46, 0x0f,
+	0xa5, 0x87, 0x49, 0xa9, 0x2c, 0xca, 0xae, 0x15, 0xdb, 0xa2, 0x5d, 0x91, 0x75, 0x4b, 0x84, 0x3d,
+	0x2c, 0x95, 0x32, 0xdb, 0xcc, 0x86, 0xd0, 0x24, 0x13, 0x67, 0x26, 0x15, 0x59, 0x16, 0xc1, 0xb7,
+	0xe0, 0x3b, 0x58, 0x6f, 0xbe, 0x14, 0xc1, 0x93, 0x07, 0x6f, 0x9e, 0xbc, 0xf8, 0x2e, 0x24, 0x99,
+	0x4c, 0xad, 0xb4, 0x69, 0x65, 0xf7, 0xf6, 0x4c, 0xe6, 0x99, 0xcf, 0xf3, 0xe7, 0x3b, 0xcf, 0x04,
+	0xf4, 0x7c, 0x4a, 0xfd, 0x90, 0x38, 0xd8, 0xe3, 0x8e, 0x34, 0x33, 0x6b, 0xda, 0x74, 0x38, 0x61,
+	0xd3, 0x60, 0x4c, 0xb8, 0x33, 0x21, 0xef, 0xde, 0x52, 0xe6, 0x8d, 0x92, 0x10, 0xc7, 0x23, 0xb5,
+	0x28, 0x76, 0x51, 0xc2, 0xa8, 0xa0, 0xd0, 0x92, 0x27, 0x11, 0xf6, 0x38, 0x9a, 0x41, 0xd0, 0xb4,
+	0x89, 0x14, 0xa4, 0xf6, 0xa8, 0x2c, 0x0c, 0x23, 0x9c, 0xa6, 0xac, 0x2c, 0x8e, 0xe4, 0xd7, 0xb6,
+	0xd4, 0xe9, 0x24, 0x70, 0x70, 0x1c, 0x53, 0x81, 0x45, 0x40, 0x63, 0x5e, 0xec, 0x16, 0xd1, 0x9d,
+	0x7c, 0x75, 0x92, 0x9e, 0x3a, 0xa7, 0x01, 0x09, 0xbd, 0x51, 0x84, 0xf9, 0x44, 0x7a, 0xd8, 0x3d,
+	0xb0, 0xd5, 0x27, 0xe2, 0x85, 0x64, 0x0e, 0x42, 0x1c, 0x17, 0xa6, 0x4b, 0xde, 0xa4, 0x84, 0x0b,
+	0x78, 0x17, 0xdc, 0x50, 0x79, 0x8c, 0x62, 0x1c, 0x11, 0x53, 0xb3, 0xb4, 0xfa, 0x86, 0x7b, 0x5d,
+	0x7d, 0x7c, 0x89, 0x23, 0x62, 0x5f, 0x68, 0xc0, 0x3a, 0x48, 0x05, 0x16, 0x64, 0x11, 0xc4, 0x15,
+	0xe9, 0x36, 0x30, 0xc6, 0x29, 0x17, 0x34, 0x22, 0x6c, 0x14, 0x78, 0x05, 0x07, 0xa8, 0x4f, 0xcf,
+	0x3d, 0xf8, 0x1a, 0x00, 0x9a, 0x10, 0x26, 0x0b, 0x30, 0x75, 0xab, 0x52, 0x37, 0x5a, 0x6d, 0xb4,
+	0xae, 0x7f, 0x68, 0x31, 0xe4, 0xa1, 0xa2, 0xb8, 0x73, 0x40, 0xfb, 0x93, 0x0e, 0x6e, 0xad, 0xf0,
+	0x85, 0x7b, 0xc0, 0x48, 0x13, 0x0f, 0x0b, 0x92, 0xb7, 0xc7, 0xfc, 0xdf, 0xd2, 0xea, 0x46, 0xab,
+	0xa6, 0xe2, 0xab, 0x0e, 0xa2, 0x67, 0x59, 0x07, 0x0f, 0x30, 0x9f, 0xb8, 0x40, 0xba, 0x67, 0x36,
+	0x3c, 0x04, 0xd5, 0x31, 0x23, 0x58, 0xc8, 0xfe, 0x18, 0xad, 0x9d, 0xd2, 0xbc, 0x67, 0xaa, 0x2e,
+	0x49, 0x7c, 0xff, 0x3f, 0xb7, 0xc0, 0x64, 0x40, 0x89, 0x37, 0xf5, 0x2b, 0x02, 0x25, 0x06, 0x9a,
+	0xa0, 0xca, 0x48, 0x44, 0xa7, 0xc4, 0xac, 0x64, 0x9d, 0xcf, 0x76, 0xe4, 0xba, 0x6b, 0x80, 0x8d,
+	0x59, 0x9b, 0xec, 0xf7, 0xe0, 0xce, 0x0a, 0x25, 0x79, 0x42, 0x63, 0x4e, 0xe0, 0x31, 0xb8, 0xc6,
+	0x08, 0x4f, 0x43, 0xa1, 0x64, 0x7a, 0xb2, 0x5e, 0xa6, 0x32, 0xaa, 0x9b, 0x83, 0x5c, 0x05, 0xb4,
+	0x9f, 0x82, 0xed, 0xd5, 0xae, 0xff, 0x74, 0x25, 0x5b, 0xdf, 0x2b, 0x60, 0x73, 0x91, 0xf0, 0x4a,
+	0x66, 0x03, 0xbf, 0x6a, 0xe0, 0xe6, 0xd2, 0x6b, 0x0f, 0x1f, 0xaf, 0xaf, 0x64, 0xd5, 0xbc, 0xd4,
+	0x2e, 0xa7, 0x93, 0xdd, 0xfe, 0xf0, 0xed, 0xe7, 0x47, 0xfd, 0x01, 0xdc, 0xc9, 0x06, 0xff, 0xec,
+	0xaf, 0xf2, 0xda, 0x6a, 0x44, 0xb8, 0xd3, 0x50, 0x2f, 0xc1, 0xbc, 0x2a, 0x4e, 0xe3, 0x1c, 0xfe,
+	0xd2, 0xc0, 0x66, 0xa9, 0x6c, 0xb0, 0x7b, 0x79, 0x75, 0xd4, 0xf4, 0xd6, 0x7a, 0x57, 0x62, 0xc8,
+	0x7b, 0x63, 0xf7, 0xf2, 0x2a, 0xdb, 0xf6, 0xc3, 0xac, 0xca, 0x3f, 0x65, 0x9d, 0xcd, 0xbd, 0x0b,
+	0xed, 0xc6, 0xf9, 0xb2, 0x22, 0x77, 0xa3, 0x1c, 0xbe, 0xab, 0x35, 0xba, 0x3f, 0x34, 0x70, 0x6f,
+	0x4c, 0xa3, 0xb5, 0xf9, 0x74, 0xb7, 0x4b, 0xf5, 0x1f, 0x64, 0xc3, 0x3c, 0xd0, 0x8e, 0xf7, 0x0b,
+	0x86, 0x4f, 0x43, 0x1c, 0xfb, 0x88, 0x32, 0xdf, 0xf1, 0x49, 0x9c, 0x8f, 0xba, 0x7a, 0x8a, 0x93,
+	0x80, 0x97, 0xff, 0x00, 0xf6, 0x94, 0x71, 0xa1, 0x57, 0xfa, 0x9d, 0xce, 0x67, 0xdd, 0xea, 0x4b,
+	0x60, 0xc7, 0xe3, 0x48, 0x9a, 0x99, 0x75, 0xd4, 0x44, 0x45, 0x60, 0xfe, 0x45, 0xb9, 0x0c, 0x3b,
+	0x1e, 0x1f, 0xce, 0x5c, 0x86, 0x47, 0xcd, 0xa1, 0x72, 0x39, 0xa9, 0xe6, 0x09, 0xdc, 0xff, 0x1d,
+	0x00, 0x00, 0xff, 0xff, 0xe6, 0xd2, 0x07, 0xc4, 0x80, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/keyword_plan_negative_keyword_service.pb.go b/googleapis/ads/googleads/v0/services/keyword_plan_negative_keyword_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..827ba33e14da220c99cfd3e7971b32e818069303
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/keyword_plan_negative_keyword_service.pb.go
@@ -0,0 +1,559 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/keyword_plan_negative_keyword_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for
+// [KeywordPlanNegativeKeywordService.GetKeywordPlanNegativeKeyword][google.ads.googleads.v0.services.KeywordPlanNegativeKeywordService.GetKeywordPlanNegativeKeyword].
+type GetKeywordPlanNegativeKeywordRequest struct {
+	// The resource name of the plan to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanNegativeKeywordRequest) Reset()         { *m = GetKeywordPlanNegativeKeywordRequest{} }
+func (m *GetKeywordPlanNegativeKeywordRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanNegativeKeywordRequest) ProtoMessage()    {}
+func (*GetKeywordPlanNegativeKeywordRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_service_8357f05c658450a2, []int{0}
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetKeywordPlanNegativeKeywordRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Merge(dst, src)
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.Size(m)
+}
+func (m *GetKeywordPlanNegativeKeywordRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanNegativeKeywordRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanNegativeKeywordRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for
+// [KeywordPlanNegativeKeywordService.MutateKeywordPlanNegativeKeywords][google.ads.googleads.v0.services.KeywordPlanNegativeKeywordService.MutateKeywordPlanNegativeKeywords].
+type MutateKeywordPlanNegativeKeywordsRequest struct {
+	// The ID of the customer whose negative keywords are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual Keyword Plan negative
+	// keywords.
+	Operations           []*KeywordPlanNegativeKeywordOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) Reset() {
+	*m = MutateKeywordPlanNegativeKeywordsRequest{}
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanNegativeKeywordsRequest) ProtoMessage()    {}
+func (*MutateKeywordPlanNegativeKeywordsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_service_8357f05c658450a2, []int{1}
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanNegativeKeywordsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Merge(dst, src)
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.Size(m)
+}
+func (m *MutateKeywordPlanNegativeKeywordsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanNegativeKeywordsRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsRequest) GetOperations() []*KeywordPlanNegativeKeywordOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a Keyword Plan negative
+// keyword.
+type KeywordPlanNegativeKeywordOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanNegativeKeywordOperation_Create
+	//	*KeywordPlanNegativeKeywordOperation_Update
+	//	*KeywordPlanNegativeKeywordOperation_Remove
+	Operation            isKeywordPlanNegativeKeywordOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
+	XXX_unrecognized     []byte                                          `json:"-"`
+	XXX_sizecache        int32                                           `json:"-"`
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) Reset()         { *m = KeywordPlanNegativeKeywordOperation{} }
+func (m *KeywordPlanNegativeKeywordOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanNegativeKeywordOperation) ProtoMessage()    {}
+func (*KeywordPlanNegativeKeywordOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_service_8357f05c658450a2, []int{2}
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanNegativeKeywordOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Merge(dst, src)
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanNegativeKeywordOperation.Size(m)
+}
+func (m *KeywordPlanNegativeKeywordOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanNegativeKeywordOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanNegativeKeywordOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanNegativeKeywordOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanNegativeKeywordOperation_Operation interface {
+	isKeywordPlanNegativeKeywordOperation_Operation()
+}
+
+type KeywordPlanNegativeKeywordOperation_Create struct {
+	Create *resources.KeywordPlanNegativeKeyword `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanNegativeKeywordOperation_Update struct {
+	Update *resources.KeywordPlanNegativeKeyword `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanNegativeKeywordOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanNegativeKeywordOperation_Create) isKeywordPlanNegativeKeywordOperation_Operation() {}
+
+func (*KeywordPlanNegativeKeywordOperation_Update) isKeywordPlanNegativeKeywordOperation_Operation() {}
+
+func (*KeywordPlanNegativeKeywordOperation_Remove) isKeywordPlanNegativeKeywordOperation_Operation() {}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetOperation() isKeywordPlanNegativeKeywordOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetCreate() *resources.KeywordPlanNegativeKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanNegativeKeywordOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetUpdate() *resources.KeywordPlanNegativeKeyword {
+	if x, ok := m.GetOperation().(*KeywordPlanNegativeKeywordOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanNegativeKeywordOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanNegativeKeywordOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*KeywordPlanNegativeKeywordOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _KeywordPlanNegativeKeywordOperation_OneofMarshaler, _KeywordPlanNegativeKeywordOperation_OneofUnmarshaler, _KeywordPlanNegativeKeywordOperation_OneofSizer, []interface{}{
+		(*KeywordPlanNegativeKeywordOperation_Create)(nil),
+		(*KeywordPlanNegativeKeywordOperation_Update)(nil),
+		(*KeywordPlanNegativeKeywordOperation_Remove)(nil),
+	}
+}
+
+func _KeywordPlanNegativeKeywordOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*KeywordPlanNegativeKeywordOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanNegativeKeywordOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *KeywordPlanNegativeKeywordOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *KeywordPlanNegativeKeywordOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("KeywordPlanNegativeKeywordOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _KeywordPlanNegativeKeywordOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*KeywordPlanNegativeKeywordOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanNegativeKeyword)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanNegativeKeywordOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlanNegativeKeyword)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanNegativeKeywordOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &KeywordPlanNegativeKeywordOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _KeywordPlanNegativeKeywordOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*KeywordPlanNegativeKeywordOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanNegativeKeywordOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanNegativeKeywordOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanNegativeKeywordOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a Keyword Plan negative keyword mutate.
+type MutateKeywordPlanNegativeKeywordsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateKeywordPlanNegativeKeywordResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *MutateKeywordPlanNegativeKeywordsResponse) Reset() {
+	*m = MutateKeywordPlanNegativeKeywordsResponse{}
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanNegativeKeywordsResponse) ProtoMessage()    {}
+func (*MutateKeywordPlanNegativeKeywordsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_service_8357f05c658450a2, []int{3}
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanNegativeKeywordsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Merge(dst, src)
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.Size(m)
+}
+func (m *MutateKeywordPlanNegativeKeywordsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanNegativeKeywordsResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanNegativeKeywordsResponse) GetResults() []*MutateKeywordPlanNegativeKeywordResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the Keyword Plan negative keyword mutate.
+type MutateKeywordPlanNegativeKeywordResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlanNegativeKeywordResult) Reset() {
+	*m = MutateKeywordPlanNegativeKeywordResult{}
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlanNegativeKeywordResult) ProtoMessage()    {}
+func (*MutateKeywordPlanNegativeKeywordResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_negative_keyword_service_8357f05c658450a2, []int{4}
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlanNegativeKeywordResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Merge(dst, src)
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.Size(m)
+}
+func (m *MutateKeywordPlanNegativeKeywordResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlanNegativeKeywordResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlanNegativeKeywordResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanNegativeKeywordRequest)(nil), "google.ads.googleads.v0.services.GetKeywordPlanNegativeKeywordRequest")
+	proto.RegisterType((*MutateKeywordPlanNegativeKeywordsRequest)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanNegativeKeywordsRequest")
+	proto.RegisterType((*KeywordPlanNegativeKeywordOperation)(nil), "google.ads.googleads.v0.services.KeywordPlanNegativeKeywordOperation")
+	proto.RegisterType((*MutateKeywordPlanNegativeKeywordsResponse)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanNegativeKeywordsResponse")
+	proto.RegisterType((*MutateKeywordPlanNegativeKeywordResult)(nil), "google.ads.googleads.v0.services.MutateKeywordPlanNegativeKeywordResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// KeywordPlanNegativeKeywordServiceClient is the client API for KeywordPlanNegativeKeywordService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanNegativeKeywordServiceClient interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlanNegativeKeyword(ctx context.Context, in *GetKeywordPlanNegativeKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanNegativeKeyword, error)
+	// Creates, updates, or removes Keyword Plan negative keywords. Operation
+	// statuses are returned.
+	MutateKeywordPlanNegativeKeywords(ctx context.Context, in *MutateKeywordPlanNegativeKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanNegativeKeywordsResponse, error)
+}
+
+type keywordPlanNegativeKeywordServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewKeywordPlanNegativeKeywordServiceClient(cc *grpc.ClientConn) KeywordPlanNegativeKeywordServiceClient {
+	return &keywordPlanNegativeKeywordServiceClient{cc}
+}
+
+func (c *keywordPlanNegativeKeywordServiceClient) GetKeywordPlanNegativeKeyword(ctx context.Context, in *GetKeywordPlanNegativeKeywordRequest, opts ...grpc.CallOption) (*resources.KeywordPlanNegativeKeyword, error) {
+	out := new(resources.KeywordPlanNegativeKeyword)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanNegativeKeywordService/GetKeywordPlanNegativeKeyword", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanNegativeKeywordServiceClient) MutateKeywordPlanNegativeKeywords(ctx context.Context, in *MutateKeywordPlanNegativeKeywordsRequest, opts ...grpc.CallOption) (*MutateKeywordPlanNegativeKeywordsResponse, error) {
+	out := new(MutateKeywordPlanNegativeKeywordsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanNegativeKeywordService/MutateKeywordPlanNegativeKeywords", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanNegativeKeywordServiceServer is the server API for KeywordPlanNegativeKeywordService service.
+type KeywordPlanNegativeKeywordServiceServer interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlanNegativeKeyword(context.Context, *GetKeywordPlanNegativeKeywordRequest) (*resources.KeywordPlanNegativeKeyword, error)
+	// Creates, updates, or removes Keyword Plan negative keywords. Operation
+	// statuses are returned.
+	MutateKeywordPlanNegativeKeywords(context.Context, *MutateKeywordPlanNegativeKeywordsRequest) (*MutateKeywordPlanNegativeKeywordsResponse, error)
+}
+
+func RegisterKeywordPlanNegativeKeywordServiceServer(s *grpc.Server, srv KeywordPlanNegativeKeywordServiceServer) {
+	s.RegisterService(&_KeywordPlanNegativeKeywordService_serviceDesc, srv)
+}
+
+func _KeywordPlanNegativeKeywordService_GetKeywordPlanNegativeKeyword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanNegativeKeywordRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).GetKeywordPlanNegativeKeyword(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanNegativeKeywordService/GetKeywordPlanNegativeKeyword",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).GetKeywordPlanNegativeKeyword(ctx, req.(*GetKeywordPlanNegativeKeywordRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanNegativeKeywordService_MutateKeywordPlanNegativeKeywords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlanNegativeKeywordsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).MutateKeywordPlanNegativeKeywords(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanNegativeKeywordService/MutateKeywordPlanNegativeKeywords",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanNegativeKeywordServiceServer).MutateKeywordPlanNegativeKeywords(ctx, req.(*MutateKeywordPlanNegativeKeywordsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanNegativeKeywordService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.KeywordPlanNegativeKeywordService",
+	HandlerType: (*KeywordPlanNegativeKeywordServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlanNegativeKeyword",
+			Handler:    _KeywordPlanNegativeKeywordService_GetKeywordPlanNegativeKeyword_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlanNegativeKeywords",
+			Handler:    _KeywordPlanNegativeKeywordService_MutateKeywordPlanNegativeKeywords_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/keyword_plan_negative_keyword_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/keyword_plan_negative_keyword_service.proto", fileDescriptor_keyword_plan_negative_keyword_service_8357f05c658450a2)
+}
+
+var fileDescriptor_keyword_plan_negative_keyword_service_8357f05c658450a2 = []byte{
+	// 617 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0xcf, 0x6e, 0xd3, 0x4e,
+	0x10, 0xc7, 0x7f, 0x76, 0xab, 0xfe, 0xd4, 0x35, 0x5c, 0xf6, 0x64, 0x45, 0x20, 0x52, 0xb7, 0xaa,
+	0x42, 0x0e, 0x76, 0x14, 0x6e, 0xad, 0x22, 0x48, 0xa4, 0x34, 0x81, 0x90, 0x12, 0x19, 0xa9, 0x48,
+	0x28, 0x92, 0xb5, 0x89, 0xa7, 0x96, 0x15, 0xdb, 0x6b, 0xbc, 0xeb, 0x20, 0x54, 0xf5, 0xc2, 0x8d,
+	0x13, 0x07, 0x1e, 0x00, 0x89, 0x23, 0x47, 0xae, 0xbc, 0x01, 0x57, 0x5e, 0x01, 0x71, 0xe3, 0x1d,
+	0x90, 0xbd, 0xde, 0x50, 0x24, 0x1c, 0x47, 0x6a, 0x6f, 0xe3, 0xf1, 0xf8, 0x33, 0x7f, 0xbe, 0xbb,
+	0x63, 0xf4, 0xd4, 0xa3, 0xd4, 0x0b, 0xc0, 0x22, 0x2e, 0xb3, 0x84, 0x99, 0x59, 0xcb, 0x96, 0xc5,
+	0x20, 0x59, 0xfa, 0x73, 0x60, 0xd6, 0x02, 0xde, 0xbc, 0xa6, 0x89, 0xeb, 0xc4, 0x01, 0x89, 0x9c,
+	0x08, 0x3c, 0xc2, 0xfd, 0x25, 0x38, 0xd2, 0x5b, 0x84, 0x99, 0x71, 0x42, 0x39, 0xc5, 0x75, 0x81,
+	0x30, 0x89, 0xcb, 0xcc, 0x15, 0xcd, 0x5c, 0xb6, 0x4c, 0x49, 0xab, 0xf5, 0xcb, 0xf2, 0x25, 0xc0,
+	0x68, 0x9a, 0x54, 0x26, 0x14, 0x89, 0x6a, 0x77, 0x24, 0x26, 0xf6, 0x2d, 0x12, 0x45, 0x94, 0x13,
+	0xee, 0xd3, 0x88, 0x15, 0x6f, 0x8b, 0x32, 0xac, 0xfc, 0x69, 0x96, 0x9e, 0x5b, 0xe7, 0x3e, 0x04,
+	0xae, 0x13, 0x12, 0xb6, 0x10, 0x11, 0xc6, 0x08, 0x1d, 0x0c, 0x80, 0x8f, 0x04, 0x73, 0x12, 0x90,
+	0xe8, 0xb4, 0xc8, 0x53, 0xb8, 0x6c, 0x78, 0x95, 0x02, 0xe3, 0x78, 0x1f, 0xdd, 0x96, 0x85, 0x39,
+	0x11, 0x09, 0x41, 0x57, 0xea, 0x4a, 0x63, 0xd7, 0xbe, 0x25, 0x9d, 0xa7, 0x24, 0x04, 0xe3, 0x8b,
+	0x82, 0x1a, 0xe3, 0x94, 0x13, 0x0e, 0xe5, 0x40, 0x26, 0x89, 0xf7, 0x90, 0x36, 0x4f, 0x19, 0xa7,
+	0x21, 0x24, 0x8e, 0xef, 0x16, 0x3c, 0x24, 0x5d, 0x8f, 0x5d, 0x0c, 0x08, 0xd1, 0x18, 0x12, 0xd1,
+	0x90, 0xae, 0xd6, 0xb7, 0x1a, 0x5a, 0xbb, 0x6f, 0x56, 0x0d, 0xd6, 0x2c, 0x4f, 0xfd, 0x4c, 0xd2,
+	0xec, 0x2b, 0x60, 0xe3, 0xab, 0x8a, 0xf6, 0x37, 0xf8, 0x06, 0x1f, 0x23, 0x2d, 0x8d, 0x5d, 0xc2,
+	0x21, 0x1f, 0x9f, 0xbe, 0x5d, 0x57, 0x1a, 0x5a, 0xbb, 0x26, 0xeb, 0x91, 0x13, 0x36, 0x4f, 0xb2,
+	0x09, 0x8f, 0x09, 0x5b, 0xd8, 0x48, 0x84, 0x67, 0x36, 0x7e, 0x81, 0x76, 0xe6, 0x09, 0x10, 0x2e,
+	0xe6, 0xa6, 0xb5, 0x3b, 0xa5, 0x7d, 0xac, 0xe4, 0x5f, 0xd3, 0xc8, 0xf0, 0x3f, 0xbb, 0xc0, 0x65,
+	0x60, 0x91, 0x46, 0x57, 0x6f, 0x08, 0x2c, 0x70, 0x58, 0x47, 0x3b, 0x09, 0x84, 0x74, 0x09, 0xfa,
+	0x56, 0xa6, 0x4c, 0xf6, 0x46, 0x3c, 0xf7, 0x34, 0xb4, 0xbb, 0x1a, 0x9f, 0xf1, 0x5e, 0x41, 0xf7,
+	0x37, 0x90, 0x9c, 0xc5, 0x34, 0x62, 0x80, 0x67, 0xe8, 0xff, 0x04, 0x58, 0x1a, 0x70, 0xa9, 0xe7,
+	0xb0, 0x5a, 0xcf, 0x2a, 0xba, 0x9d, 0x03, 0x6d, 0x09, 0x36, 0xc6, 0xe8, 0x70, 0xb3, 0x4f, 0x36,
+	0x3a, 0xd3, 0xed, 0x8f, 0xdb, 0x68, 0xaf, 0x9c, 0xf4, 0x5c, 0x54, 0x89, 0x7f, 0x29, 0xe8, 0xee,
+	0xda, 0x7b, 0x84, 0x4f, 0xaa, 0x3b, 0xdd, 0xe4, 0x22, 0xd6, 0xae, 0x27, 0xb0, 0xd1, 0x7f, 0xfb,
+	0xfd, 0xc7, 0x07, 0xf5, 0x21, 0xee, 0x64, 0xab, 0xe6, 0xe2, 0xaf, 0xf6, 0x3b, 0xf2, 0xee, 0x31,
+	0xab, 0x29, 0x77, 0xcf, 0xbf, 0xd4, 0xb4, 0x9a, 0x97, 0xf8, 0x9d, 0x8a, 0xf6, 0x2a, 0x65, 0xc7,
+	0x4f, 0xae, 0xaf, 0xae, 0x5c, 0x17, 0xb5, 0xd1, 0x8d, 0xb0, 0xc4, 0x39, 0x34, 0x46, 0xf9, 0x14,
+	0xfa, 0xc6, 0xa3, 0x6c, 0x0a, 0x7f, 0xda, 0xbe, 0xb8, 0xb2, 0x90, 0x3a, 0xcd, 0xcb, 0x75, 0x43,
+	0x38, 0x0a, 0xf3, 0x64, 0x47, 0x4a, 0xb3, 0xf7, 0x53, 0x41, 0x07, 0x73, 0x1a, 0x56, 0xd6, 0xd7,
+	0x3b, 0xac, 0x3c, 0x47, 0x93, 0x6c, 0x8b, 0x4c, 0x94, 0x97, 0xc3, 0x82, 0xe5, 0xd1, 0x80, 0x44,
+	0x9e, 0x49, 0x13, 0xcf, 0xf2, 0x20, 0xca, 0x77, 0x8c, 0xfc, 0x59, 0xc4, 0x3e, 0x2b, 0xff, 0x57,
+	0x1d, 0x4b, 0xe3, 0x93, 0xba, 0x35, 0xe8, 0x76, 0x3f, 0xab, 0xf5, 0x81, 0x00, 0x76, 0x5d, 0x66,
+	0x0a, 0x33, 0xb3, 0xce, 0x5a, 0x66, 0x91, 0x98, 0x7d, 0x93, 0x21, 0xd3, 0xae, 0xcb, 0xa6, 0xab,
+	0x90, 0xe9, 0x59, 0x6b, 0x2a, 0x43, 0x66, 0x3b, 0x79, 0x01, 0x0f, 0x7e, 0x07, 0x00, 0x00, 0xff,
+	0xff, 0xe9, 0x0e, 0xc7, 0x43, 0x2b, 0x07, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/keyword_plan_service.pb.go b/googleapis/ads/googleads/v0/services/keyword_plan_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3abc1008334f4ad5b7a647f897464f4262785c12
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/keyword_plan_service.pb.go
@@ -0,0 +1,1129 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/keyword_plan_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import common "google.golang.org/genproto/googleapis/ads/googleads/v0/common"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [KeywordPlanService.GetKeywordPlan][google.ads.googleads.v0.services.KeywordPlanService.GetKeywordPlan].
+type GetKeywordPlanRequest struct {
+	// The resource name of the plan to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordPlanRequest) Reset()         { *m = GetKeywordPlanRequest{} }
+func (m *GetKeywordPlanRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordPlanRequest) ProtoMessage()    {}
+func (*GetKeywordPlanRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{0}
+}
+func (m *GetKeywordPlanRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordPlanRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordPlanRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordPlanRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetKeywordPlanRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordPlanRequest.Merge(dst, src)
+}
+func (m *GetKeywordPlanRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordPlanRequest.Size(m)
+}
+func (m *GetKeywordPlanRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordPlanRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordPlanRequest proto.InternalMessageInfo
+
+func (m *GetKeywordPlanRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanService.MutateKeywordPlans][google.ads.googleads.v0.services.KeywordPlanService.MutateKeywordPlans].
+type MutateKeywordPlansRequest struct {
+	// The ID of the customer whose keyword plans are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual keyword plans.
+	Operations           []*KeywordPlanOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateKeywordPlansRequest) Reset()         { *m = MutateKeywordPlansRequest{} }
+func (m *MutateKeywordPlansRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlansRequest) ProtoMessage()    {}
+func (*MutateKeywordPlansRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{1}
+}
+func (m *MutateKeywordPlansRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlansRequest.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlansRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlansRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlansRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlansRequest.Merge(dst, src)
+}
+func (m *MutateKeywordPlansRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlansRequest.Size(m)
+}
+func (m *MutateKeywordPlansRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlansRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlansRequest proto.InternalMessageInfo
+
+func (m *MutateKeywordPlansRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateKeywordPlansRequest) GetOperations() []*KeywordPlanOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on a keyword plan.
+type KeywordPlanOperation struct {
+	// The FieldMask that determines which resource fields are modified in an
+	// update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*KeywordPlanOperation_Create
+	//	*KeywordPlanOperation_Update
+	//	*KeywordPlanOperation_Remove
+	Operation            isKeywordPlanOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *KeywordPlanOperation) Reset()         { *m = KeywordPlanOperation{} }
+func (m *KeywordPlanOperation) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanOperation) ProtoMessage()    {}
+func (*KeywordPlanOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{2}
+}
+func (m *KeywordPlanOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanOperation.Unmarshal(m, b)
+}
+func (m *KeywordPlanOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanOperation.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanOperation.Merge(dst, src)
+}
+func (m *KeywordPlanOperation) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanOperation.Size(m)
+}
+func (m *KeywordPlanOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanOperation proto.InternalMessageInfo
+
+func (m *KeywordPlanOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isKeywordPlanOperation_Operation interface {
+	isKeywordPlanOperation_Operation()
+}
+
+type KeywordPlanOperation_Create struct {
+	Create *resources.KeywordPlan `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type KeywordPlanOperation_Update struct {
+	Update *resources.KeywordPlan `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type KeywordPlanOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*KeywordPlanOperation_Create) isKeywordPlanOperation_Operation() {}
+
+func (*KeywordPlanOperation_Update) isKeywordPlanOperation_Operation() {}
+
+func (*KeywordPlanOperation_Remove) isKeywordPlanOperation_Operation() {}
+
+func (m *KeywordPlanOperation) GetOperation() isKeywordPlanOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *KeywordPlanOperation) GetCreate() *resources.KeywordPlan {
+	if x, ok := m.GetOperation().(*KeywordPlanOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *KeywordPlanOperation) GetUpdate() *resources.KeywordPlan {
+	if x, ok := m.GetOperation().(*KeywordPlanOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *KeywordPlanOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*KeywordPlanOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*KeywordPlanOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _KeywordPlanOperation_OneofMarshaler, _KeywordPlanOperation_OneofUnmarshaler, _KeywordPlanOperation_OneofSizer, []interface{}{
+		(*KeywordPlanOperation_Create)(nil),
+		(*KeywordPlanOperation_Update)(nil),
+		(*KeywordPlanOperation_Remove)(nil),
+	}
+}
+
+func _KeywordPlanOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*KeywordPlanOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *KeywordPlanOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *KeywordPlanOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("KeywordPlanOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _KeywordPlanOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*KeywordPlanOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlan)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.KeywordPlan)
+		err := b.DecodeMessage(msg)
+		m.Operation = &KeywordPlanOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &KeywordPlanOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _KeywordPlanOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*KeywordPlanOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *KeywordPlanOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *KeywordPlanOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a keyword plan mutate.
+type MutateKeywordPlansResponse struct {
+	// All results for the mutate.
+	Results              []*MutateKeywordPlansResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateKeywordPlansResponse) Reset()         { *m = MutateKeywordPlansResponse{} }
+func (m *MutateKeywordPlansResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlansResponse) ProtoMessage()    {}
+func (*MutateKeywordPlansResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{3}
+}
+func (m *MutateKeywordPlansResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlansResponse.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlansResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlansResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlansResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlansResponse.Merge(dst, src)
+}
+func (m *MutateKeywordPlansResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlansResponse.Size(m)
+}
+func (m *MutateKeywordPlansResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlansResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlansResponse proto.InternalMessageInfo
+
+func (m *MutateKeywordPlansResponse) GetResults() []*MutateKeywordPlansResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the keyword plan mutate.
+type MutateKeywordPlansResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateKeywordPlansResult) Reset()         { *m = MutateKeywordPlansResult{} }
+func (m *MutateKeywordPlansResult) String() string { return proto.CompactTextString(m) }
+func (*MutateKeywordPlansResult) ProtoMessage()    {}
+func (*MutateKeywordPlansResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{4}
+}
+func (m *MutateKeywordPlansResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateKeywordPlansResult.Unmarshal(m, b)
+}
+func (m *MutateKeywordPlansResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateKeywordPlansResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateKeywordPlansResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateKeywordPlansResult.Merge(dst, src)
+}
+func (m *MutateKeywordPlansResult) XXX_Size() int {
+	return xxx_messageInfo_MutateKeywordPlansResult.Size(m)
+}
+func (m *MutateKeywordPlansResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateKeywordPlansResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateKeywordPlansResult proto.InternalMessageInfo
+
+func (m *MutateKeywordPlansResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [KeywordPlanService.GenerateForecastMetrics][google.ads.googleads.v0.services.KeywordPlanService.GenerateForecastMetrics].
+type GenerateForecastMetricsRequest struct {
+	// The resource name of the keyword plan to be forecasted.
+	KeywordPlan          string   `protobuf:"bytes,1,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenerateForecastMetricsRequest) Reset()         { *m = GenerateForecastMetricsRequest{} }
+func (m *GenerateForecastMetricsRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateForecastMetricsRequest) ProtoMessage()    {}
+func (*GenerateForecastMetricsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{5}
+}
+func (m *GenerateForecastMetricsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateForecastMetricsRequest.Unmarshal(m, b)
+}
+func (m *GenerateForecastMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateForecastMetricsRequest.Marshal(b, m, deterministic)
+}
+func (dst *GenerateForecastMetricsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateForecastMetricsRequest.Merge(dst, src)
+}
+func (m *GenerateForecastMetricsRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateForecastMetricsRequest.Size(m)
+}
+func (m *GenerateForecastMetricsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateForecastMetricsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateForecastMetricsRequest proto.InternalMessageInfo
+
+func (m *GenerateForecastMetricsRequest) GetKeywordPlan() string {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return ""
+}
+
+// Response message for [KeywordPlanService.GenerateForecastMetrics][google.ads.googleads.v0.services.KeywordPlanService.GenerateForecastMetrics].
+type GenerateForecastMetricsResponse struct {
+	// List of campaign forecasts.
+	// One maximum.
+	CampaignForecasts []*KeywordPlanCampaignForecast `protobuf:"bytes,1,rep,name=campaign_forecasts,json=campaignForecasts,proto3" json:"campaign_forecasts,omitempty"`
+	// List of ad group forecasts.
+	AdGroupForecasts []*KeywordPlanAdGroupForecast `protobuf:"bytes,2,rep,name=ad_group_forecasts,json=adGroupForecasts,proto3" json:"ad_group_forecasts,omitempty"`
+	// List of keyword forecasts.
+	KeywordForecasts     []*KeywordPlanKeywordForecast `protobuf:"bytes,3,rep,name=keyword_forecasts,json=keywordForecasts,proto3" json:"keyword_forecasts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *GenerateForecastMetricsResponse) Reset()         { *m = GenerateForecastMetricsResponse{} }
+func (m *GenerateForecastMetricsResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateForecastMetricsResponse) ProtoMessage()    {}
+func (*GenerateForecastMetricsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{6}
+}
+func (m *GenerateForecastMetricsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateForecastMetricsResponse.Unmarshal(m, b)
+}
+func (m *GenerateForecastMetricsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateForecastMetricsResponse.Marshal(b, m, deterministic)
+}
+func (dst *GenerateForecastMetricsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateForecastMetricsResponse.Merge(dst, src)
+}
+func (m *GenerateForecastMetricsResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateForecastMetricsResponse.Size(m)
+}
+func (m *GenerateForecastMetricsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateForecastMetricsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateForecastMetricsResponse proto.InternalMessageInfo
+
+func (m *GenerateForecastMetricsResponse) GetCampaignForecasts() []*KeywordPlanCampaignForecast {
+	if m != nil {
+		return m.CampaignForecasts
+	}
+	return nil
+}
+
+func (m *GenerateForecastMetricsResponse) GetAdGroupForecasts() []*KeywordPlanAdGroupForecast {
+	if m != nil {
+		return m.AdGroupForecasts
+	}
+	return nil
+}
+
+func (m *GenerateForecastMetricsResponse) GetKeywordForecasts() []*KeywordPlanKeywordForecast {
+	if m != nil {
+		return m.KeywordForecasts
+	}
+	return nil
+}
+
+// A campaign forecast.
+type KeywordPlanCampaignForecast struct {
+	// The resource name of the Keyword Plan campaign related to the forecast.
+	//
+	// `customers/{customer_id}/keywordPlanCampaigns/{keyword+plan_campaign_id}`
+	KeywordPlanCampaign *wrappers.StringValue `protobuf:"bytes,1,opt,name=keyword_plan_campaign,json=keywordPlanCampaign,proto3" json:"keyword_plan_campaign,omitempty"`
+	// The forecast for the Keyword Plan campaign.
+	CampaignForecast     *ForecastMetrics `protobuf:"bytes,2,opt,name=campaign_forecast,json=campaignForecast,proto3" json:"campaign_forecast,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *KeywordPlanCampaignForecast) Reset()         { *m = KeywordPlanCampaignForecast{} }
+func (m *KeywordPlanCampaignForecast) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanCampaignForecast) ProtoMessage()    {}
+func (*KeywordPlanCampaignForecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{7}
+}
+func (m *KeywordPlanCampaignForecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanCampaignForecast.Unmarshal(m, b)
+}
+func (m *KeywordPlanCampaignForecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanCampaignForecast.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanCampaignForecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanCampaignForecast.Merge(dst, src)
+}
+func (m *KeywordPlanCampaignForecast) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanCampaignForecast.Size(m)
+}
+func (m *KeywordPlanCampaignForecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanCampaignForecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanCampaignForecast proto.InternalMessageInfo
+
+func (m *KeywordPlanCampaignForecast) GetKeywordPlanCampaign() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanCampaign
+	}
+	return nil
+}
+
+func (m *KeywordPlanCampaignForecast) GetCampaignForecast() *ForecastMetrics {
+	if m != nil {
+		return m.CampaignForecast
+	}
+	return nil
+}
+
+// An ad group forecast.
+type KeywordPlanAdGroupForecast struct {
+	// The resource name of the Keyword Plan ad group related to the forecast.
+	//
+	// `customers/{customer_id}/keywordPlanAdGroups/{keyword_plan_ad_group_id}`
+	KeywordPlanAdGroup *wrappers.StringValue `protobuf:"bytes,1,opt,name=keyword_plan_ad_group,json=keywordPlanAdGroup,proto3" json:"keyword_plan_ad_group,omitempty"`
+	// The forecast for the Keyword Plan ad group.
+	AdGroupForecast      *ForecastMetrics `protobuf:"bytes,2,opt,name=ad_group_forecast,json=adGroupForecast,proto3" json:"ad_group_forecast,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *KeywordPlanAdGroupForecast) Reset()         { *m = KeywordPlanAdGroupForecast{} }
+func (m *KeywordPlanAdGroupForecast) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanAdGroupForecast) ProtoMessage()    {}
+func (*KeywordPlanAdGroupForecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{8}
+}
+func (m *KeywordPlanAdGroupForecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanAdGroupForecast.Unmarshal(m, b)
+}
+func (m *KeywordPlanAdGroupForecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanAdGroupForecast.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanAdGroupForecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanAdGroupForecast.Merge(dst, src)
+}
+func (m *KeywordPlanAdGroupForecast) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanAdGroupForecast.Size(m)
+}
+func (m *KeywordPlanAdGroupForecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanAdGroupForecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanAdGroupForecast proto.InternalMessageInfo
+
+func (m *KeywordPlanAdGroupForecast) GetKeywordPlanAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanAdGroup
+	}
+	return nil
+}
+
+func (m *KeywordPlanAdGroupForecast) GetAdGroupForecast() *ForecastMetrics {
+	if m != nil {
+		return m.AdGroupForecast
+	}
+	return nil
+}
+
+// A keyword forecast.
+type KeywordPlanKeywordForecast struct {
+	// The resource name of the Keyword Plan keyword related to the forecast.
+	//
+	//
+	// `customers/{customer_id}/keywordPlanAdGroupKeywords/{keyword_plan_ad_group_keyword_id}`
+	KeywordPlanAdGroupKeyword *wrappers.StringValue `protobuf:"bytes,1,opt,name=keyword_plan_ad_group_keyword,json=keywordPlanAdGroupKeyword,proto3" json:"keyword_plan_ad_group_keyword,omitempty"`
+	// The forecast for the Keyword Plan keyword.
+	KeywordForecast      *ForecastMetrics `protobuf:"bytes,2,opt,name=keyword_forecast,json=keywordForecast,proto3" json:"keyword_forecast,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *KeywordPlanKeywordForecast) Reset()         { *m = KeywordPlanKeywordForecast{} }
+func (m *KeywordPlanKeywordForecast) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordForecast) ProtoMessage()    {}
+func (*KeywordPlanKeywordForecast) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{9}
+}
+func (m *KeywordPlanKeywordForecast) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordForecast.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordForecast) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordForecast.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanKeywordForecast) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordForecast.Merge(dst, src)
+}
+func (m *KeywordPlanKeywordForecast) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordForecast.Size(m)
+}
+func (m *KeywordPlanKeywordForecast) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordForecast.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordForecast proto.InternalMessageInfo
+
+func (m *KeywordPlanKeywordForecast) GetKeywordPlanAdGroupKeyword() *wrappers.StringValue {
+	if m != nil {
+		return m.KeywordPlanAdGroupKeyword
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordForecast) GetKeywordForecast() *ForecastMetrics {
+	if m != nil {
+		return m.KeywordForecast
+	}
+	return nil
+}
+
+// Forecast metrics.
+type ForecastMetrics struct {
+	// Impressions
+	Impressions *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=impressions,proto3" json:"impressions,omitempty"`
+	// Ctr
+	Ctr *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=ctr,proto3" json:"ctr,omitempty"`
+	// AVG cpc
+	AverageCpc *wrappers.Int64Value `protobuf:"bytes,3,opt,name=average_cpc,json=averageCpc,proto3" json:"average_cpc,omitempty"`
+	// Clicks
+	Clicks *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=clicks,proto3" json:"clicks,omitempty"`
+	// Cost
+	CostMicros           *wrappers.Int64Value `protobuf:"bytes,6,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ForecastMetrics) Reset()         { *m = ForecastMetrics{} }
+func (m *ForecastMetrics) String() string { return proto.CompactTextString(m) }
+func (*ForecastMetrics) ProtoMessage()    {}
+func (*ForecastMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{10}
+}
+func (m *ForecastMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ForecastMetrics.Unmarshal(m, b)
+}
+func (m *ForecastMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ForecastMetrics.Marshal(b, m, deterministic)
+}
+func (dst *ForecastMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ForecastMetrics.Merge(dst, src)
+}
+func (m *ForecastMetrics) XXX_Size() int {
+	return xxx_messageInfo_ForecastMetrics.Size(m)
+}
+func (m *ForecastMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_ForecastMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ForecastMetrics proto.InternalMessageInfo
+
+func (m *ForecastMetrics) GetImpressions() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Impressions
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetCtr() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Ctr
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetAverageCpc() *wrappers.Int64Value {
+	if m != nil {
+		return m.AverageCpc
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetClicks() *wrappers.DoubleValue {
+	if m != nil {
+		return m.Clicks
+	}
+	return nil
+}
+
+func (m *ForecastMetrics) GetCostMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CostMicros
+	}
+	return nil
+}
+
+// Request message for [KeywordPlanService.GenerateHistoricalMetrics][google.ads.googleads.v0.services.KeywordPlanService.GenerateHistoricalMetrics].
+type GenerateHistoricalMetricsRequest struct {
+	// The resource name of the keyword plan of which historical metrics are
+	// requested.
+	KeywordPlan          string   `protobuf:"bytes,1,opt,name=keyword_plan,json=keywordPlan,proto3" json:"keyword_plan,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenerateHistoricalMetricsRequest) Reset()         { *m = GenerateHistoricalMetricsRequest{} }
+func (m *GenerateHistoricalMetricsRequest) String() string { return proto.CompactTextString(m) }
+func (*GenerateHistoricalMetricsRequest) ProtoMessage()    {}
+func (*GenerateHistoricalMetricsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{11}
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateHistoricalMetricsRequest.Unmarshal(m, b)
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateHistoricalMetricsRequest.Marshal(b, m, deterministic)
+}
+func (dst *GenerateHistoricalMetricsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateHistoricalMetricsRequest.Merge(dst, src)
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_Size() int {
+	return xxx_messageInfo_GenerateHistoricalMetricsRequest.Size(m)
+}
+func (m *GenerateHistoricalMetricsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateHistoricalMetricsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateHistoricalMetricsRequest proto.InternalMessageInfo
+
+func (m *GenerateHistoricalMetricsRequest) GetKeywordPlan() string {
+	if m != nil {
+		return m.KeywordPlan
+	}
+	return ""
+}
+
+// Response message for [KeywordPlanService.GenerateHistoricalMetrics][google.ads.googleads.v0.services.KeywordPlanService.GenerateHistoricalMetrics].
+type GenerateHistoricalMetricsResponse struct {
+	// List of keyword historical metrics.
+	Metrics              []*KeywordPlanKeywordHistoricalMetrics `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *GenerateHistoricalMetricsResponse) Reset()         { *m = GenerateHistoricalMetricsResponse{} }
+func (m *GenerateHistoricalMetricsResponse) String() string { return proto.CompactTextString(m) }
+func (*GenerateHistoricalMetricsResponse) ProtoMessage()    {}
+func (*GenerateHistoricalMetricsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{12}
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenerateHistoricalMetricsResponse.Unmarshal(m, b)
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenerateHistoricalMetricsResponse.Marshal(b, m, deterministic)
+}
+func (dst *GenerateHistoricalMetricsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenerateHistoricalMetricsResponse.Merge(dst, src)
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_Size() int {
+	return xxx_messageInfo_GenerateHistoricalMetricsResponse.Size(m)
+}
+func (m *GenerateHistoricalMetricsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenerateHistoricalMetricsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenerateHistoricalMetricsResponse proto.InternalMessageInfo
+
+func (m *GenerateHistoricalMetricsResponse) GetMetrics() []*KeywordPlanKeywordHistoricalMetrics {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+// A keyword historical metrics.
+type KeywordPlanKeywordHistoricalMetrics struct {
+	// The text of the query associated with one or more ad_group_keywords in the
+	// plan.
+	//
+	// Note that we de-dupe your keywords list, eliminating close variants before
+	// returning the plan's keywords as text. For example, if your plan originally
+	// contained the keywords 'car' and 'cars', the returned search query will
+	// only contain 'car'.
+	//
+	SearchQuery *wrappers.StringValue `protobuf:"bytes,1,opt,name=search_query,json=searchQuery,proto3" json:"search_query,omitempty"`
+	// The historical metrics for the query associated with one or more
+	// ad_group_keywords in the plan.
+	KeywordMetrics       *common.KeywordPlanHistoricalMetrics `protobuf:"bytes,2,opt,name=keyword_metrics,json=keywordMetrics,proto3" json:"keyword_metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *KeywordPlanKeywordHistoricalMetrics) Reset()         { *m = KeywordPlanKeywordHistoricalMetrics{} }
+func (m *KeywordPlanKeywordHistoricalMetrics) String() string { return proto.CompactTextString(m) }
+func (*KeywordPlanKeywordHistoricalMetrics) ProtoMessage()    {}
+func (*KeywordPlanKeywordHistoricalMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_plan_service_6a70ca796af95ddb, []int{13}
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Unmarshal(m, b)
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Marshal(b, m, deterministic)
+}
+func (dst *KeywordPlanKeywordHistoricalMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Merge(dst, src)
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_Size() int {
+	return xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.Size(m)
+}
+func (m *KeywordPlanKeywordHistoricalMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KeywordPlanKeywordHistoricalMetrics proto.InternalMessageInfo
+
+func (m *KeywordPlanKeywordHistoricalMetrics) GetSearchQuery() *wrappers.StringValue {
+	if m != nil {
+		return m.SearchQuery
+	}
+	return nil
+}
+
+func (m *KeywordPlanKeywordHistoricalMetrics) GetKeywordMetrics() *common.KeywordPlanHistoricalMetrics {
+	if m != nil {
+		return m.KeywordMetrics
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordPlanRequest)(nil), "google.ads.googleads.v0.services.GetKeywordPlanRequest")
+	proto.RegisterType((*MutateKeywordPlansRequest)(nil), "google.ads.googleads.v0.services.MutateKeywordPlansRequest")
+	proto.RegisterType((*KeywordPlanOperation)(nil), "google.ads.googleads.v0.services.KeywordPlanOperation")
+	proto.RegisterType((*MutateKeywordPlansResponse)(nil), "google.ads.googleads.v0.services.MutateKeywordPlansResponse")
+	proto.RegisterType((*MutateKeywordPlansResult)(nil), "google.ads.googleads.v0.services.MutateKeywordPlansResult")
+	proto.RegisterType((*GenerateForecastMetricsRequest)(nil), "google.ads.googleads.v0.services.GenerateForecastMetricsRequest")
+	proto.RegisterType((*GenerateForecastMetricsResponse)(nil), "google.ads.googleads.v0.services.GenerateForecastMetricsResponse")
+	proto.RegisterType((*KeywordPlanCampaignForecast)(nil), "google.ads.googleads.v0.services.KeywordPlanCampaignForecast")
+	proto.RegisterType((*KeywordPlanAdGroupForecast)(nil), "google.ads.googleads.v0.services.KeywordPlanAdGroupForecast")
+	proto.RegisterType((*KeywordPlanKeywordForecast)(nil), "google.ads.googleads.v0.services.KeywordPlanKeywordForecast")
+	proto.RegisterType((*ForecastMetrics)(nil), "google.ads.googleads.v0.services.ForecastMetrics")
+	proto.RegisterType((*GenerateHistoricalMetricsRequest)(nil), "google.ads.googleads.v0.services.GenerateHistoricalMetricsRequest")
+	proto.RegisterType((*GenerateHistoricalMetricsResponse)(nil), "google.ads.googleads.v0.services.GenerateHistoricalMetricsResponse")
+	proto.RegisterType((*KeywordPlanKeywordHistoricalMetrics)(nil), "google.ads.googleads.v0.services.KeywordPlanKeywordHistoricalMetrics")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// KeywordPlanServiceClient is the client API for KeywordPlanService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordPlanServiceClient interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlan(ctx context.Context, in *GetKeywordPlanRequest, opts ...grpc.CallOption) (*resources.KeywordPlan, error)
+	// Creates, updates, or removes keyword plans. Operation statuses are
+	// returned.
+	MutateKeywordPlans(ctx context.Context, in *MutateKeywordPlansRequest, opts ...grpc.CallOption) (*MutateKeywordPlansResponse, error)
+	// Returns the requested Keyword Plan forecasts.
+	GenerateForecastMetrics(ctx context.Context, in *GenerateForecastMetricsRequest, opts ...grpc.CallOption) (*GenerateForecastMetricsResponse, error)
+	// Returns the requested Keyword Plan historical metrics.
+	GenerateHistoricalMetrics(ctx context.Context, in *GenerateHistoricalMetricsRequest, opts ...grpc.CallOption) (*GenerateHistoricalMetricsResponse, error)
+}
+
+type keywordPlanServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewKeywordPlanServiceClient(cc *grpc.ClientConn) KeywordPlanServiceClient {
+	return &keywordPlanServiceClient{cc}
+}
+
+func (c *keywordPlanServiceClient) GetKeywordPlan(ctx context.Context, in *GetKeywordPlanRequest, opts ...grpc.CallOption) (*resources.KeywordPlan, error) {
+	out := new(resources.KeywordPlan)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanService/GetKeywordPlan", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanServiceClient) MutateKeywordPlans(ctx context.Context, in *MutateKeywordPlansRequest, opts ...grpc.CallOption) (*MutateKeywordPlansResponse, error) {
+	out := new(MutateKeywordPlansResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanService/MutateKeywordPlans", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanServiceClient) GenerateForecastMetrics(ctx context.Context, in *GenerateForecastMetricsRequest, opts ...grpc.CallOption) (*GenerateForecastMetricsResponse, error) {
+	out := new(GenerateForecastMetricsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanService/GenerateForecastMetrics", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *keywordPlanServiceClient) GenerateHistoricalMetrics(ctx context.Context, in *GenerateHistoricalMetricsRequest, opts ...grpc.CallOption) (*GenerateHistoricalMetricsResponse, error) {
+	out := new(GenerateHistoricalMetricsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordPlanService/GenerateHistoricalMetrics", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordPlanServiceServer is the server API for KeywordPlanService service.
+type KeywordPlanServiceServer interface {
+	// Returns the requested plan in full detail.
+	GetKeywordPlan(context.Context, *GetKeywordPlanRequest) (*resources.KeywordPlan, error)
+	// Creates, updates, or removes keyword plans. Operation statuses are
+	// returned.
+	MutateKeywordPlans(context.Context, *MutateKeywordPlansRequest) (*MutateKeywordPlansResponse, error)
+	// Returns the requested Keyword Plan forecasts.
+	GenerateForecastMetrics(context.Context, *GenerateForecastMetricsRequest) (*GenerateForecastMetricsResponse, error)
+	// Returns the requested Keyword Plan historical metrics.
+	GenerateHistoricalMetrics(context.Context, *GenerateHistoricalMetricsRequest) (*GenerateHistoricalMetricsResponse, error)
+}
+
+func RegisterKeywordPlanServiceServer(s *grpc.Server, srv KeywordPlanServiceServer) {
+	s.RegisterService(&_KeywordPlanService_serviceDesc, srv)
+}
+
+func _KeywordPlanService_GetKeywordPlan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordPlanRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).GetKeywordPlan(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanService/GetKeywordPlan",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).GetKeywordPlan(ctx, req.(*GetKeywordPlanRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanService_MutateKeywordPlans_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateKeywordPlansRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).MutateKeywordPlans(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanService/MutateKeywordPlans",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).MutateKeywordPlans(ctx, req.(*MutateKeywordPlansRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanService_GenerateForecastMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateForecastMetricsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).GenerateForecastMetrics(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanService/GenerateForecastMetrics",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).GenerateForecastMetrics(ctx, req.(*GenerateForecastMetricsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _KeywordPlanService_GenerateHistoricalMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GenerateHistoricalMetricsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordPlanServiceServer).GenerateHistoricalMetrics(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordPlanService/GenerateHistoricalMetrics",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordPlanServiceServer).GenerateHistoricalMetrics(ctx, req.(*GenerateHistoricalMetricsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordPlanService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.KeywordPlanService",
+	HandlerType: (*KeywordPlanServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordPlan",
+			Handler:    _KeywordPlanService_GetKeywordPlan_Handler,
+		},
+		{
+			MethodName: "MutateKeywordPlans",
+			Handler:    _KeywordPlanService_MutateKeywordPlans_Handler,
+		},
+		{
+			MethodName: "GenerateForecastMetrics",
+			Handler:    _KeywordPlanService_GenerateForecastMetrics_Handler,
+		},
+		{
+			MethodName: "GenerateHistoricalMetrics",
+			Handler:    _KeywordPlanService_GenerateHistoricalMetrics_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/keyword_plan_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/keyword_plan_service.proto", fileDescriptor_keyword_plan_service_6a70ca796af95ddb)
+}
+
+var fileDescriptor_keyword_plan_service_6a70ca796af95ddb = []byte{
+	// 1130 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xcf, 0x6f, 0xdc, 0xc4,
+	0x17, 0xff, 0x7a, 0xf3, 0x25, 0x51, 0xdf, 0x86, 0x36, 0x19, 0xa8, 0xba, 0xd9, 0x96, 0x76, 0xeb,
+	0x72, 0x88, 0x72, 0xb0, 0xd3, 0x10, 0x05, 0x94, 0x1f, 0x94, 0x4d, 0x48, 0x37, 0x05, 0x42, 0xc3,
+	0x16, 0xe5, 0x80, 0x42, 0xad, 0x89, 0x3d, 0x31, 0x66, 0x6d, 0x8f, 0x3b, 0x63, 0xa7, 0xaa, 0xaa,
+	0x5e, 0x10, 0xe2, 0xc8, 0x05, 0xfe, 0x02, 0x8e, 0xdc, 0x10, 0xff, 0x05, 0xa2, 0xe2, 0xc0, 0x01,
+	0x89, 0x33, 0xe2, 0xcc, 0x91, 0x23, 0xb2, 0x67, 0x66, 0xe3, 0xb5, 0xd7, 0xc9, 0x66, 0x73, 0x1b,
+	0x3f, 0xbf, 0xf7, 0x79, 0xef, 0xf3, 0xde, 0x9b, 0xe7, 0x67, 0x58, 0x73, 0x29, 0x75, 0x7d, 0x62,
+	0x62, 0x87, 0x9b, 0xe2, 0x98, 0x9e, 0x8e, 0x17, 0x4d, 0x4e, 0xd8, 0xb1, 0x67, 0x13, 0x6e, 0xf6,
+	0xc8, 0xb3, 0xa7, 0x94, 0x39, 0x56, 0xe4, 0xe3, 0xd0, 0x92, 0x52, 0x23, 0x62, 0x34, 0xa6, 0xa8,
+	0x25, 0x2c, 0x0c, 0xec, 0x70, 0xa3, 0x6f, 0x6c, 0x1c, 0x2f, 0x1a, 0xca, 0xb8, 0xf9, 0x4e, 0x15,
+	0xbc, 0x4d, 0x83, 0x80, 0x86, 0x83, 0xe0, 0x42, 0x26, 0xb0, 0x9b, 0xcb, 0x55, 0x96, 0x8c, 0x70,
+	0x9a, 0xb0, 0x62, 0x64, 0xd2, 0xea, 0x86, 0xb2, 0x8a, 0x3c, 0x13, 0x87, 0x21, 0x8d, 0x71, 0xec,
+	0xd1, 0x90, 0xcb, 0xb7, 0x32, 0x5e, 0x33, 0x7b, 0x3a, 0x4c, 0x8e, 0xcc, 0x23, 0x8f, 0xf8, 0x8e,
+	0x15, 0x60, 0xde, 0x93, 0x1a, 0x37, 0x8b, 0x1a, 0x4f, 0x19, 0x8e, 0x22, 0xc2, 0x24, 0x82, 0xbe,
+	0x0e, 0x57, 0x3b, 0x24, 0xfe, 0x50, 0x38, 0xde, 0xf3, 0x71, 0xd8, 0x25, 0x4f, 0x12, 0xc2, 0x63,
+	0x74, 0x07, 0x5e, 0x55, 0x81, 0x59, 0x21, 0x0e, 0x48, 0x43, 0x6b, 0x69, 0xf3, 0x97, 0xba, 0xd3,
+	0x4a, 0xf8, 0x31, 0x0e, 0x88, 0xfe, 0xbd, 0x06, 0x73, 0xbb, 0x49, 0x8c, 0x63, 0x92, 0x43, 0xe0,
+	0x0a, 0xe2, 0x16, 0xd4, 0xed, 0x84, 0xc7, 0x34, 0x20, 0xcc, 0xf2, 0x1c, 0x09, 0x00, 0x4a, 0xf4,
+	0xc0, 0x41, 0xfb, 0x00, 0x34, 0x22, 0x4c, 0x50, 0x6a, 0xd4, 0x5a, 0x13, 0xf3, 0xf5, 0xa5, 0x15,
+	0xe3, 0xac, 0x1a, 0x18, 0x39, 0x5f, 0x0f, 0x95, 0x79, 0x37, 0x87, 0xa4, 0x7f, 0x5b, 0x83, 0xd7,
+	0x87, 0x29, 0xa1, 0x35, 0xa8, 0x27, 0x91, 0x83, 0x63, 0x92, 0xa5, 0xa8, 0xf1, 0xff, 0x96, 0x36,
+	0x5f, 0x5f, 0x6a, 0x2a, 0x8f, 0x2a, 0x47, 0xc6, 0xfd, 0x34, 0x8b, 0xbb, 0x98, 0xf7, 0xba, 0x20,
+	0xd4, 0xd3, 0x33, 0xda, 0x81, 0x49, 0x9b, 0x11, 0x1c, 0x8b, 0x54, 0xd4, 0x97, 0x8c, 0xca, 0x48,
+	0xfb, 0x15, 0xcd, 0x87, 0xba, 0xf3, 0xbf, 0xae, 0xb4, 0x4f, 0x91, 0x04, 0x6e, 0xa3, 0x36, 0x2e,
+	0x92, 0xb0, 0x47, 0x0d, 0x98, 0x64, 0x24, 0xa0, 0xc7, 0xa4, 0x31, 0x91, 0x66, 0x37, 0x7d, 0x23,
+	0x9e, 0x37, 0xeb, 0x70, 0xa9, 0x9f, 0x11, 0x9d, 0x41, 0x73, 0x58, 0x99, 0x78, 0x44, 0x43, 0x4e,
+	0xd0, 0xa7, 0x30, 0xc5, 0x08, 0x4f, 0xfc, 0x58, 0xd5, 0x60, 0xf5, 0xec, 0x1a, 0x0c, 0x85, 0x4b,
+	0xfc, 0xb8, 0xab, 0xa0, 0xf4, 0x7b, 0xd0, 0xa8, 0x52, 0x1a, 0xad, 0xb9, 0xb6, 0xe0, 0x66, 0x87,
+	0x84, 0x29, 0x05, 0x72, 0x9f, 0x32, 0x62, 0x63, 0x1e, 0xef, 0x92, 0x98, 0x79, 0x76, 0xbf, 0xc1,
+	0x6e, 0xc3, 0x74, 0xfe, 0xca, 0x48, 0x94, 0x7a, 0xef, 0xc4, 0xa1, 0xfe, 0x77, 0x0d, 0x6e, 0x55,
+	0xa2, 0x48, 0xfe, 0x3e, 0x20, 0x1b, 0x07, 0x11, 0xf6, 0xdc, 0xd0, 0x3a, 0x92, 0x3a, 0xbc, 0xa1,
+	0x65, 0xa9, 0xd8, 0x38, 0x57, 0x3b, 0x6e, 0x49, 0x18, 0xe5, 0xa9, 0x3b, 0x6b, 0x17, 0x24, 0x1c,
+	0x7d, 0x09, 0x08, 0x3b, 0x96, 0xcb, 0x68, 0x12, 0xe5, 0xbc, 0x89, 0xc4, 0xaf, 0x9f, 0xcb, 0x5b,
+	0xdb, 0xe9, 0xa4, 0x28, 0x7d, 0x67, 0x33, 0x78, 0x50, 0xc0, 0x91, 0x07, 0xb3, 0x2a, 0x41, 0x27,
+	0xae, 0x26, 0xc6, 0x70, 0x25, 0x8f, 0x27, 0xae, 0x7a, 0x83, 0x02, 0xae, 0xff, 0xa6, 0xc1, 0xf5,
+	0x53, 0x32, 0x81, 0xf6, 0xe0, 0xea, 0xe0, 0x6c, 0x94, 0x0a, 0xf2, 0x32, 0xdd, 0x28, 0x5d, 0xc2,
+	0x47, 0x31, 0xf3, 0x42, 0x77, 0x1f, 0xfb, 0x09, 0xe9, 0xbe, 0xd6, 0x2b, 0x23, 0xa3, 0xc7, 0x30,
+	0x5b, 0x2a, 0x9b, 0xbc, 0x50, 0x77, 0xcf, 0x26, 0x57, 0x6c, 0x86, 0x99, 0x62, 0xa5, 0xf4, 0x5f,
+	0x35, 0x68, 0x56, 0x67, 0x1b, 0x3d, 0x2c, 0x10, 0x52, 0x45, 0x1d, 0x89, 0x10, 0xea, 0x95, 0x80,
+	0xd1, 0xe7, 0x30, 0x5b, 0x6a, 0x8c, 0xf1, 0xf9, 0x5c, 0x29, 0x34, 0x83, 0xfe, 0xe7, 0x20, 0x9d,
+	0x42, 0x45, 0xd1, 0x63, 0x78, 0x63, 0x28, 0x1d, 0x4b, 0x4a, 0x47, 0xa2, 0x35, 0x57, 0xa6, 0x25,
+	0xfd, 0xa0, 0x03, 0x98, 0x29, 0xb6, 0xe2, 0x05, 0xc8, 0x15, 0xda, 0x4f, 0xff, 0xb9, 0x06, 0x57,
+	0x0a, 0x4a, 0xe8, 0x5d, 0xa8, 0x7b, 0x41, 0xc4, 0x08, 0xe7, 0xd9, 0xe7, 0xa5, 0x2a, 0xfe, 0xf7,
+	0x69, 0x72, 0xe8, 0x13, 0x11, 0x7f, 0xde, 0x00, 0x19, 0x30, 0x61, 0xc7, 0x4c, 0x06, 0x79, 0xba,
+	0x5d, 0xaa, 0x88, 0xd6, 0xa1, 0x8e, 0x8f, 0x09, 0xc3, 0x2e, 0xb1, 0xec, 0xc8, 0xce, 0x06, 0x72,
+	0x7d, 0xe9, 0x7a, 0xc9, 0xee, 0x41, 0x18, 0xaf, 0x2c, 0x0b, 0x33, 0x90, 0xfa, 0x5b, 0x91, 0x8d,
+	0x96, 0x61, 0xd2, 0xf6, 0x3d, 0xbb, 0xc7, 0x1b, 0xaf, 0x8c, 0xe0, 0x50, 0xea, 0xa6, 0x3e, 0x6d,
+	0xca, 0x63, 0x2b, 0xf0, 0x6c, 0x46, 0x79, 0x63, 0x72, 0x04, 0x9f, 0xa9, 0xfe, 0x6e, 0xa6, 0xae,
+	0x6f, 0x43, 0x4b, 0xcd, 0xc6, 0x1d, 0x8f, 0xc7, 0x94, 0x79, 0x36, 0xf6, 0xcf, 0x3f, 0x63, 0xbf,
+	0xd6, 0xe0, 0xf6, 0x29, 0x38, 0x72, 0xca, 0x5a, 0x30, 0x15, 0x08, 0x91, 0x1c, 0xad, 0xdb, 0xe3,
+	0x4c, 0xa0, 0x32, 0xbe, 0x42, 0xd5, 0x5f, 0x6a, 0x70, 0x67, 0x04, 0x03, 0x74, 0x0f, 0xa6, 0x39,
+	0xc1, 0xcc, 0xfe, 0xc2, 0x7a, 0x92, 0x10, 0xf6, 0x6c, 0xa4, 0xc6, 0xae, 0x0b, 0x8b, 0x4f, 0x52,
+	0x03, 0x44, 0x40, 0xf5, 0x9f, 0xa5, 0x18, 0x89, 0x26, 0xa9, 0x9e, 0xa9, 0x72, 0x13, 0xcc, 0x7f,
+	0xc4, 0x4b, 0x44, 0x2e, 0x4b, 0x50, 0xf9, 0xbc, 0xf4, 0xcd, 0x14, 0xa0, 0x9c, 0xc1, 0x23, 0x91,
+	0x14, 0xf4, 0x93, 0x06, 0x97, 0x07, 0x57, 0x36, 0xf4, 0xf6, 0xd9, 0x99, 0x1c, 0xba, 0xe4, 0x35,
+	0xcf, 0xb9, 0x78, 0xe8, 0x2b, 0x5f, 0xfd, 0xfe, 0xd7, 0x77, 0xb5, 0x45, 0x64, 0xa4, 0x7b, 0xeb,
+	0xf3, 0x81, 0x4f, 0xf8, 0x86, 0xda, 0xeb, 0xb8, 0xb9, 0x60, 0xe6, 0xba, 0x83, 0x9b, 0x0b, 0x2f,
+	0xd0, 0x4b, 0x0d, 0x50, 0x79, 0x19, 0x40, 0x6b, 0xe3, 0xed, 0x19, 0x22, 0xf6, 0xf5, 0x31, 0x97,
+	0x94, 0xac, 0x1b, 0xf5, 0xf5, 0x8c, 0xc9, 0x8a, 0x7e, 0x37, 0xdb, 0xdd, 0xfb, 0xa1, 0x3f, 0xcf,
+	0x2d, 0xac, 0x1b, 0x0b, 0x2f, 0x06, 0x88, 0xac, 0x06, 0x19, 0xdc, 0xaa, 0xb6, 0x80, 0xfe, 0xd1,
+	0xe0, 0x5a, 0xc5, 0x56, 0x81, 0xde, 0x1b, 0xa5, 0x18, 0xa7, 0xad, 0x35, 0xcd, 0xf6, 0x05, 0x10,
+	0x24, 0xbd, 0xbd, 0x8c, 0xde, 0x07, 0xfa, 0x76, 0x56, 0xa8, 0xfc, 0x05, 0x3e, 0xad, 0x4e, 0xab,
+	0xee, 0x70, 0xd8, 0x94, 0xf2, 0xbf, 0x1a, 0xcc, 0x55, 0x5e, 0x72, 0xb4, 0x39, 0x7a, 0xc8, 0x55,
+	0x93, 0xa6, 0xb9, 0x75, 0x21, 0x0c, 0x49, 0xbc, 0x9b, 0x11, 0xff, 0x48, 0xef, 0x8c, 0x47, 0xbc,
+	0x04, 0xbc, 0xaa, 0x2d, 0x6c, 0xfe, 0xa1, 0xc1, 0x9b, 0x36, 0x0d, 0xce, 0x0c, 0x6f, 0xf3, 0x5a,
+	0xf9, 0xba, 0xee, 0xa5, 0xd3, 0x64, 0x4f, 0xfb, 0x6c, 0x47, 0x1a, 0xbb, 0xd4, 0xc7, 0xa1, 0x6b,
+	0x50, 0xe6, 0x9a, 0x2e, 0x09, 0xb3, 0x59, 0xa3, 0xfe, 0x06, 0x23, 0x8f, 0x57, 0xff, 0xb5, 0xae,
+	0xa9, 0xc3, 0x0f, 0xb5, 0x89, 0x4e, 0xbb, 0xfd, 0x63, 0xad, 0xd5, 0x11, 0x80, 0x6d, 0x87, 0x1b,
+	0xe2, 0x98, 0x9e, 0xf6, 0x17, 0x0d, 0xe9, 0x98, 0xff, 0xa2, 0x54, 0x0e, 0xda, 0x0e, 0x3f, 0xe8,
+	0xab, 0x1c, 0xec, 0x2f, 0x1e, 0x28, 0x95, 0xc3, 0xc9, 0x2c, 0x80, 0xb7, 0xfe, 0x0b, 0x00, 0x00,
+	0xff, 0xff, 0xac, 0x10, 0x04, 0xef, 0x35, 0x0f, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/keyword_view_service.pb.go b/googleapis/ads/googleads/v0/services/keyword_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c21ce6b00d8c1c6f85444386fbe8bdd9489dd351
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/keyword_view_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/keyword_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [KeywordViewService.GetKeywordView][google.ads.googleads.v0.services.KeywordViewService.GetKeywordView].
+type GetKeywordViewRequest struct {
+	// The resource name of the keyword view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetKeywordViewRequest) Reset()         { *m = GetKeywordViewRequest{} }
+func (m *GetKeywordViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetKeywordViewRequest) ProtoMessage()    {}
+func (*GetKeywordViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_keyword_view_service_34e3e0cb9228e5f7, []int{0}
+}
+func (m *GetKeywordViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetKeywordViewRequest.Unmarshal(m, b)
+}
+func (m *GetKeywordViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetKeywordViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetKeywordViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetKeywordViewRequest.Merge(dst, src)
+}
+func (m *GetKeywordViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetKeywordViewRequest.Size(m)
+}
+func (m *GetKeywordViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetKeywordViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetKeywordViewRequest proto.InternalMessageInfo
+
+func (m *GetKeywordViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetKeywordViewRequest)(nil), "google.ads.googleads.v0.services.GetKeywordViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// KeywordViewServiceClient is the client API for KeywordViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type KeywordViewServiceClient interface {
+	// Returns the requested keyword view in full detail.
+	GetKeywordView(ctx context.Context, in *GetKeywordViewRequest, opts ...grpc.CallOption) (*resources.KeywordView, error)
+}
+
+type keywordViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewKeywordViewServiceClient(cc *grpc.ClientConn) KeywordViewServiceClient {
+	return &keywordViewServiceClient{cc}
+}
+
+func (c *keywordViewServiceClient) GetKeywordView(ctx context.Context, in *GetKeywordViewRequest, opts ...grpc.CallOption) (*resources.KeywordView, error) {
+	out := new(resources.KeywordView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.KeywordViewService/GetKeywordView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// KeywordViewServiceServer is the server API for KeywordViewService service.
+type KeywordViewServiceServer interface {
+	// Returns the requested keyword view in full detail.
+	GetKeywordView(context.Context, *GetKeywordViewRequest) (*resources.KeywordView, error)
+}
+
+func RegisterKeywordViewServiceServer(s *grpc.Server, srv KeywordViewServiceServer) {
+	s.RegisterService(&_KeywordViewService_serviceDesc, srv)
+}
+
+func _KeywordViewService_GetKeywordView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetKeywordViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KeywordViewServiceServer).GetKeywordView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.KeywordViewService/GetKeywordView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KeywordViewServiceServer).GetKeywordView(ctx, req.(*GetKeywordViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _KeywordViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.KeywordViewService",
+	HandlerType: (*KeywordViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetKeywordView",
+			Handler:    _KeywordViewService_GetKeywordView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/keyword_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/keyword_view_service.proto", fileDescriptor_keyword_view_service_34e3e0cb9228e5f7)
+}
+
+var fileDescriptor_keyword_view_service_34e3e0cb9228e5f7 = []byte{
+	// 343 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xec, 0xd4, 0xca, 0xf2, 0xfc, 0xa2, 0x94, 0xf8, 0xb2,
+	0xcc, 0xd4, 0xf2, 0x78, 0xa8, 0xa8, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02, 0x44, 0x87,
+	0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xb3, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xb3, 0x94, 0x09, 0x2e,
+	0xe3, 0x8b, 0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0xd0, 0xcd, 0x87, 0x98, 0x2b, 0x25, 0x03, 0xd3, 0x55,
+	0x90, 0xa9, 0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c, 0x91, 0x55,
+	0xb2, 0xe1, 0x12, 0x75, 0x4f, 0x2d, 0xf1, 0x86, 0x68, 0x0b, 0xcb, 0x4c, 0x2d, 0x0f, 0x4a, 0x2d,
+	0x2c, 0x4d, 0x2d, 0x2e, 0x11, 0x52, 0xe6, 0xe2, 0x85, 0x19, 0x1b, 0x9f, 0x97, 0x98, 0x9b, 0x2a,
+	0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x03, 0x13, 0xf4, 0x4b, 0xcc, 0x4d, 0x35, 0x3a, 0xc1,
+	0xc8, 0x25, 0x84, 0xa4, 0x37, 0x18, 0xe2, 0x52, 0xa1, 0x8d, 0x8c, 0x5c, 0x7c, 0xa8, 0xa6, 0x0a,
+	0x99, 0xeb, 0x11, 0xf2, 0x9e, 0x1e, 0x56, 0x77, 0x48, 0xe9, 0xe1, 0xd4, 0x08, 0xf7, 0xb5, 0x1e,
+	0x92, 0x36, 0x25, 0xb3, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x19, 0x08, 0xe9, 0x81, 0x02, 0xa6, 0x1a,
+	0xc5, 0x0b, 0xb6, 0xc9, 0xa5, 0xc5, 0x25, 0xf9, 0xb9, 0xa9, 0x45, 0xc5, 0xfa, 0x5a, 0xb0, 0x90,
+	0x02, 0xe9, 0x29, 0xd6, 0xd7, 0xaa, 0x75, 0xba, 0xce, 0xc8, 0xa5, 0x92, 0x9c, 0x9f, 0x4b, 0xd0,
+	0x99, 0x4e, 0xe2, 0x98, 0x1e, 0x0e, 0x00, 0x05, 0x65, 0x00, 0x63, 0x94, 0x07, 0x54, 0x73, 0x7a,
+	0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0x38, 0xa0, 0x61,
+	0x11, 0x56, 0x90, 0x59, 0x8c, 0x3b, 0x79, 0x58, 0xc3, 0x18, 0x8b, 0x98, 0x98, 0xdd, 0x1d, 0x1d,
+	0x57, 0x31, 0x29, 0xb8, 0x43, 0x0c, 0x74, 0x4c, 0x29, 0xd6, 0x83, 0x30, 0x41, 0xac, 0x30, 0x03,
+	0x3d, 0xa8, 0xc5, 0xc5, 0xa7, 0x60, 0x4a, 0x62, 0x1c, 0x53, 0x8a, 0x63, 0xe0, 0x4a, 0x62, 0xc2,
+	0x0c, 0x62, 0x60, 0x4a, 0x92, 0xd8, 0xc0, 0x0e, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x38,
+	0x0c, 0x16, 0x0b, 0x9e, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/language_constant_service.pb.go b/googleapis/ads/googleads/v0/services/language_constant_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..26af68b905b4c694e4db740c4e4a8691eb65e15a
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/language_constant_service.pb.go
@@ -0,0 +1,173 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/language_constant_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [LanguageConstantService.GetLanguageConstant][google.ads.googleads.v0.services.LanguageConstantService.GetLanguageConstant].
+type GetLanguageConstantRequest struct {
+	// Resource name of the language constant to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetLanguageConstantRequest) Reset()         { *m = GetLanguageConstantRequest{} }
+func (m *GetLanguageConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetLanguageConstantRequest) ProtoMessage()    {}
+func (*GetLanguageConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_language_constant_service_e6d521781dfa38e0, []int{0}
+}
+func (m *GetLanguageConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLanguageConstantRequest.Unmarshal(m, b)
+}
+func (m *GetLanguageConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLanguageConstantRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetLanguageConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLanguageConstantRequest.Merge(dst, src)
+}
+func (m *GetLanguageConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetLanguageConstantRequest.Size(m)
+}
+func (m *GetLanguageConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLanguageConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLanguageConstantRequest proto.InternalMessageInfo
+
+func (m *GetLanguageConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetLanguageConstantRequest)(nil), "google.ads.googleads.v0.services.GetLanguageConstantRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// LanguageConstantServiceClient is the client API for LanguageConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type LanguageConstantServiceClient interface {
+	// Returns the requested language constant.
+	GetLanguageConstant(ctx context.Context, in *GetLanguageConstantRequest, opts ...grpc.CallOption) (*resources.LanguageConstant, error)
+}
+
+type languageConstantServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewLanguageConstantServiceClient(cc *grpc.ClientConn) LanguageConstantServiceClient {
+	return &languageConstantServiceClient{cc}
+}
+
+func (c *languageConstantServiceClient) GetLanguageConstant(ctx context.Context, in *GetLanguageConstantRequest, opts ...grpc.CallOption) (*resources.LanguageConstant, error) {
+	out := new(resources.LanguageConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.LanguageConstantService/GetLanguageConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// LanguageConstantServiceServer is the server API for LanguageConstantService service.
+type LanguageConstantServiceServer interface {
+	// Returns the requested language constant.
+	GetLanguageConstant(context.Context, *GetLanguageConstantRequest) (*resources.LanguageConstant, error)
+}
+
+func RegisterLanguageConstantServiceServer(s *grpc.Server, srv LanguageConstantServiceServer) {
+	s.RegisterService(&_LanguageConstantService_serviceDesc, srv)
+}
+
+func _LanguageConstantService_GetLanguageConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLanguageConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(LanguageConstantServiceServer).GetLanguageConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.LanguageConstantService/GetLanguageConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(LanguageConstantServiceServer).GetLanguageConstant(ctx, req.(*GetLanguageConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _LanguageConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.LanguageConstantService",
+	HandlerType: (*LanguageConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetLanguageConstant",
+			Handler:    _LanguageConstantService_GetLanguageConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/language_constant_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/language_constant_service.proto", fileDescriptor_language_constant_service_e6d521781dfa38e0)
+}
+
+var fileDescriptor_language_constant_service_e6d521781dfa38e0 = []byte{
+	// 334 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x48, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0x9c, 0xc4, 0xbc, 0xf4, 0xd2, 0xc4, 0xf4, 0xd4, 0xf8,
+	0xe4, 0xfc, 0xbc, 0xe2, 0x92, 0xc4, 0xbc, 0x92, 0x78, 0xa8, 0x94, 0x5e, 0x41, 0x51, 0x7e, 0x49,
+	0xbe, 0x90, 0x02, 0x44, 0x9b, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0xdc, 0x04, 0xbd, 0x32, 0x03, 0x3d,
+	0x98, 0x09, 0x52, 0x96, 0xb8, 0xec, 0x28, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0xc2, 0x6a, 0x09, 0xc4,
+	0x70, 0x29, 0x19, 0x98, 0xd6, 0x82, 0x4c, 0xfd, 0xc4, 0xbc, 0xbc, 0xfc, 0x92, 0xc4, 0x92, 0xcc,
+	0xfc, 0xbc, 0x62, 0x88, 0xac, 0x92, 0x23, 0x97, 0x94, 0x7b, 0x6a, 0x89, 0x0f, 0x54, 0xaf, 0x33,
+	0x54, 0x6b, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x90, 0x32, 0x17, 0x2f, 0xcc, 0x82, 0xf8,
+	0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x1e, 0x98, 0xa0, 0x5f, 0x62,
+	0x6e, 0xaa, 0xd1, 0x55, 0x46, 0x2e, 0x71, 0x74, 0x03, 0x82, 0x21, 0x0e, 0x17, 0xda, 0xc9, 0xc8,
+	0x25, 0x8c, 0xc5, 0x7c, 0x21, 0x1b, 0x3d, 0x42, 0x5e, 0xd6, 0xc3, 0xed, 0x2c, 0x29, 0x63, 0x9c,
+	0xba, 0xe1, 0xc1, 0xa1, 0x87, 0xae, 0x57, 0x49, 0xbf, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x9a, 0x42,
+	0xea, 0xa0, 0x60, 0xab, 0x46, 0xf1, 0x96, 0x6d, 0x0e, 0x9a, 0xe2, 0x62, 0x7d, 0xad, 0x5a, 0xa7,
+	0x3b, 0x8c, 0x5c, 0x2a, 0xc9, 0xf9, 0xb9, 0x04, 0x5d, 0xea, 0x24, 0x83, 0xc3, 0xf7, 0x01, 0xa0,
+	0x10, 0x0e, 0x60, 0x8c, 0xf2, 0x80, 0x9a, 0x90, 0x9e, 0x0f, 0xb2, 0x47, 0x2f, 0xbf, 0x28, 0x5d,
+	0x3f, 0x3d, 0x35, 0x0f, 0x1c, 0xfe, 0xb0, 0xc8, 0x2c, 0xc8, 0x2c, 0xc6, 0x9d, 0x7e, 0xac, 0x61,
+	0x8c, 0x45, 0x4c, 0xcc, 0xee, 0x8e, 0x8e, 0xab, 0x98, 0x14, 0xdc, 0x21, 0x06, 0x3a, 0xa6, 0x14,
+	0xeb, 0x41, 0x98, 0x20, 0x56, 0x98, 0x81, 0x1e, 0xd4, 0xe2, 0xe2, 0x53, 0x30, 0x25, 0x31, 0x8e,
+	0x29, 0xc5, 0x31, 0x70, 0x25, 0x31, 0x61, 0x06, 0x31, 0x30, 0x25, 0x49, 0x6c, 0x60, 0x07, 0x18,
+	0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x53, 0x19, 0x41, 0xad, 0xbf, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/managed_placement_view_service.pb.go b/googleapis/ads/googleads/v0/services/managed_placement_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7dcb0aeaafa86ce5869deaa267c635497b2daaa5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/managed_placement_view_service.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/managed_placement_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [ManagedPlacementViewService.GetManagedPlacementView][google.ads.googleads.v0.services.ManagedPlacementViewService.GetManagedPlacementView].
+type GetManagedPlacementViewRequest struct {
+	// The resource name of the Managed Placement View to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetManagedPlacementViewRequest) Reset()         { *m = GetManagedPlacementViewRequest{} }
+func (m *GetManagedPlacementViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetManagedPlacementViewRequest) ProtoMessage()    {}
+func (*GetManagedPlacementViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_managed_placement_view_service_bb9f749dcc6fc543, []int{0}
+}
+func (m *GetManagedPlacementViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetManagedPlacementViewRequest.Unmarshal(m, b)
+}
+func (m *GetManagedPlacementViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetManagedPlacementViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetManagedPlacementViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetManagedPlacementViewRequest.Merge(dst, src)
+}
+func (m *GetManagedPlacementViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetManagedPlacementViewRequest.Size(m)
+}
+func (m *GetManagedPlacementViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetManagedPlacementViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetManagedPlacementViewRequest proto.InternalMessageInfo
+
+func (m *GetManagedPlacementViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetManagedPlacementViewRequest)(nil), "google.ads.googleads.v0.services.GetManagedPlacementViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// ManagedPlacementViewServiceClient is the client API for ManagedPlacementViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ManagedPlacementViewServiceClient interface {
+	// Returns the requested Managed Placement view in full detail.
+	GetManagedPlacementView(ctx context.Context, in *GetManagedPlacementViewRequest, opts ...grpc.CallOption) (*resources.ManagedPlacementView, error)
+}
+
+type managedPlacementViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewManagedPlacementViewServiceClient(cc *grpc.ClientConn) ManagedPlacementViewServiceClient {
+	return &managedPlacementViewServiceClient{cc}
+}
+
+func (c *managedPlacementViewServiceClient) GetManagedPlacementView(ctx context.Context, in *GetManagedPlacementViewRequest, opts ...grpc.CallOption) (*resources.ManagedPlacementView, error) {
+	out := new(resources.ManagedPlacementView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.ManagedPlacementViewService/GetManagedPlacementView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ManagedPlacementViewServiceServer is the server API for ManagedPlacementViewService service.
+type ManagedPlacementViewServiceServer interface {
+	// Returns the requested Managed Placement view in full detail.
+	GetManagedPlacementView(context.Context, *GetManagedPlacementViewRequest) (*resources.ManagedPlacementView, error)
+}
+
+func RegisterManagedPlacementViewServiceServer(s *grpc.Server, srv ManagedPlacementViewServiceServer) {
+	s.RegisterService(&_ManagedPlacementViewService_serviceDesc, srv)
+}
+
+func _ManagedPlacementViewService_GetManagedPlacementView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetManagedPlacementViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ManagedPlacementViewServiceServer).GetManagedPlacementView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.ManagedPlacementViewService/GetManagedPlacementView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ManagedPlacementViewServiceServer).GetManagedPlacementView(ctx, req.(*GetManagedPlacementViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ManagedPlacementViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.ManagedPlacementViewService",
+	HandlerType: (*ManagedPlacementViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetManagedPlacementView",
+			Handler:    _ManagedPlacementViewService_GetManagedPlacementView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/managed_placement_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/managed_placement_view_service.proto", fileDescriptor_managed_placement_view_service_bb9f749dcc6fc543)
+}
+
+var fileDescriptor_managed_placement_view_service_bb9f749dcc6fc543 = []byte{
+	// 356 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x4b, 0xfb, 0x40,
+	0x10, 0x25, 0xfd, 0xc1, 0x0f, 0x0c, 0x7a, 0xc9, 0x45, 0xa9, 0x22, 0xa1, 0x7a, 0x90, 0x1e, 0x76,
+	0x83, 0x1e, 0x8a, 0x88, 0x7f, 0x52, 0x28, 0xf5, 0xa2, 0x94, 0x0a, 0x3d, 0x48, 0x20, 0xac, 0xc9,
+	0xb0, 0x04, 0x9a, 0xdd, 0x98, 0xd9, 0xa6, 0x07, 0xf1, 0xe2, 0x57, 0xf0, 0x1b, 0x78, 0xf4, 0xa3,
+	0x78, 0x15, 0xef, 0x1e, 0xfc, 0x0a, 0xde, 0x25, 0xdd, 0x6e, 0xa0, 0xd0, 0xb4, 0xb7, 0xc7, 0xce,
+	0xbc, 0xf7, 0x66, 0xde, 0xac, 0xdd, 0xe3, 0x52, 0xf2, 0x31, 0x50, 0x16, 0x23, 0xd5, 0xb0, 0x44,
+	0x85, 0x47, 0x11, 0xf2, 0x22, 0x89, 0x00, 0x69, 0xca, 0x04, 0xe3, 0x10, 0x87, 0xd9, 0x98, 0x45,
+	0x90, 0x82, 0x50, 0x61, 0x91, 0xc0, 0x34, 0x9c, 0xd7, 0x49, 0x96, 0x4b, 0x25, 0x1d, 0x57, 0x73,
+	0x09, 0x8b, 0x91, 0x54, 0x32, 0xa4, 0xf0, 0x88, 0x91, 0x69, 0x5e, 0xd4, 0x19, 0xe5, 0x80, 0x72,
+	0x92, 0xd7, 0x3b, 0x69, 0x87, 0xe6, 0x9e, 0xe1, 0x67, 0x09, 0x65, 0x42, 0x48, 0xc5, 0x54, 0x22,
+	0x05, 0xea, 0x6a, 0xab, 0x67, 0xef, 0xf7, 0x41, 0xdd, 0x68, 0x81, 0x81, 0xe1, 0x8f, 0x12, 0x98,
+	0x0e, 0xe1, 0x71, 0x02, 0xa8, 0x9c, 0x03, 0x7b, 0xcb, 0x38, 0x85, 0x82, 0xa5, 0xb0, 0x63, 0xb9,
+	0xd6, 0xd1, 0xc6, 0x70, 0xd3, 0x3c, 0xde, 0xb2, 0x14, 0x8e, 0x7f, 0x2d, 0x7b, 0x77, 0x99, 0xc8,
+	0x9d, 0xde, 0xc2, 0xf9, 0xb2, 0xec, 0xed, 0x1a, 0x1f, 0xe7, 0x8a, 0xac, 0xcb, 0x80, 0xac, 0x1e,
+	0xb1, 0xd9, 0xa9, 0x55, 0xa8, 0x32, 0x22, 0xcb, 0xf8, 0xad, 0xcb, 0x97, 0xcf, 0x9f, 0xd7, 0xc6,
+	0xa9, 0xd3, 0x29, 0xf3, 0x7c, 0x5a, 0x58, 0xf3, 0x3c, 0x9a, 0xa0, 0x92, 0x29, 0xe4, 0x48, 0xdb,
+	0x26, 0xe0, 0x05, 0x32, 0xd2, 0xf6, 0x73, 0xf7, 0xdb, 0xb2, 0x0f, 0x23, 0x99, 0xae, 0xdd, 0xa0,
+	0xeb, 0xae, 0x48, 0x67, 0x50, 0x5e, 0x62, 0x60, 0xdd, 0x5f, 0xcf, 0x55, 0xb8, 0x1c, 0x33, 0xc1,
+	0x89, 0xcc, 0x39, 0xe5, 0x20, 0x66, 0x77, 0x32, 0x97, 0xcf, 0x12, 0xac, 0xff, 0x71, 0x67, 0x06,
+	0xbc, 0x35, 0xfe, 0xf5, 0x7d, 0xff, 0xbd, 0xe1, 0xf6, 0xb5, 0xa0, 0x1f, 0x23, 0xd1, 0xb0, 0x44,
+	0x23, 0x8f, 0xcc, 0x8d, 0xf1, 0xc3, 0xb4, 0x04, 0x7e, 0x8c, 0x41, 0xd5, 0x12, 0x8c, 0xbc, 0xc0,
+	0xb4, 0x3c, 0xfc, 0x9f, 0x0d, 0x70, 0xf2, 0x17, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x9b, 0xa8, 0x92,
+	0xf1, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/media_file_service.pb.go b/googleapis/ads/googleads/v0/services/media_file_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8330da6596fa2b3d5c43fc687c9f3354fedccc2e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/media_file_service.pb.go
@@ -0,0 +1,468 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/media_file_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [MediaFileService.GetMediaFile][google.ads.googleads.v0.services.MediaFileService.GetMediaFile]
+type GetMediaFileRequest struct {
+	// The resource name of the media file to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetMediaFileRequest) Reset()         { *m = GetMediaFileRequest{} }
+func (m *GetMediaFileRequest) String() string { return proto.CompactTextString(m) }
+func (*GetMediaFileRequest) ProtoMessage()    {}
+func (*GetMediaFileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_service_636511ac02cf9dc1, []int{0}
+}
+func (m *GetMediaFileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetMediaFileRequest.Unmarshal(m, b)
+}
+func (m *GetMediaFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetMediaFileRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetMediaFileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetMediaFileRequest.Merge(dst, src)
+}
+func (m *GetMediaFileRequest) XXX_Size() int {
+	return xxx_messageInfo_GetMediaFileRequest.Size(m)
+}
+func (m *GetMediaFileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetMediaFileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetMediaFileRequest proto.InternalMessageInfo
+
+func (m *GetMediaFileRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [MediaFileService.MutateMediaFiles][google.ads.googleads.v0.services.MediaFileService.MutateMediaFiles]
+type MutateMediaFilesRequest struct {
+	// The ID of the customer whose media files are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual media file.
+	Operations           []*MediaFileOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MutateMediaFilesRequest) Reset()         { *m = MutateMediaFilesRequest{} }
+func (m *MutateMediaFilesRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateMediaFilesRequest) ProtoMessage()    {}
+func (*MutateMediaFilesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_service_636511ac02cf9dc1, []int{1}
+}
+func (m *MutateMediaFilesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMediaFilesRequest.Unmarshal(m, b)
+}
+func (m *MutateMediaFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMediaFilesRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateMediaFilesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMediaFilesRequest.Merge(dst, src)
+}
+func (m *MutateMediaFilesRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateMediaFilesRequest.Size(m)
+}
+func (m *MutateMediaFilesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMediaFilesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMediaFilesRequest proto.InternalMessageInfo
+
+func (m *MutateMediaFilesRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateMediaFilesRequest) GetOperations() []*MediaFileOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation to create media file.
+type MediaFileOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*MediaFileOperation_Create
+	Operation            isMediaFileOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MediaFileOperation) Reset()         { *m = MediaFileOperation{} }
+func (m *MediaFileOperation) String() string { return proto.CompactTextString(m) }
+func (*MediaFileOperation) ProtoMessage()    {}
+func (*MediaFileOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_service_636511ac02cf9dc1, []int{2}
+}
+func (m *MediaFileOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MediaFileOperation.Unmarshal(m, b)
+}
+func (m *MediaFileOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MediaFileOperation.Marshal(b, m, deterministic)
+}
+func (dst *MediaFileOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MediaFileOperation.Merge(dst, src)
+}
+func (m *MediaFileOperation) XXX_Size() int {
+	return xxx_messageInfo_MediaFileOperation.Size(m)
+}
+func (m *MediaFileOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_MediaFileOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MediaFileOperation proto.InternalMessageInfo
+
+type isMediaFileOperation_Operation interface {
+	isMediaFileOperation_Operation()
+}
+
+type MediaFileOperation_Create struct {
+	Create *resources.MediaFile `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+func (*MediaFileOperation_Create) isMediaFileOperation_Operation() {}
+
+func (m *MediaFileOperation) GetOperation() isMediaFileOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *MediaFileOperation) GetCreate() *resources.MediaFile {
+	if x, ok := m.GetOperation().(*MediaFileOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*MediaFileOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _MediaFileOperation_OneofMarshaler, _MediaFileOperation_OneofUnmarshaler, _MediaFileOperation_OneofSizer, []interface{}{
+		(*MediaFileOperation_Create)(nil),
+	}
+}
+
+func _MediaFileOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*MediaFileOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *MediaFileOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("MediaFileOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _MediaFileOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*MediaFileOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.MediaFile)
+		err := b.DecodeMessage(msg)
+		m.Operation = &MediaFileOperation_Create{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _MediaFileOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*MediaFileOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *MediaFileOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a media file mutate.
+type MutateMediaFilesResponse struct {
+	// All results for the mutate.
+	Results              []*MutateMediaFileResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateMediaFilesResponse) Reset()         { *m = MutateMediaFilesResponse{} }
+func (m *MutateMediaFilesResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateMediaFilesResponse) ProtoMessage()    {}
+func (*MutateMediaFilesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_service_636511ac02cf9dc1, []int{3}
+}
+func (m *MutateMediaFilesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMediaFilesResponse.Unmarshal(m, b)
+}
+func (m *MutateMediaFilesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMediaFilesResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateMediaFilesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMediaFilesResponse.Merge(dst, src)
+}
+func (m *MutateMediaFilesResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateMediaFilesResponse.Size(m)
+}
+func (m *MutateMediaFilesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMediaFilesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMediaFilesResponse proto.InternalMessageInfo
+
+func (m *MutateMediaFilesResponse) GetResults() []*MutateMediaFileResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the media file mutate.
+type MutateMediaFileResult struct {
+	// The resource name returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateMediaFileResult) Reset()         { *m = MutateMediaFileResult{} }
+func (m *MutateMediaFileResult) String() string { return proto.CompactTextString(m) }
+func (*MutateMediaFileResult) ProtoMessage()    {}
+func (*MutateMediaFileResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_media_file_service_636511ac02cf9dc1, []int{4}
+}
+func (m *MutateMediaFileResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateMediaFileResult.Unmarshal(m, b)
+}
+func (m *MutateMediaFileResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateMediaFileResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateMediaFileResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateMediaFileResult.Merge(dst, src)
+}
+func (m *MutateMediaFileResult) XXX_Size() int {
+	return xxx_messageInfo_MutateMediaFileResult.Size(m)
+}
+func (m *MutateMediaFileResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateMediaFileResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateMediaFileResult proto.InternalMessageInfo
+
+func (m *MutateMediaFileResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetMediaFileRequest)(nil), "google.ads.googleads.v0.services.GetMediaFileRequest")
+	proto.RegisterType((*MutateMediaFilesRequest)(nil), "google.ads.googleads.v0.services.MutateMediaFilesRequest")
+	proto.RegisterType((*MediaFileOperation)(nil), "google.ads.googleads.v0.services.MediaFileOperation")
+	proto.RegisterType((*MutateMediaFilesResponse)(nil), "google.ads.googleads.v0.services.MutateMediaFilesResponse")
+	proto.RegisterType((*MutateMediaFileResult)(nil), "google.ads.googleads.v0.services.MutateMediaFileResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// MediaFileServiceClient is the client API for MediaFileService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type MediaFileServiceClient interface {
+	// Returns the requested media file in full detail.
+	GetMediaFile(ctx context.Context, in *GetMediaFileRequest, opts ...grpc.CallOption) (*resources.MediaFile, error)
+	// Creates media files. Operation statuses are returned.
+	MutateMediaFiles(ctx context.Context, in *MutateMediaFilesRequest, opts ...grpc.CallOption) (*MutateMediaFilesResponse, error)
+}
+
+type mediaFileServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewMediaFileServiceClient(cc *grpc.ClientConn) MediaFileServiceClient {
+	return &mediaFileServiceClient{cc}
+}
+
+func (c *mediaFileServiceClient) GetMediaFile(ctx context.Context, in *GetMediaFileRequest, opts ...grpc.CallOption) (*resources.MediaFile, error) {
+	out := new(resources.MediaFile)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.MediaFileService/GetMediaFile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *mediaFileServiceClient) MutateMediaFiles(ctx context.Context, in *MutateMediaFilesRequest, opts ...grpc.CallOption) (*MutateMediaFilesResponse, error) {
+	out := new(MutateMediaFilesResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.MediaFileService/MutateMediaFiles", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// MediaFileServiceServer is the server API for MediaFileService service.
+type MediaFileServiceServer interface {
+	// Returns the requested media file in full detail.
+	GetMediaFile(context.Context, *GetMediaFileRequest) (*resources.MediaFile, error)
+	// Creates media files. Operation statuses are returned.
+	MutateMediaFiles(context.Context, *MutateMediaFilesRequest) (*MutateMediaFilesResponse, error)
+}
+
+func RegisterMediaFileServiceServer(s *grpc.Server, srv MediaFileServiceServer) {
+	s.RegisterService(&_MediaFileService_serviceDesc, srv)
+}
+
+func _MediaFileService_GetMediaFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetMediaFileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MediaFileServiceServer).GetMediaFile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.MediaFileService/GetMediaFile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MediaFileServiceServer).GetMediaFile(ctx, req.(*GetMediaFileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MediaFileService_MutateMediaFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateMediaFilesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MediaFileServiceServer).MutateMediaFiles(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.MediaFileService/MutateMediaFiles",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MediaFileServiceServer).MutateMediaFiles(ctx, req.(*MutateMediaFilesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _MediaFileService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.MediaFileService",
+	HandlerType: (*MediaFileServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetMediaFile",
+			Handler:    _MediaFileService_GetMediaFile_Handler,
+		},
+		{
+			MethodName: "MutateMediaFiles",
+			Handler:    _MediaFileService_MutateMediaFiles_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/media_file_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/media_file_service.proto", fileDescriptor_media_file_service_636511ac02cf9dc1)
+}
+
+var fileDescriptor_media_file_service_636511ac02cf9dc1 = []byte{
+	// 516 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6e, 0xd3, 0x40,
+	0x10, 0xc5, 0x89, 0x54, 0xd4, 0x49, 0x91, 0xaa, 0x45, 0x15, 0x51, 0x84, 0x44, 0x64, 0x38, 0x54,
+	0x51, 0xb5, 0x8e, 0x42, 0x10, 0xaa, 0xa1, 0x87, 0xe4, 0xd0, 0x94, 0x43, 0xa1, 0x18, 0xd4, 0x03,
+	0x8a, 0x14, 0x2d, 0xf1, 0x60, 0x59, 0xb2, 0xbd, 0x66, 0x77, 0x9d, 0x4b, 0xd5, 0x0b, 0x07, 0xce,
+	0x48, 0xfc, 0x01, 0x37, 0xf8, 0x0f, 0x2e, 0x5c, 0x11, 0x7f, 0xc0, 0x87, 0x20, 0x7b, 0xbd, 0x6e,
+	0xd2, 0x36, 0x4a, 0xc3, 0x6d, 0x34, 0x9e, 0xf7, 0xde, 0xbc, 0x99, 0xf1, 0xc2, 0x7e, 0xc0, 0x79,
+	0x10, 0xa1, 0xc3, 0x7c, 0xe9, 0xe8, 0x30, 0x8f, 0x66, 0x5d, 0x47, 0xa2, 0x98, 0x85, 0x53, 0x94,
+	0x4e, 0x8c, 0x7e, 0xc8, 0x26, 0x1f, 0xc2, 0x08, 0x27, 0x65, 0x8e, 0xa6, 0x82, 0x2b, 0x4e, 0xda,
+	0xba, 0x9e, 0x32, 0x5f, 0xd2, 0x0a, 0x4a, 0x67, 0x5d, 0x6a, 0xa0, 0xad, 0xde, 0x32, 0x72, 0x81,
+	0x92, 0x67, 0x62, 0x91, 0x5d, 0xb3, 0xb6, 0xee, 0x1b, 0x4c, 0x1a, 0x3a, 0x2c, 0x49, 0xb8, 0x62,
+	0x2a, 0xe4, 0x89, 0xd4, 0x5f, 0x6d, 0x17, 0xee, 0x8e, 0x50, 0x1d, 0xe7, 0xa0, 0xc3, 0x30, 0x42,
+	0x0f, 0x3f, 0x66, 0x28, 0x15, 0x79, 0x08, 0x77, 0x0c, 0xe5, 0x24, 0x61, 0x31, 0x36, 0xad, 0xb6,
+	0xb5, 0xbb, 0xe9, 0x6d, 0x99, 0xe4, 0x4b, 0x16, 0xa3, 0xfd, 0xc5, 0x82, 0x7b, 0xc7, 0x99, 0x62,
+	0x0a, 0x2b, 0xbc, 0x34, 0x04, 0x0f, 0xa0, 0x31, 0xcd, 0xa4, 0xe2, 0x31, 0x8a, 0x49, 0xe8, 0x97,
+	0x70, 0x30, 0xa9, 0x17, 0x3e, 0x79, 0x0b, 0xc0, 0x53, 0x14, 0xba, 0x99, 0x66, 0xad, 0x5d, 0xdf,
+	0x6d, 0xf4, 0xfa, 0x74, 0xd5, 0x04, 0x68, 0xa5, 0xf4, 0xca, 0x80, 0xbd, 0x39, 0x1e, 0x3b, 0x04,
+	0x72, 0xb5, 0x82, 0x1c, 0xc2, 0xc6, 0x54, 0x20, 0x53, 0xda, 0x46, 0xa3, 0xb7, 0xb7, 0x54, 0xa7,
+	0x9a, 0xe3, 0x85, 0xd0, 0xd1, 0x2d, 0xaf, 0x44, 0x0f, 0x1b, 0xb0, 0x59, 0x69, 0xd9, 0x31, 0x34,
+	0xaf, 0x9a, 0x97, 0x29, 0x4f, 0x24, 0x92, 0xd7, 0x70, 0x5b, 0xa0, 0xcc, 0x22, 0x65, 0x9c, 0x3d,
+	0xbd, 0x81, 0xb3, 0x45, 0x32, 0xaf, 0xc0, 0x7b, 0x86, 0xc7, 0x7e, 0x0e, 0x3b, 0xd7, 0x56, 0xdc,
+	0x68, 0x55, 0xbd, 0xcf, 0x75, 0xd8, 0xae, 0x80, 0x6f, 0xb4, 0x24, 0xf9, 0x6e, 0xc1, 0xd6, 0xfc,
+	0xf2, 0xc9, 0x93, 0xd5, 0x5d, 0x5e, 0x73, 0x2c, 0xad, 0xb5, 0xc6, 0x69, 0xf7, 0x3f, 0xfd, 0xfe,
+	0xfb, 0xb5, 0x46, 0xc9, 0x5e, 0x7e, 0xb7, 0x67, 0x0b, 0xad, 0x1f, 0x98, 0xfb, 0x90, 0x4e, 0x47,
+	0x1f, 0x72, 0x31, 0x56, 0xa7, 0x73, 0x4e, 0x7e, 0x5a, 0xb0, 0x7d, 0x79, 0xdc, 0x64, 0x7f, 0xed,
+	0xa9, 0x9a, 0xfb, 0x6c, 0xb9, 0xff, 0x03, 0xd5, 0xdb, 0xb5, 0xdd, 0xc2, 0x41, 0xdf, 0x76, 0x72,
+	0x07, 0x17, 0x2d, 0x9f, 0xcd, 0x1d, 0xfc, 0x41, 0xe7, 0x7c, 0xce, 0x80, 0x1b, 0x17, 0x54, 0xae,
+	0xd5, 0x19, 0xfe, 0xb1, 0xe0, 0xd1, 0x94, 0xc7, 0x2b, 0xd5, 0x87, 0x3b, 0x97, 0xd7, 0x75, 0x92,
+	0xff, 0xaf, 0x27, 0xd6, 0xbb, 0xa3, 0x12, 0x1a, 0xf0, 0x88, 0x25, 0x01, 0xe5, 0x22, 0x70, 0x02,
+	0x4c, 0x8a, 0xbf, 0xd9, 0xbc, 0x09, 0x69, 0x28, 0x97, 0xbf, 0x3f, 0xcf, 0x4c, 0xf0, 0xad, 0x56,
+	0x1f, 0x0d, 0x06, 0x3f, 0x6a, 0xed, 0x91, 0x26, 0x1c, 0xf8, 0x92, 0xea, 0x30, 0x8f, 0x4e, 0xbb,
+	0xb4, 0x14, 0x96, 0xbf, 0x4c, 0xc9, 0x78, 0xe0, 0xcb, 0x71, 0x55, 0x32, 0x3e, 0xed, 0x8e, 0x4d,
+	0xc9, 0xfb, 0x8d, 0xa2, 0x81, 0xc7, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbe, 0x1e, 0x8f, 0x2b,
+	0xff, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/parental_status_view_service.pb.go b/googleapis/ads/googleads/v0/services/parental_status_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b844647d6b5d2c9cb1d6092609b94a3752aff2d5
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/parental_status_view_service.pb.go
@@ -0,0 +1,175 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/parental_status_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [ParentalStatusViewService.GetParentalStatusView][google.ads.googleads.v0.services.ParentalStatusViewService.GetParentalStatusView].
+type GetParentalStatusViewRequest struct {
+	// The resource name of the parental status view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetParentalStatusViewRequest) Reset()         { *m = GetParentalStatusViewRequest{} }
+func (m *GetParentalStatusViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetParentalStatusViewRequest) ProtoMessage()    {}
+func (*GetParentalStatusViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_parental_status_view_service_fcecbf1aee57b976, []int{0}
+}
+func (m *GetParentalStatusViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetParentalStatusViewRequest.Unmarshal(m, b)
+}
+func (m *GetParentalStatusViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetParentalStatusViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetParentalStatusViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetParentalStatusViewRequest.Merge(dst, src)
+}
+func (m *GetParentalStatusViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetParentalStatusViewRequest.Size(m)
+}
+func (m *GetParentalStatusViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetParentalStatusViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetParentalStatusViewRequest proto.InternalMessageInfo
+
+func (m *GetParentalStatusViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetParentalStatusViewRequest)(nil), "google.ads.googleads.v0.services.GetParentalStatusViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// ParentalStatusViewServiceClient is the client API for ParentalStatusViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ParentalStatusViewServiceClient interface {
+	// Returns the requested parental status view in full detail.
+	GetParentalStatusView(ctx context.Context, in *GetParentalStatusViewRequest, opts ...grpc.CallOption) (*resources.ParentalStatusView, error)
+}
+
+type parentalStatusViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewParentalStatusViewServiceClient(cc *grpc.ClientConn) ParentalStatusViewServiceClient {
+	return &parentalStatusViewServiceClient{cc}
+}
+
+func (c *parentalStatusViewServiceClient) GetParentalStatusView(ctx context.Context, in *GetParentalStatusViewRequest, opts ...grpc.CallOption) (*resources.ParentalStatusView, error) {
+	out := new(resources.ParentalStatusView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.ParentalStatusViewService/GetParentalStatusView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ParentalStatusViewServiceServer is the server API for ParentalStatusViewService service.
+type ParentalStatusViewServiceServer interface {
+	// Returns the requested parental status view in full detail.
+	GetParentalStatusView(context.Context, *GetParentalStatusViewRequest) (*resources.ParentalStatusView, error)
+}
+
+func RegisterParentalStatusViewServiceServer(s *grpc.Server, srv ParentalStatusViewServiceServer) {
+	s.RegisterService(&_ParentalStatusViewService_serviceDesc, srv)
+}
+
+func _ParentalStatusViewService_GetParentalStatusView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetParentalStatusViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ParentalStatusViewServiceServer).GetParentalStatusView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.ParentalStatusViewService/GetParentalStatusView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ParentalStatusViewServiceServer).GetParentalStatusView(ctx, req.(*GetParentalStatusViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ParentalStatusViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.ParentalStatusViewService",
+	HandlerType: (*ParentalStatusViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetParentalStatusView",
+			Handler:    _ParentalStatusViewService_GetParentalStatusView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/parental_status_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/parental_status_view_service.proto", fileDescriptor_parental_status_view_service_fcecbf1aee57b976)
+}
+
+var fileDescriptor_parental_status_view_service_fcecbf1aee57b976 = []byte{
+	// 354 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcd, 0x4a, 0xeb, 0x40,
+	0x14, 0x26, 0xbd, 0x70, 0xe1, 0x86, 0xeb, 0x26, 0x20, 0x68, 0x29, 0x52, 0xaa, 0x0b, 0xe9, 0x62,
+	0x26, 0x28, 0xc5, 0x85, 0x56, 0x48, 0xbb, 0xa8, 0x2b, 0x29, 0x2d, 0x74, 0x21, 0x81, 0x30, 0x36,
+	0x87, 0x10, 0x68, 0x66, 0xe2, 0x9c, 0x49, 0xba, 0x10, 0x37, 0xbe, 0x82, 0x6f, 0xe0, 0xd2, 0x47,
+	0x11, 0x5c, 0xb9, 0x77, 0xe5, 0xce, 0x97, 0x90, 0x74, 0x32, 0x11, 0xa9, 0xb1, 0xbb, 0x8f, 0xcc,
+	0xf9, 0x7e, 0xce, 0x77, 0x62, 0x0f, 0x23, 0x21, 0xa2, 0x05, 0x50, 0x16, 0x22, 0xd5, 0xb0, 0x40,
+	0xb9, 0x4b, 0x11, 0x64, 0x1e, 0xcf, 0x01, 0x69, 0xca, 0x24, 0x70, 0xc5, 0x16, 0x01, 0x2a, 0xa6,
+	0x32, 0x0c, 0xf2, 0x18, 0x96, 0x41, 0xf9, 0x4a, 0x52, 0x29, 0x94, 0x70, 0xda, 0x9a, 0x49, 0x58,
+	0x88, 0xa4, 0x12, 0x21, 0xb9, 0x4b, 0x8c, 0x48, 0xf3, 0xac, 0xce, 0x46, 0x02, 0x8a, 0x4c, 0xd6,
+	0xf9, 0x68, 0xfd, 0x66, 0xcb, 0xb0, 0xd3, 0x98, 0x32, 0xce, 0x85, 0x62, 0x2a, 0x16, 0x1c, 0xf5,
+	0x6b, 0x67, 0x68, 0xb7, 0x46, 0xa0, 0xc6, 0x25, 0x7d, 0xba, 0x62, 0xcf, 0x62, 0x58, 0x4e, 0xe0,
+	0x26, 0x03, 0x54, 0xce, 0xbe, 0xbd, 0x65, 0x5c, 0x02, 0xce, 0x12, 0xd8, 0xb1, 0xda, 0xd6, 0xe1,
+	0xbf, 0xc9, 0x7f, 0xf3, 0xf1, 0x92, 0x25, 0x70, 0xf4, 0x61, 0xd9, 0xbb, 0xeb, 0x12, 0x53, 0x9d,
+	0xdf, 0x79, 0xb1, 0xec, 0xed, 0x1f, 0x3d, 0x9c, 0x73, 0xb2, 0x69, 0x77, 0xf2, 0x5b, 0xb8, 0x66,
+	0xaf, 0x96, 0x5f, 0x35, 0x43, 0xd6, 0xd9, 0x9d, 0xfe, 0xfd, 0xeb, 0xfb, 0x43, 0xe3, 0xc4, 0xe9,
+	0x15, 0x1d, 0xde, 0x7e, 0x5b, 0xaf, 0x3f, 0xcf, 0x50, 0x89, 0x04, 0x24, 0xd2, 0x6e, 0x55, 0xea,
+	0x17, 0x15, 0x69, 0xf7, 0x6e, 0xf0, 0x66, 0xd9, 0x07, 0x73, 0x91, 0x6c, 0xcc, 0x3e, 0xd8, 0xab,
+	0xed, 0x64, 0x5c, 0x74, 0x3f, 0xb6, 0xae, 0x2e, 0x4a, 0x8d, 0x48, 0x2c, 0x18, 0x8f, 0x88, 0x90,
+	0x11, 0x8d, 0x80, 0xaf, 0x2e, 0x63, 0x2e, 0x9d, 0xc6, 0x58, 0xff, 0x7f, 0x9d, 0x1a, 0xf0, 0xd8,
+	0xf8, 0x33, 0xf2, 0xbc, 0xa7, 0x46, 0x7b, 0xa4, 0x05, 0xbd, 0x10, 0x89, 0x86, 0x05, 0x9a, 0xb9,
+	0xa4, 0x34, 0xc6, 0x67, 0x33, 0xe2, 0x7b, 0x21, 0xfa, 0xd5, 0x88, 0x3f, 0x73, 0x7d, 0x33, 0x72,
+	0xfd, 0x77, 0x15, 0xe0, 0xf8, 0x33, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x73, 0x70, 0xbc, 0xdf, 0x02,
+	0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/payments_account_service.pb.go b/googleapis/ads/googleads/v0/services/payments_account_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..c51f45d4c30e8a0a47ae8fdb6f90f3d2b20cd3c0
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/payments_account_service.pb.go
@@ -0,0 +1,221 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/payments_account_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for fetching all accessible Payments accounts.
+type ListPaymentsAccountsRequest struct {
+	// The ID of the customer to apply the PaymentsAccount list operation to.
+	CustomerId           string   `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListPaymentsAccountsRequest) Reset()         { *m = ListPaymentsAccountsRequest{} }
+func (m *ListPaymentsAccountsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListPaymentsAccountsRequest) ProtoMessage()    {}
+func (*ListPaymentsAccountsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_payments_account_service_d2fbd04f0a12b5c5, []int{0}
+}
+func (m *ListPaymentsAccountsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPaymentsAccountsRequest.Unmarshal(m, b)
+}
+func (m *ListPaymentsAccountsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPaymentsAccountsRequest.Marshal(b, m, deterministic)
+}
+func (dst *ListPaymentsAccountsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPaymentsAccountsRequest.Merge(dst, src)
+}
+func (m *ListPaymentsAccountsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListPaymentsAccountsRequest.Size(m)
+}
+func (m *ListPaymentsAccountsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPaymentsAccountsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPaymentsAccountsRequest proto.InternalMessageInfo
+
+func (m *ListPaymentsAccountsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+// Response message for [PaymentsAccountService.ListPaymentsAccounts][google.ads.googleads.v0.services.PaymentsAccountService.ListPaymentsAccounts].
+type ListPaymentsAccountsResponse struct {
+	// The list of accessible Payments accounts.
+	PaymentsAccounts     []*resources.PaymentsAccount `protobuf:"bytes,1,rep,name=payments_accounts,json=paymentsAccounts,proto3" json:"payments_accounts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *ListPaymentsAccountsResponse) Reset()         { *m = ListPaymentsAccountsResponse{} }
+func (m *ListPaymentsAccountsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListPaymentsAccountsResponse) ProtoMessage()    {}
+func (*ListPaymentsAccountsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_payments_account_service_d2fbd04f0a12b5c5, []int{1}
+}
+func (m *ListPaymentsAccountsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListPaymentsAccountsResponse.Unmarshal(m, b)
+}
+func (m *ListPaymentsAccountsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListPaymentsAccountsResponse.Marshal(b, m, deterministic)
+}
+func (dst *ListPaymentsAccountsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListPaymentsAccountsResponse.Merge(dst, src)
+}
+func (m *ListPaymentsAccountsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListPaymentsAccountsResponse.Size(m)
+}
+func (m *ListPaymentsAccountsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListPaymentsAccountsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListPaymentsAccountsResponse proto.InternalMessageInfo
+
+func (m *ListPaymentsAccountsResponse) GetPaymentsAccounts() []*resources.PaymentsAccount {
+	if m != nil {
+		return m.PaymentsAccounts
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ListPaymentsAccountsRequest)(nil), "google.ads.googleads.v0.services.ListPaymentsAccountsRequest")
+	proto.RegisterType((*ListPaymentsAccountsResponse)(nil), "google.ads.googleads.v0.services.ListPaymentsAccountsResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// PaymentsAccountServiceClient is the client API for PaymentsAccountService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type PaymentsAccountServiceClient interface {
+	// Returns all Payments accounts associated with all managers
+	// between the login customer ID and specified serving customer in the
+	// hierarchy, inclusive.
+	ListPaymentsAccounts(ctx context.Context, in *ListPaymentsAccountsRequest, opts ...grpc.CallOption) (*ListPaymentsAccountsResponse, error)
+}
+
+type paymentsAccountServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewPaymentsAccountServiceClient(cc *grpc.ClientConn) PaymentsAccountServiceClient {
+	return &paymentsAccountServiceClient{cc}
+}
+
+func (c *paymentsAccountServiceClient) ListPaymentsAccounts(ctx context.Context, in *ListPaymentsAccountsRequest, opts ...grpc.CallOption) (*ListPaymentsAccountsResponse, error) {
+	out := new(ListPaymentsAccountsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.PaymentsAccountService/ListPaymentsAccounts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// PaymentsAccountServiceServer is the server API for PaymentsAccountService service.
+type PaymentsAccountServiceServer interface {
+	// Returns all Payments accounts associated with all managers
+	// between the login customer ID and specified serving customer in the
+	// hierarchy, inclusive.
+	ListPaymentsAccounts(context.Context, *ListPaymentsAccountsRequest) (*ListPaymentsAccountsResponse, error)
+}
+
+func RegisterPaymentsAccountServiceServer(s *grpc.Server, srv PaymentsAccountServiceServer) {
+	s.RegisterService(&_PaymentsAccountService_serviceDesc, srv)
+}
+
+func _PaymentsAccountService_ListPaymentsAccounts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListPaymentsAccountsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PaymentsAccountServiceServer).ListPaymentsAccounts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.PaymentsAccountService/ListPaymentsAccounts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PaymentsAccountServiceServer).ListPaymentsAccounts(ctx, req.(*ListPaymentsAccountsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _PaymentsAccountService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.PaymentsAccountService",
+	HandlerType: (*PaymentsAccountServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ListPaymentsAccounts",
+			Handler:    _PaymentsAccountService_ListPaymentsAccounts_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/payments_account_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/payments_account_service.proto", fileDescriptor_payments_account_service_d2fbd04f0a12b5c5)
+}
+
+var fileDescriptor_payments_account_service_d2fbd04f0a12b5c5 = []byte{
+	// 379 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x52, 0xc1, 0x4a, 0xeb, 0x40,
+	0x14, 0x65, 0x5a, 0x78, 0xf0, 0xa6, 0x9b, 0xf7, 0xc2, 0xe3, 0x51, 0xda, 0x82, 0xa1, 0xb8, 0x28,
+	0x2e, 0x66, 0x42, 0x05, 0x11, 0xa4, 0x95, 0x74, 0x53, 0x05, 0x17, 0xa5, 0x42, 0x17, 0x12, 0x08,
+	0x63, 0x32, 0x84, 0x40, 0x3b, 0x13, 0x73, 0x27, 0x05, 0x11, 0x11, 0xfc, 0x05, 0xff, 0xc0, 0xa5,
+	0x9f, 0x22, 0xb8, 0x72, 0xe9, 0xd6, 0x85, 0x9f, 0x21, 0xe9, 0x64, 0x8a, 0x84, 0xd4, 0x82, 0xbb,
+	0xc3, 0xcc, 0x3d, 0xe7, 0xdc, 0x7b, 0xee, 0xc5, 0xc7, 0x91, 0x94, 0xd1, 0x9c, 0x53, 0x16, 0x02,
+	0xd5, 0x30, 0x47, 0x4b, 0x87, 0x02, 0x4f, 0x97, 0x71, 0xc0, 0x81, 0x26, 0xec, 0x7a, 0xc1, 0x85,
+	0x02, 0x9f, 0x05, 0x81, 0xcc, 0x84, 0xf2, 0x8b, 0x1f, 0x92, 0xa4, 0x52, 0x49, 0xcb, 0xd6, 0x2c,
+	0xc2, 0x42, 0x20, 0x6b, 0x01, 0xb2, 0x74, 0x88, 0x11, 0x68, 0x1d, 0x6e, 0xb2, 0x48, 0x39, 0xc8,
+	0x2c, 0xad, 0xf2, 0xd0, 0xda, 0xad, 0x8e, 0x61, 0x26, 0x31, 0x65, 0x42, 0x48, 0xc5, 0x54, 0x2c,
+	0x05, 0xe8, 0xdf, 0xee, 0x10, 0xb7, 0xcf, 0x62, 0x50, 0x93, 0x82, 0xeb, 0x6a, 0x2a, 0x4c, 0xf9,
+	0x55, 0xc6, 0x41, 0x59, 0x3b, 0xb8, 0x11, 0x64, 0xa0, 0xe4, 0x82, 0xa7, 0x7e, 0x1c, 0x36, 0x91,
+	0x8d, 0x7a, 0xbf, 0xa7, 0xd8, 0x3c, 0x9d, 0x86, 0xdd, 0x3b, 0xdc, 0xa9, 0xe6, 0x43, 0x22, 0x05,
+	0x70, 0xcb, 0xc7, 0x7f, 0xcb, 0x7d, 0x41, 0x13, 0xd9, 0xf5, 0x5e, 0xa3, 0xdf, 0x27, 0x9b, 0xa6,
+	0x5e, 0xcf, 0x44, 0x4a, 0xba, 0xd3, 0x3f, 0x49, 0xc9, 0xa8, 0xff, 0x81, 0xf0, 0xff, 0x52, 0xd5,
+	0xb9, 0x0e, 0xcd, 0x7a, 0x41, 0xf8, 0x5f, 0x55, 0x73, 0xd6, 0x80, 0x6c, 0xcb, 0x9b, 0x7c, 0x13,
+	0x4a, 0x6b, 0xf8, 0x53, 0xba, 0xce, 0xa4, 0x7b, 0x70, 0xff, 0xfa, 0xfe, 0x50, 0x73, 0x2c, 0x92,
+	0xef, 0xcf, 0x64, 0x09, 0xf4, 0xe6, 0x4b, 0xd2, 0x83, 0xbd, 0x5b, 0x5a, 0x1e, 0x75, 0xf4, 0x86,
+	0xf0, 0x6e, 0x20, 0x17, 0x5b, 0xdd, 0x47, 0xed, 0xea, 0x40, 0x26, 0xf9, 0xc6, 0x27, 0xe8, 0xe2,
+	0xa4, 0x10, 0x88, 0xe4, 0x9c, 0x89, 0x88, 0xc8, 0x34, 0xa2, 0x11, 0x17, 0xab, 0x7b, 0x30, 0xb7,
+	0x95, 0xc4, 0xb0, 0xf9, 0x9a, 0x8f, 0x0c, 0x78, 0xac, 0xd5, 0xc7, 0xae, 0xfb, 0x54, 0xb3, 0xc7,
+	0x5a, 0xd0, 0x0d, 0x81, 0x68, 0x98, 0xa3, 0x99, 0x43, 0x0a, 0x63, 0x78, 0x36, 0x25, 0x9e, 0x1b,
+	0x82, 0xb7, 0x2e, 0xf1, 0x66, 0x8e, 0x67, 0x4a, 0x2e, 0x7f, 0xad, 0x1a, 0xd8, 0xff, 0x0c, 0x00,
+	0x00, 0xff, 0xff, 0xd6, 0x61, 0x59, 0x7c, 0x4d, 0x03, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/product_group_view_service.pb.go b/googleapis/ads/googleads/v0/services/product_group_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6e0e0e2fd16adb413258865760c1e3c83cadd802
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/product_group_view_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/product_group_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [ProductGroupViewService.GetProductGroupView][google.ads.googleads.v0.services.ProductGroupViewService.GetProductGroupView].
+type GetProductGroupViewRequest struct {
+	// The resource name of the product group view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetProductGroupViewRequest) Reset()         { *m = GetProductGroupViewRequest{} }
+func (m *GetProductGroupViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetProductGroupViewRequest) ProtoMessage()    {}
+func (*GetProductGroupViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_product_group_view_service_f4b2d412721c0b18, []int{0}
+}
+func (m *GetProductGroupViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetProductGroupViewRequest.Unmarshal(m, b)
+}
+func (m *GetProductGroupViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetProductGroupViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetProductGroupViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetProductGroupViewRequest.Merge(dst, src)
+}
+func (m *GetProductGroupViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetProductGroupViewRequest.Size(m)
+}
+func (m *GetProductGroupViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetProductGroupViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetProductGroupViewRequest proto.InternalMessageInfo
+
+func (m *GetProductGroupViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetProductGroupViewRequest)(nil), "google.ads.googleads.v0.services.GetProductGroupViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// ProductGroupViewServiceClient is the client API for ProductGroupViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ProductGroupViewServiceClient interface {
+	// Returns the requested product group view in full detail.
+	GetProductGroupView(ctx context.Context, in *GetProductGroupViewRequest, opts ...grpc.CallOption) (*resources.ProductGroupView, error)
+}
+
+type productGroupViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewProductGroupViewServiceClient(cc *grpc.ClientConn) ProductGroupViewServiceClient {
+	return &productGroupViewServiceClient{cc}
+}
+
+func (c *productGroupViewServiceClient) GetProductGroupView(ctx context.Context, in *GetProductGroupViewRequest, opts ...grpc.CallOption) (*resources.ProductGroupView, error) {
+	out := new(resources.ProductGroupView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.ProductGroupViewService/GetProductGroupView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ProductGroupViewServiceServer is the server API for ProductGroupViewService service.
+type ProductGroupViewServiceServer interface {
+	// Returns the requested product group view in full detail.
+	GetProductGroupView(context.Context, *GetProductGroupViewRequest) (*resources.ProductGroupView, error)
+}
+
+func RegisterProductGroupViewServiceServer(s *grpc.Server, srv ProductGroupViewServiceServer) {
+	s.RegisterService(&_ProductGroupViewService_serviceDesc, srv)
+}
+
+func _ProductGroupViewService_GetProductGroupView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetProductGroupViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProductGroupViewServiceServer).GetProductGroupView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.ProductGroupViewService/GetProductGroupView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProductGroupViewServiceServer).GetProductGroupView(ctx, req.(*GetProductGroupViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ProductGroupViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.ProductGroupViewService",
+	HandlerType: (*ProductGroupViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetProductGroupView",
+			Handler:    _ProductGroupViewService_GetProductGroupView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/product_group_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/product_group_view_service.proto", fileDescriptor_product_group_view_service_f4b2d412721c0b18)
+}
+
+var fileDescriptor_product_group_view_service_f4b2d412721c0b18 = []byte{
+	// 348 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x4b, 0xc3, 0x40,
+	0x14, 0x27, 0x15, 0x04, 0x83, 0x2e, 0x71, 0x50, 0x42, 0x87, 0x52, 0x1d, 0xa4, 0xc3, 0x5d, 0xb0,
+	0xb8, 0x58, 0x1d, 0xd2, 0x25, 0x4e, 0x52, 0x2a, 0x74, 0x90, 0x40, 0x38, 0x93, 0xe3, 0x08, 0x34,
+	0x79, 0xf1, 0xde, 0x25, 0x1d, 0xc4, 0xc5, 0xaf, 0xe0, 0x37, 0x70, 0xf4, 0x7b, 0xb8, 0xb8, 0xba,
+	0xba, 0x08, 0x7e, 0x10, 0x49, 0xaf, 0x17, 0xb0, 0x34, 0x74, 0xfb, 0x91, 0x7b, 0xbf, 0x3f, 0xef,
+	0xf7, 0x62, 0xfb, 0x02, 0x40, 0xcc, 0x39, 0x65, 0x09, 0x52, 0x0d, 0x6b, 0x54, 0x79, 0x14, 0xb9,
+	0xac, 0xd2, 0x98, 0x23, 0x2d, 0x24, 0x24, 0x65, 0xac, 0x22, 0x21, 0xa1, 0x2c, 0xa2, 0x2a, 0xe5,
+	0x8b, 0x68, 0xf5, 0x46, 0x0a, 0x09, 0x0a, 0x9c, 0x9e, 0xe6, 0x11, 0x96, 0x20, 0x69, 0x24, 0x48,
+	0xe5, 0x11, 0x23, 0xe1, 0x5e, 0xb6, 0x99, 0x48, 0x8e, 0x50, 0xca, 0xcd, 0x2e, 0x5a, 0xdd, 0xed,
+	0x1a, 0x6e, 0x91, 0x52, 0x96, 0xe7, 0xa0, 0x98, 0x4a, 0x21, 0x47, 0xfd, 0xda, 0xf7, 0x6d, 0x37,
+	0xe0, 0x6a, 0xa2, 0xc9, 0x41, 0xcd, 0x9d, 0xa5, 0x7c, 0x31, 0xe5, 0x8f, 0x25, 0x47, 0xe5, 0x9c,
+	0xd8, 0x07, 0xc6, 0x21, 0xca, 0x59, 0xc6, 0x8f, 0xad, 0x9e, 0x75, 0xb6, 0x37, 0xdd, 0x37, 0x1f,
+	0x6f, 0x59, 0xc6, 0xcf, 0x7f, 0x2c, 0xfb, 0x68, 0x5d, 0xe0, 0x4e, 0x27, 0x77, 0x3e, 0x2c, 0xfb,
+	0x70, 0x83, 0xbe, 0x73, 0x45, 0xb6, 0xed, 0x4c, 0xda, 0x63, 0xb9, 0xc3, 0x56, 0x76, 0xd3, 0x07,
+	0x59, 0xe7, 0xf6, 0x47, 0x2f, 0x5f, 0xbf, 0xaf, 0x9d, 0x0b, 0x67, 0x58, 0xf7, 0xf6, 0xf4, 0x6f,
+	0xad, 0xeb, 0xb8, 0x44, 0x05, 0x19, 0x97, 0x48, 0x07, 0xa6, 0xc8, 0x86, 0x88, 0x74, 0xf0, 0x3c,
+	0xfe, 0xb6, 0xec, 0xd3, 0x18, 0xb2, 0xad, 0xa9, 0xc7, 0xdd, 0x96, 0x26, 0x26, 0x75, 0xdb, 0x13,
+	0xeb, 0xfe, 0x66, 0xa5, 0x20, 0x60, 0xce, 0x72, 0x41, 0x40, 0x0a, 0x2a, 0x78, 0xbe, 0xbc, 0x85,
+	0xb9, 0x6c, 0x91, 0x62, 0xfb, 0xdf, 0x34, 0x32, 0xe0, 0xad, 0xb3, 0x13, 0xf8, 0xfe, 0x7b, 0xa7,
+	0x17, 0x68, 0x41, 0x3f, 0x41, 0xa2, 0x61, 0x8d, 0x66, 0x1e, 0x59, 0x19, 0xe3, 0xa7, 0x19, 0x09,
+	0xfd, 0x04, 0xc3, 0x66, 0x24, 0x9c, 0x79, 0xa1, 0x19, 0x79, 0xd8, 0x5d, 0x06, 0x18, 0xfe, 0x05,
+	0x00, 0x00, 0xff, 0xff, 0xc2, 0xc3, 0x37, 0x48, 0xcd, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/recommendation_service.pb.go b/googleapis/ads/googleads/v0/services/recommendation_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..6d6b30102cf8baed70095e69325df4edaced8307
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/recommendation_service.pb.go
@@ -0,0 +1,1094 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/recommendation_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import enums "google.golang.org/genproto/googleapis/ads/googleads/v0/enums"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import status "google.golang.org/genproto/googleapis/rpc/status"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [RecommendationService.GetRecommendation][google.ads.googleads.v0.services.RecommendationService.GetRecommendation].
+type GetRecommendationRequest struct {
+	// The resource name of the recommendation to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetRecommendationRequest) Reset()         { *m = GetRecommendationRequest{} }
+func (m *GetRecommendationRequest) String() string { return proto.CompactTextString(m) }
+func (*GetRecommendationRequest) ProtoMessage()    {}
+func (*GetRecommendationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{0}
+}
+func (m *GetRecommendationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetRecommendationRequest.Unmarshal(m, b)
+}
+func (m *GetRecommendationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetRecommendationRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetRecommendationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetRecommendationRequest.Merge(dst, src)
+}
+func (m *GetRecommendationRequest) XXX_Size() int {
+	return xxx_messageInfo_GetRecommendationRequest.Size(m)
+}
+func (m *GetRecommendationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetRecommendationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetRecommendationRequest proto.InternalMessageInfo
+
+func (m *GetRecommendationRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [RecommendationService.ApplyRecommendation][google.ads.googleads.v0.services.RecommendationService.ApplyRecommendation].
+type ApplyRecommendationRequest struct {
+	// The ID of the customer with the recommendation.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, operations will be carried
+	// out as a transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,3,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// The list of operations to apply recommendations.
+	// If partial_failure=false all recommendations should be of the same type
+	// There is a limit of 100 operations per request.
+	Operations           []*ApplyRecommendationOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *ApplyRecommendationRequest) Reset()         { *m = ApplyRecommendationRequest{} }
+func (m *ApplyRecommendationRequest) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationRequest) ProtoMessage()    {}
+func (*ApplyRecommendationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{1}
+}
+func (m *ApplyRecommendationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationRequest.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationRequest.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationRequest.Merge(dst, src)
+}
+func (m *ApplyRecommendationRequest) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationRequest.Size(m)
+}
+func (m *ApplyRecommendationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationRequest proto.InternalMessageInfo
+
+func (m *ApplyRecommendationRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *ApplyRecommendationRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *ApplyRecommendationRequest) GetOperations() []*ApplyRecommendationOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// Information about the operation to apply a recommendation and any parameters
+// to
+// customize it.
+type ApplyRecommendationOperation struct {
+	// The resource name of the recommendation to apply.
+	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	// Parameters to use when applying the recommendation.
+	//
+	// Types that are valid to be assigned to ApplyParameters:
+	//	*ApplyRecommendationOperation_CampaignBudget
+	//	*ApplyRecommendationOperation_TextAd
+	//	*ApplyRecommendationOperation_Keyword
+	//	*ApplyRecommendationOperation_TargetCpaOptIn
+	ApplyParameters      isApplyRecommendationOperation_ApplyParameters `protobuf_oneof:"apply_parameters"`
+	XXX_NoUnkeyedLiteral struct{}                                       `json:"-"`
+	XXX_unrecognized     []byte                                         `json:"-"`
+	XXX_sizecache        int32                                          `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation) Reset()         { *m = ApplyRecommendationOperation{} }
+func (m *ApplyRecommendationOperation) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationOperation) ProtoMessage()    {}
+func (*ApplyRecommendationOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{2}
+}
+func (m *ApplyRecommendationOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation.Merge(dst, src)
+}
+func (m *ApplyRecommendationOperation) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation.Size(m)
+}
+func (m *ApplyRecommendationOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+type isApplyRecommendationOperation_ApplyParameters interface {
+	isApplyRecommendationOperation_ApplyParameters()
+}
+
+type ApplyRecommendationOperation_CampaignBudget struct {
+	CampaignBudget *ApplyRecommendationOperation_CampaignBudgetParameters `protobuf:"bytes,2,opt,name=campaign_budget,json=campaignBudget,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_TextAd struct {
+	TextAd *ApplyRecommendationOperation_TextAdParameters `protobuf:"bytes,3,opt,name=text_ad,json=textAd,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_Keyword struct {
+	Keyword *ApplyRecommendationOperation_KeywordParameters `protobuf:"bytes,4,opt,name=keyword,proto3,oneof"`
+}
+
+type ApplyRecommendationOperation_TargetCpaOptIn struct {
+	TargetCpaOptIn *ApplyRecommendationOperation_TargetCpaOptInParameters `protobuf:"bytes,5,opt,name=target_cpa_opt_in,json=targetCpaOptIn,proto3,oneof"`
+}
+
+func (*ApplyRecommendationOperation_CampaignBudget) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_TextAd) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_Keyword) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (*ApplyRecommendationOperation_TargetCpaOptIn) isApplyRecommendationOperation_ApplyParameters() {}
+
+func (m *ApplyRecommendationOperation) GetApplyParameters() isApplyRecommendationOperation_ApplyParameters {
+	if m != nil {
+		return m.ApplyParameters
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetCampaignBudget() *ApplyRecommendationOperation_CampaignBudgetParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_CampaignBudget); ok {
+		return x.CampaignBudget
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetTextAd() *ApplyRecommendationOperation_TextAdParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_TextAd); ok {
+		return x.TextAd
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetKeyword() *ApplyRecommendationOperation_KeywordParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_Keyword); ok {
+		return x.Keyword
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation) GetTargetCpaOptIn() *ApplyRecommendationOperation_TargetCpaOptInParameters {
+	if x, ok := m.GetApplyParameters().(*ApplyRecommendationOperation_TargetCpaOptIn); ok {
+		return x.TargetCpaOptIn
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ApplyRecommendationOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ApplyRecommendationOperation_OneofMarshaler, _ApplyRecommendationOperation_OneofUnmarshaler, _ApplyRecommendationOperation_OneofSizer, []interface{}{
+		(*ApplyRecommendationOperation_CampaignBudget)(nil),
+		(*ApplyRecommendationOperation_TextAd)(nil),
+		(*ApplyRecommendationOperation_Keyword)(nil),
+		(*ApplyRecommendationOperation_TargetCpaOptIn)(nil),
+	}
+}
+
+func _ApplyRecommendationOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ApplyRecommendationOperation)
+	// apply_parameters
+	switch x := m.ApplyParameters.(type) {
+	case *ApplyRecommendationOperation_CampaignBudget:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CampaignBudget); err != nil {
+			return err
+		}
+	case *ApplyRecommendationOperation_TextAd:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TextAd); err != nil {
+			return err
+		}
+	case *ApplyRecommendationOperation_Keyword:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Keyword); err != nil {
+			return err
+		}
+	case *ApplyRecommendationOperation_TargetCpaOptIn:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.TargetCpaOptIn); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ApplyRecommendationOperation.ApplyParameters has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ApplyRecommendationOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ApplyRecommendationOperation)
+	switch tag {
+	case 2: // apply_parameters.campaign_budget
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ApplyRecommendationOperation_CampaignBudgetParameters)
+		err := b.DecodeMessage(msg)
+		m.ApplyParameters = &ApplyRecommendationOperation_CampaignBudget{msg}
+		return true, err
+	case 3: // apply_parameters.text_ad
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ApplyRecommendationOperation_TextAdParameters)
+		err := b.DecodeMessage(msg)
+		m.ApplyParameters = &ApplyRecommendationOperation_TextAd{msg}
+		return true, err
+	case 4: // apply_parameters.keyword
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ApplyRecommendationOperation_KeywordParameters)
+		err := b.DecodeMessage(msg)
+		m.ApplyParameters = &ApplyRecommendationOperation_Keyword{msg}
+		return true, err
+	case 5: // apply_parameters.target_cpa_opt_in
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ApplyRecommendationOperation_TargetCpaOptInParameters)
+		err := b.DecodeMessage(msg)
+		m.ApplyParameters = &ApplyRecommendationOperation_TargetCpaOptIn{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ApplyRecommendationOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ApplyRecommendationOperation)
+	// apply_parameters
+	switch x := m.ApplyParameters.(type) {
+	case *ApplyRecommendationOperation_CampaignBudget:
+		s := proto.Size(x.CampaignBudget)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ApplyRecommendationOperation_TextAd:
+		s := proto.Size(x.TextAd)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ApplyRecommendationOperation_Keyword:
+		s := proto.Size(x.Keyword)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ApplyRecommendationOperation_TargetCpaOptIn:
+		s := proto.Size(x.TargetCpaOptIn)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Parameters to use when applying a campaign budget recommendation.
+type ApplyRecommendationOperation_CampaignBudgetParameters struct {
+	// New budget amount to set for target budget resource. This is a required
+	// field.
+	NewBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=new_budget_amount_micros,json=newBudgetAmountMicros,proto3" json:"new_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{}             `json:"-"`
+	XXX_unrecognized      []byte               `json:"-"`
+	XXX_sizecache         int32                `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) Reset() {
+	*m = ApplyRecommendationOperation_CampaignBudgetParameters{}
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_CampaignBudgetParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_CampaignBudgetParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{2, 0}
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Merge(dst, src)
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_CampaignBudgetParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_CampaignBudgetParameters) GetNewBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.NewBudgetAmountMicros
+	}
+	return nil
+}
+
+// Parameters to use when applying a text ad recommendation.
+type ApplyRecommendationOperation_TextAdParameters struct {
+	// New ad to add to recommended ad group. All necessary fields need to be
+	// set in this message. This is a required field.
+	Ad                   *resources.Ad `protobuf:"bytes,1,opt,name=ad,proto3" json:"ad,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_TextAdParameters) Reset() {
+	*m = ApplyRecommendationOperation_TextAdParameters{}
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_TextAdParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_TextAdParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{2, 1}
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationOperation_TextAdParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Merge(dst, src)
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_TextAdParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_TextAdParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_TextAdParameters) GetAd() *resources.Ad {
+	if m != nil {
+		return m.Ad
+	}
+	return nil
+}
+
+// Parameters to use when applying keyword recommendation.
+type ApplyRecommendationOperation_KeywordParameters struct {
+	// The ad group resource to add keyword to. This is a required field.
+	AdGroup *wrappers.StringValue `protobuf:"bytes,1,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
+	// The match type of the keyword. This is a required field.
+	MatchType enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,2,opt,name=match_type,json=matchType,proto3,enum=google.ads.googleads.v0.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"match_type,omitempty"`
+	// Optional, CPC bid to set for the keyword. If not set, keyword will use
+	// bid based on bidding strategy used by target ad group.
+	CpcBidMicros         *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cpc_bid_micros,json=cpcBidMicros,proto3" json:"cpc_bid_micros,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_KeywordParameters) Reset() {
+	*m = ApplyRecommendationOperation_KeywordParameters{}
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_KeywordParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_KeywordParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{2, 2}
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationOperation_KeywordParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Merge(dst, src)
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_KeywordParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_KeywordParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_KeywordParameters) GetAdGroup() *wrappers.StringValue {
+	if m != nil {
+		return m.AdGroup
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation_KeywordParameters) GetMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
+	if m != nil {
+		return m.MatchType
+	}
+	return enums.KeywordMatchTypeEnum_UNSPECIFIED
+}
+
+func (m *ApplyRecommendationOperation_KeywordParameters) GetCpcBidMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.CpcBidMicros
+	}
+	return nil
+}
+
+// Parameters to use when applying Target CPA recommendation.
+type ApplyRecommendationOperation_TargetCpaOptInParameters struct {
+	// Average CPA to use for Target CPA bidding strategy. This is a required
+	// field.
+	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
+	// Optional, budget amount to set for the campaign.
+	NewCampaignBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=new_campaign_budget_amount_micros,json=newCampaignBudgetAmountMicros,proto3" json:"new_campaign_budget_amount_micros,omitempty"`
+	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
+	XXX_unrecognized              []byte               `json:"-"`
+	XXX_sizecache                 int32                `json:"-"`
+}
+
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) Reset() {
+	*m = ApplyRecommendationOperation_TargetCpaOptInParameters{}
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ApplyRecommendationOperation_TargetCpaOptInParameters) ProtoMessage() {}
+func (*ApplyRecommendationOperation_TargetCpaOptInParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{2, 3}
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Merge(dst, src)
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.Size(m)
+}
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationOperation_TargetCpaOptInParameters proto.InternalMessageInfo
+
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) GetTargetCpaMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.TargetCpaMicros
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationOperation_TargetCpaOptInParameters) GetNewCampaignBudgetAmountMicros() *wrappers.Int64Value {
+	if m != nil {
+		return m.NewCampaignBudgetAmountMicros
+	}
+	return nil
+}
+
+// Response message for [RecommendationService.ApplyRecommendation][google.ads.googleads.v0.services.RecommendationService.ApplyRecommendation].
+type ApplyRecommendationResponse struct {
+	// Results of operations to apply recommendations.
+	Results []*ApplyRecommendationResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors)
+	// we return the RPC level error.
+	PartialFailureError  *status.Status `protobuf:"bytes,2,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *ApplyRecommendationResponse) Reset()         { *m = ApplyRecommendationResponse{} }
+func (m *ApplyRecommendationResponse) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationResponse) ProtoMessage()    {}
+func (*ApplyRecommendationResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{3}
+}
+func (m *ApplyRecommendationResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationResponse.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationResponse.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationResponse.Merge(dst, src)
+}
+func (m *ApplyRecommendationResponse) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationResponse.Size(m)
+}
+func (m *ApplyRecommendationResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationResponse proto.InternalMessageInfo
+
+func (m *ApplyRecommendationResponse) GetResults() []*ApplyRecommendationResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *ApplyRecommendationResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+// The result of applying a recommendation.
+type ApplyRecommendationResult struct {
+	// Returned for successful applies.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ApplyRecommendationResult) Reset()         { *m = ApplyRecommendationResult{} }
+func (m *ApplyRecommendationResult) String() string { return proto.CompactTextString(m) }
+func (*ApplyRecommendationResult) ProtoMessage()    {}
+func (*ApplyRecommendationResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{4}
+}
+func (m *ApplyRecommendationResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplyRecommendationResult.Unmarshal(m, b)
+}
+func (m *ApplyRecommendationResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplyRecommendationResult.Marshal(b, m, deterministic)
+}
+func (dst *ApplyRecommendationResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplyRecommendationResult.Merge(dst, src)
+}
+func (m *ApplyRecommendationResult) XXX_Size() int {
+	return xxx_messageInfo_ApplyRecommendationResult.Size(m)
+}
+func (m *ApplyRecommendationResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplyRecommendationResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplyRecommendationResult proto.InternalMessageInfo
+
+func (m *ApplyRecommendationResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [RecommendationService.DismissRecommendation][google.ads.googleads.v0.services.RecommendationService.DismissRecommendation].
+type DismissRecommendationRequest struct {
+	// The ID of the customer with the recommendation.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// If true, successful operations will be carried out and invalid
+	// operations will return errors. If false, operations will be carried in a
+	// single transaction if and only if they are all valid.
+	// Default is false.
+	PartialFailure bool `protobuf:"varint,2,opt,name=partial_failure,json=partialFailure,proto3" json:"partial_failure,omitempty"`
+	// The list of operations to dismiss recommendations.
+	// If partial_failure=false all recommendations should be of the same type
+	// There is a limit of 100 operations per request.
+	Operations           []*DismissRecommendationRequest_DismissRecommendationOperation `protobuf:"bytes,3,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                                       `json:"-"`
+	XXX_unrecognized     []byte                                                         `json:"-"`
+	XXX_sizecache        int32                                                          `json:"-"`
+}
+
+func (m *DismissRecommendationRequest) Reset()         { *m = DismissRecommendationRequest{} }
+func (m *DismissRecommendationRequest) String() string { return proto.CompactTextString(m) }
+func (*DismissRecommendationRequest) ProtoMessage()    {}
+func (*DismissRecommendationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{5}
+}
+func (m *DismissRecommendationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationRequest.Unmarshal(m, b)
+}
+func (m *DismissRecommendationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationRequest.Marshal(b, m, deterministic)
+}
+func (dst *DismissRecommendationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationRequest.Merge(dst, src)
+}
+func (m *DismissRecommendationRequest) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationRequest.Size(m)
+}
+func (m *DismissRecommendationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationRequest proto.InternalMessageInfo
+
+func (m *DismissRecommendationRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *DismissRecommendationRequest) GetPartialFailure() bool {
+	if m != nil {
+		return m.PartialFailure
+	}
+	return false
+}
+
+func (m *DismissRecommendationRequest) GetOperations() []*DismissRecommendationRequest_DismissRecommendationOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// Operation to dismiss a single recommendation identified by resource_name.
+type DismissRecommendationRequest_DismissRecommendationOperation struct {
+	// The resource name of the recommendation to dismiss.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) Reset() {
+	*m = DismissRecommendationRequest_DismissRecommendationOperation{}
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) String() string {
+	return proto.CompactTextString(m)
+}
+func (*DismissRecommendationRequest_DismissRecommendationOperation) ProtoMessage() {}
+func (*DismissRecommendationRequest_DismissRecommendationOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{5, 0}
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Unmarshal(m, b)
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Marshal(b, m, deterministic)
+}
+func (dst *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Merge(dst, src)
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.Size(m)
+}
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationRequest_DismissRecommendationOperation proto.InternalMessageInfo
+
+func (m *DismissRecommendationRequest_DismissRecommendationOperation) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Response message for [RecommendationService.DismissRecommendation][google.ads.googleads.v0.services.RecommendationService.DismissRecommendation].
+type DismissRecommendationResponse struct {
+	// Results of operations to dismiss recommendations.
+	Results []*DismissRecommendationResponse_DismissRecommendationResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
+	// Errors that pertain to operation failures in the partial failure mode.
+	// Returned only when partial_failure = true and all errors occur inside the
+	// operations. If any errors occur outside the operations (e.g. auth errors)
+	// we return the RPC level error.
+	PartialFailureError  *status.Status `protobuf:"bytes,2,opt,name=partial_failure_error,json=partialFailureError,proto3" json:"partial_failure_error,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *DismissRecommendationResponse) Reset()         { *m = DismissRecommendationResponse{} }
+func (m *DismissRecommendationResponse) String() string { return proto.CompactTextString(m) }
+func (*DismissRecommendationResponse) ProtoMessage()    {}
+func (*DismissRecommendationResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{6}
+}
+func (m *DismissRecommendationResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationResponse.Unmarshal(m, b)
+}
+func (m *DismissRecommendationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationResponse.Marshal(b, m, deterministic)
+}
+func (dst *DismissRecommendationResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationResponse.Merge(dst, src)
+}
+func (m *DismissRecommendationResponse) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationResponse.Size(m)
+}
+func (m *DismissRecommendationResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationResponse proto.InternalMessageInfo
+
+func (m *DismissRecommendationResponse) GetResults() []*DismissRecommendationResponse_DismissRecommendationResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+func (m *DismissRecommendationResponse) GetPartialFailureError() *status.Status {
+	if m != nil {
+		return m.PartialFailureError
+	}
+	return nil
+}
+
+// The result of dismissing a recommendation.
+type DismissRecommendationResponse_DismissRecommendationResult struct {
+	// Returned for successful dismissals.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DismissRecommendationResponse_DismissRecommendationResult) Reset() {
+	*m = DismissRecommendationResponse_DismissRecommendationResult{}
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) String() string {
+	return proto.CompactTextString(m)
+}
+func (*DismissRecommendationResponse_DismissRecommendationResult) ProtoMessage() {}
+func (*DismissRecommendationResponse_DismissRecommendationResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_recommendation_service_1bae96df03faee01, []int{6, 0}
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Unmarshal(m, b)
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Marshal(b, m, deterministic)
+}
+func (dst *DismissRecommendationResponse_DismissRecommendationResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Merge(dst, src)
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_Size() int {
+	return xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.Size(m)
+}
+func (m *DismissRecommendationResponse_DismissRecommendationResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DismissRecommendationResponse_DismissRecommendationResult proto.InternalMessageInfo
+
+func (m *DismissRecommendationResponse_DismissRecommendationResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetRecommendationRequest)(nil), "google.ads.googleads.v0.services.GetRecommendationRequest")
+	proto.RegisterType((*ApplyRecommendationRequest)(nil), "google.ads.googleads.v0.services.ApplyRecommendationRequest")
+	proto.RegisterType((*ApplyRecommendationOperation)(nil), "google.ads.googleads.v0.services.ApplyRecommendationOperation")
+	proto.RegisterType((*ApplyRecommendationOperation_CampaignBudgetParameters)(nil), "google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_TextAdParameters)(nil), "google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_KeywordParameters)(nil), "google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters")
+	proto.RegisterType((*ApplyRecommendationOperation_TargetCpaOptInParameters)(nil), "google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters")
+	proto.RegisterType((*ApplyRecommendationResponse)(nil), "google.ads.googleads.v0.services.ApplyRecommendationResponse")
+	proto.RegisterType((*ApplyRecommendationResult)(nil), "google.ads.googleads.v0.services.ApplyRecommendationResult")
+	proto.RegisterType((*DismissRecommendationRequest)(nil), "google.ads.googleads.v0.services.DismissRecommendationRequest")
+	proto.RegisterType((*DismissRecommendationRequest_DismissRecommendationOperation)(nil), "google.ads.googleads.v0.services.DismissRecommendationRequest.DismissRecommendationOperation")
+	proto.RegisterType((*DismissRecommendationResponse)(nil), "google.ads.googleads.v0.services.DismissRecommendationResponse")
+	proto.RegisterType((*DismissRecommendationResponse_DismissRecommendationResult)(nil), "google.ads.googleads.v0.services.DismissRecommendationResponse.DismissRecommendationResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// RecommendationServiceClient is the client API for RecommendationService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type RecommendationServiceClient interface {
+	// Returns the requested recommendation in full detail.
+	GetRecommendation(ctx context.Context, in *GetRecommendationRequest, opts ...grpc.CallOption) (*resources.Recommendation, error)
+	// Applies given recommendations with corresponding apply parameters.
+	ApplyRecommendation(ctx context.Context, in *ApplyRecommendationRequest, opts ...grpc.CallOption) (*ApplyRecommendationResponse, error)
+	// Dismisses given recommendations.
+	DismissRecommendation(ctx context.Context, in *DismissRecommendationRequest, opts ...grpc.CallOption) (*DismissRecommendationResponse, error)
+}
+
+type recommendationServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewRecommendationServiceClient(cc *grpc.ClientConn) RecommendationServiceClient {
+	return &recommendationServiceClient{cc}
+}
+
+func (c *recommendationServiceClient) GetRecommendation(ctx context.Context, in *GetRecommendationRequest, opts ...grpc.CallOption) (*resources.Recommendation, error) {
+	out := new(resources.Recommendation)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.RecommendationService/GetRecommendation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *recommendationServiceClient) ApplyRecommendation(ctx context.Context, in *ApplyRecommendationRequest, opts ...grpc.CallOption) (*ApplyRecommendationResponse, error) {
+	out := new(ApplyRecommendationResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.RecommendationService/ApplyRecommendation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *recommendationServiceClient) DismissRecommendation(ctx context.Context, in *DismissRecommendationRequest, opts ...grpc.CallOption) (*DismissRecommendationResponse, error) {
+	out := new(DismissRecommendationResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.RecommendationService/DismissRecommendation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// RecommendationServiceServer is the server API for RecommendationService service.
+type RecommendationServiceServer interface {
+	// Returns the requested recommendation in full detail.
+	GetRecommendation(context.Context, *GetRecommendationRequest) (*resources.Recommendation, error)
+	// Applies given recommendations with corresponding apply parameters.
+	ApplyRecommendation(context.Context, *ApplyRecommendationRequest) (*ApplyRecommendationResponse, error)
+	// Dismisses given recommendations.
+	DismissRecommendation(context.Context, *DismissRecommendationRequest) (*DismissRecommendationResponse, error)
+}
+
+func RegisterRecommendationServiceServer(s *grpc.Server, srv RecommendationServiceServer) {
+	s.RegisterService(&_RecommendationService_serviceDesc, srv)
+}
+
+func _RecommendationService_GetRecommendation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetRecommendationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RecommendationServiceServer).GetRecommendation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.RecommendationService/GetRecommendation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RecommendationServiceServer).GetRecommendation(ctx, req.(*GetRecommendationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RecommendationService_ApplyRecommendation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ApplyRecommendationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RecommendationServiceServer).ApplyRecommendation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.RecommendationService/ApplyRecommendation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RecommendationServiceServer).ApplyRecommendation(ctx, req.(*ApplyRecommendationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _RecommendationService_DismissRecommendation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DismissRecommendationRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(RecommendationServiceServer).DismissRecommendation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.RecommendationService/DismissRecommendation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(RecommendationServiceServer).DismissRecommendation(ctx, req.(*DismissRecommendationRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _RecommendationService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.RecommendationService",
+	HandlerType: (*RecommendationServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetRecommendation",
+			Handler:    _RecommendationService_GetRecommendation_Handler,
+		},
+		{
+			MethodName: "ApplyRecommendation",
+			Handler:    _RecommendationService_ApplyRecommendation_Handler,
+		},
+		{
+			MethodName: "DismissRecommendation",
+			Handler:    _RecommendationService_DismissRecommendation_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/recommendation_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/recommendation_service.proto", fileDescriptor_recommendation_service_1bae96df03faee01)
+}
+
+var fileDescriptor_recommendation_service_1bae96df03faee01 = []byte{
+	// 1068 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xc1, 0x72, 0xdc, 0x44,
+	0x10, 0x45, 0x32, 0x89, 0x93, 0x71, 0xb0, 0xe3, 0x49, 0xb9, 0x58, 0x64, 0x27, 0x2c, 0x02, 0x0a,
+	0xd7, 0x1e, 0x24, 0x67, 0x4d, 0x0c, 0x38, 0xd8, 0xc9, 0x6e, 0xe2, 0x38, 0x2e, 0x2a, 0xd8, 0x25,
+	0x1b, 0x53, 0x05, 0x06, 0xd5, 0x58, 0x9a, 0x08, 0xc1, 0x4a, 0x33, 0xcc, 0x8c, 0xec, 0xb8, 0x52,
+	0xbe, 0xa4, 0xb8, 0x70, 0xe6, 0x0f, 0x72, 0xe4, 0xc0, 0x17, 0x00, 0x47, 0x0e, 0x39, 0xc2, 0x2d,
+	0x67, 0x3e, 0x81, 0x0f, 0xa0, 0x34, 0x9a, 0x71, 0xac, 0xf5, 0xca, 0xbb, 0x78, 0xc3, 0x6d, 0x76,
+	0xba, 0xfb, 0x75, 0xbf, 0xee, 0x9e, 0x6e, 0x2d, 0x58, 0x8a, 0x08, 0x89, 0x3a, 0xd8, 0x45, 0x21,
+	0x77, 0x8b, 0x63, 0x7e, 0xda, 0x9b, 0x73, 0x39, 0x66, 0x7b, 0x71, 0x80, 0xb9, 0xcb, 0x70, 0x40,
+	0x92, 0x04, 0xa7, 0x21, 0x12, 0x31, 0x49, 0x7d, 0x75, 0xef, 0x50, 0x46, 0x04, 0x81, 0xf5, 0xc2,
+	0xc6, 0x41, 0x21, 0x77, 0x8e, 0xcc, 0x9d, 0xbd, 0x39, 0x47, 0x9b, 0x5b, 0x0b, 0x55, 0x0e, 0x70,
+	0x9a, 0x25, 0xdc, 0xfd, 0x0e, 0x1f, 0xec, 0x13, 0x16, 0xfa, 0x09, 0x12, 0xc1, 0x37, 0xbe, 0x38,
+	0xa0, 0x0a, 0xd9, 0x6a, 0x54, 0xd9, 0x31, 0xcc, 0x49, 0xc6, 0xf2, 0xc8, 0x50, 0xa8, 0x74, 0x17,
+	0xfa, 0xeb, 0x96, 0x59, 0x28, 0xbb, 0x19, 0x6d, 0x47, 0x63, 0x17, 0xa5, 0x29, 0x11, 0x52, 0xc8,
+	0x95, 0xf4, 0x9a, 0x92, 0xca, 0x5f, 0xbb, 0xd9, 0x43, 0x77, 0x9f, 0x21, 0x4a, 0x31, 0xd3, 0xf2,
+	0xd7, 0x95, 0x9c, 0xd1, 0xc0, 0xe5, 0x02, 0x89, 0x4c, 0x09, 0xec, 0x5b, 0xa0, 0xb6, 0x8a, 0x85,
+	0x57, 0xf2, 0xe8, 0xe1, 0xef, 0x33, 0xcc, 0x05, 0x7c, 0x1b, 0xbc, 0xa6, 0x83, 0xf2, 0x53, 0x94,
+	0xe0, 0x9a, 0x51, 0x37, 0x66, 0x2f, 0x7a, 0x97, 0xf4, 0xe5, 0xa7, 0x28, 0xc1, 0xf6, 0x1f, 0x06,
+	0xb0, 0x5a, 0x94, 0x76, 0x0e, 0x7a, 0x63, 0xbc, 0x09, 0xc6, 0x82, 0x8c, 0x0b, 0x92, 0x60, 0xe6,
+	0xc7, 0xa1, 0x42, 0x00, 0xfa, 0x6a, 0x2d, 0x84, 0xef, 0x81, 0x09, 0x8a, 0x98, 0x88, 0x51, 0xc7,
+	0x7f, 0x88, 0xe2, 0x4e, 0xc6, 0x70, 0x6d, 0xa4, 0x6e, 0xcc, 0x5e, 0xf0, 0xc6, 0xd5, 0xf5, 0xbd,
+	0xe2, 0x16, 0x7e, 0x0d, 0x00, 0xa1, 0x98, 0x15, 0xb4, 0x6b, 0x66, 0x7d, 0x64, 0x76, 0xac, 0xb9,
+	0xec, 0xf4, 0xab, 0xa9, 0xd3, 0x23, 0xb6, 0x75, 0x0d, 0xe3, 0x1d, 0x43, 0xb4, 0x7f, 0xbf, 0x08,
+	0x66, 0x4e, 0x53, 0x1e, 0x28, 0x1d, 0xf0, 0x89, 0x01, 0x26, 0x02, 0x94, 0x50, 0x14, 0x47, 0xa9,
+	0xbf, 0x9b, 0x85, 0x11, 0x16, 0x35, 0xb3, 0x6e, 0xcc, 0x8e, 0x35, 0x3f, 0x1f, 0x2e, 0x56, 0xe7,
+	0x8e, 0x42, 0x6d, 0x4b, 0xd0, 0x0d, 0xc4, 0x50, 0x82, 0x05, 0x66, 0xfc, 0xfe, 0x2b, 0xde, 0x78,
+	0x50, 0x92, 0xc1, 0x6f, 0xc1, 0xa8, 0xc0, 0x8f, 0x84, 0x8f, 0x42, 0x99, 0xcb, 0xb1, 0xe6, 0xfa,
+	0x90, 0xbe, 0xb7, 0xf0, 0x23, 0xd1, 0x0a, 0x4b, 0x3e, 0xcf, 0x0b, 0x79, 0x07, 0x3b, 0x60, 0x54,
+	0xbd, 0x8b, 0xda, 0xab, 0xd2, 0xd7, 0xc6, 0x90, 0xbe, 0x3e, 0x29, 0xd0, 0x4a, 0xce, 0xb4, 0x0b,
+	0xf8, 0x83, 0x01, 0x26, 0x05, 0x62, 0x11, 0x16, 0x7e, 0x40, 0x91, 0x4f, 0xa8, 0xf0, 0xe3, 0xb4,
+	0x76, 0xee, 0xa5, 0x24, 0x78, 0x4b, 0xe2, 0xde, 0xa1, 0x68, 0x9d, 0x8a, 0xb5, 0xb4, 0x9c, 0x60,
+	0x51, 0x92, 0x59, 0x14, 0xd4, 0xaa, 0xca, 0x01, 0xb7, 0x40, 0x2d, 0xc5, 0xfb, 0xaa, 0xf6, 0x3e,
+	0x4a, 0x48, 0x96, 0x0a, 0x3f, 0x89, 0x03, 0x46, 0xb8, 0xec, 0x98, 0xb1, 0xe6, 0xb4, 0x0e, 0x54,
+	0xbf, 0x56, 0x67, 0x2d, 0x15, 0x0b, 0xef, 0x6f, 0xa3, 0x4e, 0x86, 0xbd, 0xa9, 0x14, 0xef, 0x17,
+	0x98, 0x2d, 0x69, 0xfa, 0x40, 0x5a, 0x5a, 0x6b, 0xe0, 0x72, 0x77, 0x11, 0xe0, 0x0d, 0x60, 0xa2,
+	0x50, 0x61, 0xbe, 0x5b, 0x49, 0xfe, 0x68, 0xae, 0x38, 0xad, 0xd0, 0x33, 0x51, 0x68, 0xfd, 0x63,
+	0x80, 0xc9, 0x13, 0x49, 0x86, 0x1f, 0x80, 0x0b, 0x28, 0xf4, 0x23, 0x46, 0x32, 0xaa, 0x20, 0x67,
+	0x4e, 0x84, 0xb9, 0x29, 0x58, 0x9c, 0x46, 0x45, 0x9c, 0xa3, 0x28, 0x5c, 0xcd, 0x95, 0x61, 0x00,
+	0xc0, 0x8b, 0x81, 0x28, 0x7b, 0x7d, 0xbc, 0x79, 0xb7, 0x32, 0x1a, 0x39, 0x49, 0x75, 0x8d, 0x1f,
+	0xe4, 0x76, 0x5b, 0x07, 0x14, 0xaf, 0xa4, 0x59, 0x72, 0xe2, 0xd2, 0xbb, 0x98, 0xe8, 0x23, 0x6c,
+	0x81, 0xf1, 0x80, 0x06, 0xfe, 0x6e, 0x1c, 0xea, 0x54, 0x8e, 0xf4, 0x4f, 0xe5, 0xa5, 0x80, 0x06,
+	0xed, 0x38, 0x54, 0x19, 0x7c, 0x66, 0x80, 0x5a, 0x55, 0x89, 0xe1, 0x6a, 0xa9, 0xad, 0x06, 0xaf,
+	0xd6, 0xc4, 0x51, 0x63, 0x14, 0x5e, 0x20, 0x06, 0x6f, 0xe5, 0xd5, 0xef, 0x1a, 0x01, 0x5d, 0x6d,
+	0x60, 0xf6, 0x07, 0xbe, 0x9a, 0xe2, 0xfd, 0x72, 0x8b, 0x1d, 0x6f, 0x87, 0x36, 0x04, 0x97, 0x51,
+	0xde, 0xcb, 0x3e, 0x3d, 0xe2, 0x60, 0xff, 0x6a, 0x80, 0xe9, 0x9e, 0x93, 0x98, 0x53, 0x92, 0x72,
+	0x0c, 0x3f, 0x03, 0xa3, 0x0c, 0xf3, 0xac, 0x23, 0x72, 0x66, 0xf9, 0xf4, 0xbc, 0x79, 0xa6, 0x07,
+	0xe3, 0x49, 0x0c, 0x4f, 0x63, 0xc1, 0x7b, 0x60, 0xaa, 0x6b, 0x80, 0xfb, 0x98, 0x31, 0xc2, 0x14,
+	0x4b, 0xa8, 0x9d, 0x30, 0x1a, 0x38, 0x9b, 0x72, 0xf5, 0x78, 0x57, 0xca, 0xa3, 0x7d, 0x25, 0x57,
+	0xb7, 0x6f, 0x83, 0x37, 0x2a, 0xbd, 0x0d, 0xb6, 0x8a, 0x7e, 0x31, 0xc1, 0xcc, 0xdd, 0x98, 0x27,
+	0x31, 0xe7, 0x2f, 0x6f, 0x19, 0x99, 0x3d, 0x97, 0xd1, 0x61, 0x69, 0x19, 0x8d, 0xc8, 0x74, 0x7e,
+	0xd5, 0x3f, 0x9d, 0xa7, 0x45, 0xd7, 0x5b, 0xd8, 0x73, 0x57, 0x59, 0x2b, 0xe0, 0xda, 0xe9, 0xda,
+	0x83, 0x25, 0xec, 0xa9, 0x09, 0xae, 0x56, 0x84, 0xa4, 0x7a, 0x26, 0xeb, 0xee, 0x99, 0x2f, 0xcf,
+	0x4c, 0xb2, 0x40, 0xac, 0x94, 0xfe, 0x1f, 0x3d, 0x65, 0xb5, 0xc1, 0xf4, 0x29, 0xfe, 0x06, 0x4a,
+	0x52, 0xf3, 0xc7, 0x73, 0x60, 0xaa, 0x6c, 0xbd, 0x59, 0x30, 0x85, 0xbf, 0x19, 0x60, 0xf2, 0xc4,
+	0xc7, 0x13, 0x5c, 0xec, 0x9f, 0xa1, 0xaa, 0x2f, 0x2e, 0xeb, 0xfa, 0x00, 0x53, 0xbc, 0x6c, 0x69,
+	0x7f, 0xf4, 0xe4, 0xaf, 0xbf, 0x7f, 0x32, 0xe7, 0xe1, 0xf5, 0xfc, 0x1b, 0xf2, 0x71, 0x89, 0xce,
+	0x92, 0xee, 0x6c, 0xee, 0x36, 0xba, 0x3e, 0x2a, 0xb9, 0xdb, 0x38, 0x84, 0x7f, 0x1a, 0xe0, 0x4a,
+	0x8f, 0x27, 0x07, 0x3f, 0x3e, 0xe3, 0x5c, 0x28, 0x38, 0x2c, 0x9d, 0x75, 0xaa, 0xc8, 0xfe, 0xb0,
+	0x97, 0x25, 0x9f, 0x0f, 0xed, 0xf9, 0x9c, 0xcf, 0x0b, 0x02, 0x8f, 0x8f, 0x3d, 0xdc, 0xa5, 0xc6,
+	0x61, 0x37, 0x9d, 0x45, 0x39, 0x0d, 0x17, 0x8d, 0x06, 0x7c, 0x6e, 0x80, 0xa9, 0x9e, 0x35, 0x87,
+	0xcb, 0xc3, 0xbd, 0x4f, 0xeb, 0xd6, 0x90, 0xad, 0x6f, 0xdf, 0x96, 0xd4, 0x16, 0xed, 0x1b, 0xff,
+	0x8d, 0x5a, 0x58, 0x80, 0x2e, 0x1a, 0x8d, 0xf6, 0x73, 0x03, 0xbc, 0x13, 0x90, 0xa4, 0x6f, 0x20,
+	0x6d, 0xab, 0x67, 0xc7, 0x6e, 0xe4, 0x8b, 0x66, 0xc3, 0xf8, 0xe2, 0xbe, 0xb2, 0x8f, 0x48, 0x07,
+	0xa5, 0x91, 0x43, 0x58, 0xe4, 0x46, 0x38, 0x95, 0x6b, 0x48, 0xff, 0x27, 0xa1, 0x31, 0xaf, 0xfe,
+	0x9f, 0x75, 0x53, 0x1f, 0x9e, 0x9a, 0x23, 0xab, 0xad, 0xd6, 0xcf, 0x66, 0x7d, 0xb5, 0x00, 0x6c,
+	0x85, 0xdc, 0x29, 0x8e, 0xf9, 0x69, 0x7b, 0xce, 0x51, 0x8e, 0xf9, 0x33, 0xad, 0xb2, 0xd3, 0x0a,
+	0xf9, 0xce, 0x91, 0xca, 0xce, 0xf6, 0xdc, 0x8e, 0x56, 0xd9, 0x3d, 0x2f, 0x03, 0x98, 0xff, 0x37,
+	0x00, 0x00, 0xff, 0xff, 0x6e, 0x5a, 0x56, 0xae, 0xe7, 0x0d, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/search_term_view_service.pb.go b/googleapis/ads/googleads/v0/services/search_term_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7e82ffcb152bb65784d1bcfb80beb8a9f6ea5054
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/search_term_view_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/search_term_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [SearchTermViewService.GetSearchTermView][google.ads.googleads.v0.services.SearchTermViewService.GetSearchTermView].
+type GetSearchTermViewRequest struct {
+	// The resource name of the search term view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetSearchTermViewRequest) Reset()         { *m = GetSearchTermViewRequest{} }
+func (m *GetSearchTermViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetSearchTermViewRequest) ProtoMessage()    {}
+func (*GetSearchTermViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_search_term_view_service_24332fa5424afa86, []int{0}
+}
+func (m *GetSearchTermViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetSearchTermViewRequest.Unmarshal(m, b)
+}
+func (m *GetSearchTermViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetSearchTermViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetSearchTermViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetSearchTermViewRequest.Merge(dst, src)
+}
+func (m *GetSearchTermViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetSearchTermViewRequest.Size(m)
+}
+func (m *GetSearchTermViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetSearchTermViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetSearchTermViewRequest proto.InternalMessageInfo
+
+func (m *GetSearchTermViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetSearchTermViewRequest)(nil), "google.ads.googleads.v0.services.GetSearchTermViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// SearchTermViewServiceClient is the client API for SearchTermViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type SearchTermViewServiceClient interface {
+	// Returns the attributes of the requested search term view.
+	GetSearchTermView(ctx context.Context, in *GetSearchTermViewRequest, opts ...grpc.CallOption) (*resources.SearchTermView, error)
+}
+
+type searchTermViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewSearchTermViewServiceClient(cc *grpc.ClientConn) SearchTermViewServiceClient {
+	return &searchTermViewServiceClient{cc}
+}
+
+func (c *searchTermViewServiceClient) GetSearchTermView(ctx context.Context, in *GetSearchTermViewRequest, opts ...grpc.CallOption) (*resources.SearchTermView, error) {
+	out := new(resources.SearchTermView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.SearchTermViewService/GetSearchTermView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// SearchTermViewServiceServer is the server API for SearchTermViewService service.
+type SearchTermViewServiceServer interface {
+	// Returns the attributes of the requested search term view.
+	GetSearchTermView(context.Context, *GetSearchTermViewRequest) (*resources.SearchTermView, error)
+}
+
+func RegisterSearchTermViewServiceServer(s *grpc.Server, srv SearchTermViewServiceServer) {
+	s.RegisterService(&_SearchTermViewService_serviceDesc, srv)
+}
+
+func _SearchTermViewService_GetSearchTermView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetSearchTermViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SearchTermViewServiceServer).GetSearchTermView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.SearchTermViewService/GetSearchTermView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SearchTermViewServiceServer).GetSearchTermView(ctx, req.(*GetSearchTermViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _SearchTermViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.SearchTermViewService",
+	HandlerType: (*SearchTermViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSearchTermView",
+			Handler:    _SearchTermViewService_GetSearchTermView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/search_term_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/search_term_view_service.proto", fileDescriptor_search_term_view_service_24332fa5424afa86)
+}
+
+var fileDescriptor_search_term_view_service_24332fa5424afa86 = []byte{
+	// 351 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcf, 0x4a, 0xc3, 0x40,
+	0x10, 0xc6, 0x49, 0x05, 0xc1, 0xa0, 0x07, 0x03, 0x42, 0x09, 0x1e, 0x4a, 0xf5, 0x20, 0x3d, 0xec,
+	0xa6, 0xf6, 0xe2, 0x1f, 0xa4, 0xa4, 0x97, 0x7a, 0x92, 0xd2, 0x4a, 0x0f, 0x12, 0x08, 0x6b, 0x32,
+	0xc4, 0x40, 0xb3, 0x5b, 0x77, 0xb6, 0xe9, 0x41, 0xbc, 0xf8, 0x0a, 0xbe, 0x81, 0x47, 0xdf, 0xc1,
+	0x17, 0xf0, 0xea, 0x41, 0xf0, 0xec, 0x83, 0x48, 0xba, 0xd9, 0x42, 0xb1, 0xa1, 0xb7, 0x8f, 0xcc,
+	0xfc, 0xbe, 0x99, 0xf9, 0xb2, 0x76, 0x37, 0x11, 0x22, 0x99, 0x00, 0x65, 0x31, 0x52, 0x2d, 0x0b,
+	0x95, 0x7b, 0x14, 0x41, 0xe6, 0x69, 0x04, 0x48, 0x11, 0x98, 0x8c, 0x1e, 0x42, 0x05, 0x32, 0x0b,
+	0xf3, 0x14, 0xe6, 0x61, 0x59, 0x21, 0x53, 0x29, 0x94, 0x70, 0x1a, 0x9a, 0x22, 0x2c, 0x46, 0xb2,
+	0x34, 0x20, 0xb9, 0x47, 0x8c, 0x81, 0x7b, 0x56, 0x35, 0x42, 0x02, 0x8a, 0x99, 0x5c, 0x37, 0x43,
+	0x7b, 0xbb, 0x87, 0x86, 0x9c, 0xa6, 0x94, 0x71, 0x2e, 0x14, 0x53, 0xa9, 0xe0, 0xa8, 0xab, 0xcd,
+	0xae, 0x5d, 0xef, 0x83, 0x1a, 0x2d, 0xd0, 0x5b, 0x90, 0xd9, 0x38, 0x85, 0xf9, 0x10, 0x1e, 0x67,
+	0x80, 0xca, 0x39, 0xb2, 0xf7, 0x8c, 0x7b, 0xc8, 0x59, 0x06, 0x75, 0xab, 0x61, 0x9d, 0xec, 0x0c,
+	0x77, 0xcd, 0xc7, 0x1b, 0x96, 0xc1, 0xe9, 0xb7, 0x65, 0x1f, 0xac, 0xe2, 0x23, 0xbd, 0xb3, 0xf3,
+	0x61, 0xd9, 0xfb, 0xff, 0xbc, 0x9d, 0x0b, 0xb2, 0xe9, 0x56, 0x52, 0xb5, 0x90, 0xdb, 0xae, 0x64,
+	0x97, 0x29, 0x90, 0x55, 0xb2, 0x79, 0xfe, 0xf2, 0xf5, 0xfb, 0x5a, 0xeb, 0x38, 0xed, 0x22, 0xab,
+	0xa7, 0x95, 0x73, 0xae, 0xa2, 0x19, 0x2a, 0x91, 0x81, 0x44, 0xda, 0x2a, 0xc3, 0x33, 0x18, 0xd2,
+	0xd6, 0x73, 0xef, 0xc7, 0xb2, 0x8f, 0x23, 0x91, 0x6d, 0xdc, 0xb7, 0xe7, 0xae, 0xbd, 0x7f, 0x50,
+	0xe4, 0x3b, 0xb0, 0xee, 0xae, 0x4b, 0x3e, 0x11, 0x13, 0xc6, 0x13, 0x22, 0x64, 0x42, 0x13, 0xe0,
+	0x8b, 0xf4, 0xcd, 0x9f, 0x9c, 0xa6, 0x58, 0xfd, 0x76, 0x2e, 0x8d, 0x78, 0xab, 0x6d, 0xf5, 0x7d,
+	0xff, 0xbd, 0xd6, 0xe8, 0x6b, 0x43, 0x3f, 0x46, 0xa2, 0x65, 0xa1, 0xc6, 0x1e, 0x29, 0x07, 0xe3,
+	0xa7, 0x69, 0x09, 0xfc, 0x18, 0x83, 0x65, 0x4b, 0x30, 0xf6, 0x02, 0xd3, 0x72, 0xbf, 0xbd, 0x58,
+	0xa0, 0xf3, 0x17, 0x00, 0x00, 0xff, 0xff, 0x34, 0x3f, 0x8b, 0x2d, 0xbb, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/shared_criterion_service.pb.go b/googleapis/ads/googleads/v0/services/shared_criterion_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..083ff35ee7a89306126c45d3d2614428c56c7c67
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/shared_criterion_service.pb.go
@@ -0,0 +1,498 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/shared_criterion_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [SharedCriterionService.GetSharedCriterion][google.ads.googleads.v0.services.SharedCriterionService.GetSharedCriterion].
+type GetSharedCriterionRequest struct {
+	// The resource name of the shared criterion to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetSharedCriterionRequest) Reset()         { *m = GetSharedCriterionRequest{} }
+func (m *GetSharedCriterionRequest) String() string { return proto.CompactTextString(m) }
+func (*GetSharedCriterionRequest) ProtoMessage()    {}
+func (*GetSharedCriterionRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_service_6b64ffbc632397a6, []int{0}
+}
+func (m *GetSharedCriterionRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetSharedCriterionRequest.Unmarshal(m, b)
+}
+func (m *GetSharedCriterionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetSharedCriterionRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetSharedCriterionRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetSharedCriterionRequest.Merge(dst, src)
+}
+func (m *GetSharedCriterionRequest) XXX_Size() int {
+	return xxx_messageInfo_GetSharedCriterionRequest.Size(m)
+}
+func (m *GetSharedCriterionRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetSharedCriterionRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetSharedCriterionRequest proto.InternalMessageInfo
+
+func (m *GetSharedCriterionRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [SharedCriterionService.MutateSharedCriteria][google.ads.googleads.v0.services.SharedCriterionService.MutateSharedCriteria].
+type MutateSharedCriteriaRequest struct {
+	// The ID of the customer whose shared criteria are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual shared criteria.
+	Operations           []*SharedCriterionOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *MutateSharedCriteriaRequest) Reset()         { *m = MutateSharedCriteriaRequest{} }
+func (m *MutateSharedCriteriaRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedCriteriaRequest) ProtoMessage()    {}
+func (*MutateSharedCriteriaRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_service_6b64ffbc632397a6, []int{1}
+}
+func (m *MutateSharedCriteriaRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedCriteriaRequest.Unmarshal(m, b)
+}
+func (m *MutateSharedCriteriaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedCriteriaRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateSharedCriteriaRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedCriteriaRequest.Merge(dst, src)
+}
+func (m *MutateSharedCriteriaRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedCriteriaRequest.Size(m)
+}
+func (m *MutateSharedCriteriaRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedCriteriaRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedCriteriaRequest proto.InternalMessageInfo
+
+func (m *MutateSharedCriteriaRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateSharedCriteriaRequest) GetOperations() []*SharedCriterionOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, remove) on an shared criterion.
+type SharedCriterionOperation struct {
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*SharedCriterionOperation_Create
+	//	*SharedCriterionOperation_Remove
+	Operation            isSharedCriterionOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *SharedCriterionOperation) Reset()         { *m = SharedCriterionOperation{} }
+func (m *SharedCriterionOperation) String() string { return proto.CompactTextString(m) }
+func (*SharedCriterionOperation) ProtoMessage()    {}
+func (*SharedCriterionOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_service_6b64ffbc632397a6, []int{2}
+}
+func (m *SharedCriterionOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedCriterionOperation.Unmarshal(m, b)
+}
+func (m *SharedCriterionOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedCriterionOperation.Marshal(b, m, deterministic)
+}
+func (dst *SharedCriterionOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedCriterionOperation.Merge(dst, src)
+}
+func (m *SharedCriterionOperation) XXX_Size() int {
+	return xxx_messageInfo_SharedCriterionOperation.Size(m)
+}
+func (m *SharedCriterionOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedCriterionOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedCriterionOperation proto.InternalMessageInfo
+
+type isSharedCriterionOperation_Operation interface {
+	isSharedCriterionOperation_Operation()
+}
+
+type SharedCriterionOperation_Create struct {
+	Create *resources.SharedCriterion `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type SharedCriterionOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*SharedCriterionOperation_Create) isSharedCriterionOperation_Operation() {}
+
+func (*SharedCriterionOperation_Remove) isSharedCriterionOperation_Operation() {}
+
+func (m *SharedCriterionOperation) GetOperation() isSharedCriterionOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *SharedCriterionOperation) GetCreate() *resources.SharedCriterion {
+	if x, ok := m.GetOperation().(*SharedCriterionOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *SharedCriterionOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*SharedCriterionOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*SharedCriterionOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _SharedCriterionOperation_OneofMarshaler, _SharedCriterionOperation_OneofUnmarshaler, _SharedCriterionOperation_OneofSizer, []interface{}{
+		(*SharedCriterionOperation_Create)(nil),
+		(*SharedCriterionOperation_Remove)(nil),
+	}
+}
+
+func _SharedCriterionOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*SharedCriterionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *SharedCriterionOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *SharedCriterionOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("SharedCriterionOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _SharedCriterionOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*SharedCriterionOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.SharedCriterion)
+		err := b.DecodeMessage(msg)
+		m.Operation = &SharedCriterionOperation_Create{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &SharedCriterionOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _SharedCriterionOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*SharedCriterionOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *SharedCriterionOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *SharedCriterionOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a shared criterion mutate.
+type MutateSharedCriteriaResponse struct {
+	// All results for the mutate.
+	Results              []*MutateSharedCriterionResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *MutateSharedCriteriaResponse) Reset()         { *m = MutateSharedCriteriaResponse{} }
+func (m *MutateSharedCriteriaResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedCriteriaResponse) ProtoMessage()    {}
+func (*MutateSharedCriteriaResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_service_6b64ffbc632397a6, []int{3}
+}
+func (m *MutateSharedCriteriaResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedCriteriaResponse.Unmarshal(m, b)
+}
+func (m *MutateSharedCriteriaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedCriteriaResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateSharedCriteriaResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedCriteriaResponse.Merge(dst, src)
+}
+func (m *MutateSharedCriteriaResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedCriteriaResponse.Size(m)
+}
+func (m *MutateSharedCriteriaResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedCriteriaResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedCriteriaResponse proto.InternalMessageInfo
+
+func (m *MutateSharedCriteriaResponse) GetResults() []*MutateSharedCriterionResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the shared criterion mutate.
+type MutateSharedCriterionResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateSharedCriterionResult) Reset()         { *m = MutateSharedCriterionResult{} }
+func (m *MutateSharedCriterionResult) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedCriterionResult) ProtoMessage()    {}
+func (*MutateSharedCriterionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_criterion_service_6b64ffbc632397a6, []int{4}
+}
+func (m *MutateSharedCriterionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedCriterionResult.Unmarshal(m, b)
+}
+func (m *MutateSharedCriterionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedCriterionResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateSharedCriterionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedCriterionResult.Merge(dst, src)
+}
+func (m *MutateSharedCriterionResult) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedCriterionResult.Size(m)
+}
+func (m *MutateSharedCriterionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedCriterionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedCriterionResult proto.InternalMessageInfo
+
+func (m *MutateSharedCriterionResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetSharedCriterionRequest)(nil), "google.ads.googleads.v0.services.GetSharedCriterionRequest")
+	proto.RegisterType((*MutateSharedCriteriaRequest)(nil), "google.ads.googleads.v0.services.MutateSharedCriteriaRequest")
+	proto.RegisterType((*SharedCriterionOperation)(nil), "google.ads.googleads.v0.services.SharedCriterionOperation")
+	proto.RegisterType((*MutateSharedCriteriaResponse)(nil), "google.ads.googleads.v0.services.MutateSharedCriteriaResponse")
+	proto.RegisterType((*MutateSharedCriterionResult)(nil), "google.ads.googleads.v0.services.MutateSharedCriterionResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// SharedCriterionServiceClient is the client API for SharedCriterionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type SharedCriterionServiceClient interface {
+	// Returns the requested shared criterion in full detail.
+	GetSharedCriterion(ctx context.Context, in *GetSharedCriterionRequest, opts ...grpc.CallOption) (*resources.SharedCriterion, error)
+	// Creates or removes shared criteria. Operation statuses are returned.
+	MutateSharedCriteria(ctx context.Context, in *MutateSharedCriteriaRequest, opts ...grpc.CallOption) (*MutateSharedCriteriaResponse, error)
+}
+
+type sharedCriterionServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewSharedCriterionServiceClient(cc *grpc.ClientConn) SharedCriterionServiceClient {
+	return &sharedCriterionServiceClient{cc}
+}
+
+func (c *sharedCriterionServiceClient) GetSharedCriterion(ctx context.Context, in *GetSharedCriterionRequest, opts ...grpc.CallOption) (*resources.SharedCriterion, error) {
+	out := new(resources.SharedCriterion)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.SharedCriterionService/GetSharedCriterion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *sharedCriterionServiceClient) MutateSharedCriteria(ctx context.Context, in *MutateSharedCriteriaRequest, opts ...grpc.CallOption) (*MutateSharedCriteriaResponse, error) {
+	out := new(MutateSharedCriteriaResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.SharedCriterionService/MutateSharedCriteria", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// SharedCriterionServiceServer is the server API for SharedCriterionService service.
+type SharedCriterionServiceServer interface {
+	// Returns the requested shared criterion in full detail.
+	GetSharedCriterion(context.Context, *GetSharedCriterionRequest) (*resources.SharedCriterion, error)
+	// Creates or removes shared criteria. Operation statuses are returned.
+	MutateSharedCriteria(context.Context, *MutateSharedCriteriaRequest) (*MutateSharedCriteriaResponse, error)
+}
+
+func RegisterSharedCriterionServiceServer(s *grpc.Server, srv SharedCriterionServiceServer) {
+	s.RegisterService(&_SharedCriterionService_serviceDesc, srv)
+}
+
+func _SharedCriterionService_GetSharedCriterion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetSharedCriterionRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedCriterionServiceServer).GetSharedCriterion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.SharedCriterionService/GetSharedCriterion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedCriterionServiceServer).GetSharedCriterion(ctx, req.(*GetSharedCriterionRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _SharedCriterionService_MutateSharedCriteria_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateSharedCriteriaRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedCriterionServiceServer).MutateSharedCriteria(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.SharedCriterionService/MutateSharedCriteria",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedCriterionServiceServer).MutateSharedCriteria(ctx, req.(*MutateSharedCriteriaRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _SharedCriterionService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.SharedCriterionService",
+	HandlerType: (*SharedCriterionServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSharedCriterion",
+			Handler:    _SharedCriterionService_GetSharedCriterion_Handler,
+		},
+		{
+			MethodName: "MutateSharedCriteria",
+			Handler:    _SharedCriterionService_MutateSharedCriteria_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/shared_criterion_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/shared_criterion_service.proto", fileDescriptor_shared_criterion_service_6b64ffbc632397a6)
+}
+
+var fileDescriptor_shared_criterion_service_6b64ffbc632397a6 = []byte{
+	// 538 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x3f, 0x6f, 0xd3, 0x40,
+	0x14, 0xc0, 0x71, 0x22, 0x05, 0xf5, 0x02, 0xcb, 0x09, 0xa1, 0x90, 0x56, 0x22, 0x32, 0x0c, 0x55,
+	0x86, 0xb3, 0xe5, 0x2e, 0x51, 0xaa, 0x14, 0x12, 0x86, 0x14, 0x89, 0x3f, 0x95, 0x2b, 0x15, 0xa9,
+	0x8a, 0x14, 0x1d, 0xf6, 0x93, 0xb1, 0x14, 0xfb, 0xcc, 0xdd, 0x39, 0x0c, 0x55, 0x17, 0xbe, 0x00,
+	0x03, 0x1b, 0x23, 0x23, 0x23, 0x5f, 0x80, 0x9d, 0x15, 0x31, 0xb1, 0xf2, 0x41, 0xd0, 0xf9, 0x7c,
+	0xa1, 0x0d, 0xb6, 0x82, 0xb2, 0x3d, 0xfb, 0xde, 0xfb, 0xbd, 0xff, 0x0f, 0x3d, 0x8a, 0x18, 0x8b,
+	0x16, 0xe0, 0xd0, 0x50, 0x38, 0x5a, 0x54, 0xd2, 0xd2, 0x75, 0x04, 0xf0, 0x65, 0x1c, 0x80, 0x70,
+	0xc4, 0x1b, 0xca, 0x21, 0x9c, 0x07, 0x3c, 0x96, 0xc0, 0x63, 0x96, 0xce, 0xcb, 0x17, 0x92, 0x71,
+	0x26, 0x19, 0xee, 0x69, 0x2b, 0x42, 0x43, 0x41, 0x56, 0x00, 0xb2, 0x74, 0x89, 0x01, 0x74, 0x07,
+	0x75, 0x2e, 0x38, 0x08, 0x96, 0xf3, 0x2a, 0x1f, 0x9a, 0xdd, 0xdd, 0x33, 0x96, 0x59, 0xec, 0xd0,
+	0x34, 0x65, 0x92, 0xca, 0x98, 0xa5, 0x42, 0xbf, 0xda, 0x8f, 0xd1, 0xbd, 0x29, 0xc8, 0xd3, 0xc2,
+	0xf4, 0x89, 0xb1, 0xf4, 0xe1, 0x6d, 0x0e, 0x42, 0xe2, 0x07, 0xe8, 0xb6, 0xc1, 0xcf, 0x53, 0x9a,
+	0x40, 0xc7, 0xea, 0x59, 0xfb, 0x3b, 0xfe, 0x2d, 0xf3, 0xf3, 0x05, 0x4d, 0xc0, 0xfe, 0x64, 0xa1,
+	0xdd, 0xe7, 0xb9, 0xa4, 0x12, 0xae, 0x51, 0xa8, 0x81, 0xdc, 0x47, 0xed, 0x20, 0x17, 0x92, 0x25,
+	0xc0, 0xe7, 0x71, 0x58, 0x22, 0x90, 0xf9, 0xf5, 0x34, 0xc4, 0xe7, 0x08, 0xb1, 0x0c, 0xb8, 0x0e,
+	0xab, 0xd3, 0xe8, 0x35, 0xf7, 0xdb, 0xde, 0x90, 0x6c, 0xaa, 0x08, 0x59, 0x8b, 0xf9, 0xa5, 0x41,
+	0xf8, 0x57, 0x68, 0xf6, 0x07, 0x0b, 0x75, 0xea, 0x14, 0xf1, 0x33, 0xd4, 0x0a, 0x38, 0x50, 0xa9,
+	0xf3, 0x6a, 0x7b, 0x5e, 0xad, 0xd3, 0x55, 0x91, 0xd7, 0xbd, 0x1e, 0xdf, 0xf0, 0x4b, 0x06, 0xee,
+	0xa0, 0x16, 0x87, 0x84, 0x2d, 0xa1, 0xd3, 0x54, 0x29, 0xaa, 0x17, 0xfd, 0x3d, 0x69, 0xa3, 0x9d,
+	0x55, 0x48, 0xf6, 0x3b, 0xb4, 0x57, 0x5d, 0x2d, 0x91, 0xb1, 0x54, 0x00, 0x7e, 0x85, 0x6e, 0x72,
+	0x10, 0xf9, 0x42, 0x9a, 0x52, 0x8c, 0x36, 0x97, 0xa2, 0x02, 0xa8, 0x9a, 0xa8, 0x28, 0xbe, 0xa1,
+	0xd9, 0x93, 0xca, 0x36, 0x19, 0xbd, 0xff, 0xea, 0xb5, 0xf7, 0xb5, 0x89, 0xee, 0xae, 0x99, 0x9f,
+	0xea, 0x20, 0xf0, 0x37, 0x0b, 0xe1, 0x7f, 0x27, 0x09, 0x1f, 0x6e, 0x8e, 0xbe, 0x76, 0xfe, 0xba,
+	0x5b, 0x34, 0xc4, 0x1e, 0xbc, 0xff, 0xf1, 0xfb, 0x63, 0xc3, 0xc3, 0xae, 0x5a, 0x8e, 0x8b, 0x6b,
+	0x29, 0x8d, 0xcc, 0xd0, 0x09, 0xa7, 0x5f, 0x6e, 0x8b, 0x29, 0xbf, 0xd3, 0xbf, 0xc4, 0x3f, 0x2d,
+	0x74, 0xa7, 0xaa, 0x35, 0x78, 0xbb, 0x0e, 0x98, 0x05, 0xe8, 0x1e, 0x6d, 0x6b, 0xae, 0x27, 0xc2,
+	0x3e, 0x2a, 0x32, 0x1a, 0xd8, 0x07, 0x2a, 0xa3, 0xbf, 0x29, 0x5c, 0x5c, 0xd9, 0xaa, 0x51, 0xff,
+	0x72, 0x2d, 0xa1, 0x61, 0x52, 0x20, 0x87, 0x56, 0x7f, 0xf2, 0xcb, 0x42, 0x0f, 0x03, 0x96, 0x6c,
+	0x8c, 0x62, 0xb2, 0x5b, 0xdd, 0xda, 0x13, 0x75, 0x28, 0x4e, 0xac, 0xf3, 0xe3, 0x12, 0x10, 0xb1,
+	0x05, 0x4d, 0x23, 0xc2, 0x78, 0xe4, 0x44, 0x90, 0x16, 0x67, 0xc4, 0x9c, 0xa4, 0x2c, 0x16, 0xf5,
+	0x47, 0xf0, 0xd0, 0x08, 0x9f, 0x1b, 0xcd, 0xe9, 0x78, 0xfc, 0xa5, 0xd1, 0x9b, 0x6a, 0xe0, 0x38,
+	0x14, 0x44, 0x8b, 0x4a, 0x3a, 0x73, 0x49, 0xe9, 0x58, 0x7c, 0x37, 0x2a, 0xb3, 0x71, 0x28, 0x66,
+	0x2b, 0x95, 0xd9, 0x99, 0x3b, 0x33, 0x2a, 0xaf, 0x5b, 0x45, 0x00, 0x07, 0x7f, 0x02, 0x00, 0x00,
+	0xff, 0xff, 0x08, 0x0f, 0x51, 0xc4, 0x84, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/shared_set_service.pb.go b/googleapis/ads/googleads/v0/services/shared_set_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..878d6e302d77ab46ad3e711d6382c0fc7e9b47e1
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/shared_set_service.pb.go
@@ -0,0 +1,544 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/shared_set_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [SharedSetService.GetSharedSet][google.ads.googleads.v0.services.SharedSetService.GetSharedSet].
+type GetSharedSetRequest struct {
+	// The resource name of the shared set to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetSharedSetRequest) Reset()         { *m = GetSharedSetRequest{} }
+func (m *GetSharedSetRequest) String() string { return proto.CompactTextString(m) }
+func (*GetSharedSetRequest) ProtoMessage()    {}
+func (*GetSharedSetRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_service_72af1c4c98b2939a, []int{0}
+}
+func (m *GetSharedSetRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetSharedSetRequest.Unmarshal(m, b)
+}
+func (m *GetSharedSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetSharedSetRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetSharedSetRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetSharedSetRequest.Merge(dst, src)
+}
+func (m *GetSharedSetRequest) XXX_Size() int {
+	return xxx_messageInfo_GetSharedSetRequest.Size(m)
+}
+func (m *GetSharedSetRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetSharedSetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetSharedSetRequest proto.InternalMessageInfo
+
+func (m *GetSharedSetRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [SharedSetService.MutateSharedSets][google.ads.googleads.v0.services.SharedSetService.MutateSharedSets].
+type MutateSharedSetsRequest struct {
+	// The ID of the customer whose shared sets are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual shared sets.
+	Operations           []*SharedSetOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *MutateSharedSetsRequest) Reset()         { *m = MutateSharedSetsRequest{} }
+func (m *MutateSharedSetsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedSetsRequest) ProtoMessage()    {}
+func (*MutateSharedSetsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_service_72af1c4c98b2939a, []int{1}
+}
+func (m *MutateSharedSetsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedSetsRequest.Unmarshal(m, b)
+}
+func (m *MutateSharedSetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedSetsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateSharedSetsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedSetsRequest.Merge(dst, src)
+}
+func (m *MutateSharedSetsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedSetsRequest.Size(m)
+}
+func (m *MutateSharedSetsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedSetsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedSetsRequest proto.InternalMessageInfo
+
+func (m *MutateSharedSetsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateSharedSetsRequest) GetOperations() []*SharedSetOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update, remove) on an shared set.
+type SharedSetOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*SharedSetOperation_Create
+	//	*SharedSetOperation_Update
+	//	*SharedSetOperation_Remove
+	Operation            isSharedSetOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *SharedSetOperation) Reset()         { *m = SharedSetOperation{} }
+func (m *SharedSetOperation) String() string { return proto.CompactTextString(m) }
+func (*SharedSetOperation) ProtoMessage()    {}
+func (*SharedSetOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_service_72af1c4c98b2939a, []int{2}
+}
+func (m *SharedSetOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SharedSetOperation.Unmarshal(m, b)
+}
+func (m *SharedSetOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SharedSetOperation.Marshal(b, m, deterministic)
+}
+func (dst *SharedSetOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SharedSetOperation.Merge(dst, src)
+}
+func (m *SharedSetOperation) XXX_Size() int {
+	return xxx_messageInfo_SharedSetOperation.Size(m)
+}
+func (m *SharedSetOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_SharedSetOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SharedSetOperation proto.InternalMessageInfo
+
+func (m *SharedSetOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isSharedSetOperation_Operation interface {
+	isSharedSetOperation_Operation()
+}
+
+type SharedSetOperation_Create struct {
+	Create *resources.SharedSet `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type SharedSetOperation_Update struct {
+	Update *resources.SharedSet `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type SharedSetOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*SharedSetOperation_Create) isSharedSetOperation_Operation() {}
+
+func (*SharedSetOperation_Update) isSharedSetOperation_Operation() {}
+
+func (*SharedSetOperation_Remove) isSharedSetOperation_Operation() {}
+
+func (m *SharedSetOperation) GetOperation() isSharedSetOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *SharedSetOperation) GetCreate() *resources.SharedSet {
+	if x, ok := m.GetOperation().(*SharedSetOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *SharedSetOperation) GetUpdate() *resources.SharedSet {
+	if x, ok := m.GetOperation().(*SharedSetOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *SharedSetOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*SharedSetOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*SharedSetOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _SharedSetOperation_OneofMarshaler, _SharedSetOperation_OneofUnmarshaler, _SharedSetOperation_OneofSizer, []interface{}{
+		(*SharedSetOperation_Create)(nil),
+		(*SharedSetOperation_Update)(nil),
+		(*SharedSetOperation_Remove)(nil),
+	}
+}
+
+func _SharedSetOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*SharedSetOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *SharedSetOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *SharedSetOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *SharedSetOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("SharedSetOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _SharedSetOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*SharedSetOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.SharedSet)
+		err := b.DecodeMessage(msg)
+		m.Operation = &SharedSetOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.SharedSet)
+		err := b.DecodeMessage(msg)
+		m.Operation = &SharedSetOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &SharedSetOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _SharedSetOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*SharedSetOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *SharedSetOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *SharedSetOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *SharedSetOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for a shared set mutate.
+type MutateSharedSetsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateSharedSetResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *MutateSharedSetsResponse) Reset()         { *m = MutateSharedSetsResponse{} }
+func (m *MutateSharedSetsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedSetsResponse) ProtoMessage()    {}
+func (*MutateSharedSetsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_service_72af1c4c98b2939a, []int{3}
+}
+func (m *MutateSharedSetsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedSetsResponse.Unmarshal(m, b)
+}
+func (m *MutateSharedSetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedSetsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateSharedSetsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedSetsResponse.Merge(dst, src)
+}
+func (m *MutateSharedSetsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedSetsResponse.Size(m)
+}
+func (m *MutateSharedSetsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedSetsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedSetsResponse proto.InternalMessageInfo
+
+func (m *MutateSharedSetsResponse) GetResults() []*MutateSharedSetResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the shared set mutate.
+type MutateSharedSetResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateSharedSetResult) Reset()         { *m = MutateSharedSetResult{} }
+func (m *MutateSharedSetResult) String() string { return proto.CompactTextString(m) }
+func (*MutateSharedSetResult) ProtoMessage()    {}
+func (*MutateSharedSetResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_shared_set_service_72af1c4c98b2939a, []int{4}
+}
+func (m *MutateSharedSetResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateSharedSetResult.Unmarshal(m, b)
+}
+func (m *MutateSharedSetResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateSharedSetResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateSharedSetResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateSharedSetResult.Merge(dst, src)
+}
+func (m *MutateSharedSetResult) XXX_Size() int {
+	return xxx_messageInfo_MutateSharedSetResult.Size(m)
+}
+func (m *MutateSharedSetResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateSharedSetResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateSharedSetResult proto.InternalMessageInfo
+
+func (m *MutateSharedSetResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetSharedSetRequest)(nil), "google.ads.googleads.v0.services.GetSharedSetRequest")
+	proto.RegisterType((*MutateSharedSetsRequest)(nil), "google.ads.googleads.v0.services.MutateSharedSetsRequest")
+	proto.RegisterType((*SharedSetOperation)(nil), "google.ads.googleads.v0.services.SharedSetOperation")
+	proto.RegisterType((*MutateSharedSetsResponse)(nil), "google.ads.googleads.v0.services.MutateSharedSetsResponse")
+	proto.RegisterType((*MutateSharedSetResult)(nil), "google.ads.googleads.v0.services.MutateSharedSetResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// SharedSetServiceClient is the client API for SharedSetService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type SharedSetServiceClient interface {
+	// Returns the requested shared set in full detail.
+	GetSharedSet(ctx context.Context, in *GetSharedSetRequest, opts ...grpc.CallOption) (*resources.SharedSet, error)
+	// Creates, updates, or removes shared sets. Operation statuses are returned.
+	MutateSharedSets(ctx context.Context, in *MutateSharedSetsRequest, opts ...grpc.CallOption) (*MutateSharedSetsResponse, error)
+}
+
+type sharedSetServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewSharedSetServiceClient(cc *grpc.ClientConn) SharedSetServiceClient {
+	return &sharedSetServiceClient{cc}
+}
+
+func (c *sharedSetServiceClient) GetSharedSet(ctx context.Context, in *GetSharedSetRequest, opts ...grpc.CallOption) (*resources.SharedSet, error) {
+	out := new(resources.SharedSet)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.SharedSetService/GetSharedSet", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *sharedSetServiceClient) MutateSharedSets(ctx context.Context, in *MutateSharedSetsRequest, opts ...grpc.CallOption) (*MutateSharedSetsResponse, error) {
+	out := new(MutateSharedSetsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.SharedSetService/MutateSharedSets", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// SharedSetServiceServer is the server API for SharedSetService service.
+type SharedSetServiceServer interface {
+	// Returns the requested shared set in full detail.
+	GetSharedSet(context.Context, *GetSharedSetRequest) (*resources.SharedSet, error)
+	// Creates, updates, or removes shared sets. Operation statuses are returned.
+	MutateSharedSets(context.Context, *MutateSharedSetsRequest) (*MutateSharedSetsResponse, error)
+}
+
+func RegisterSharedSetServiceServer(s *grpc.Server, srv SharedSetServiceServer) {
+	s.RegisterService(&_SharedSetService_serviceDesc, srv)
+}
+
+func _SharedSetService_GetSharedSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetSharedSetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedSetServiceServer).GetSharedSet(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.SharedSetService/GetSharedSet",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedSetServiceServer).GetSharedSet(ctx, req.(*GetSharedSetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _SharedSetService_MutateSharedSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateSharedSetsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SharedSetServiceServer).MutateSharedSets(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.SharedSetService/MutateSharedSets",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SharedSetServiceServer).MutateSharedSets(ctx, req.(*MutateSharedSetsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _SharedSetService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.SharedSetService",
+	HandlerType: (*SharedSetServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSharedSet",
+			Handler:    _SharedSetService_GetSharedSet_Handler,
+		},
+		{
+			MethodName: "MutateSharedSets",
+			Handler:    _SharedSetService_MutateSharedSets_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/shared_set_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/shared_set_service.proto", fileDescriptor_shared_set_service_72af1c4c98b2939a)
+}
+
+var fileDescriptor_shared_set_service_72af1c4c98b2939a = []byte{
+	// 592 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6e, 0xd3, 0x4c,
+	0x10, 0xfe, 0xed, 0xfc, 0x0a, 0xea, 0xba, 0x48, 0xd5, 0xa2, 0x0a, 0x2b, 0x42, 0x22, 0x32, 0x1c,
+	0xa2, 0xa8, 0x5a, 0x47, 0x21, 0x08, 0x35, 0xa5, 0x87, 0xe4, 0xd0, 0x94, 0x43, 0xa1, 0x38, 0xa8,
+	0x07, 0x14, 0x29, 0xda, 0xc6, 0x53, 0x63, 0x35, 0xf6, 0x1a, 0xef, 0x3a, 0x97, 0xaa, 0x17, 0x0e,
+	0x88, 0x23, 0x12, 0x6f, 0xc0, 0x0d, 0xde, 0x83, 0x0b, 0x57, 0xc4, 0x1b, 0xf0, 0x20, 0x68, 0xbd,
+	0x5e, 0x37, 0x4d, 0x1b, 0x85, 0xf6, 0x36, 0x5e, 0x7f, 0xdf, 0x37, 0xb3, 0xdf, 0xcc, 0x2c, 0xda,
+	0x0e, 0x18, 0x0b, 0xa6, 0xe0, 0x52, 0x9f, 0xbb, 0x2a, 0x94, 0xd1, 0xac, 0xe5, 0x72, 0x48, 0x67,
+	0xe1, 0x04, 0xb8, 0xcb, 0xdf, 0xd1, 0x14, 0xfc, 0x31, 0x07, 0x31, 0x2e, 0xce, 0x48, 0x92, 0x32,
+	0xc1, 0x70, 0x5d, 0xe1, 0x09, 0xf5, 0x39, 0x29, 0xa9, 0x64, 0xd6, 0x22, 0x9a, 0x5a, 0x6b, 0x2f,
+	0x13, 0x4f, 0x81, 0xb3, 0x2c, 0xbd, 0xac, 0xae, 0x54, 0x6b, 0x0f, 0x34, 0x27, 0x09, 0x5d, 0x1a,
+	0xc7, 0x4c, 0x50, 0x11, 0xb2, 0x98, 0x17, 0x7f, 0x8b, 0x9c, 0x6e, 0xfe, 0x75, 0x9c, 0x9d, 0xb8,
+	0x27, 0x21, 0x4c, 0xfd, 0x71, 0x44, 0xf9, 0xa9, 0x42, 0x38, 0x5d, 0x74, 0x6f, 0x00, 0x62, 0x98,
+	0xcb, 0x0e, 0x41, 0x78, 0xf0, 0x3e, 0x03, 0x2e, 0xf0, 0x23, 0x74, 0x57, 0x27, 0x1d, 0xc7, 0x34,
+	0x02, 0xdb, 0xa8, 0x1b, 0x8d, 0x35, 0x6f, 0x5d, 0x1f, 0xbe, 0xa4, 0x11, 0x38, 0x9f, 0x0d, 0x74,
+	0xff, 0x20, 0x13, 0x54, 0x40, 0xc9, 0xe7, 0x5a, 0xe0, 0x21, 0xb2, 0x26, 0x19, 0x17, 0x2c, 0x82,
+	0x74, 0x1c, 0xfa, 0x05, 0x1d, 0xe9, 0xa3, 0x17, 0x3e, 0x7e, 0x83, 0x10, 0x4b, 0x20, 0x55, 0xe5,
+	0xda, 0x66, 0xbd, 0xd2, 0xb0, 0xda, 0x1d, 0xb2, 0xca, 0x23, 0x52, 0x66, 0x7a, 0xa5, 0xc9, 0xde,
+	0x9c, 0x8e, 0xf3, 0xc9, 0x44, 0xf8, 0x2a, 0x04, 0xef, 0x20, 0x2b, 0x4b, 0x7c, 0x2a, 0x20, 0xbf,
+	0xba, 0xfd, 0x7f, 0xdd, 0x68, 0x58, 0xed, 0x9a, 0xce, 0xa6, 0xdd, 0x21, 0x7b, 0xd2, 0x9d, 0x03,
+	0xca, 0x4f, 0x3d, 0xa4, 0xe0, 0x32, 0xc6, 0x7b, 0xa8, 0x3a, 0x49, 0x81, 0x0a, 0x65, 0x82, 0xd5,
+	0xde, 0x5a, 0x5a, 0x65, 0xd9, 0xa7, 0x8b, 0x32, 0xf7, 0xff, 0xf3, 0x0a, 0xb6, 0xd4, 0x51, 0xaa,
+	0xb6, 0x79, 0x3b, 0x1d, 0xc5, 0xc6, 0x36, 0xaa, 0xa6, 0x10, 0xb1, 0x19, 0xd8, 0x15, 0xe9, 0xaa,
+	0xfc, 0xa3, 0xbe, 0xfb, 0x16, 0x5a, 0x2b, 0xbd, 0x70, 0x22, 0x64, 0x5f, 0x6d, 0x0e, 0x4f, 0x58,
+	0xcc, 0x01, 0xbf, 0x46, 0x77, 0x52, 0xe0, 0xd9, 0x54, 0x68, 0xe7, 0x9f, 0xad, 0x76, 0x7e, 0x41,
+	0xcc, 0xcb, 0xf9, 0x9e, 0xd6, 0x71, 0x9e, 0xa3, 0xcd, 0x6b, 0x11, 0xff, 0x34, 0x4a, 0xed, 0x8f,
+	0x15, 0xb4, 0x51, 0x12, 0x87, 0x2a, 0x25, 0xfe, 0x66, 0xa0, 0xf5, 0xf9, 0xe1, 0xc4, 0x4f, 0x57,
+	0x57, 0x79, 0xcd, 0x30, 0xd7, 0x6e, 0x64, 0xb4, 0xd3, 0xf9, 0xf0, 0xeb, 0xcf, 0x17, 0x93, 0xe0,
+	0x2d, 0xb9, 0x79, 0x67, 0x97, 0x4a, 0xdf, 0xd5, 0xf3, 0xcb, 0xdd, 0x66, 0xb1, 0x8a, 0xd2, 0x56,
+	0xb7, 0x79, 0x8e, 0x7f, 0x18, 0x68, 0x63, 0xd1, 0x6e, 0xbc, 0x7d, 0x63, 0x57, 0xf5, 0xfe, 0xd4,
+	0xba, 0xb7, 0xa1, 0xaa, 0xee, 0x3a, 0xdd, 0xfc, 0x06, 0x1d, 0xc7, 0x95, 0x37, 0xb8, 0x28, 0xf9,
+	0x6c, 0x6e, 0x21, 0x77, 0x9b, 0xe7, 0x73, 0x17, 0xe8, 0x46, 0xb9, 0x54, 0xd7, 0x68, 0xf6, 0x7f,
+	0x1b, 0xe8, 0xf1, 0x84, 0x45, 0x2b, 0xb3, 0xf7, 0x37, 0x17, 0xdb, 0x75, 0x28, 0xb7, 0xe8, 0xd0,
+	0x78, 0xbb, 0x5f, 0x50, 0x03, 0x36, 0xa5, 0x71, 0x40, 0x58, 0x1a, 0xb8, 0x01, 0xc4, 0xf9, 0x8e,
+	0xe9, 0x57, 0x2d, 0x09, 0xf9, 0xf2, 0x17, 0x74, 0x47, 0x07, 0x5f, 0xcd, 0xca, 0xa0, 0xd7, 0xfb,
+	0x6e, 0xd6, 0x07, 0x4a, 0xb0, 0xe7, 0x73, 0xa2, 0x42, 0x19, 0x1d, 0xb5, 0x48, 0x91, 0x98, 0xff,
+	0xd4, 0x90, 0x51, 0xcf, 0xe7, 0xa3, 0x12, 0x32, 0x3a, 0x6a, 0x8d, 0x34, 0xe4, 0xb8, 0x9a, 0x17,
+	0xf0, 0xe4, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xd6, 0x84, 0x2a, 0xc1, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/topic_constant_service.pb.go b/googleapis/ads/googleads/v0/services/topic_constant_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..68e52f15352498bac9ace92e31697952bd584f57
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/topic_constant_service.pb.go
@@ -0,0 +1,173 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/topic_constant_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [TopicConstantService.GetTopicConstant][google.ads.googleads.v0.services.TopicConstantService.GetTopicConstant].
+type GetTopicConstantRequest struct {
+	// Resource name of the Topic to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetTopicConstantRequest) Reset()         { *m = GetTopicConstantRequest{} }
+func (m *GetTopicConstantRequest) String() string { return proto.CompactTextString(m) }
+func (*GetTopicConstantRequest) ProtoMessage()    {}
+func (*GetTopicConstantRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_topic_constant_service_c8fc87677409bd0b, []int{0}
+}
+func (m *GetTopicConstantRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetTopicConstantRequest.Unmarshal(m, b)
+}
+func (m *GetTopicConstantRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetTopicConstantRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetTopicConstantRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetTopicConstantRequest.Merge(dst, src)
+}
+func (m *GetTopicConstantRequest) XXX_Size() int {
+	return xxx_messageInfo_GetTopicConstantRequest.Size(m)
+}
+func (m *GetTopicConstantRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetTopicConstantRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetTopicConstantRequest proto.InternalMessageInfo
+
+func (m *GetTopicConstantRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetTopicConstantRequest)(nil), "google.ads.googleads.v0.services.GetTopicConstantRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// TopicConstantServiceClient is the client API for TopicConstantService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type TopicConstantServiceClient interface {
+	// Returns the requested topic constant in full detail.
+	GetTopicConstant(ctx context.Context, in *GetTopicConstantRequest, opts ...grpc.CallOption) (*resources.TopicConstant, error)
+}
+
+type topicConstantServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewTopicConstantServiceClient(cc *grpc.ClientConn) TopicConstantServiceClient {
+	return &topicConstantServiceClient{cc}
+}
+
+func (c *topicConstantServiceClient) GetTopicConstant(ctx context.Context, in *GetTopicConstantRequest, opts ...grpc.CallOption) (*resources.TopicConstant, error) {
+	out := new(resources.TopicConstant)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.TopicConstantService/GetTopicConstant", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// TopicConstantServiceServer is the server API for TopicConstantService service.
+type TopicConstantServiceServer interface {
+	// Returns the requested topic constant in full detail.
+	GetTopicConstant(context.Context, *GetTopicConstantRequest) (*resources.TopicConstant, error)
+}
+
+func RegisterTopicConstantServiceServer(s *grpc.Server, srv TopicConstantServiceServer) {
+	s.RegisterService(&_TopicConstantService_serviceDesc, srv)
+}
+
+func _TopicConstantService_GetTopicConstant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetTopicConstantRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TopicConstantServiceServer).GetTopicConstant(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.TopicConstantService/GetTopicConstant",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TopicConstantServiceServer).GetTopicConstant(ctx, req.(*GetTopicConstantRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _TopicConstantService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.TopicConstantService",
+	HandlerType: (*TopicConstantServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetTopicConstant",
+			Handler:    _TopicConstantService_GetTopicConstant_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/topic_constant_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/topic_constant_service.proto", fileDescriptor_topic_constant_service_c8fc87677409bd0b)
+}
+
+var fileDescriptor_topic_constant_service_c8fc87677409bd0b = []byte{
+	// 332 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4d, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0x92, 0xfc, 0x82, 0xcc, 0xe4, 0xf8, 0xe4, 0xfc, 0xbc,
+	0xe2, 0x92, 0xc4, 0xbc, 0x92, 0x78, 0xa8, 0xb8, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02,
+	0x44, 0x8f, 0x5e, 0x62, 0x4a, 0xb1, 0x1e, 0x5c, 0xbb, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xbb, 0x94,
+	0x19, 0x2e, 0x0b, 0x8a, 0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0x30, 0x6d, 0x80, 0x98, 0x2c, 0x25, 0x03,
+	0xd3, 0x57, 0x90, 0xa9, 0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c,
+	0x91, 0x55, 0xb2, 0xe3, 0x12, 0x77, 0x4f, 0x2d, 0x09, 0x01, 0x69, 0x74, 0x86, 0xea, 0x0b, 0x4a,
+	0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0x11, 0x52, 0xe6, 0xe2, 0x85, 0x19, 0x1d, 0x9f, 0x97, 0x98, 0x9b,
+	0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x03, 0x13, 0xf4, 0x4b, 0xcc, 0x4d, 0x35, 0x3a,
+	0xc6, 0xc8, 0x25, 0x82, 0xa2, 0x3b, 0x18, 0xe2, 0x5e, 0xa1, 0xb5, 0x8c, 0x5c, 0x02, 0xe8, 0x26,
+	0x0b, 0x59, 0xea, 0x11, 0xf2, 0xa6, 0x1e, 0x0e, 0xd7, 0x48, 0x19, 0xe0, 0xd4, 0x0a, 0xf7, 0xbf,
+	0x1e, 0x8a, 0x46, 0x25, 0x9d, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0xa9, 0x09, 0xa9, 0x80, 0x02, 0xa9,
+	0x1a, 0xc5, 0x2b, 0xb6, 0x25, 0xc8, 0x2a, 0x8b, 0xf5, 0xb5, 0x6a, 0x9d, 0x6e, 0x32, 0x72, 0xa9,
+	0x24, 0xe7, 0xe7, 0x12, 0x74, 0xa0, 0x93, 0x24, 0x36, 0xef, 0x06, 0x80, 0x02, 0x33, 0x80, 0x31,
+	0xca, 0x03, 0xaa, 0x3d, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d,
+	0x35, 0x0f, 0x1c, 0xd4, 0xb0, 0x48, 0x2b, 0xc8, 0x2c, 0xc6, 0x9d, 0x48, 0xac, 0x61, 0x8c, 0x45,
+	0x4c, 0xcc, 0xee, 0x8e, 0x8e, 0xab, 0x98, 0x14, 0xdc, 0x21, 0x06, 0x3a, 0xa6, 0x14, 0xeb, 0x41,
+	0x98, 0x20, 0x56, 0x98, 0x81, 0x1e, 0xd4, 0xe2, 0xe2, 0x53, 0x30, 0x25, 0x31, 0x8e, 0x29, 0xc5,
+	0x31, 0x70, 0x25, 0x31, 0x61, 0x06, 0x31, 0x30, 0x25, 0x49, 0x6c, 0x60, 0x07, 0x18, 0x03, 0x02,
+	0x00, 0x00, 0xff, 0xff, 0xf5, 0x57, 0x93, 0xec, 0xa4, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/topic_view_service.pb.go b/googleapis/ads/googleads/v0/services/topic_view_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..bd16847b5a4e52a7ebd89ff82668daf6955cd286
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/topic_view_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/topic_view_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [TopicViewService.GetTopicView][google.ads.googleads.v0.services.TopicViewService.GetTopicView].
+type GetTopicViewRequest struct {
+	// The resource name of the topic view to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetTopicViewRequest) Reset()         { *m = GetTopicViewRequest{} }
+func (m *GetTopicViewRequest) String() string { return proto.CompactTextString(m) }
+func (*GetTopicViewRequest) ProtoMessage()    {}
+func (*GetTopicViewRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_topic_view_service_1a9d16bda8fc03d3, []int{0}
+}
+func (m *GetTopicViewRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetTopicViewRequest.Unmarshal(m, b)
+}
+func (m *GetTopicViewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetTopicViewRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetTopicViewRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetTopicViewRequest.Merge(dst, src)
+}
+func (m *GetTopicViewRequest) XXX_Size() int {
+	return xxx_messageInfo_GetTopicViewRequest.Size(m)
+}
+func (m *GetTopicViewRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetTopicViewRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetTopicViewRequest proto.InternalMessageInfo
+
+func (m *GetTopicViewRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetTopicViewRequest)(nil), "google.ads.googleads.v0.services.GetTopicViewRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// TopicViewServiceClient is the client API for TopicViewService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type TopicViewServiceClient interface {
+	// Returns the requested topic view in full detail.
+	GetTopicView(ctx context.Context, in *GetTopicViewRequest, opts ...grpc.CallOption) (*resources.TopicView, error)
+}
+
+type topicViewServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewTopicViewServiceClient(cc *grpc.ClientConn) TopicViewServiceClient {
+	return &topicViewServiceClient{cc}
+}
+
+func (c *topicViewServiceClient) GetTopicView(ctx context.Context, in *GetTopicViewRequest, opts ...grpc.CallOption) (*resources.TopicView, error) {
+	out := new(resources.TopicView)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.TopicViewService/GetTopicView", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// TopicViewServiceServer is the server API for TopicViewService service.
+type TopicViewServiceServer interface {
+	// Returns the requested topic view in full detail.
+	GetTopicView(context.Context, *GetTopicViewRequest) (*resources.TopicView, error)
+}
+
+func RegisterTopicViewServiceServer(s *grpc.Server, srv TopicViewServiceServer) {
+	s.RegisterService(&_TopicViewService_serviceDesc, srv)
+}
+
+func _TopicViewService_GetTopicView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetTopicViewRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TopicViewServiceServer).GetTopicView(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.TopicViewService/GetTopicView",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TopicViewServiceServer).GetTopicView(ctx, req.(*GetTopicViewRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _TopicViewService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.TopicViewService",
+	HandlerType: (*TopicViewServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetTopicView",
+			Handler:    _TopicViewService_GetTopicView_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/topic_view_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/topic_view_service.proto", fileDescriptor_topic_view_service_1a9d16bda8fc03d3)
+}
+
+var fileDescriptor_topic_view_service_1a9d16bda8fc03d3 = []byte{
+	// 341 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4c, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0x92, 0xfc, 0x82, 0xcc, 0xe4, 0xf8, 0xb2, 0xcc, 0xd4,
+	0xf2, 0x78, 0xa8, 0x98, 0x5e, 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x02, 0x44, 0xbd, 0x5e, 0x62,
+	0x4a, 0xb1, 0x1e, 0x5c, 0xab, 0x5e, 0x99, 0x81, 0x1e, 0x4c, 0xab, 0x94, 0x11, 0x2e, 0xc3, 0x8b,
+	0x52, 0x8b, 0xf3, 0x4b, 0x8b, 0x50, 0x4d, 0x87, 0x98, 0x2a, 0x25, 0x03, 0xd3, 0x53, 0x90, 0xa9,
+	0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c, 0x91, 0x55, 0xb2, 0xe2,
+	0x12, 0x76, 0x4f, 0x2d, 0x09, 0x01, 0x69, 0x0a, 0xcb, 0x4c, 0x2d, 0x0f, 0x4a, 0x2d, 0x2c, 0x4d,
+	0x2d, 0x2e, 0x11, 0x52, 0xe6, 0xe2, 0x85, 0x19, 0x19, 0x9f, 0x97, 0x98, 0x9b, 0x2a, 0xc1, 0xa8,
+	0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x03, 0x13, 0xf4, 0x4b, 0xcc, 0x4d, 0x35, 0xda, 0xc7, 0xc8, 0x25,
+	0x00, 0xd7, 0x19, 0x0c, 0x71, 0xa3, 0xd0, 0x4a, 0x46, 0x2e, 0x1e, 0x64, 0x13, 0x85, 0x4c, 0xf5,
+	0x08, 0x79, 0x4b, 0x0f, 0x8b, 0x0b, 0xa4, 0x74, 0x70, 0x6a, 0x83, 0xfb, 0x55, 0x0f, 0xae, 0x49,
+	0xc9, 0xa4, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x7a, 0x42, 0x3a, 0xa0, 0xc0, 0xa8, 0x46, 0x71, 0xba,
+	0x6d, 0x72, 0x69, 0x71, 0x49, 0x7e, 0x6e, 0x6a, 0x51, 0xb1, 0xbe, 0x16, 0x24, 0x74, 0x40, 0x3a,
+	0x8a, 0xf5, 0xb5, 0x6a, 0x9d, 0xae, 0x32, 0x72, 0xa9, 0x24, 0xe7, 0xe7, 0x12, 0x74, 0xa0, 0x93,
+	0x28, 0xba, 0x37, 0x03, 0x40, 0x81, 0x17, 0xc0, 0x18, 0xe5, 0x01, 0xd5, 0x9a, 0x9e, 0x9f, 0x93,
+	0x98, 0x97, 0xae, 0x97, 0x5f, 0x94, 0xae, 0x9f, 0x9e, 0x9a, 0x07, 0x0e, 0x5a, 0x58, 0x04, 0x15,
+	0x64, 0x16, 0xe3, 0x4e, 0x0c, 0xd6, 0x30, 0xc6, 0x22, 0x26, 0x66, 0x77, 0x47, 0xc7, 0x55, 0x4c,
+	0x0a, 0xee, 0x10, 0x03, 0x1d, 0x53, 0x8a, 0xf5, 0x20, 0x4c, 0x10, 0x2b, 0xcc, 0x40, 0x0f, 0x6a,
+	0x71, 0xf1, 0x29, 0x98, 0x92, 0x18, 0xc7, 0x94, 0xe2, 0x18, 0xb8, 0x92, 0x98, 0x30, 0x83, 0x18,
+	0x98, 0x92, 0x24, 0x36, 0xb0, 0x03, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xf5, 0x4c,
+	0x33, 0x8c, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/user_interest_service.pb.go b/googleapis/ads/googleads/v0/services/user_interest_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7adfa639e2b0cc59ac153b83e935ede2a4ac1a83
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/user_interest_service.pb.go
@@ -0,0 +1,174 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/user_interest_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [UserInterestService.GetUserInterest][google.ads.googleads.v0.services.UserInterestService.GetUserInterest].
+type GetUserInterestRequest struct {
+	// Resource name of the UserInterest to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetUserInterestRequest) Reset()         { *m = GetUserInterestRequest{} }
+func (m *GetUserInterestRequest) String() string { return proto.CompactTextString(m) }
+func (*GetUserInterestRequest) ProtoMessage()    {}
+func (*GetUserInterestRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_interest_service_6325edec6159d584, []int{0}
+}
+func (m *GetUserInterestRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserInterestRequest.Unmarshal(m, b)
+}
+func (m *GetUserInterestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserInterestRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetUserInterestRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserInterestRequest.Merge(dst, src)
+}
+func (m *GetUserInterestRequest) XXX_Size() int {
+	return xxx_messageInfo_GetUserInterestRequest.Size(m)
+}
+func (m *GetUserInterestRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserInterestRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserInterestRequest proto.InternalMessageInfo
+
+func (m *GetUserInterestRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetUserInterestRequest)(nil), "google.ads.googleads.v0.services.GetUserInterestRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// UserInterestServiceClient is the client API for UserInterestService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type UserInterestServiceClient interface {
+	// Returns the requested user interest in full detail
+	GetUserInterest(ctx context.Context, in *GetUserInterestRequest, opts ...grpc.CallOption) (*resources.UserInterest, error)
+}
+
+type userInterestServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewUserInterestServiceClient(cc *grpc.ClientConn) UserInterestServiceClient {
+	return &userInterestServiceClient{cc}
+}
+
+func (c *userInterestServiceClient) GetUserInterest(ctx context.Context, in *GetUserInterestRequest, opts ...grpc.CallOption) (*resources.UserInterest, error) {
+	out := new(resources.UserInterest)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.UserInterestService/GetUserInterest", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// UserInterestServiceServer is the server API for UserInterestService service.
+type UserInterestServiceServer interface {
+	// Returns the requested user interest in full detail
+	GetUserInterest(context.Context, *GetUserInterestRequest) (*resources.UserInterest, error)
+}
+
+func RegisterUserInterestServiceServer(s *grpc.Server, srv UserInterestServiceServer) {
+	s.RegisterService(&_UserInterestService_serviceDesc, srv)
+}
+
+func _UserInterestService_GetUserInterest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUserInterestRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserInterestServiceServer).GetUserInterest(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.UserInterestService/GetUserInterest",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserInterestServiceServer).GetUserInterest(ctx, req.(*GetUserInterestRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _UserInterestService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.UserInterestService",
+	HandlerType: (*UserInterestServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetUserInterest",
+			Handler:    _UserInterestService_GetUserInterest_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/user_interest_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/user_interest_service.proto", fileDescriptor_user_interest_service_6325edec6159d584)
+}
+
+var fileDescriptor_user_interest_service_6325edec6159d584 = []byte{
+	// 344 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xb1, 0x4a, 0xc3, 0x40,
+	0x18, 0xc7, 0x49, 0x05, 0xc1, 0x43, 0x11, 0x22, 0x48, 0x29, 0x0e, 0xa5, 0x3a, 0x48, 0x87, 0xbb,
+	0xa8, 0x88, 0x82, 0x76, 0x48, 0x97, 0xea, 0x22, 0xa5, 0x62, 0x07, 0x09, 0x94, 0xb3, 0xf9, 0x38,
+	0x02, 0xcd, 0x5d, 0xbd, 0xef, 0xd2, 0x45, 0x5c, 0x7c, 0x05, 0xdf, 0xc0, 0xd1, 0xdd, 0x97, 0x10,
+	0x9c, 0x5c, 0x7c, 0x00, 0x1f, 0x44, 0xd2, 0xcb, 0x95, 0xaa, 0x0d, 0xdd, 0xfe, 0x5c, 0xbe, 0xdf,
+	0xff, 0xbe, 0xff, 0x3f, 0x47, 0xce, 0x85, 0x52, 0x62, 0x04, 0x8c, 0xc7, 0xc8, 0xac, 0xcc, 0xd5,
+	0x24, 0x60, 0x08, 0x7a, 0x92, 0x0c, 0x01, 0x59, 0x86, 0xa0, 0x07, 0x89, 0x34, 0xa0, 0x01, 0xcd,
+	0xa0, 0x38, 0xa6, 0x63, 0xad, 0x8c, 0xf2, 0xeb, 0x16, 0xa1, 0x3c, 0x46, 0x3a, 0xa3, 0xe9, 0x24,
+	0xa0, 0x8e, 0xae, 0x1d, 0x97, 0xf9, 0x6b, 0x40, 0x95, 0xe9, 0x7f, 0x17, 0x58, 0xe3, 0xda, 0x8e,
+	0xc3, 0xc6, 0x09, 0xe3, 0x52, 0x2a, 0xc3, 0x4d, 0xa2, 0x24, 0xda, 0xaf, 0x8d, 0x16, 0xd9, 0xee,
+	0x80, 0xb9, 0x41, 0xd0, 0x97, 0x05, 0xd6, 0x83, 0xfb, 0x0c, 0xd0, 0xf8, 0xbb, 0x64, 0xc3, 0x19,
+	0x0f, 0x24, 0x4f, 0xa1, 0xea, 0xd5, 0xbd, 0xfd, 0xb5, 0xde, 0xba, 0x3b, 0xbc, 0xe2, 0x29, 0x1c,
+	0x7e, 0x78, 0x64, 0x6b, 0x1e, 0xbe, 0xb6, 0xcb, 0xfa, 0x6f, 0x1e, 0xd9, 0xfc, 0xe3, 0xeb, 0x9f,
+	0xd2, 0x65, 0x11, 0xe9, 0xe2, 0x55, 0x6a, 0xac, 0x94, 0x9c, 0x45, 0xa7, 0xf3, 0x5c, 0xe3, 0xe4,
+	0xe9, 0xf3, 0xfb, 0xb9, 0x72, 0xe0, 0xb3, 0xbc, 0x9e, 0x87, 0x5f, 0x31, 0x5a, 0xc3, 0x0c, 0x8d,
+	0x4a, 0x41, 0x23, 0x6b, 0x4e, 0xfb, 0x72, 0x10, 0xb2, 0xe6, 0x63, 0xfb, 0xcb, 0x23, 0x7b, 0x43,
+	0x95, 0x2e, 0xdd, 0xb4, 0x5d, 0x5d, 0x90, 0xba, 0x9b, 0x37, 0xda, 0xf5, 0x6e, 0x2f, 0x0a, 0x5a,
+	0xa8, 0x11, 0x97, 0x82, 0x2a, 0x2d, 0x98, 0x00, 0x39, 0xed, 0xdb, 0xfd, 0xb8, 0x71, 0x82, 0xe5,
+	0xef, 0xe4, 0xcc, 0x89, 0x97, 0xca, 0x4a, 0x27, 0x0c, 0x5f, 0x2b, 0xf5, 0x8e, 0x35, 0x0c, 0x63,
+	0xa4, 0x56, 0xe6, 0xaa, 0x1f, 0xd0, 0xe2, 0x62, 0x7c, 0x77, 0x23, 0x51, 0x18, 0x63, 0x34, 0x1b,
+	0x89, 0xfa, 0x41, 0xe4, 0x46, 0xee, 0x56, 0xa7, 0x0b, 0x1c, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff,
+	0xb7, 0x66, 0x2b, 0x2d, 0xa7, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/user_list_service.pb.go b/googleapis/ads/googleads/v0/services/user_list_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..266f063a266a615f6d2e0daa08c198d4cb2bd99e
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/user_list_service.pb.go
@@ -0,0 +1,544 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/user_list_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [UserListService.GetUserList][google.ads.googleads.v0.services.UserListService.GetUserList].
+type GetUserListRequest struct {
+	// The resource name of the user list to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetUserListRequest) Reset()         { *m = GetUserListRequest{} }
+func (m *GetUserListRequest) String() string { return proto.CompactTextString(m) }
+func (*GetUserListRequest) ProtoMessage()    {}
+func (*GetUserListRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_service_a212d0fa5504c897, []int{0}
+}
+func (m *GetUserListRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetUserListRequest.Unmarshal(m, b)
+}
+func (m *GetUserListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetUserListRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetUserListRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetUserListRequest.Merge(dst, src)
+}
+func (m *GetUserListRequest) XXX_Size() int {
+	return xxx_messageInfo_GetUserListRequest.Size(m)
+}
+func (m *GetUserListRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetUserListRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetUserListRequest proto.InternalMessageInfo
+
+func (m *GetUserListRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+// Request message for [UserListService.MutateUserLists][google.ads.googleads.v0.services.UserListService.MutateUserLists].
+type MutateUserListsRequest struct {
+	// The ID of the customer whose user lists are being modified.
+	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
+	// The list of operations to perform on individual user lists.
+	Operations           []*UserListOperation `protobuf:"bytes,2,rep,name=operations,proto3" json:"operations,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *MutateUserListsRequest) Reset()         { *m = MutateUserListsRequest{} }
+func (m *MutateUserListsRequest) String() string { return proto.CompactTextString(m) }
+func (*MutateUserListsRequest) ProtoMessage()    {}
+func (*MutateUserListsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_service_a212d0fa5504c897, []int{1}
+}
+func (m *MutateUserListsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateUserListsRequest.Unmarshal(m, b)
+}
+func (m *MutateUserListsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateUserListsRequest.Marshal(b, m, deterministic)
+}
+func (dst *MutateUserListsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateUserListsRequest.Merge(dst, src)
+}
+func (m *MutateUserListsRequest) XXX_Size() int {
+	return xxx_messageInfo_MutateUserListsRequest.Size(m)
+}
+func (m *MutateUserListsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateUserListsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateUserListsRequest proto.InternalMessageInfo
+
+func (m *MutateUserListsRequest) GetCustomerId() string {
+	if m != nil {
+		return m.CustomerId
+	}
+	return ""
+}
+
+func (m *MutateUserListsRequest) GetOperations() []*UserListOperation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+// A single operation (create, update) on a user list.
+type UserListOperation struct {
+	// FieldMask that determines which resource fields are modified in an update.
+	UpdateMask *field_mask.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	// The mutate operation.
+	//
+	// Types that are valid to be assigned to Operation:
+	//	*UserListOperation_Create
+	//	*UserListOperation_Update
+	//	*UserListOperation_Remove
+	Operation            isUserListOperation_Operation `protobuf_oneof:"operation"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *UserListOperation) Reset()         { *m = UserListOperation{} }
+func (m *UserListOperation) String() string { return proto.CompactTextString(m) }
+func (*UserListOperation) ProtoMessage()    {}
+func (*UserListOperation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_service_a212d0fa5504c897, []int{2}
+}
+func (m *UserListOperation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserListOperation.Unmarshal(m, b)
+}
+func (m *UserListOperation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserListOperation.Marshal(b, m, deterministic)
+}
+func (dst *UserListOperation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserListOperation.Merge(dst, src)
+}
+func (m *UserListOperation) XXX_Size() int {
+	return xxx_messageInfo_UserListOperation.Size(m)
+}
+func (m *UserListOperation) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserListOperation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserListOperation proto.InternalMessageInfo
+
+func (m *UserListOperation) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+type isUserListOperation_Operation interface {
+	isUserListOperation_Operation()
+}
+
+type UserListOperation_Create struct {
+	Create *resources.UserList `protobuf:"bytes,1,opt,name=create,proto3,oneof"`
+}
+
+type UserListOperation_Update struct {
+	Update *resources.UserList `protobuf:"bytes,2,opt,name=update,proto3,oneof"`
+}
+
+type UserListOperation_Remove struct {
+	Remove string `protobuf:"bytes,3,opt,name=remove,proto3,oneof"`
+}
+
+func (*UserListOperation_Create) isUserListOperation_Operation() {}
+
+func (*UserListOperation_Update) isUserListOperation_Operation() {}
+
+func (*UserListOperation_Remove) isUserListOperation_Operation() {}
+
+func (m *UserListOperation) GetOperation() isUserListOperation_Operation {
+	if m != nil {
+		return m.Operation
+	}
+	return nil
+}
+
+func (m *UserListOperation) GetCreate() *resources.UserList {
+	if x, ok := m.GetOperation().(*UserListOperation_Create); ok {
+		return x.Create
+	}
+	return nil
+}
+
+func (m *UserListOperation) GetUpdate() *resources.UserList {
+	if x, ok := m.GetOperation().(*UserListOperation_Update); ok {
+		return x.Update
+	}
+	return nil
+}
+
+func (m *UserListOperation) GetRemove() string {
+	if x, ok := m.GetOperation().(*UserListOperation_Remove); ok {
+		return x.Remove
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*UserListOperation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _UserListOperation_OneofMarshaler, _UserListOperation_OneofUnmarshaler, _UserListOperation_OneofSizer, []interface{}{
+		(*UserListOperation_Create)(nil),
+		(*UserListOperation_Update)(nil),
+		(*UserListOperation_Remove)(nil),
+	}
+}
+
+func _UserListOperation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*UserListOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *UserListOperation_Create:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Create); err != nil {
+			return err
+		}
+	case *UserListOperation_Update:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Update); err != nil {
+			return err
+		}
+	case *UserListOperation_Remove:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Remove)
+	case nil:
+	default:
+		return fmt.Errorf("UserListOperation.Operation has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _UserListOperation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*UserListOperation)
+	switch tag {
+	case 1: // operation.create
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.UserList)
+		err := b.DecodeMessage(msg)
+		m.Operation = &UserListOperation_Create{msg}
+		return true, err
+	case 2: // operation.update
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(resources.UserList)
+		err := b.DecodeMessage(msg)
+		m.Operation = &UserListOperation_Update{msg}
+		return true, err
+	case 3: // operation.remove
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Operation = &UserListOperation_Remove{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _UserListOperation_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*UserListOperation)
+	// operation
+	switch x := m.Operation.(type) {
+	case *UserListOperation_Create:
+		s := proto.Size(x.Create)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *UserListOperation_Update:
+		s := proto.Size(x.Update)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *UserListOperation_Remove:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.Remove)))
+		n += len(x.Remove)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Response message for user list mutate.
+type MutateUserListsResponse struct {
+	// All results for the mutate.
+	Results              []*MutateUserListResult `protobuf:"bytes,2,rep,name=results,proto3" json:"results,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *MutateUserListsResponse) Reset()         { *m = MutateUserListsResponse{} }
+func (m *MutateUserListsResponse) String() string { return proto.CompactTextString(m) }
+func (*MutateUserListsResponse) ProtoMessage()    {}
+func (*MutateUserListsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_service_a212d0fa5504c897, []int{3}
+}
+func (m *MutateUserListsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateUserListsResponse.Unmarshal(m, b)
+}
+func (m *MutateUserListsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateUserListsResponse.Marshal(b, m, deterministic)
+}
+func (dst *MutateUserListsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateUserListsResponse.Merge(dst, src)
+}
+func (m *MutateUserListsResponse) XXX_Size() int {
+	return xxx_messageInfo_MutateUserListsResponse.Size(m)
+}
+func (m *MutateUserListsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateUserListsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateUserListsResponse proto.InternalMessageInfo
+
+func (m *MutateUserListsResponse) GetResults() []*MutateUserListResult {
+	if m != nil {
+		return m.Results
+	}
+	return nil
+}
+
+// The result for the user list mutate.
+type MutateUserListResult struct {
+	// Returned for successful operations.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MutateUserListResult) Reset()         { *m = MutateUserListResult{} }
+func (m *MutateUserListResult) String() string { return proto.CompactTextString(m) }
+func (*MutateUserListResult) ProtoMessage()    {}
+func (*MutateUserListResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_user_list_service_a212d0fa5504c897, []int{4}
+}
+func (m *MutateUserListResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MutateUserListResult.Unmarshal(m, b)
+}
+func (m *MutateUserListResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MutateUserListResult.Marshal(b, m, deterministic)
+}
+func (dst *MutateUserListResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MutateUserListResult.Merge(dst, src)
+}
+func (m *MutateUserListResult) XXX_Size() int {
+	return xxx_messageInfo_MutateUserListResult.Size(m)
+}
+func (m *MutateUserListResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_MutateUserListResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MutateUserListResult proto.InternalMessageInfo
+
+func (m *MutateUserListResult) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetUserListRequest)(nil), "google.ads.googleads.v0.services.GetUserListRequest")
+	proto.RegisterType((*MutateUserListsRequest)(nil), "google.ads.googleads.v0.services.MutateUserListsRequest")
+	proto.RegisterType((*UserListOperation)(nil), "google.ads.googleads.v0.services.UserListOperation")
+	proto.RegisterType((*MutateUserListsResponse)(nil), "google.ads.googleads.v0.services.MutateUserListsResponse")
+	proto.RegisterType((*MutateUserListResult)(nil), "google.ads.googleads.v0.services.MutateUserListResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// UserListServiceClient is the client API for UserListService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type UserListServiceClient interface {
+	// Returns the requested user list.
+	GetUserList(ctx context.Context, in *GetUserListRequest, opts ...grpc.CallOption) (*resources.UserList, error)
+	// Creates or updates user lists. Operation statuses are returned.
+	MutateUserLists(ctx context.Context, in *MutateUserListsRequest, opts ...grpc.CallOption) (*MutateUserListsResponse, error)
+}
+
+type userListServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewUserListServiceClient(cc *grpc.ClientConn) UserListServiceClient {
+	return &userListServiceClient{cc}
+}
+
+func (c *userListServiceClient) GetUserList(ctx context.Context, in *GetUserListRequest, opts ...grpc.CallOption) (*resources.UserList, error) {
+	out := new(resources.UserList)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.UserListService/GetUserList", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *userListServiceClient) MutateUserLists(ctx context.Context, in *MutateUserListsRequest, opts ...grpc.CallOption) (*MutateUserListsResponse, error) {
+	out := new(MutateUserListsResponse)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.UserListService/MutateUserLists", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// UserListServiceServer is the server API for UserListService service.
+type UserListServiceServer interface {
+	// Returns the requested user list.
+	GetUserList(context.Context, *GetUserListRequest) (*resources.UserList, error)
+	// Creates or updates user lists. Operation statuses are returned.
+	MutateUserLists(context.Context, *MutateUserListsRequest) (*MutateUserListsResponse, error)
+}
+
+func RegisterUserListServiceServer(s *grpc.Server, srv UserListServiceServer) {
+	s.RegisterService(&_UserListService_serviceDesc, srv)
+}
+
+func _UserListService_GetUserList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUserListRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserListServiceServer).GetUserList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.UserListService/GetUserList",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserListServiceServer).GetUserList(ctx, req.(*GetUserListRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _UserListService_MutateUserLists_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MutateUserListsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(UserListServiceServer).MutateUserLists(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.UserListService/MutateUserLists",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(UserListServiceServer).MutateUserLists(ctx, req.(*MutateUserListsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _UserListService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.UserListService",
+	HandlerType: (*UserListServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetUserList",
+			Handler:    _UserListService_GetUserList_Handler,
+		},
+		{
+			MethodName: "MutateUserLists",
+			Handler:    _UserListService_MutateUserLists_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/user_list_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/user_list_service.proto", fileDescriptor_user_list_service_a212d0fa5504c897)
+}
+
+var fileDescriptor_user_list_service_a212d0fa5504c897 = []byte{
+	// 592 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x8b, 0xd3, 0x4c,
+	0x18, 0xfe, 0x92, 0xfd, 0xa8, 0xec, 0x44, 0x59, 0x1c, 0x16, 0x0d, 0x45, 0xb0, 0x44, 0x0f, 0xa5,
+	0x8b, 0x93, 0xda, 0x8a, 0x6c, 0xb7, 0xec, 0xa1, 0x05, 0xed, 0x0a, 0xae, 0x96, 0x2c, 0xee, 0x41,
+	0x0a, 0x65, 0xb6, 0x99, 0x0d, 0xa1, 0x4d, 0x26, 0xce, 0x3b, 0xe9, 0x65, 0xd9, 0x8b, 0xe0, 0xd5,
+	0x8b, 0xff, 0x40, 0xf0, 0xe2, 0xbf, 0xf0, 0xea, 0x55, 0x7f, 0x82, 0x7f, 0x43, 0x90, 0x64, 0x32,
+	0xdd, 0x76, 0x6b, 0xa9, 0xbb, 0xb7, 0x37, 0x93, 0xe7, 0x79, 0xde, 0x27, 0xcf, 0xbc, 0x6f, 0xd0,
+	0x6e, 0xc0, 0x79, 0x30, 0x61, 0x2e, 0xf5, 0xc1, 0x55, 0x65, 0x56, 0x4d, 0xeb, 0x2e, 0x30, 0x31,
+	0x0d, 0x47, 0x0c, 0xdc, 0x14, 0x98, 0x18, 0x4e, 0x42, 0x90, 0xc3, 0xe2, 0x88, 0x24, 0x82, 0x4b,
+	0x8e, 0x2b, 0x0a, 0x4e, 0xa8, 0x0f, 0x64, 0xc6, 0x24, 0xd3, 0x3a, 0xd1, 0xcc, 0xf2, 0xe3, 0x55,
+	0xda, 0x82, 0x01, 0x4f, 0xc5, 0x82, 0xb8, 0x12, 0x2d, 0xdf, 0xd3, 0x94, 0x24, 0x74, 0x69, 0x1c,
+	0x73, 0x49, 0x65, 0xc8, 0x63, 0x28, 0xde, 0x16, 0x2d, 0xdd, 0xfc, 0xe9, 0x24, 0x3d, 0x75, 0x4f,
+	0x43, 0x36, 0xf1, 0x87, 0x11, 0x85, 0xb1, 0x42, 0x38, 0x2d, 0x84, 0x7b, 0x4c, 0xbe, 0x01, 0x26,
+	0x5e, 0x86, 0x20, 0x3d, 0xf6, 0x2e, 0x65, 0x20, 0xf1, 0x03, 0x74, 0x4b, 0xb7, 0x1c, 0xc6, 0x34,
+	0x62, 0xb6, 0x51, 0x31, 0xaa, 0x9b, 0xde, 0x4d, 0x7d, 0xf8, 0x8a, 0x46, 0xcc, 0xf9, 0x68, 0xa0,
+	0x3b, 0x87, 0xa9, 0xa4, 0x92, 0x69, 0x3a, 0x68, 0xfe, 0x7d, 0x64, 0x8d, 0x52, 0x90, 0x3c, 0x62,
+	0x62, 0x18, 0xfa, 0x05, 0x1b, 0xe9, 0xa3, 0x17, 0x3e, 0x3e, 0x42, 0x88, 0x27, 0x4c, 0x28, 0xb3,
+	0xb6, 0x59, 0xd9, 0xa8, 0x5a, 0x8d, 0x26, 0x59, 0x17, 0x10, 0xd1, 0x8d, 0x5e, 0x6b, 0xae, 0x37,
+	0x27, 0xe3, 0x7c, 0x30, 0xd1, 0xed, 0x25, 0x04, 0x6e, 0x23, 0x2b, 0x4d, 0x7c, 0x2a, 0x59, 0xfe,
+	0xd9, 0xf6, 0xff, 0x15, 0xa3, 0x6a, 0x35, 0xca, 0xba, 0x97, 0x4e, 0x86, 0x3c, 0xcf, 0x92, 0x39,
+	0xa4, 0x30, 0xf6, 0x90, 0x82, 0x67, 0x35, 0x7e, 0x86, 0x4a, 0x23, 0xc1, 0xa8, 0x54, 0x09, 0x58,
+	0x8d, 0x9d, 0x95, 0x1e, 0x67, 0x57, 0x34, 0x33, 0x79, 0xf0, 0x9f, 0x57, 0x90, 0x33, 0x19, 0x25,
+	0x6a, 0x9b, 0xd7, 0x92, 0x51, 0x64, 0x6c, 0xa3, 0x92, 0x60, 0x11, 0x9f, 0x32, 0x7b, 0x23, 0x4b,
+	0x34, 0x7b, 0xa3, 0x9e, 0xbb, 0x16, 0xda, 0x9c, 0x05, 0xe1, 0x8c, 0xd1, 0xdd, 0xa5, 0x7b, 0x81,
+	0x84, 0xc7, 0xc0, 0x70, 0x1f, 0xdd, 0x10, 0x0c, 0xd2, 0x89, 0xd4, 0xa1, 0x3f, 0x5d, 0x1f, 0xfa,
+	0xa2, 0x96, 0x97, 0xd3, 0x3d, 0x2d, 0xe3, 0xb4, 0xd1, 0xf6, 0xdf, 0x00, 0xff, 0x34, 0x42, 0x8d,
+	0xdf, 0x26, 0xda, 0xd2, 0xbc, 0x23, 0xd5, 0x0f, 0x7f, 0x31, 0x90, 0x35, 0x37, 0x92, 0xf8, 0xc9,
+	0x7a, 0x87, 0xcb, 0x13, 0x5c, 0xbe, 0x4a, 0xc2, 0x4e, 0xf3, 0xfd, 0x8f, 0x5f, 0x9f, 0xcc, 0x47,
+	0x78, 0x27, 0xdb, 0xb5, 0xb3, 0x05, 0xdb, 0xfb, 0x7a, 0x68, 0xc1, 0xad, 0xe5, 0xcb, 0x97, 0xe7,
+	0xe9, 0xd6, 0xce, 0xf1, 0x37, 0x03, 0x6d, 0x5d, 0x8a, 0x19, 0xef, 0x5e, 0x35, 0x4d, 0xbd, 0x31,
+	0xe5, 0xd6, 0x35, 0x98, 0xea, 0x4e, 0x9d, 0x56, 0xee, 0xbe, 0xe9, 0x90, 0xcc, 0xfd, 0x85, 0xdd,
+	0xb3, 0xb9, 0x0d, 0xdc, 0xaf, 0x9d, 0x5f, 0x98, 0xdf, 0x8b, 0x72, 0xa1, 0x3d, 0xa3, 0xd6, 0xfd,
+	0x69, 0xa0, 0x87, 0x23, 0x1e, 0xad, 0xed, 0xdd, 0xdd, 0xbe, 0x74, 0x4b, 0xfd, 0x6c, 0x6d, 0xfa,
+	0xc6, 0xdb, 0x83, 0x82, 0x19, 0xf0, 0x09, 0x8d, 0x03, 0xc2, 0x45, 0xe0, 0x06, 0x2c, 0xce, 0x97,
+	0x4a, 0xff, 0xc1, 0x92, 0x10, 0x56, 0xff, 0x2c, 0xdb, 0xba, 0xf8, 0x6c, 0x6e, 0xf4, 0x3a, 0x9d,
+	0xaf, 0x66, 0xa5, 0xa7, 0x04, 0x3b, 0x3e, 0x10, 0x55, 0x66, 0xd5, 0x71, 0x9d, 0x14, 0x8d, 0xe1,
+	0xbb, 0x86, 0x0c, 0x3a, 0x3e, 0x0c, 0x66, 0x90, 0xc1, 0x71, 0x7d, 0xa0, 0x21, 0x27, 0xa5, 0xdc,
+	0x40, 0xf3, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x04, 0x32, 0x1d, 0xac, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/ads/googleads/v0/services/video_service.pb.go b/googleapis/ads/googleads/v0/services/video_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9be3a918332fc20d5b6b561ccfe119b258a658da
--- /dev/null
+++ b/googleapis/ads/googleads/v0/services/video_service.pb.go
@@ -0,0 +1,173 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/ads/googleads/v0/services/video_service.proto
+
+package services // import "google.golang.org/genproto/googleapis/ads/googleads/v0/services"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import resources "google.golang.org/genproto/googleapis/ads/googleads/v0/resources"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Request message for [VideoService.GetVideo][google.ads.googleads.v0.services.VideoService.GetVideo].
+type GetVideoRequest struct {
+	// The resource name of the video to fetch.
+	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetVideoRequest) Reset()         { *m = GetVideoRequest{} }
+func (m *GetVideoRequest) String() string { return proto.CompactTextString(m) }
+func (*GetVideoRequest) ProtoMessage()    {}
+func (*GetVideoRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_video_service_d47f3795054be16f, []int{0}
+}
+func (m *GetVideoRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetVideoRequest.Unmarshal(m, b)
+}
+func (m *GetVideoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetVideoRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetVideoRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetVideoRequest.Merge(dst, src)
+}
+func (m *GetVideoRequest) XXX_Size() int {
+	return xxx_messageInfo_GetVideoRequest.Size(m)
+}
+func (m *GetVideoRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetVideoRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetVideoRequest proto.InternalMessageInfo
+
+func (m *GetVideoRequest) GetResourceName() string {
+	if m != nil {
+		return m.ResourceName
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*GetVideoRequest)(nil), "google.ads.googleads.v0.services.GetVideoRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// VideoServiceClient is the client API for VideoService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type VideoServiceClient interface {
+	// Returns the requested video in full detail.
+	GetVideo(ctx context.Context, in *GetVideoRequest, opts ...grpc.CallOption) (*resources.Video, error)
+}
+
+type videoServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewVideoServiceClient(cc *grpc.ClientConn) VideoServiceClient {
+	return &videoServiceClient{cc}
+}
+
+func (c *videoServiceClient) GetVideo(ctx context.Context, in *GetVideoRequest, opts ...grpc.CallOption) (*resources.Video, error) {
+	out := new(resources.Video)
+	err := c.cc.Invoke(ctx, "/google.ads.googleads.v0.services.VideoService/GetVideo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// VideoServiceServer is the server API for VideoService service.
+type VideoServiceServer interface {
+	// Returns the requested video in full detail.
+	GetVideo(context.Context, *GetVideoRequest) (*resources.Video, error)
+}
+
+func RegisterVideoServiceServer(s *grpc.Server, srv VideoServiceServer) {
+	s.RegisterService(&_VideoService_serviceDesc, srv)
+}
+
+func _VideoService_GetVideo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetVideoRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VideoServiceServer).GetVideo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.ads.googleads.v0.services.VideoService/GetVideo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VideoServiceServer).GetVideo(ctx, req.(*GetVideoRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _VideoService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.ads.googleads.v0.services.VideoService",
+	HandlerType: (*VideoServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetVideo",
+			Handler:    _VideoService_GetVideo_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/ads/googleads/v0/services/video_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/ads/googleads/v0/services/video_service.proto", fileDescriptor_video_service_d47f3795054be16f)
+}
+
+var fileDescriptor_video_service_d47f3795054be16f = []byte{
+	// 329 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0x4c, 0x29, 0xd6, 0x87, 0x30, 0x41, 0xac, 0x32, 0x03, 0xfd, 0xe2, 0xd4,
+	0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xfd, 0xb2, 0xcc, 0x94, 0xd4, 0xfc, 0x78, 0x28, 0x57, 0xaf,
+	0xa0, 0x28, 0xbf, 0x24, 0x5f, 0x48, 0x01, 0xa2, 0x54, 0x2f, 0x31, 0xa5, 0x58, 0x0f, 0xae, 0x4b,
+	0xaf, 0xcc, 0x40, 0x0f, 0xa6, 0x4b, 0x4a, 0x17, 0x97, 0xb9, 0x45, 0xa9, 0xc5, 0xf9, 0xa5, 0x45,
+	0x70, 0x83, 0x21, 0x06, 0x4a, 0xc9, 0xc0, 0x94, 0x17, 0x64, 0xea, 0x27, 0xe6, 0xe5, 0xe5, 0x97,
+	0x24, 0x96, 0x64, 0xe6, 0xe7, 0x15, 0x43, 0x64, 0x95, 0xcc, 0xb8, 0xf8, 0xdd, 0x53, 0x4b, 0xc2,
+	0x40, 0xea, 0x83, 0x52, 0x0b, 0x4b, 0x53, 0x8b, 0x4b, 0x84, 0x94, 0xb9, 0x78, 0x61, 0x26, 0xc5,
+	0xe7, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0xf1, 0xc0, 0x04, 0xfd, 0x12,
+	0x73, 0x53, 0x8d, 0x56, 0x31, 0x72, 0xf1, 0x80, 0x75, 0x05, 0x43, 0x9c, 0x25, 0x34, 0x93, 0x91,
+	0x8b, 0x03, 0x66, 0x92, 0x90, 0xa1, 0x1e, 0x21, 0x5f, 0xe8, 0xa1, 0xd9, 0x2a, 0xa5, 0x81, 0x53,
+	0x0b, 0xdc, 0x5b, 0x7a, 0x60, 0x0d, 0x4a, 0x06, 0x4d, 0x97, 0x9f, 0x4c, 0x66, 0xd2, 0x12, 0xd2,
+	0x00, 0xf9, 0xb9, 0x1a, 0xc5, 0xa9, 0xb6, 0xc9, 0xa5, 0xc5, 0x25, 0xf9, 0xb9, 0xa9, 0x45, 0xc5,
+	0xfa, 0x5a, 0x90, 0x40, 0x28, 0xd6, 0xd7, 0xaa, 0x75, 0xba, 0xc8, 0xc8, 0xa5, 0x92, 0x9c, 0x9f,
+	0x4b, 0xd0, 0x51, 0x4e, 0x82, 0xc8, 0x5e, 0x0a, 0x00, 0x05, 0x50, 0x00, 0x63, 0x94, 0x07, 0x54,
+	0x5b, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0x38,
+	0xf8, 0x60, 0xe1, 0x5f, 0x90, 0x59, 0x8c, 0x3b, 0x9a, 0xad, 0x61, 0x8c, 0x45, 0x4c, 0xcc, 0xee,
+	0x8e, 0x8e, 0xab, 0x98, 0x14, 0xdc, 0x21, 0x06, 0x3a, 0xa6, 0x14, 0xeb, 0x41, 0x98, 0x20, 0x56,
+	0x98, 0x81, 0x1e, 0xd4, 0xe2, 0xe2, 0x53, 0x30, 0x25, 0x31, 0x8e, 0x29, 0xc5, 0x31, 0x70, 0x25,
+	0x31, 0x61, 0x06, 0x31, 0x30, 0x25, 0x49, 0x6c, 0x60, 0x07, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff,
+	0xff, 0x65, 0xf7, 0xe3, 0xdd, 0x66, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/automl/v1beta1/annotation_payload.pb.go b/googleapis/cloud/automl/v1beta1/annotation_payload.pb.go
index e77aa2963ffac7528efdcbea197fa0678a342e09..09cd6f59f6b92dbd41dae014f31abf81d24e6a4a 100644
--- a/googleapis/cloud/automl/v1beta1/annotation_payload.pb.go
+++ b/googleapis/cloud/automl/v1beta1/annotation_payload.pb.go
@@ -47,7 +47,7 @@ func (m *AnnotationPayload) Reset()         { *m = AnnotationPayload{} }
 func (m *AnnotationPayload) String() string { return proto.CompactTextString(m) }
 func (*AnnotationPayload) ProtoMessage()    {}
 func (*AnnotationPayload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_annotation_payload_ce47679ba5fa3ec6, []int{0}
+	return fileDescriptor_annotation_payload_f7dca833885c28d5, []int{0}
 }
 func (m *AnnotationPayload) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AnnotationPayload.Unmarshal(m, b)
@@ -197,28 +197,29 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/annotation_payload.proto", fileDescriptor_annotation_payload_ce47679ba5fa3ec6)
-}
-
-var fileDescriptor_annotation_payload_ce47679ba5fa3ec6 = []byte{
-	// 297 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4b, 0x33, 0x31,
-	0x10, 0x86, 0xbf, 0xed, 0x87, 0x45, 0x53, 0x11, 0xdd, 0xd3, 0x52, 0x05, 0xab, 0xa7, 0x1e, 0x34,
-	0xb1, 0x55, 0x4f, 0x9e, 0x5a, 0x2f, 0x7a, 0x91, 0x52, 0xc5, 0x83, 0x97, 0x65, 0x9a, 0xa4, 0x21,
-	0x90, 0xcd, 0x84, 0x26, 0x15, 0xfa, 0x8b, 0xfc, 0x9b, 0x42, 0xb2, 0xd8, 0xad, 0xc8, 0x1e, 0x93,
-	0x79, 0x9f, 0x67, 0x26, 0x19, 0x72, 0xa7, 0x10, 0x95, 0x91, 0x8c, 0x1b, 0x5c, 0x0b, 0x06, 0xeb,
-	0x80, 0x95, 0x61, 0x9f, 0xa3, 0x85, 0x0c, 0x30, 0x62, 0x60, 0x2d, 0x06, 0x08, 0x1a, 0x6d, 0xe9,
-	0x60, 0x63, 0x10, 0x04, 0x75, 0x2b, 0x0c, 0x98, 0x9f, 0x26, 0x8a, 0x46, 0x8a, 0x26, 0x8a, 0xd6,
-	0x54, 0xff, 0xac, 0x56, 0x82, 0xd3, 0x0d, 0x83, 0x4f, 0x68, 0xff, 0xa6, 0xad, 0x21, 0x37, 0xe0,
-	0xbd, 0x5e, 0x6a, 0x1e, 0x91, 0x9a, 0xb8, 0x6e, 0x23, 0xc2, 0x0a, 0xac, 0x37, 0x8d, 0xf8, 0xe5,
-	0x57, 0x87, 0x9c, 0x4c, 0x7e, 0xda, 0xce, 0xd2, 0xdc, 0xf9, 0x3b, 0xe9, 0x35, 0xa2, 0x45, 0x67,
-	0x90, 0x0d, 0x7b, 0xe3, 0x31, 0x6d, 0x79, 0x07, 0x7d, 0xdb, 0xe6, 0xb7, 0xbe, 0xa7, 0x7f, 0xf3,
-	0xa6, 0x28, 0x2f, 0xc9, 0xd1, 0xee, 0xd0, 0xc5, 0xff, 0xa8, 0xbe, 0x6f, 0x55, 0x3f, 0xee, 0x20,
-	0x3b, 0xf6, 0x5f, 0xba, 0xfc, 0x8a, 0xe4, 0x8d, 0x35, 0x78, 0x27, 0x79, 0xa9, 0x45, 0x91, 0x0d,
-	0xb2, 0xe1, 0xc1, 0xfc, 0x78, 0x5b, 0x79, 0x75, 0x92, 0x3f, 0x8b, 0xfc, 0x82, 0x1c, 0x0a, 0xed,
-	0x9d, 0x81, 0x4d, 0x69, 0xa1, 0x92, 0xc5, 0x5e, 0xcc, 0xf5, 0xea, 0xbb, 0x17, 0xa8, 0xe4, 0x74,
-	0x9f, 0x74, 0x85, 0x0c, 0xa0, 0xcd, 0x74, 0x49, 0xce, 0x39, 0x56, 0x6d, 0x83, 0xce, 0xb2, 0x8f,
-	0x49, 0x5d, 0x56, 0x68, 0xc0, 0x2a, 0x8a, 0x2b, 0xc5, 0x94, 0xb4, 0xf1, 0xab, 0x59, 0x2a, 0x81,
-	0xd3, 0xfe, 0xcf, 0xe5, 0x3c, 0xa4, 0xe3, 0xa2, 0x1b, 0xd3, 0xb7, 0xdf, 0x01, 0x00, 0x00, 0xff,
-	0xff, 0x44, 0x63, 0x2f, 0x26, 0x6c, 0x02, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/annotation_payload.proto", fileDescriptor_annotation_payload_f7dca833885c28d5)
+}
+
+var fileDescriptor_annotation_payload_f7dca833885c28d5 = []byte{
+	// 320 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x41, 0x4b, 0xc3, 0x30,
+	0x14, 0xc7, 0xed, 0xc4, 0xa1, 0x99, 0x88, 0xf6, 0x54, 0x36, 0xc1, 0xe9, 0x69, 0x07, 0x4d, 0xdd,
+	0xd4, 0x93, 0xa7, 0x6d, 0x07, 0xf5, 0xa0, 0x8c, 0x29, 0x3b, 0xc8, 0xa0, 0xbc, 0xb5, 0x31, 0x04,
+	0xd2, 0xbc, 0xb0, 0x64, 0xc2, 0xee, 0x7e, 0x17, 0xbf, 0x8b, 0x9f, 0x4a, 0x4c, 0x8a, 0x6b, 0x45,
+	0x7a, 0x4c, 0xde, 0xff, 0xf7, 0x7b, 0x2f, 0x79, 0xe4, 0x9a, 0x23, 0x72, 0xc9, 0xe2, 0x54, 0xe2,
+	0x2a, 0x8b, 0x61, 0x65, 0x31, 0x97, 0xf1, 0x7b, 0x7f, 0xc1, 0x2c, 0xf4, 0x63, 0x50, 0x0a, 0x2d,
+	0x58, 0x81, 0x2a, 0xd1, 0xb0, 0x96, 0x08, 0x19, 0xd5, 0x4b, 0xb4, 0x18, 0x76, 0x3c, 0x45, 0x1d,
+	0x45, 0x3d, 0x45, 0x0b, 0xaa, 0x7d, 0x5c, 0x28, 0x41, 0x8b, 0x92, 0xc1, 0x78, 0xb4, 0x7d, 0x59,
+	0xd7, 0x30, 0x95, 0x60, 0x8c, 0x78, 0x13, 0xa9, 0x43, 0x0a, 0xe2, 0xa2, 0x8e, 0xb0, 0x4b, 0x50,
+	0x46, 0x96, 0xe2, 0x67, 0x9f, 0x0d, 0x72, 0x34, 0xfc, 0x6d, 0x3b, 0xf1, 0x73, 0x87, 0x33, 0xd2,
+	0x2a, 0x45, 0xa3, 0x46, 0x37, 0xe8, 0xb5, 0x06, 0x03, 0x5a, 0xf3, 0x0e, 0xfa, 0xb2, 0xc9, 0x6f,
+	0x7c, 0xf7, 0x5b, 0xd3, 0xb2, 0x28, 0x4c, 0xc8, 0x41, 0x75, 0xe8, 0x68, 0xdb, 0xa9, 0x6f, 0x6a,
+	0xd5, 0xe3, 0x0a, 0x52, 0xb1, 0xff, 0xd1, 0x85, 0xe7, 0x24, 0x2c, 0xad, 0xc1, 0x68, 0x96, 0x26,
+	0x22, 0x8b, 0x82, 0x6e, 0xd0, 0xdb, 0x9b, 0x1e, 0x6e, 0x2a, 0xcf, 0x9a, 0xa5, 0x0f, 0x59, 0x78,
+	0x4a, 0xf6, 0x33, 0x61, 0xb4, 0x84, 0x75, 0xa2, 0x20, 0x67, 0xd1, 0x8e, 0xcb, 0xb5, 0x8a, 0xbb,
+	0x27, 0xc8, 0xd9, 0x68, 0x97, 0x34, 0x33, 0x66, 0x41, 0xc8, 0xd1, 0x47, 0x40, 0x4e, 0x52, 0xcc,
+	0xeb, 0x26, 0x9d, 0x04, 0xaf, 0xc3, 0xa2, 0xcc, 0x51, 0x82, 0xe2, 0x14, 0x97, 0x3c, 0xe6, 0x4c,
+	0xb9, 0xbf, 0x8e, 0x7d, 0x09, 0xb4, 0x30, 0xff, 0x6e, 0xe7, 0xd6, 0x1f, 0xbf, 0x1a, 0x9d, 0x3b,
+	0x17, 0x9c, 0x8f, 0x7f, 0x42, 0xf3, 0xe1, 0xca, 0xe2, 0xa3, 0x9c, 0xcf, 0x7c, 0x68, 0xd1, 0x74,
+	0xae, 0xab, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x18, 0x90, 0x9a, 0x8b, 0x02, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/classification.pb.go b/googleapis/cloud/automl/v1beta1/classification.pb.go
index 43f67586922dbce38e1ee890eff1910908434204..1250405c011c5b5a9b90f33c20c0c11a2bb52a55 100644
--- a/googleapis/cloud/automl/v1beta1/classification.pb.go
+++ b/googleapis/cloud/automl/v1beta1/classification.pb.go
@@ -46,7 +46,7 @@ func (x ClassificationType) String() string {
 	return proto.EnumName(ClassificationType_name, int32(x))
 }
 func (ClassificationType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_classification_e3eb78fdd10472f9, []int{0}
+	return fileDescriptor_classification_3fc2c485b21fa3e7, []int{0}
 }
 
 // Contains annotation details specific to classification.
@@ -66,7 +66,7 @@ func (m *ClassificationAnnotation) Reset()         { *m = ClassificationAnnotati
 func (m *ClassificationAnnotation) String() string { return proto.CompactTextString(m) }
 func (*ClassificationAnnotation) ProtoMessage()    {}
 func (*ClassificationAnnotation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_classification_e3eb78fdd10472f9, []int{0}
+	return fileDescriptor_classification_3fc2c485b21fa3e7, []int{0}
 }
 func (m *ClassificationAnnotation) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ClassificationAnnotation.Unmarshal(m, b)
@@ -119,7 +119,7 @@ func (m *ClassificationEvaluationMetrics) Reset()         { *m = ClassificationE
 func (m *ClassificationEvaluationMetrics) String() string { return proto.CompactTextString(m) }
 func (*ClassificationEvaluationMetrics) ProtoMessage()    {}
 func (*ClassificationEvaluationMetrics) Descriptor() ([]byte, []int) {
-	return fileDescriptor_classification_e3eb78fdd10472f9, []int{1}
+	return fileDescriptor_classification_3fc2c485b21fa3e7, []int{1}
 }
 func (m *ClassificationEvaluationMetrics) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ClassificationEvaluationMetrics.Unmarshal(m, b)
@@ -207,7 +207,7 @@ func (m *ClassificationEvaluationMetrics_ConfidenceMetricsEntry) String() string
 }
 func (*ClassificationEvaluationMetrics_ConfidenceMetricsEntry) ProtoMessage() {}
 func (*ClassificationEvaluationMetrics_ConfidenceMetricsEntry) Descriptor() ([]byte, []int) {
-	return fileDescriptor_classification_e3eb78fdd10472f9, []int{1, 0}
+	return fileDescriptor_classification_3fc2c485b21fa3e7, []int{1, 0}
 }
 func (m *ClassificationEvaluationMetrics_ConfidenceMetricsEntry) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ClassificationEvaluationMetrics_ConfidenceMetricsEntry.Unmarshal(m, b)
@@ -299,7 +299,7 @@ func (m *ClassificationEvaluationMetrics_ConfusionMatrix) String() string {
 }
 func (*ClassificationEvaluationMetrics_ConfusionMatrix) ProtoMessage() {}
 func (*ClassificationEvaluationMetrics_ConfusionMatrix) Descriptor() ([]byte, []int) {
-	return fileDescriptor_classification_e3eb78fdd10472f9, []int{1, 1}
+	return fileDescriptor_classification_3fc2c485b21fa3e7, []int{1, 1}
 }
 func (m *ClassificationEvaluationMetrics_ConfusionMatrix) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ClassificationEvaluationMetrics_ConfusionMatrix.Unmarshal(m, b)
@@ -352,7 +352,7 @@ func (m *ClassificationEvaluationMetrics_ConfusionMatrix_Row) String() string {
 }
 func (*ClassificationEvaluationMetrics_ConfusionMatrix_Row) ProtoMessage() {}
 func (*ClassificationEvaluationMetrics_ConfusionMatrix_Row) Descriptor() ([]byte, []int) {
-	return fileDescriptor_classification_e3eb78fdd10472f9, []int{1, 1, 0}
+	return fileDescriptor_classification_3fc2c485b21fa3e7, []int{1, 1, 0}
 }
 func (m *ClassificationEvaluationMetrics_ConfusionMatrix_Row) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ClassificationEvaluationMetrics_ConfusionMatrix_Row.Unmarshal(m, b)
@@ -389,46 +389,47 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/classification.proto", fileDescriptor_classification_e3eb78fdd10472f9)
-}
-
-var fileDescriptor_classification_e3eb78fdd10472f9 = []byte{
-	// 583 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcf, 0x4f, 0xdb, 0x3e,
-	0x14, 0xff, 0xa6, 0xa5, 0xe5, 0xcb, 0x83, 0x8d, 0xca, 0x30, 0x94, 0x75, 0x6c, 0x54, 0x70, 0xa9,
-	0xd0, 0x94, 0x10, 0x76, 0xdc, 0x29, 0x64, 0x45, 0x8a, 0x54, 0x58, 0x95, 0x94, 0x03, 0xbb, 0x58,
-	0xae, 0xeb, 0x86, 0x48, 0x69, 0x1c, 0x39, 0x0e, 0x85, 0xeb, 0xee, 0xfb, 0xdb, 0xf6, 0x5f, 0xec,
-	0xef, 0x98, 0x62, 0x87, 0x74, 0x95, 0x2a, 0x36, 0x69, 0xbb, 0xe5, 0x7d, 0x7e, 0xf9, 0x3d, 0xbf,
-	0xc8, 0x70, 0x16, 0x71, 0x1e, 0x25, 0xcc, 0xa6, 0x09, 0x2f, 0xa6, 0x36, 0x29, 0x24, 0x9f, 0x27,
-	0xf6, 0xbd, 0x33, 0x61, 0x92, 0x38, 0x36, 0x4d, 0x48, 0x9e, 0xc7, 0xb3, 0x98, 0x12, 0x19, 0xf3,
-	0xd4, 0xca, 0x04, 0x97, 0x1c, 0xbd, 0xd1, 0x0e, 0x4b, 0x39, 0x2c, 0xed, 0xb0, 0x2a, 0x47, 0xf7,
-	0xb0, 0x8a, 0x23, 0x59, 0x6c, 0x93, 0x34, 0xe5, 0x52, 0x39, 0x73, 0x6d, 0x3d, 0x3e, 0x03, 0xd3,
-	0x5b, 0x89, 0x74, 0x6b, 0x09, 0xda, 0x87, 0x56, 0x4e, 0xb9, 0x60, 0xa6, 0xd1, 0x33, 0xfa, 0x8d,
-	0x40, 0x17, 0xc7, 0x3f, 0xda, 0x70, 0xb4, 0x6a, 0x19, 0xdc, 0x93, 0xa4, 0x50, 0x5f, 0x57, 0x4c,
-	0x8a, 0x98, 0xe6, 0xe8, 0x15, 0xb4, 0x49, 0x81, 0x33, 0x41, 0x9f, 0xac, 0xa4, 0x18, 0x09, 0x8a,
-	0xde, 0xc1, 0xf6, 0x84, 0xe4, 0x0c, 0x57, 0x5c, 0x43, 0x71, 0x5b, 0x25, 0xe4, 0x2a, 0xfe, 0x9b,
-	0x01, 0x26, 0xe5, 0xe9, 0x2c, 0x9e, 0xb2, 0x94, 0x32, 0x3c, 0xd7, 0x69, 0x98, 0xa5, 0x52, 0x3c,
-	0x9a, 0xcd, 0x5e, 0xb3, 0xbf, 0x7d, 0x1e, 0x5a, 0xcf, 0xcc, 0x6a, 0xfd, 0xa6, 0x2f, 0xcb, 0xab,
-	0xc3, 0x2b, 0x64, 0x50, 0x46, 0x07, 0x07, 0x74, 0x2d, 0x8e, 0x16, 0xd0, 0x29, 0x99, 0x22, 0x8f,
-	0x79, 0x8a, 0xe7, 0x44, 0x8a, 0xf8, 0xc1, 0xdc, 0xe8, 0x19, 0xfd, 0xed, 0xf3, 0xe1, 0x5f, 0xb7,
-	0xa1, 0x42, 0xaf, 0x54, 0x66, 0xb0, 0x4b, 0x57, 0x01, 0xf4, 0x1e, 0xd0, 0x72, 0x55, 0x38, 0xcf,
-	0x18, 0xc5, 0xf1, 0xd4, 0x6c, 0xf5, 0x9a, 0xfd, 0xad, 0xa0, 0xb3, 0x64, 0xc2, 0x8c, 0x51, 0x7f,
-	0xda, 0xfd, 0xda, 0x80, 0x83, 0xf5, 0x93, 0x21, 0x07, 0xf6, 0x7f, 0xb9, 0x50, 0x79, 0x27, 0x58,
-	0x7e, 0xc7, 0x93, 0x69, 0xb5, 0x96, 0xbd, 0x25, 0x37, 0x7e, 0xa2, 0xd0, 0x01, 0xb4, 0x05, 0xa3,
-	0x24, 0x49, 0xaa, 0xfd, 0x54, 0x15, 0x3a, 0x84, 0xad, 0x4c, 0x30, 0x1a, 0x97, 0x6d, 0x9a, 0x4d,
-	0xbd, 0xba, 0x1a, 0x40, 0xaf, 0xe1, 0xff, 0x99, 0x83, 0xf5, 0xef, 0xb2, 0xa1, 0xc8, 0xcd, 0x99,
-	0x13, 0x96, 0x25, 0x7a, 0x0b, 0xa0, 0x23, 0x30, 0x91, 0x8e, 0xd9, 0xd2, 0x4e, 0x8d, 0xb8, 0xd2,
-	0x41, 0x27, 0xf0, 0xa2, 0x8e, 0x51, 0x8a, 0xb6, 0x52, 0xec, 0xd4, 0x60, 0x29, 0xea, 0xc1, 0xce,
-	0x53, 0xbc, 0xd2, 0x6c, 0x2a, 0x0d, 0x54, 0x47, 0xb8, 0xd2, 0xe9, 0x7e, 0x37, 0x60, 0xd7, 0xfb,
-	0xa3, 0x6b, 0x34, 0xd6, 0x5f, 0x23, 0x9a, 0x40, 0x53, 0xf0, 0x85, 0xd9, 0x50, 0xff, 0xd9, 0xe8,
-	0x5f, 0x2e, 0xd8, 0x0a, 0xf8, 0x22, 0x28, 0xc3, 0xbb, 0xa7, 0xd0, 0x0c, 0xf8, 0xa2, 0x9c, 0x99,
-	0x3d, 0x90, 0x79, 0x96, 0x30, 0x4c, 0x79, 0x91, 0x4a, 0xd5, 0x53, 0x2b, 0xd8, 0xa9, 0x40, 0xaf,
-	0xc4, 0x4e, 0x6f, 0x01, 0xad, 0x9e, 0x33, 0x7e, 0xcc, 0x18, 0x3a, 0x81, 0x23, 0x6f, 0xe8, 0x86,
-	0xa1, 0x7f, 0xe9, 0x7b, 0xee, 0xd8, 0xff, 0x7c, 0x8d, 0xc7, 0xb7, 0xa3, 0x01, 0xbe, 0xb9, 0x0e,
-	0x47, 0x03, 0xcf, 0xbf, 0xf4, 0x07, 0x9f, 0x3a, 0xff, 0xa1, 0x97, 0x00, 0x57, 0x37, 0xc3, 0xb1,
-	0xaf, 0x94, 0x1d, 0xa3, 0xae, 0x87, 0xee, 0xc5, 0x60, 0xd8, 0x69, 0x5c, 0x3c, 0xc2, 0x11, 0xe5,
-	0xf3, 0xe7, 0x46, 0xbc, 0xd8, 0x5b, 0x3d, 0x7b, 0x54, 0xbe, 0x16, 0x5f, 0xdc, 0xca, 0x11, 0xf1,
-	0x84, 0xa4, 0x91, 0xc5, 0x45, 0x64, 0x47, 0x2c, 0x55, 0x2f, 0x89, 0xad, 0x29, 0x92, 0xc5, 0xf9,
-	0xda, 0x97, 0xeb, 0xa3, 0x2e, 0x27, 0x6d, 0xa5, 0xfe, 0xf0, 0x33, 0x00, 0x00, 0xff, 0xff, 0x22,
-	0xd4, 0x8f, 0x68, 0xe6, 0x04, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/classification.proto", fileDescriptor_classification_3fc2c485b21fa3e7)
+}
+
+var fileDescriptor_classification_3fc2c485b21fa3e7 = []byte{
+	// 605 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4f, 0x4f, 0xdb, 0x30,
+	0x14, 0x5f, 0x5a, 0x5a, 0xc6, 0x83, 0x8d, 0xca, 0x30, 0x94, 0x15, 0x36, 0x2a, 0xb8, 0x54, 0x68,
+	0x4a, 0x08, 0x3b, 0xee, 0x14, 0xb2, 0x32, 0x45, 0x6a, 0x59, 0x95, 0x96, 0x49, 0x4c, 0x48, 0x96,
+	0xeb, 0xba, 0x25, 0x52, 0x1a, 0x47, 0x8e, 0x43, 0xe1, 0xba, 0xfb, 0xce, 0xfb, 0x4e, 0xbb, 0xec,
+	0x5b, 0xec, 0x73, 0x4c, 0xb1, 0x43, 0x58, 0xa5, 0x8a, 0x4d, 0xda, 0x6e, 0x79, 0xbf, 0x7f, 0x7e,
+	0xcf, 0x2f, 0x32, 0x1c, 0x4f, 0x39, 0x9f, 0x46, 0xcc, 0xa6, 0x11, 0xcf, 0xc6, 0x36, 0xc9, 0x24,
+	0x9f, 0x45, 0xf6, 0x8d, 0x33, 0x62, 0x92, 0x38, 0x36, 0x8d, 0x48, 0x9a, 0x86, 0x93, 0x90, 0x12,
+	0x19, 0xf2, 0xd8, 0x4a, 0x04, 0x97, 0x1c, 0xed, 0x6a, 0x87, 0xa5, 0x1c, 0x96, 0x76, 0x58, 0x85,
+	0xa3, 0xb9, 0x57, 0xc4, 0x91, 0x24, 0xb4, 0x49, 0x1c, 0x73, 0xa9, 0x9c, 0xa9, 0xb6, 0x1e, 0x1c,
+	0x83, 0xe9, 0x2d, 0x44, 0xba, 0xa5, 0x04, 0x6d, 0x43, 0x2d, 0xa5, 0x5c, 0x30, 0xd3, 0x68, 0x19,
+	0xed, 0x4a, 0xa0, 0x8b, 0x83, 0x9f, 0x75, 0xd8, 0x5f, 0xb4, 0x74, 0x6e, 0x48, 0x94, 0xa9, 0xaf,
+	0x1e, 0x93, 0x22, 0xa4, 0x29, 0x7a, 0x01, 0x75, 0x92, 0xe1, 0x44, 0xd0, 0x7b, 0x2b, 0xc9, 0xfa,
+	0x82, 0xa2, 0xd7, 0xb0, 0x3e, 0x22, 0x29, 0xc3, 0x05, 0x57, 0x51, 0xdc, 0x5a, 0x0e, 0xb9, 0x8a,
+	0xff, 0x6a, 0x80, 0x49, 0x79, 0x3c, 0x09, 0xc7, 0x2c, 0xa6, 0x0c, 0xcf, 0x74, 0x1a, 0x66, 0xb1,
+	0x14, 0x77, 0x66, 0xb5, 0x55, 0x6d, 0xaf, 0x9f, 0x0c, 0xac, 0x47, 0x66, 0xb5, 0xfe, 0xd0, 0x97,
+	0xe5, 0x95, 0xe1, 0x05, 0xd2, 0xc9, 0xa3, 0x83, 0x1d, 0xba, 0x14, 0x47, 0x73, 0x68, 0xe4, 0x4c,
+	0x96, 0x86, 0x3c, 0xc6, 0x33, 0x22, 0x45, 0x78, 0x6b, 0xae, 0xb4, 0x8c, 0xf6, 0xfa, 0x49, 0xf7,
+	0x9f, 0xdb, 0x50, 0xa1, 0x3d, 0x95, 0x19, 0x6c, 0xd2, 0x45, 0x00, 0xbd, 0x01, 0xf4, 0xb0, 0x2a,
+	0x9c, 0x26, 0x8c, 0xe2, 0x70, 0x6c, 0xd6, 0x5a, 0xd5, 0xf6, 0x5a, 0xd0, 0x78, 0x60, 0x06, 0x09,
+	0xa3, 0xfe, 0xb8, 0xf9, 0xa5, 0x02, 0x3b, 0xcb, 0x27, 0x43, 0x0e, 0x6c, 0xff, 0x76, 0xa1, 0xf2,
+	0x5a, 0xb0, 0xf4, 0x9a, 0x47, 0xe3, 0x62, 0x2d, 0x5b, 0x0f, 0xdc, 0xf0, 0x9e, 0x42, 0x3b, 0x50,
+	0x17, 0x8c, 0x92, 0x28, 0x2a, 0xf6, 0x53, 0x54, 0x68, 0x0f, 0xd6, 0x12, 0xc1, 0x68, 0x98, 0xb7,
+	0x69, 0x56, 0xf5, 0xea, 0x4a, 0x00, 0xbd, 0x84, 0xa7, 0x13, 0x07, 0xeb, 0xdf, 0x65, 0x45, 0x91,
+	0xab, 0x13, 0x67, 0x90, 0x97, 0xe8, 0x15, 0x80, 0x8e, 0xc0, 0x44, 0x3a, 0x66, 0x4d, 0x3b, 0x35,
+	0xe2, 0x4a, 0x07, 0x1d, 0xc2, 0xb3, 0x32, 0x46, 0x29, 0xea, 0x4a, 0xb1, 0x51, 0x82, 0xb9, 0xa8,
+	0x05, 0x1b, 0xf7, 0xf1, 0x4a, 0xb3, 0xaa, 0x34, 0x50, 0x1c, 0xe1, 0x4a, 0xa7, 0xf9, 0xc3, 0x80,
+	0x4d, 0xef, 0xaf, 0xae, 0xd1, 0x58, 0x7e, 0x8d, 0x68, 0x04, 0x55, 0xc1, 0xe7, 0x66, 0x45, 0xfd,
+	0x67, 0xfd, 0xff, 0xb9, 0x60, 0x2b, 0xe0, 0xf3, 0x20, 0x0f, 0x6f, 0x1e, 0x41, 0x35, 0xe0, 0xf3,
+	0x7c, 0x66, 0x76, 0x4b, 0x66, 0x49, 0xc4, 0x30, 0xe5, 0x59, 0x2c, 0x55, 0x4f, 0xb5, 0x60, 0xa3,
+	0x00, 0xbd, 0x1c, 0x3b, 0xba, 0x04, 0xb4, 0x78, 0xce, 0xf0, 0x2e, 0x61, 0xe8, 0x10, 0xf6, 0xbd,
+	0xae, 0x3b, 0x18, 0xf8, 0x67, 0xbe, 0xe7, 0x0e, 0xfd, 0x8f, 0xe7, 0x78, 0x78, 0xd9, 0xef, 0xe0,
+	0x8b, 0xf3, 0x41, 0xbf, 0xe3, 0xf9, 0x67, 0x7e, 0xe7, 0x7d, 0xe3, 0x09, 0x7a, 0x0e, 0xd0, 0xbb,
+	0xe8, 0x0e, 0x7d, 0xa5, 0x6c, 0x18, 0x65, 0xdd, 0x75, 0x4f, 0x3b, 0xdd, 0x46, 0xe5, 0xf4, 0x9b,
+	0x01, 0xfb, 0x94, 0xcf, 0x1e, 0x9b, 0xf1, 0x74, 0x6b, 0xf1, 0xf0, 0x7e, 0xfe, 0x5c, 0x7c, 0x76,
+	0x0b, 0xc7, 0x94, 0x47, 0x24, 0x9e, 0x5a, 0x5c, 0x4c, 0xed, 0x29, 0x8b, 0xd5, 0x53, 0x62, 0x6b,
+	0x8a, 0x24, 0x61, 0xba, 0xf4, 0xe9, 0x7a, 0xa7, 0xcb, 0xef, 0x95, 0xdd, 0x0f, 0x4a, 0x78, 0xe5,
+	0xe5, 0xa2, 0x2b, 0x37, 0x93, 0xbc, 0x17, 0x5d, 0x7d, 0xd2, 0xa2, 0x51, 0x5d, 0x65, 0xbd, 0xfd,
+	0x15, 0x00, 0x00, 0xff, 0xff, 0xa7, 0xc7, 0xf0, 0x16, 0x05, 0x05, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/data_items.pb.go b/googleapis/cloud/automl/v1beta1/data_items.pb.go
index e2b406eadafaa9b7e2e209ecf1126d6d2232418e..ba0d926b931aa42fc94919acb5980f3be0a9b5bb 100644
--- a/googleapis/cloud/automl/v1beta1/data_items.pb.go
+++ b/googleapis/cloud/automl/v1beta1/data_items.pb.go
@@ -41,7 +41,7 @@ func (m *Image) Reset()         { *m = Image{} }
 func (m *Image) String() string { return proto.CompactTextString(m) }
 func (*Image) ProtoMessage()    {}
 func (*Image) Descriptor() ([]byte, []int) {
-	return fileDescriptor_data_items_6a949c451484ad28, []int{0}
+	return fileDescriptor_data_items_d29551999e582ae1, []int{0}
 }
 func (m *Image) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Image.Unmarshal(m, b)
@@ -196,7 +196,7 @@ func (m *TextSnippet) Reset()         { *m = TextSnippet{} }
 func (m *TextSnippet) String() string { return proto.CompactTextString(m) }
 func (*TextSnippet) ProtoMessage()    {}
 func (*TextSnippet) Descriptor() ([]byte, []int) {
-	return fileDescriptor_data_items_6a949c451484ad28, []int{1}
+	return fileDescriptor_data_items_d29551999e582ae1, []int{1}
 }
 func (m *TextSnippet) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TextSnippet.Unmarshal(m, b)
@@ -254,7 +254,7 @@ func (m *ExamplePayload) Reset()         { *m = ExamplePayload{} }
 func (m *ExamplePayload) String() string { return proto.CompactTextString(m) }
 func (*ExamplePayload) ProtoMessage()    {}
 func (*ExamplePayload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_data_items_6a949c451484ad28, []int{2}
+	return fileDescriptor_data_items_d29551999e582ae1, []int{2}
 }
 func (m *ExamplePayload) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ExamplePayload.Unmarshal(m, b)
@@ -392,33 +392,35 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/data_items.proto", fileDescriptor_data_items_6a949c451484ad28)
-}
-
-var fileDescriptor_data_items_6a949c451484ad28 = []byte{
-	// 381 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x3d, 0xcf, 0xd3, 0x30,
-	0x14, 0x85, 0x1b, 0xd4, 0x0f, 0xe2, 0x14, 0x06, 0x4f, 0x51, 0x8b, 0xd4, 0x52, 0x18, 0x32, 0xa0,
-	0x44, 0x2d, 0x1b, 0x4c, 0x04, 0x21, 0xb5, 0x03, 0x52, 0x15, 0xda, 0x85, 0x25, 0x72, 0x52, 0xd7,
-	0x58, 0x8a, 0x3f, 0x94, 0xdc, 0xa0, 0xe6, 0x0f, 0xf1, 0x3b, 0x91, 0xed, 0x40, 0x3b, 0xbc, 0xca,
-	0xbb, 0xe5, 0x9e, 0xfb, 0x5c, 0xdf, 0xe3, 0x13, 0xa3, 0x0f, 0x4c, 0x29, 0x56, 0xd1, 0xa4, 0xac,
-	0x54, 0x7b, 0x49, 0x48, 0x0b, 0x4a, 0x54, 0xc9, 0xef, 0x6d, 0x41, 0x81, 0x6c, 0x93, 0x0b, 0x01,
-	0x92, 0x73, 0xa0, 0xa2, 0x89, 0x75, 0xad, 0x40, 0xe1, 0xa5, 0xa3, 0x63, 0x4b, 0xc7, 0x8e, 0x8e,
-	0x7b, 0x7a, 0xf1, 0xa6, 0x3f, 0x8a, 0x68, 0x9e, 0x10, 0x29, 0x15, 0x10, 0xe0, 0x4a, 0xf6, 0xa3,
-	0x8b, 0xf7, 0x43, 0x8b, 0xb8, 0x72, 0xd4, 0xe6, 0x8f, 0x87, 0x26, 0x07, 0x41, 0x18, 0xc5, 0x6f,
-	0x51, 0xc0, 0xcd, 0x47, 0x5e, 0x74, 0x40, 0x9b, 0xd0, 0x5b, 0x7b, 0xd1, 0x7c, 0x3f, 0xca, 0x90,
-	0x15, 0x53, 0xa3, 0xe1, 0xef, 0x68, 0xce, 0xa5, 0x6e, 0x21, 0x2f, 0x95, 0xbc, 0x72, 0x16, 0x4e,
-	0xd7, 0x5e, 0x14, 0xec, 0xa2, 0x78, 0xc0, 0x64, 0x7c, 0x30, 0x03, 0x5f, 0x2d, 0xbf, 0x1f, 0x65,
-	0x01, 0xbf, 0x97, 0xf8, 0x1d, 0x7a, 0x05, 0xbf, 0x5a, 0x51, 0x48, 0xc2, 0xab, 0xbc, 0xad, 0x79,
-	0x38, 0x5e, 0x7b, 0x91, 0x9f, 0xcd, 0xff, 0x8b, 0xe7, 0x9a, 0xa7, 0x53, 0x34, 0x36, 0xa9, 0x6c,
-	0x28, 0x0a, 0x4e, 0xf4, 0x06, 0x3f, 0x24, 0xd7, 0x9a, 0x02, 0x0e, 0xd1, 0xac, 0x54, 0x12, 0xa8,
-	0x04, 0xeb, 0xd4, 0xcf, 0xfe, 0x95, 0x78, 0x89, 0x7c, 0xc1, 0x05, 0xcd, 0xa1, 0xd3, 0x34, 0x7c,
-	0x61, 0x7b, 0x2f, 0x8d, 0x70, 0xea, 0x34, 0xc5, 0x2b, 0x14, 0xf4, 0xdc, 0xc3, 0x42, 0xd4, 0x4b,
-	0xe7, 0x9a, 0x9b, 0x3c, 0x5e, 0x7f, 0xbb, 0x11, 0xa1, 0x2b, 0x7a, 0x24, 0x5d, 0xa5, 0xc8, 0x05,
-	0x7f, 0x42, 0x13, 0x9b, 0x81, 0x5d, 0x14, 0xec, 0x36, 0xc3, 0xd7, 0x35, 0xe4, 0x7e, 0x94, 0xb9,
-	0x11, 0x93, 0x18, 0xd0, 0x1b, 0xe4, 0x8d, 0xb3, 0x6d, 0xfd, 0x3c, 0x97, 0xd8, 0xc3, 0x35, 0x4d,
-	0x62, 0x70, 0x2f, 0x53, 0x1f, 0xcd, 0xb4, 0x73, 0x95, 0x5e, 0xd1, 0xaa, 0x54, 0x62, 0xe8, 0xa0,
-	0xa3, 0xf7, 0xf3, 0x4b, 0xdf, 0x66, 0xaa, 0x22, 0x92, 0xc5, 0xaa, 0x66, 0x09, 0xa3, 0xd2, 0xfe,
-	0xf9, 0xc4, 0xb5, 0x88, 0xe6, 0xcd, 0x93, 0x4f, 0xe4, 0xb3, 0x2b, 0x8b, 0xa9, 0xa5, 0x3f, 0xfe,
-	0x0d, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xa5, 0xac, 0xba, 0xb8, 0x02, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/data_items.proto", fileDescriptor_data_items_d29551999e582ae1)
+}
+
+var fileDescriptor_data_items_d29551999e582ae1 = []byte{
+	// 407 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x41, 0x6f, 0xd3, 0x30,
+	0x14, 0xc7, 0x9b, 0x69, 0xeb, 0xa8, 0x53, 0x38, 0xf8, 0x14, 0xad, 0x48, 0x2b, 0x85, 0x43, 0x0f,
+	0x28, 0xd1, 0xc6, 0x0d, 0x4e, 0xcb, 0x84, 0xe8, 0x0e, 0x93, 0xa6, 0xb0, 0x71, 0x40, 0x95, 0x22,
+	0x27, 0x35, 0xc6, 0x92, 0xed, 0x67, 0x25, 0x2f, 0xa8, 0xb9, 0xf3, 0x59, 0xf8, 0x30, 0x7c, 0x2a,
+	0x64, 0x3b, 0xb0, 0x1e, 0x50, 0x76, 0xeb, 0xfb, 0xbf, 0xdf, 0x7b, 0xef, 0xef, 0x7f, 0x43, 0xde,
+	0x0a, 0x00, 0xa1, 0x78, 0x56, 0x2b, 0xe8, 0x76, 0x19, 0xeb, 0x10, 0xb4, 0xca, 0x7e, 0x5c, 0x54,
+	0x1c, 0xd9, 0x45, 0xb6, 0x63, 0xc8, 0x4a, 0x89, 0x5c, 0xb7, 0xa9, 0x6d, 0x00, 0x81, 0x2e, 0x02,
+	0x9d, 0x7a, 0x3a, 0x0d, 0x74, 0x3a, 0xd0, 0x67, 0x2f, 0x87, 0x55, 0xcc, 0xca, 0x8c, 0x19, 0x03,
+	0xc8, 0x50, 0x82, 0x19, 0x46, 0xcf, 0xde, 0x8c, 0x1d, 0x92, 0x10, 0xa8, 0xd5, 0xaf, 0x88, 0x9c,
+	0xdc, 0x68, 0x26, 0x38, 0x7d, 0x45, 0x62, 0xe9, 0x7e, 0x94, 0x55, 0x8f, 0xbc, 0x4d, 0xa2, 0x65,
+	0xb4, 0x9e, 0x6f, 0x26, 0x05, 0xf1, 0x62, 0xee, 0x34, 0x7a, 0x4b, 0xe6, 0xd2, 0xd8, 0x0e, 0xcb,
+	0x1a, 0xcc, 0x37, 0x29, 0x92, 0xe9, 0x32, 0x5a, 0xc7, 0x97, 0xeb, 0x74, 0xc4, 0x64, 0x7a, 0xe3,
+	0x06, 0xae, 0x3d, 0xbf, 0x99, 0x14, 0xb1, 0x7c, 0x2c, 0xe9, 0x6b, 0xf2, 0x1c, 0xbf, 0x77, 0xba,
+	0x32, 0x4c, 0xaa, 0xb2, 0x6b, 0x64, 0x72, 0xbc, 0x8c, 0xd6, 0xb3, 0x62, 0xfe, 0x4f, 0x7c, 0x68,
+	0x64, 0x3e, 0x25, 0xc7, 0x2e, 0x95, 0x15, 0x27, 0xf1, 0x3d, 0xdf, 0xe3, 0x67, 0x23, 0xad, 0xe5,
+	0x48, 0x13, 0x72, 0x5a, 0x83, 0x41, 0x6e, 0xd0, 0x3b, 0x9d, 0x15, 0x7f, 0x4b, 0xba, 0x20, 0x33,
+	0x2d, 0x35, 0x2f, 0xb1, 0xb7, 0x3c, 0x39, 0xf2, 0xbd, 0x67, 0x4e, 0xb8, 0xef, 0x2d, 0xa7, 0xe7,
+	0x24, 0x1e, 0xb8, 0x83, 0x83, 0x64, 0x90, 0x1e, 0x1a, 0xe9, 0xf2, 0x78, 0xf1, 0x71, 0xcf, 0xb4,
+	0x55, 0xfc, 0x8e, 0xf5, 0x0a, 0xd8, 0x8e, 0xbe, 0x27, 0x27, 0x3e, 0x03, 0x7f, 0x28, 0xbe, 0x5c,
+	0x8d, 0x3f, 0xd7, 0x91, 0x9b, 0x49, 0x11, 0x46, 0x5c, 0x62, 0xc8, 0xf7, 0x58, 0xb6, 0xc1, 0xb6,
+	0xf7, 0xf3, 0x54, 0x62, 0x07, 0xcf, 0x74, 0x89, 0xe1, 0x63, 0x99, 0xcf, 0xc8, 0xa9, 0x0d, 0xae,
+	0xf2, 0x9f, 0x11, 0x39, 0xaf, 0x41, 0x8f, 0x6d, 0xba, 0x8b, 0xbe, 0x5e, 0x0d, 0x6d, 0x01, 0x8a,
+	0x19, 0x91, 0x42, 0x23, 0x32, 0xc1, 0x8d, 0xff, 0xeb, 0xb3, 0xd0, 0x62, 0x56, 0xb6, 0xff, 0xfd,
+	0x46, 0x3e, 0x84, 0xf2, 0xf7, 0xd1, 0xe2, 0x93, 0x07, 0xb7, 0xd7, 0x0e, 0xda, 0x5e, 0x75, 0x08,
+	0xb7, 0x6a, 0xfb, 0x25, 0x40, 0xd5, 0xd4, 0xef, 0x7a, 0xf7, 0x27, 0x00, 0x00, 0xff, 0xff, 0x2d,
+	0x52, 0x09, 0x2a, 0xd7, 0x02, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/dataset.pb.go b/googleapis/cloud/automl/v1beta1/dataset.pb.go
index 6ff1b908aa3a01fa691b64a1db7729c6c8641e07..81a55ed64526e22531088297a1d80bfc35658bfa 100644
--- a/googleapis/cloud/automl/v1beta1/dataset.pb.go
+++ b/googleapis/cloud/automl/v1beta1/dataset.pb.go
@@ -52,7 +52,7 @@ func (m *Dataset) Reset()         { *m = Dataset{} }
 func (m *Dataset) String() string { return proto.CompactTextString(m) }
 func (*Dataset) ProtoMessage()    {}
 func (*Dataset) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dataset_a8678ffeb33098d6, []int{0}
+	return fileDescriptor_dataset_e955e6a61629f1a3, []int{0}
 }
 func (m *Dataset) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Dataset.Unmarshal(m, b)
@@ -248,36 +248,38 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/dataset.proto", fileDescriptor_dataset_a8678ffeb33098d6)
+	proto.RegisterFile("google/cloud/automl/v1beta1/dataset.proto", fileDescriptor_dataset_e955e6a61629f1a3)
 }
 
-var fileDescriptor_dataset_a8678ffeb33098d6 = []byte{
-	// 428 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x5d, 0x6b, 0x14, 0x31,
-	0x14, 0x86, 0x1d, 0xa9, 0x8a, 0xd9, 0x2a, 0x12, 0x10, 0xc7, 0xb1, 0xd0, 0x6d, 0xfd, 0x5a, 0x41,
-	0x13, 0xaa, 0x82, 0x17, 0x05, 0xc5, 0xd6, 0x0b, 0xbd, 0x50, 0x64, 0xe9, 0x95, 0x37, 0xe1, 0xec,
-	0x6c, 0x76, 0x08, 0xe4, 0x63, 0xd8, 0x9c, 0x91, 0x2d, 0xfe, 0x0a, 0xc1, 0xdf, 0xe7, 0x6f, 0x91,
-	0x49, 0x32, 0xd4, 0xaf, 0xcd, 0xdc, 0x25, 0xe7, 0x3c, 0x79, 0xf3, 0x9e, 0x97, 0x43, 0x9e, 0x34,
-	0xce, 0x35, 0x5a, 0xf2, 0x5a, 0xbb, 0x6e, 0xc9, 0xa1, 0x43, 0x67, 0x34, 0xff, 0x7a, 0xb4, 0x90,
-	0x08, 0x47, 0x7c, 0x09, 0x08, 0x5e, 0x22, 0x6b, 0xd7, 0x0e, 0x1d, 0xbd, 0x17, 0x51, 0x16, 0x50,
-	0x16, 0x51, 0x96, 0xd0, 0x6a, 0x2f, 0xe9, 0x40, 0xab, 0x38, 0x58, 0xeb, 0x10, 0x50, 0x39, 0xeb,
-	0xe3, 0xd3, 0xea, 0x65, 0xee, 0x97, 0x0b, 0x5c, 0xb4, 0x70, 0xae, 0x1d, 0x2c, 0xd3, 0xab, 0xa7,
-	0x63, 0xde, 0x84, 0x42, 0x69, 0x86, 0x3f, 0x1e, 0xe7, 0x68, 0x65, 0xa0, 0x91, 0x09, 0x7c, 0x94,
-	0x03, 0x51, 0x6e, 0xd2, 0xbc, 0xd5, 0xb3, 0x2c, 0xb7, 0x06, 0xeb, 0x75, 0x70, 0x9d, 0xf0, 0xfd,
-	0x84, 0x87, 0xdb, 0xa2, 0x5b, 0x71, 0x54, 0x46, 0x7a, 0x04, 0xd3, 0x46, 0xe0, 0xf0, 0xe7, 0x0e,
-	0xb9, 0xf6, 0x2e, 0x26, 0x4a, 0xbf, 0x91, 0xbd, 0xdf, 0x14, 0x44, 0x0a, 0x5a, 0x18, 0x89, 0xd0,
-	0x9f, 0xcb, 0x3b, 0xd3, 0x62, 0x36, 0x79, 0xfe, 0x8a, 0x65, 0x22, 0x67, 0x67, 0x17, 0x02, 0x49,
-	0xf6, 0x63, 0x7a, 0xfe, 0xfe, 0xd2, 0xbc, 0xc2, 0xad, 0x5d, 0xfa, 0xa3, 0x20, 0x0f, 0x43, 0x20,
-	0xa2, 0xd6, 0xe0, 0xbd, 0x5a, 0xa9, 0x7a, 0x8b, 0x8d, 0x32, 0xd8, 0x78, 0x93, 0xb5, 0xf1, 0xa1,
-	0x57, 0x3a, 0xfd, 0x43, 0xe8, 0x5f, 0x3b, 0x87, 0x6a, 0x94, 0xa2, 0xdf, 0x0b, 0xf2, 0xa0, 0x8f,
-	0x7f, 0xd4, 0xd5, 0xdd, 0xe0, 0xea, 0x75, 0x3e, 0x1c, 0xb9, 0xc1, 0x31, 0x53, 0x07, 0x38, 0x06,
-	0x51, 0x4a, 0x76, 0x2c, 0x18, 0x59, 0x16, 0xd3, 0x62, 0x76, 0x7d, 0x1e, 0xce, 0xf4, 0x80, 0xec,
-	0x2e, 0x95, 0x6f, 0x35, 0x9c, 0x8b, 0xd0, 0xbb, 0x1c, 0x7a, 0x93, 0x54, 0xfb, 0xd4, 0x23, 0xf7,
-	0xc9, 0x0d, 0xb9, 0x01, 0xd3, 0x6a, 0x29, 0x6a, 0xd7, 0x59, 0x2c, 0x6f, 0x4f, 0x8b, 0xd9, 0x95,
-	0xf9, 0x6e, 0x2a, 0x9e, 0xf6, 0x35, 0x7a, 0x4c, 0x26, 0xf5, 0x5a, 0x02, 0x4a, 0xd1, 0x6f, 0x4a,
-	0x79, 0x33, 0x4c, 0x55, 0x0d, 0x53, 0x0d, 0x6b, 0xc4, 0xce, 0x86, 0x35, 0x9a, 0x93, 0x88, 0xf7,
-	0x85, 0x13, 0x4a, 0x6e, 0xfd, 0x9d, 0xcb, 0xc9, 0x8a, 0xec, 0xd7, 0xce, 0xe4, 0x62, 0xf9, 0x5c,
-	0x7c, 0x79, 0x9b, 0xda, 0x8d, 0xd3, 0x60, 0x1b, 0xe6, 0xd6, 0x0d, 0x6f, 0xa4, 0x0d, 0xbf, 0xf1,
-	0xd8, 0x82, 0x56, 0xf9, 0xff, 0x2e, 0xfd, 0x71, 0xbc, 0x2e, 0xae, 0x06, 0xfa, 0xc5, 0xaf, 0x00,
-	0x00, 0x00, 0xff, 0xff, 0x84, 0x83, 0x13, 0xa3, 0x3c, 0x04, 0x00, 0x00,
+var fileDescriptor_dataset_e955e6a61629f1a3 = []byte{
+	// 452 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xdb, 0x6a, 0x14, 0x41,
+	0x10, 0x86, 0x9d, 0x10, 0x15, 0x7b, 0xa3, 0x48, 0x83, 0x38, 0x4e, 0x02, 0xd9, 0xc4, 0xd3, 0x0a,
+	0x3a, 0x43, 0x54, 0xf0, 0x22, 0xa0, 0x24, 0x2b, 0xa8, 0x17, 0x11, 0x59, 0x82, 0x17, 0xb2, 0xd0,
+	0xd4, 0xce, 0x76, 0x86, 0x86, 0x3e, 0x0c, 0xdb, 0x35, 0xb2, 0xc1, 0x5b, 0x5f, 0x40, 0xf0, 0xa9,
+	0x7c, 0x08, 0x9f, 0x45, 0xfa, 0xb0, 0xc4, 0xd3, 0xf6, 0xdc, 0x75, 0x57, 0x7d, 0xfd, 0xf7, 0x5f,
+	0x3f, 0x45, 0x1e, 0x35, 0xc6, 0x34, 0x92, 0x57, 0xb5, 0x34, 0xdd, 0xbc, 0x82, 0x0e, 0x8d, 0x92,
+	0xd5, 0xe7, 0x83, 0x19, 0x47, 0x38, 0xa8, 0xe6, 0x80, 0x60, 0x39, 0x96, 0xed, 0xc2, 0xa0, 0xa1,
+	0xdb, 0x01, 0x2d, 0x3d, 0x5a, 0x06, 0xb4, 0x8c, 0x68, 0xb1, 0x13, 0x75, 0xa0, 0x15, 0x15, 0x68,
+	0x6d, 0x10, 0x50, 0x18, 0x6d, 0xc3, 0xd3, 0xe2, 0x79, 0xea, 0x97, 0x0b, 0x9c, 0xb5, 0x70, 0x2e,
+	0x0d, 0xcc, 0xe3, 0xab, 0xc7, 0x7d, 0xde, 0x98, 0x40, 0xae, 0x56, 0x7f, 0x3c, 0x4c, 0xd1, 0x42,
+	0x41, 0xc3, 0x23, 0xf8, 0x20, 0x05, 0x22, 0x5f, 0xc6, 0x79, 0x8b, 0x27, 0x49, 0x6e, 0x01, 0xda,
+	0x4a, 0xef, 0x3a, 0xe2, 0xbb, 0x11, 0xf7, 0xb7, 0x59, 0x77, 0x56, 0xa1, 0x50, 0xdc, 0x22, 0xa8,
+	0x36, 0x00, 0xfb, 0x3f, 0x37, 0xc9, 0xd5, 0xd7, 0x21, 0x51, 0xfa, 0x85, 0xec, 0xfc, 0xa6, 0xc0,
+	0x62, 0xd0, 0x4c, 0x71, 0x04, 0x77, 0xce, 0x6f, 0x0f, 0xb3, 0xd1, 0xe0, 0xe9, 0x8b, 0x32, 0x11,
+	0x79, 0x79, 0x7a, 0x21, 0x10, 0x65, 0x4f, 0xe2, 0xf3, 0xb7, 0x97, 0x26, 0x05, 0xae, 0xed, 0xd2,
+	0xef, 0x19, 0xb9, 0xef, 0x03, 0x61, 0xb5, 0x04, 0x6b, 0xc5, 0x99, 0xa8, 0xd7, 0xd8, 0xc8, 0xbd,
+	0x8d, 0x57, 0x49, 0x1b, 0xef, 0x9c, 0xd2, 0xf8, 0x0f, 0xa1, 0x7f, 0xed, 0xec, 0x8b, 0x5e, 0x8a,
+	0x7e, 0xcb, 0xc8, 0x3d, 0x17, 0x7f, 0xaf, 0xab, 0x3b, 0xde, 0xd5, 0xcb, 0x74, 0x38, 0x7c, 0x89,
+	0x7d, 0xa6, 0xf6, 0xb0, 0x0f, 0xa2, 0x94, 0x6c, 0x6a, 0x50, 0x3c, 0xcf, 0x86, 0xd9, 0xe8, 0xda,
+	0xc4, 0x9f, 0xe9, 0x1e, 0xd9, 0x9a, 0x0b, 0xdb, 0x4a, 0x38, 0x67, 0xbe, 0xb7, 0xe1, 0x7b, 0x83,
+	0x58, 0x7b, 0xef, 0x90, 0xbb, 0xe4, 0x3a, 0x5f, 0x82, 0x6a, 0x25, 0x67, 0xb5, 0xe9, 0x34, 0xe6,
+	0xb7, 0x86, 0xd9, 0xe8, 0xf2, 0x64, 0x2b, 0x16, 0xc7, 0xae, 0x46, 0x0f, 0xc9, 0xa0, 0x5e, 0x70,
+	0x40, 0xce, 0xdc, 0xa6, 0xe4, 0x37, 0xfc, 0x54, 0xc5, 0x6a, 0xaa, 0xd5, 0x1a, 0x95, 0xa7, 0xab,
+	0x35, 0x9a, 0x90, 0x80, 0xbb, 0xc2, 0x31, 0x25, 0x37, 0xff, 0xce, 0xe5, 0xf8, 0x6b, 0x46, 0x76,
+	0x6b, 0xa3, 0x52, 0xb9, 0x7c, 0xc8, 0x3e, 0x1d, 0xc5, 0x76, 0x63, 0x24, 0xe8, 0xa6, 0x34, 0x8b,
+	0xa6, 0x6a, 0xb8, 0xf6, 0xdf, 0x55, 0xa1, 0x05, 0xad, 0xb0, 0xff, 0xdd, 0xfa, 0xc3, 0x70, 0xfd,
+	0xb1, 0xb1, 0xfd, 0xc6, 0x83, 0xd3, 0xb1, 0x83, 0xa6, 0x47, 0x1d, 0x9a, 0x13, 0x39, 0xfd, 0x18,
+	0xa0, 0xd9, 0x15, 0xaf, 0xf5, 0xec, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0x82, 0x24, 0x37,
+	0x5b, 0x04, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/image.pb.go b/googleapis/cloud/automl/v1beta1/image.pb.go
index 8c0c2c9bf26824e63bdc31cc81f9dffb04d0122d..8c98a4b22ee1b37c77070c45aaf17dfd8fe29664 100644
--- a/googleapis/cloud/automl/v1beta1/image.pb.go
+++ b/googleapis/cloud/automl/v1beta1/image.pb.go
@@ -34,7 +34,7 @@ func (m *ImageClassificationDatasetMetadata) Reset()         { *m = ImageClassif
 func (m *ImageClassificationDatasetMetadata) String() string { return proto.CompactTextString(m) }
 func (*ImageClassificationDatasetMetadata) ProtoMessage()    {}
 func (*ImageClassificationDatasetMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_image_154474385dd5e971, []int{0}
+	return fileDescriptor_image_7fb55170bec5faa5, []int{0}
 }
 func (m *ImageClassificationDatasetMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ImageClassificationDatasetMetadata.Unmarshal(m, b)
@@ -87,7 +87,7 @@ func (m *ImageClassificationModelMetadata) Reset()         { *m = ImageClassific
 func (m *ImageClassificationModelMetadata) String() string { return proto.CompactTextString(m) }
 func (*ImageClassificationModelMetadata) ProtoMessage()    {}
 func (*ImageClassificationModelMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_image_154474385dd5e971, []int{1}
+	return fileDescriptor_image_7fb55170bec5faa5, []int{1}
 }
 func (m *ImageClassificationModelMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ImageClassificationModelMetadata.Unmarshal(m, b)
@@ -141,31 +141,32 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/image.proto", fileDescriptor_image_154474385dd5e971)
-}
-
-var fileDescriptor_image_154474385dd5e971 = []byte{
-	// 338 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xb1, 0x6a, 0xe3, 0x40,
-	0x10, 0x86, 0xd1, 0x99, 0x3b, 0xf0, 0xfa, 0xee, 0x0a, 0xa5, 0x11, 0x4e, 0x82, 0x1d, 0x35, 0x71,
-	0xa5, 0x8d, 0x93, 0x32, 0x55, 0xec, 0x34, 0x2e, 0x0c, 0x46, 0xa4, 0x4a, 0xa3, 0x8c, 0xa4, 0xf5,
-	0xb2, 0x20, 0x69, 0x16, 0xed, 0x28, 0xe0, 0x17, 0xc8, 0xbb, 0xe4, 0x2d, 0x83, 0x66, 0x45, 0xc0,
-	0xc4, 0xb8, 0xdc, 0x4f, 0xdf, 0x3f, 0xfb, 0x8f, 0x56, 0xdc, 0x6a, 0x44, 0x5d, 0x29, 0x59, 0x54,
-	0xd8, 0x95, 0x12, 0x3a, 0xc2, 0xba, 0x92, 0xef, 0xcb, 0x5c, 0x11, 0x2c, 0xa5, 0xa9, 0x41, 0xab,
-	0xc4, 0xb6, 0x48, 0x18, 0x5e, 0x7a, 0x31, 0x61, 0x31, 0xf1, 0x62, 0x32, 0x88, 0xd3, 0xab, 0x61,
-	0x0a, 0x58, 0x23, 0xa1, 0x69, 0x90, 0x80, 0x0c, 0x36, 0xce, 0x47, 0xa7, 0x77, 0xe7, 0xee, 0x28,
-	0x2a, 0x70, 0xce, 0xec, 0x4d, 0xc1, 0x91, 0x21, 0x31, 0x1b, 0x12, 0x7c, 0xca, 0xbb, 0xbd, 0x24,
-	0x53, 0x2b, 0x47, 0x50, 0x5b, 0x2f, 0xc4, 0x1f, 0x81, 0x88, 0x37, 0x7d, 0xbb, 0xf5, 0x51, 0xfc,
-	0x19, 0x08, 0x9c, 0xa2, 0xad, 0x22, 0x28, 0x81, 0x20, 0x7c, 0x13, 0x17, 0xc7, 0xf3, 0x33, 0x3a,
-	0x58, 0x15, 0x05, 0xf3, 0x60, 0xf1, 0xff, 0x5e, 0x26, 0x67, 0x56, 0x4a, 0x8e, 0x07, 0xbf, 0x1c,
-	0xac, 0x4a, 0xc3, 0xe2, 0x07, 0x8b, 0x3f, 0x03, 0x31, 0x3f, 0x51, 0x64, 0x8b, 0xa5, 0xaa, 0xbe,
-	0x6b, 0xc4, 0xe2, 0x5f, 0x0e, 0x4e, 0x65, 0x75, 0x4f, 0x33, 0x53, 0x72, 0x81, 0x71, 0x3a, 0xe9,
-	0x21, 0x9b, 0x9b, 0x32, 0xbc, 0x11, 0x7f, 0xa9, 0x05, 0xd3, 0x64, 0x79, 0x57, 0x6a, 0x45, 0xd1,
-	0xaf, 0x79, 0xb0, 0x18, 0xa5, 0x13, 0x66, 0x2b, 0x46, 0xe1, 0xb5, 0x10, 0x5e, 0x29, 0xd0, 0x51,
-	0x34, 0x62, 0x61, 0xcc, 0x64, 0x8d, 0x8e, 0xc2, 0x99, 0x98, 0x38, 0x42, 0x9b, 0xb5, 0x0a, 0x1c,
-	0x36, 0xd1, 0x6f, 0xbe, 0x43, 0xf4, 0x28, 0x65, 0xb2, 0x6a, 0xc5, 0xac, 0xc0, 0xfa, 0xdc, 0xd6,
-	0x2b, 0xc1, 0xbb, 0xec, 0xfa, 0x7f, 0xbc, 0x0b, 0x5e, 0x9f, 0x06, 0x55, 0x63, 0x05, 0x8d, 0x4e,
-	0xb0, 0xd5, 0x52, 0xab, 0x86, 0x5f, 0x40, 0xfa, 0x4f, 0x60, 0x8d, 0x3b, 0xf9, 0xae, 0x8f, 0xfe,
-	0x98, 0xff, 0x61, 0xfb, 0xe1, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xde, 0x9b, 0x5b, 0x1e, 0x68, 0x02,
-	0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/image.proto", fileDescriptor_image_7fb55170bec5faa5)
+}
+
+var fileDescriptor_image_7fb55170bec5faa5 = []byte{
+	// 359 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xc3, 0x40,
+	0x10, 0x86, 0x49, 0x8b, 0x42, 0xb7, 0xea, 0x21, 0x5e, 0x42, 0xab, 0xb4, 0xe6, 0x62, 0x4f, 0x59,
+	0xab, 0x47, 0x4f, 0x6d, 0x05, 0xe9, 0xa1, 0x50, 0x82, 0x78, 0x90, 0x42, 0x9c, 0x24, 0xdb, 0x65,
+	0x21, 0xc9, 0x84, 0xec, 0x44, 0xe8, 0x0b, 0x78, 0xf6, 0x35, 0x7c, 0x15, 0x9f, 0x4a, 0xb2, 0x1b,
+	0x84, 0x62, 0xe9, 0x71, 0xbf, 0x7c, 0xff, 0xec, 0x3f, 0x59, 0x76, 0x2b, 0x11, 0x65, 0x26, 0x78,
+	0x92, 0x61, 0x9d, 0x72, 0xa8, 0x09, 0xf3, 0x8c, 0x7f, 0x4c, 0x63, 0x41, 0x30, 0xe5, 0x2a, 0x07,
+	0x29, 0x82, 0xb2, 0x42, 0x42, 0x77, 0x68, 0xc5, 0xc0, 0x88, 0x81, 0x15, 0x83, 0x56, 0x1c, 0x5c,
+	0xb5, 0x53, 0xa0, 0x54, 0x1c, 0x8a, 0x02, 0x09, 0x48, 0x61, 0xa1, 0x6d, 0x74, 0x70, 0x77, 0xec,
+	0x8e, 0x24, 0x03, 0xad, 0xd5, 0x56, 0x25, 0x26, 0xd2, 0x26, 0x46, 0x6d, 0xc2, 0x9c, 0xe2, 0x7a,
+	0xcb, 0x49, 0xe5, 0x42, 0x13, 0xe4, 0xa5, 0x15, 0xfc, 0x4f, 0x87, 0xf9, 0xcb, 0xa6, 0xdd, 0x62,
+	0x2f, 0xfe, 0x04, 0x04, 0x5a, 0xd0, 0x4a, 0x10, 0xa4, 0x40, 0xe0, 0xbe, 0xb3, 0xcb, 0xfd, 0xf9,
+	0x11, 0xed, 0x4a, 0xe1, 0x39, 0x63, 0x67, 0x72, 0x71, 0xcf, 0x83, 0x23, 0x2b, 0x05, 0xfb, 0x83,
+	0x5f, 0x76, 0xa5, 0x08, 0xdd, 0xe4, 0x1f, 0xf3, 0xbf, 0x1d, 0x36, 0x3e, 0x50, 0x64, 0x85, 0xa9,
+	0xc8, 0xfe, 0x6a, 0xf8, 0xec, 0x3c, 0x06, 0x2d, 0xa2, 0xbc, 0xa1, 0x91, 0x4a, 0x4d, 0x81, 0x5e,
+	0xd8, 0x6f, 0xa0, 0x31, 0x97, 0xa9, 0x7b, 0xc3, 0xce, 0xa8, 0x02, 0x55, 0x44, 0x71, 0x9d, 0x4a,
+	0x41, 0x5e, 0x67, 0xec, 0x4c, 0xba, 0x61, 0xdf, 0xb0, 0xb9, 0x41, 0xee, 0x35, 0x63, 0x56, 0x49,
+	0x50, 0x93, 0xd7, 0x35, 0x42, 0xcf, 0x90, 0x05, 0x6a, 0x72, 0x47, 0xac, 0xaf, 0x09, 0xcb, 0xa8,
+	0x12, 0xa0, 0xb1, 0xf0, 0x4e, 0xcc, 0x1d, 0xac, 0x41, 0xa1, 0x21, 0xf3, 0x2f, 0x87, 0x8d, 0x12,
+	0xcc, 0x8f, 0xad, 0x3d, 0x67, 0x66, 0x99, 0x75, 0xf3, 0x93, 0xd7, 0xce, 0xdb, 0xac, 0x55, 0x25,
+	0x66, 0x50, 0xc8, 0x00, 0x2b, 0xc9, 0xa5, 0x28, 0xcc, 0x13, 0x70, 0xfb, 0x09, 0x4a, 0xa5, 0x0f,
+	0x3e, 0xec, 0xa3, 0x3d, 0xfe, 0x74, 0x86, 0xcf, 0x46, 0xdc, 0x2c, 0x1a, 0x69, 0x33, 0xab, 0x09,
+	0x57, 0xd9, 0xe6, 0xd5, 0x4a, 0xf1, 0xa9, 0x99, 0xf5, 0xf0, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x0c,
+	0x97, 0x73, 0xa0, 0x87, 0x02, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/io.pb.go b/googleapis/cloud/automl/v1beta1/io.pb.go
index 56f068f43d88790829f51f047c932fdb964724a9..5fdf13a6421afa1aec7922de88a9583a59ad48e9 100644
--- a/googleapis/cloud/automl/v1beta1/io.pb.go
+++ b/googleapis/cloud/automl/v1beta1/io.pb.go
@@ -35,7 +35,7 @@ func (m *InputConfig) Reset()         { *m = InputConfig{} }
 func (m *InputConfig) String() string { return proto.CompactTextString(m) }
 func (*InputConfig) ProtoMessage()    {}
 func (*InputConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_io_30049c92fb799bce, []int{0}
+	return fileDescriptor_io_433169c5aff300ba, []int{0}
 }
 func (m *InputConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_InputConfig.Unmarshal(m, b)
@@ -150,7 +150,7 @@ func (m *OutputConfig) Reset()         { *m = OutputConfig{} }
 func (m *OutputConfig) String() string { return proto.CompactTextString(m) }
 func (*OutputConfig) ProtoMessage()    {}
 func (*OutputConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_io_30049c92fb799bce, []int{1}
+	return fileDescriptor_io_433169c5aff300ba, []int{1}
 }
 func (m *OutputConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_OutputConfig.Unmarshal(m, b)
@@ -264,7 +264,7 @@ func (m *GcsSource) Reset()         { *m = GcsSource{} }
 func (m *GcsSource) String() string { return proto.CompactTextString(m) }
 func (*GcsSource) ProtoMessage()    {}
 func (*GcsSource) Descriptor() ([]byte, []int) {
-	return fileDescriptor_io_30049c92fb799bce, []int{2}
+	return fileDescriptor_io_433169c5aff300ba, []int{2}
 }
 func (m *GcsSource) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GcsSource.Unmarshal(m, b)
@@ -309,7 +309,7 @@ func (m *GcsDestination) Reset()         { *m = GcsDestination{} }
 func (m *GcsDestination) String() string { return proto.CompactTextString(m) }
 func (*GcsDestination) ProtoMessage()    {}
 func (*GcsDestination) Descriptor() ([]byte, []int) {
-	return fileDescriptor_io_30049c92fb799bce, []int{3}
+	return fileDescriptor_io_433169c5aff300ba, []int{3}
 }
 func (m *GcsDestination) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GcsDestination.Unmarshal(m, b)
@@ -344,28 +344,30 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/io.proto", fileDescriptor_io_30049c92fb799bce)
-}
-
-var fileDescriptor_io_30049c92fb799bce = []byte{
-	// 300 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x4b, 0x4b, 0x03, 0x31,
-	0x10, 0xc7, 0xbb, 0x08, 0xc5, 0x9d, 0x6a, 0x8b, 0x7b, 0x2a, 0x3e, 0xb0, 0x2c, 0x22, 0xa5, 0x42,
-	0x42, 0xf5, 0xa8, 0x17, 0xab, 0xd0, 0x7a, 0xb2, 0xac, 0xd4, 0x83, 0x97, 0x9a, 0x6e, 0xd3, 0x10,
-	0xd8, 0x66, 0x96, 0x3c, 0xc4, 0x8f, 0x2f, 0x9b, 0xac, 0xd6, 0x82, 0xd4, 0x63, 0x66, 0x7e, 0xff,
-	0x47, 0x18, 0xb8, 0x10, 0x88, 0xa2, 0xe0, 0x34, 0x2f, 0xd0, 0x2d, 0x29, 0x73, 0x16, 0xd7, 0x05,
-	0xfd, 0x18, 0x2e, 0xb8, 0x65, 0x43, 0x2a, 0x91, 0x94, 0x1a, 0x2d, 0x26, 0x27, 0x81, 0x22, 0x9e,
-	0x22, 0x81, 0x22, 0x35, 0x75, 0x7c, 0x5a, 0x5b, 0xb0, 0x52, 0x52, 0xa6, 0x14, 0x5a, 0x66, 0x25,
-	0x2a, 0x13, 0xa4, 0xe9, 0x3b, 0xb4, 0x9e, 0x54, 0xe9, 0xec, 0x03, 0xaa, 0x95, 0x14, 0xc9, 0x18,
-	0x40, 0xe4, 0x66, 0x6e, 0xd0, 0xe9, 0x9c, 0x77, 0xa3, 0x5e, 0xd4, 0x6f, 0x5d, 0x5f, 0x92, 0x1d,
-	0xf6, 0x64, 0x9c, 0x9b, 0x17, 0x4f, 0x4f, 0x1a, 0x59, 0x2c, 0xbe, 0x1f, 0xa3, 0x7d, 0x68, 0x06,
-	0x93, 0xd4, 0xc1, 0xc1, 0xb3, 0xb3, 0x9b, 0x88, 0x57, 0xe8, 0x54, 0x11, 0x4b, 0x6e, 0xac, 0x54,
-	0xbe, 0x4b, 0x9d, 0x73, 0xf5, 0x5f, 0xce, 0xe3, 0x46, 0x32, 0x69, 0x64, 0x6d, 0xb1, 0x35, 0x19,
-	0x1d, 0x42, 0xeb, 0x97, 0x67, 0x3a, 0x80, 0xf8, 0xa7, 0x5a, 0x72, 0x06, 0x20, 0xab, 0x5f, 0xce,
-	0x9d, 0x96, 0xa6, 0x1b, 0xf5, 0xf6, 0xfa, 0x71, 0x16, 0xfb, 0xc9, 0x4c, 0x4b, 0x93, 0xde, 0x41,
-	0x7b, 0xdb, 0x3e, 0x19, 0xc0, 0x11, 0xfa, 0xd2, 0x95, 0x62, 0x5e, 0x6a, 0xbe, 0x92, 0x9f, 0xbe,
-	0x66, 0x9c, 0x75, 0xc2, 0x62, 0xa6, 0xe5, 0xd4, 0x8f, 0x47, 0x2b, 0x38, 0xcf, 0x71, 0xbd, 0xab,
-	0xfc, 0x34, 0x7a, 0xbb, 0xaf, 0xd7, 0x02, 0x0b, 0xa6, 0x04, 0x41, 0x2d, 0xa8, 0xe0, 0xca, 0xdf,
-	0x80, 0x86, 0x15, 0x2b, 0xa5, 0xf9, 0xf3, 0xce, 0xb7, 0xe1, 0xb9, 0x68, 0x7a, 0xfa, 0xe6, 0x2b,
-	0x00, 0x00, 0xff, 0xff, 0xe3, 0x87, 0x4d, 0x64, 0x14, 0x02, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/io.proto", fileDescriptor_io_433169c5aff300ba)
+}
+
+var fileDescriptor_io_433169c5aff300ba = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x5d, 0x4b, 0x32, 0x41,
+	0x14, 0xc7, 0xdd, 0xe7, 0x01, 0x79, 0xf6, 0xf8, 0xa4, 0xb4, 0x57, 0x92, 0x45, 0xb2, 0x44, 0x88,
+	0xc1, 0x0e, 0xd6, 0x65, 0xdd, 0xa8, 0x81, 0x76, 0x11, 0xc9, 0x86, 0x5e, 0x84, 0x60, 0xe3, 0xba,
+	0x0e, 0x03, 0xeb, 0x9c, 0x65, 0x5e, 0xa2, 0x0f, 0xd0, 0xa7, 0xeb, 0x53, 0xc5, 0xce, 0x6c, 0x99,
+	0x10, 0x76, 0x39, 0xe7, 0xfc, 0xfe, 0x2f, 0xc3, 0x81, 0x33, 0x86, 0xc8, 0xb2, 0x94, 0x24, 0x19,
+	0x9a, 0x15, 0xa1, 0x46, 0xe3, 0x26, 0x23, 0x2f, 0xbd, 0x65, 0xaa, 0x69, 0x8f, 0x70, 0x8c, 0x72,
+	0x89, 0x1a, 0x83, 0x96, 0xa3, 0x22, 0x4b, 0x45, 0x8e, 0x8a, 0x4a, 0xea, 0xe8, 0xb8, 0xb4, 0xa0,
+	0x39, 0x27, 0x54, 0x08, 0xd4, 0x54, 0x73, 0x14, 0xca, 0x49, 0xc3, 0x67, 0xa8, 0xdd, 0x89, 0xdc,
+	0xe8, 0x21, 0x8a, 0x35, 0x67, 0xc1, 0x08, 0x80, 0x25, 0x6a, 0xa1, 0xd0, 0xc8, 0x24, 0x6d, 0x7a,
+	0x6d, 0xaf, 0x53, 0xbb, 0x3c, 0x8f, 0xf6, 0xd8, 0x47, 0xa3, 0x44, 0x3d, 0x5a, 0x7a, 0x5c, 0x89,
+	0x7d, 0xf6, 0xf9, 0x18, 0xfc, 0x83, 0xaa, 0x33, 0x09, 0x0d, 0xfc, 0x7f, 0x30, 0x7a, 0x1b, 0x31,
+	0x83, 0x46, 0x11, 0xb1, 0x4a, 0x95, 0xe6, 0xc2, 0x76, 0x29, 0x73, 0x2e, 0x7e, 0xcb, 0xb9, 0xdd,
+	0x4a, 0xc6, 0x95, 0xb8, 0xce, 0x76, 0x26, 0x83, 0x03, 0xa8, 0x7d, 0xf3, 0x0c, 0xbb, 0xe0, 0x7f,
+	0x55, 0x0b, 0x4e, 0x00, 0x78, 0xf1, 0xcb, 0x85, 0x91, 0x5c, 0x35, 0xbd, 0xf6, 0xdf, 0x8e, 0x1f,
+	0xfb, 0x76, 0x32, 0x95, 0x5c, 0x85, 0x37, 0x50, 0xdf, 0xb5, 0x0f, 0xba, 0x70, 0x88, 0xb6, 0x74,
+	0xa1, 0x58, 0xe4, 0x32, 0x5d, 0xf3, 0x57, 0x5b, 0xd3, 0x8f, 0x1b, 0x6e, 0x31, 0x95, 0x7c, 0x62,
+	0xc7, 0x83, 0x37, 0x0f, 0x4e, 0x13, 0xdc, 0xec, 0x6b, 0x3f, 0xf1, 0x9e, 0xfa, 0xe5, 0x9a, 0x61,
+	0x46, 0x05, 0x8b, 0x50, 0x32, 0xc2, 0x52, 0x61, 0x8f, 0x40, 0xdc, 0x8a, 0xe6, 0x5c, 0xfd, 0x78,
+	0xe8, 0x6b, 0xf7, 0x7c, 0xff, 0xd3, 0x1a, 0x59, 0x70, 0x3e, 0x2c, 0xa0, 0x79, 0xdf, 0x68, 0xbc,
+	0xcf, 0xe6, 0x33, 0x07, 0x2d, 0xab, 0xd6, 0xeb, 0xea, 0x23, 0x00, 0x00, 0xff, 0xff, 0x56, 0x2c,
+	0xc8, 0x9a, 0x33, 0x02, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/model.pb.go b/googleapis/cloud/automl/v1beta1/model.pb.go
index ce5389e90035d93d8b4bddf0371128342fb6c9aa..6dba79496f8c8523cd2f8637e74d9d9a81684264 100644
--- a/googleapis/cloud/automl/v1beta1/model.pb.go
+++ b/googleapis/cloud/automl/v1beta1/model.pb.go
@@ -47,7 +47,7 @@ func (x Model_DeploymentState) String() string {
 	return proto.EnumName(Model_DeploymentState_name, int32(x))
 }
 func (Model_DeploymentState) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_model_2836c0ea5c1ddbd5, []int{0, 0}
+	return fileDescriptor_model_68def19a41c10297, []int{0, 0}
 }
 
 // API proto representing a trained machine learning model.
@@ -92,7 +92,7 @@ func (m *Model) Reset()         { *m = Model{} }
 func (m *Model) String() string { return proto.CompactTextString(m) }
 func (*Model) ProtoMessage()    {}
 func (*Model) Descriptor() ([]byte, []int) {
-	return fileDescriptor_model_2836c0ea5c1ddbd5, []int{0}
+	return fileDescriptor_model_68def19a41c10297, []int{0}
 }
 func (m *Model) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Model.Unmarshal(m, b)
@@ -303,41 +303,42 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/model.proto", fileDescriptor_model_2836c0ea5c1ddbd5)
-}
-
-var fileDescriptor_model_2836c0ea5c1ddbd5 = []byte{
-	// 501 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xd1, 0x6e, 0xd3, 0x30,
-	0x14, 0x86, 0x97, 0x01, 0x63, 0x3b, 0x1d, 0x6d, 0xe5, 0xab, 0xa8, 0x0c, 0x35, 0x14, 0x09, 0x7a,
-	0x43, 0xa2, 0x15, 0x71, 0x35, 0xb8, 0xd8, 0xd6, 0x20, 0x2a, 0xd1, 0x52, 0xda, 0xec, 0x02, 0x24,
-	0x14, 0xb9, 0x89, 0x1b, 0x59, 0x4a, 0xe2, 0xa8, 0x39, 0x41, 0xdb, 0x33, 0x20, 0xf1, 0x2e, 0xbc,
-	0x21, 0x8a, 0xed, 0x16, 0x5a, 0x31, 0xf7, 0xae, 0x3e, 0xe7, 0xfb, 0x8f, 0x7f, 0xff, 0x3d, 0x81,
-	0x57, 0x89, 0x10, 0x49, 0xca, 0xbc, 0x28, 0x15, 0x55, 0xec, 0xd1, 0x0a, 0x45, 0x96, 0x7a, 0x3f,
-	0xce, 0x17, 0x0c, 0xe9, 0xb9, 0x97, 0x89, 0x98, 0xa5, 0x6e, 0xb1, 0x12, 0x28, 0xc8, 0x53, 0x05,
-	0xba, 0x12, 0x74, 0x15, 0xe8, 0x6a, 0xb0, 0x73, 0xa6, 0xa7, 0xd0, 0x82, 0x7b, 0x34, 0xcf, 0x05,
-	0x52, 0xe4, 0x22, 0x2f, 0x95, 0xb4, 0x63, 0xbc, 0x83, 0x67, 0x34, 0x61, 0x1a, 0x7c, 0x69, 0x02,
-	0x91, 0xdd, 0xa2, 0xe6, 0x5e, 0x1b, 0xb9, 0x15, 0xcd, 0xcb, 0x54, 0x1a, 0xd0, 0x78, 0x57, 0xe3,
-	0xf2, 0xb4, 0xa8, 0x96, 0x1e, 0xf2, 0x8c, 0x95, 0x48, 0xb3, 0x42, 0x01, 0xbd, 0xdf, 0x47, 0xf0,
-	0x68, 0x5c, 0xbf, 0x95, 0xfc, 0xb2, 0xe0, 0x85, 0x74, 0x14, 0x46, 0x29, 0x2d, 0x4b, 0xbe, 0xe4,
-	0x91, 0x9c, 0x14, 0xca, 0x28, 0xc2, 0x8c, 0x21, 0x8d, 0x29, 0x52, 0xfb, 0x89, 0x63, 0xf5, 0x1b,
-	0x83, 0xf7, 0xae, 0x21, 0x14, 0x77, 0x54, 0xcf, 0xb9, 0xde, 0x1a, 0x23, 0x2f, 0x19, 0xeb, 0x21,
-	0x1f, 0x0f, 0x66, 0x0e, 0xdf, 0xc3, 0x90, 0x9f, 0x16, 0xf4, 0xea, 0x97, 0xef, 0xf1, 0xd3, 0x94,
-	0x7e, 0xde, 0x19, 0xfd, 0x04, 0xec, 0x16, 0xcd, 0x76, 0xba, 0x68, 0x46, 0x48, 0x05, 0x9d, 0x7f,
-	0xe2, 0xdd, 0x35, 0xd1, 0x92, 0x26, 0xde, 0x9a, 0x4d, 0xfc, 0x95, 0xef, 0xde, 0x6e, 0xe3, 0x3d,
-	0x3d, 0x42, 0xe0, 0x61, 0x4e, 0x33, 0x66, 0x5b, 0x8e, 0xd5, 0x3f, 0x99, 0xc9, 0xdf, 0xe4, 0x39,
-	0x9c, 0xc6, 0xbc, 0x2c, 0x52, 0x7a, 0x17, 0xca, 0xde, 0xa1, 0xec, 0x35, 0x74, 0x6d, 0x52, 0x23,
-	0xcf, 0x00, 0x6a, 0x79, 0xc9, 0x30, 0xe4, 0xb1, 0xfd, 0x40, 0x02, 0x27, 0xba, 0x32, 0x8a, 0xc9,
-	0x05, 0x34, 0xa2, 0x15, 0xa3, 0xc8, 0xc2, 0x7a, 0x1f, 0xec, 0xc7, 0xd2, 0x7d, 0x67, 0xed, 0x7e,
-	0xbd, 0x2c, 0x6e, 0xb0, 0x5e, 0x96, 0x19, 0x28, 0xbc, 0x2e, 0xd4, 0xe2, 0xaa, 0x88, 0x37, 0xe2,
-	0xc6, 0x7e, 0xb1, 0xc2, 0xa5, 0xf8, 0x3b, 0xb4, 0x63, 0x56, 0xa4, 0xe2, 0x2e, 0x63, 0x39, 0x86,
-	0x25, 0x52, 0x64, 0xf6, 0xb1, 0x63, 0xf5, 0x9b, 0x83, 0x81, 0x31, 0x3c, 0x99, 0x8a, 0x3b, 0xdc,
-	0x48, 0xe7, 0xb5, 0x72, 0xd6, 0x8a, 0xb7, 0x0b, 0xbd, 0x2f, 0xd0, 0xda, 0x61, 0x88, 0x03, 0x67,
-	0x43, 0x7f, 0xfa, 0xe9, 0xf3, 0xd7, 0xb1, 0x3f, 0x09, 0xc2, 0x79, 0x70, 0x19, 0xf8, 0xe1, 0xcd,
-	0x64, 0x3e, 0xf5, 0xaf, 0x47, 0x1f, 0x46, 0xfe, 0xb0, 0x7d, 0x40, 0x4e, 0xe1, 0x58, 0x11, 0xfe,
-	0xb0, 0x6d, 0x91, 0x26, 0xc0, 0xcd, 0x64, 0x73, 0x3e, 0xbc, 0x6a, 0x43, 0x73, 0xfb, 0xcf, 0xbe,
-	0x5a, 0x42, 0x37, 0x12, 0x99, 0xc9, 0xee, 0xd4, 0xfa, 0x76, 0xa9, 0xdb, 0x89, 0x48, 0x69, 0x9e,
-	0xb8, 0x62, 0x95, 0x78, 0x09, 0xcb, 0x65, 0x3a, 0x9e, 0x6a, 0xd1, 0x82, 0x97, 0xff, 0xfd, 0x8e,
-	0x2f, 0xd4, 0x71, 0x71, 0x24, 0xe9, 0x37, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x10, 0xe2,
-	0xaa, 0xa9, 0x04, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/model.proto", fileDescriptor_model_68def19a41c10297)
+}
+
+var fileDescriptor_model_68def19a41c10297 = []byte{
+	// 522 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xdf, 0x6e, 0x12, 0x41,
+	0x14, 0xc6, 0xbb, 0xa8, 0xb5, 0x1d, 0x2a, 0x90, 0xb9, 0xda, 0xd0, 0x1a, 0x10, 0x13, 0xe5, 0xc6,
+	0xdd, 0x14, 0xe3, 0x55, 0xf5, 0x82, 0xc2, 0xaa, 0x24, 0x82, 0x08, 0xd4, 0x44, 0x83, 0xd9, 0x0c,
+	0xec, 0x74, 0x33, 0xc9, 0xec, 0xce, 0x86, 0x3d, 0x6b, 0xda, 0x7b, 0xef, 0x4c, 0x7c, 0x17, 0x5f,
+	0xc3, 0xa7, 0x32, 0xf3, 0x07, 0x14, 0xa2, 0xc3, 0x1d, 0x73, 0xce, 0xef, 0x3b, 0xf3, 0xcd, 0xc7,
+	0x59, 0xf4, 0x34, 0x16, 0x22, 0xe6, 0xd4, 0x5f, 0x72, 0x51, 0x44, 0x3e, 0x29, 0x40, 0x24, 0xdc,
+	0xff, 0x7a, 0xbe, 0xa0, 0x40, 0xce, 0xfd, 0x44, 0x44, 0x94, 0x7b, 0xd9, 0x4a, 0x80, 0xc0, 0xa7,
+	0x1a, 0xf4, 0x14, 0xe8, 0x69, 0xd0, 0x33, 0x60, 0xfd, 0xcc, 0x4c, 0x21, 0x19, 0xf3, 0x49, 0x9a,
+	0x0a, 0x20, 0xc0, 0x44, 0x9a, 0x6b, 0x69, 0xdd, 0x7a, 0x07, 0x4b, 0x48, 0x4c, 0x0d, 0xf8, 0xc4,
+	0x06, 0x02, 0xbd, 0x01, 0xc3, 0x3d, 0xb3, 0x72, 0x2b, 0x92, 0xe6, 0x5c, 0x19, 0x30, 0x78, 0xc3,
+	0xe0, 0xea, 0xb4, 0x28, 0xae, 0x7d, 0x60, 0x09, 0xcd, 0x81, 0x24, 0x99, 0x06, 0x5a, 0x3f, 0x0f,
+	0xd1, 0xbd, 0xa1, 0x7c, 0x2b, 0xfe, 0xe1, 0xa0, 0xc7, 0xca, 0x51, 0xb8, 0xe4, 0x24, 0xcf, 0xd9,
+	0x35, 0x5b, 0xaa, 0x49, 0xa1, 0x8a, 0x22, 0x4c, 0x28, 0x90, 0x88, 0x00, 0x71, 0x1f, 0x34, 0x9d,
+	0x76, 0xb9, 0xf3, 0xca, 0xb3, 0x84, 0xe2, 0x0d, 0xe4, 0x9c, 0xde, 0xd6, 0x18, 0x75, 0xc9, 0xd0,
+	0x0c, 0x79, 0x7b, 0x30, 0x69, 0xb2, 0x3d, 0x0c, 0xfe, 0xee, 0xa0, 0x96, 0x7c, 0xf9, 0x1e, 0x3f,
+	0x15, 0xe5, 0xe7, 0xa5, 0xd5, 0xcf, 0x8c, 0xde, 0x80, 0xdd, 0x4e, 0x03, 0xec, 0x08, 0x2e, 0x50,
+	0xfd, 0xaf, 0x78, 0x77, 0x4d, 0x54, 0x95, 0x89, 0x17, 0x76, 0x13, 0x7f, 0xe4, 0xbb, 0xb7, 0xbb,
+	0xf0, 0x9f, 0x1e, 0xc6, 0xe8, 0x6e, 0x4a, 0x12, 0xea, 0x3a, 0x4d, 0xa7, 0x7d, 0x3c, 0x51, 0xbf,
+	0xf1, 0x23, 0x74, 0x12, 0xb1, 0x3c, 0xe3, 0xe4, 0x36, 0x54, 0xbd, 0x92, 0xea, 0x95, 0x4d, 0x6d,
+	0x24, 0x91, 0x87, 0x08, 0x49, 0x79, 0x4e, 0x21, 0x64, 0x91, 0x7b, 0x47, 0x01, 0xc7, 0xa6, 0x32,
+	0x88, 0xf0, 0x05, 0x2a, 0x2f, 0x57, 0x94, 0x00, 0x0d, 0xe5, 0x3e, 0xb8, 0xf7, 0x95, 0xfb, 0xfa,
+	0xda, 0xfd, 0x7a, 0x59, 0xbc, 0xd9, 0x7a, 0x59, 0x26, 0x48, 0xe3, 0xb2, 0x20, 0xc5, 0x45, 0x16,
+	0x6d, 0xc4, 0xe5, 0xfd, 0x62, 0x8d, 0x2b, 0xf1, 0x17, 0x54, 0x8b, 0x68, 0xc6, 0xc5, 0x6d, 0x42,
+	0x53, 0x08, 0x73, 0x20, 0x40, 0xdd, 0xa3, 0xa6, 0xd3, 0xae, 0x74, 0x3a, 0xd6, 0xf0, 0x54, 0x2a,
+	0x5e, 0x7f, 0x23, 0x9d, 0x4a, 0xe5, 0xa4, 0x1a, 0x6d, 0x17, 0x5a, 0x1f, 0x50, 0x75, 0x87, 0xc1,
+	0x4d, 0x74, 0xd6, 0x0f, 0xc6, 0xef, 0xde, 0x7f, 0x1a, 0x06, 0xa3, 0x59, 0x38, 0x9d, 0x75, 0x67,
+	0x41, 0x78, 0x35, 0x9a, 0x8e, 0x83, 0xde, 0xe0, 0xf5, 0x20, 0xe8, 0xd7, 0x0e, 0xf0, 0x09, 0x3a,
+	0xd2, 0x44, 0xd0, 0xaf, 0x39, 0xb8, 0x82, 0xd0, 0xd5, 0x68, 0x73, 0x2e, 0x5d, 0xd6, 0x50, 0x65,
+	0xfb, 0xcf, 0xbe, 0xfc, 0xe6, 0xa0, 0xc6, 0x52, 0x24, 0x36, 0xbf, 0x63, 0xe7, 0x73, 0xd7, 0xb4,
+	0x63, 0xc1, 0x49, 0x1a, 0x7b, 0x62, 0x15, 0xfb, 0x31, 0x4d, 0x55, 0x3c, 0xbe, 0x6e, 0x91, 0x8c,
+	0xe5, 0xff, 0xfc, 0x90, 0x2f, 0xf4, 0xf1, 0x57, 0xe9, 0xf4, 0x8d, 0x02, 0xe7, 0x3d, 0x09, 0xcd,
+	0xbb, 0x05, 0x88, 0x21, 0x9f, 0x7f, 0xd4, 0xd0, 0xe2, 0x50, 0xcd, 0x7a, 0xfe, 0x3b, 0x00, 0x00,
+	0xff, 0xff, 0x01, 0x63, 0x79, 0x4b, 0xc8, 0x04, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/model_evaluation.pb.go b/googleapis/cloud/automl/v1beta1/model_evaluation.pb.go
index 503277d0c8119aaca687232fa83690b3e7b12256..c3c3c995514e4d7f222bfcdcdd7698f278608641 100644
--- a/googleapis/cloud/automl/v1beta1/model_evaluation.pb.go
+++ b/googleapis/cloud/automl/v1beta1/model_evaluation.pb.go
@@ -55,7 +55,7 @@ func (m *ModelEvaluation) Reset()         { *m = ModelEvaluation{} }
 func (m *ModelEvaluation) String() string { return proto.CompactTextString(m) }
 func (*ModelEvaluation) ProtoMessage()    {}
 func (*ModelEvaluation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_model_evaluation_77eb85cbfb723c98, []int{0}
+	return fileDescriptor_model_evaluation_0e495b83a4998d51, []int{0}
 }
 func (m *ModelEvaluation) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ModelEvaluation.Unmarshal(m, b)
@@ -219,34 +219,35 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/model_evaluation.proto", fileDescriptor_model_evaluation_77eb85cbfb723c98)
-}
-
-var fileDescriptor_model_evaluation_77eb85cbfb723c98 = []byte{
-	// 388 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4f, 0x6b, 0xdb, 0x30,
-	0x1c, 0x9d, 0xb7, 0x25, 0x5b, 0x94, 0xc3, 0x86, 0x60, 0xcc, 0x78, 0x61, 0xc9, 0x76, 0xca, 0x61,
-	0x93, 0x96, 0x0c, 0x06, 0x23, 0xbd, 0x34, 0x21, 0xd0, 0x1e, 0x02, 0xc5, 0xcd, 0xa9, 0x17, 0xa3,
-	0xc8, 0x8a, 0x11, 0xe8, 0x8f, 0xb1, 0xe4, 0xd0, 0x6b, 0xaf, 0xfd, 0x9c, 0xfd, 0x20, 0xc5, 0x92,
-	0x13, 0x3b, 0x10, 0x7c, 0xb3, 0xfc, 0xde, 0xfb, 0xfd, 0xde, 0xd3, 0x13, 0x98, 0x67, 0x5a, 0x67,
-	0x82, 0x61, 0x2a, 0x74, 0x99, 0x62, 0x52, 0x5a, 0x2d, 0x05, 0x3e, 0xcc, 0x76, 0xcc, 0x92, 0x19,
-	0x96, 0x3a, 0x65, 0x22, 0x61, 0x07, 0x22, 0x4a, 0x62, 0xb9, 0x56, 0x28, 0x2f, 0xb4, 0xd5, 0xf0,
-	0x9b, 0xd7, 0x20, 0xa7, 0x41, 0x5e, 0x83, 0x6a, 0x4d, 0x34, 0xaa, 0x07, 0x92, 0x9c, 0x63, 0xa2,
-	0x94, 0xb6, 0x4e, 0x69, 0xbc, 0x34, 0xfa, 0xd3, 0xb5, 0x8e, 0x0a, 0x62, 0x0c, 0xdf, 0x73, 0xda,
-	0x5a, 0x16, 0xfd, 0xee, 0x52, 0xd8, 0x82, 0x28, 0x23, 0xda, 0xf4, 0x71, 0x4d, 0x77, 0xa7, 0x5d,
-	0xb9, 0xc7, 0x96, 0x4b, 0x66, 0x2c, 0x91, 0xb9, 0x27, 0xfc, 0x7c, 0x79, 0x07, 0x3e, 0x6d, 0xaa,
-	0x5c, 0xeb, 0x53, 0x2c, 0xf8, 0x1c, 0x80, 0x1f, 0xe7, 0xcb, 0x5b, 0xa1, 0x13, 0xc9, 0x6c, 0xc1,
-	0xa9, 0x09, 0x3f, 0x4e, 0x82, 0xe9, 0x70, 0x7e, 0x85, 0x3a, 0xd2, 0xa3, 0xd5, 0xd9, 0x94, 0x66,
-	0xc5, 0xc6, 0xcf, 0xb8, 0x79, 0x13, 0x8f, 0x69, 0x37, 0x05, 0x3e, 0x05, 0xe0, 0x7b, 0x2b, 0xd7,
-	0x25, 0x27, 0x03, 0xe7, 0xe4, 0x7f, 0xa7, 0x93, 0x6d, 0x33, 0xe2, 0x92, 0x8d, 0x91, 0xed, 0xc0,
-	0x21, 0x04, 0xef, 0x15, 0x91, 0x2c, 0x0c, 0x26, 0xc1, 0x74, 0x10, 0xbb, 0x6f, 0xf8, 0x0b, 0xc0,
-	0xa6, 0xcf, 0xc4, 0xe4, 0x8c, 0x26, 0x3c, 0x0d, 0xdf, 0x3a, 0xc6, 0xe7, 0x06, 0xb9, 0xcf, 0x19,
-	0xbd, 0x4d, 0xe1, 0x02, 0x0c, 0x69, 0xc1, 0x88, 0x65, 0x49, 0x55, 0x40, 0xd8, 0x73, 0x8e, 0xa3,
-	0xa3, 0xe3, 0x63, 0x3b, 0x68, 0x7b, 0x6c, 0x27, 0x06, 0x9e, 0x5e, 0xfd, 0x80, 0xff, 0xc0, 0xd7,
-	0x3a, 0x35, 0x4b, 0x13, 0xf6, 0x48, 0x64, 0x2e, 0x58, 0x42, 0x75, 0xa9, 0x6c, 0xd8, 0x9f, 0x04,
-	0xd3, 0x5e, 0xfc, 0xe5, 0x04, 0xaf, 0x3d, 0xba, 0xaa, 0xc0, 0xe5, 0x00, 0x7c, 0xa8, 0xaf, 0x68,
-	0xb9, 0x07, 0x63, 0xaa, 0x65, 0xd7, 0x0d, 0xdd, 0x05, 0x0f, 0xd7, 0x35, 0x9c, 0x69, 0x41, 0x54,
-	0x86, 0x74, 0x91, 0xe1, 0x8c, 0x29, 0x67, 0x0e, 0x7b, 0x88, 0xe4, 0xdc, 0x5c, 0x7c, 0x7a, 0x0b,
-	0x7f, 0xdc, 0xf5, 0x1d, 0xfb, 0xef, 0x6b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x78, 0x76, 0xc2,
-	0x48, 0x03, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/model_evaluation.proto", fileDescriptor_model_evaluation_0e495b83a4998d51)
+}
+
+var fileDescriptor_model_evaluation_0e495b83a4998d51 = []byte{
+	// 410 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0x8b, 0x13, 0x31,
+	0x18, 0x36, 0xab, 0xbb, 0xda, 0xec, 0x41, 0x09, 0x88, 0xc3, 0xec, 0x62, 0xab, 0xa7, 0x1e, 0x34,
+	0x71, 0x2b, 0x08, 0x52, 0x2f, 0x6d, 0x29, 0xea, 0xa1, 0x20, 0x63, 0xf1, 0x20, 0x85, 0x21, 0xcd,
+	0xa4, 0x43, 0x20, 0x1f, 0xc3, 0x24, 0x53, 0xbc, 0x0a, 0x9e, 0xfc, 0x69, 0xfe, 0x0e, 0x7f, 0xc8,
+	0x32, 0xc9, 0xb4, 0x33, 0x85, 0x32, 0xb7, 0xc9, 0x3c, 0x1f, 0xef, 0xf3, 0xe4, 0x0d, 0x9c, 0xe4,
+	0xc6, 0xe4, 0x92, 0x13, 0x26, 0x4d, 0x95, 0x11, 0x5a, 0x39, 0xa3, 0x24, 0xd9, 0xdf, 0x6d, 0xb9,
+	0xa3, 0x77, 0x44, 0x99, 0x8c, 0xcb, 0x94, 0xef, 0xa9, 0xac, 0xa8, 0x13, 0x46, 0xe3, 0xa2, 0x34,
+	0xce, 0xa0, 0x9b, 0xa0, 0xc1, 0x5e, 0x83, 0x83, 0x06, 0x37, 0x9a, 0xf8, 0xb6, 0x31, 0xa4, 0x85,
+	0x20, 0x54, 0x6b, 0xe3, 0xbc, 0xd2, 0x06, 0x69, 0xfc, 0xae, 0x6f, 0x1c, 0x93, 0xd4, 0x5a, 0xb1,
+	0x13, 0xac, 0x33, 0x2c, 0x7e, 0xdb, 0xa7, 0x70, 0x25, 0xd5, 0x56, 0x76, 0xe9, 0xc3, 0x86, 0xee,
+	0x4f, 0xdb, 0x6a, 0x47, 0x9c, 0x50, 0xdc, 0x3a, 0xaa, 0x8a, 0x40, 0x78, 0xfd, 0xff, 0x21, 0x7c,
+	0xba, 0xaa, 0x7b, 0x2d, 0x8f, 0xb5, 0xd0, 0x5f, 0x00, 0x5f, 0x9d, 0x0e, 0xef, 0x94, 0x4e, 0x15,
+	0x77, 0xa5, 0x60, 0x36, 0x7a, 0x32, 0x02, 0xe3, 0xeb, 0xc9, 0x27, 0xdc, 0xd3, 0x1e, 0x2f, 0x4e,
+	0x5c, 0xda, 0x11, 0xab, 0xe0, 0xf1, 0xe5, 0x41, 0x32, 0x64, 0xfd, 0x14, 0xf4, 0x1b, 0xc0, 0x97,
+	0x9d, 0x5e, 0xe7, 0x92, 0x0c, 0x7c, 0x92, 0x8f, 0xbd, 0x49, 0xd6, 0xad, 0xc5, 0xb9, 0x18, 0xb7,
+	0xae, 0x07, 0x47, 0x08, 0x3e, 0xd2, 0x54, 0xf1, 0x08, 0x8c, 0xc0, 0x78, 0x90, 0xf8, 0x6f, 0xf4,
+	0x06, 0xa2, 0x76, 0x9f, 0xa9, 0x2d, 0x38, 0x4b, 0x45, 0x16, 0x5d, 0x78, 0xc6, 0xb3, 0x16, 0xf9,
+	0x5e, 0x70, 0xf6, 0x35, 0x43, 0x53, 0x78, 0xcd, 0x4a, 0x4e, 0x1d, 0x4f, 0xeb, 0x05, 0x44, 0x97,
+	0x3e, 0x71, 0x7c, 0x48, 0x7c, 0xd8, 0x0e, 0x5e, 0x1f, 0xb6, 0x93, 0xc0, 0x40, 0xaf, 0x7f, 0xa0,
+	0x0f, 0xf0, 0x45, 0xd3, 0x9a, 0x67, 0x29, 0xff, 0x45, 0x55, 0x21, 0x79, 0xca, 0x4c, 0xa5, 0x5d,
+	0x74, 0x35, 0x02, 0xe3, 0xcb, 0xe4, 0xf9, 0x11, 0x5e, 0x06, 0x74, 0x51, 0x83, 0xf3, 0x01, 0x7c,
+	0xdc, 0x5c, 0xd1, 0xfc, 0x0f, 0x80, 0x43, 0x66, 0x54, 0xdf, 0x15, 0x7d, 0x03, 0x3f, 0x67, 0x0d,
+	0x9c, 0x1b, 0x49, 0x75, 0x8e, 0x4d, 0x99, 0x93, 0x9c, 0x6b, 0x9f, 0x8e, 0x04, 0x88, 0x16, 0xc2,
+	0x9e, 0x7d, 0x7b, 0xd3, 0x70, 0xfc, 0x77, 0x71, 0xf3, 0xd9, 0x13, 0x37, 0x8b, 0x9a, 0xb4, 0x99,
+	0x55, 0xce, 0xac, 0xe4, 0xe6, 0x47, 0x20, 0x6d, 0xaf, 0xbc, 0xd7, 0xfb, 0xfb, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x5e, 0x71, 0x31, 0xe7, 0x67, 0x03, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/operations.pb.go b/googleapis/cloud/automl/v1beta1/operations.pb.go
index 69a8f895a4ae52146f6c0081e7707d8a89966a0e..9d87101bb955e5a081add7402c0f3a1056e88f32 100644
--- a/googleapis/cloud/automl/v1beta1/operations.pb.go
+++ b/googleapis/cloud/automl/v1beta1/operations.pb.go
@@ -50,7 +50,7 @@ func (m *OperationMetadata) Reset()         { *m = OperationMetadata{} }
 func (m *OperationMetadata) String() string { return proto.CompactTextString(m) }
 func (*OperationMetadata) ProtoMessage()    {}
 func (*OperationMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_operations_8f7a4667c678e484, []int{0}
+	return fileDescriptor_operations_45b6bac60e2a57c5, []int{0}
 }
 func (m *OperationMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_OperationMetadata.Unmarshal(m, b)
@@ -188,7 +188,7 @@ func (m *CreateModelOperationMetadata) Reset()         { *m = CreateModelOperati
 func (m *CreateModelOperationMetadata) String() string { return proto.CompactTextString(m) }
 func (*CreateModelOperationMetadata) ProtoMessage()    {}
 func (*CreateModelOperationMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_operations_8f7a4667c678e484, []int{1}
+	return fileDescriptor_operations_45b6bac60e2a57c5, []int{1}
 }
 func (m *CreateModelOperationMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateModelOperationMetadata.Unmarshal(m, b)
@@ -214,33 +214,35 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/operations.proto", fileDescriptor_operations_8f7a4667c678e484)
-}
-
-var fileDescriptor_operations_8f7a4667c678e484 = []byte{
-	// 383 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x4f, 0xab, 0xd3, 0x40,
-	0x14, 0xc5, 0x6d, 0xeb, 0x1f, 0x9c, 0x22, 0xad, 0x41, 0x30, 0xd4, 0x62, 0x4b, 0x37, 0x56, 0x90,
-	0x19, 0x5a, 0x57, 0x52, 0x5c, 0x58, 0x45, 0xdc, 0x14, 0x4b, 0x74, 0xe5, 0x26, 0xdc, 0x26, 0xb7,
-	0x21, 0x30, 0xc9, 0x0c, 0x33, 0x37, 0x05, 0x3f, 0xb6, 0xdf, 0x40, 0x32, 0x33, 0xd1, 0xc7, 0x7b,
-	0x8f, 0x74, 0x39, 0xf7, 0xfc, 0xce, 0xcd, 0xb9, 0x87, 0xb0, 0x77, 0x85, 0x52, 0x85, 0x44, 0x91,
-	0x49, 0xd5, 0xe4, 0x02, 0x1a, 0x52, 0x95, 0x14, 0x97, 0xcd, 0x09, 0x09, 0x36, 0x42, 0x69, 0x34,
-	0x40, 0xa5, 0xaa, 0x2d, 0xd7, 0x46, 0x91, 0x8a, 0x5e, 0x79, 0x9a, 0x3b, 0x9a, 0x7b, 0x9a, 0x07,
-	0x7a, 0x36, 0x0f, 0xab, 0x40, 0x97, 0x02, 0xea, 0x5a, 0xd1, 0x4d, 0xeb, 0xec, 0x4d, 0xdf, 0x87,
-	0x2a, 0x95, 0xa3, 0x0c, 0xe0, 0xf6, 0x2a, 0x98, 0xe2, 0x05, 0x64, 0xe3, 0xb6, 0x07, 0x4f, 0xc8,
-	0x25, 0xdc, 0xeb, 0xd4, 0x9c, 0x05, 0x56, 0x9a, 0x7e, 0x07, 0x71, 0x71, 0x5b, 0xa4, 0xb2, 0x42,
-	0x4b, 0x50, 0xe9, 0x00, 0xbc, 0x0c, 0x80, 0xd1, 0x99, 0xb0, 0x04, 0xd4, 0x84, 0xcc, 0xab, 0x3f,
-	0x43, 0xf6, 0xfc, 0x7b, 0xd7, 0xc1, 0x01, 0x09, 0x72, 0x20, 0x88, 0x2a, 0xf6, 0x22, 0x33, 0x08,
-	0x84, 0xa9, 0x4f, 0x93, 0x23, 0x41, 0x29, 0x6d, 0xcc, 0x96, 0x83, 0xf5, 0x78, 0xfb, 0x81, 0xf7,
-	0x74, 0xc4, 0x3f, 0x3b, 0xe3, 0xa1, 0xf5, 0xdd, 0x59, 0xfc, 0xed, 0x41, 0x12, 0x65, 0xff, 0xf5,
-	0x2f, 0x7e, 0x6d, 0xf4, 0x96, 0x4d, 0xb5, 0x51, 0x85, 0x41, 0x6b, 0x53, 0x8d, 0x26, 0xc3, 0x9a,
-	0xe2, 0x67, 0xcb, 0xc1, 0xfa, 0x51, 0x32, 0xe9, 0xe6, 0x47, 0x3f, 0x8e, 0x3e, 0xb2, 0xa9, 0x06,
-	0x43, 0x25, 0xc8, 0xf4, 0x0c, 0xa5, 0x6c, 0x0c, 0xda, 0x78, 0xb8, 0x1c, 0xad, 0xc7, 0xdb, 0xa8,
-	0x4b, 0x65, 0x74, 0xc6, 0x7f, 0xb8, 0x1b, 0x93, 0x49, 0x60, 0xbf, 0x06, 0x34, 0xda, 0xb1, 0x71,
-	0x38, 0xac, 0x6d, 0x28, 0x1e, 0xb9, 0x7b, 0x66, 0x9d, 0xb3, 0xab, 0x8f, 0xff, 0xec, 0xea, 0x4b,
-	0x98, 0xc7, 0xdb, 0x41, 0x6b, 0x6e, 0x74, 0xfe, 0xcf, 0xfc, 0xf0, 0xba, 0xd9, 0xe3, 0xed, 0x60,
-	0xff, 0x94, 0x3d, 0x09, 0x2d, 0xae, 0x5e, 0xb3, 0x79, 0x5f, 0x49, 0xfb, 0x33, 0x5b, 0x64, 0xaa,
-	0xea, 0x2b, 0xf9, 0x38, 0xf8, 0xf5, 0x29, 0xc8, 0x85, 0x92, 0x50, 0x17, 0x5c, 0x99, 0x42, 0x14,
-	0x58, 0xbb, 0x10, 0xc2, 0x4b, 0xa0, 0x4b, 0x7b, 0xef, 0x2f, 0xb6, 0xf3, 0xcf, 0xd3, 0x63, 0x47,
-	0xbf, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x7b, 0xa7, 0x51, 0x21, 0x03, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/operations.proto", fileDescriptor_operations_45b6bac60e2a57c5)
+}
+
+var fileDescriptor_operations_45b6bac60e2a57c5 = []byte{
+	// 409 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x5f, 0x6b, 0xd4, 0x40,
+	0x14, 0xc5, 0xcd, 0xd6, 0x3f, 0x38, 0x8b, 0xb4, 0x06, 0xc1, 0xb0, 0x2d, 0x76, 0xe9, 0x8b, 0x2b,
+	0xc8, 0x0c, 0x5d, 0x9f, 0xa4, 0xf8, 0xd0, 0x56, 0xd4, 0x97, 0xc5, 0x12, 0xc5, 0x07, 0x59, 0x08,
+	0x77, 0x93, 0xbb, 0x21, 0x30, 0xc9, 0x0c, 0x33, 0x77, 0x16, 0x7c, 0xf7, 0xd3, 0xf9, 0x6d, 0xfc,
+	0x06, 0x92, 0x99, 0x89, 0x8a, 0x96, 0xec, 0xe3, 0xdc, 0xfb, 0x3b, 0x27, 0xe7, 0x1e, 0xc2, 0x5e,
+	0xd6, 0x4a, 0xd5, 0x12, 0x45, 0x29, 0x95, 0xab, 0x04, 0x38, 0x52, 0xad, 0x14, 0xbb, 0xf3, 0x0d,
+	0x12, 0x9c, 0x0b, 0xa5, 0xd1, 0x00, 0x35, 0xaa, 0xb3, 0x5c, 0x1b, 0x45, 0x2a, 0x3d, 0x0e, 0x34,
+	0xf7, 0x34, 0x0f, 0x34, 0x8f, 0xf4, 0xec, 0x24, 0x5a, 0x81, 0x6e, 0x04, 0x74, 0x9d, 0xa2, 0xbf,
+	0xa5, 0xb3, 0xe7, 0x63, 0x1f, 0x6a, 0x55, 0x85, 0x32, 0x82, 0xcb, 0xbd, 0x60, 0x81, 0x3b, 0x90,
+	0xce, 0xbb, 0x47, 0x4d, 0xcc, 0x25, 0xfc, 0x6b, 0xe3, 0xb6, 0x02, 0x5b, 0x4d, 0xdf, 0xe2, 0xf2,
+	0xf4, 0xdf, 0x25, 0x35, 0x2d, 0x5a, 0x82, 0x56, 0x47, 0xe0, 0x69, 0x04, 0x8c, 0x2e, 0x85, 0x25,
+	0x20, 0x17, 0x33, 0x9f, 0xfd, 0x9c, 0xb0, 0xc7, 0x1f, 0x87, 0x0e, 0x56, 0x48, 0x50, 0x01, 0x41,
+	0xda, 0xb2, 0x27, 0xa5, 0x41, 0x20, 0x2c, 0x42, 0x9a, 0x0a, 0x09, 0x1a, 0x69, 0x33, 0x36, 0x4f,
+	0x16, 0xd3, 0xe5, 0x6b, 0x3e, 0xd2, 0x11, 0xbf, 0xf6, 0xc2, 0x55, 0xaf, 0xfb, 0xcf, 0xf8, 0xc3,
+	0x9d, 0x3c, 0x2d, 0xff, 0xec, 0xdf, 0x06, 0xdb, 0xf4, 0x05, 0x3b, 0xd2, 0x46, 0xd5, 0x06, 0xad,
+	0x2d, 0x34, 0x9a, 0x12, 0x3b, 0xca, 0x1e, 0xcd, 0x93, 0xc5, 0xbd, 0xfc, 0x70, 0x98, 0xdf, 0x84,
+	0x71, 0xfa, 0x86, 0x1d, 0x69, 0x30, 0xd4, 0x80, 0x2c, 0xb6, 0xd0, 0x48, 0x67, 0xd0, 0x66, 0x93,
+	0xf9, 0xc1, 0x62, 0xba, 0x4c, 0x87, 0x54, 0x46, 0x97, 0xfc, 0x93, 0xbf, 0x31, 0x3f, 0x8c, 0xec,
+	0xbb, 0x88, 0xa6, 0x17, 0x6c, 0x1a, 0x0f, 0xeb, 0x1b, 0xca, 0x0e, 0xfc, 0x3d, 0xb3, 0x41, 0x39,
+	0xd4, 0xc7, 0x3f, 0x0f, 0xf5, 0xe5, 0x2c, 0xe0, 0xfd, 0xa0, 0x17, 0x3b, 0x5d, 0xfd, 0x16, 0xdf,
+	0xdd, 0x2f, 0x0e, 0x78, 0x3f, 0xb8, 0x7a, 0xc8, 0x1e, 0xc4, 0x16, 0xcf, 0x9e, 0xb1, 0x93, 0xb1,
+	0x92, 0xae, 0xbe, 0x27, 0xec, 0xb4, 0x54, 0xed, 0x58, 0xcb, 0x37, 0xc9, 0xd7, 0xcb, 0xb8, 0xae,
+	0x95, 0x84, 0xae, 0xe6, 0xca, 0xd4, 0xa2, 0xc6, 0xce, 0xa7, 0x10, 0x61, 0x05, 0xba, 0xb1, 0xb7,
+	0xfe, 0x63, 0x17, 0xe1, 0xf9, 0x63, 0x72, 0xfc, 0xde, 0x83, 0xeb, 0xeb, 0x1e, 0x5a, 0x5f, 0x3a,
+	0x52, 0x2b, 0xb9, 0xfe, 0x12, 0xa0, 0xcd, 0x7d, 0xef, 0xf5, 0xea, 0x57, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0xa9, 0x8b, 0x31, 0xeb, 0x40, 0x03, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/prediction_service.pb.go b/googleapis/cloud/automl/v1beta1/prediction_service.pb.go
index 9a9084e6655cd955800a8ac625b001d57ec3889e..81a87dc461feb8782b05f46154f81cfe0bc346de 100644
--- a/googleapis/cloud/automl/v1beta1/prediction_service.pb.go
+++ b/googleapis/cloud/automl/v1beta1/prediction_service.pb.go
@@ -51,7 +51,7 @@ func (m *PredictRequest) Reset()         { *m = PredictRequest{} }
 func (m *PredictRequest) String() string { return proto.CompactTextString(m) }
 func (*PredictRequest) ProtoMessage()    {}
 func (*PredictRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_prediction_service_1b71b7f556fd7159, []int{0}
+	return fileDescriptor_prediction_service_21460c7fedea4ded, []int{0}
 }
 func (m *PredictRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PredictRequest.Unmarshal(m, b)
@@ -111,7 +111,7 @@ func (m *PredictResponse) Reset()         { *m = PredictResponse{} }
 func (m *PredictResponse) String() string { return proto.CompactTextString(m) }
 func (*PredictResponse) ProtoMessage()    {}
 func (*PredictResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_prediction_service_1b71b7f556fd7159, []int{1}
+	return fileDescriptor_prediction_service_21460c7fedea4ded, []int{1}
 }
 func (m *PredictResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PredictResponse.Unmarshal(m, b)
@@ -227,38 +227,40 @@ var _PredictionService_serviceDesc = grpc.ServiceDesc{
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/prediction_service.proto", fileDescriptor_prediction_service_1b71b7f556fd7159)
+	proto.RegisterFile("google/cloud/automl/v1beta1/prediction_service.proto", fileDescriptor_prediction_service_21460c7fedea4ded)
 }
 
-var fileDescriptor_prediction_service_1b71b7f556fd7159 = []byte{
-	// 462 bytes of a gzipped FileDescriptorProto
+var fileDescriptor_prediction_service_21460c7fedea4ded = []byte{
+	// 486 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xdf, 0x8a, 0xd3, 0x40,
-	0x14, 0xc6, 0x99, 0x56, 0x77, 0xdd, 0x29, 0xfe, 0x1b, 0x44, 0x4a, 0x14, 0x2c, 0xbd, 0x2a, 0xdd,
-	0x65, 0x86, 0xad, 0xc2, 0x6a, 0x57, 0x2f, 0xb6, 0x50, 0xf0, 0x46, 0x0c, 0x11, 0xbc, 0xf0, 0xa6,
-	0x9c, 0x4d, 0x0e, 0x21, 0x3a, 0xc9, 0x8c, 0x99, 0x49, 0xb1, 0x88, 0x5e, 0xf8, 0x0a, 0xbe, 0x84,
-	0x4f, 0xe1, 0x4b, 0xf8, 0x0a, 0x3e, 0x80, 0x77, 0xde, 0x4a, 0x32, 0x63, 0xd6, 0x65, 0x25, 0x6c,
-	0xef, 0x32, 0x7f, 0x7e, 0xdf, 0xf9, 0xbe, 0xcc, 0x39, 0xf4, 0x51, 0xaa, 0x54, 0x2a, 0x51, 0xc4,
-	0x52, 0x55, 0x89, 0x80, 0xca, 0xaa, 0x5c, 0x8a, 0xf5, 0xe1, 0x29, 0x5a, 0x38, 0x14, 0xba, 0xc4,
-	0x24, 0x8b, 0x6d, 0xa6, 0x8a, 0x95, 0xc1, 0x72, 0x9d, 0xc5, 0xc8, 0x75, 0xa9, 0xac, 0x62, 0xf7,
-	0x1c, 0xc5, 0x1b, 0x8a, 0x3b, 0x8a, 0x7b, 0x2a, 0xb8, 0xef, 0x25, 0x41, 0x67, 0x02, 0x8a, 0x42,
-	0x59, 0xa8, 0x15, 0x8c, 0x43, 0x83, 0xce, 0x82, 0x67, 0xd7, 0x57, 0x1a, 0x36, 0x52, 0x41, 0xe2,
-	0xa9, 0x83, 0x2e, 0x2a, 0x01, 0x0b, 0xab, 0xcc, 0x62, 0xee, 0x6b, 0x8c, 0x7f, 0x13, 0x7a, 0x23,
-	0x74, 0xde, 0x23, 0x7c, 0x5f, 0xa1, 0xb1, 0x8c, 0xd1, 0x2b, 0x05, 0xe4, 0x38, 0x24, 0x23, 0x32,
-	0xd9, 0x8b, 0x9a, 0x6f, 0xb6, 0xa4, 0xbb, 0xbe, 0xca, 0xb0, 0x37, 0x22, 0x93, 0xc1, 0x6c, 0x9f,
-	0x77, 0xe4, 0xe2, 0xcb, 0x0f, 0x90, 0x6b, 0x89, 0xa1, 0x43, 0xa2, 0xbf, 0x2c, 0x7b, 0x49, 0x77,
-	0x34, 0x94, 0x90, 0x9b, 0x61, 0x7f, 0xd4, 0x9f, 0x0c, 0x66, 0x47, 0x9d, 0x2a, 0xe7, 0x7d, 0xf1,
-	0xb0, 0x21, 0x97, 0x85, 0x2d, 0x37, 0x91, 0x97, 0x09, 0x9e, 0xd0, 0xc1, 0x3f, 0xdb, 0xec, 0x16,
-	0xed, 0xbf, 0xc3, 0x8d, 0x77, 0x5e, 0x7f, 0xb2, 0x3b, 0xf4, 0xea, 0x1a, 0x64, 0x85, 0x8d, 0xed,
-	0xbd, 0xc8, 0x2d, 0xe6, 0xbd, 0xc7, 0x64, 0xfc, 0x8b, 0xd0, 0x9b, 0x6d, 0x05, 0xa3, 0x55, 0x61,
-	0x90, 0x3d, 0x3f, 0x8b, 0x49, 0x1a, 0x83, 0xbc, 0xd3, 0xe0, 0x49, 0xfb, 0x06, 0x17, 0x92, 0xbe,
-	0xa6, 0xd7, 0x72, 0xb4, 0x50, 0xff, 0xef, 0x61, 0xaf, 0x91, 0x9a, 0x5f, 0x2e, 0xab, 0x73, 0xc2,
-	0x5f, 0x78, 0xd8, 0xc5, 0x6d, 0xb5, 0x82, 0x63, 0x7a, 0xfd, 0xdc, 0xd1, 0x36, 0x91, 0x67, 0xdf,
-	0x09, 0xbd, 0x1d, 0xb6, 0x8d, 0xfa, 0xca, 0xf5, 0x29, 0xfb, 0x46, 0xe8, 0xae, 0xdf, 0x65, 0xfb,
-	0x5b, 0x3c, 0x48, 0x70, 0xb0, 0x4d, 0xa2, 0xf1, 0xe2, 0xcb, 0x8f, 0x9f, 0x5f, 0x7b, 0x4f, 0xc7,
-	0x47, 0x6d, 0x33, 0x7e, 0xac, 0x5b, 0xeb, 0x99, 0x2e, 0xd5, 0x5b, 0x8c, 0xad, 0x11, 0x53, 0x21,
-	0x55, 0xec, 0x06, 0x40, 0x4c, 0x45, 0xae, 0x12, 0x94, 0x46, 0x4c, 0x3f, 0xcd, 0xfd, 0x68, 0xcd,
-	0xc9, 0x74, 0xf1, 0x99, 0x3e, 0x88, 0x55, 0xde, 0x55, 0x76, 0x71, 0xf7, 0x42, 0xc0, 0xb0, 0x6e,
-	0xf4, 0x90, 0xbc, 0x39, 0xf1, 0x58, 0xaa, 0x24, 0x14, 0x29, 0x57, 0x65, 0x2a, 0x52, 0x2c, 0x9a,
-	0x31, 0x10, 0xee, 0x08, 0x74, 0x66, 0xfe, 0x3b, 0x37, 0xc7, 0x6e, 0x79, 0xba, 0xd3, 0xdc, 0x7e,
-	0xf8, 0x27, 0x00, 0x00, 0xff, 0xff, 0xb5, 0xb3, 0x24, 0x52, 0x0b, 0x04, 0x00, 0x00,
+	0x14, 0xc6, 0x99, 0x54, 0x77, 0xdd, 0x29, 0xfe, 0x1b, 0x44, 0x4a, 0x56, 0xb0, 0xf4, 0xaa, 0x74,
+	0x97, 0x19, 0xb6, 0x0a, 0xab, 0x5d, 0xbd, 0x68, 0xa5, 0xe8, 0xcd, 0x62, 0x88, 0xb0, 0x17, 0x52,
+	0x28, 0xb3, 0xc9, 0x10, 0xa2, 0x93, 0x9c, 0x98, 0x99, 0x14, 0x8b, 0x78, 0xe3, 0x2b, 0x78, 0xeb,
+	0x03, 0xf8, 0x14, 0x3e, 0x80, 0xb7, 0xbe, 0x82, 0x0f, 0xe0, 0x9d, 0xb7, 0x92, 0x99, 0x31, 0xeb,
+	0xb2, 0x12, 0xb6, 0x77, 0x49, 0xe6, 0xfc, 0xbe, 0xf3, 0x7d, 0x99, 0x73, 0xf0, 0xc3, 0x04, 0x20,
+	0x91, 0x82, 0x45, 0x12, 0xaa, 0x98, 0xf1, 0x4a, 0x43, 0x26, 0xd9, 0xea, 0xe0, 0x54, 0x68, 0x7e,
+	0xc0, 0x8a, 0x52, 0xc4, 0x69, 0xa4, 0x53, 0xc8, 0x97, 0x4a, 0x94, 0xab, 0x34, 0x12, 0xb4, 0x28,
+	0x41, 0x03, 0xd9, 0xb5, 0x14, 0x35, 0x14, 0xb5, 0x14, 0x75, 0x94, 0x7f, 0xcf, 0x49, 0xf2, 0x22,
+	0x65, 0x3c, 0xcf, 0x41, 0xf3, 0x5a, 0x41, 0x59, 0xd4, 0x6f, 0x6d, 0x78, 0x56, 0xbe, 0x2c, 0xf8,
+	0x5a, 0x02, 0x8f, 0x1d, 0xb5, 0xdf, 0x46, 0xc5, 0x5c, 0xf3, 0x65, 0xaa, 0x45, 0xe6, 0x7a, 0x0c,
+	0x7e, 0x23, 0x7c, 0x23, 0xb0, 0xde, 0x43, 0xf1, 0xae, 0x12, 0x4a, 0x13, 0x82, 0xaf, 0xe4, 0x3c,
+	0x13, 0x3d, 0xd4, 0x47, 0xc3, 0x9d, 0xd0, 0x3c, 0x93, 0x39, 0xde, 0x76, 0x5d, 0x7a, 0x5e, 0x1f,
+	0x0d, 0xbb, 0xe3, 0x3d, 0xda, 0x92, 0x8b, 0xce, 0xdf, 0xf3, 0xac, 0x90, 0x22, 0xb0, 0x48, 0xf8,
+	0x97, 0x25, 0x2f, 0xf1, 0x56, 0xc1, 0x4b, 0x9e, 0xa9, 0x5e, 0xa7, 0xdf, 0x19, 0x76, 0xc7, 0x87,
+	0xad, 0x2a, 0xe7, 0x7d, 0xd1, 0xc0, 0x90, 0xf3, 0x5c, 0x97, 0xeb, 0xd0, 0xc9, 0xf8, 0x8f, 0x71,
+	0xf7, 0x9f, 0xcf, 0xe4, 0x16, 0xee, 0xbc, 0x15, 0x6b, 0xe7, 0xbc, 0x7e, 0x24, 0x77, 0xf0, 0xd5,
+	0x15, 0x97, 0x95, 0x30, 0xb6, 0x77, 0x42, 0xfb, 0x32, 0xf1, 0x1e, 0xa1, 0xc1, 0x2f, 0x84, 0x6f,
+	0x36, 0x1d, 0x54, 0x01, 0xb9, 0x12, 0xe4, 0xc5, 0x59, 0x4c, 0x64, 0x0c, 0xd2, 0x56, 0x83, 0xd3,
+	0xe6, 0x0e, 0x2e, 0x24, 0x3d, 0xc1, 0xd7, 0x32, 0xa1, 0x79, 0xfd, 0xbf, 0x7b, 0x9e, 0x91, 0x9a,
+	0x5c, 0x2e, 0xab, 0x75, 0x42, 0x8f, 0x1d, 0x6c, 0xe3, 0x36, 0x5a, 0xfe, 0x11, 0xbe, 0x7e, 0xee,
+	0x68, 0x93, 0xc8, 0xe3, 0x6f, 0x08, 0xdf, 0x0e, 0x9a, 0x41, 0x7d, 0x65, 0xe7, 0x94, 0x7c, 0x45,
+	0x78, 0xdb, 0x7d, 0x25, 0x7b, 0x1b, 0x5c, 0x88, 0xbf, 0xbf, 0x49, 0xa2, 0xc1, 0xec, 0xd3, 0x8f,
+	0x9f, 0x9f, 0xbd, 0x27, 0x83, 0xc3, 0x66, 0x18, 0x3f, 0xd4, 0xa3, 0xf5, 0xb4, 0x28, 0xe1, 0x8d,
+	0x88, 0xb4, 0x62, 0x23, 0x26, 0x21, 0xb2, 0x0b, 0xc0, 0x46, 0x2c, 0x83, 0x58, 0x48, 0xc5, 0x46,
+	0x1f, 0x27, 0x6e, 0xb5, 0x26, 0x68, 0x34, 0xfb, 0x82, 0xf0, 0xfd, 0x08, 0xb2, 0xb6, 0xbe, 0xb3,
+	0xbb, 0x17, 0x12, 0x06, 0xf5, 0xa4, 0x07, 0xe8, 0xf5, 0xd4, 0x61, 0x09, 0x48, 0x9e, 0x27, 0x14,
+	0xca, 0x84, 0x25, 0x22, 0x37, 0x7b, 0xc0, 0xec, 0x11, 0x2f, 0x52, 0xf5, 0xdf, 0xc5, 0x39, 0xb2,
+	0xaf, 0xdf, 0xbd, 0xdd, 0xe7, 0xa6, 0x70, 0xf1, 0xac, 0x2e, 0x5a, 0x4c, 0x2b, 0x0d, 0xc7, 0x72,
+	0x71, 0x62, 0x8b, 0x4e, 0xb7, 0x8c, 0xd6, 0x83, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x55, 0x88,
+	0x1b, 0x5d, 0x2a, 0x04, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/service.pb.go b/googleapis/cloud/automl/v1beta1/service.pb.go
index 291c5f98f45bd4b5cf5af2c32c5aee64f8a76ead..72391867ffea5b86fa36399c99ea3b119acf428f 100644
--- a/googleapis/cloud/automl/v1beta1/service.pb.go
+++ b/googleapis/cloud/automl/v1beta1/service.pb.go
@@ -41,7 +41,7 @@ func (m *CreateDatasetRequest) Reset()         { *m = CreateDatasetRequest{} }
 func (m *CreateDatasetRequest) String() string { return proto.CompactTextString(m) }
 func (*CreateDatasetRequest) ProtoMessage()    {}
 func (*CreateDatasetRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{0}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{0}
 }
 func (m *CreateDatasetRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateDatasetRequest.Unmarshal(m, b)
@@ -88,7 +88,7 @@ func (m *GetDatasetRequest) Reset()         { *m = GetDatasetRequest{} }
 func (m *GetDatasetRequest) String() string { return proto.CompactTextString(m) }
 func (*GetDatasetRequest) ProtoMessage()    {}
 func (*GetDatasetRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{1}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{1}
 }
 func (m *GetDatasetRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetDatasetRequest.Unmarshal(m, b)
@@ -145,7 +145,7 @@ func (m *ListDatasetsRequest) Reset()         { *m = ListDatasetsRequest{} }
 func (m *ListDatasetsRequest) String() string { return proto.CompactTextString(m) }
 func (*ListDatasetsRequest) ProtoMessage()    {}
 func (*ListDatasetsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{2}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{2}
 }
 func (m *ListDatasetsRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListDatasetsRequest.Unmarshal(m, b)
@@ -209,7 +209,7 @@ func (m *ListDatasetsResponse) Reset()         { *m = ListDatasetsResponse{} }
 func (m *ListDatasetsResponse) String() string { return proto.CompactTextString(m) }
 func (*ListDatasetsResponse) ProtoMessage()    {}
 func (*ListDatasetsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{3}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{3}
 }
 func (m *ListDatasetsResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListDatasetsResponse.Unmarshal(m, b)
@@ -256,7 +256,7 @@ func (m *DeleteDatasetRequest) Reset()         { *m = DeleteDatasetRequest{} }
 func (m *DeleteDatasetRequest) String() string { return proto.CompactTextString(m) }
 func (*DeleteDatasetRequest) ProtoMessage()    {}
 func (*DeleteDatasetRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{4}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{4}
 }
 func (m *DeleteDatasetRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DeleteDatasetRequest.Unmarshal(m, b)
@@ -299,7 +299,7 @@ func (m *ImportDataRequest) Reset()         { *m = ImportDataRequest{} }
 func (m *ImportDataRequest) String() string { return proto.CompactTextString(m) }
 func (*ImportDataRequest) ProtoMessage()    {}
 func (*ImportDataRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{5}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{5}
 }
 func (m *ImportDataRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ImportDataRequest.Unmarshal(m, b)
@@ -348,7 +348,7 @@ func (m *ExportDataRequest) Reset()         { *m = ExportDataRequest{} }
 func (m *ExportDataRequest) String() string { return proto.CompactTextString(m) }
 func (*ExportDataRequest) ProtoMessage()    {}
 func (*ExportDataRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{6}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{6}
 }
 func (m *ExportDataRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ExportDataRequest.Unmarshal(m, b)
@@ -397,7 +397,7 @@ func (m *CreateModelRequest) Reset()         { *m = CreateModelRequest{} }
 func (m *CreateModelRequest) String() string { return proto.CompactTextString(m) }
 func (*CreateModelRequest) ProtoMessage()    {}
 func (*CreateModelRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{7}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{7}
 }
 func (m *CreateModelRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateModelRequest.Unmarshal(m, b)
@@ -444,7 +444,7 @@ func (m *GetModelRequest) Reset()         { *m = GetModelRequest{} }
 func (m *GetModelRequest) String() string { return proto.CompactTextString(m) }
 func (*GetModelRequest) ProtoMessage()    {}
 func (*GetModelRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{8}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{8}
 }
 func (m *GetModelRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetModelRequest.Unmarshal(m, b)
@@ -503,7 +503,7 @@ func (m *ListModelsRequest) Reset()         { *m = ListModelsRequest{} }
 func (m *ListModelsRequest) String() string { return proto.CompactTextString(m) }
 func (*ListModelsRequest) ProtoMessage()    {}
 func (*ListModelsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{9}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{9}
 }
 func (m *ListModelsRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListModelsRequest.Unmarshal(m, b)
@@ -567,7 +567,7 @@ func (m *ListModelsResponse) Reset()         { *m = ListModelsResponse{} }
 func (m *ListModelsResponse) String() string { return proto.CompactTextString(m) }
 func (*ListModelsResponse) ProtoMessage()    {}
 func (*ListModelsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{10}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{10}
 }
 func (m *ListModelsResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListModelsResponse.Unmarshal(m, b)
@@ -614,7 +614,7 @@ func (m *DeleteModelRequest) Reset()         { *m = DeleteModelRequest{} }
 func (m *DeleteModelRequest) String() string { return proto.CompactTextString(m) }
 func (*DeleteModelRequest) ProtoMessage()    {}
 func (*DeleteModelRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{11}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{11}
 }
 func (m *DeleteModelRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DeleteModelRequest.Unmarshal(m, b)
@@ -654,7 +654,7 @@ func (m *DeployModelRequest) Reset()         { *m = DeployModelRequest{} }
 func (m *DeployModelRequest) String() string { return proto.CompactTextString(m) }
 func (*DeployModelRequest) ProtoMessage()    {}
 func (*DeployModelRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{12}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{12}
 }
 func (m *DeployModelRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DeployModelRequest.Unmarshal(m, b)
@@ -694,7 +694,7 @@ func (m *UndeployModelRequest) Reset()         { *m = UndeployModelRequest{} }
 func (m *UndeployModelRequest) String() string { return proto.CompactTextString(m) }
 func (*UndeployModelRequest) ProtoMessage()    {}
 func (*UndeployModelRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{13}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{13}
 }
 func (m *UndeployModelRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UndeployModelRequest.Unmarshal(m, b)
@@ -734,7 +734,7 @@ func (m *GetModelEvaluationRequest) Reset()         { *m = GetModelEvaluationReq
 func (m *GetModelEvaluationRequest) String() string { return proto.CompactTextString(m) }
 func (*GetModelEvaluationRequest) ProtoMessage()    {}
 func (*GetModelEvaluationRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{14}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{14}
 }
 func (m *GetModelEvaluationRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetModelEvaluationRequest.Unmarshal(m, b)
@@ -795,7 +795,7 @@ func (m *ListModelEvaluationsRequest) Reset()         { *m = ListModelEvaluation
 func (m *ListModelEvaluationsRequest) String() string { return proto.CompactTextString(m) }
 func (*ListModelEvaluationsRequest) ProtoMessage()    {}
 func (*ListModelEvaluationsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{15}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{15}
 }
 func (m *ListModelEvaluationsRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListModelEvaluationsRequest.Unmarshal(m, b)
@@ -859,7 +859,7 @@ func (m *ListModelEvaluationsResponse) Reset()         { *m = ListModelEvaluatio
 func (m *ListModelEvaluationsResponse) String() string { return proto.CompactTextString(m) }
 func (*ListModelEvaluationsResponse) ProtoMessage()    {}
 func (*ListModelEvaluationsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_service_13046020da32bacb, []int{16}
+	return fileDescriptor_service_67dda52b9aca3dee, []int{16}
 }
 func (m *ListModelEvaluationsResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListModelEvaluationsResponse.Unmarshal(m, b)
@@ -1489,77 +1489,78 @@ var _AutoMl_serviceDesc = grpc.ServiceDesc{
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/service.proto", fileDescriptor_service_13046020da32bacb)
-}
-
-var fileDescriptor_service_13046020da32bacb = []byte{
-	// 1078 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4d, 0x8f, 0xdb, 0x44,
-	0x18, 0xd6, 0x6c, 0xdb, 0xb0, 0x7d, 0xb3, 0xd1, 0xb2, 0xc3, 0xaa, 0x0a, 0xd9, 0x56, 0x44, 0xa6,
-	0xd0, 0x34, 0x5a, 0xc5, 0x24, 0x45, 0x65, 0x9b, 0x7e, 0x88, 0xfd, 0xa8, 0x56, 0x05, 0x4a, 0x57,
-	0x0b, 0x08, 0x89, 0x4b, 0xe4, 0x4d, 0x26, 0x96, 0xa9, 0x33, 0x63, 0xec, 0xf1, 0xb2, 0x2d, 0xaa,
-	0xf8, 0xb8, 0x71, 0x46, 0x70, 0xa2, 0x82, 0x03, 0xea, 0x09, 0xf1, 0x33, 0xf8, 0x03, 0x1c, 0xb8,
-	0x71, 0xe2, 0x87, 0x20, 0xcf, 0x8c, 0x63, 0x27, 0x36, 0x1e, 0xa7, 0x52, 0xb5, 0xb7, 0xcc, 0xf8,
-	0x79, 0xfd, 0x3e, 0xf3, 0x7e, 0xcc, 0xf3, 0x3a, 0x70, 0xd5, 0x66, 0xcc, 0x76, 0x89, 0x39, 0x74,
-	0x59, 0x38, 0x32, 0xad, 0x90, 0xb3, 0x89, 0x6b, 0x1e, 0x77, 0x8f, 0x08, 0xb7, 0xba, 0x66, 0x40,
-	0xfc, 0x63, 0x67, 0x48, 0x3a, 0x9e, 0xcf, 0x38, 0xc3, 0x1b, 0x12, 0xda, 0x11, 0xd0, 0x8e, 0x84,
-	0x76, 0x14, 0xb4, 0x71, 0x51, 0xbd, 0xc7, 0xf2, 0x1c, 0xd3, 0xa2, 0x94, 0x71, 0x8b, 0x3b, 0x8c,
-	0x06, 0xd2, 0xb4, 0xf1, 0x76, 0x91, 0x97, 0x04, 0x3e, 0xf0, 0xac, 0x47, 0x2e, 0xb3, 0x46, 0xca,
-	0xaa, 0x90, 0xdb, 0xc8, 0xe2, 0x56, 0x40, 0xb8, 0x82, 0x5e, 0x2e, 0x82, 0x3a, 0x4c, 0xa1, 0xae,
-	0x14, 0xa1, 0x26, 0x6c, 0x44, 0x5c, 0x05, 0xec, 0x69, 0x81, 0x03, 0x72, 0x6c, 0xb9, 0xa1, 0x60,
-	0xad, 0x6c, 0x36, 0x8b, 0x6c, 0x98, 0x47, 0xfc, 0x99, 0x88, 0xbc, 0xae, 0xd0, 0x2e, 0xa3, 0xb6,
-	0x1f, 0x52, 0xea, 0x50, 0x3b, 0x0b, 0x6a, 0x2a, 0x90, 0x58, 0x1d, 0x85, 0x63, 0x73, 0xec, 0x10,
-	0x77, 0x34, 0x98, 0x58, 0xc1, 0x43, 0x89, 0x30, 0x28, 0xac, 0xef, 0xfa, 0xc4, 0xe2, 0x64, 0x4f,
-	0x86, 0xe3, 0x90, 0x7c, 0x11, 0x92, 0x80, 0xe3, 0x0b, 0x50, 0xf1, 0x2c, 0x9f, 0x50, 0x5e, 0x47,
-	0x4d, 0xd4, 0x3a, 0x7f, 0xa8, 0x56, 0xf8, 0x0e, 0xbc, 0xa4, 0x02, 0x57, 0x5f, 0x6a, 0xa2, 0x56,
-	0xb5, 0x77, 0xb9, 0x53, 0x90, 0xd5, 0x4e, 0xfc, 0xd6, 0xd8, 0xc8, 0xb8, 0x02, 0x6b, 0xfb, 0x84,
-	0xcf, 0x39, 0xc3, 0x70, 0x96, 0x5a, 0x13, 0xa2, 0x5c, 0x89, 0xdf, 0xc6, 0xb7, 0x08, 0x5e, 0xf9,
-	0xc0, 0x09, 0x62, 0x68, 0xa0, 0x23, 0x76, 0x01, 0x2a, 0x63, 0xc7, 0xe5, 0xc4, 0xaf, 0x9f, 0x91,
-	0xfb, 0x72, 0x85, 0x37, 0xe0, 0xbc, 0x67, 0xd9, 0x64, 0x10, 0x38, 0x8f, 0x49, 0xfd, 0x6c, 0x13,
-	0xb5, 0xce, 0x1d, 0x2e, 0x47, 0x1b, 0x1f, 0x39, 0x8f, 0x09, 0xbe, 0x04, 0x20, 0x1e, 0x72, 0xf6,
-	0x90, 0xd0, 0x7a, 0x45, 0x18, 0x0a, 0xf8, 0xc7, 0xd1, 0x86, 0xf1, 0x0d, 0x82, 0xf5, 0x59, 0x0e,
-	0x81, 0xc7, 0x68, 0x40, 0xf0, 0xbb, 0xb0, 0xac, 0x0e, 0x14, 0xd4, 0x51, 0xf3, 0x4c, 0xe9, 0x30,
-	0x4c, 0xad, 0xf0, 0x9b, 0xb0, 0x4a, 0xc9, 0x09, 0x1f, 0xa4, 0xdc, 0x2f, 0x09, 0xf7, 0xb5, 0x68,
-	0xfb, 0x60, 0x4a, 0xa1, 0x0d, 0xeb, 0x7b, 0xc4, 0x25, 0x99, 0xfc, 0xe4, 0x85, 0x8c, 0xc3, 0xda,
-	0xbd, 0x89, 0xc7, 0x7c, 0xc1, 0xb7, 0x00, 0x88, 0xdf, 0x87, 0x15, 0x87, 0x7a, 0x21, 0x1f, 0x0c,
-	0x19, 0x1d, 0x3b, 0xb6, 0x88, 0x58, 0xb5, 0xd7, 0x2a, 0x3c, 0xc2, 0xbd, 0xc8, 0x60, 0x57, 0xe0,
-	0x0f, 0xab, 0x4e, 0xb2, 0x30, 0xbe, 0x84, 0xb5, 0xbb, 0x27, 0x65, 0xbc, 0x7e, 0x08, 0x35, 0x16,
-	0xf2, 0x8c, 0xdb, 0xab, 0x85, 0x6e, 0x1f, 0x08, 0x0b, 0xe5, 0x77, 0x85, 0xa5, 0x56, 0xc6, 0x18,
-	0xb0, 0x2c, 0xdd, 0xfb, 0x51, 0x3f, 0xe9, 0xea, 0x63, 0x0b, 0xce, 0x89, 0xbe, 0x13, 0x35, 0x50,
-	0xed, 0x19, 0x85, 0x5e, 0xe5, 0x1b, 0xa5, 0x81, 0xf1, 0x06, 0xac, 0xee, 0x13, 0x3e, 0xe3, 0x24,
-	0x2f, 0xfa, 0x5f, 0xc3, 0x5a, 0x54, 0x2b, 0x02, 0x77, 0x2a, 0xd5, 0x7a, 0x0c, 0x38, 0x4d, 0x40,
-	0x95, 0xea, 0xf4, 0xdc, 0xb2, 0x4e, 0xcb, 0x9f, 0xbb, 0x74, 0x89, 0xb6, 0x00, 0xcb, 0x12, 0xd5,
-	0x86, 0x48, 0x20, 0x3d, 0x97, 0x3d, 0xd2, 0x22, 0xdb, 0xb0, 0xfe, 0x09, 0x1d, 0x95, 0xc3, 0x9a,
-	0xf0, 0x6a, 0x9c, 0x9f, 0xbb, 0xd3, 0x3b, 0xb5, 0xc8, 0xe0, 0x7b, 0x04, 0x1b, 0xd3, 0x48, 0x25,
-	0x26, 0xa7, 0x92, 0xb4, 0x5f, 0x10, 0x5c, 0xcc, 0xe7, 0xa2, 0xf2, 0xf7, 0x29, 0xbc, 0x3c, 0xaf,
-	0x17, 0x2a, 0x95, 0x9b, 0xfa, 0x54, 0xa6, 0xe2, 0xb1, 0x3a, 0x99, 0xdd, 0x28, 0x9b, 0xde, 0xde,
-	0x3f, 0x18, 0x2a, 0xdb, 0x21, 0x67, 0xf7, 0x5d, 0xfc, 0x3b, 0x82, 0xda, 0x8c, 0x5a, 0xe0, 0x6e,
-	0x21, 0x87, 0x3c, 0x65, 0x69, 0x94, 0xba, 0x29, 0x8d, 0x9d, 0xef, 0xfe, 0xfa, 0xf7, 0x87, 0xa5,
-	0x5b, 0x46, 0x77, 0xaa, 0x80, 0x5f, 0xc9, 0x2c, 0xdc, 0xf6, 0x7c, 0xf6, 0x39, 0x19, 0xf2, 0xc0,
-	0x6c, 0x9b, 0x2e, 0x1b, 0xca, 0x68, 0x99, 0xed, 0x27, 0xb1, 0x9e, 0x07, 0xfd, 0x58, 0x6b, 0xf0,
-	0x53, 0x04, 0x90, 0x88, 0x0d, 0xee, 0x14, 0x3a, 0xce, 0xa8, 0x52, 0x49, 0xa2, 0x37, 0x04, 0xd1,
-	0x6b, 0x38, 0x45, 0x34, 0x2a, 0xb2, 0xff, 0xa1, 0x39, 0x65, 0x69, 0xb6, 0x9f, 0xe0, 0x3f, 0x10,
-	0xac, 0xa4, 0xe5, 0x05, 0xbf, 0x55, 0xe8, 0x31, 0x47, 0x0d, 0x1b, 0xdd, 0x05, 0x2c, 0x64, 0x41,
-	0xe5, 0x11, 0x2e, 0x19, 0x59, 0xfc, 0x33, 0x82, 0xda, 0x8c, 0x1a, 0x69, 0xf2, 0x9f, 0xa7, 0x5c,
-	0x8d, 0x4b, 0xb1, 0x49, 0x6a, 0x72, 0xe9, 0x3c, 0x88, 0x27, 0x97, 0x98, 0x5e, 0xfb, 0x39, 0xe2,
-	0xf9, 0x1b, 0x02, 0x48, 0x04, 0x50, 0x93, 0xef, 0x8c, 0x52, 0xea, 0x88, 0xed, 0x0b, 0x62, 0xdb,
-	0xc6, 0xad, 0x85, 0x89, 0xf5, 0x9d, 0xa9, 0xaf, 0x3e, 0x6a, 0x0b, 0x9a, 0x89, 0x62, 0x6a, 0x68,
-	0x66, 0xa4, 0xf5, 0x05, 0xd2, 0x24, 0x27, 0x69, 0x9a, 0x4f, 0x11, 0x54, 0x53, 0xfa, 0x8a, 0xcd,
-	0x12, 0xad, 0x9e, 0xbe, 0xab, 0x75, 0x44, 0xef, 0x08, 0xa2, 0x5b, 0x86, 0x59, 0xba, 0x0e, 0xc5,
-	0x0d, 0x16, 0xf4, 0x95, 0x3c, 0xfd, 0x88, 0x60, 0x39, 0xbe, 0xf7, 0xf1, 0xa6, 0xae, 0xb7, 0x67,
-	0x98, 0x95, 0x10, 0x41, 0xe3, 0x1d, 0x41, 0xaf, 0x8b, 0xcd, 0x72, 0x71, 0x94, 0xdc, 0xa2, 0x2a,
-	0x7c, 0x86, 0x00, 0x12, 0x1d, 0xd6, 0xa4, 0x37, 0x33, 0x31, 0x34, 0xcc, 0xd2, 0x78, 0xd5, 0xcf,
-	0x39, 0x44, 0x4b, 0xc5, 0x11, 0xff, 0x84, 0xa0, 0x9a, 0x12, 0x6e, 0x4d, 0x82, 0xb3, 0x12, 0xaf,
-	0x4b, 0xb0, 0x22, 0xd6, 0x5e, 0x38, 0x82, 0xbf, 0x0a, 0x62, 0x53, 0xed, 0xd7, 0x12, 0x9b, 0x9f,
-	0x12, 0x74, 0xc4, 0xb6, 0x05, 0xb1, 0x9b, 0xc6, 0xf5, 0x05, 0x89, 0xf5, 0xe5, 0x40, 0x12, 0x35,
-	0xc7, 0x33, 0x04, 0xb5, 0x99, 0x01, 0x45, 0x73, 0x13, 0xe6, 0x0d, 0x33, 0x3a, 0x9a, 0xbb, 0x82,
-	0xe6, 0x6d, 0x63, 0x6b, 0x51, 0x9a, 0x21, 0x4d, 0x88, 0xfe, 0x89, 0x00, 0x67, 0xa7, 0x23, 0x7c,
-	0xbd, 0x54, 0xbf, 0x64, 0xc6, 0xa9, 0xc6, 0x42, 0x33, 0x87, 0xf1, 0x9e, 0x38, 0xc1, 0x1e, 0xde,
-	0x59, 0xec, 0x04, 0xe6, 0xdc, 0xa8, 0x22, 0x8a, 0xe2, 0x6f, 0xf5, 0x2d, 0x36, 0x3f, 0x28, 0xe1,
-	0xad, 0x72, 0x0d, 0x93, 0x9d, 0xf3, 0x1a, 0x37, 0x9e, 0xc3, 0x52, 0x35, 0x5d, 0xce, 0xc9, 0x0a,
-	0x9b, 0x2e, 0xc9, 0x4e, 0xe6, 0x70, 0x3b, 0x01, 0xbc, 0x36, 0x64, 0x93, 0x22, 0x2e, 0x3b, 0x55,
-	0x39, 0x80, 0x1d, 0x44, 0x9f, 0xec, 0x07, 0xe8, 0xb3, 0x6d, 0x85, 0xb5, 0x99, 0x6b, 0x51, 0xbb,
-	0xc3, 0x7c, 0xdb, 0xb4, 0x09, 0x15, 0x1f, 0xf4, 0xa6, 0x7c, 0x64, 0x79, 0x4e, 0x90, 0xfb, 0x47,
-	0xc2, 0x4d, 0xb9, 0x3c, 0xaa, 0x08, 0xf4, 0xb5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x61, 0x0b,
-	0x95, 0xdd, 0xbf, 0x11, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/automl/v1beta1/service.proto", fileDescriptor_service_67dda52b9aca3dee)
+}
+
+var fileDescriptor_service_67dda52b9aca3dee = []byte{
+	// 1098 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcb, 0x6f, 0x1b, 0x45,
+	0x18, 0xd7, 0xa4, 0x6d, 0x48, 0x3f, 0xc7, 0x0a, 0x19, 0xa2, 0xca, 0x38, 0xad, 0xb0, 0x96, 0x42,
+	0x5d, 0x2b, 0xf2, 0x62, 0x17, 0x95, 0xd4, 0x7d, 0x88, 0x3c, 0xaa, 0xa8, 0x40, 0x69, 0x14, 0x5e,
+	0x12, 0x8a, 0x64, 0x6d, 0xec, 0xf1, 0x6a, 0xe9, 0x7a, 0x66, 0xd9, 0x9d, 0x0d, 0x69, 0x51, 0xc5,
+	0xe3, 0xc6, 0x11, 0x21, 0x38, 0x51, 0xc1, 0x01, 0xf5, 0x84, 0xf8, 0x33, 0x38, 0x70, 0xe5, 0xc0,
+	0x8d, 0x13, 0x7f, 0x08, 0xda, 0x99, 0x59, 0xef, 0xda, 0xbb, 0xec, 0xac, 0x2b, 0xa1, 0xde, 0x32,
+	0xe3, 0xdf, 0x37, 0xdf, 0x6f, 0xbe, 0xc7, 0xfc, 0xbe, 0x0d, 0x5c, 0xb6, 0x19, 0xb3, 0x5d, 0x62,
+	0x0e, 0x5c, 0x16, 0x0e, 0x4d, 0x2b, 0xe4, 0x6c, 0xec, 0x9a, 0xc7, 0x9d, 0x23, 0xc2, 0xad, 0x8e,
+	0x19, 0x10, 0xff, 0xd8, 0x19, 0x90, 0xb6, 0xe7, 0x33, 0xce, 0xf0, 0xba, 0x84, 0xb6, 0x05, 0xb4,
+	0x2d, 0xa1, 0x6d, 0x05, 0xad, 0x9f, 0x57, 0xe7, 0x58, 0x9e, 0x63, 0x5a, 0x94, 0x32, 0x6e, 0x71,
+	0x87, 0xd1, 0x40, 0x9a, 0xd6, 0x5f, 0x2f, 0xf2, 0x92, 0xc0, 0xfb, 0x9e, 0xf5, 0xc0, 0x65, 0xd6,
+	0x50, 0x59, 0x15, 0x72, 0x1b, 0x5a, 0xdc, 0x0a, 0x08, 0x57, 0xd0, 0x8b, 0x45, 0x50, 0x87, 0x29,
+	0xd4, 0xa5, 0x22, 0xd4, 0x98, 0x0d, 0x89, 0xab, 0x80, 0x5d, 0x2d, 0xb0, 0x4f, 0x8e, 0x2d, 0x37,
+	0x14, 0xac, 0x95, 0xcd, 0x46, 0x91, 0x0d, 0xf3, 0x88, 0x3f, 0x15, 0x91, 0x97, 0x15, 0xda, 0x65,
+	0xd4, 0xf6, 0x43, 0x4a, 0x1d, 0x6a, 0x67, 0x41, 0x0d, 0x05, 0x12, 0xab, 0xa3, 0x70, 0x64, 0x8e,
+	0x1c, 0xe2, 0x0e, 0xfb, 0x63, 0x2b, 0xb8, 0x2f, 0x11, 0x06, 0x85, 0xb5, 0x1d, 0x9f, 0x58, 0x9c,
+	0xec, 0xca, 0x70, 0x1c, 0x90, 0x4f, 0x43, 0x12, 0x70, 0x7c, 0x0e, 0x16, 0x3d, 0xcb, 0x27, 0x94,
+	0xd7, 0x50, 0x03, 0x35, 0xcf, 0x1e, 0xa8, 0x15, 0xbe, 0x05, 0xcf, 0xa9, 0xc0, 0xd5, 0x16, 0x1a,
+	0xa8, 0x59, 0xe9, 0x5e, 0x6c, 0x17, 0x64, 0xb5, 0x1d, 0x9f, 0x1a, 0x1b, 0x19, 0x97, 0x60, 0x75,
+	0x8f, 0xf0, 0x19, 0x67, 0x18, 0x4e, 0x53, 0x6b, 0x4c, 0x94, 0x2b, 0xf1, 0xb7, 0xf1, 0x15, 0x82,
+	0x17, 0xde, 0x71, 0x82, 0x18, 0x1a, 0xe8, 0x88, 0x9d, 0x83, 0xc5, 0x91, 0xe3, 0x72, 0xe2, 0xd7,
+	0x4e, 0xc9, 0x7d, 0xb9, 0xc2, 0xeb, 0x70, 0xd6, 0xb3, 0x6c, 0xd2, 0x0f, 0x9c, 0x87, 0xa4, 0x76,
+	0xba, 0x81, 0x9a, 0x67, 0x0e, 0x96, 0xa2, 0x8d, 0xf7, 0x9c, 0x87, 0x04, 0x5f, 0x00, 0x10, 0x3f,
+	0x72, 0x76, 0x9f, 0xd0, 0xda, 0xa2, 0x30, 0x14, 0xf0, 0xf7, 0xa3, 0x0d, 0xe3, 0x4b, 0x04, 0x6b,
+	0xd3, 0x1c, 0x02, 0x8f, 0xd1, 0x80, 0xe0, 0x37, 0x61, 0x49, 0x5d, 0x28, 0xa8, 0xa1, 0xc6, 0xa9,
+	0xd2, 0x61, 0x98, 0x58, 0xe1, 0x57, 0x61, 0x85, 0x92, 0x13, 0xde, 0x4f, 0xb9, 0x5f, 0x10, 0xee,
+	0xab, 0xd1, 0xf6, 0xfe, 0x84, 0x42, 0x0b, 0xd6, 0x76, 0x89, 0x4b, 0x32, 0xf9, 0xc9, 0x0b, 0x19,
+	0x87, 0xd5, 0x3b, 0x63, 0x8f, 0xf9, 0x82, 0x6f, 0x01, 0x10, 0xbf, 0x0d, 0xcb, 0x0e, 0xf5, 0x42,
+	0xde, 0x1f, 0x30, 0x3a, 0x72, 0x6c, 0x11, 0xb1, 0x4a, 0xb7, 0x59, 0x78, 0x85, 0x3b, 0x91, 0xc1,
+	0x8e, 0xc0, 0x1f, 0x54, 0x9c, 0x64, 0x61, 0x7c, 0x06, 0xab, 0xb7, 0x4f, 0xca, 0x78, 0x7d, 0x17,
+	0xaa, 0x2c, 0xe4, 0x19, 0xb7, 0x97, 0x0b, 0xdd, 0xde, 0x13, 0x16, 0xca, 0xef, 0x32, 0x4b, 0xad,
+	0x8c, 0x11, 0x60, 0x59, 0xba, 0x77, 0xa3, 0x7e, 0xd2, 0xd5, 0xc7, 0x26, 0x9c, 0x11, 0x7d, 0x27,
+	0x6a, 0xa0, 0xd2, 0x35, 0x0a, 0xbd, 0xca, 0x13, 0xa5, 0x81, 0xf1, 0x0a, 0xac, 0xec, 0x11, 0x3e,
+	0xe5, 0x24, 0x2f, 0xfa, 0x5f, 0xc0, 0x6a, 0x54, 0x2b, 0x02, 0xf7, 0x4c, 0xaa, 0xf5, 0x18, 0x70,
+	0x9a, 0x80, 0x2a, 0xd5, 0xc9, 0xbd, 0x65, 0x9d, 0x96, 0xbf, 0x77, 0xe9, 0x12, 0x6d, 0x02, 0x96,
+	0x25, 0xaa, 0x0d, 0x91, 0x40, 0x7a, 0x2e, 0x7b, 0xa0, 0x45, 0xb6, 0x60, 0xed, 0x03, 0x3a, 0x2c,
+	0x87, 0x35, 0xe1, 0xc5, 0x38, 0x3f, 0xb7, 0x27, 0x6f, 0x6a, 0x91, 0xc1, 0x37, 0x08, 0xd6, 0x27,
+	0x91, 0x4a, 0x4c, 0x9e, 0x49, 0xd2, 0x7e, 0x42, 0x70, 0x3e, 0x9f, 0x8b, 0xca, 0xdf, 0x47, 0xf0,
+	0xfc, 0xac, 0x5e, 0xa8, 0x54, 0x6e, 0xe8, 0x53, 0x99, 0x8a, 0xc7, 0xca, 0x78, 0x7a, 0xa3, 0x6c,
+	0x7a, 0xbb, 0x7f, 0x63, 0x58, 0xdc, 0x0a, 0x39, 0xbb, 0xeb, 0xe2, 0x5f, 0x11, 0x54, 0xa7, 0xd4,
+	0x02, 0x77, 0x0a, 0x39, 0xe4, 0x29, 0x4b, 0xbd, 0xd4, 0x4b, 0x69, 0x6c, 0x7f, 0xfd, 0xe7, 0x3f,
+	0xdf, 0x2d, 0xdc, 0x30, 0x3a, 0x13, 0x05, 0xfc, 0x5c, 0x66, 0xe1, 0xa6, 0xe7, 0xb3, 0x4f, 0xc8,
+	0x80, 0x07, 0x66, 0xcb, 0x74, 0xd9, 0x40, 0x46, 0xcb, 0x6c, 0x3d, 0x8a, 0xf5, 0x3c, 0xe8, 0xc5,
+	0x5a, 0x83, 0x1f, 0x23, 0x80, 0x44, 0x6c, 0x70, 0xbb, 0xd0, 0x71, 0x46, 0x95, 0x4a, 0x12, 0xbd,
+	0x26, 0x88, 0x5e, 0xc1, 0x29, 0xa2, 0x51, 0x91, 0xfd, 0x07, 0xcd, 0x09, 0x4b, 0xb3, 0xf5, 0x08,
+	0xff, 0x86, 0x60, 0x39, 0x2d, 0x2f, 0xf8, 0xb5, 0x42, 0x8f, 0x39, 0x6a, 0x58, 0xef, 0xcc, 0x61,
+	0x21, 0x0b, 0x2a, 0x8f, 0x70, 0xc9, 0xc8, 0xe2, 0x1f, 0x11, 0x54, 0xa7, 0xd4, 0x48, 0x93, 0xff,
+	0x3c, 0xe5, 0xaa, 0x5f, 0x88, 0x4d, 0x52, 0x93, 0x4b, 0xfb, 0x5e, 0x3c, 0xb9, 0xc4, 0xf4, 0x5a,
+	0x4f, 0x11, 0xcf, 0x5f, 0x10, 0x40, 0x22, 0x80, 0x9a, 0x7c, 0x67, 0x94, 0x52, 0x47, 0x6c, 0x4f,
+	0x10, 0xdb, 0x32, 0x6e, 0xcc, 0x4d, 0xac, 0xe7, 0x4c, 0x7c, 0xf5, 0x50, 0x4b, 0xd0, 0x4c, 0x14,
+	0x53, 0x43, 0x33, 0x23, 0xad, 0xff, 0x23, 0x4d, 0x72, 0x92, 0xa6, 0xf9, 0x18, 0x41, 0x25, 0xa5,
+	0xaf, 0xd8, 0x2c, 0xd1, 0xea, 0xe9, 0xb7, 0x5a, 0x47, 0xf4, 0x96, 0x20, 0xba, 0x69, 0x98, 0xa5,
+	0xeb, 0x50, 0xbc, 0x60, 0x41, 0x4f, 0xc9, 0xd3, 0xf7, 0x08, 0x96, 0xe2, 0x77, 0x1f, 0x6f, 0xe8,
+	0x7a, 0x7b, 0x8a, 0x59, 0x09, 0x11, 0x34, 0xde, 0x10, 0xf4, 0x3a, 0xd8, 0x2c, 0x17, 0x47, 0xc9,
+	0x2d, 0xaa, 0xc2, 0x27, 0x08, 0x20, 0xd1, 0x61, 0x4d, 0x7a, 0x33, 0x13, 0x43, 0xdd, 0x2c, 0x8d,
+	0x57, 0xfd, 0x9c, 0x43, 0xb4, 0x54, 0x1c, 0xf1, 0x0f, 0x08, 0x2a, 0x29, 0xe1, 0xd6, 0x24, 0x38,
+	0x2b, 0xf1, 0xba, 0x04, 0x2b, 0x62, 0xad, 0xb9, 0x23, 0xf8, 0xb3, 0x20, 0x36, 0xd1, 0x7e, 0x2d,
+	0xb1, 0xd9, 0x29, 0x41, 0x47, 0x6c, 0x4b, 0x10, 0xbb, 0x6e, 0x5c, 0x9d, 0x93, 0x58, 0x4f, 0x0e,
+	0x24, 0x51, 0x73, 0x3c, 0x41, 0x50, 0x9d, 0x1a, 0x50, 0x34, 0x2f, 0x61, 0xde, 0x30, 0xa3, 0xa3,
+	0xb9, 0x23, 0x68, 0xde, 0x34, 0x36, 0xe7, 0xa5, 0x19, 0xd2, 0x84, 0xe8, 0xef, 0x08, 0x70, 0x76,
+	0x3a, 0xc2, 0x57, 0x4b, 0xf5, 0x4b, 0x66, 0x9c, 0xaa, 0xcf, 0x35, 0x73, 0x18, 0x6f, 0x89, 0x1b,
+	0xec, 0xe2, 0xed, 0xf9, 0x6e, 0x60, 0xce, 0x8c, 0x2a, 0xa2, 0x28, 0xfe, 0x52, 0xdf, 0x62, 0xb3,
+	0x83, 0x12, 0xde, 0x2c, 0xd7, 0x30, 0xd9, 0x39, 0xaf, 0x7e, 0xed, 0x29, 0x2c, 0x55, 0xd3, 0xe5,
+	0xdc, 0xac, 0xb0, 0xe9, 0x92, 0xec, 0x64, 0x2e, 0xb7, 0xfd, 0x2d, 0x82, 0x97, 0x06, 0x6c, 0x5c,
+	0x44, 0x66, 0xbb, 0x22, 0x27, 0xb0, 0xfd, 0xe8, 0x9b, 0x7d, 0x1f, 0x7d, 0xbc, 0xa5, 0xb0, 0x36,
+	0x73, 0x2d, 0x6a, 0xb7, 0x99, 0x6f, 0x9b, 0x36, 0xa1, 0xe2, 0x8b, 0xde, 0x94, 0x3f, 0x59, 0x9e,
+	0x13, 0xe4, 0xfe, 0x27, 0xe1, 0xba, 0x5c, 0xfe, 0xb1, 0xb0, 0xbe, 0x27, 0x80, 0x87, 0x3b, 0x11,
+	0xe8, 0x50, 0x9e, 0x7f, 0xf8, 0xa1, 0x04, 0x1d, 0x2d, 0x8a, 0xb3, 0xae, 0xfc, 0x1b, 0x00, 0x00,
+	0xff, 0xff, 0x9e, 0x6b, 0xe8, 0xad, 0xde, 0x11, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/text.pb.go b/googleapis/cloud/automl/v1beta1/text.pb.go
index 50cabbc8d0e6890847cbc7025013c4cbaee35423..eb39034dda67262483fe3636cd1d40c0fde7b057 100644
--- a/googleapis/cloud/automl/v1beta1/text.pb.go
+++ b/googleapis/cloud/automl/v1beta1/text.pb.go
@@ -33,7 +33,7 @@ func (m *TextClassificationDatasetMetadata) Reset()         { *m = TextClassific
 func (m *TextClassificationDatasetMetadata) String() string { return proto.CompactTextString(m) }
 func (*TextClassificationDatasetMetadata) ProtoMessage()    {}
 func (*TextClassificationDatasetMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_text_1fb9d74955be1951, []int{0}
+	return fileDescriptor_text_6aaf13d2f30170b9, []int{0}
 }
 func (m *TextClassificationDatasetMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TextClassificationDatasetMetadata.Unmarshal(m, b)
@@ -71,7 +71,7 @@ func (m *TextClassificationModelMetadata) Reset()         { *m = TextClassificat
 func (m *TextClassificationModelMetadata) String() string { return proto.CompactTextString(m) }
 func (*TextClassificationModelMetadata) ProtoMessage()    {}
 func (*TextClassificationModelMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_text_1fb9d74955be1951, []int{1}
+	return fileDescriptor_text_6aaf13d2f30170b9, []int{1}
 }
 func (m *TextClassificationModelMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TextClassificationModelMetadata.Unmarshal(m, b)
@@ -97,24 +97,26 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/text.proto", fileDescriptor_text_1fb9d74955be1951)
+	proto.RegisterFile("google/cloud/automl/v1beta1/text.proto", fileDescriptor_text_6aaf13d2f30170b9)
 }
 
-var fileDescriptor_text_1fb9d74955be1951 = []byte{
-	// 240 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x31, 0x4f, 0x03, 0x31,
-	0x0c, 0x85, 0x75, 0x0b, 0x12, 0x19, 0x18, 0x8e, 0x05, 0x15, 0xa4, 0xd2, 0x0e, 0x88, 0x29, 0xa6,
-	0x30, 0x32, 0x51, 0x58, 0x2b, 0x55, 0xa8, 0x13, 0x0b, 0xb8, 0x39, 0x13, 0x45, 0x4a, 0xe3, 0xd0,
-	0xb8, 0xa8, 0xfd, 0x01, 0xfc, 0x6f, 0xd4, 0xe4, 0x18, 0x4e, 0x87, 0x6e, 0x4c, 0xfc, 0xbd, 0xe7,
-	0xf7, 0xac, 0x6e, 0x2c, 0xb3, 0xf5, 0x04, 0xc6, 0xf3, 0xae, 0x01, 0xdc, 0x09, 0x6f, 0x3c, 0x7c,
-	0xcf, 0xd6, 0x24, 0x38, 0x03, 0xa1, 0xbd, 0xe8, 0xb8, 0x65, 0xe1, 0xfa, 0xb2, 0x70, 0x3a, 0x73,
-	0xba, 0x70, 0xba, 0xe5, 0x46, 0x57, 0xad, 0x09, 0x46, 0x07, 0x18, 0x02, 0x0b, 0x8a, 0xe3, 0x90,
-	0x8a, 0x74, 0x74, 0x37, 0xb4, 0xc2, 0x78, 0x4c, 0xc9, 0x7d, 0x3a, 0x93, 0x25, 0x45, 0x31, 0xfd,
-	0xa9, 0xd4, 0x64, 0x45, 0x7b, 0x79, 0xee, 0x0c, 0x5f, 0x50, 0x30, 0x91, 0x2c, 0x48, 0xb0, 0x41,
-	0xc1, 0xfa, 0x43, 0x9d, 0x77, 0xd5, 0xef, 0x72, 0x88, 0x74, 0x51, 0x5d, 0x57, 0xb7, 0x67, 0xf7,
-	0xa0, 0x07, 0x02, 0xeb, 0xae, 0xf1, 0xea, 0x10, 0xe9, 0xb5, 0x36, 0xbd, 0xbf, 0xe9, 0x44, 0x8d,
-	0xfb, 0x31, 0x16, 0xdc, 0x90, 0xff, 0x0b, 0x31, 0xff, 0x52, 0x63, 0xc3, 0x9b, 0xa1, 0x65, 0xf3,
-	0xd3, 0xa3, 0xc7, 0xf2, 0x58, 0x6c, 0x59, 0xbd, 0x3d, 0xb5, 0xa4, 0x65, 0x8f, 0xc1, 0x6a, 0xde,
-	0x5a, 0xb0, 0x14, 0x72, 0x6d, 0x28, 0x23, 0x8c, 0x2e, 0xfd, 0x7b, 0xab, 0xc7, 0xf2, 0x5c, 0x9f,
-	0x64, 0xfa, 0xe1, 0x37, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x8d, 0x0f, 0x20, 0xbb, 0x01, 0x00, 0x00,
+var fileDescriptor_text_6aaf13d2f30170b9 = []byte{
+	// 265 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x31, 0x4b, 0x03, 0x41,
+	0x10, 0x85, 0x39, 0x0b, 0xc1, 0x2b, 0x2c, 0xce, 0x46, 0x12, 0x21, 0x26, 0x85, 0x58, 0xed, 0x1a,
+	0x2d, 0xad, 0x92, 0x08, 0x56, 0x07, 0x41, 0x82, 0x85, 0x1c, 0xe8, 0xe4, 0x6e, 0x5c, 0x16, 0x36,
+	0x3b, 0x4b, 0x76, 0x4e, 0x92, 0x1f, 0x60, 0xed, 0xff, 0xf2, 0x57, 0xc9, 0xed, 0x9e, 0xc5, 0x91,
+	0x70, 0xe5, 0xee, 0x7c, 0xef, 0xcd, 0x7b, 0x93, 0xde, 0x28, 0x22, 0x65, 0x50, 0x96, 0x86, 0xea,
+	0x4a, 0x42, 0xcd, 0xb4, 0x31, 0xf2, 0x6b, 0xba, 0x46, 0x86, 0xa9, 0x64, 0xdc, 0xb1, 0x70, 0x5b,
+	0x62, 0xca, 0x86, 0x91, 0x13, 0x81, 0x13, 0x91, 0x13, 0x2d, 0x37, 0xb8, 0x6a, 0x4d, 0xc0, 0x69,
+	0x09, 0xd6, 0x12, 0x03, 0x6b, 0xb2, 0x3e, 0x4a, 0x07, 0x77, 0x7d, 0x2b, 0x4a, 0x03, 0xde, 0xeb,
+	0x4f, 0x5d, 0x06, 0x49, 0x54, 0x4c, 0xbe, 0x93, 0x74, 0xbc, 0xc2, 0x1d, 0x2f, 0x3a, 0xc3, 0x27,
+	0x60, 0xf0, 0xc8, 0x39, 0x32, 0x54, 0xc0, 0x90, 0x7d, 0xa4, 0x17, 0x5d, 0xf5, 0x3b, 0xef, 0x1d,
+	0x5e, 0x26, 0xd7, 0xc9, 0xed, 0xf9, 0xbd, 0x14, 0x3d, 0x81, 0x45, 0xd7, 0x78, 0xb5, 0x77, 0xf8,
+	0x92, 0x95, 0x07, 0x7f, 0x93, 0x71, 0x3a, 0x3a, 0x8c, 0x91, 0x53, 0x85, 0xe6, 0x3f, 0xc4, 0xfc,
+	0x27, 0x49, 0x47, 0x25, 0x6d, 0xfa, 0xb6, 0xcd, 0xcf, 0x1a, 0x93, 0x65, 0xd3, 0x6c, 0x99, 0xbc,
+	0xcd, 0x5a, 0x52, 0x91, 0x01, 0xab, 0x04, 0x6d, 0x95, 0x54, 0x68, 0x43, 0x6f, 0x19, 0x47, 0xe0,
+	0xb4, 0x3f, 0x7a, 0xac, 0xc7, 0xf8, 0xfc, 0x3d, 0x19, 0x3e, 0x07, 0xb0, 0x58, 0x34, 0x50, 0x31,
+	0xab, 0x99, 0x72, 0x53, 0xbc, 0x46, 0x68, 0x7d, 0x1a, 0xbc, 0x1e, 0xfe, 0x02, 0x00, 0x00, 0xff,
+	0xff, 0x24, 0xf6, 0x56, 0x97, 0xda, 0x01, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/automl/v1beta1/translation.pb.go b/googleapis/cloud/automl/v1beta1/translation.pb.go
index 0f4ec90382b27a684c2b12d674b3645cf1ce74a4..51fb5c7a24d4265445a24782b1ec953568495c3c 100644
--- a/googleapis/cloud/automl/v1beta1/translation.pb.go
+++ b/googleapis/cloud/automl/v1beta1/translation.pb.go
@@ -34,7 +34,7 @@ func (m *TranslationDatasetMetadata) Reset()         { *m = TranslationDatasetMe
 func (m *TranslationDatasetMetadata) String() string { return proto.CompactTextString(m) }
 func (*TranslationDatasetMetadata) ProtoMessage()    {}
 func (*TranslationDatasetMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_translation_23667d09236b8210, []int{0}
+	return fileDescriptor_translation_43aab93b197764ff, []int{0}
 }
 func (m *TranslationDatasetMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TranslationDatasetMetadata.Unmarshal(m, b)
@@ -83,7 +83,7 @@ func (m *TranslationEvaluationMetrics) Reset()         { *m = TranslationEvaluat
 func (m *TranslationEvaluationMetrics) String() string { return proto.CompactTextString(m) }
 func (*TranslationEvaluationMetrics) ProtoMessage()    {}
 func (*TranslationEvaluationMetrics) Descriptor() ([]byte, []int) {
-	return fileDescriptor_translation_23667d09236b8210, []int{1}
+	return fileDescriptor_translation_43aab93b197764ff, []int{1}
 }
 func (m *TranslationEvaluationMetrics) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TranslationEvaluationMetrics.Unmarshal(m, b)
@@ -139,7 +139,7 @@ func (m *TranslationModelMetadata) Reset()         { *m = TranslationModelMetada
 func (m *TranslationModelMetadata) String() string { return proto.CompactTextString(m) }
 func (*TranslationModelMetadata) ProtoMessage()    {}
 func (*TranslationModelMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_translation_23667d09236b8210, []int{2}
+	return fileDescriptor_translation_43aab93b197764ff, []int{2}
 }
 func (m *TranslationModelMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TranslationModelMetadata.Unmarshal(m, b)
@@ -193,7 +193,7 @@ func (m *TranslationAnnotation) Reset()         { *m = TranslationAnnotation{} }
 func (m *TranslationAnnotation) String() string { return proto.CompactTextString(m) }
 func (*TranslationAnnotation) ProtoMessage()    {}
 func (*TranslationAnnotation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_translation_23667d09236b8210, []int{3}
+	return fileDescriptor_translation_43aab93b197764ff, []int{3}
 }
 func (m *TranslationAnnotation) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TranslationAnnotation.Unmarshal(m, b)
@@ -228,33 +228,34 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/automl/v1beta1/translation.proto", fileDescriptor_translation_23667d09236b8210)
+	proto.RegisterFile("google/cloud/automl/v1beta1/translation.proto", fileDescriptor_translation_43aab93b197764ff)
 }
 
-var fileDescriptor_translation_23667d09236b8210 = []byte{
-	// 377 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xcf, 0x6a, 0xdb, 0x40,
-	0x10, 0xc6, 0x91, 0x0b, 0x05, 0x6f, 0x29, 0x6d, 0x45, 0x0b, 0xc6, 0x75, 0x69, 0xf1, 0xa1, 0xf8,
-	0xd0, 0x4a, 0x75, 0x73, 0xcc, 0xc9, 0x76, 0x72, 0x8b, 0xc1, 0xd8, 0x86, 0x40, 0x2e, 0x62, 0x24,
-	0x0d, 0x8b, 0x60, 0xb5, 0x23, 0xb4, 0x23, 0xe3, 0x63, 0x5e, 0x24, 0xef, 0x1a, 0x76, 0x57, 0xb6,
-	0x45, 0x88, 0x0d, 0xb9, 0x49, 0x33, 0xbf, 0x6f, 0xfe, 0xed, 0x27, 0xfe, 0x4a, 0x22, 0xa9, 0x30,
-	0xce, 0x14, 0x35, 0x79, 0x0c, 0x0d, 0x53, 0xa9, 0xe2, 0xdd, 0x34, 0x45, 0x86, 0x69, 0xcc, 0x35,
-	0x68, 0xa3, 0x80, 0x0b, 0xd2, 0x51, 0x55, 0x13, 0x53, 0xf8, 0xdd, 0xe3, 0x91, 0xc3, 0x23, 0x8f,
-	0x47, 0x2d, 0x3e, 0x1c, 0xb5, 0xb5, 0xa0, 0x2a, 0x62, 0xd0, 0x9a, 0xd8, 0x29, 0x8d, 0x97, 0x0e,
-	0xff, 0x5c, 0xea, 0x94, 0x03, 0x43, 0x52, 0x30, 0x96, 0x2d, 0x3d, 0x7e, 0x0c, 0xc4, 0x70, 0x7b,
-	0x6a, 0x7f, 0x03, 0x0c, 0x06, 0x79, 0x89, 0x0c, 0x16, 0x0d, 0xff, 0x89, 0xaf, 0x86, 0x9a, 0x3a,
-	0xc3, 0x44, 0x81, 0x96, 0x0d, 0x48, 0x4c, 0x32, 0xca, 0x71, 0x10, 0xfc, 0x0a, 0x26, 0xfd, 0x75,
-	0xe8, 0x73, 0x77, 0x6d, 0x6a, 0x41, 0x39, 0x5a, 0x05, 0x43, 0x2d, 0x91, 0x5f, 0x28, 0x7a, 0x5e,
-	0xe1, 0x73, 0x5d, 0xc5, 0x18, 0xc5, 0xa8, 0x33, 0xc1, 0xed, 0x0e, 0x54, 0xe3, 0xbe, 0x96, 0xc8,
-	0x75, 0x91, 0x99, 0xf0, 0x87, 0x10, 0xa9, 0xc2, 0x26, 0x31, 0x19, 0xd5, 0xbe, 0x73, 0xb0, 0xee,
-	0xdb, 0xc8, 0xc6, 0x06, 0xc2, 0xdf, 0xe2, 0x53, 0x0a, 0x06, 0x93, 0x0e, 0xd3, 0x73, 0xcc, 0x47,
-	0x1b, 0x9e, 0x1f, 0xb8, 0xf1, 0x53, 0x20, 0x06, 0x9d, 0x3e, 0x4b, 0xca, 0x51, 0x1d, 0xf7, 0xb4,
-	0x3d, 0x6c, 0x91, 0xd2, 0x46, 0xdb, 0xed, 0xfa, 0x36, 0xe2, 0xb0, 0xb3, 0x67, 0xe8, 0xbd, 0xf9,
-	0x0c, 0xef, 0xce, 0x9e, 0xa1, 0x12, 0xdf, 0x3a, 0xe3, 0xcd, 0x8e, 0xef, 0x1a, 0xde, 0x8b, 0xf0,
-	0x60, 0x10, 0xcc, 0x93, 0x8c, 0x34, 0xa3, 0x66, 0x37, 0xe3, 0x87, 0xff, 0x93, 0xe8, 0x82, 0x51,
-	0xa2, 0x2d, 0xee, 0x79, 0xa3, 0x8b, 0xaa, 0x42, 0x5e, 0x7f, 0x39, 0xd5, 0x58, 0xf8, 0x12, 0xf3,
-	0xbd, 0xf8, 0x99, 0x51, 0x79, 0xa9, 0xc2, 0xfc, 0x73, 0x67, 0xa4, 0x95, 0x35, 0xcc, 0x2a, 0x78,
-	0x98, 0xb5, 0x02, 0x49, 0x76, 0xb5, 0x88, 0x6a, 0x19, 0x4b, 0xd4, 0xce, 0x4e, 0xb1, 0x4f, 0x41,
-	0x55, 0x98, 0x57, 0xfd, 0x77, 0xed, 0x7f, 0xd3, 0xf7, 0x8e, 0xbe, 0x7a, 0x0e, 0x00, 0x00, 0xff,
-	0xff, 0xfb, 0xc7, 0xb3, 0x37, 0x16, 0x03, 0x00, 0x00,
+var fileDescriptor_translation_43aab93b197764ff = []byte{
+	// 398 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x4f, 0xcb, 0xd3, 0x40,
+	0x10, 0xc6, 0x49, 0x04, 0xa1, 0x2b, 0xa2, 0x06, 0x85, 0x97, 0xbe, 0x15, 0xa5, 0x07, 0xe9, 0x41,
+	0x13, 0xab, 0x47, 0x4f, 0x6d, 0x15, 0x2f, 0x06, 0x4a, 0x5b, 0x14, 0xa4, 0x10, 0x26, 0xc9, 0xb0,
+	0x04, 0x36, 0x3b, 0x21, 0x3b, 0x29, 0x1e, 0xfd, 0x14, 0xde, 0xfc, 0x42, 0x7e, 0x2a, 0xd9, 0xdd,
+	0xb4, 0x0d, 0x62, 0x0b, 0xef, 0x2d, 0x99, 0xf9, 0x3d, 0xcf, 0xfc, 0xd9, 0x11, 0x6f, 0x24, 0x91,
+	0x54, 0x98, 0x14, 0x8a, 0xba, 0x32, 0x81, 0x8e, 0xa9, 0x56, 0xc9, 0x61, 0x9e, 0x23, 0xc3, 0x3c,
+	0xe1, 0x16, 0xb4, 0x51, 0xc0, 0x15, 0xe9, 0xb8, 0x69, 0x89, 0x29, 0xba, 0xf5, 0x78, 0xec, 0xf0,
+	0xd8, 0xe3, 0x71, 0x8f, 0x8f, 0x27, 0xbd, 0x17, 0x34, 0x55, 0x02, 0x5a, 0x13, 0x3b, 0xa5, 0xf1,
+	0xd2, 0xf1, 0xeb, 0x6b, 0x95, 0x4a, 0x60, 0xc8, 0x2a, 0xc6, 0xba, 0xa7, 0xa7, 0x3f, 0x03, 0x31,
+	0xde, 0x9d, 0xcb, 0x7f, 0x04, 0x06, 0x83, 0x9c, 0x22, 0x83, 0x45, 0xa3, 0xb7, 0xe2, 0xa9, 0xa1,
+	0xae, 0x2d, 0x30, 0x53, 0xa0, 0x65, 0x07, 0x12, 0xb3, 0x82, 0x4a, 0xbc, 0x09, 0x5e, 0x06, 0xb3,
+	0xd1, 0x26, 0xf2, 0xb9, 0x2f, 0x7d, 0x6a, 0x45, 0x25, 0x5a, 0x05, 0x43, 0x2b, 0x91, 0xff, 0x51,
+	0x84, 0x5e, 0xe1, 0x73, 0x43, 0xc5, 0x14, 0xc5, 0x64, 0xd0, 0xc1, 0xa7, 0x03, 0xa8, 0xce, 0x7d,
+	0xa5, 0xc8, 0x6d, 0x55, 0x98, 0xe8, 0xb9, 0x10, 0xb9, 0xc2, 0x2e, 0x33, 0x05, 0xb5, 0xbe, 0x72,
+	0xb0, 0x19, 0xd9, 0xc8, 0xd6, 0x06, 0xa2, 0x57, 0xe2, 0x51, 0x0e, 0x06, 0xb3, 0x01, 0x13, 0x3a,
+	0xe6, 0xa1, 0x0d, 0x2f, 0x8f, 0xdc, 0xf4, 0x77, 0x20, 0x6e, 0x06, 0x75, 0x52, 0x2a, 0x51, 0x9d,
+	0xe6, 0xb4, 0x35, 0xac, 0x49, 0x6d, 0xa3, 0xfd, 0x74, 0x23, 0x1b, 0x71, 0xd8, 0xc5, 0x35, 0x84,
+	0x77, 0x5e, 0xc3, 0xbd, 0x8b, 0x6b, 0x68, 0xc4, 0xb3, 0x41, 0x7b, 0x8b, 0xd3, 0xbb, 0x46, 0xdf,
+	0x44, 0x74, 0x3c, 0x10, 0x2c, 0xb3, 0x82, 0x34, 0xa3, 0x66, 0xd7, 0xe3, 0x83, 0x77, 0xb3, 0xf8,
+	0xca, 0xa1, 0xc4, 0x3b, 0xfc, 0xc1, 0x5b, 0x5d, 0x35, 0x0d, 0xf2, 0xe6, 0xc9, 0xd9, 0x63, 0xe5,
+	0x2d, 0x96, 0xbf, 0x02, 0xf1, 0xa2, 0xa0, 0xfa, 0x9a, 0xc5, 0xf2, 0xf1, 0xa0, 0xa7, 0xb5, 0xbd,
+	0x98, 0x75, 0xf0, 0x7d, 0xd1, 0x0b, 0x24, 0xd9, 0xd9, 0x62, 0x6a, 0x65, 0x22, 0x51, 0xbb, 0x7b,
+	0x4a, 0x7c, 0x0a, 0x9a, 0xca, 0xfc, 0xf7, 0x00, 0x3f, 0xf8, 0xdf, 0x3f, 0xe1, 0xed, 0x67, 0x07,
+	0xee, 0x57, 0x16, 0xda, 0x2f, 0x3a, 0xa6, 0x54, 0xed, 0xbf, 0x7a, 0x28, 0xbf, 0xef, 0xbc, 0xde,
+	0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x30, 0x1b, 0xfc, 0x35, 0x03, 0x00, 0x00,
 }
diff --git a/googleapis/container/v1beta1/cluster_service.pb.go b/googleapis/container/v1beta1/cluster_service.pb.go
index 24f66722990070f6058867c532a2c46493cfae66..9a2631a7112b48e0bd29cb89ef4e5cedb8806784 100644
--- a/googleapis/container/v1beta1/cluster_service.pb.go
+++ b/googleapis/container/v1beta1/cluster_service.pb.go
@@ -8,6 +8,7 @@ import fmt "fmt"
 import math "math"
 import empty "github.com/golang/protobuf/ptypes/empty"
 import _ "google.golang.org/genproto/googleapis/api/annotations"
+import _ "google.golang.org/genproto/googleapis/iam/v1"
 
 import (
 	context "golang.org/x/net/context"
@@ -56,7 +57,33 @@ func (x NodeTaint_Effect) String() string {
 	return proto.EnumName(NodeTaint_Effect_name, int32(x))
 }
 func (NodeTaint_Effect) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{1, 0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{1, 0}
+}
+
+// Istio auth mode, https://istio.io/docs/concepts/security/mutual-tls.html
+type IstioConfig_IstioAuthMode int32
+
+const (
+	// auth not enabled
+	IstioConfig_AUTH_NONE IstioConfig_IstioAuthMode = 0
+	// auth mutual TLS enabled
+	IstioConfig_AUTH_MUTUAL_TLS IstioConfig_IstioAuthMode = 1
+)
+
+var IstioConfig_IstioAuthMode_name = map[int32]string{
+	0: "AUTH_NONE",
+	1: "AUTH_MUTUAL_TLS",
+}
+var IstioConfig_IstioAuthMode_value = map[string]int32{
+	"AUTH_NONE":       0,
+	"AUTH_MUTUAL_TLS": 1,
+}
+
+func (x IstioConfig_IstioAuthMode) String() string {
+	return proto.EnumName(IstioConfig_IstioAuthMode_name, int32(x))
+}
+func (IstioConfig_IstioAuthMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{10, 0}
 }
 
 // Allowed Network Policy providers.
@@ -82,7 +109,7 @@ func (x NetworkPolicy_Provider) String() string {
 	return proto.EnumName(NetworkPolicy_Provider_name, int32(x))
 }
 func (NetworkPolicy_Provider) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{10, 0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{14, 0}
 }
 
 // The current status of the cluster.
@@ -105,6 +132,9 @@ const (
 	// The ERROR state indicates the cluster may be unusable. Details
 	// can be found in the `statusMessage` field.
 	Cluster_ERROR Cluster_Status = 5
+	// The DEGRADED state indicates the cluster requires user action to restore
+	// full functionality. Details can be found in the `statusMessage` field.
+	Cluster_DEGRADED Cluster_Status = 6
 )
 
 var Cluster_Status_name = map[int32]string{
@@ -114,6 +144,7 @@ var Cluster_Status_name = map[int32]string{
 	3: "RECONCILING",
 	4: "STOPPING",
 	5: "ERROR",
+	6: "DEGRADED",
 }
 var Cluster_Status_value = map[string]int32{
 	"STATUS_UNSPECIFIED": 0,
@@ -122,13 +153,14 @@ var Cluster_Status_value = map[string]int32{
 	"RECONCILING":        3,
 	"STOPPING":           4,
 	"ERROR":              5,
+	"DEGRADED":           6,
 }
 
 func (x Cluster_Status) String() string {
 	return proto.EnumName(Cluster_Status_name, int32(x))
 }
 func (Cluster_Status) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{13, 0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{18, 0}
 }
 
 // Current status of the operation.
@@ -166,7 +198,7 @@ func (x Operation_Status) String() string {
 	return proto.EnumName(Operation_Status_name, int32(x))
 }
 func (Operation_Status) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{15, 0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{20, 0}
 }
 
 // Operation type.
@@ -252,7 +284,7 @@ func (x Operation_Type) String() string {
 	return proto.EnumName(Operation_Type_name, int32(x))
 }
 func (Operation_Type) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{15, 1}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{20, 1}
 }
 
 // Operation type: what type update to perform.
@@ -289,7 +321,7 @@ func (x SetMasterAuthRequest_Action) String() string {
 	return proto.EnumName(SetMasterAuthRequest_Action_name, int32(x))
 }
 func (SetMasterAuthRequest_Action) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{19, 0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{32, 0}
 }
 
 // The current status of the node pool instance.
@@ -342,7 +374,157 @@ func (x NodePool_Status) String() string {
 	return proto.EnumName(NodePool_Status_name, int32(x))
 }
 func (NodePool_Status) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{33, 0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{46, 0}
+}
+
+// NodeMetadata is the configuration for if and how to expose the node
+// metadata to the workload running on the node.
+type WorkloadMetadataConfig_NodeMetadata int32
+
+const (
+	// Not set.
+	WorkloadMetadataConfig_UNSPECIFIED WorkloadMetadataConfig_NodeMetadata = 0
+	// Prevent workloads not in hostNetwork from accessing certain VM metadata,
+	// specifically kube-env, which contains Kubelet credentials, and the
+	// instance identity token.
+	//
+	// Metadata concealment is a temporary security solution available while the
+	// bootstrapping process for cluster nodes is being redesigned with
+	// significant security improvements.  This feature is scheduled to be
+	// deprecated in the future and later removed.
+	WorkloadMetadataConfig_SECURE WorkloadMetadataConfig_NodeMetadata = 1
+	// Expose all VM metadata to pods.
+	WorkloadMetadataConfig_EXPOSE WorkloadMetadataConfig_NodeMetadata = 2
+)
+
+var WorkloadMetadataConfig_NodeMetadata_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "SECURE",
+	2: "EXPOSE",
+}
+var WorkloadMetadataConfig_NodeMetadata_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"SECURE":      1,
+	"EXPOSE":      2,
+}
+
+func (x WorkloadMetadataConfig_NodeMetadata) String() string {
+	return proto.EnumName(WorkloadMetadataConfig_NodeMetadata_name, int32(x))
+}
+func (WorkloadMetadataConfig_NodeMetadata) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{64, 0}
+}
+
+// LocationType is the type of GKE location, regional or zonal.
+type Location_LocationType int32
+
+const (
+	// LOCATION_TYPE_UNSPECIFIED means the location type was not determined.
+	Location_LOCATION_TYPE_UNSPECIFIED Location_LocationType = 0
+	// A GKE Location where Zonal clusters can be created.
+	Location_ZONE Location_LocationType = 1
+	// A GKE Location where Regional clusters can be created.
+	Location_REGION Location_LocationType = 2
+)
+
+var Location_LocationType_name = map[int32]string{
+	0: "LOCATION_TYPE_UNSPECIFIED",
+	1: "ZONE",
+	2: "REGION",
+}
+var Location_LocationType_value = map[string]int32{
+	"LOCATION_TYPE_UNSPECIFIED": 0,
+	"ZONE":                      1,
+	"REGION":                    2,
+}
+
+func (x Location_LocationType) String() string {
+	return proto.EnumName(Location_LocationType_name, int32(x))
+}
+func (Location_LocationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{69, 0}
+}
+
+// Code for each condition
+type StatusCondition_Code int32
+
+const (
+	// UNKNOWN indicates a generic condition.
+	StatusCondition_UNKNOWN StatusCondition_Code = 0
+	// GCE_STOCKOUT indicates a Google Compute Engine stockout.
+	StatusCondition_GCE_STOCKOUT StatusCondition_Code = 1
+	// GKE_SERVICE_ACCOUNT_DELETED indicates that the user deleted their robot
+	// service account.
+	StatusCondition_GKE_SERVICE_ACCOUNT_DELETED StatusCondition_Code = 2
+	// Google Compute Engine quota was exceeded.
+	StatusCondition_GCE_QUOTA_EXCEEDED StatusCondition_Code = 3
+	// Cluster state was manually changed by an SRE due to a system logic error.
+	// More codes TBA
+	StatusCondition_SET_BY_OPERATOR StatusCondition_Code = 4
+)
+
+var StatusCondition_Code_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "GCE_STOCKOUT",
+	2: "GKE_SERVICE_ACCOUNT_DELETED",
+	3: "GCE_QUOTA_EXCEEDED",
+	4: "SET_BY_OPERATOR",
+}
+var StatusCondition_Code_value = map[string]int32{
+	"UNKNOWN":                     0,
+	"GCE_STOCKOUT":                1,
+	"GKE_SERVICE_ACCOUNT_DELETED": 2,
+	"GCE_QUOTA_EXCEEDED":          3,
+	"SET_BY_OPERATOR":             4,
+}
+
+func (x StatusCondition_Code) String() string {
+	return proto.EnumName(StatusCondition_Code_name, int32(x))
+}
+func (StatusCondition_Code) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{70, 0}
+}
+
+// Status shows the current usage of a secondary IP range.
+type UsableSubnetworkSecondaryRange_Status int32
+
+const (
+	// UNKNOWN is the zero value of the Status enum. It's not a valid status.
+	UsableSubnetworkSecondaryRange_UNKNOWN UsableSubnetworkSecondaryRange_Status = 0
+	// UNUSED denotes that this range is unclaimed by any cluster.
+	UsableSubnetworkSecondaryRange_UNUSED UsableSubnetworkSecondaryRange_Status = 1
+	// IN_USE_SERVICE denotes that this range is claimed by a cluster for
+	// services. It cannot be used for other clusters.
+	UsableSubnetworkSecondaryRange_IN_USE_SERVICE UsableSubnetworkSecondaryRange_Status = 2
+	// IN_USE_SHAREABLE_POD denotes this range was created by the network admin
+	// and is currently claimed by a cluster for pods. It can only be used by
+	// other clusters as a pod range.
+	UsableSubnetworkSecondaryRange_IN_USE_SHAREABLE_POD UsableSubnetworkSecondaryRange_Status = 3
+	// IN_USE_MANAGED_POD denotes this range was created by GKE and is claimed
+	// for pods. It cannot be used for other clusters.
+	UsableSubnetworkSecondaryRange_IN_USE_MANAGED_POD UsableSubnetworkSecondaryRange_Status = 4
+)
+
+var UsableSubnetworkSecondaryRange_Status_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "UNUSED",
+	2: "IN_USE_SERVICE",
+	3: "IN_USE_SHAREABLE_POD",
+	4: "IN_USE_MANAGED_POD",
+}
+var UsableSubnetworkSecondaryRange_Status_value = map[string]int32{
+	"UNKNOWN":              0,
+	"UNUSED":               1,
+	"IN_USE_SERVICE":       2,
+	"IN_USE_SHAREABLE_POD": 3,
+	"IN_USE_MANAGED_POD":   4,
+}
+
+func (x UsableSubnetworkSecondaryRange_Status) String() string {
+	return proto.EnumName(UsableSubnetworkSecondaryRange_Status_name, int32(x))
+}
+func (UsableSubnetworkSecondaryRange_Status) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{74, 0}
 }
 
 // Parameters that describe the nodes in a cluster.
@@ -382,8 +564,18 @@ type NodeConfig struct {
 	// Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes
 	// in length. These are reflected as part of a URL in the metadata server.
 	// Additionally, to avoid ambiguity, keys must not conflict with any other
-	// metadata keys for the project or be one of the four reserved keys:
-	// "instance-template", "kube-env", "startup-script", and "user-data"
+	// metadata keys for the project or be one of the reserved keys:
+	//  "cluster-location"
+	//  "cluster-name"
+	//  "cluster-uid"
+	//  "configure-sh"
+	//  "enable-oslogin"
+	//  "gci-ensure-gke-docker"
+	//  "gci-update-strategy"
+	//  "instance-template"
+	//  "kube-env"
+	//  "startup-script"
+	//  "user-data"
 	//
 	// Values are free-form strings, and only have meaning as interpreted by
 	// the image running in the instance. The only restriction placed on them is
@@ -423,13 +615,20 @@ type NodeConfig struct {
 	// See https://cloud.google.com/compute/docs/gpus for more information about
 	// support for GPUs.
 	Accelerators []*AcceleratorConfig `protobuf:"bytes,11,rep,name=accelerators,proto3" json:"accelerators,omitempty"`
+	// Type of the disk attached to each node (e.g. 'pd-standard' or 'pd-ssd')
+	//
+	// If unspecified, the default disk type is 'pd-standard'
+	DiskType string `protobuf:"bytes,12,opt,name=disk_type,json=diskType,proto3" json:"disk_type,omitempty"`
 	// Minimum CPU platform to be used by this instance. The instance may be
 	// scheduled on the specified or newer CPU platform. Applicable values are the
 	// friendly names of CPU platforms, such as
 	// <code>minCpuPlatform: &quot;Intel Haswell&quot;</code> or
 	// <code>minCpuPlatform: &quot;Intel Sandy Bridge&quot;</code>. For more
-	// information, read [how to specify min CPU platform](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
+	// information, read [how to specify min CPU
+	// platform](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
 	MinCpuPlatform string `protobuf:"bytes,13,opt,name=min_cpu_platform,json=minCpuPlatform,proto3" json:"min_cpu_platform,omitempty"`
+	// The workload metadata configuration for this node.
+	WorkloadMetadataConfig *WorkloadMetadataConfig `protobuf:"bytes,14,opt,name=workload_metadata_config,json=workloadMetadataConfig,proto3" json:"workload_metadata_config,omitempty"`
 	// List of kubernetes taints to be applied to each node.
 	//
 	// For more information, including usage and the valid values, see:
@@ -444,7 +643,7 @@ func (m *NodeConfig) Reset()         { *m = NodeConfig{} }
 func (m *NodeConfig) String() string { return proto.CompactTextString(m) }
 func (*NodeConfig) ProtoMessage()    {}
 func (*NodeConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{0}
 }
 func (m *NodeConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_NodeConfig.Unmarshal(m, b)
@@ -541,6 +740,13 @@ func (m *NodeConfig) GetAccelerators() []*AcceleratorConfig {
 	return nil
 }
 
+func (m *NodeConfig) GetDiskType() string {
+	if m != nil {
+		return m.DiskType
+	}
+	return ""
+}
+
 func (m *NodeConfig) GetMinCpuPlatform() string {
 	if m != nil {
 		return m.MinCpuPlatform
@@ -548,6 +754,13 @@ func (m *NodeConfig) GetMinCpuPlatform() string {
 	return ""
 }
 
+func (m *NodeConfig) GetWorkloadMetadataConfig() *WorkloadMetadataConfig {
+	if m != nil {
+		return m.WorkloadMetadataConfig
+	}
+	return nil
+}
+
 func (m *NodeConfig) GetTaints() []*NodeTaint {
 	if m != nil {
 		return m.Taints
@@ -576,7 +789,7 @@ func (m *NodeTaint) Reset()         { *m = NodeTaint{} }
 func (m *NodeTaint) String() string { return proto.CompactTextString(m) }
 func (*NodeTaint) ProtoMessage()    {}
 func (*NodeTaint) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{1}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{1}
 }
 func (m *NodeTaint) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_NodeTaint.Unmarshal(m, b)
@@ -622,16 +835,17 @@ func (m *NodeTaint) GetEffect() NodeTaint_Effect {
 // certificates.
 type MasterAuth struct {
 	// The username to use for HTTP basic authentication to the master endpoint.
-	// For clusters v1.6.0 and later, you can disable basic authentication by
-	// providing an empty username.
+	// For clusters v1.6.0 and later, basic authentication can be disabled by
+	// leaving username unspecified (or setting it to the empty string).
 	Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
 	// The password to use for HTTP basic authentication to the master endpoint.
 	// Because the master endpoint is open to the Internet, you should create a
 	// strong password.  If a password is provided for cluster creation, username
 	// must be non-empty.
 	Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
-	// Configuration for client certificate authentication on the cluster.  If no
-	// configuration is specified, a client certificate is issued.
+	// Configuration for client certificate authentication on the cluster. For
+	// clusters before v1.12, if no configuration is specified, a client
+	// certificate is issued.
 	ClientCertificateConfig *ClientCertificateConfig `protobuf:"bytes,3,opt,name=client_certificate_config,json=clientCertificateConfig,proto3" json:"client_certificate_config,omitempty"`
 	// [Output only] Base64-encoded public certificate that is the root of
 	// trust for the cluster.
@@ -651,7 +865,7 @@ func (m *MasterAuth) Reset()         { *m = MasterAuth{} }
 func (m *MasterAuth) String() string { return proto.CompactTextString(m) }
 func (*MasterAuth) ProtoMessage()    {}
 func (*MasterAuth) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{2}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{2}
 }
 func (m *MasterAuth) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MasterAuth.Unmarshal(m, b)
@@ -726,7 +940,7 @@ func (m *ClientCertificateConfig) Reset()         { *m = ClientCertificateConfig
 func (m *ClientCertificateConfig) String() string { return proto.CompactTextString(m) }
 func (*ClientCertificateConfig) ProtoMessage()    {}
 func (*ClientCertificateConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{3}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{3}
 }
 func (m *ClientCertificateConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ClientCertificateConfig.Unmarshal(m, b)
@@ -768,17 +982,24 @@ type AddonsConfig struct {
 	// Configuration for NetworkPolicy. This only tracks whether the addon
 	// is enabled or not on the Master, it does not track whether network policy
 	// is enabled for the nodes.
-	NetworkPolicyConfig  *NetworkPolicyConfig `protobuf:"bytes,4,opt,name=network_policy_config,json=networkPolicyConfig,proto3" json:"network_policy_config,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
-	XXX_unrecognized     []byte               `json:"-"`
-	XXX_sizecache        int32                `json:"-"`
+	NetworkPolicyConfig *NetworkPolicyConfig `protobuf:"bytes,4,opt,name=network_policy_config,json=networkPolicyConfig,proto3" json:"network_policy_config,omitempty"`
+	// Configuration for Istio, an open platform to connect, manage, and secure
+	// microservices.
+	IstioConfig *IstioConfig `protobuf:"bytes,5,opt,name=istio_config,json=istioConfig,proto3" json:"istio_config,omitempty"`
+	// Configuration for the Cloud Run addon. The `IstioConfig` addon must be
+	// enabled in order to enable Cloud Run addon. This option can only be enabled
+	// at cluster creation time.
+	CloudRunConfig       *CloudRunConfig `protobuf:"bytes,7,opt,name=cloud_run_config,json=cloudRunConfig,proto3" json:"cloud_run_config,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
 }
 
 func (m *AddonsConfig) Reset()         { *m = AddonsConfig{} }
 func (m *AddonsConfig) String() string { return proto.CompactTextString(m) }
 func (*AddonsConfig) ProtoMessage()    {}
 func (*AddonsConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{4}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{4}
 }
 func (m *AddonsConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AddonsConfig.Unmarshal(m, b)
@@ -826,6 +1047,20 @@ func (m *AddonsConfig) GetNetworkPolicyConfig() *NetworkPolicyConfig {
 	return nil
 }
 
+func (m *AddonsConfig) GetIstioConfig() *IstioConfig {
+	if m != nil {
+		return m.IstioConfig
+	}
+	return nil
+}
+
+func (m *AddonsConfig) GetCloudRunConfig() *CloudRunConfig {
+	if m != nil {
+		return m.CloudRunConfig
+	}
+	return nil
+}
+
 // Configuration options for the HTTP (L7) load balancing controller addon,
 // which makes it easy to set up HTTP load balancers for services in a cluster.
 type HttpLoadBalancing struct {
@@ -842,7 +1077,7 @@ func (m *HttpLoadBalancing) Reset()         { *m = HttpLoadBalancing{} }
 func (m *HttpLoadBalancing) String() string { return proto.CompactTextString(m) }
 func (*HttpLoadBalancing) ProtoMessage()    {}
 func (*HttpLoadBalancing) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{5}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{5}
 }
 func (m *HttpLoadBalancing) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_HttpLoadBalancing.Unmarshal(m, b)
@@ -886,7 +1121,7 @@ func (m *HorizontalPodAutoscaling) Reset()         { *m = HorizontalPodAutoscali
 func (m *HorizontalPodAutoscaling) String() string { return proto.CompactTextString(m) }
 func (*HorizontalPodAutoscaling) ProtoMessage()    {}
 func (*HorizontalPodAutoscaling) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{6}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{6}
 }
 func (m *HorizontalPodAutoscaling) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_HorizontalPodAutoscaling.Unmarshal(m, b)
@@ -926,7 +1161,7 @@ func (m *KubernetesDashboard) Reset()         { *m = KubernetesDashboard{} }
 func (m *KubernetesDashboard) String() string { return proto.CompactTextString(m) }
 func (*KubernetesDashboard) ProtoMessage()    {}
 func (*KubernetesDashboard) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{7}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{7}
 }
 func (m *KubernetesDashboard) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_KubernetesDashboard.Unmarshal(m, b)
@@ -968,7 +1203,7 @@ func (m *NetworkPolicyConfig) Reset()         { *m = NetworkPolicyConfig{} }
 func (m *NetworkPolicyConfig) String() string { return proto.CompactTextString(m) }
 func (*NetworkPolicyConfig) ProtoMessage()    {}
 func (*NetworkPolicyConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{8}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{8}
 }
 func (m *NetworkPolicyConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_NetworkPolicyConfig.Unmarshal(m, b)
@@ -995,6 +1230,176 @@ func (m *NetworkPolicyConfig) GetDisabled() bool {
 	return false
 }
 
+// Configuration options for private clusters.
+type PrivateClusterConfig struct {
+	// Whether nodes have internal IP addresses only. If enabled, all nodes are
+	// given only RFC 1918 private addresses and communicate with the master via
+	// private networking.
+	EnablePrivateNodes bool `protobuf:"varint,1,opt,name=enable_private_nodes,json=enablePrivateNodes,proto3" json:"enable_private_nodes,omitempty"`
+	// Whether the master's internal IP address is used as the cluster endpoint.
+	EnablePrivateEndpoint bool `protobuf:"varint,2,opt,name=enable_private_endpoint,json=enablePrivateEndpoint,proto3" json:"enable_private_endpoint,omitempty"`
+	// The IP range in CIDR notation to use for the hosted master network. This
+	// range will be used for assigning internal IP addresses to the master or
+	// set of masters, as well as the ILB VIP. This range must not overlap with
+	// any other ranges in use within the cluster's network.
+	MasterIpv4CidrBlock string `protobuf:"bytes,3,opt,name=master_ipv4_cidr_block,json=masterIpv4CidrBlock,proto3" json:"master_ipv4_cidr_block,omitempty"`
+	// Output only. The internal IP address of this cluster's master endpoint.
+	PrivateEndpoint string `protobuf:"bytes,4,opt,name=private_endpoint,json=privateEndpoint,proto3" json:"private_endpoint,omitempty"`
+	// Output only. The external IP address of this cluster's master endpoint.
+	PublicEndpoint       string   `protobuf:"bytes,5,opt,name=public_endpoint,json=publicEndpoint,proto3" json:"public_endpoint,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PrivateClusterConfig) Reset()         { *m = PrivateClusterConfig{} }
+func (m *PrivateClusterConfig) String() string { return proto.CompactTextString(m) }
+func (*PrivateClusterConfig) ProtoMessage()    {}
+func (*PrivateClusterConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{9}
+}
+func (m *PrivateClusterConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PrivateClusterConfig.Unmarshal(m, b)
+}
+func (m *PrivateClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PrivateClusterConfig.Marshal(b, m, deterministic)
+}
+func (dst *PrivateClusterConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PrivateClusterConfig.Merge(dst, src)
+}
+func (m *PrivateClusterConfig) XXX_Size() int {
+	return xxx_messageInfo_PrivateClusterConfig.Size(m)
+}
+func (m *PrivateClusterConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_PrivateClusterConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PrivateClusterConfig proto.InternalMessageInfo
+
+func (m *PrivateClusterConfig) GetEnablePrivateNodes() bool {
+	if m != nil {
+		return m.EnablePrivateNodes
+	}
+	return false
+}
+
+func (m *PrivateClusterConfig) GetEnablePrivateEndpoint() bool {
+	if m != nil {
+		return m.EnablePrivateEndpoint
+	}
+	return false
+}
+
+func (m *PrivateClusterConfig) GetMasterIpv4CidrBlock() string {
+	if m != nil {
+		return m.MasterIpv4CidrBlock
+	}
+	return ""
+}
+
+func (m *PrivateClusterConfig) GetPrivateEndpoint() string {
+	if m != nil {
+		return m.PrivateEndpoint
+	}
+	return ""
+}
+
+func (m *PrivateClusterConfig) GetPublicEndpoint() string {
+	if m != nil {
+		return m.PublicEndpoint
+	}
+	return ""
+}
+
+// Configuration options for Istio addon.
+type IstioConfig struct {
+	// Whether Istio is enabled for this cluster.
+	Disabled bool `protobuf:"varint,1,opt,name=disabled,proto3" json:"disabled,omitempty"`
+	// The specified Istio auth mode, either none, or mutual TLS.
+	Auth                 IstioConfig_IstioAuthMode `protobuf:"varint,2,opt,name=auth,proto3,enum=google.container.v1beta1.IstioConfig_IstioAuthMode" json:"auth,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *IstioConfig) Reset()         { *m = IstioConfig{} }
+func (m *IstioConfig) String() string { return proto.CompactTextString(m) }
+func (*IstioConfig) ProtoMessage()    {}
+func (*IstioConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{10}
+}
+func (m *IstioConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IstioConfig.Unmarshal(m, b)
+}
+func (m *IstioConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IstioConfig.Marshal(b, m, deterministic)
+}
+func (dst *IstioConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IstioConfig.Merge(dst, src)
+}
+func (m *IstioConfig) XXX_Size() int {
+	return xxx_messageInfo_IstioConfig.Size(m)
+}
+func (m *IstioConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_IstioConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IstioConfig proto.InternalMessageInfo
+
+func (m *IstioConfig) GetDisabled() bool {
+	if m != nil {
+		return m.Disabled
+	}
+	return false
+}
+
+func (m *IstioConfig) GetAuth() IstioConfig_IstioAuthMode {
+	if m != nil {
+		return m.Auth
+	}
+	return IstioConfig_AUTH_NONE
+}
+
+// Configuration options for the Cloud Run feature.
+type CloudRunConfig struct {
+	// Whether Cloud Run addon is enabled for this cluster.
+	Disabled             bool     `protobuf:"varint,1,opt,name=disabled,proto3" json:"disabled,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CloudRunConfig) Reset()         { *m = CloudRunConfig{} }
+func (m *CloudRunConfig) String() string { return proto.CompactTextString(m) }
+func (*CloudRunConfig) ProtoMessage()    {}
+func (*CloudRunConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{11}
+}
+func (m *CloudRunConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CloudRunConfig.Unmarshal(m, b)
+}
+func (m *CloudRunConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CloudRunConfig.Marshal(b, m, deterministic)
+}
+func (dst *CloudRunConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CloudRunConfig.Merge(dst, src)
+}
+func (m *CloudRunConfig) XXX_Size() int {
+	return xxx_messageInfo_CloudRunConfig.Size(m)
+}
+func (m *CloudRunConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_CloudRunConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CloudRunConfig proto.InternalMessageInfo
+
+func (m *CloudRunConfig) GetDisabled() bool {
+	if m != nil {
+		return m.Disabled
+	}
+	return false
+}
+
 // Configuration options for the master authorized networks feature. Enabled
 // master authorized networks will disallow all external traffic to access
 // Kubernetes master through HTTPS except traffic from the given CIDR blocks,
@@ -1014,7 +1419,7 @@ func (m *MasterAuthorizedNetworksConfig) Reset()         { *m = MasterAuthorized
 func (m *MasterAuthorizedNetworksConfig) String() string { return proto.CompactTextString(m) }
 func (*MasterAuthorizedNetworksConfig) ProtoMessage()    {}
 func (*MasterAuthorizedNetworksConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{9}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{12}
 }
 func (m *MasterAuthorizedNetworksConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MasterAuthorizedNetworksConfig.Unmarshal(m, b)
@@ -1065,7 +1470,7 @@ func (m *MasterAuthorizedNetworksConfig_CidrBlock) Reset() {
 func (m *MasterAuthorizedNetworksConfig_CidrBlock) String() string { return proto.CompactTextString(m) }
 func (*MasterAuthorizedNetworksConfig_CidrBlock) ProtoMessage()    {}
 func (*MasterAuthorizedNetworksConfig_CidrBlock) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{9, 0}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{12, 0}
 }
 func (m *MasterAuthorizedNetworksConfig_CidrBlock) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MasterAuthorizedNetworksConfig_CidrBlock.Unmarshal(m, b)
@@ -1099,6 +1504,50 @@ func (m *MasterAuthorizedNetworksConfig_CidrBlock) GetCidrBlock() string {
 	return ""
 }
 
+// Configuration for the legacy Attribute Based Access Control authorization
+// mode.
+type LegacyAbac struct {
+	// Whether the ABAC authorizer is enabled for this cluster. When enabled,
+	// identities in the system, including service accounts, nodes, and
+	// controllers, will have statically granted permissions beyond those
+	// provided by the RBAC configuration or IAM.
+	Enabled              bool     `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LegacyAbac) Reset()         { *m = LegacyAbac{} }
+func (m *LegacyAbac) String() string { return proto.CompactTextString(m) }
+func (*LegacyAbac) ProtoMessage()    {}
+func (*LegacyAbac) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{13}
+}
+func (m *LegacyAbac) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LegacyAbac.Unmarshal(m, b)
+}
+func (m *LegacyAbac) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LegacyAbac.Marshal(b, m, deterministic)
+}
+func (dst *LegacyAbac) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LegacyAbac.Merge(dst, src)
+}
+func (m *LegacyAbac) XXX_Size() int {
+	return xxx_messageInfo_LegacyAbac.Size(m)
+}
+func (m *LegacyAbac) XXX_DiscardUnknown() {
+	xxx_messageInfo_LegacyAbac.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LegacyAbac proto.InternalMessageInfo
+
+func (m *LegacyAbac) GetEnabled() bool {
+	if m != nil {
+		return m.Enabled
+	}
+	return false
+}
+
 // Configuration options for the NetworkPolicy feature.
 // https://kubernetes.io/docs/concepts/services-networking/networkpolicies/
 type NetworkPolicy struct {
@@ -1115,7 +1564,7 @@ func (m *NetworkPolicy) Reset()         { *m = NetworkPolicy{} }
 func (m *NetworkPolicy) String() string { return proto.CompactTextString(m) }
 func (*NetworkPolicy) ProtoMessage()    {}
 func (*NetworkPolicy) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{10}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{14}
 }
 func (m *NetworkPolicy) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_NetworkPolicy.Unmarshal(m, b)
@@ -1162,11 +1611,11 @@ type IPAllocationPolicy struct {
 	// subnetwork.
 	SubnetworkName string `protobuf:"bytes,3,opt,name=subnetwork_name,json=subnetworkName,proto3" json:"subnetwork_name,omitempty"`
 	// This field is deprecated, use cluster_ipv4_cidr_block.
-	ClusterIpv4Cidr string `protobuf:"bytes,4,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr,proto3" json:"cluster_ipv4_cidr,omitempty"`
+	ClusterIpv4Cidr string `protobuf:"bytes,4,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr,proto3" json:"cluster_ipv4_cidr,omitempty"` // Deprecated: Do not use.
 	// This field is deprecated, use node_ipv4_cidr_block.
-	NodeIpv4Cidr string `protobuf:"bytes,5,opt,name=node_ipv4_cidr,json=nodeIpv4Cidr,proto3" json:"node_ipv4_cidr,omitempty"`
+	NodeIpv4Cidr string `protobuf:"bytes,5,opt,name=node_ipv4_cidr,json=nodeIpv4Cidr,proto3" json:"node_ipv4_cidr,omitempty"` // Deprecated: Do not use.
 	// This field is deprecated, use services_ipv4_cidr_block.
-	ServicesIpv4Cidr string `protobuf:"bytes,6,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr,proto3" json:"services_ipv4_cidr,omitempty"`
+	ServicesIpv4Cidr string `protobuf:"bytes,6,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr,proto3" json:"services_ipv4_cidr,omitempty"` // Deprecated: Do not use.
 	// The name of the secondary range to be used for the cluster CIDR
 	// block.  The secondary range will be used for pod IP
 	// addresses. This must be an existing secondary range associated
@@ -1229,17 +1678,46 @@ type IPAllocationPolicy struct {
 	// notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g.
 	// `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range
 	// to use.
-	ServicesIpv4CidrBlock string   `protobuf:"bytes,11,opt,name=services_ipv4_cidr_block,json=servicesIpv4CidrBlock,proto3" json:"services_ipv4_cidr_block,omitempty"`
-	XXX_NoUnkeyedLiteral  struct{} `json:"-"`
-	XXX_unrecognized      []byte   `json:"-"`
-	XXX_sizecache         int32    `json:"-"`
+	ServicesIpv4CidrBlock string `protobuf:"bytes,11,opt,name=services_ipv4_cidr_block,json=servicesIpv4CidrBlock,proto3" json:"services_ipv4_cidr_block,omitempty"`
+	// If true, allow allocation of cluster CIDR ranges that overlap with certain
+	// kinds of network routes. By default we do not allow cluster CIDR ranges to
+	// intersect with any user declared routes. With allow_route_overlap == true,
+	// we allow overlapping with CIDR ranges that are larger than the cluster CIDR
+	// range.
+	//
+	// If this field is set to true, then cluster and services CIDRs must be
+	// fully-specified (e.g. `10.96.0.0/14`, but not `/14`), which means:
+	// 1) When `use_ip_aliases` is true, `cluster_ipv4_cidr_block` and
+	//    `services_ipv4_cidr_block` must be fully-specified.
+	// 2) When `use_ip_aliases` is false, `cluster.cluster_ipv4_cidr` muse be
+	//    fully-specified.
+	AllowRouteOverlap bool `protobuf:"varint,12,opt,name=allow_route_overlap,json=allowRouteOverlap,proto3" json:"allow_route_overlap,omitempty"`
+	// The IP address range of the Cloud TPUs in this cluster. If unspecified, a
+	// range will be automatically chosen with the default size.
+	//
+	// This field is only applicable when `use_ip_aliases` is true.
+	//
+	// If unspecified, the range will use the default size.
+	//
+	// Set to /netmask (e.g. `/14`) to have a range chosen with a specific
+	// netmask.
+	//
+	// Set to a
+	// [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
+	// notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g.
+	// `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range
+	// to use.
+	TpuIpv4CidrBlock     string   `protobuf:"bytes,13,opt,name=tpu_ipv4_cidr_block,json=tpuIpv4CidrBlock,proto3" json:"tpu_ipv4_cidr_block,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *IPAllocationPolicy) Reset()         { *m = IPAllocationPolicy{} }
 func (m *IPAllocationPolicy) String() string { return proto.CompactTextString(m) }
 func (*IPAllocationPolicy) ProtoMessage()    {}
 func (*IPAllocationPolicy) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{11}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{15}
 }
 func (m *IPAllocationPolicy) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_IPAllocationPolicy.Unmarshal(m, b)
@@ -1280,6 +1758,7 @@ func (m *IPAllocationPolicy) GetSubnetworkName() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *IPAllocationPolicy) GetClusterIpv4Cidr() string {
 	if m != nil {
 		return m.ClusterIpv4Cidr
@@ -1287,6 +1766,7 @@ func (m *IPAllocationPolicy) GetClusterIpv4Cidr() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *IPAllocationPolicy) GetNodeIpv4Cidr() string {
 	if m != nil {
 		return m.NodeIpv4Cidr
@@ -1294,6 +1774,7 @@ func (m *IPAllocationPolicy) GetNodeIpv4Cidr() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *IPAllocationPolicy) GetServicesIpv4Cidr() string {
 	if m != nil {
 		return m.ServicesIpv4Cidr
@@ -1336,6 +1817,61 @@ func (m *IPAllocationPolicy) GetServicesIpv4CidrBlock() string {
 	return ""
 }
 
+func (m *IPAllocationPolicy) GetAllowRouteOverlap() bool {
+	if m != nil {
+		return m.AllowRouteOverlap
+	}
+	return false
+}
+
+func (m *IPAllocationPolicy) GetTpuIpv4CidrBlock() string {
+	if m != nil {
+		return m.TpuIpv4CidrBlock
+	}
+	return ""
+}
+
+// Configuration for Binary Authorization.
+type BinaryAuthorization struct {
+	// Enable Binary Authorization for this cluster. If enabled, all container
+	// images will be validated by Google Binauthz.
+	Enabled              bool     `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BinaryAuthorization) Reset()         { *m = BinaryAuthorization{} }
+func (m *BinaryAuthorization) String() string { return proto.CompactTextString(m) }
+func (*BinaryAuthorization) ProtoMessage()    {}
+func (*BinaryAuthorization) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{16}
+}
+func (m *BinaryAuthorization) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BinaryAuthorization.Unmarshal(m, b)
+}
+func (m *BinaryAuthorization) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BinaryAuthorization.Marshal(b, m, deterministic)
+}
+func (dst *BinaryAuthorization) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BinaryAuthorization.Merge(dst, src)
+}
+func (m *BinaryAuthorization) XXX_Size() int {
+	return xxx_messageInfo_BinaryAuthorization.Size(m)
+}
+func (m *BinaryAuthorization) XXX_DiscardUnknown() {
+	xxx_messageInfo_BinaryAuthorization.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BinaryAuthorization proto.InternalMessageInfo
+
+func (m *BinaryAuthorization) GetEnabled() bool {
+	if m != nil {
+		return m.Enabled
+	}
+	return false
+}
+
 // Configuration for the PodSecurityPolicy feature.
 type PodSecurityPolicyConfig struct {
 	// Enable the PodSecurityPolicy controller for this cluster. If enabled, pods
@@ -1350,7 +1886,7 @@ func (m *PodSecurityPolicyConfig) Reset()         { *m = PodSecurityPolicyConfig
 func (m *PodSecurityPolicyConfig) String() string { return proto.CompactTextString(m) }
 func (*PodSecurityPolicyConfig) ProtoMessage()    {}
 func (*PodSecurityPolicyConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{12}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{17}
 }
 func (m *PodSecurityPolicyConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PodSecurityPolicyConfig.Unmarshal(m, b)
@@ -1377,7 +1913,7 @@ func (m *PodSecurityPolicyConfig) GetEnabled() bool {
 	return false
 }
 
-// A Google Container Engine cluster.
+// A Google Kubernetes Engine cluster.
 type Cluster struct {
 	// The name of this cluster. The name must be unique within this project
 	// and zone, and can be up to 40 characters with the following restrictions:
@@ -1409,6 +1945,10 @@ type Cluster struct {
 	// If unspecified, the defaults are used.
 	NodeConfig *NodeConfig `protobuf:"bytes,4,opt,name=node_config,json=nodeConfig,proto3" json:"node_config,omitempty"`
 	// The authentication information for accessing the master endpoint.
+	// If unspecified, the defaults are used:
+	// For clusters before v1.12, if master_auth is unspecified, `username` will
+	// be set to "admin", a random password will be generated, and a client
+	// certificate will be issued.
 	MasterAuth *MasterAuth `protobuf:"bytes,5,opt,name=master_auth,json=masterAuth,proto3" json:"master_auth,omitempty"`
 	// The logging service the cluster should use to write logs.
 	// Currently available options:
@@ -1427,7 +1967,8 @@ type Cluster struct {
 	// The name of the Google Compute Engine
 	// [network](/compute/docs/networks-and-firewalls#networks) to which the
 	// cluster is connected. If left unspecified, the `default` network
-	// will be used.
+	// will be used. On output this shows the network ID instead of
+	// the name.
 	Network string `protobuf:"bytes,8,opt,name=network,proto3" json:"network,omitempty"`
 	// The IP address range of the container pods in this cluster, in
 	// [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
@@ -1438,14 +1979,15 @@ type Cluster struct {
 	AddonsConfig *AddonsConfig `protobuf:"bytes,10,opt,name=addons_config,json=addonsConfig,proto3" json:"addons_config,omitempty"`
 	// The name of the Google Compute Engine
 	// [subnetwork](/compute/docs/subnetworks) to which the
-	// cluster is connected.
+	// cluster is connected. On output this shows the subnetwork ID instead of
+	// the name.
 	Subnetwork string `protobuf:"bytes,11,opt,name=subnetwork,proto3" json:"subnetwork,omitempty"`
 	// The node pools associated with this cluster.
 	// This field should not be set if "node_config" or "initial_node_count" are
 	// specified.
 	NodePools []*NodePool `protobuf:"bytes,12,rep,name=node_pools,json=nodePools,proto3" json:"node_pools,omitempty"`
 	// The list of Google Compute Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's nodes
+	// [zones](/compute/docs/zones#available) in which the cluster's nodes
 	// should be located.
 	Locations []string `protobuf:"bytes,13,rep,name=locations,proto3" json:"locations,omitempty"`
 	// Kubernetes alpha features are enabled on this cluster. This includes alpha
@@ -1455,6 +1997,13 @@ type Cluster struct {
 	// Alpha enabled clusters are automatically deleted thirty days after
 	// creation.
 	EnableKubernetesAlpha bool `protobuf:"varint,14,opt,name=enable_kubernetes_alpha,json=enableKubernetesAlpha,proto3" json:"enable_kubernetes_alpha,omitempty"`
+	// The resource labels for the cluster to use to annotate any related
+	// Google Compute Engine resources.
+	ResourceLabels map[string]string `protobuf:"bytes,15,rep,name=resource_labels,json=resourceLabels,proto3" json:"resource_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// The fingerprint of the set of labels for this cluster.
+	LabelFingerprint string `protobuf:"bytes,16,opt,name=label_fingerprint,json=labelFingerprint,proto3" json:"label_fingerprint,omitempty"`
+	// Configuration for the legacy ABAC authorization mode.
+	LegacyAbac *LegacyAbac `protobuf:"bytes,18,opt,name=legacy_abac,json=legacyAbac,proto3" json:"legacy_abac,omitempty"`
 	// Configuration options for the NetworkPolicy feature.
 	NetworkPolicy *NetworkPolicy `protobuf:"bytes,19,opt,name=network_policy,json=networkPolicy,proto3" json:"network_policy,omitempty"`
 	// Configuration for cluster IP allocation.
@@ -1463,15 +2012,44 @@ type Cluster struct {
 	MasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,22,opt,name=master_authorized_networks_config,json=masterAuthorizedNetworksConfig,proto3" json:"master_authorized_networks_config,omitempty"`
 	// Configure the maintenance policy for this cluster.
 	MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,23,opt,name=maintenance_policy,json=maintenancePolicy,proto3" json:"maintenance_policy,omitempty"`
+	// Configuration for Binary Authorization.
+	BinaryAuthorization *BinaryAuthorization `protobuf:"bytes,24,opt,name=binary_authorization,json=binaryAuthorization,proto3" json:"binary_authorization,omitempty"`
 	// Configuration for the PodSecurityPolicy feature.
 	PodSecurityPolicyConfig *PodSecurityPolicyConfig `protobuf:"bytes,25,opt,name=pod_security_policy_config,json=podSecurityPolicyConfig,proto3" json:"pod_security_policy_config,omitempty"`
+	// Cluster-level autoscaling configuration.
+	Autoscaling *ClusterAutoscaling `protobuf:"bytes,26,opt,name=autoscaling,proto3" json:"autoscaling,omitempty"`
+	// Configuration for cluster networking.
+	NetworkConfig *NetworkConfig `protobuf:"bytes,27,opt,name=network_config,json=networkConfig,proto3" json:"network_config,omitempty"`
+	// If this is a private cluster setup. Private clusters are clusters that, by
+	// default have no external IP addresses on the nodes and where nodes and the
+	// master communicate over private IP addresses.
+	// This field is deprecated, use private_cluster_config.enable_private_nodes
+	// instead.
+	PrivateCluster bool `protobuf:"varint,28,opt,name=private_cluster,json=privateCluster,proto3" json:"private_cluster,omitempty"` // Deprecated: Do not use.
+	// The IP prefix in CIDR notation to use for the hosted master network.
+	// This prefix will be used for assigning private IP addresses to the
+	// master or set of masters, as well as the ILB VIP.
+	// This field is deprecated, use
+	// private_cluster_config.master_ipv4_cidr_block instead.
+	MasterIpv4CidrBlock string `protobuf:"bytes,29,opt,name=master_ipv4_cidr_block,json=masterIpv4CidrBlock,proto3" json:"master_ipv4_cidr_block,omitempty"` // Deprecated: Do not use.
+	// The default constraint on the maximum number of pods that can be run
+	// simultaneously on a node in the node pool of this cluster. Only honored
+	// if cluster created with IP Alias support.
+	DefaultMaxPodsConstraint *MaxPodsConstraint `protobuf:"bytes,30,opt,name=default_max_pods_constraint,json=defaultMaxPodsConstraint,proto3" json:"default_max_pods_constraint,omitempty"`
+	// Configuration for exporting resource usages. Resource usage export is
+	// disabled when this config unspecified.
+	ResourceUsageExportConfig *ResourceUsageExportConfig `protobuf:"bytes,33,opt,name=resource_usage_export_config,json=resourceUsageExportConfig,proto3" json:"resource_usage_export_config,omitempty"`
+	// Configuration for private cluster.
+	PrivateClusterConfig *PrivateClusterConfig `protobuf:"bytes,37,opt,name=private_cluster_config,json=privateClusterConfig,proto3" json:"private_cluster_config,omitempty"`
+	// Cluster-level Vertical Pod Autoscaling configuration.
+	VerticalPodAutoscaling *VerticalPodAutoscaling `protobuf:"bytes,39,opt,name=vertical_pod_autoscaling,json=verticalPodAutoscaling,proto3" json:"vertical_pod_autoscaling,omitempty"`
 	// [Output only] Server-defined URL for the resource.
 	SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink,proto3" json:"self_link,omitempty"`
 	// [Output only] The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
 	// This field is deprecated, use location instead.
-	Zone string `protobuf:"bytes,101,opt,name=zone,proto3" json:"zone,omitempty"`
+	Zone string `protobuf:"bytes,101,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
 	// [Output only] The IP address of this cluster's master endpoint.
 	// The endpoint can be accessed from the internet at
 	// `https://username:password@endpoint/`.
@@ -1483,13 +2061,24 @@ type Cluster struct {
 	// found in validMasterVersions returned by getServerConfig.  The version can
 	// be upgraded over time; such upgrades are reflected in
 	// currentMasterVersion and currentNodeVersion.
+	//
+	// Users may specify either explicit versions offered by
+	// Kubernetes Engine or version aliases, which have the following behavior:
+	//
+	// - "latest": picks the highest valid Kubernetes version
+	// - "1.X": picks the highest valid patch+gke.N patch in the 1.X version
+	// - "1.X.Y": picks the highest valid gke.N patch in the 1.X.Y version
+	// - "1.X.Y-gke.N": picks an explicit Kubernetes version
+	// - "","-": picks the default Kubernetes version
 	InitialClusterVersion string `protobuf:"bytes,103,opt,name=initial_cluster_version,json=initialClusterVersion,proto3" json:"initial_cluster_version,omitempty"`
 	// [Output only] The current software version of the master endpoint.
 	CurrentMasterVersion string `protobuf:"bytes,104,opt,name=current_master_version,json=currentMasterVersion,proto3" json:"current_master_version,omitempty"`
-	// [Output only] The current version of the node software components.
+	// [Output only] Deprecated, use
+	// [NodePool.version](/kubernetes-engine/docs/reference/rest/v1beta1/projects.zones.clusters.nodePool)
+	// instead. The current version of the node software components.
 	// If they are currently at multiple versions because they're in the process
 	// of being upgraded, this reflects the minimum version of all nodes.
-	CurrentNodeVersion string `protobuf:"bytes,105,opt,name=current_node_version,json=currentNodeVersion,proto3" json:"current_node_version,omitempty"`
+	CurrentNodeVersion string `protobuf:"bytes,105,opt,name=current_node_version,json=currentNodeVersion,proto3" json:"current_node_version,omitempty"` // Deprecated: Do not use.
 	// [Output only] The time the cluster was created, in
 	// [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
 	CreateTime string `protobuf:"bytes,106,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
@@ -1508,12 +2097,11 @@ type Cluster struct {
 	// notation (e.g. `1.2.3.4/29`). Service addresses are
 	// typically put in the last `/16` from the container CIDR.
 	ServicesIpv4Cidr string `protobuf:"bytes,110,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr,proto3" json:"services_ipv4_cidr,omitempty"`
-	// [Output only] The resource URLs of [instance
-	// groups](/compute/docs/instance-groups/) associated with this
-	// cluster.
-	InstanceGroupUrls []string `protobuf:"bytes,111,rep,name=instance_group_urls,json=instanceGroupUrls,proto3" json:"instance_group_urls,omitempty"`
-	// [Output only] The number of nodes currently in the cluster.
-	CurrentNodeCount int32 `protobuf:"varint,112,opt,name=current_node_count,json=currentNodeCount,proto3" json:"current_node_count,omitempty"`
+	// Deprecated. Use node_pools.instance_group_urls.
+	InstanceGroupUrls []string `protobuf:"bytes,111,rep,name=instance_group_urls,json=instanceGroupUrls,proto3" json:"instance_group_urls,omitempty"` // Deprecated: Do not use.
+	// [Output only]  The number of nodes currently in the cluster. Deprecated.
+	// Call Kubernetes API directly to retrieve node information.
+	CurrentNodeCount int32 `protobuf:"varint,112,opt,name=current_node_count,json=currentNodeCount,proto3" json:"current_node_count,omitempty"` // Deprecated: Do not use.
 	// [Output only] The time the cluster will be automatically
 	// deleted in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
 	ExpireTime string `protobuf:"bytes,113,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"`
@@ -1521,17 +2109,25 @@ type Cluster struct {
 	// [zone](/compute/docs/regions-zones/regions-zones#available) or
 	// [region](/compute/docs/regions-zones/regions-zones#available) in which
 	// the cluster resides.
-	Location             string   `protobuf:"bytes,114,opt,name=location,proto3" json:"location,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	Location string `protobuf:"bytes,114,opt,name=location,proto3" json:"location,omitempty"`
+	// Enable the ability to use Cloud TPUs in this cluster.
+	EnableTpu bool `protobuf:"varint,115,opt,name=enable_tpu,json=enableTpu,proto3" json:"enable_tpu,omitempty"`
+	// [Output only] The IP address range of the Cloud TPUs in this cluster, in
+	// [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
+	// notation (e.g. `1.2.3.4/29`).
+	TpuIpv4CidrBlock string `protobuf:"bytes,116,opt,name=tpu_ipv4_cidr_block,json=tpuIpv4CidrBlock,proto3" json:"tpu_ipv4_cidr_block,omitempty"`
+	// Which conditions caused the current cluster state.
+	Conditions           []*StatusCondition `protobuf:"bytes,118,rep,name=conditions,proto3" json:"conditions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
 }
 
 func (m *Cluster) Reset()         { *m = Cluster{} }
 func (m *Cluster) String() string { return proto.CompactTextString(m) }
 func (*Cluster) ProtoMessage()    {}
 func (*Cluster) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{13}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{18}
 }
 func (m *Cluster) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Cluster.Unmarshal(m, b)
@@ -1649,6 +2245,27 @@ func (m *Cluster) GetEnableKubernetesAlpha() bool {
 	return false
 }
 
+func (m *Cluster) GetResourceLabels() map[string]string {
+	if m != nil {
+		return m.ResourceLabels
+	}
+	return nil
+}
+
+func (m *Cluster) GetLabelFingerprint() string {
+	if m != nil {
+		return m.LabelFingerprint
+	}
+	return ""
+}
+
+func (m *Cluster) GetLegacyAbac() *LegacyAbac {
+	if m != nil {
+		return m.LegacyAbac
+	}
+	return nil
+}
+
 func (m *Cluster) GetNetworkPolicy() *NetworkPolicy {
 	if m != nil {
 		return m.NetworkPolicy
@@ -1677,20 +2294,86 @@ func (m *Cluster) GetMaintenancePolicy() *MaintenancePolicy {
 	return nil
 }
 
-func (m *Cluster) GetPodSecurityPolicyConfig() *PodSecurityPolicyConfig {
+func (m *Cluster) GetBinaryAuthorization() *BinaryAuthorization {
 	if m != nil {
-		return m.PodSecurityPolicyConfig
+		return m.BinaryAuthorization
 	}
 	return nil
 }
 
-func (m *Cluster) GetSelfLink() string {
+func (m *Cluster) GetPodSecurityPolicyConfig() *PodSecurityPolicyConfig {
+	if m != nil {
+		return m.PodSecurityPolicyConfig
+	}
+	return nil
+}
+
+func (m *Cluster) GetAutoscaling() *ClusterAutoscaling {
+	if m != nil {
+		return m.Autoscaling
+	}
+	return nil
+}
+
+func (m *Cluster) GetNetworkConfig() *NetworkConfig {
+	if m != nil {
+		return m.NetworkConfig
+	}
+	return nil
+}
+
+// Deprecated: Do not use.
+func (m *Cluster) GetPrivateCluster() bool {
+	if m != nil {
+		return m.PrivateCluster
+	}
+	return false
+}
+
+// Deprecated: Do not use.
+func (m *Cluster) GetMasterIpv4CidrBlock() string {
+	if m != nil {
+		return m.MasterIpv4CidrBlock
+	}
+	return ""
+}
+
+func (m *Cluster) GetDefaultMaxPodsConstraint() *MaxPodsConstraint {
+	if m != nil {
+		return m.DefaultMaxPodsConstraint
+	}
+	return nil
+}
+
+func (m *Cluster) GetResourceUsageExportConfig() *ResourceUsageExportConfig {
+	if m != nil {
+		return m.ResourceUsageExportConfig
+	}
+	return nil
+}
+
+func (m *Cluster) GetPrivateClusterConfig() *PrivateClusterConfig {
+	if m != nil {
+		return m.PrivateClusterConfig
+	}
+	return nil
+}
+
+func (m *Cluster) GetVerticalPodAutoscaling() *VerticalPodAutoscaling {
+	if m != nil {
+		return m.VerticalPodAutoscaling
+	}
+	return nil
+}
+
+func (m *Cluster) GetSelfLink() string {
 	if m != nil {
 		return m.SelfLink
 	}
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *Cluster) GetZone() string {
 	if m != nil {
 		return m.Zone
@@ -1719,6 +2402,7 @@ func (m *Cluster) GetCurrentMasterVersion() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *Cluster) GetCurrentNodeVersion() string {
 	if m != nil {
 		return m.CurrentNodeVersion
@@ -1761,6 +2445,7 @@ func (m *Cluster) GetServicesIpv4Cidr() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *Cluster) GetInstanceGroupUrls() []string {
 	if m != nil {
 		return m.InstanceGroupUrls
@@ -1768,6 +2453,7 @@ func (m *Cluster) GetInstanceGroupUrls() []string {
 	return nil
 }
 
+// Deprecated: Do not use.
 func (m *Cluster) GetCurrentNodeCount() int32 {
 	if m != nil {
 		return m.CurrentNodeCount
@@ -1789,17 +2475,48 @@ func (m *Cluster) GetLocation() string {
 	return ""
 }
 
+func (m *Cluster) GetEnableTpu() bool {
+	if m != nil {
+		return m.EnableTpu
+	}
+	return false
+}
+
+func (m *Cluster) GetTpuIpv4CidrBlock() string {
+	if m != nil {
+		return m.TpuIpv4CidrBlock
+	}
+	return ""
+}
+
+func (m *Cluster) GetConditions() []*StatusCondition {
+	if m != nil {
+		return m.Conditions
+	}
+	return nil
+}
+
 // ClusterUpdate describes an update to the cluster. Exactly one update can
 // be applied to a cluster with each request, so at most one field can be
 // provided.
 type ClusterUpdate struct {
 	// The Kubernetes version to change the nodes to (typically an
-	// upgrade). Use `-` to upgrade to the latest version supported by
-	// the server.
+	// upgrade).
+	//
+	// Users may specify either explicit versions offered by
+	// Kubernetes Engine or version aliases, which have the following behavior:
+	//
+	// - "latest": picks the highest valid Kubernetes version
+	// - "1.X": picks the highest valid patch+gke.N patch in the 1.X version
+	// - "1.X.Y": picks the highest valid gke.N patch in the 1.X.Y version
+	// - "1.X.Y-gke.N": picks an explicit Kubernetes version
+	// - "-": picks the Kubernetes master version
 	DesiredNodeVersion string `protobuf:"bytes,4,opt,name=desired_node_version,json=desiredNodeVersion,proto3" json:"desired_node_version,omitempty"`
 	// The monitoring service the cluster should use to write metrics.
 	// Currently available options:
 	//
+	// * "monitoring.googleapis.com/kubernetes" - the Google Cloud Monitoring
+	// service with Kubernetes-native resource model in Stackdriver
 	// * "monitoring.googleapis.com" - the Google Cloud Monitoring service
 	// * "none" - no metrics will be exported from the cluster
 	DesiredMonitoringService string `protobuf:"bytes,5,opt,name=desired_monitoring_service,json=desiredMonitoringService,proto3" json:"desired_monitoring_service,omitempty"`
@@ -1819,7 +2536,7 @@ type ClusterUpdate struct {
 	// the change applies to that single node pool.
 	DesiredNodePoolAutoscaling *NodePoolAutoscaling `protobuf:"bytes,9,opt,name=desired_node_pool_autoscaling,json=desiredNodePoolAutoscaling,proto3" json:"desired_node_pool_autoscaling,omitempty"`
 	// The desired list of Google Compute Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's nodes
+	// [zones](/compute/docs/zones#available) in which the cluster's nodes
 	// should be located. Changing the locations a cluster is in will result
 	// in nodes being either created or removed from the cluster, depending on
 	// whether locations are being added or removed.
@@ -1830,9 +2547,33 @@ type ClusterUpdate struct {
 	DesiredMasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,12,opt,name=desired_master_authorized_networks_config,json=desiredMasterAuthorizedNetworksConfig,proto3" json:"desired_master_authorized_networks_config,omitempty"`
 	// The desired configuration options for the PodSecurityPolicy feature.
 	DesiredPodSecurityPolicyConfig *PodSecurityPolicyConfig `protobuf:"bytes,14,opt,name=desired_pod_security_policy_config,json=desiredPodSecurityPolicyConfig,proto3" json:"desired_pod_security_policy_config,omitempty"`
+	// Cluster-level autoscaling configuration.
+	DesiredClusterAutoscaling *ClusterAutoscaling `protobuf:"bytes,15,opt,name=desired_cluster_autoscaling,json=desiredClusterAutoscaling,proto3" json:"desired_cluster_autoscaling,omitempty"`
+	// The desired configuration options for the Binary Authorization feature.
+	DesiredBinaryAuthorization *BinaryAuthorization `protobuf:"bytes,16,opt,name=desired_binary_authorization,json=desiredBinaryAuthorization,proto3" json:"desired_binary_authorization,omitempty"`
+	// The logging service the cluster should use to write metrics.
+	// Currently available options:
+	//
+	// * "logging.googleapis.com/kubernetes" - the Google Cloud Logging
+	// service with Kubernetes-native resource model in Stackdriver
+	// * "logging.googleapis.com" - the Google Cloud Logging service
+	// * "none" - no logs will be exported from the cluster
+	DesiredLoggingService string `protobuf:"bytes,19,opt,name=desired_logging_service,json=desiredLoggingService,proto3" json:"desired_logging_service,omitempty"`
+	// The desired configuration for exporting resource usage.
+	DesiredResourceUsageExportConfig *ResourceUsageExportConfig `protobuf:"bytes,21,opt,name=desired_resource_usage_export_config,json=desiredResourceUsageExportConfig,proto3" json:"desired_resource_usage_export_config,omitempty"`
+	// Cluster-level Vertical Pod Autoscaling configuration.
+	DesiredVerticalPodAutoscaling *VerticalPodAutoscaling `protobuf:"bytes,22,opt,name=desired_vertical_pod_autoscaling,json=desiredVerticalPodAutoscaling,proto3" json:"desired_vertical_pod_autoscaling,omitempty"`
 	// The Kubernetes version to change the master to. The only valid value is the
-	// latest supported version. Use "-" to have the server automatically select
-	// the latest version.
+	// latest supported version.
+	//
+	// Users may specify either explicit versions offered by
+	// Kubernetes Engine or version aliases, which have the following behavior:
+	//
+	// - "latest": picks the highest valid Kubernetes version
+	// - "1.X": picks the highest valid patch+gke.N patch in the 1.X version
+	// - "1.X.Y": picks the highest valid gke.N patch in the 1.X.Y version
+	// - "1.X.Y-gke.N": picks an explicit Kubernetes version
+	// - "-": picks the default Kubernetes version
 	DesiredMasterVersion string   `protobuf:"bytes,100,opt,name=desired_master_version,json=desiredMasterVersion,proto3" json:"desired_master_version,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -1843,7 +2584,7 @@ func (m *ClusterUpdate) Reset()         { *m = ClusterUpdate{} }
 func (m *ClusterUpdate) String() string { return proto.CompactTextString(m) }
 func (*ClusterUpdate) ProtoMessage()    {}
 func (*ClusterUpdate) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{14}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{19}
 }
 func (m *ClusterUpdate) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ClusterUpdate.Unmarshal(m, b)
@@ -1926,6 +2667,41 @@ func (m *ClusterUpdate) GetDesiredPodSecurityPolicyConfig() *PodSecurityPolicyCo
 	return nil
 }
 
+func (m *ClusterUpdate) GetDesiredClusterAutoscaling() *ClusterAutoscaling {
+	if m != nil {
+		return m.DesiredClusterAutoscaling
+	}
+	return nil
+}
+
+func (m *ClusterUpdate) GetDesiredBinaryAuthorization() *BinaryAuthorization {
+	if m != nil {
+		return m.DesiredBinaryAuthorization
+	}
+	return nil
+}
+
+func (m *ClusterUpdate) GetDesiredLoggingService() string {
+	if m != nil {
+		return m.DesiredLoggingService
+	}
+	return ""
+}
+
+func (m *ClusterUpdate) GetDesiredResourceUsageExportConfig() *ResourceUsageExportConfig {
+	if m != nil {
+		return m.DesiredResourceUsageExportConfig
+	}
+	return nil
+}
+
+func (m *ClusterUpdate) GetDesiredVerticalPodAutoscaling() *VerticalPodAutoscaling {
+	if m != nil {
+		return m.DesiredVerticalPodAutoscaling
+	}
+	return nil
+}
+
 func (m *ClusterUpdate) GetDesiredMasterVersion() string {
 	if m != nil {
 		return m.DesiredMasterVersion
@@ -1942,7 +2718,7 @@ type Operation struct {
 	// [zone](/compute/docs/zones#available) in which the operation
 	// is taking place.
 	// This field is deprecated, use location instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
 	// The operation type.
 	OperationType Operation_Type `protobuf:"varint,3,opt,name=operation_type,json=operationType,proto3,enum=google.container.v1beta1.Operation_Type" json:"operation_type,omitempty"`
 	// The current status of the operation.
@@ -1965,17 +2741,23 @@ type Operation struct {
 	StartTime string `protobuf:"bytes,10,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
 	// [Output only] The time the operation completed, in
 	// [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
-	EndTime              string   `protobuf:"bytes,11,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	EndTime string `protobuf:"bytes,11,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
+	// [Output only] Progress information for an operation.
+	Progress *OperationProgress `protobuf:"bytes,12,opt,name=progress,proto3" json:"progress,omitempty"`
+	// Which conditions caused the current cluster state.
+	ClusterConditions []*StatusCondition `protobuf:"bytes,13,rep,name=cluster_conditions,json=clusterConditions,proto3" json:"cluster_conditions,omitempty"`
+	// Which conditions caused the current node pool state.
+	NodepoolConditions   []*StatusCondition `protobuf:"bytes,14,rep,name=nodepool_conditions,json=nodepoolConditions,proto3" json:"nodepool_conditions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
 }
 
 func (m *Operation) Reset()         { *m = Operation{} }
 func (m *Operation) String() string { return proto.CompactTextString(m) }
 func (*Operation) ProtoMessage()    {}
 func (*Operation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{15}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{20}
 }
 func (m *Operation) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Operation.Unmarshal(m, b)
@@ -2002,6 +2784,7 @@ func (m *Operation) GetName() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *Operation) GetZone() string {
 	if m != nil {
 		return m.Zone
@@ -2072,17 +2855,289 @@ func (m *Operation) GetEndTime() string {
 	return ""
 }
 
+func (m *Operation) GetProgress() *OperationProgress {
+	if m != nil {
+		return m.Progress
+	}
+	return nil
+}
+
+func (m *Operation) GetClusterConditions() []*StatusCondition {
+	if m != nil {
+		return m.ClusterConditions
+	}
+	return nil
+}
+
+func (m *Operation) GetNodepoolConditions() []*StatusCondition {
+	if m != nil {
+		return m.NodepoolConditions
+	}
+	return nil
+}
+
+// Information about operation (or operation stage) progress.
+type OperationProgress struct {
+	// A non-parameterized string describing an operation stage.
+	// Unset for single-stage operations.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Status of an operation stage.
+	// Unset for single-stage operations.
+	Status Operation_Status `protobuf:"varint,2,opt,name=status,proto3,enum=google.container.v1beta1.Operation_Status" json:"status,omitempty"`
+	// Progress metric bundle, for example:
+	//   metrics: [{name: "nodes done",     int_value: 15},
+	//             {name: "nodes total",    int_value: 32}]
+	// or
+	//   metrics: [{name: "progress",       double_value: 0.56},
+	//             {name: "progress scale", double_value: 1.0}]
+	Metrics []*OperationProgress_Metric `protobuf:"bytes,3,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	// Substages of an operation or a stage.
+	Stages               []*OperationProgress `protobuf:"bytes,4,rep,name=stages,proto3" json:"stages,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *OperationProgress) Reset()         { *m = OperationProgress{} }
+func (m *OperationProgress) String() string { return proto.CompactTextString(m) }
+func (*OperationProgress) ProtoMessage()    {}
+func (*OperationProgress) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{21}
+}
+func (m *OperationProgress) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperationProgress.Unmarshal(m, b)
+}
+func (m *OperationProgress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperationProgress.Marshal(b, m, deterministic)
+}
+func (dst *OperationProgress) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperationProgress.Merge(dst, src)
+}
+func (m *OperationProgress) XXX_Size() int {
+	return xxx_messageInfo_OperationProgress.Size(m)
+}
+func (m *OperationProgress) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperationProgress.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperationProgress proto.InternalMessageInfo
+
+func (m *OperationProgress) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *OperationProgress) GetStatus() Operation_Status {
+	if m != nil {
+		return m.Status
+	}
+	return Operation_STATUS_UNSPECIFIED
+}
+
+func (m *OperationProgress) GetMetrics() []*OperationProgress_Metric {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+func (m *OperationProgress) GetStages() []*OperationProgress {
+	if m != nil {
+		return m.Stages
+	}
+	return nil
+}
+
+// Progress metric is (string, int|float|string) pair.
+type OperationProgress_Metric struct {
+	// Metric name, required.
+	// e.g., "nodes total", "percent done"
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Strictly one of the values is required.
+	//
+	// Types that are valid to be assigned to Value:
+	//	*OperationProgress_Metric_IntValue
+	//	*OperationProgress_Metric_DoubleValue
+	//	*OperationProgress_Metric_StringValue
+	Value                isOperationProgress_Metric_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
+	XXX_unrecognized     []byte                           `json:"-"`
+	XXX_sizecache        int32                            `json:"-"`
+}
+
+func (m *OperationProgress_Metric) Reset()         { *m = OperationProgress_Metric{} }
+func (m *OperationProgress_Metric) String() string { return proto.CompactTextString(m) }
+func (*OperationProgress_Metric) ProtoMessage()    {}
+func (*OperationProgress_Metric) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{21, 0}
+}
+func (m *OperationProgress_Metric) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperationProgress_Metric.Unmarshal(m, b)
+}
+func (m *OperationProgress_Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperationProgress_Metric.Marshal(b, m, deterministic)
+}
+func (dst *OperationProgress_Metric) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperationProgress_Metric.Merge(dst, src)
+}
+func (m *OperationProgress_Metric) XXX_Size() int {
+	return xxx_messageInfo_OperationProgress_Metric.Size(m)
+}
+func (m *OperationProgress_Metric) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperationProgress_Metric.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperationProgress_Metric proto.InternalMessageInfo
+
+func (m *OperationProgress_Metric) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+type isOperationProgress_Metric_Value interface {
+	isOperationProgress_Metric_Value()
+}
+
+type OperationProgress_Metric_IntValue struct {
+	IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"`
+}
+
+type OperationProgress_Metric_DoubleValue struct {
+	DoubleValue float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue,proto3,oneof"`
+}
+
+type OperationProgress_Metric_StringValue struct {
+	StringValue string `protobuf:"bytes,4,opt,name=string_value,json=stringValue,proto3,oneof"`
+}
+
+func (*OperationProgress_Metric_IntValue) isOperationProgress_Metric_Value() {}
+
+func (*OperationProgress_Metric_DoubleValue) isOperationProgress_Metric_Value() {}
+
+func (*OperationProgress_Metric_StringValue) isOperationProgress_Metric_Value() {}
+
+func (m *OperationProgress_Metric) GetValue() isOperationProgress_Metric_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *OperationProgress_Metric) GetIntValue() int64 {
+	if x, ok := m.GetValue().(*OperationProgress_Metric_IntValue); ok {
+		return x.IntValue
+	}
+	return 0
+}
+
+func (m *OperationProgress_Metric) GetDoubleValue() float64 {
+	if x, ok := m.GetValue().(*OperationProgress_Metric_DoubleValue); ok {
+		return x.DoubleValue
+	}
+	return 0
+}
+
+func (m *OperationProgress_Metric) GetStringValue() string {
+	if x, ok := m.GetValue().(*OperationProgress_Metric_StringValue); ok {
+		return x.StringValue
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*OperationProgress_Metric) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OperationProgress_Metric_OneofMarshaler, _OperationProgress_Metric_OneofUnmarshaler, _OperationProgress_Metric_OneofSizer, []interface{}{
+		(*OperationProgress_Metric_IntValue)(nil),
+		(*OperationProgress_Metric_DoubleValue)(nil),
+		(*OperationProgress_Metric_StringValue)(nil),
+	}
+}
+
+func _OperationProgress_Metric_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OperationProgress_Metric)
+	// value
+	switch x := m.Value.(type) {
+	case *OperationProgress_Metric_IntValue:
+		b.EncodeVarint(2<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.IntValue))
+	case *OperationProgress_Metric_DoubleValue:
+		b.EncodeVarint(3<<3 | proto.WireFixed64)
+		b.EncodeFixed64(math.Float64bits(x.DoubleValue))
+	case *OperationProgress_Metric_StringValue:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.StringValue)
+	case nil:
+	default:
+		return fmt.Errorf("OperationProgress_Metric.Value has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OperationProgress_Metric_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OperationProgress_Metric)
+	switch tag {
+	case 2: // value.int_value
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OperationProgress_Metric_IntValue{int64(x)}
+		return true, err
+	case 3: // value.double_value
+		if wire != proto.WireFixed64 {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeFixed64()
+		m.Value = &OperationProgress_Metric_DoubleValue{math.Float64frombits(x)}
+		return true, err
+	case 4: // value.string_value
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Value = &OperationProgress_Metric_StringValue{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OperationProgress_Metric_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OperationProgress_Metric)
+	// value
+	switch x := m.Value.(type) {
+	case *OperationProgress_Metric_IntValue:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.IntValue))
+	case *OperationProgress_Metric_DoubleValue:
+		n += 1 // tag and wire
+		n += 8
+	case *OperationProgress_Metric_StringValue:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.StringValue)))
+		n += len(x.StringValue)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
 // CreateClusterRequest creates a cluster.
 type CreateClusterRequest struct {
-	// The Google Developers Console [project ID or project
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use parent instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+	// This field has been deprecated and replaced by the parent field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use parent instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
+	// This field has been deprecated and replaced by the parent field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
 	// A [cluster
 	// resource](/container-engine/reference/rest/v1beta1/projects.zones.clusters)
 	Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster,proto3" json:"cluster,omitempty"`
@@ -2098,7 +3153,7 @@ func (m *CreateClusterRequest) Reset()         { *m = CreateClusterRequest{} }
 func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) }
 func (*CreateClusterRequest) ProtoMessage()    {}
 func (*CreateClusterRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{16}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{22}
 }
 func (m *CreateClusterRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateClusterRequest.Unmarshal(m, b)
@@ -2118,6 +3173,7 @@ func (m *CreateClusterRequest) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_CreateClusterRequest proto.InternalMessageInfo
 
+// Deprecated: Do not use.
 func (m *CreateClusterRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
@@ -2125,6 +3181,7 @@ func (m *CreateClusterRequest) GetProjectId() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *CreateClusterRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
@@ -2148,18 +3205,18 @@ func (m *CreateClusterRequest) GetParent() string {
 
 // GetClusterRequest gets the settings of a cluster.
 type GetClusterRequest struct {
-	// The Google Developers Console [project ID or project
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to retrieve.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to retrieve.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
 	// The name (project, location, cluster) of the cluster to retrieve.
 	// Specified in the format 'projects/*/locations/*/clusters/*'.
 	Name                 string   `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
@@ -2172,7 +3229,7 @@ func (m *GetClusterRequest) Reset()         { *m = GetClusterRequest{} }
 func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) }
 func (*GetClusterRequest) ProtoMessage()    {}
 func (*GetClusterRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{17}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{23}
 }
 func (m *GetClusterRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetClusterRequest.Unmarshal(m, b)
@@ -2192,6 +3249,7 @@ func (m *GetClusterRequest) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_GetClusterRequest proto.InternalMessageInfo
 
+// Deprecated: Do not use.
 func (m *GetClusterRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
@@ -2199,6 +3257,7 @@ func (m *GetClusterRequest) GetProjectId() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *GetClusterRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
@@ -2206,6 +3265,7 @@ func (m *GetClusterRequest) GetZone() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *GetClusterRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
@@ -2222,18 +3282,18 @@ func (m *GetClusterRequest) GetName() string {
 
 // UpdateClusterRequest updates the settings of a cluster.
 type UpdateClusterRequest struct {
-	// The Google Developers Console [project ID or project
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to upgrade.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
 	// A description of the update.
 	Update *ClusterUpdate `protobuf:"bytes,4,opt,name=update,proto3" json:"update,omitempty"`
 	// The name (project, location, cluster) of the cluster to update.
@@ -2248,7 +3308,7 @@ func (m *UpdateClusterRequest) Reset()         { *m = UpdateClusterRequest{} }
 func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateClusterRequest) ProtoMessage()    {}
 func (*UpdateClusterRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{18}
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{24}
 }
 func (m *UpdateClusterRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UpdateClusterRequest.Unmarshal(m, b)
@@ -2268,6 +3328,7 @@ func (m *UpdateClusterRequest) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_UpdateClusterRequest proto.InternalMessageInfo
 
+// Deprecated: Do not use.
 func (m *UpdateClusterRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
@@ -2275,6 +3336,7 @@ func (m *UpdateClusterRequest) GetProjectId() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *UpdateClusterRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
@@ -2282,6 +3344,7 @@ func (m *UpdateClusterRequest) GetZone() string {
 	return ""
 }
 
+// Deprecated: Do not use.
 func (m *UpdateClusterRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
@@ -2303,2291 +3366,4012 @@ func (m *UpdateClusterRequest) GetName() string {
 	return ""
 }
 
-// SetMasterAuthRequest updates the admin password of a cluster.
-type SetMasterAuthRequest struct {
-	// The Google Developers Console [project ID or project
+// SetNodePoolVersionRequest updates the version of a node pool.
+type UpdateNodePoolRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to upgrade.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The exact form of action to be taken on the master auth.
-	Action SetMasterAuthRequest_Action `protobuf:"varint,4,opt,name=action,proto3,enum=google.container.v1beta1.SetMasterAuthRequest_Action" json:"action,omitempty"`
-	// A description of the update.
-	Update *MasterAuth `protobuf:"bytes,5,opt,name=update,proto3" json:"update,omitempty"`
-	// The name (project, location, cluster) of the cluster to set auth.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the node pool to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"` // Deprecated: Do not use.
+	// The Kubernetes version to change the nodes to (typically an
+	// upgrade).
+	//
+	// Users may specify either explicit versions offered by Kubernetes Engine or
+	// version aliases, which have the following behavior:
+	//
+	// - "latest": picks the highest valid Kubernetes version
+	// - "1.X": picks the highest valid patch+gke.N patch in the 1.X version
+	// - "1.X.Y": picks the highest valid gke.N patch in the 1.X.Y version
+	// - "1.X.Y-gke.N": picks an explicit Kubernetes version
+	// - "-": picks the Kubernetes master version
+	NodeVersion string `protobuf:"bytes,5,opt,name=node_version,json=nodeVersion,proto3" json:"node_version,omitempty"`
+	// The desired image type for the node pool.
+	ImageType string `protobuf:"bytes,6,opt,name=image_type,json=imageType,proto3" json:"image_type,omitempty"`
+	// The name (project, location, cluster, node pool) of the node pool to
+	// update. Specified in the format
+	// 'projects/*/locations/*/clusters/*/nodePools/*'.
+	Name                 string   `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SetMasterAuthRequest) Reset()         { *m = SetMasterAuthRequest{} }
-func (m *SetMasterAuthRequest) String() string { return proto.CompactTextString(m) }
-func (*SetMasterAuthRequest) ProtoMessage()    {}
-func (*SetMasterAuthRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{19}
+func (m *UpdateNodePoolRequest) Reset()         { *m = UpdateNodePoolRequest{} }
+func (m *UpdateNodePoolRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateNodePoolRequest) ProtoMessage()    {}
+func (*UpdateNodePoolRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{25}
 }
-func (m *SetMasterAuthRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SetMasterAuthRequest.Unmarshal(m, b)
+func (m *UpdateNodePoolRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateNodePoolRequest.Unmarshal(m, b)
 }
-func (m *SetMasterAuthRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SetMasterAuthRequest.Marshal(b, m, deterministic)
+func (m *UpdateNodePoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateNodePoolRequest.Marshal(b, m, deterministic)
 }
-func (dst *SetMasterAuthRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SetMasterAuthRequest.Merge(dst, src)
+func (dst *UpdateNodePoolRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateNodePoolRequest.Merge(dst, src)
 }
-func (m *SetMasterAuthRequest) XXX_Size() int {
-	return xxx_messageInfo_SetMasterAuthRequest.Size(m)
+func (m *UpdateNodePoolRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateNodePoolRequest.Size(m)
 }
-func (m *SetMasterAuthRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_SetMasterAuthRequest.DiscardUnknown(m)
+func (m *UpdateNodePoolRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateNodePoolRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_SetMasterAuthRequest proto.InternalMessageInfo
+var xxx_messageInfo_UpdateNodePoolRequest proto.InternalMessageInfo
 
-func (m *SetMasterAuthRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *UpdateNodePoolRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *SetMasterAuthRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *UpdateNodePoolRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *SetMasterAuthRequest) GetClusterId() string {
+// Deprecated: Do not use.
+func (m *UpdateNodePoolRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *SetMasterAuthRequest) GetAction() SetMasterAuthRequest_Action {
+// Deprecated: Do not use.
+func (m *UpdateNodePoolRequest) GetNodePoolId() string {
 	if m != nil {
-		return m.Action
+		return m.NodePoolId
 	}
-	return SetMasterAuthRequest_UNKNOWN
+	return ""
 }
 
-func (m *SetMasterAuthRequest) GetUpdate() *MasterAuth {
+func (m *UpdateNodePoolRequest) GetNodeVersion() string {
 	if m != nil {
-		return m.Update
+		return m.NodeVersion
 	}
-	return nil
+	return ""
 }
 
-func (m *SetMasterAuthRequest) GetName() string {
+func (m *UpdateNodePoolRequest) GetImageType() string {
+	if m != nil {
+		return m.ImageType
+	}
+	return ""
+}
+
+func (m *UpdateNodePoolRequest) GetName() string {
 	if m != nil {
 		return m.Name
 	}
 	return ""
 }
 
-// DeleteClusterRequest deletes a cluster.
-type DeleteClusterRequest struct {
-	// The Google Developers Console [project ID or project
+// SetNodePoolAutoscalingRequest sets the autoscaler settings of a node pool.
+type SetNodePoolAutoscalingRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to delete.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The name (project, location, cluster) of the cluster to delete.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the node pool to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"` // Deprecated: Do not use.
+	// Autoscaling configuration for the node pool.
+	Autoscaling *NodePoolAutoscaling `protobuf:"bytes,5,opt,name=autoscaling,proto3" json:"autoscaling,omitempty"`
+	// The name (project, location, cluster, node pool) of the node pool to set
+	// autoscaler settings. Specified in the format
+	// 'projects/*/locations/*/clusters/*/nodePools/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *DeleteClusterRequest) Reset()         { *m = DeleteClusterRequest{} }
-func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) }
-func (*DeleteClusterRequest) ProtoMessage()    {}
-func (*DeleteClusterRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{20}
+func (m *SetNodePoolAutoscalingRequest) Reset()         { *m = SetNodePoolAutoscalingRequest{} }
+func (m *SetNodePoolAutoscalingRequest) String() string { return proto.CompactTextString(m) }
+func (*SetNodePoolAutoscalingRequest) ProtoMessage()    {}
+func (*SetNodePoolAutoscalingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{26}
 }
-func (m *DeleteClusterRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_DeleteClusterRequest.Unmarshal(m, b)
+func (m *SetNodePoolAutoscalingRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetNodePoolAutoscalingRequest.Unmarshal(m, b)
 }
-func (m *DeleteClusterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_DeleteClusterRequest.Marshal(b, m, deterministic)
+func (m *SetNodePoolAutoscalingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetNodePoolAutoscalingRequest.Marshal(b, m, deterministic)
 }
-func (dst *DeleteClusterRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_DeleteClusterRequest.Merge(dst, src)
+func (dst *SetNodePoolAutoscalingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetNodePoolAutoscalingRequest.Merge(dst, src)
 }
-func (m *DeleteClusterRequest) XXX_Size() int {
-	return xxx_messageInfo_DeleteClusterRequest.Size(m)
+func (m *SetNodePoolAutoscalingRequest) XXX_Size() int {
+	return xxx_messageInfo_SetNodePoolAutoscalingRequest.Size(m)
 }
-func (m *DeleteClusterRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_DeleteClusterRequest.DiscardUnknown(m)
+func (m *SetNodePoolAutoscalingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetNodePoolAutoscalingRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_DeleteClusterRequest proto.InternalMessageInfo
+var xxx_messageInfo_SetNodePoolAutoscalingRequest proto.InternalMessageInfo
 
-func (m *DeleteClusterRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *SetNodePoolAutoscalingRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *DeleteClusterRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *SetNodePoolAutoscalingRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *DeleteClusterRequest) GetClusterId() string {
+// Deprecated: Do not use.
+func (m *SetNodePoolAutoscalingRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *DeleteClusterRequest) GetName() string {
+// Deprecated: Do not use.
+func (m *SetNodePoolAutoscalingRequest) GetNodePoolId() string {
+	if m != nil {
+		return m.NodePoolId
+	}
+	return ""
+}
+
+func (m *SetNodePoolAutoscalingRequest) GetAutoscaling() *NodePoolAutoscaling {
+	if m != nil {
+		return m.Autoscaling
+	}
+	return nil
+}
+
+func (m *SetNodePoolAutoscalingRequest) GetName() string {
 	if m != nil {
 		return m.Name
 	}
 	return ""
 }
 
-// ListClustersRequest lists clusters.
-type ListClustersRequest struct {
-	// The Google Developers Console [project ID or project
+// SetLoggingServiceRequest sets the logging service of a cluster.
+type SetLoggingServiceRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use parent instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides, or "-" for all zones.
-	// This field is deprecated, use parent instead.
+	// resides.
+	// This field has been deprecated and replaced by the name field.
 	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The parent (project and location) where the clusters will be listed.
-	// Specified in the format 'projects/*/locations/*'.
-	// Location "-" matches all zones and all regions.
-	Parent               string   `protobuf:"bytes,4,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The logging service the cluster should use to write metrics.
+	// Currently available options:
+	//
+	// * "logging.googleapis.com" - the Google Cloud Logging service
+	// * "none" - no metrics will be exported from the cluster
+	LoggingService string `protobuf:"bytes,4,opt,name=logging_service,json=loggingService,proto3" json:"logging_service,omitempty"`
+	// The name (project, location, cluster) of the cluster to set logging.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListClustersRequest) Reset()         { *m = ListClustersRequest{} }
-func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) }
-func (*ListClustersRequest) ProtoMessage()    {}
-func (*ListClustersRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{21}
+func (m *SetLoggingServiceRequest) Reset()         { *m = SetLoggingServiceRequest{} }
+func (m *SetLoggingServiceRequest) String() string { return proto.CompactTextString(m) }
+func (*SetLoggingServiceRequest) ProtoMessage()    {}
+func (*SetLoggingServiceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{27}
 }
-func (m *ListClustersRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListClustersRequest.Unmarshal(m, b)
+func (m *SetLoggingServiceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetLoggingServiceRequest.Unmarshal(m, b)
 }
-func (m *ListClustersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListClustersRequest.Marshal(b, m, deterministic)
+func (m *SetLoggingServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetLoggingServiceRequest.Marshal(b, m, deterministic)
 }
-func (dst *ListClustersRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListClustersRequest.Merge(dst, src)
+func (dst *SetLoggingServiceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetLoggingServiceRequest.Merge(dst, src)
 }
-func (m *ListClustersRequest) XXX_Size() int {
-	return xxx_messageInfo_ListClustersRequest.Size(m)
+func (m *SetLoggingServiceRequest) XXX_Size() int {
+	return xxx_messageInfo_SetLoggingServiceRequest.Size(m)
 }
-func (m *ListClustersRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListClustersRequest.DiscardUnknown(m)
+func (m *SetLoggingServiceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetLoggingServiceRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_ListClustersRequest proto.InternalMessageInfo
+var xxx_messageInfo_SetLoggingServiceRequest proto.InternalMessageInfo
 
-func (m *ListClustersRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *SetLoggingServiceRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *ListClustersRequest) GetZone() string {
+func (m *SetLoggingServiceRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *ListClustersRequest) GetParent() string {
+// Deprecated: Do not use.
+func (m *SetLoggingServiceRequest) GetClusterId() string {
 	if m != nil {
-		return m.Parent
+		return m.ClusterId
 	}
 	return ""
 }
 
-// ListClustersResponse is the result of ListClustersRequest.
-type ListClustersResponse struct {
-	// A list of clusters in the project in the specified zone, or
-	// across all ones.
-	Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
-	// If any zones are listed here, the list of clusters returned
-	// may be missing those zones.
-	MissingZones         []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones,proto3" json:"missing_zones,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *ListClustersResponse) Reset()         { *m = ListClustersResponse{} }
-func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) }
-func (*ListClustersResponse) ProtoMessage()    {}
-func (*ListClustersResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{22}
-}
-func (m *ListClustersResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListClustersResponse.Unmarshal(m, b)
-}
-func (m *ListClustersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListClustersResponse.Marshal(b, m, deterministic)
-}
-func (dst *ListClustersResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListClustersResponse.Merge(dst, src)
-}
-func (m *ListClustersResponse) XXX_Size() int {
-	return xxx_messageInfo_ListClustersResponse.Size(m)
-}
-func (m *ListClustersResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListClustersResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListClustersResponse proto.InternalMessageInfo
-
-func (m *ListClustersResponse) GetClusters() []*Cluster {
+func (m *SetLoggingServiceRequest) GetLoggingService() string {
 	if m != nil {
-		return m.Clusters
+		return m.LoggingService
 	}
-	return nil
+	return ""
 }
 
-func (m *ListClustersResponse) GetMissingZones() []string {
+func (m *SetLoggingServiceRequest) GetName() string {
 	if m != nil {
-		return m.MissingZones
+		return m.Name
 	}
-	return nil
+	return ""
 }
 
-// GetOperationRequest gets a single operation.
-type GetOperationRequest struct {
-	// The Google Developers Console [project ID or project
+// SetMonitoringServiceRequest sets the monitoring service of a cluster.
+type SetMonitoringServiceRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The server-assigned `name` of the operation.
-	// This field is deprecated, use name instead.
-	OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"`
-	// The name (project, location, operation id) of the operation to get.
-	// Specified in the format 'projects/*/locations/*/operations/*'.
-	Name                 string   `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The monitoring service the cluster should use to write metrics.
+	// Currently available options:
+	//
+	// * "monitoring.googleapis.com" - the Google Cloud Monitoring service
+	// * "none" - no metrics will be exported from the cluster
+	MonitoringService string `protobuf:"bytes,4,opt,name=monitoring_service,json=monitoringService,proto3" json:"monitoring_service,omitempty"`
+	// The name (project, location, cluster) of the cluster to set monitoring.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *GetOperationRequest) Reset()         { *m = GetOperationRequest{} }
-func (m *GetOperationRequest) String() string { return proto.CompactTextString(m) }
-func (*GetOperationRequest) ProtoMessage()    {}
-func (*GetOperationRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{23}
+func (m *SetMonitoringServiceRequest) Reset()         { *m = SetMonitoringServiceRequest{} }
+func (m *SetMonitoringServiceRequest) String() string { return proto.CompactTextString(m) }
+func (*SetMonitoringServiceRequest) ProtoMessage()    {}
+func (*SetMonitoringServiceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{28}
 }
-func (m *GetOperationRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_GetOperationRequest.Unmarshal(m, b)
+func (m *SetMonitoringServiceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetMonitoringServiceRequest.Unmarshal(m, b)
 }
-func (m *GetOperationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_GetOperationRequest.Marshal(b, m, deterministic)
+func (m *SetMonitoringServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetMonitoringServiceRequest.Marshal(b, m, deterministic)
 }
-func (dst *GetOperationRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetOperationRequest.Merge(dst, src)
+func (dst *SetMonitoringServiceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetMonitoringServiceRequest.Merge(dst, src)
 }
-func (m *GetOperationRequest) XXX_Size() int {
-	return xxx_messageInfo_GetOperationRequest.Size(m)
+func (m *SetMonitoringServiceRequest) XXX_Size() int {
+	return xxx_messageInfo_SetMonitoringServiceRequest.Size(m)
 }
-func (m *GetOperationRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_GetOperationRequest.DiscardUnknown(m)
+func (m *SetMonitoringServiceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetMonitoringServiceRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_GetOperationRequest proto.InternalMessageInfo
+var xxx_messageInfo_SetMonitoringServiceRequest proto.InternalMessageInfo
 
-func (m *GetOperationRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *SetMonitoringServiceRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *GetOperationRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *SetMonitoringServiceRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *GetOperationRequest) GetOperationId() string {
+// Deprecated: Do not use.
+func (m *SetMonitoringServiceRequest) GetClusterId() string {
 	if m != nil {
-		return m.OperationId
+		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *GetOperationRequest) GetName() string {
+func (m *SetMonitoringServiceRequest) GetMonitoringService() string {
+	if m != nil {
+		return m.MonitoringService
+	}
+	return ""
+}
+
+func (m *SetMonitoringServiceRequest) GetName() string {
 	if m != nil {
 		return m.Name
 	}
 	return ""
 }
 
-// ListOperationsRequest lists operations.
-type ListOperationsRequest struct {
-	// The Google Developers Console [project ID or project
+// SetAddonsRequest sets the addons associated with the cluster.
+type SetAddonsConfigRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
 	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use parent instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine [zone](/compute/docs/zones#available)
-	// to return operations for, or `-` for all zones.
-	// This field is deprecated, use parent instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The parent (project and location) where the operations will be listed.
-	// Specified in the format 'projects/*/locations/*'.
-	// Location "-" matches all zones and all regions.
-	Parent               string   `protobuf:"bytes,4,opt,name=parent,proto3" json:"parent,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The desired configurations for the various addons available to run in the
+	// cluster.
+	AddonsConfig *AddonsConfig `protobuf:"bytes,4,opt,name=addons_config,json=addonsConfig,proto3" json:"addons_config,omitempty"`
+	// The name (project, location, cluster) of the cluster to set addons.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListOperationsRequest) Reset()         { *m = ListOperationsRequest{} }
-func (m *ListOperationsRequest) String() string { return proto.CompactTextString(m) }
-func (*ListOperationsRequest) ProtoMessage()    {}
-func (*ListOperationsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{24}
+func (m *SetAddonsConfigRequest) Reset()         { *m = SetAddonsConfigRequest{} }
+func (m *SetAddonsConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*SetAddonsConfigRequest) ProtoMessage()    {}
+func (*SetAddonsConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{29}
 }
-func (m *ListOperationsRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListOperationsRequest.Unmarshal(m, b)
+func (m *SetAddonsConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetAddonsConfigRequest.Unmarshal(m, b)
 }
-func (m *ListOperationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListOperationsRequest.Marshal(b, m, deterministic)
+func (m *SetAddonsConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetAddonsConfigRequest.Marshal(b, m, deterministic)
 }
-func (dst *ListOperationsRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOperationsRequest.Merge(dst, src)
+func (dst *SetAddonsConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetAddonsConfigRequest.Merge(dst, src)
 }
-func (m *ListOperationsRequest) XXX_Size() int {
-	return xxx_messageInfo_ListOperationsRequest.Size(m)
+func (m *SetAddonsConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_SetAddonsConfigRequest.Size(m)
 }
-func (m *ListOperationsRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListOperationsRequest.DiscardUnknown(m)
+func (m *SetAddonsConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetAddonsConfigRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_ListOperationsRequest proto.InternalMessageInfo
+var xxx_messageInfo_SetAddonsConfigRequest proto.InternalMessageInfo
 
-func (m *ListOperationsRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *SetAddonsConfigRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *ListOperationsRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *SetAddonsConfigRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *ListOperationsRequest) GetParent() string {
+// Deprecated: Do not use.
+func (m *SetAddonsConfigRequest) GetClusterId() string {
 	if m != nil {
-		return m.Parent
+		return m.ClusterId
 	}
 	return ""
 }
 
-// CancelOperationRequest cancels a single operation.
-type CancelOperationRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
-	// [zone](/compute/docs/zones#available) in which the operation resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The server-assigned `name` of the operation.
-	// This field is deprecated, use name instead.
-	OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"`
-	// The name (project, location, operation id) of the operation to cancel.
-	// Specified in the format 'projects/*/locations/*/operations/*'.
-	Name                 string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+func (m *SetAddonsConfigRequest) GetAddonsConfig() *AddonsConfig {
+	if m != nil {
+		return m.AddonsConfig
+	}
+	return nil
+}
+
+func (m *SetAddonsConfigRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// SetLocationsRequest sets the locations of the cluster.
+type SetLocationsRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The desired list of Google Compute Engine
+	// [zones](/compute/docs/zones#available) in which the cluster's nodes
+	// should be located. Changing the locations a cluster is in will result
+	// in nodes being either created or removed from the cluster, depending on
+	// whether locations are being added or removed.
+	//
+	// This list must always include the cluster's primary zone.
+	Locations []string `protobuf:"bytes,4,rep,name=locations,proto3" json:"locations,omitempty"`
+	// The name (project, location, cluster) of the cluster to set locations.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CancelOperationRequest) Reset()         { *m = CancelOperationRequest{} }
-func (m *CancelOperationRequest) String() string { return proto.CompactTextString(m) }
-func (*CancelOperationRequest) ProtoMessage()    {}
-func (*CancelOperationRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{25}
+func (m *SetLocationsRequest) Reset()         { *m = SetLocationsRequest{} }
+func (m *SetLocationsRequest) String() string { return proto.CompactTextString(m) }
+func (*SetLocationsRequest) ProtoMessage()    {}
+func (*SetLocationsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{30}
 }
-func (m *CancelOperationRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CancelOperationRequest.Unmarshal(m, b)
+func (m *SetLocationsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetLocationsRequest.Unmarshal(m, b)
 }
-func (m *CancelOperationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CancelOperationRequest.Marshal(b, m, deterministic)
+func (m *SetLocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetLocationsRequest.Marshal(b, m, deterministic)
 }
-func (dst *CancelOperationRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CancelOperationRequest.Merge(dst, src)
+func (dst *SetLocationsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetLocationsRequest.Merge(dst, src)
 }
-func (m *CancelOperationRequest) XXX_Size() int {
-	return xxx_messageInfo_CancelOperationRequest.Size(m)
+func (m *SetLocationsRequest) XXX_Size() int {
+	return xxx_messageInfo_SetLocationsRequest.Size(m)
 }
-func (m *CancelOperationRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CancelOperationRequest.DiscardUnknown(m)
+func (m *SetLocationsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetLocationsRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_CancelOperationRequest proto.InternalMessageInfo
+var xxx_messageInfo_SetLocationsRequest proto.InternalMessageInfo
 
-func (m *CancelOperationRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *SetLocationsRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *CancelOperationRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *SetLocationsRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *CancelOperationRequest) GetOperationId() string {
+// Deprecated: Do not use.
+func (m *SetLocationsRequest) GetClusterId() string {
 	if m != nil {
-		return m.OperationId
+		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *CancelOperationRequest) GetName() string {
+func (m *SetLocationsRequest) GetLocations() []string {
+	if m != nil {
+		return m.Locations
+	}
+	return nil
+}
+
+func (m *SetLocationsRequest) GetName() string {
 	if m != nil {
 		return m.Name
 	}
 	return ""
 }
 
-// ListOperationsResponse is the result of ListOperationsRequest.
-type ListOperationsResponse struct {
-	// A list of operations in the project in the specified zone.
-	Operations []*Operation `protobuf:"bytes,1,rep,name=operations,proto3" json:"operations,omitempty"`
-	// If any zones are listed here, the list of operations returned
-	// may be missing the operations from those zones.
-	MissingZones         []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones,proto3" json:"missing_zones,omitempty"`
+// UpdateMasterRequest updates the master of the cluster.
+type UpdateMasterRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The Kubernetes version to change the master to.
+	//
+	// Users may specify either explicit versions offered by
+	// Kubernetes Engine or version aliases, which have the following behavior:
+	//
+	// - "latest": picks the highest valid Kubernetes version
+	// - "1.X": picks the highest valid patch+gke.N patch in the 1.X version
+	// - "1.X.Y": picks the highest valid gke.N patch in the 1.X.Y version
+	// - "1.X.Y-gke.N": picks an explicit Kubernetes version
+	// - "-": picks the default Kubernetes version
+	MasterVersion string `protobuf:"bytes,4,opt,name=master_version,json=masterVersion,proto3" json:"master_version,omitempty"`
+	// The name (project, location, cluster) of the cluster to update.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListOperationsResponse) Reset()         { *m = ListOperationsResponse{} }
-func (m *ListOperationsResponse) String() string { return proto.CompactTextString(m) }
-func (*ListOperationsResponse) ProtoMessage()    {}
-func (*ListOperationsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{26}
+func (m *UpdateMasterRequest) Reset()         { *m = UpdateMasterRequest{} }
+func (m *UpdateMasterRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateMasterRequest) ProtoMessage()    {}
+func (*UpdateMasterRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{31}
 }
-func (m *ListOperationsResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListOperationsResponse.Unmarshal(m, b)
+func (m *UpdateMasterRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateMasterRequest.Unmarshal(m, b)
 }
-func (m *ListOperationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListOperationsResponse.Marshal(b, m, deterministic)
+func (m *UpdateMasterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateMasterRequest.Marshal(b, m, deterministic)
 }
-func (dst *ListOperationsResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOperationsResponse.Merge(dst, src)
+func (dst *UpdateMasterRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateMasterRequest.Merge(dst, src)
 }
-func (m *ListOperationsResponse) XXX_Size() int {
-	return xxx_messageInfo_ListOperationsResponse.Size(m)
+func (m *UpdateMasterRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateMasterRequest.Size(m)
 }
-func (m *ListOperationsResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListOperationsResponse.DiscardUnknown(m)
+func (m *UpdateMasterRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateMasterRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_ListOperationsResponse proto.InternalMessageInfo
+var xxx_messageInfo_UpdateMasterRequest proto.InternalMessageInfo
 
-func (m *ListOperationsResponse) GetOperations() []*Operation {
+// Deprecated: Do not use.
+func (m *UpdateMasterRequest) GetProjectId() string {
 	if m != nil {
-		return m.Operations
+		return m.ProjectId
 	}
-	return nil
+	return ""
 }
 
-func (m *ListOperationsResponse) GetMissingZones() []string {
+// Deprecated: Do not use.
+func (m *UpdateMasterRequest) GetZone() string {
 	if m != nil {
-		return m.MissingZones
+		return m.Zone
 	}
-	return nil
-}
-
-// Gets the current Container Engine service configuration.
-type GetServerConfigRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine [zone](/compute/docs/zones#available)
-	// to return operations for.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name (project and location) of the server config to get
-	// Specified in the format 'projects/*/locations/*'.
-	Name                 string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *GetServerConfigRequest) Reset()         { *m = GetServerConfigRequest{} }
-func (m *GetServerConfigRequest) String() string { return proto.CompactTextString(m) }
-func (*GetServerConfigRequest) ProtoMessage()    {}
-func (*GetServerConfigRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{27}
-}
-func (m *GetServerConfigRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_GetServerConfigRequest.Unmarshal(m, b)
-}
-func (m *GetServerConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_GetServerConfigRequest.Marshal(b, m, deterministic)
-}
-func (dst *GetServerConfigRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetServerConfigRequest.Merge(dst, src)
-}
-func (m *GetServerConfigRequest) XXX_Size() int {
-	return xxx_messageInfo_GetServerConfigRequest.Size(m)
-}
-func (m *GetServerConfigRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_GetServerConfigRequest.DiscardUnknown(m)
+	return ""
 }
 
-var xxx_messageInfo_GetServerConfigRequest proto.InternalMessageInfo
-
-func (m *GetServerConfigRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *UpdateMasterRequest) GetClusterId() string {
 	if m != nil {
-		return m.ProjectId
+		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *GetServerConfigRequest) GetZone() string {
+func (m *UpdateMasterRequest) GetMasterVersion() string {
 	if m != nil {
-		return m.Zone
+		return m.MasterVersion
 	}
 	return ""
 }
 
-func (m *GetServerConfigRequest) GetName() string {
+func (m *UpdateMasterRequest) GetName() string {
 	if m != nil {
 		return m.Name
 	}
 	return ""
 }
 
-// Container Engine service configuration.
-type ServerConfig struct {
-	// Version of Kubernetes the service deploys by default.
-	DefaultClusterVersion string `protobuf:"bytes,1,opt,name=default_cluster_version,json=defaultClusterVersion,proto3" json:"default_cluster_version,omitempty"`
-	// List of valid node upgrade target versions.
-	ValidNodeVersions []string `protobuf:"bytes,3,rep,name=valid_node_versions,json=validNodeVersions,proto3" json:"valid_node_versions,omitempty"`
-	// Default image type.
-	DefaultImageType string `protobuf:"bytes,4,opt,name=default_image_type,json=defaultImageType,proto3" json:"default_image_type,omitempty"`
-	// List of valid image types.
-	ValidImageTypes []string `protobuf:"bytes,5,rep,name=valid_image_types,json=validImageTypes,proto3" json:"valid_image_types,omitempty"`
-	// List of valid master versions.
-	ValidMasterVersions  []string `protobuf:"bytes,6,rep,name=valid_master_versions,json=validMasterVersions,proto3" json:"valid_master_versions,omitempty"`
+// SetMasterAuthRequest updates the admin password of a cluster.
+type SetMasterAuthRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to upgrade.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The exact form of action to be taken on the master auth.
+	Action SetMasterAuthRequest_Action `protobuf:"varint,4,opt,name=action,proto3,enum=google.container.v1beta1.SetMasterAuthRequest_Action" json:"action,omitempty"`
+	// A description of the update.
+	Update *MasterAuth `protobuf:"bytes,5,opt,name=update,proto3" json:"update,omitempty"`
+	// The name (project, location, cluster) of the cluster to set auth.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ServerConfig) Reset()         { *m = ServerConfig{} }
-func (m *ServerConfig) String() string { return proto.CompactTextString(m) }
-func (*ServerConfig) ProtoMessage()    {}
-func (*ServerConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{28}
+func (m *SetMasterAuthRequest) Reset()         { *m = SetMasterAuthRequest{} }
+func (m *SetMasterAuthRequest) String() string { return proto.CompactTextString(m) }
+func (*SetMasterAuthRequest) ProtoMessage()    {}
+func (*SetMasterAuthRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{32}
 }
-func (m *ServerConfig) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ServerConfig.Unmarshal(m, b)
+func (m *SetMasterAuthRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetMasterAuthRequest.Unmarshal(m, b)
 }
-func (m *ServerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ServerConfig.Marshal(b, m, deterministic)
+func (m *SetMasterAuthRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetMasterAuthRequest.Marshal(b, m, deterministic)
 }
-func (dst *ServerConfig) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ServerConfig.Merge(dst, src)
+func (dst *SetMasterAuthRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetMasterAuthRequest.Merge(dst, src)
 }
-func (m *ServerConfig) XXX_Size() int {
-	return xxx_messageInfo_ServerConfig.Size(m)
+func (m *SetMasterAuthRequest) XXX_Size() int {
+	return xxx_messageInfo_SetMasterAuthRequest.Size(m)
 }
-func (m *ServerConfig) XXX_DiscardUnknown() {
-	xxx_messageInfo_ServerConfig.DiscardUnknown(m)
+func (m *SetMasterAuthRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetMasterAuthRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_ServerConfig proto.InternalMessageInfo
+var xxx_messageInfo_SetMasterAuthRequest proto.InternalMessageInfo
 
-func (m *ServerConfig) GetDefaultClusterVersion() string {
+// Deprecated: Do not use.
+func (m *SetMasterAuthRequest) GetProjectId() string {
 	if m != nil {
-		return m.DefaultClusterVersion
+		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *ServerConfig) GetValidNodeVersions() []string {
+// Deprecated: Do not use.
+func (m *SetMasterAuthRequest) GetZone() string {
 	if m != nil {
-		return m.ValidNodeVersions
+		return m.Zone
 	}
-	return nil
+	return ""
 }
 
-func (m *ServerConfig) GetDefaultImageType() string {
+// Deprecated: Do not use.
+func (m *SetMasterAuthRequest) GetClusterId() string {
 	if m != nil {
-		return m.DefaultImageType
+		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *ServerConfig) GetValidImageTypes() []string {
+func (m *SetMasterAuthRequest) GetAction() SetMasterAuthRequest_Action {
 	if m != nil {
-		return m.ValidImageTypes
+		return m.Action
 	}
-	return nil
+	return SetMasterAuthRequest_UNKNOWN
 }
 
-func (m *ServerConfig) GetValidMasterVersions() []string {
+func (m *SetMasterAuthRequest) GetUpdate() *MasterAuth {
 	if m != nil {
-		return m.ValidMasterVersions
+		return m.Update
 	}
 	return nil
 }
 
-// CreateNodePoolRequest creates a node pool for a cluster.
-type CreateNodePoolRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use parent instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+func (m *SetMasterAuthRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// DeleteClusterRequest deletes a cluster.
+type DeleteClusterRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use parent instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use parent instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The node pool to create.
-	NodePool *NodePool `protobuf:"bytes,4,opt,name=node_pool,json=nodePool,proto3" json:"node_pool,omitempty"`
-	// The parent (project, location, cluster id) where the node pool will be created.
-	// Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'.
-	Parent               string   `protobuf:"bytes,6,opt,name=parent,proto3" json:"parent,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to delete.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, cluster) of the cluster to delete.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CreateNodePoolRequest) Reset()         { *m = CreateNodePoolRequest{} }
-func (m *CreateNodePoolRequest) String() string { return proto.CompactTextString(m) }
-func (*CreateNodePoolRequest) ProtoMessage()    {}
-func (*CreateNodePoolRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{29}
+func (m *DeleteClusterRequest) Reset()         { *m = DeleteClusterRequest{} }
+func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteClusterRequest) ProtoMessage()    {}
+func (*DeleteClusterRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{33}
 }
-func (m *CreateNodePoolRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CreateNodePoolRequest.Unmarshal(m, b)
+func (m *DeleteClusterRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteClusterRequest.Unmarshal(m, b)
 }
-func (m *CreateNodePoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CreateNodePoolRequest.Marshal(b, m, deterministic)
+func (m *DeleteClusterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteClusterRequest.Marshal(b, m, deterministic)
 }
-func (dst *CreateNodePoolRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateNodePoolRequest.Merge(dst, src)
+func (dst *DeleteClusterRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteClusterRequest.Merge(dst, src)
 }
-func (m *CreateNodePoolRequest) XXX_Size() int {
-	return xxx_messageInfo_CreateNodePoolRequest.Size(m)
+func (m *DeleteClusterRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteClusterRequest.Size(m)
 }
-func (m *CreateNodePoolRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CreateNodePoolRequest.DiscardUnknown(m)
+func (m *DeleteClusterRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteClusterRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_CreateNodePoolRequest proto.InternalMessageInfo
+var xxx_messageInfo_DeleteClusterRequest proto.InternalMessageInfo
 
-func (m *CreateNodePoolRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *DeleteClusterRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *CreateNodePoolRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *DeleteClusterRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *CreateNodePoolRequest) GetClusterId() string {
+// Deprecated: Do not use.
+func (m *DeleteClusterRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *CreateNodePoolRequest) GetNodePool() *NodePool {
-	if m != nil {
-		return m.NodePool
-	}
-	return nil
-}
-
-func (m *CreateNodePoolRequest) GetParent() string {
+func (m *DeleteClusterRequest) GetName() string {
 	if m != nil {
-		return m.Parent
+		return m.Name
 	}
 	return ""
 }
 
-// DeleteNodePoolRequest deletes a node pool for a cluster.
-type DeleteNodePoolRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+// ListClustersRequest lists clusters.
+type ListClustersRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the parent field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The name of the node pool to delete.
-	// This field is deprecated, use name instead.
-	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"`
-	// The name (project, location, cluster, node pool id) of the node pool to delete.
-	// Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'.
-	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+	// resides, or "-" for all zones.
+	// This field has been deprecated and replaced by the parent field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// The parent (project and location) where the clusters will be listed.
+	// Specified in the format 'projects/*/locations/*'.
+	// Location "-" matches all zones and all regions.
+	Parent               string   `protobuf:"bytes,4,opt,name=parent,proto3" json:"parent,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *DeleteNodePoolRequest) Reset()         { *m = DeleteNodePoolRequest{} }
-func (m *DeleteNodePoolRequest) String() string { return proto.CompactTextString(m) }
-func (*DeleteNodePoolRequest) ProtoMessage()    {}
-func (*DeleteNodePoolRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{30}
+func (m *ListClustersRequest) Reset()         { *m = ListClustersRequest{} }
+func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) }
+func (*ListClustersRequest) ProtoMessage()    {}
+func (*ListClustersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{34}
 }
-func (m *DeleteNodePoolRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_DeleteNodePoolRequest.Unmarshal(m, b)
+func (m *ListClustersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListClustersRequest.Unmarshal(m, b)
 }
-func (m *DeleteNodePoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_DeleteNodePoolRequest.Marshal(b, m, deterministic)
+func (m *ListClustersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListClustersRequest.Marshal(b, m, deterministic)
 }
-func (dst *DeleteNodePoolRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_DeleteNodePoolRequest.Merge(dst, src)
+func (dst *ListClustersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListClustersRequest.Merge(dst, src)
 }
-func (m *DeleteNodePoolRequest) XXX_Size() int {
-	return xxx_messageInfo_DeleteNodePoolRequest.Size(m)
+func (m *ListClustersRequest) XXX_Size() int {
+	return xxx_messageInfo_ListClustersRequest.Size(m)
 }
-func (m *DeleteNodePoolRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_DeleteNodePoolRequest.DiscardUnknown(m)
+func (m *ListClustersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListClustersRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_DeleteNodePoolRequest proto.InternalMessageInfo
+var xxx_messageInfo_ListClustersRequest proto.InternalMessageInfo
 
-func (m *DeleteNodePoolRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *ListClustersRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *DeleteNodePoolRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *ListClustersRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *DeleteNodePoolRequest) GetClusterId() string {
+func (m *ListClustersRequest) GetParent() string {
 	if m != nil {
-		return m.ClusterId
+		return m.Parent
 	}
 	return ""
 }
 
-func (m *DeleteNodePoolRequest) GetNodePoolId() string {
+// ListClustersResponse is the result of ListClustersRequest.
+type ListClustersResponse struct {
+	// A list of clusters in the project in the specified zone, or
+	// across all ones.
+	Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
+	// If any zones are listed here, the list of clusters returned
+	// may be missing those zones.
+	MissingZones         []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones,proto3" json:"missing_zones,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListClustersResponse) Reset()         { *m = ListClustersResponse{} }
+func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) }
+func (*ListClustersResponse) ProtoMessage()    {}
+func (*ListClustersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{35}
+}
+func (m *ListClustersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListClustersResponse.Unmarshal(m, b)
+}
+func (m *ListClustersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListClustersResponse.Marshal(b, m, deterministic)
+}
+func (dst *ListClustersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListClustersResponse.Merge(dst, src)
+}
+func (m *ListClustersResponse) XXX_Size() int {
+	return xxx_messageInfo_ListClustersResponse.Size(m)
+}
+func (m *ListClustersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListClustersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListClustersResponse proto.InternalMessageInfo
+
+func (m *ListClustersResponse) GetClusters() []*Cluster {
 	if m != nil {
-		return m.NodePoolId
+		return m.Clusters
 	}
-	return ""
+	return nil
 }
 
-func (m *DeleteNodePoolRequest) GetName() string {
+func (m *ListClustersResponse) GetMissingZones() []string {
 	if m != nil {
-		return m.Name
+		return m.MissingZones
 	}
-	return ""
+	return nil
 }
 
-// ListNodePoolsRequest lists the node pool(s) for a cluster.
-type ListNodePoolsRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use parent instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+// GetOperationRequest gets a single operation.
+type GetOperationRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use parent instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use parent instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The parent (project, location, cluster id) where the node pools will be listed.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Parent               string   `protobuf:"bytes,5,opt,name=parent,proto3" json:"parent,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The server-assigned `name` of the operation.
+	// This field has been deprecated and replaced by the name field.
+	OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, operation id) of the operation to get.
+	// Specified in the format 'projects/*/locations/*/operations/*'.
+	Name                 string   `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *ListNodePoolsRequest) Reset()         { *m = ListNodePoolsRequest{} }
-func (m *ListNodePoolsRequest) String() string { return proto.CompactTextString(m) }
-func (*ListNodePoolsRequest) ProtoMessage()    {}
-func (*ListNodePoolsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{31}
+func (m *GetOperationRequest) Reset()         { *m = GetOperationRequest{} }
+func (m *GetOperationRequest) String() string { return proto.CompactTextString(m) }
+func (*GetOperationRequest) ProtoMessage()    {}
+func (*GetOperationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{36}
 }
-func (m *ListNodePoolsRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListNodePoolsRequest.Unmarshal(m, b)
+func (m *GetOperationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetOperationRequest.Unmarshal(m, b)
 }
-func (m *ListNodePoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListNodePoolsRequest.Marshal(b, m, deterministic)
+func (m *GetOperationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetOperationRequest.Marshal(b, m, deterministic)
 }
-func (dst *ListNodePoolsRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListNodePoolsRequest.Merge(dst, src)
+func (dst *GetOperationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetOperationRequest.Merge(dst, src)
 }
-func (m *ListNodePoolsRequest) XXX_Size() int {
-	return xxx_messageInfo_ListNodePoolsRequest.Size(m)
+func (m *GetOperationRequest) XXX_Size() int {
+	return xxx_messageInfo_GetOperationRequest.Size(m)
 }
-func (m *ListNodePoolsRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListNodePoolsRequest.DiscardUnknown(m)
+func (m *GetOperationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetOperationRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_ListNodePoolsRequest proto.InternalMessageInfo
+var xxx_messageInfo_GetOperationRequest proto.InternalMessageInfo
 
-func (m *ListNodePoolsRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *GetOperationRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *ListNodePoolsRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *GetOperationRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *ListNodePoolsRequest) GetClusterId() string {
+// Deprecated: Do not use.
+func (m *GetOperationRequest) GetOperationId() string {
 	if m != nil {
-		return m.ClusterId
+		return m.OperationId
 	}
 	return ""
 }
 
-func (m *ListNodePoolsRequest) GetParent() string {
+func (m *GetOperationRequest) GetName() string {
 	if m != nil {
-		return m.Parent
+		return m.Name
 	}
 	return ""
 }
 
-// GetNodePoolRequest retrieves a node pool for a cluster.
-type GetNodePoolRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
-	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The name of the node pool.
-	// This field is deprecated, use name instead.
-	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"`
-	// The name (project, location, cluster, node pool id) of the node pool to get.
-	// Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'.
-	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+// ListOperationsRequest lists operations.
+type ListOperationsRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the parent field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) to return operations for, or `-` for
+	// all zones. This field has been deprecated and replaced by the parent field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// The parent (project and location) where the operations will be listed.
+	// Specified in the format 'projects/*/locations/*'.
+	// Location "-" matches all zones and all regions.
+	Parent               string   `protobuf:"bytes,4,opt,name=parent,proto3" json:"parent,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *GetNodePoolRequest) Reset()         { *m = GetNodePoolRequest{} }
-func (m *GetNodePoolRequest) String() string { return proto.CompactTextString(m) }
-func (*GetNodePoolRequest) ProtoMessage()    {}
-func (*GetNodePoolRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{32}
+func (m *ListOperationsRequest) Reset()         { *m = ListOperationsRequest{} }
+func (m *ListOperationsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListOperationsRequest) ProtoMessage()    {}
+func (*ListOperationsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{37}
 }
-func (m *GetNodePoolRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_GetNodePoolRequest.Unmarshal(m, b)
+func (m *ListOperationsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListOperationsRequest.Unmarshal(m, b)
 }
-func (m *GetNodePoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_GetNodePoolRequest.Marshal(b, m, deterministic)
+func (m *ListOperationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListOperationsRequest.Marshal(b, m, deterministic)
 }
-func (dst *GetNodePoolRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetNodePoolRequest.Merge(dst, src)
+func (dst *ListOperationsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOperationsRequest.Merge(dst, src)
 }
-func (m *GetNodePoolRequest) XXX_Size() int {
-	return xxx_messageInfo_GetNodePoolRequest.Size(m)
+func (m *ListOperationsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListOperationsRequest.Size(m)
 }
-func (m *GetNodePoolRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_GetNodePoolRequest.DiscardUnknown(m)
+func (m *ListOperationsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOperationsRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_GetNodePoolRequest proto.InternalMessageInfo
+var xxx_messageInfo_ListOperationsRequest proto.InternalMessageInfo
 
-func (m *GetNodePoolRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *ListOperationsRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *GetNodePoolRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *ListOperationsRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *GetNodePoolRequest) GetClusterId() string {
-	if m != nil {
-		return m.ClusterId
-	}
-	return ""
-}
-
-func (m *GetNodePoolRequest) GetNodePoolId() string {
+func (m *ListOperationsRequest) GetParent() string {
 	if m != nil {
-		return m.NodePoolId
+		return m.Parent
 	}
 	return ""
 }
 
-func (m *GetNodePoolRequest) GetName() string {
-	if m != nil {
+// CancelOperationRequest cancels a single operation.
+type CancelOperationRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the operation resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The server-assigned `name` of the operation.
+	// This field has been deprecated and replaced by the name field.
+	OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, operation id) of the operation to cancel.
+	// Specified in the format 'projects/*/locations/*/operations/*'.
+	Name                 string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CancelOperationRequest) Reset()         { *m = CancelOperationRequest{} }
+func (m *CancelOperationRequest) String() string { return proto.CompactTextString(m) }
+func (*CancelOperationRequest) ProtoMessage()    {}
+func (*CancelOperationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{38}
+}
+func (m *CancelOperationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CancelOperationRequest.Unmarshal(m, b)
+}
+func (m *CancelOperationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CancelOperationRequest.Marshal(b, m, deterministic)
+}
+func (dst *CancelOperationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CancelOperationRequest.Merge(dst, src)
+}
+func (m *CancelOperationRequest) XXX_Size() int {
+	return xxx_messageInfo_CancelOperationRequest.Size(m)
+}
+func (m *CancelOperationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CancelOperationRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CancelOperationRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *CancelOperationRequest) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *CancelOperationRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *CancelOperationRequest) GetOperationId() string {
+	if m != nil {
+		return m.OperationId
+	}
+	return ""
+}
+
+func (m *CancelOperationRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// ListOperationsResponse is the result of ListOperationsRequest.
+type ListOperationsResponse struct {
+	// A list of operations in the project in the specified zone.
+	Operations []*Operation `protobuf:"bytes,1,rep,name=operations,proto3" json:"operations,omitempty"`
+	// If any zones are listed here, the list of operations returned
+	// may be missing the operations from those zones.
+	MissingZones         []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones,proto3" json:"missing_zones,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListOperationsResponse) Reset()         { *m = ListOperationsResponse{} }
+func (m *ListOperationsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListOperationsResponse) ProtoMessage()    {}
+func (*ListOperationsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{39}
+}
+func (m *ListOperationsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListOperationsResponse.Unmarshal(m, b)
+}
+func (m *ListOperationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListOperationsResponse.Marshal(b, m, deterministic)
+}
+func (dst *ListOperationsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOperationsResponse.Merge(dst, src)
+}
+func (m *ListOperationsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListOperationsResponse.Size(m)
+}
+func (m *ListOperationsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOperationsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOperationsResponse proto.InternalMessageInfo
+
+func (m *ListOperationsResponse) GetOperations() []*Operation {
+	if m != nil {
+		return m.Operations
+	}
+	return nil
+}
+
+func (m *ListOperationsResponse) GetMissingZones() []string {
+	if m != nil {
+		return m.MissingZones
+	}
+	return nil
+}
+
+// Gets the current Kubernetes Engine service configuration.
+type GetServerConfigRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) to return operations for.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// The name (project and location) of the server config to get
+	// Specified in the format 'projects/*/locations/*'.
+	Name                 string   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetServerConfigRequest) Reset()         { *m = GetServerConfigRequest{} }
+func (m *GetServerConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*GetServerConfigRequest) ProtoMessage()    {}
+func (*GetServerConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{40}
+}
+func (m *GetServerConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetServerConfigRequest.Unmarshal(m, b)
+}
+func (m *GetServerConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetServerConfigRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetServerConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetServerConfigRequest.Merge(dst, src)
+}
+func (m *GetServerConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_GetServerConfigRequest.Size(m)
+}
+func (m *GetServerConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetServerConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetServerConfigRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *GetServerConfigRequest) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *GetServerConfigRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
+	}
+	return ""
+}
+
+func (m *GetServerConfigRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Kubernetes Engine service configuration.
+type ServerConfig struct {
+	// Version of Kubernetes the service deploys by default.
+	DefaultClusterVersion string `protobuf:"bytes,1,opt,name=default_cluster_version,json=defaultClusterVersion,proto3" json:"default_cluster_version,omitempty"`
+	// List of valid node upgrade target versions.
+	ValidNodeVersions []string `protobuf:"bytes,3,rep,name=valid_node_versions,json=validNodeVersions,proto3" json:"valid_node_versions,omitempty"`
+	// Default image type.
+	DefaultImageType string `protobuf:"bytes,4,opt,name=default_image_type,json=defaultImageType,proto3" json:"default_image_type,omitempty"`
+	// List of valid image types.
+	ValidImageTypes []string `protobuf:"bytes,5,rep,name=valid_image_types,json=validImageTypes,proto3" json:"valid_image_types,omitempty"`
+	// List of valid master versions.
+	ValidMasterVersions  []string `protobuf:"bytes,6,rep,name=valid_master_versions,json=validMasterVersions,proto3" json:"valid_master_versions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ServerConfig) Reset()         { *m = ServerConfig{} }
+func (m *ServerConfig) String() string { return proto.CompactTextString(m) }
+func (*ServerConfig) ProtoMessage()    {}
+func (*ServerConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{41}
+}
+func (m *ServerConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServerConfig.Unmarshal(m, b)
+}
+func (m *ServerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServerConfig.Marshal(b, m, deterministic)
+}
+func (dst *ServerConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServerConfig.Merge(dst, src)
+}
+func (m *ServerConfig) XXX_Size() int {
+	return xxx_messageInfo_ServerConfig.Size(m)
+}
+func (m *ServerConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServerConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServerConfig proto.InternalMessageInfo
+
+func (m *ServerConfig) GetDefaultClusterVersion() string {
+	if m != nil {
+		return m.DefaultClusterVersion
+	}
+	return ""
+}
+
+func (m *ServerConfig) GetValidNodeVersions() []string {
+	if m != nil {
+		return m.ValidNodeVersions
+	}
+	return nil
+}
+
+func (m *ServerConfig) GetDefaultImageType() string {
+	if m != nil {
+		return m.DefaultImageType
+	}
+	return ""
+}
+
+func (m *ServerConfig) GetValidImageTypes() []string {
+	if m != nil {
+		return m.ValidImageTypes
+	}
+	return nil
+}
+
+func (m *ServerConfig) GetValidMasterVersions() []string {
+	if m != nil {
+		return m.ValidMasterVersions
+	}
+	return nil
+}
+
+// CreateNodePoolRequest creates a node pool for a cluster.
+type CreateNodePoolRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the parent field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the parent field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the parent field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The node pool to create.
+	NodePool *NodePool `protobuf:"bytes,4,opt,name=node_pool,json=nodePool,proto3" json:"node_pool,omitempty"`
+	// The parent (project, location, cluster id) where the node pool will be
+	// created. Specified in the format
+	// 'projects/*/locations/*/clusters/*'.
+	Parent               string   `protobuf:"bytes,6,opt,name=parent,proto3" json:"parent,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateNodePoolRequest) Reset()         { *m = CreateNodePoolRequest{} }
+func (m *CreateNodePoolRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateNodePoolRequest) ProtoMessage()    {}
+func (*CreateNodePoolRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{42}
+}
+func (m *CreateNodePoolRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateNodePoolRequest.Unmarshal(m, b)
+}
+func (m *CreateNodePoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateNodePoolRequest.Marshal(b, m, deterministic)
+}
+func (dst *CreateNodePoolRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateNodePoolRequest.Merge(dst, src)
+}
+func (m *CreateNodePoolRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateNodePoolRequest.Size(m)
+}
+func (m *CreateNodePoolRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateNodePoolRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateNodePoolRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *CreateNodePoolRequest) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *CreateNodePoolRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *CreateNodePoolRequest) GetClusterId() string {
+	if m != nil {
+		return m.ClusterId
+	}
+	return ""
+}
+
+func (m *CreateNodePoolRequest) GetNodePool() *NodePool {
+	if m != nil {
+		return m.NodePool
+	}
+	return nil
+}
+
+func (m *CreateNodePoolRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+// DeleteNodePoolRequest deletes a node pool for a cluster.
+type DeleteNodePoolRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the node pool to delete.
+	// This field has been deprecated and replaced by the name field.
+	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, cluster, node pool id) of the node pool to
+	// delete. Specified in the format
+	// 'projects/*/locations/*/clusters/*/nodePools/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteNodePoolRequest) Reset()         { *m = DeleteNodePoolRequest{} }
+func (m *DeleteNodePoolRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteNodePoolRequest) ProtoMessage()    {}
+func (*DeleteNodePoolRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{43}
+}
+func (m *DeleteNodePoolRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteNodePoolRequest.Unmarshal(m, b)
+}
+func (m *DeleteNodePoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteNodePoolRequest.Marshal(b, m, deterministic)
+}
+func (dst *DeleteNodePoolRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteNodePoolRequest.Merge(dst, src)
+}
+func (m *DeleteNodePoolRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteNodePoolRequest.Size(m)
+}
+func (m *DeleteNodePoolRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteNodePoolRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteNodePoolRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *DeleteNodePoolRequest) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *DeleteNodePoolRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *DeleteNodePoolRequest) GetClusterId() string {
+	if m != nil {
+		return m.ClusterId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *DeleteNodePoolRequest) GetNodePoolId() string {
+	if m != nil {
+		return m.NodePoolId
+	}
+	return ""
+}
+
+func (m *DeleteNodePoolRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// ListNodePoolsRequest lists the node pool(s) for a cluster.
+type ListNodePoolsRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the parent field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the parent field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the parent field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The parent (project, location, cluster id) where the node pools will be
+	// listed. Specified in the format 'projects/*/locations/*/clusters/*'.
+	Parent               string   `protobuf:"bytes,5,opt,name=parent,proto3" json:"parent,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListNodePoolsRequest) Reset()         { *m = ListNodePoolsRequest{} }
+func (m *ListNodePoolsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListNodePoolsRequest) ProtoMessage()    {}
+func (*ListNodePoolsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{44}
+}
+func (m *ListNodePoolsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListNodePoolsRequest.Unmarshal(m, b)
+}
+func (m *ListNodePoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListNodePoolsRequest.Marshal(b, m, deterministic)
+}
+func (dst *ListNodePoolsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListNodePoolsRequest.Merge(dst, src)
+}
+func (m *ListNodePoolsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListNodePoolsRequest.Size(m)
+}
+func (m *ListNodePoolsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListNodePoolsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListNodePoolsRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *ListNodePoolsRequest) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *ListNodePoolsRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *ListNodePoolsRequest) GetClusterId() string {
+	if m != nil {
+		return m.ClusterId
+	}
+	return ""
+}
+
+func (m *ListNodePoolsRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+// GetNodePoolRequest retrieves a node pool for a cluster.
+type GetNodePoolRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the node pool.
+	// This field has been deprecated and replaced by the name field.
+	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, cluster, node pool id) of the node pool to
+	// get. Specified in the format
+	// 'projects/*/locations/*/clusters/*/nodePools/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetNodePoolRequest) Reset()         { *m = GetNodePoolRequest{} }
+func (m *GetNodePoolRequest) String() string { return proto.CompactTextString(m) }
+func (*GetNodePoolRequest) ProtoMessage()    {}
+func (*GetNodePoolRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{45}
+}
+func (m *GetNodePoolRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetNodePoolRequest.Unmarshal(m, b)
+}
+func (m *GetNodePoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetNodePoolRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetNodePoolRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetNodePoolRequest.Merge(dst, src)
+}
+func (m *GetNodePoolRequest) XXX_Size() int {
+	return xxx_messageInfo_GetNodePoolRequest.Size(m)
+}
+func (m *GetNodePoolRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetNodePoolRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetNodePoolRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *GetNodePoolRequest) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *GetNodePoolRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *GetNodePoolRequest) GetClusterId() string {
+	if m != nil {
+		return m.ClusterId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *GetNodePoolRequest) GetNodePoolId() string {
+	if m != nil {
+		return m.NodePoolId
+	}
+	return ""
+}
+
+func (m *GetNodePoolRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// NodePool contains the name and configuration for a cluster's node pool.
+// Node pools are a set of nodes (i.e. VM's), with a common configuration and
+// specification, under the control of the cluster master. They may have a set
+// of Kubernetes labels applied to them, which may be used to reference them
+// during pod scheduling. They may also be resized up or down, to accommodate
+// the workload.
+type NodePool struct {
+	// The name of the node pool.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The node configuration of the pool.
+	Config *NodeConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
+	// The initial node count for the pool. You must ensure that your
+	// Compute Engine <a href="/compute/docs/resource-quotas">resource quota</a>
+	// is sufficient for this number of instances. You must also have available
+	// firewall and routes quota.
+	InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount,proto3" json:"initial_node_count,omitempty"`
+	// [Output only] Server-defined URL for the resource.
+	SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink,proto3" json:"self_link,omitempty"`
+	// The version of the Kubernetes of this node.
+	Version string `protobuf:"bytes,101,opt,name=version,proto3" json:"version,omitempty"`
+	// [Output only] The resource URLs of the [managed instance
+	// groups](/compute/docs/instance-groups/creating-groups-of-managed-instances)
+	// associated with this node pool.
+	InstanceGroupUrls []string `protobuf:"bytes,102,rep,name=instance_group_urls,json=instanceGroupUrls,proto3" json:"instance_group_urls,omitempty"`
+	// [Output only] The status of the nodes in this pool instance.
+	Status NodePool_Status `protobuf:"varint,103,opt,name=status,proto3,enum=google.container.v1beta1.NodePool_Status" json:"status,omitempty"`
+	// [Output only] Additional information about the current status of this
+	// node pool instance, if available.
+	StatusMessage string `protobuf:"bytes,104,opt,name=status_message,json=statusMessage,proto3" json:"status_message,omitempty"`
+	// Autoscaler configuration for this NodePool. Autoscaler is enabled
+	// only if a valid configuration is present.
+	Autoscaling *NodePoolAutoscaling `protobuf:"bytes,4,opt,name=autoscaling,proto3" json:"autoscaling,omitempty"`
+	// NodeManagement configuration for this NodePool.
+	Management *NodeManagement `protobuf:"bytes,5,opt,name=management,proto3" json:"management,omitempty"`
+	// The constraint on the maximum number of pods that can be run
+	// simultaneously on a node in the node pool.
+	MaxPodsConstraint *MaxPodsConstraint `protobuf:"bytes,6,opt,name=max_pods_constraint,json=maxPodsConstraint,proto3" json:"max_pods_constraint,omitempty"`
+	// Which conditions caused the current node pool state.
+	Conditions           []*StatusCondition `protobuf:"bytes,105,rep,name=conditions,proto3" json:"conditions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *NodePool) Reset()         { *m = NodePool{} }
+func (m *NodePool) String() string { return proto.CompactTextString(m) }
+func (*NodePool) ProtoMessage()    {}
+func (*NodePool) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{46}
+}
+func (m *NodePool) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NodePool.Unmarshal(m, b)
+}
+func (m *NodePool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NodePool.Marshal(b, m, deterministic)
+}
+func (dst *NodePool) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NodePool.Merge(dst, src)
+}
+func (m *NodePool) XXX_Size() int {
+	return xxx_messageInfo_NodePool.Size(m)
+}
+func (m *NodePool) XXX_DiscardUnknown() {
+	xxx_messageInfo_NodePool.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NodePool proto.InternalMessageInfo
+
+func (m *NodePool) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *NodePool) GetConfig() *NodeConfig {
+	if m != nil {
+		return m.Config
+	}
+	return nil
+}
+
+func (m *NodePool) GetInitialNodeCount() int32 {
+	if m != nil {
+		return m.InitialNodeCount
+	}
+	return 0
+}
+
+func (m *NodePool) GetSelfLink() string {
+	if m != nil {
+		return m.SelfLink
+	}
+	return ""
+}
+
+func (m *NodePool) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *NodePool) GetInstanceGroupUrls() []string {
+	if m != nil {
+		return m.InstanceGroupUrls
+	}
+	return nil
+}
+
+func (m *NodePool) GetStatus() NodePool_Status {
+	if m != nil {
+		return m.Status
+	}
+	return NodePool_STATUS_UNSPECIFIED
+}
+
+func (m *NodePool) GetStatusMessage() string {
+	if m != nil {
+		return m.StatusMessage
+	}
+	return ""
+}
+
+func (m *NodePool) GetAutoscaling() *NodePoolAutoscaling {
+	if m != nil {
+		return m.Autoscaling
+	}
+	return nil
+}
+
+func (m *NodePool) GetManagement() *NodeManagement {
+	if m != nil {
+		return m.Management
+	}
+	return nil
+}
+
+func (m *NodePool) GetMaxPodsConstraint() *MaxPodsConstraint {
+	if m != nil {
+		return m.MaxPodsConstraint
+	}
+	return nil
+}
+
+func (m *NodePool) GetConditions() []*StatusCondition {
+	if m != nil {
+		return m.Conditions
+	}
+	return nil
+}
+
+// NodeManagement defines the set of node management services turned on for the
+// node pool.
+type NodeManagement struct {
+	// Whether the nodes will be automatically upgraded.
+	AutoUpgrade bool `protobuf:"varint,1,opt,name=auto_upgrade,json=autoUpgrade,proto3" json:"auto_upgrade,omitempty"`
+	// Whether the nodes will be automatically repaired.
+	AutoRepair bool `protobuf:"varint,2,opt,name=auto_repair,json=autoRepair,proto3" json:"auto_repair,omitempty"`
+	// Specifies the Auto Upgrade knobs for the node pool.
+	UpgradeOptions       *AutoUpgradeOptions `protobuf:"bytes,10,opt,name=upgrade_options,json=upgradeOptions,proto3" json:"upgrade_options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *NodeManagement) Reset()         { *m = NodeManagement{} }
+func (m *NodeManagement) String() string { return proto.CompactTextString(m) }
+func (*NodeManagement) ProtoMessage()    {}
+func (*NodeManagement) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{47}
+}
+func (m *NodeManagement) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NodeManagement.Unmarshal(m, b)
+}
+func (m *NodeManagement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NodeManagement.Marshal(b, m, deterministic)
+}
+func (dst *NodeManagement) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NodeManagement.Merge(dst, src)
+}
+func (m *NodeManagement) XXX_Size() int {
+	return xxx_messageInfo_NodeManagement.Size(m)
+}
+func (m *NodeManagement) XXX_DiscardUnknown() {
+	xxx_messageInfo_NodeManagement.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NodeManagement proto.InternalMessageInfo
+
+func (m *NodeManagement) GetAutoUpgrade() bool {
+	if m != nil {
+		return m.AutoUpgrade
+	}
+	return false
+}
+
+func (m *NodeManagement) GetAutoRepair() bool {
+	if m != nil {
+		return m.AutoRepair
+	}
+	return false
+}
+
+func (m *NodeManagement) GetUpgradeOptions() *AutoUpgradeOptions {
+	if m != nil {
+		return m.UpgradeOptions
+	}
+	return nil
+}
+
+// AutoUpgradeOptions defines the set of options for the user to control how
+// the Auto Upgrades will proceed.
+type AutoUpgradeOptions struct {
+	// [Output only] This field is set when upgrades are about to commence
+	// with the approximate start time for the upgrades, in
+	// [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
+	AutoUpgradeStartTime string `protobuf:"bytes,1,opt,name=auto_upgrade_start_time,json=autoUpgradeStartTime,proto3" json:"auto_upgrade_start_time,omitempty"`
+	// [Output only] This field is set when upgrades are about to commence
+	// with the description of the upgrade.
+	Description          string   `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AutoUpgradeOptions) Reset()         { *m = AutoUpgradeOptions{} }
+func (m *AutoUpgradeOptions) String() string { return proto.CompactTextString(m) }
+func (*AutoUpgradeOptions) ProtoMessage()    {}
+func (*AutoUpgradeOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{48}
+}
+func (m *AutoUpgradeOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AutoUpgradeOptions.Unmarshal(m, b)
+}
+func (m *AutoUpgradeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AutoUpgradeOptions.Marshal(b, m, deterministic)
+}
+func (dst *AutoUpgradeOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AutoUpgradeOptions.Merge(dst, src)
+}
+func (m *AutoUpgradeOptions) XXX_Size() int {
+	return xxx_messageInfo_AutoUpgradeOptions.Size(m)
+}
+func (m *AutoUpgradeOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_AutoUpgradeOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AutoUpgradeOptions proto.InternalMessageInfo
+
+func (m *AutoUpgradeOptions) GetAutoUpgradeStartTime() string {
+	if m != nil {
+		return m.AutoUpgradeStartTime
+	}
+	return ""
+}
+
+func (m *AutoUpgradeOptions) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+// MaintenancePolicy defines the maintenance policy to be used for the cluster.
+type MaintenancePolicy struct {
+	// Specifies the maintenance window in which maintenance may be performed.
+	Window               *MaintenanceWindow `protobuf:"bytes,1,opt,name=window,proto3" json:"window,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *MaintenancePolicy) Reset()         { *m = MaintenancePolicy{} }
+func (m *MaintenancePolicy) String() string { return proto.CompactTextString(m) }
+func (*MaintenancePolicy) ProtoMessage()    {}
+func (*MaintenancePolicy) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{49}
+}
+func (m *MaintenancePolicy) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MaintenancePolicy.Unmarshal(m, b)
+}
+func (m *MaintenancePolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MaintenancePolicy.Marshal(b, m, deterministic)
+}
+func (dst *MaintenancePolicy) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MaintenancePolicy.Merge(dst, src)
+}
+func (m *MaintenancePolicy) XXX_Size() int {
+	return xxx_messageInfo_MaintenancePolicy.Size(m)
+}
+func (m *MaintenancePolicy) XXX_DiscardUnknown() {
+	xxx_messageInfo_MaintenancePolicy.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MaintenancePolicy proto.InternalMessageInfo
+
+func (m *MaintenancePolicy) GetWindow() *MaintenanceWindow {
+	if m != nil {
+		return m.Window
+	}
+	return nil
+}
+
+// MaintenanceWindow defines the maintenance window to be used for the cluster.
+type MaintenanceWindow struct {
+	// Unimplemented, reserved for future use.
+	// HourlyMaintenanceWindow hourly_maintenance_window = 1;
+	//
+	// Types that are valid to be assigned to Policy:
+	//	*MaintenanceWindow_DailyMaintenanceWindow
+	Policy               isMaintenanceWindow_Policy `protobuf_oneof:"policy"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *MaintenanceWindow) Reset()         { *m = MaintenanceWindow{} }
+func (m *MaintenanceWindow) String() string { return proto.CompactTextString(m) }
+func (*MaintenanceWindow) ProtoMessage()    {}
+func (*MaintenanceWindow) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{50}
+}
+func (m *MaintenanceWindow) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MaintenanceWindow.Unmarshal(m, b)
+}
+func (m *MaintenanceWindow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MaintenanceWindow.Marshal(b, m, deterministic)
+}
+func (dst *MaintenanceWindow) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MaintenanceWindow.Merge(dst, src)
+}
+func (m *MaintenanceWindow) XXX_Size() int {
+	return xxx_messageInfo_MaintenanceWindow.Size(m)
+}
+func (m *MaintenanceWindow) XXX_DiscardUnknown() {
+	xxx_messageInfo_MaintenanceWindow.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MaintenanceWindow proto.InternalMessageInfo
+
+type isMaintenanceWindow_Policy interface {
+	isMaintenanceWindow_Policy()
+}
+
+type MaintenanceWindow_DailyMaintenanceWindow struct {
+	DailyMaintenanceWindow *DailyMaintenanceWindow `protobuf:"bytes,2,opt,name=daily_maintenance_window,json=dailyMaintenanceWindow,proto3,oneof"`
+}
+
+func (*MaintenanceWindow_DailyMaintenanceWindow) isMaintenanceWindow_Policy() {}
+
+func (m *MaintenanceWindow) GetPolicy() isMaintenanceWindow_Policy {
+	if m != nil {
+		return m.Policy
+	}
+	return nil
+}
+
+func (m *MaintenanceWindow) GetDailyMaintenanceWindow() *DailyMaintenanceWindow {
+	if x, ok := m.GetPolicy().(*MaintenanceWindow_DailyMaintenanceWindow); ok {
+		return x.DailyMaintenanceWindow
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*MaintenanceWindow) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _MaintenanceWindow_OneofMarshaler, _MaintenanceWindow_OneofUnmarshaler, _MaintenanceWindow_OneofSizer, []interface{}{
+		(*MaintenanceWindow_DailyMaintenanceWindow)(nil),
+	}
+}
+
+func _MaintenanceWindow_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*MaintenanceWindow)
+	// policy
+	switch x := m.Policy.(type) {
+	case *MaintenanceWindow_DailyMaintenanceWindow:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DailyMaintenanceWindow); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("MaintenanceWindow.Policy has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _MaintenanceWindow_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*MaintenanceWindow)
+	switch tag {
+	case 2: // policy.daily_maintenance_window
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(DailyMaintenanceWindow)
+		err := b.DecodeMessage(msg)
+		m.Policy = &MaintenanceWindow_DailyMaintenanceWindow{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _MaintenanceWindow_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*MaintenanceWindow)
+	// policy
+	switch x := m.Policy.(type) {
+	case *MaintenanceWindow_DailyMaintenanceWindow:
+		s := proto.Size(x.DailyMaintenanceWindow)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Time window specified for daily maintenance operations.
+type DailyMaintenanceWindow struct {
+	// Time within the maintenance window to start the maintenance operations.
+	// It must be in format "HH:MM”, where HH : [00-23] and MM : [00-59] GMT.
+	StartTime string `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
+	// [Output only] Duration of the time window, automatically chosen to be
+	// smallest possible in the given scenario.
+	Duration             string   `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DailyMaintenanceWindow) Reset()         { *m = DailyMaintenanceWindow{} }
+func (m *DailyMaintenanceWindow) String() string { return proto.CompactTextString(m) }
+func (*DailyMaintenanceWindow) ProtoMessage()    {}
+func (*DailyMaintenanceWindow) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{51}
+}
+func (m *DailyMaintenanceWindow) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DailyMaintenanceWindow.Unmarshal(m, b)
+}
+func (m *DailyMaintenanceWindow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DailyMaintenanceWindow.Marshal(b, m, deterministic)
+}
+func (dst *DailyMaintenanceWindow) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DailyMaintenanceWindow.Merge(dst, src)
+}
+func (m *DailyMaintenanceWindow) XXX_Size() int {
+	return xxx_messageInfo_DailyMaintenanceWindow.Size(m)
+}
+func (m *DailyMaintenanceWindow) XXX_DiscardUnknown() {
+	xxx_messageInfo_DailyMaintenanceWindow.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DailyMaintenanceWindow proto.InternalMessageInfo
+
+func (m *DailyMaintenanceWindow) GetStartTime() string {
+	if m != nil {
+		return m.StartTime
+	}
+	return ""
+}
+
+func (m *DailyMaintenanceWindow) GetDuration() string {
+	if m != nil {
+		return m.Duration
+	}
+	return ""
+}
+
+// SetNodePoolManagementRequest sets the node management properties of a node
+// pool.
+type SetNodePoolManagementRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to update.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the node pool to update.
+	// This field has been deprecated and replaced by the name field.
+	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"` // Deprecated: Do not use.
+	// NodeManagement configuration for the node pool.
+	Management *NodeManagement `protobuf:"bytes,5,opt,name=management,proto3" json:"management,omitempty"`
+	// The name (project, location, cluster, node pool id) of the node pool to set
+	// management properties. Specified in the format
+	// 'projects/*/locations/*/clusters/*/nodePools/*'.
+	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SetNodePoolManagementRequest) Reset()         { *m = SetNodePoolManagementRequest{} }
+func (m *SetNodePoolManagementRequest) String() string { return proto.CompactTextString(m) }
+func (*SetNodePoolManagementRequest) ProtoMessage()    {}
+func (*SetNodePoolManagementRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{52}
+}
+func (m *SetNodePoolManagementRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetNodePoolManagementRequest.Unmarshal(m, b)
+}
+func (m *SetNodePoolManagementRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetNodePoolManagementRequest.Marshal(b, m, deterministic)
+}
+func (dst *SetNodePoolManagementRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetNodePoolManagementRequest.Merge(dst, src)
+}
+func (m *SetNodePoolManagementRequest) XXX_Size() int {
+	return xxx_messageInfo_SetNodePoolManagementRequest.Size(m)
+}
+func (m *SetNodePoolManagementRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetNodePoolManagementRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetNodePoolManagementRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *SetNodePoolManagementRequest) GetProjectId() string {
+	if m != nil {
+		return m.ProjectId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *SetNodePoolManagementRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *SetNodePoolManagementRequest) GetClusterId() string {
+	if m != nil {
+		return m.ClusterId
+	}
+	return ""
+}
+
+// Deprecated: Do not use.
+func (m *SetNodePoolManagementRequest) GetNodePoolId() string {
+	if m != nil {
+		return m.NodePoolId
+	}
+	return ""
+}
+
+func (m *SetNodePoolManagementRequest) GetManagement() *NodeManagement {
+	if m != nil {
+		return m.Management
+	}
+	return nil
+}
+
+func (m *SetNodePoolManagementRequest) GetName() string {
+	if m != nil {
 		return m.Name
 	}
 	return ""
 }
 
-// NodePool contains the name and configuration for a cluster's node pool.
-// Node pools are a set of nodes (i.e. VM's), with a common configuration and
-// specification, under the control of the cluster master. They may have a set
-// of Kubernetes labels applied to them, which may be used to reference them
-// during pod scheduling. They may also be resized up or down, to accommodate
-// the workload.
-type NodePool struct {
-	// The name of the node pool.
-	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	// The node configuration of the pool.
-	Config *NodeConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
-	// The initial node count for the pool. You must ensure that your
-	// Compute Engine <a href="/compute/docs/resource-quotas">resource quota</a>
-	// is sufficient for this number of instances. You must also have available
-	// firewall and routes quota.
-	InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount,proto3" json:"initial_node_count,omitempty"`
-	// [Output only] Server-defined URL for the resource.
-	SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink,proto3" json:"self_link,omitempty"`
-	// [Output only] The version of the Kubernetes of this node.
-	Version string `protobuf:"bytes,101,opt,name=version,proto3" json:"version,omitempty"`
-	// [Output only] The resource URLs of [instance
-	// groups](/compute/docs/instance-groups/) associated with this
-	// node pool.
-	InstanceGroupUrls []string `protobuf:"bytes,102,rep,name=instance_group_urls,json=instanceGroupUrls,proto3" json:"instance_group_urls,omitempty"`
-	// [Output only] The status of the nodes in this pool instance.
-	Status NodePool_Status `protobuf:"varint,103,opt,name=status,proto3,enum=google.container.v1beta1.NodePool_Status" json:"status,omitempty"`
-	// [Output only] Additional information about the current status of this
-	// node pool instance, if available.
-	StatusMessage string `protobuf:"bytes,104,opt,name=status_message,json=statusMessage,proto3" json:"status_message,omitempty"`
-	// Autoscaler configuration for this NodePool. Autoscaler is enabled
-	// only if a valid configuration is present.
-	Autoscaling *NodePoolAutoscaling `protobuf:"bytes,4,opt,name=autoscaling,proto3" json:"autoscaling,omitempty"`
-	// NodeManagement configuration for this NodePool.
-	Management           *NodeManagement `protobuf:"bytes,5,opt,name=management,proto3" json:"management,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
-	XXX_unrecognized     []byte          `json:"-"`
-	XXX_sizecache        int32           `json:"-"`
+// SetNodePoolSizeRequest sets the size a node
+// pool.
+type SetNodePoolSizeRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to update.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the node pool to update.
+	// This field has been deprecated and replaced by the name field.
+	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"` // Deprecated: Do not use.
+	// The desired node count for the pool.
+	NodeCount int32 `protobuf:"varint,5,opt,name=node_count,json=nodeCount,proto3" json:"node_count,omitempty"`
+	// The name (project, location, cluster, node pool id) of the node pool to set
+	// size.
+	// Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'.
+	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *NodePool) Reset()         { *m = NodePool{} }
-func (m *NodePool) String() string { return proto.CompactTextString(m) }
-func (*NodePool) ProtoMessage()    {}
-func (*NodePool) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{33}
+func (m *SetNodePoolSizeRequest) Reset()         { *m = SetNodePoolSizeRequest{} }
+func (m *SetNodePoolSizeRequest) String() string { return proto.CompactTextString(m) }
+func (*SetNodePoolSizeRequest) ProtoMessage()    {}
+func (*SetNodePoolSizeRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{53}
 }
-func (m *NodePool) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_NodePool.Unmarshal(m, b)
+func (m *SetNodePoolSizeRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetNodePoolSizeRequest.Unmarshal(m, b)
 }
-func (m *NodePool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_NodePool.Marshal(b, m, deterministic)
+func (m *SetNodePoolSizeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetNodePoolSizeRequest.Marshal(b, m, deterministic)
 }
-func (dst *NodePool) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_NodePool.Merge(dst, src)
+func (dst *SetNodePoolSizeRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetNodePoolSizeRequest.Merge(dst, src)
 }
-func (m *NodePool) XXX_Size() int {
-	return xxx_messageInfo_NodePool.Size(m)
+func (m *SetNodePoolSizeRequest) XXX_Size() int {
+	return xxx_messageInfo_SetNodePoolSizeRequest.Size(m)
 }
-func (m *NodePool) XXX_DiscardUnknown() {
-	xxx_messageInfo_NodePool.DiscardUnknown(m)
+func (m *SetNodePoolSizeRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetNodePoolSizeRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_NodePool proto.InternalMessageInfo
+var xxx_messageInfo_SetNodePoolSizeRequest proto.InternalMessageInfo
 
-func (m *NodePool) GetName() string {
+// Deprecated: Do not use.
+func (m *SetNodePoolSizeRequest) GetProjectId() string {
 	if m != nil {
-		return m.Name
+		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *NodePool) GetConfig() *NodeConfig {
+// Deprecated: Do not use.
+func (m *SetNodePoolSizeRequest) GetZone() string {
 	if m != nil {
-		return m.Config
+		return m.Zone
 	}
-	return nil
+	return ""
 }
 
-func (m *NodePool) GetInitialNodeCount() int32 {
+// Deprecated: Do not use.
+func (m *SetNodePoolSizeRequest) GetClusterId() string {
 	if m != nil {
-		return m.InitialNodeCount
+		return m.ClusterId
 	}
-	return 0
+	return ""
 }
 
-func (m *NodePool) GetSelfLink() string {
+// Deprecated: Do not use.
+func (m *SetNodePoolSizeRequest) GetNodePoolId() string {
 	if m != nil {
-		return m.SelfLink
+		return m.NodePoolId
 	}
 	return ""
 }
 
-func (m *NodePool) GetVersion() string {
+func (m *SetNodePoolSizeRequest) GetNodeCount() int32 {
 	if m != nil {
-		return m.Version
+		return m.NodeCount
+	}
+	return 0
+}
+
+func (m *SetNodePoolSizeRequest) GetName() string {
+	if m != nil {
+		return m.Name
 	}
 	return ""
 }
 
-func (m *NodePool) GetInstanceGroupUrls() []string {
+// RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed
+// NodePool upgrade. This will be an no-op if the last upgrade successfully
+// completed.
+type RollbackNodePoolUpgradeRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to rollback.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the node pool to rollback.
+	// This field has been deprecated and replaced by the name field.
+	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, cluster, node pool id) of the node poll to
+	// rollback upgrade.
+	// Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RollbackNodePoolUpgradeRequest) Reset()         { *m = RollbackNodePoolUpgradeRequest{} }
+func (m *RollbackNodePoolUpgradeRequest) String() string { return proto.CompactTextString(m) }
+func (*RollbackNodePoolUpgradeRequest) ProtoMessage()    {}
+func (*RollbackNodePoolUpgradeRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{54}
+}
+func (m *RollbackNodePoolUpgradeRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RollbackNodePoolUpgradeRequest.Unmarshal(m, b)
+}
+func (m *RollbackNodePoolUpgradeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RollbackNodePoolUpgradeRequest.Marshal(b, m, deterministic)
+}
+func (dst *RollbackNodePoolUpgradeRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RollbackNodePoolUpgradeRequest.Merge(dst, src)
+}
+func (m *RollbackNodePoolUpgradeRequest) XXX_Size() int {
+	return xxx_messageInfo_RollbackNodePoolUpgradeRequest.Size(m)
+}
+func (m *RollbackNodePoolUpgradeRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_RollbackNodePoolUpgradeRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RollbackNodePoolUpgradeRequest proto.InternalMessageInfo
+
+// Deprecated: Do not use.
+func (m *RollbackNodePoolUpgradeRequest) GetProjectId() string {
 	if m != nil {
-		return m.InstanceGroupUrls
+		return m.ProjectId
 	}
-	return nil
+	return ""
 }
 
-func (m *NodePool) GetStatus() NodePool_Status {
+// Deprecated: Do not use.
+func (m *RollbackNodePoolUpgradeRequest) GetZone() string {
 	if m != nil {
-		return m.Status
+		return m.Zone
 	}
-	return NodePool_STATUS_UNSPECIFIED
+	return ""
 }
 
-func (m *NodePool) GetStatusMessage() string {
+// Deprecated: Do not use.
+func (m *RollbackNodePoolUpgradeRequest) GetClusterId() string {
 	if m != nil {
-		return m.StatusMessage
+		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *NodePool) GetAutoscaling() *NodePoolAutoscaling {
+// Deprecated: Do not use.
+func (m *RollbackNodePoolUpgradeRequest) GetNodePoolId() string {
 	if m != nil {
-		return m.Autoscaling
+		return m.NodePoolId
 	}
-	return nil
+	return ""
 }
 
-func (m *NodePool) GetManagement() *NodeManagement {
+func (m *RollbackNodePoolUpgradeRequest) GetName() string {
 	if m != nil {
-		return m.Management
+		return m.Name
 	}
-	return nil
+	return ""
 }
 
-// NodeManagement defines the set of node management services turned on for the
-// node pool.
-type NodeManagement struct {
-	// Whether the nodes will be automatically upgraded.
-	AutoUpgrade bool `protobuf:"varint,1,opt,name=auto_upgrade,json=autoUpgrade,proto3" json:"auto_upgrade,omitempty"`
-	// Whether the nodes will be automatically repaired.
-	AutoRepair bool `protobuf:"varint,2,opt,name=auto_repair,json=autoRepair,proto3" json:"auto_repair,omitempty"`
-	// Specifies the Auto Upgrade knobs for the node pool.
-	UpgradeOptions       *AutoUpgradeOptions `protobuf:"bytes,10,opt,name=upgrade_options,json=upgradeOptions,proto3" json:"upgrade_options,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
-	XXX_unrecognized     []byte              `json:"-"`
-	XXX_sizecache        int32               `json:"-"`
+// ListNodePoolsResponse is the result of ListNodePoolsRequest.
+type ListNodePoolsResponse struct {
+	// A list of node pools for a cluster.
+	NodePools            []*NodePool `protobuf:"bytes,1,rep,name=node_pools,json=nodePools,proto3" json:"node_pools,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-func (m *NodeManagement) Reset()         { *m = NodeManagement{} }
-func (m *NodeManagement) String() string { return proto.CompactTextString(m) }
-func (*NodeManagement) ProtoMessage()    {}
-func (*NodeManagement) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{34}
+func (m *ListNodePoolsResponse) Reset()         { *m = ListNodePoolsResponse{} }
+func (m *ListNodePoolsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListNodePoolsResponse) ProtoMessage()    {}
+func (*ListNodePoolsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{55}
 }
-func (m *NodeManagement) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_NodeManagement.Unmarshal(m, b)
+func (m *ListNodePoolsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListNodePoolsResponse.Unmarshal(m, b)
 }
-func (m *NodeManagement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_NodeManagement.Marshal(b, m, deterministic)
+func (m *ListNodePoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListNodePoolsResponse.Marshal(b, m, deterministic)
 }
-func (dst *NodeManagement) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_NodeManagement.Merge(dst, src)
+func (dst *ListNodePoolsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListNodePoolsResponse.Merge(dst, src)
 }
-func (m *NodeManagement) XXX_Size() int {
-	return xxx_messageInfo_NodeManagement.Size(m)
+func (m *ListNodePoolsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListNodePoolsResponse.Size(m)
 }
-func (m *NodeManagement) XXX_DiscardUnknown() {
-	xxx_messageInfo_NodeManagement.DiscardUnknown(m)
+func (m *ListNodePoolsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListNodePoolsResponse.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_NodeManagement proto.InternalMessageInfo
+var xxx_messageInfo_ListNodePoolsResponse proto.InternalMessageInfo
 
-func (m *NodeManagement) GetAutoUpgrade() bool {
+func (m *ListNodePoolsResponse) GetNodePools() []*NodePool {
 	if m != nil {
-		return m.AutoUpgrade
+		return m.NodePools
 	}
-	return false
+	return nil
+}
+
+// ClusterAutoscaling contains global, per-cluster information
+// required by Cluster Autoscaler to automatically adjust
+// the size of the cluster and create/delete
+// node pools based on the current needs.
+type ClusterAutoscaling struct {
+	// Enables automatic node pool creation and deletion.
+	EnableNodeAutoprovisioning bool `protobuf:"varint,1,opt,name=enable_node_autoprovisioning,json=enableNodeAutoprovisioning,proto3" json:"enable_node_autoprovisioning,omitempty"`
+	// Contains global constraints regarding minimum and maximum
+	// amount of resources in the cluster.
+	ResourceLimits       []*ResourceLimit `protobuf:"bytes,2,rep,name=resource_limits,json=resourceLimits,proto3" json:"resource_limits,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *ClusterAutoscaling) Reset()         { *m = ClusterAutoscaling{} }
+func (m *ClusterAutoscaling) String() string { return proto.CompactTextString(m) }
+func (*ClusterAutoscaling) ProtoMessage()    {}
+func (*ClusterAutoscaling) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{56}
+}
+func (m *ClusterAutoscaling) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClusterAutoscaling.Unmarshal(m, b)
+}
+func (m *ClusterAutoscaling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClusterAutoscaling.Marshal(b, m, deterministic)
+}
+func (dst *ClusterAutoscaling) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClusterAutoscaling.Merge(dst, src)
+}
+func (m *ClusterAutoscaling) XXX_Size() int {
+	return xxx_messageInfo_ClusterAutoscaling.Size(m)
+}
+func (m *ClusterAutoscaling) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClusterAutoscaling.DiscardUnknown(m)
 }
 
-func (m *NodeManagement) GetAutoRepair() bool {
+var xxx_messageInfo_ClusterAutoscaling proto.InternalMessageInfo
+
+func (m *ClusterAutoscaling) GetEnableNodeAutoprovisioning() bool {
 	if m != nil {
-		return m.AutoRepair
+		return m.EnableNodeAutoprovisioning
 	}
 	return false
 }
 
-func (m *NodeManagement) GetUpgradeOptions() *AutoUpgradeOptions {
+func (m *ClusterAutoscaling) GetResourceLimits() []*ResourceLimit {
 	if m != nil {
-		return m.UpgradeOptions
+		return m.ResourceLimits
 	}
 	return nil
 }
 
-// AutoUpgradeOptions defines the set of options for the user to control how
-// the Auto Upgrades will proceed.
-type AutoUpgradeOptions struct {
-	// [Output only] This field is set when upgrades are about to commence
-	// with the approximate start time for the upgrades, in
-	// [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
-	AutoUpgradeStartTime string `protobuf:"bytes,1,opt,name=auto_upgrade_start_time,json=autoUpgradeStartTime,proto3" json:"auto_upgrade_start_time,omitempty"`
-	// [Output only] This field is set when upgrades are about to commence
-	// with the description of the upgrade.
-	Description          string   `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+// Contains information about amount of some resource in the cluster.
+// For memory, value should be in GB.
+type ResourceLimit struct {
+	// Resource name "cpu", "memory" or gpu-specific string.
+	ResourceType string `protobuf:"bytes,1,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"`
+	// Minimum amount of the resource in the cluster.
+	Minimum int64 `protobuf:"varint,2,opt,name=minimum,proto3" json:"minimum,omitempty"`
+	// Maximum amount of the resource in the cluster.
+	Maximum              int64    `protobuf:"varint,3,opt,name=maximum,proto3" json:"maximum,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *AutoUpgradeOptions) Reset()         { *m = AutoUpgradeOptions{} }
-func (m *AutoUpgradeOptions) String() string { return proto.CompactTextString(m) }
-func (*AutoUpgradeOptions) ProtoMessage()    {}
-func (*AutoUpgradeOptions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{35}
+func (m *ResourceLimit) Reset()         { *m = ResourceLimit{} }
+func (m *ResourceLimit) String() string { return proto.CompactTextString(m) }
+func (*ResourceLimit) ProtoMessage()    {}
+func (*ResourceLimit) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{57}
 }
-func (m *AutoUpgradeOptions) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AutoUpgradeOptions.Unmarshal(m, b)
+func (m *ResourceLimit) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceLimit.Unmarshal(m, b)
 }
-func (m *AutoUpgradeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AutoUpgradeOptions.Marshal(b, m, deterministic)
+func (m *ResourceLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceLimit.Marshal(b, m, deterministic)
 }
-func (dst *AutoUpgradeOptions) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AutoUpgradeOptions.Merge(dst, src)
+func (dst *ResourceLimit) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceLimit.Merge(dst, src)
 }
-func (m *AutoUpgradeOptions) XXX_Size() int {
-	return xxx_messageInfo_AutoUpgradeOptions.Size(m)
+func (m *ResourceLimit) XXX_Size() int {
+	return xxx_messageInfo_ResourceLimit.Size(m)
 }
-func (m *AutoUpgradeOptions) XXX_DiscardUnknown() {
-	xxx_messageInfo_AutoUpgradeOptions.DiscardUnknown(m)
+func (m *ResourceLimit) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceLimit.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_AutoUpgradeOptions proto.InternalMessageInfo
+var xxx_messageInfo_ResourceLimit proto.InternalMessageInfo
 
-func (m *AutoUpgradeOptions) GetAutoUpgradeStartTime() string {
+func (m *ResourceLimit) GetResourceType() string {
 	if m != nil {
-		return m.AutoUpgradeStartTime
+		return m.ResourceType
 	}
 	return ""
 }
 
-func (m *AutoUpgradeOptions) GetDescription() string {
+func (m *ResourceLimit) GetMinimum() int64 {
 	if m != nil {
-		return m.Description
+		return m.Minimum
 	}
-	return ""
+	return 0
 }
 
-// MaintenancePolicy defines the maintenance policy to be used for the cluster.
-type MaintenancePolicy struct {
-	// Specifies the maintenance window in which maintenance may be performed.
-	Window               *MaintenanceWindow `protobuf:"bytes,1,opt,name=window,proto3" json:"window,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
-	XXX_unrecognized     []byte             `json:"-"`
-	XXX_sizecache        int32              `json:"-"`
+func (m *ResourceLimit) GetMaximum() int64 {
+	if m != nil {
+		return m.Maximum
+	}
+	return 0
 }
 
-func (m *MaintenancePolicy) Reset()         { *m = MaintenancePolicy{} }
-func (m *MaintenancePolicy) String() string { return proto.CompactTextString(m) }
-func (*MaintenancePolicy) ProtoMessage()    {}
-func (*MaintenancePolicy) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{36}
+// NodePoolAutoscaling contains information required by cluster autoscaler to
+// adjust the size of the node pool to the current cluster usage.
+type NodePoolAutoscaling struct {
+	// Is autoscaling enabled for this node pool.
+	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	// Minimum number of nodes in the NodePool. Must be >= 1 and <=
+	// max_node_count.
+	MinNodeCount int32 `protobuf:"varint,2,opt,name=min_node_count,json=minNodeCount,proto3" json:"min_node_count,omitempty"`
+	// Maximum number of nodes in the NodePool. Must be >= min_node_count. There
+	// has to enough quota to scale up the cluster.
+	MaxNodeCount int32 `protobuf:"varint,3,opt,name=max_node_count,json=maxNodeCount,proto3" json:"max_node_count,omitempty"`
+	// Can this node pool be deleted automatically.
+	Autoprovisioned      bool     `protobuf:"varint,4,opt,name=autoprovisioned,proto3" json:"autoprovisioned,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
-func (m *MaintenancePolicy) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_MaintenancePolicy.Unmarshal(m, b)
+
+func (m *NodePoolAutoscaling) Reset()         { *m = NodePoolAutoscaling{} }
+func (m *NodePoolAutoscaling) String() string { return proto.CompactTextString(m) }
+func (*NodePoolAutoscaling) ProtoMessage()    {}
+func (*NodePoolAutoscaling) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{58}
 }
-func (m *MaintenancePolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_MaintenancePolicy.Marshal(b, m, deterministic)
+func (m *NodePoolAutoscaling) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NodePoolAutoscaling.Unmarshal(m, b)
 }
-func (dst *MaintenancePolicy) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_MaintenancePolicy.Merge(dst, src)
+func (m *NodePoolAutoscaling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NodePoolAutoscaling.Marshal(b, m, deterministic)
 }
-func (m *MaintenancePolicy) XXX_Size() int {
-	return xxx_messageInfo_MaintenancePolicy.Size(m)
+func (dst *NodePoolAutoscaling) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NodePoolAutoscaling.Merge(dst, src)
 }
-func (m *MaintenancePolicy) XXX_DiscardUnknown() {
-	xxx_messageInfo_MaintenancePolicy.DiscardUnknown(m)
+func (m *NodePoolAutoscaling) XXX_Size() int {
+	return xxx_messageInfo_NodePoolAutoscaling.Size(m)
+}
+func (m *NodePoolAutoscaling) XXX_DiscardUnknown() {
+	xxx_messageInfo_NodePoolAutoscaling.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_MaintenancePolicy proto.InternalMessageInfo
+var xxx_messageInfo_NodePoolAutoscaling proto.InternalMessageInfo
 
-func (m *MaintenancePolicy) GetWindow() *MaintenanceWindow {
+func (m *NodePoolAutoscaling) GetEnabled() bool {
 	if m != nil {
-		return m.Window
+		return m.Enabled
 	}
-	return nil
+	return false
 }
 
-// MaintenanceWindow defines the maintenance window to be used for the cluster.
-type MaintenanceWindow struct {
-	// Unimplemented, reserved for future use.
-	// HourlyMaintenanceWindow hourly_maintenance_window = 1;
-	//
-	// Types that are valid to be assigned to Policy:
-	//	*MaintenanceWindow_DailyMaintenanceWindow
-	Policy               isMaintenanceWindow_Policy `protobuf_oneof:"policy"`
-	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
-	XXX_unrecognized     []byte                     `json:"-"`
-	XXX_sizecache        int32                      `json:"-"`
+func (m *NodePoolAutoscaling) GetMinNodeCount() int32 {
+	if m != nil {
+		return m.MinNodeCount
+	}
+	return 0
 }
 
-func (m *MaintenanceWindow) Reset()         { *m = MaintenanceWindow{} }
-func (m *MaintenanceWindow) String() string { return proto.CompactTextString(m) }
-func (*MaintenanceWindow) ProtoMessage()    {}
-func (*MaintenanceWindow) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{37}
+func (m *NodePoolAutoscaling) GetMaxNodeCount() int32 {
+	if m != nil {
+		return m.MaxNodeCount
+	}
+	return 0
 }
-func (m *MaintenanceWindow) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_MaintenanceWindow.Unmarshal(m, b)
+
+func (m *NodePoolAutoscaling) GetAutoprovisioned() bool {
+	if m != nil {
+		return m.Autoprovisioned
+	}
+	return false
 }
-func (m *MaintenanceWindow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_MaintenanceWindow.Marshal(b, m, deterministic)
+
+// SetLabelsRequest sets the Google Cloud Platform labels on a Google Container
+// Engine cluster, which will in turn set them for Google Compute Engine
+// resources used by that cluster
+type SetLabelsRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The labels to set for that cluster.
+	ResourceLabels map[string]string `protobuf:"bytes,4,rep,name=resource_labels,json=resourceLabels,proto3" json:"resource_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// The fingerprint of the previous set of labels for this resource,
+	// used to detect conflicts. The fingerprint is initially generated by
+	// Kubernetes Engine and changes after every request to modify or update
+	// labels. You must always provide an up-to-date fingerprint hash when
+	// updating or changing labels. Make a <code>get()</code> request to the
+	// resource to get the latest fingerprint.
+	LabelFingerprint string `protobuf:"bytes,5,opt,name=label_fingerprint,json=labelFingerprint,proto3" json:"label_fingerprint,omitempty"`
+	// The name (project, location, cluster id) of the cluster to set labels.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
-func (dst *MaintenanceWindow) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_MaintenanceWindow.Merge(dst, src)
+
+func (m *SetLabelsRequest) Reset()         { *m = SetLabelsRequest{} }
+func (m *SetLabelsRequest) String() string { return proto.CompactTextString(m) }
+func (*SetLabelsRequest) ProtoMessage()    {}
+func (*SetLabelsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{59}
 }
-func (m *MaintenanceWindow) XXX_Size() int {
-	return xxx_messageInfo_MaintenanceWindow.Size(m)
+func (m *SetLabelsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetLabelsRequest.Unmarshal(m, b)
 }
-func (m *MaintenanceWindow) XXX_DiscardUnknown() {
-	xxx_messageInfo_MaintenanceWindow.DiscardUnknown(m)
+func (m *SetLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetLabelsRequest.Marshal(b, m, deterministic)
 }
-
-var xxx_messageInfo_MaintenanceWindow proto.InternalMessageInfo
-
-type isMaintenanceWindow_Policy interface {
-	isMaintenanceWindow_Policy()
+func (dst *SetLabelsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetLabelsRequest.Merge(dst, src)
 }
-
-type MaintenanceWindow_DailyMaintenanceWindow struct {
-	DailyMaintenanceWindow *DailyMaintenanceWindow `protobuf:"bytes,2,opt,name=daily_maintenance_window,json=dailyMaintenanceWindow,proto3,oneof"`
+func (m *SetLabelsRequest) XXX_Size() int {
+	return xxx_messageInfo_SetLabelsRequest.Size(m)
+}
+func (m *SetLabelsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetLabelsRequest.DiscardUnknown(m)
 }
 
-func (*MaintenanceWindow_DailyMaintenanceWindow) isMaintenanceWindow_Policy() {}
+var xxx_messageInfo_SetLabelsRequest proto.InternalMessageInfo
 
-func (m *MaintenanceWindow) GetPolicy() isMaintenanceWindow_Policy {
+// Deprecated: Do not use.
+func (m *SetLabelsRequest) GetProjectId() string {
 	if m != nil {
-		return m.Policy
+		return m.ProjectId
 	}
-	return nil
+	return ""
 }
 
-func (m *MaintenanceWindow) GetDailyMaintenanceWindow() *DailyMaintenanceWindow {
-	if x, ok := m.GetPolicy().(*MaintenanceWindow_DailyMaintenanceWindow); ok {
-		return x.DailyMaintenanceWindow
+// Deprecated: Do not use.
+func (m *SetLabelsRequest) GetZone() string {
+	if m != nil {
+		return m.Zone
 	}
-	return nil
+	return ""
 }
 
-// XXX_OneofFuncs is for the internal use of the proto package.
-func (*MaintenanceWindow) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
-	return _MaintenanceWindow_OneofMarshaler, _MaintenanceWindow_OneofUnmarshaler, _MaintenanceWindow_OneofSizer, []interface{}{
-		(*MaintenanceWindow_DailyMaintenanceWindow)(nil),
+// Deprecated: Do not use.
+func (m *SetLabelsRequest) GetClusterId() string {
+	if m != nil {
+		return m.ClusterId
 	}
+	return ""
 }
 
-func _MaintenanceWindow_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
-	m := msg.(*MaintenanceWindow)
-	// policy
-	switch x := m.Policy.(type) {
-	case *MaintenanceWindow_DailyMaintenanceWindow:
-		b.EncodeVarint(2<<3 | proto.WireBytes)
-		if err := b.EncodeMessage(x.DailyMaintenanceWindow); err != nil {
-			return err
-		}
-	case nil:
-	default:
-		return fmt.Errorf("MaintenanceWindow.Policy has unexpected type %T", x)
+func (m *SetLabelsRequest) GetResourceLabels() map[string]string {
+	if m != nil {
+		return m.ResourceLabels
 	}
 	return nil
-}
-
-func _MaintenanceWindow_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
-	m := msg.(*MaintenanceWindow)
-	switch tag {
-	case 2: // policy.daily_maintenance_window
-		if wire != proto.WireBytes {
-			return true, proto.ErrInternalBadWireType
-		}
-		msg := new(DailyMaintenanceWindow)
-		err := b.DecodeMessage(msg)
-		m.Policy = &MaintenanceWindow_DailyMaintenanceWindow{msg}
-		return true, err
-	default:
-		return false, nil
-	}
-}
-
-func _MaintenanceWindow_OneofSizer(msg proto.Message) (n int) {
-	m := msg.(*MaintenanceWindow)
-	// policy
-	switch x := m.Policy.(type) {
-	case *MaintenanceWindow_DailyMaintenanceWindow:
-		s := proto.Size(x.DailyMaintenanceWindow)
-		n += 1 // tag and wire
-		n += proto.SizeVarint(uint64(s))
-		n += s
-	case nil:
-	default:
-		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+}
+
+func (m *SetLabelsRequest) GetLabelFingerprint() string {
+	if m != nil {
+		return m.LabelFingerprint
 	}
-	return n
+	return ""
 }
 
-// Time window specified for daily maintenance operations.
-type DailyMaintenanceWindow struct {
-	// Time within the maintenance window to start the maintenance operations.
-	// It must be in format "HH:MM”, where HH : [00-23] and MM : [00-59] GMT.
-	StartTime string `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
-	// [Output only] Duration of the time window, automatically chosen to be
-	// smallest possible in the given scenario.
-	Duration             string   `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"`
+func (m *SetLabelsRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// SetLegacyAbacRequest enables or disables the ABAC authorization mechanism for
+// a cluster.
+type SetLegacyAbacRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://support.google.com/cloud/answer/6158840).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster to update.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Whether ABAC authorization will be enabled in the cluster.
+	Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	// The name (project, location, cluster id) of the cluster to set legacy abac.
+	// Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *DailyMaintenanceWindow) Reset()         { *m = DailyMaintenanceWindow{} }
-func (m *DailyMaintenanceWindow) String() string { return proto.CompactTextString(m) }
-func (*DailyMaintenanceWindow) ProtoMessage()    {}
-func (*DailyMaintenanceWindow) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{38}
+func (m *SetLegacyAbacRequest) Reset()         { *m = SetLegacyAbacRequest{} }
+func (m *SetLegacyAbacRequest) String() string { return proto.CompactTextString(m) }
+func (*SetLegacyAbacRequest) ProtoMessage()    {}
+func (*SetLegacyAbacRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{60}
 }
-func (m *DailyMaintenanceWindow) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_DailyMaintenanceWindow.Unmarshal(m, b)
+func (m *SetLegacyAbacRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetLegacyAbacRequest.Unmarshal(m, b)
 }
-func (m *DailyMaintenanceWindow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_DailyMaintenanceWindow.Marshal(b, m, deterministic)
+func (m *SetLegacyAbacRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetLegacyAbacRequest.Marshal(b, m, deterministic)
 }
-func (dst *DailyMaintenanceWindow) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_DailyMaintenanceWindow.Merge(dst, src)
+func (dst *SetLegacyAbacRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetLegacyAbacRequest.Merge(dst, src)
 }
-func (m *DailyMaintenanceWindow) XXX_Size() int {
-	return xxx_messageInfo_DailyMaintenanceWindow.Size(m)
+func (m *SetLegacyAbacRequest) XXX_Size() int {
+	return xxx_messageInfo_SetLegacyAbacRequest.Size(m)
 }
-func (m *DailyMaintenanceWindow) XXX_DiscardUnknown() {
-	xxx_messageInfo_DailyMaintenanceWindow.DiscardUnknown(m)
+func (m *SetLegacyAbacRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetLegacyAbacRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_DailyMaintenanceWindow proto.InternalMessageInfo
+var xxx_messageInfo_SetLegacyAbacRequest proto.InternalMessageInfo
 
-func (m *DailyMaintenanceWindow) GetStartTime() string {
+// Deprecated: Do not use.
+func (m *SetLegacyAbacRequest) GetProjectId() string {
 	if m != nil {
-		return m.StartTime
+		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *DailyMaintenanceWindow) GetDuration() string {
+// Deprecated: Do not use.
+func (m *SetLegacyAbacRequest) GetZone() string {
 	if m != nil {
-		return m.Duration
+		return m.Zone
 	}
 	return ""
 }
 
-// SetNodePoolManagementRequest sets the node management properties of a node
-// pool.
-type SetNodePoolManagementRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+// Deprecated: Do not use.
+func (m *SetLegacyAbacRequest) GetClusterId() string {
+	if m != nil {
+		return m.ClusterId
+	}
+	return ""
+}
+
+func (m *SetLegacyAbacRequest) GetEnabled() bool {
+	if m != nil {
+		return m.Enabled
+	}
+	return false
+}
+
+func (m *SetLegacyAbacRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// StartIPRotationRequest creates a new IP for the cluster and then performs
+// a node upgrade on each node pool to point to the new IP.
+type StartIPRotationRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to update.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The name of the node pool to update.
-	// This field is deprecated, use name instead.
-	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"`
-	// NodeManagement configuration for the node pool.
-	Management *NodeManagement `protobuf:"bytes,5,opt,name=management,proto3" json:"management,omitempty"`
-	// The name (project, location, cluster, node pool id) of the node pool to set
-	// management properties. Specified in the format
-	// 'projects/*/locations/*/clusters/*/nodePools/*'.
-	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, cluster id) of the cluster to start IP
+	// rotation. Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+	// Whether to rotate credentials during IP rotation.
+	RotateCredentials    bool     `protobuf:"varint,7,opt,name=rotate_credentials,json=rotateCredentials,proto3" json:"rotate_credentials,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SetNodePoolManagementRequest) Reset()         { *m = SetNodePoolManagementRequest{} }
-func (m *SetNodePoolManagementRequest) String() string { return proto.CompactTextString(m) }
-func (*SetNodePoolManagementRequest) ProtoMessage()    {}
-func (*SetNodePoolManagementRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{39}
+func (m *StartIPRotationRequest) Reset()         { *m = StartIPRotationRequest{} }
+func (m *StartIPRotationRequest) String() string { return proto.CompactTextString(m) }
+func (*StartIPRotationRequest) ProtoMessage()    {}
+func (*StartIPRotationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{61}
 }
-func (m *SetNodePoolManagementRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SetNodePoolManagementRequest.Unmarshal(m, b)
+func (m *StartIPRotationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StartIPRotationRequest.Unmarshal(m, b)
 }
-func (m *SetNodePoolManagementRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SetNodePoolManagementRequest.Marshal(b, m, deterministic)
+func (m *StartIPRotationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StartIPRotationRequest.Marshal(b, m, deterministic)
 }
-func (dst *SetNodePoolManagementRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SetNodePoolManagementRequest.Merge(dst, src)
+func (dst *StartIPRotationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StartIPRotationRequest.Merge(dst, src)
 }
-func (m *SetNodePoolManagementRequest) XXX_Size() int {
-	return xxx_messageInfo_SetNodePoolManagementRequest.Size(m)
+func (m *StartIPRotationRequest) XXX_Size() int {
+	return xxx_messageInfo_StartIPRotationRequest.Size(m)
 }
-func (m *SetNodePoolManagementRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_SetNodePoolManagementRequest.DiscardUnknown(m)
+func (m *StartIPRotationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_StartIPRotationRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_SetNodePoolManagementRequest proto.InternalMessageInfo
+var xxx_messageInfo_StartIPRotationRequest proto.InternalMessageInfo
 
-func (m *SetNodePoolManagementRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *StartIPRotationRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *SetNodePoolManagementRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *StartIPRotationRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *SetNodePoolManagementRequest) GetClusterId() string {
+// Deprecated: Do not use.
+func (m *StartIPRotationRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *SetNodePoolManagementRequest) GetNodePoolId() string {
+func (m *StartIPRotationRequest) GetName() string {
 	if m != nil {
-		return m.NodePoolId
+		return m.Name
 	}
 	return ""
 }
 
-func (m *SetNodePoolManagementRequest) GetManagement() *NodeManagement {
-	if m != nil {
-		return m.Management
-	}
-	return nil
-}
-
-func (m *SetNodePoolManagementRequest) GetName() string {
+func (m *StartIPRotationRequest) GetRotateCredentials() bool {
 	if m != nil {
-		return m.Name
+		return m.RotateCredentials
 	}
-	return ""
+	return false
 }
 
-// RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed
-// NodePool upgrade. This will be an no-op if the last upgrade successfully
-// completed.
-type RollbackNodePoolUpgradeRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
+// CompleteIPRotationRequest moves the cluster master back into single-IP mode.
+type CompleteIPRotationRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to rollback.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The name of the node pool to rollback.
-	// This field is deprecated, use name instead.
-	NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId,proto3" json:"node_pool_id,omitempty"`
-	// The name (project, location, cluster, node pool id) of the node poll to
-	// rollback upgrade.
-	// Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'.
-	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// The name (project, location, cluster id) of the cluster to complete IP
+	// rotation. Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *RollbackNodePoolUpgradeRequest) Reset()         { *m = RollbackNodePoolUpgradeRequest{} }
-func (m *RollbackNodePoolUpgradeRequest) String() string { return proto.CompactTextString(m) }
-func (*RollbackNodePoolUpgradeRequest) ProtoMessage()    {}
-func (*RollbackNodePoolUpgradeRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{40}
+func (m *CompleteIPRotationRequest) Reset()         { *m = CompleteIPRotationRequest{} }
+func (m *CompleteIPRotationRequest) String() string { return proto.CompactTextString(m) }
+func (*CompleteIPRotationRequest) ProtoMessage()    {}
+func (*CompleteIPRotationRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{62}
 }
-func (m *RollbackNodePoolUpgradeRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_RollbackNodePoolUpgradeRequest.Unmarshal(m, b)
+func (m *CompleteIPRotationRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompleteIPRotationRequest.Unmarshal(m, b)
 }
-func (m *RollbackNodePoolUpgradeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_RollbackNodePoolUpgradeRequest.Marshal(b, m, deterministic)
+func (m *CompleteIPRotationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompleteIPRotationRequest.Marshal(b, m, deterministic)
 }
-func (dst *RollbackNodePoolUpgradeRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_RollbackNodePoolUpgradeRequest.Merge(dst, src)
+func (dst *CompleteIPRotationRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompleteIPRotationRequest.Merge(dst, src)
 }
-func (m *RollbackNodePoolUpgradeRequest) XXX_Size() int {
-	return xxx_messageInfo_RollbackNodePoolUpgradeRequest.Size(m)
+func (m *CompleteIPRotationRequest) XXX_Size() int {
+	return xxx_messageInfo_CompleteIPRotationRequest.Size(m)
 }
-func (m *RollbackNodePoolUpgradeRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_RollbackNodePoolUpgradeRequest.DiscardUnknown(m)
+func (m *CompleteIPRotationRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompleteIPRotationRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_RollbackNodePoolUpgradeRequest proto.InternalMessageInfo
+var xxx_messageInfo_CompleteIPRotationRequest proto.InternalMessageInfo
 
-func (m *RollbackNodePoolUpgradeRequest) GetProjectId() string {
+// Deprecated: Do not use.
+func (m *CompleteIPRotationRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *RollbackNodePoolUpgradeRequest) GetZone() string {
+// Deprecated: Do not use.
+func (m *CompleteIPRotationRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *RollbackNodePoolUpgradeRequest) GetClusterId() string {
+// Deprecated: Do not use.
+func (m *CompleteIPRotationRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *RollbackNodePoolUpgradeRequest) GetNodePoolId() string {
+func (m *CompleteIPRotationRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// AcceleratorConfig represents a Hardware Accelerator request.
+type AcceleratorConfig struct {
+	// The number of the accelerator cards exposed to an instance.
+	AcceleratorCount int64 `protobuf:"varint,1,opt,name=accelerator_count,json=acceleratorCount,proto3" json:"accelerator_count,omitempty"`
+	// The accelerator type resource name. List of supported accelerators
+	// [here](/compute/docs/gpus/#Introduction)
+	AcceleratorType      string   `protobuf:"bytes,2,opt,name=accelerator_type,json=acceleratorType,proto3" json:"accelerator_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AcceleratorConfig) Reset()         { *m = AcceleratorConfig{} }
+func (m *AcceleratorConfig) String() string { return proto.CompactTextString(m) }
+func (*AcceleratorConfig) ProtoMessage()    {}
+func (*AcceleratorConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{63}
+}
+func (m *AcceleratorConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AcceleratorConfig.Unmarshal(m, b)
+}
+func (m *AcceleratorConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AcceleratorConfig.Marshal(b, m, deterministic)
+}
+func (dst *AcceleratorConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AcceleratorConfig.Merge(dst, src)
+}
+func (m *AcceleratorConfig) XXX_Size() int {
+	return xxx_messageInfo_AcceleratorConfig.Size(m)
+}
+func (m *AcceleratorConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_AcceleratorConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AcceleratorConfig proto.InternalMessageInfo
+
+func (m *AcceleratorConfig) GetAcceleratorCount() int64 {
 	if m != nil {
-		return m.NodePoolId
+		return m.AcceleratorCount
 	}
-	return ""
+	return 0
 }
 
-func (m *RollbackNodePoolUpgradeRequest) GetName() string {
+func (m *AcceleratorConfig) GetAcceleratorType() string {
 	if m != nil {
-		return m.Name
+		return m.AcceleratorType
 	}
 	return ""
 }
 
-// ListNodePoolsResponse is the result of ListNodePoolsRequest.
-type ListNodePoolsResponse struct {
-	// A list of node pools for a cluster.
-	NodePools            []*NodePool `protobuf:"bytes,1,rep,name=node_pools,json=nodePools,proto3" json:"node_pools,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
-	XXX_unrecognized     []byte      `json:"-"`
-	XXX_sizecache        int32       `json:"-"`
+// WorkloadMetadataConfig defines the metadata configuration to expose to
+// workloads on the node pool.
+type WorkloadMetadataConfig struct {
+	// NodeMetadata is the configuration for how to expose the node metadata to
+	// the workload running on the node.
+	NodeMetadata         WorkloadMetadataConfig_NodeMetadata `protobuf:"varint,1,opt,name=node_metadata,json=nodeMetadata,proto3,enum=google.container.v1beta1.WorkloadMetadataConfig_NodeMetadata" json:"node_metadata,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
 }
 
-func (m *ListNodePoolsResponse) Reset()         { *m = ListNodePoolsResponse{} }
-func (m *ListNodePoolsResponse) String() string { return proto.CompactTextString(m) }
-func (*ListNodePoolsResponse) ProtoMessage()    {}
-func (*ListNodePoolsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{41}
+func (m *WorkloadMetadataConfig) Reset()         { *m = WorkloadMetadataConfig{} }
+func (m *WorkloadMetadataConfig) String() string { return proto.CompactTextString(m) }
+func (*WorkloadMetadataConfig) ProtoMessage()    {}
+func (*WorkloadMetadataConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{64}
 }
-func (m *ListNodePoolsResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ListNodePoolsResponse.Unmarshal(m, b)
+func (m *WorkloadMetadataConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WorkloadMetadataConfig.Unmarshal(m, b)
 }
-func (m *ListNodePoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ListNodePoolsResponse.Marshal(b, m, deterministic)
+func (m *WorkloadMetadataConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WorkloadMetadataConfig.Marshal(b, m, deterministic)
 }
-func (dst *ListNodePoolsResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListNodePoolsResponse.Merge(dst, src)
+func (dst *WorkloadMetadataConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WorkloadMetadataConfig.Merge(dst, src)
 }
-func (m *ListNodePoolsResponse) XXX_Size() int {
-	return xxx_messageInfo_ListNodePoolsResponse.Size(m)
+func (m *WorkloadMetadataConfig) XXX_Size() int {
+	return xxx_messageInfo_WorkloadMetadataConfig.Size(m)
 }
-func (m *ListNodePoolsResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_ListNodePoolsResponse.DiscardUnknown(m)
+func (m *WorkloadMetadataConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_WorkloadMetadataConfig.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_ListNodePoolsResponse proto.InternalMessageInfo
+var xxx_messageInfo_WorkloadMetadataConfig proto.InternalMessageInfo
 
-func (m *ListNodePoolsResponse) GetNodePools() []*NodePool {
+func (m *WorkloadMetadataConfig) GetNodeMetadata() WorkloadMetadataConfig_NodeMetadata {
 	if m != nil {
-		return m.NodePools
+		return m.NodeMetadata
 	}
-	return nil
+	return WorkloadMetadataConfig_UNSPECIFIED
 }
 
-// NodePoolAutoscaling contains information required by cluster autoscaler to
-// adjust the size of the node pool to the current cluster usage.
-type NodePoolAutoscaling struct {
-	// Is autoscaling enabled for this node pool.
-	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
-	// Minimum number of nodes in the NodePool. Must be >= 1 and <=
-	// max_node_count.
-	MinNodeCount int32 `protobuf:"varint,2,opt,name=min_node_count,json=minNodeCount,proto3" json:"min_node_count,omitempty"`
-	// Maximum number of nodes in the NodePool. Must be >= min_node_count. There
-	// has to enough quota to scale up the cluster.
-	MaxNodeCount         int32    `protobuf:"varint,3,opt,name=max_node_count,json=maxNodeCount,proto3" json:"max_node_count,omitempty"`
+// SetNetworkPolicyRequest enables/disables network policy for a cluster.
+type SetNetworkPolicyRequest struct {
+	// Deprecated. The Google Developers Console [project ID or project
+	// number](https://developers.google.com/console/help/new/#projectnumber).
+	// This field has been deprecated and replaced by the name field.
+	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the Google Compute Engine
+	// [zone](/compute/docs/zones#available) in which the cluster
+	// resides.
+	// This field has been deprecated and replaced by the name field.
+	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` // Deprecated: Do not use.
+	// Deprecated. The name of the cluster.
+	// This field has been deprecated and replaced by the name field.
+	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Deprecated: Do not use.
+	// Configuration options for the NetworkPolicy feature.
+	NetworkPolicy *NetworkPolicy `protobuf:"bytes,4,opt,name=network_policy,json=networkPolicy,proto3" json:"network_policy,omitempty"`
+	// The name (project, location, cluster id) of the cluster to set networking
+	// policy. Specified in the format 'projects/*/locations/*/clusters/*'.
+	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *NodePoolAutoscaling) Reset()         { *m = NodePoolAutoscaling{} }
-func (m *NodePoolAutoscaling) String() string { return proto.CompactTextString(m) }
-func (*NodePoolAutoscaling) ProtoMessage()    {}
-func (*NodePoolAutoscaling) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{42}
+func (m *SetNetworkPolicyRequest) Reset()         { *m = SetNetworkPolicyRequest{} }
+func (m *SetNetworkPolicyRequest) String() string { return proto.CompactTextString(m) }
+func (*SetNetworkPolicyRequest) ProtoMessage()    {}
+func (*SetNetworkPolicyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{65}
 }
-func (m *NodePoolAutoscaling) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_NodePoolAutoscaling.Unmarshal(m, b)
+func (m *SetNetworkPolicyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetNetworkPolicyRequest.Unmarshal(m, b)
 }
-func (m *NodePoolAutoscaling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_NodePoolAutoscaling.Marshal(b, m, deterministic)
+func (m *SetNetworkPolicyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetNetworkPolicyRequest.Marshal(b, m, deterministic)
 }
-func (dst *NodePoolAutoscaling) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_NodePoolAutoscaling.Merge(dst, src)
+func (dst *SetNetworkPolicyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetNetworkPolicyRequest.Merge(dst, src)
 }
-func (m *NodePoolAutoscaling) XXX_Size() int {
-	return xxx_messageInfo_NodePoolAutoscaling.Size(m)
+func (m *SetNetworkPolicyRequest) XXX_Size() int {
+	return xxx_messageInfo_SetNetworkPolicyRequest.Size(m)
 }
-func (m *NodePoolAutoscaling) XXX_DiscardUnknown() {
-	xxx_messageInfo_NodePoolAutoscaling.DiscardUnknown(m)
+func (m *SetNetworkPolicyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetNetworkPolicyRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_NodePoolAutoscaling proto.InternalMessageInfo
+var xxx_messageInfo_SetNetworkPolicyRequest proto.InternalMessageInfo
 
-func (m *NodePoolAutoscaling) GetEnabled() bool {
+// Deprecated: Do not use.
+func (m *SetNetworkPolicyRequest) GetProjectId() string {
 	if m != nil {
-		return m.Enabled
+		return m.ProjectId
 	}
-	return false
+	return ""
 }
 
-func (m *NodePoolAutoscaling) GetMinNodeCount() int32 {
+// Deprecated: Do not use.
+func (m *SetNetworkPolicyRequest) GetZone() string {
 	if m != nil {
-		return m.MinNodeCount
+		return m.Zone
 	}
-	return 0
+	return ""
 }
 
-func (m *NodePoolAutoscaling) GetMaxNodeCount() int32 {
+// Deprecated: Do not use.
+func (m *SetNetworkPolicyRequest) GetClusterId() string {
 	if m != nil {
-		return m.MaxNodeCount
+		return m.ClusterId
 	}
-	return 0
+	return ""
 }
 
-// SetLabelsRequest sets the Google Cloud Platform labels on a Google Container
-// Engine cluster, which will in turn set them for Google Compute Engine
-// resources used by that cluster
-type SetLabelsRequest struct {
+func (m *SetNetworkPolicyRequest) GetNetworkPolicy() *NetworkPolicy {
+	if m != nil {
+		return m.NetworkPolicy
+	}
+	return nil
+}
+
+func (m *SetNetworkPolicyRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// SetMaintenancePolicyRequest sets the maintenance policy for a cluster.
+type SetMaintenancePolicyRequest struct {
 	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use name instead.
+	// number](https://support.google.com/cloud/answer/6158840).
 	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
 	// The name of the Google Compute Engine
 	// [zone](/compute/docs/zones#available) in which the cluster
 	// resides.
-	// This field is deprecated, use name instead.
 	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use name instead.
+	// The name of the cluster to update.
 	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The labels to set for that cluster.
-	ResourceLabels map[string]string `protobuf:"bytes,4,rep,name=resource_labels,json=resourceLabels,proto3" json:"resource_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	// The fingerprint of the previous set of labels for this resource,
-	// used to detect conflicts. The fingerprint is initially generated by
-	// Container Engine and changes after every request to modify or update
-	// labels. You must always provide an up-to-date fingerprint hash when
-	// updating or changing labels. Make a <code>get()</code> request to the
-	// resource to get the latest fingerprint.
-	LabelFingerprint string `protobuf:"bytes,5,opt,name=label_fingerprint,json=labelFingerprint,proto3" json:"label_fingerprint,omitempty"`
-	// The name (project, location, cluster id) of the cluster to set labels.
+	// The maintenance policy to be set for the cluster. An empty field
+	// clears the existing maintenance policy.
+	MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,4,opt,name=maintenance_policy,json=maintenancePolicy,proto3" json:"maintenance_policy,omitempty"`
+	// The name (project, location, cluster id) of the cluster to set maintenance
+	// policy.
 	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
+	Name                 string   `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SetLabelsRequest) Reset()         { *m = SetLabelsRequest{} }
-func (m *SetLabelsRequest) String() string { return proto.CompactTextString(m) }
-func (*SetLabelsRequest) ProtoMessage()    {}
-func (*SetLabelsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{43}
+func (m *SetMaintenancePolicyRequest) Reset()         { *m = SetMaintenancePolicyRequest{} }
+func (m *SetMaintenancePolicyRequest) String() string { return proto.CompactTextString(m) }
+func (*SetMaintenancePolicyRequest) ProtoMessage()    {}
+func (*SetMaintenancePolicyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{66}
 }
-func (m *SetLabelsRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SetLabelsRequest.Unmarshal(m, b)
+func (m *SetMaintenancePolicyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetMaintenancePolicyRequest.Unmarshal(m, b)
 }
-func (m *SetLabelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SetLabelsRequest.Marshal(b, m, deterministic)
+func (m *SetMaintenancePolicyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetMaintenancePolicyRequest.Marshal(b, m, deterministic)
 }
-func (dst *SetLabelsRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SetLabelsRequest.Merge(dst, src)
+func (dst *SetMaintenancePolicyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetMaintenancePolicyRequest.Merge(dst, src)
 }
-func (m *SetLabelsRequest) XXX_Size() int {
-	return xxx_messageInfo_SetLabelsRequest.Size(m)
+func (m *SetMaintenancePolicyRequest) XXX_Size() int {
+	return xxx_messageInfo_SetMaintenancePolicyRequest.Size(m)
 }
-func (m *SetLabelsRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_SetLabelsRequest.DiscardUnknown(m)
+func (m *SetMaintenancePolicyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetMaintenancePolicyRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_SetLabelsRequest proto.InternalMessageInfo
+var xxx_messageInfo_SetMaintenancePolicyRequest proto.InternalMessageInfo
 
-func (m *SetLabelsRequest) GetProjectId() string {
+func (m *SetMaintenancePolicyRequest) GetProjectId() string {
 	if m != nil {
 		return m.ProjectId
 	}
 	return ""
 }
 
-func (m *SetLabelsRequest) GetZone() string {
+func (m *SetMaintenancePolicyRequest) GetZone() string {
 	if m != nil {
 		return m.Zone
 	}
 	return ""
 }
 
-func (m *SetLabelsRequest) GetClusterId() string {
+func (m *SetMaintenancePolicyRequest) GetClusterId() string {
 	if m != nil {
 		return m.ClusterId
 	}
 	return ""
 }
 
-func (m *SetLabelsRequest) GetResourceLabels() map[string]string {
+func (m *SetMaintenancePolicyRequest) GetMaintenancePolicy() *MaintenancePolicy {
 	if m != nil {
-		return m.ResourceLabels
+		return m.MaintenancePolicy
 	}
 	return nil
 }
 
-func (m *SetLabelsRequest) GetLabelFingerprint() string {
+func (m *SetMaintenancePolicyRequest) GetName() string {
 	if m != nil {
-		return m.LabelFingerprint
+		return m.Name
 	}
 	return ""
 }
 
-func (m *SetLabelsRequest) GetName() string {
+// ListLocationsRequest is used to request the locations that offer GKE.
+type ListLocationsRequest struct {
+	// Contains the name of the resource requested.
+	// Specified in the format 'projects/*'.
+	Parent               string   `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListLocationsRequest) Reset()         { *m = ListLocationsRequest{} }
+func (m *ListLocationsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListLocationsRequest) ProtoMessage()    {}
+func (*ListLocationsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{67}
+}
+func (m *ListLocationsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListLocationsRequest.Unmarshal(m, b)
+}
+func (m *ListLocationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListLocationsRequest.Marshal(b, m, deterministic)
+}
+func (dst *ListLocationsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListLocationsRequest.Merge(dst, src)
+}
+func (m *ListLocationsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListLocationsRequest.Size(m)
+}
+func (m *ListLocationsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListLocationsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListLocationsRequest proto.InternalMessageInfo
+
+func (m *ListLocationsRequest) GetParent() string {
 	if m != nil {
-		return m.Name
+		return m.Parent
 	}
 	return ""
 }
 
-// SetLegacyAbacRequest enables or disables the ABAC authorization mechanism for
-// a cluster.
-type SetLegacyAbacRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://support.google.com/cloud/answer/6158840).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
-	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to update.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// Whether ABAC authorization will be enabled in the cluster.
-	Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"`
-	// The name (project, location, cluster id) of the cluster to set legacy abac.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+// ListLocationsResponse returns the list of all GKE locations and their
+// recommendation state.
+type ListLocationsResponse struct {
+	// A full list of GKE locations.
+	Locations []*Location `protobuf:"bytes,1,rep,name=locations,proto3" json:"locations,omitempty"`
+	// Only return ListLocationsResponse that occur after the page_token. This
+	// value should be populated from the ListLocationsResponse.next_page_token if
+	// that response token was set (which happens when listing more Locations than
+	// fit in a single ListLocationsResponse).
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SetLegacyAbacRequest) Reset()         { *m = SetLegacyAbacRequest{} }
-func (m *SetLegacyAbacRequest) String() string { return proto.CompactTextString(m) }
-func (*SetLegacyAbacRequest) ProtoMessage()    {}
-func (*SetLegacyAbacRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{44}
+func (m *ListLocationsResponse) Reset()         { *m = ListLocationsResponse{} }
+func (m *ListLocationsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListLocationsResponse) ProtoMessage()    {}
+func (*ListLocationsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{68}
 }
-func (m *SetLegacyAbacRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SetLegacyAbacRequest.Unmarshal(m, b)
+func (m *ListLocationsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListLocationsResponse.Unmarshal(m, b)
 }
-func (m *SetLegacyAbacRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SetLegacyAbacRequest.Marshal(b, m, deterministic)
+func (m *ListLocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListLocationsResponse.Marshal(b, m, deterministic)
 }
-func (dst *SetLegacyAbacRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SetLegacyAbacRequest.Merge(dst, src)
+func (dst *ListLocationsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListLocationsResponse.Merge(dst, src)
 }
-func (m *SetLegacyAbacRequest) XXX_Size() int {
-	return xxx_messageInfo_SetLegacyAbacRequest.Size(m)
+func (m *ListLocationsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListLocationsResponse.Size(m)
 }
-func (m *SetLegacyAbacRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_SetLegacyAbacRequest.DiscardUnknown(m)
+func (m *ListLocationsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListLocationsResponse.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_SetLegacyAbacRequest proto.InternalMessageInfo
+var xxx_messageInfo_ListLocationsResponse proto.InternalMessageInfo
 
-func (m *SetLegacyAbacRequest) GetProjectId() string {
+func (m *ListLocationsResponse) GetLocations() []*Location {
 	if m != nil {
-		return m.ProjectId
+		return m.Locations
 	}
-	return ""
+	return nil
 }
 
-func (m *SetLegacyAbacRequest) GetZone() string {
+func (m *ListLocationsResponse) GetNextPageToken() string {
 	if m != nil {
-		return m.Zone
+		return m.NextPageToken
 	}
 	return ""
 }
 
-func (m *SetLegacyAbacRequest) GetClusterId() string {
+// Location returns the location name, and if the location is recommended
+// for GKE cluster scheduling.
+type Location struct {
+	// Contains the type of location this Location is for.
+	// Regional or Zonal.
+	Type Location_LocationType `protobuf:"varint,1,opt,name=type,proto3,enum=google.container.v1beta1.Location_LocationType" json:"type,omitempty"`
+	// Contains the name of the resource requested.
+	// Specified in the format 'projects/*/locations/*'.
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// Whether the location is recomended for GKE cluster scheduling.
+	Recommended          bool     `protobuf:"varint,3,opt,name=recommended,proto3" json:"recommended,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Location) Reset()         { *m = Location{} }
+func (m *Location) String() string { return proto.CompactTextString(m) }
+func (*Location) ProtoMessage()    {}
+func (*Location) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{69}
+}
+func (m *Location) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Location.Unmarshal(m, b)
+}
+func (m *Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Location.Marshal(b, m, deterministic)
+}
+func (dst *Location) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Location.Merge(dst, src)
+}
+func (m *Location) XXX_Size() int {
+	return xxx_messageInfo_Location.Size(m)
+}
+func (m *Location) XXX_DiscardUnknown() {
+	xxx_messageInfo_Location.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Location proto.InternalMessageInfo
+
+func (m *Location) GetType() Location_LocationType {
 	if m != nil {
-		return m.ClusterId
+		return m.Type
 	}
-	return ""
+	return Location_LOCATION_TYPE_UNSPECIFIED
 }
 
-func (m *SetLegacyAbacRequest) GetEnabled() bool {
+func (m *Location) GetName() string {
 	if m != nil {
-		return m.Enabled
+		return m.Name
 	}
-	return false
+	return ""
 }
 
-func (m *SetLegacyAbacRequest) GetName() string {
+func (m *Location) GetRecommended() bool {
 	if m != nil {
-		return m.Name
+		return m.Recommended
 	}
-	return ""
+	return false
 }
 
-// StartIPRotationRequest creates a new IP for the cluster and then performs
-// a node upgrade on each node pool to point to the new IP.
-type StartIPRotationRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
-	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The name (project, location, cluster id) of the cluster to start IP rotation.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+// StatusCondition describes why a cluster or a node pool has a certain status
+// (e.g., ERROR or DEGRADED).
+type StatusCondition struct {
+	// Machine-friendly representation of the condition
+	Code StatusCondition_Code `protobuf:"varint,1,opt,name=code,proto3,enum=google.container.v1beta1.StatusCondition_Code" json:"code,omitempty"`
+	// Human-friendly representation of the condition
+	Message              string   `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *StartIPRotationRequest) Reset()         { *m = StartIPRotationRequest{} }
-func (m *StartIPRotationRequest) String() string { return proto.CompactTextString(m) }
-func (*StartIPRotationRequest) ProtoMessage()    {}
-func (*StartIPRotationRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{45}
+func (m *StatusCondition) Reset()         { *m = StatusCondition{} }
+func (m *StatusCondition) String() string { return proto.CompactTextString(m) }
+func (*StatusCondition) ProtoMessage()    {}
+func (*StatusCondition) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{70}
 }
-func (m *StartIPRotationRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_StartIPRotationRequest.Unmarshal(m, b)
+func (m *StatusCondition) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StatusCondition.Unmarshal(m, b)
 }
-func (m *StartIPRotationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_StartIPRotationRequest.Marshal(b, m, deterministic)
+func (m *StatusCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StatusCondition.Marshal(b, m, deterministic)
 }
-func (dst *StartIPRotationRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_StartIPRotationRequest.Merge(dst, src)
+func (dst *StatusCondition) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StatusCondition.Merge(dst, src)
 }
-func (m *StartIPRotationRequest) XXX_Size() int {
-	return xxx_messageInfo_StartIPRotationRequest.Size(m)
+func (m *StatusCondition) XXX_Size() int {
+	return xxx_messageInfo_StatusCondition.Size(m)
 }
-func (m *StartIPRotationRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_StartIPRotationRequest.DiscardUnknown(m)
+func (m *StatusCondition) XXX_DiscardUnknown() {
+	xxx_messageInfo_StatusCondition.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_StartIPRotationRequest proto.InternalMessageInfo
+var xxx_messageInfo_StatusCondition proto.InternalMessageInfo
 
-func (m *StartIPRotationRequest) GetProjectId() string {
+func (m *StatusCondition) GetCode() StatusCondition_Code {
 	if m != nil {
-		return m.ProjectId
+		return m.Code
 	}
-	return ""
+	return StatusCondition_UNKNOWN
 }
 
-func (m *StartIPRotationRequest) GetZone() string {
+func (m *StatusCondition) GetMessage() string {
 	if m != nil {
-		return m.Zone
+		return m.Message
 	}
 	return ""
 }
 
-func (m *StartIPRotationRequest) GetClusterId() string {
+// NetworkConfig reports the relative names of network & subnetwork.
+type NetworkConfig struct {
+	// Output only. The relative name of the Google Compute Engine
+	// [network][google.container.v1beta1.NetworkConfig.network](/compute/docs/networks-and-firewalls#networks) to which
+	// the cluster is connected.
+	// Example: projects/my-project/global/networks/my-network
+	Network string `protobuf:"bytes,1,opt,name=network,proto3" json:"network,omitempty"`
+	// Output only. The relative name of the Google Compute Engine
+	// [subnetwork](/compute/docs/vpc) to which the cluster is connected.
+	// Example: projects/my-project/regions/us-central1/subnetworks/my-subnet
+	Subnetwork           string   `protobuf:"bytes,2,opt,name=subnetwork,proto3" json:"subnetwork,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NetworkConfig) Reset()         { *m = NetworkConfig{} }
+func (m *NetworkConfig) String() string { return proto.CompactTextString(m) }
+func (*NetworkConfig) ProtoMessage()    {}
+func (*NetworkConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{71}
+}
+func (m *NetworkConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NetworkConfig.Unmarshal(m, b)
+}
+func (m *NetworkConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NetworkConfig.Marshal(b, m, deterministic)
+}
+func (dst *NetworkConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NetworkConfig.Merge(dst, src)
+}
+func (m *NetworkConfig) XXX_Size() int {
+	return xxx_messageInfo_NetworkConfig.Size(m)
+}
+func (m *NetworkConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_NetworkConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NetworkConfig proto.InternalMessageInfo
+
+func (m *NetworkConfig) GetNetwork() string {
 	if m != nil {
-		return m.ClusterId
+		return m.Network
 	}
 	return ""
 }
 
-func (m *StartIPRotationRequest) GetName() string {
+func (m *NetworkConfig) GetSubnetwork() string {
 	if m != nil {
-		return m.Name
+		return m.Subnetwork
 	}
 	return ""
 }
 
-// CompleteIPRotationRequest moves the cluster master back into single-IP mode.
-type CompleteIPRotationRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
-	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The name (project, location, cluster id) of the cluster to complete IP rotation.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
+// ListUsableSubnetworksRequest requests the list of usable subnetworks.
+// available to a user for creating clusters.
+type ListUsableSubnetworksRequest struct {
+	// The parent project where subnetworks are usable.
+	// Specified in the format 'projects/*'.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Filtering currently only supports equality on the networkProjectId and must
+	// be in the form: "networkProjectId=[PROJECTID]", where `networkProjectId`
+	// is the project which owns the listed subnetworks. This defaults to the
+	// parent project ID.
+	Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"`
+	// The max number of results per page that should be returned. If the number
+	// of available results is larger than `page_size`, a `next_page_token` is
+	// returned which can be used to get the next page of results in subsequent
+	// requests. Acceptable values are 0 to 500, inclusive. (Default: 500)
+	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Specifies a page token to use. Set this to the nextPageToken returned by
+	// previous list requests to get the next page of results.
+	PageToken            string   `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *CompleteIPRotationRequest) Reset()         { *m = CompleteIPRotationRequest{} }
-func (m *CompleteIPRotationRequest) String() string { return proto.CompactTextString(m) }
-func (*CompleteIPRotationRequest) ProtoMessage()    {}
-func (*CompleteIPRotationRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{46}
+func (m *ListUsableSubnetworksRequest) Reset()         { *m = ListUsableSubnetworksRequest{} }
+func (m *ListUsableSubnetworksRequest) String() string { return proto.CompactTextString(m) }
+func (*ListUsableSubnetworksRequest) ProtoMessage()    {}
+func (*ListUsableSubnetworksRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{72}
 }
-func (m *CompleteIPRotationRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_CompleteIPRotationRequest.Unmarshal(m, b)
+func (m *ListUsableSubnetworksRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListUsableSubnetworksRequest.Unmarshal(m, b)
 }
-func (m *CompleteIPRotationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_CompleteIPRotationRequest.Marshal(b, m, deterministic)
+func (m *ListUsableSubnetworksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListUsableSubnetworksRequest.Marshal(b, m, deterministic)
 }
-func (dst *CompleteIPRotationRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CompleteIPRotationRequest.Merge(dst, src)
+func (dst *ListUsableSubnetworksRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListUsableSubnetworksRequest.Merge(dst, src)
 }
-func (m *CompleteIPRotationRequest) XXX_Size() int {
-	return xxx_messageInfo_CompleteIPRotationRequest.Size(m)
+func (m *ListUsableSubnetworksRequest) XXX_Size() int {
+	return xxx_messageInfo_ListUsableSubnetworksRequest.Size(m)
 }
-func (m *CompleteIPRotationRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_CompleteIPRotationRequest.DiscardUnknown(m)
+func (m *ListUsableSubnetworksRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListUsableSubnetworksRequest.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_CompleteIPRotationRequest proto.InternalMessageInfo
+var xxx_messageInfo_ListUsableSubnetworksRequest proto.InternalMessageInfo
 
-func (m *CompleteIPRotationRequest) GetProjectId() string {
+func (m *ListUsableSubnetworksRequest) GetParent() string {
 	if m != nil {
-		return m.ProjectId
+		return m.Parent
 	}
 	return ""
 }
 
-func (m *CompleteIPRotationRequest) GetZone() string {
+func (m *ListUsableSubnetworksRequest) GetFilter() string {
 	if m != nil {
-		return m.Zone
+		return m.Filter
 	}
 	return ""
 }
 
-func (m *CompleteIPRotationRequest) GetClusterId() string {
+func (m *ListUsableSubnetworksRequest) GetPageSize() int32 {
 	if m != nil {
-		return m.ClusterId
+		return m.PageSize
 	}
-	return ""
+	return 0
 }
 
-func (m *CompleteIPRotationRequest) GetName() string {
+func (m *ListUsableSubnetworksRequest) GetPageToken() string {
 	if m != nil {
-		return m.Name
+		return m.PageToken
 	}
 	return ""
 }
 
-// AcceleratorConfig represents a Hardware Accelerator request.
-type AcceleratorConfig struct {
-	// The number of the accelerator cards exposed to an instance.
-	AcceleratorCount int64 `protobuf:"varint,1,opt,name=accelerator_count,json=acceleratorCount,proto3" json:"accelerator_count,omitempty"`
-	// The accelerator type resource name. List of supported accelerators
-	// [here](/compute/docs/gpus/#Introduction)
-	AcceleratorType      string   `protobuf:"bytes,2,opt,name=accelerator_type,json=acceleratorType,proto3" json:"accelerator_type,omitempty"`
+// ListUsableSubnetworksResponse is the response of
+// ListUsableSubnetworksRequest.
+type ListUsableSubnetworksResponse struct {
+	// A list of usable subnetworks in the specified network project.
+	Subnetworks []*UsableSubnetwork `protobuf:"bytes,1,rep,name=subnetworks,proto3" json:"subnetworks,omitempty"`
+	// This token allows you to get the next page of results for list requests.
+	// If the number of results is larger than `page_size`, use the
+	// `next_page_token` as a value for the query parameter `page_token` in the
+	// next request. The value will become empty when there are no more pages.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *AcceleratorConfig) Reset()         { *m = AcceleratorConfig{} }
-func (m *AcceleratorConfig) String() string { return proto.CompactTextString(m) }
-func (*AcceleratorConfig) ProtoMessage()    {}
-func (*AcceleratorConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{47}
+func (m *ListUsableSubnetworksResponse) Reset()         { *m = ListUsableSubnetworksResponse{} }
+func (m *ListUsableSubnetworksResponse) String() string { return proto.CompactTextString(m) }
+func (*ListUsableSubnetworksResponse) ProtoMessage()    {}
+func (*ListUsableSubnetworksResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{73}
 }
-func (m *AcceleratorConfig) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AcceleratorConfig.Unmarshal(m, b)
+func (m *ListUsableSubnetworksResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListUsableSubnetworksResponse.Unmarshal(m, b)
 }
-func (m *AcceleratorConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AcceleratorConfig.Marshal(b, m, deterministic)
+func (m *ListUsableSubnetworksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListUsableSubnetworksResponse.Marshal(b, m, deterministic)
 }
-func (dst *AcceleratorConfig) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AcceleratorConfig.Merge(dst, src)
+func (dst *ListUsableSubnetworksResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListUsableSubnetworksResponse.Merge(dst, src)
 }
-func (m *AcceleratorConfig) XXX_Size() int {
-	return xxx_messageInfo_AcceleratorConfig.Size(m)
+func (m *ListUsableSubnetworksResponse) XXX_Size() int {
+	return xxx_messageInfo_ListUsableSubnetworksResponse.Size(m)
 }
-func (m *AcceleratorConfig) XXX_DiscardUnknown() {
-	xxx_messageInfo_AcceleratorConfig.DiscardUnknown(m)
+func (m *ListUsableSubnetworksResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListUsableSubnetworksResponse.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_AcceleratorConfig proto.InternalMessageInfo
+var xxx_messageInfo_ListUsableSubnetworksResponse proto.InternalMessageInfo
 
-func (m *AcceleratorConfig) GetAcceleratorCount() int64 {
+func (m *ListUsableSubnetworksResponse) GetSubnetworks() []*UsableSubnetwork {
 	if m != nil {
-		return m.AcceleratorCount
+		return m.Subnetworks
 	}
-	return 0
+	return nil
 }
 
-func (m *AcceleratorConfig) GetAcceleratorType() string {
+func (m *ListUsableSubnetworksResponse) GetNextPageToken() string {
 	if m != nil {
-		return m.AcceleratorType
+		return m.NextPageToken
 	}
 	return ""
 }
 
-// SetNetworkPolicyRequest enables/disables network policy for a cluster.
-type SetNetworkPolicyRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://developers.google.com/console/help/new/#projectnumber).
-	// This field is deprecated, use name instead.
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
-	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides.
-	// This field is deprecated, use name instead.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster.
-	// This field is deprecated, use name instead.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// Configuration options for the NetworkPolicy feature.
-	NetworkPolicy *NetworkPolicy `protobuf:"bytes,4,opt,name=network_policy,json=networkPolicy,proto3" json:"network_policy,omitempty"`
-	// The name (project, location, cluster id) of the cluster to set networking policy.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+// Secondary IP range of a usable subnetwork.
+type UsableSubnetworkSecondaryRange struct {
+	// The name associated with this subnetwork secondary range, used when adding
+	// an alias IP range to a VM instance.
+	RangeName string `protobuf:"bytes,1,opt,name=range_name,json=rangeName,proto3" json:"range_name,omitempty"`
+	// The range of IP addresses belonging to this subnetwork secondary range.
+	IpCidrRange string `protobuf:"bytes,2,opt,name=ip_cidr_range,json=ipCidrRange,proto3" json:"ip_cidr_range,omitempty"`
+	// This field is to determine the status of the secondary range programmably.
+	Status               UsableSubnetworkSecondaryRange_Status `protobuf:"varint,3,opt,name=status,proto3,enum=google.container.v1beta1.UsableSubnetworkSecondaryRange_Status" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *UsableSubnetworkSecondaryRange) Reset()         { *m = UsableSubnetworkSecondaryRange{} }
+func (m *UsableSubnetworkSecondaryRange) String() string { return proto.CompactTextString(m) }
+func (*UsableSubnetworkSecondaryRange) ProtoMessage()    {}
+func (*UsableSubnetworkSecondaryRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{74}
+}
+func (m *UsableSubnetworkSecondaryRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UsableSubnetworkSecondaryRange.Unmarshal(m, b)
+}
+func (m *UsableSubnetworkSecondaryRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UsableSubnetworkSecondaryRange.Marshal(b, m, deterministic)
+}
+func (dst *UsableSubnetworkSecondaryRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UsableSubnetworkSecondaryRange.Merge(dst, src)
+}
+func (m *UsableSubnetworkSecondaryRange) XXX_Size() int {
+	return xxx_messageInfo_UsableSubnetworkSecondaryRange.Size(m)
+}
+func (m *UsableSubnetworkSecondaryRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_UsableSubnetworkSecondaryRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UsableSubnetworkSecondaryRange proto.InternalMessageInfo
+
+func (m *UsableSubnetworkSecondaryRange) GetRangeName() string {
+	if m != nil {
+		return m.RangeName
+	}
+	return ""
+}
+
+func (m *UsableSubnetworkSecondaryRange) GetIpCidrRange() string {
+	if m != nil {
+		return m.IpCidrRange
+	}
+	return ""
+}
+
+func (m *UsableSubnetworkSecondaryRange) GetStatus() UsableSubnetworkSecondaryRange_Status {
+	if m != nil {
+		return m.Status
+	}
+	return UsableSubnetworkSecondaryRange_UNKNOWN
+}
+
+// UsableSubnetwork resource returns the subnetwork name, its associated network
+// and the primary CIDR range.
+type UsableSubnetwork struct {
+	// Subnetwork Name.
+	// Example: projects/my-project/regions/us-central1/subnetworks/my-subnet
+	Subnetwork string `protobuf:"bytes,1,opt,name=subnetwork,proto3" json:"subnetwork,omitempty"`
+	// Network Name.
+	// Example: projects/my-project/global/networks/my-network
+	Network string `protobuf:"bytes,2,opt,name=network,proto3" json:"network,omitempty"`
+	// The range of internal addresses that are owned by this subnetwork.
+	IpCidrRange string `protobuf:"bytes,3,opt,name=ip_cidr_range,json=ipCidrRange,proto3" json:"ip_cidr_range,omitempty"`
+	// Secondary IP ranges.
+	SecondaryIpRanges []*UsableSubnetworkSecondaryRange `protobuf:"bytes,4,rep,name=secondary_ip_ranges,json=secondaryIpRanges,proto3" json:"secondary_ip_ranges,omitempty"`
+	// A human readable status message representing the reasons for cases where
+	// the caller cannot use the secondary ranges under the subnet. For example if
+	// the secondary_ip_ranges is empty due to a permission issue, an insufficient
+	// permission message will be given by status_message.
+	StatusMessage        string   `protobuf:"bytes,5,opt,name=status_message,json=statusMessage,proto3" json:"status_message,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SetNetworkPolicyRequest) Reset()         { *m = SetNetworkPolicyRequest{} }
-func (m *SetNetworkPolicyRequest) String() string { return proto.CompactTextString(m) }
-func (*SetNetworkPolicyRequest) ProtoMessage()    {}
-func (*SetNetworkPolicyRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{48}
+func (m *UsableSubnetwork) Reset()         { *m = UsableSubnetwork{} }
+func (m *UsableSubnetwork) String() string { return proto.CompactTextString(m) }
+func (*UsableSubnetwork) ProtoMessage()    {}
+func (*UsableSubnetwork) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{75}
 }
-func (m *SetNetworkPolicyRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SetNetworkPolicyRequest.Unmarshal(m, b)
+func (m *UsableSubnetwork) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UsableSubnetwork.Unmarshal(m, b)
 }
-func (m *SetNetworkPolicyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SetNetworkPolicyRequest.Marshal(b, m, deterministic)
+func (m *UsableSubnetwork) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UsableSubnetwork.Marshal(b, m, deterministic)
 }
-func (dst *SetNetworkPolicyRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SetNetworkPolicyRequest.Merge(dst, src)
+func (dst *UsableSubnetwork) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UsableSubnetwork.Merge(dst, src)
 }
-func (m *SetNetworkPolicyRequest) XXX_Size() int {
-	return xxx_messageInfo_SetNetworkPolicyRequest.Size(m)
+func (m *UsableSubnetwork) XXX_Size() int {
+	return xxx_messageInfo_UsableSubnetwork.Size(m)
 }
-func (m *SetNetworkPolicyRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_SetNetworkPolicyRequest.DiscardUnknown(m)
+func (m *UsableSubnetwork) XXX_DiscardUnknown() {
+	xxx_messageInfo_UsableSubnetwork.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_SetNetworkPolicyRequest proto.InternalMessageInfo
+var xxx_messageInfo_UsableSubnetwork proto.InternalMessageInfo
 
-func (m *SetNetworkPolicyRequest) GetProjectId() string {
+func (m *UsableSubnetwork) GetSubnetwork() string {
 	if m != nil {
-		return m.ProjectId
+		return m.Subnetwork
 	}
 	return ""
 }
 
-func (m *SetNetworkPolicyRequest) GetZone() string {
+func (m *UsableSubnetwork) GetNetwork() string {
 	if m != nil {
-		return m.Zone
+		return m.Network
 	}
 	return ""
 }
 
-func (m *SetNetworkPolicyRequest) GetClusterId() string {
+func (m *UsableSubnetwork) GetIpCidrRange() string {
 	if m != nil {
-		return m.ClusterId
+		return m.IpCidrRange
 	}
 	return ""
 }
 
-func (m *SetNetworkPolicyRequest) GetNetworkPolicy() *NetworkPolicy {
+func (m *UsableSubnetwork) GetSecondaryIpRanges() []*UsableSubnetworkSecondaryRange {
 	if m != nil {
-		return m.NetworkPolicy
+		return m.SecondaryIpRanges
 	}
 	return nil
 }
 
-func (m *SetNetworkPolicyRequest) GetName() string {
+func (m *UsableSubnetwork) GetStatusMessage() string {
 	if m != nil {
-		return m.Name
+		return m.StatusMessage
 	}
 	return ""
 }
 
-// SetMaintenancePolicyRequest sets the maintenance policy for a cluster.
-type SetMaintenancePolicyRequest struct {
-	// The Google Developers Console [project ID or project
-	// number](https://support.google.com/cloud/answer/6158840).
-	ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
-	// The name of the Google Compute Engine
-	// [zone](/compute/docs/zones#available) in which the cluster
-	// resides.
-	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
-	// The name of the cluster to update.
-	ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"`
-	// The maintenance policy to be set for the cluster. An empty field
-	// clears the existing maintenance policy.
-	MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,4,opt,name=maintenance_policy,json=maintenancePolicy,proto3" json:"maintenance_policy,omitempty"`
-	// The name (project, location, cluster id) of the cluster to set maintenance
-	// policy.
-	// Specified in the format 'projects/*/locations/*/clusters/*'.
-	Name                 string   `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
+// VerticalPodAutoscaling contains global, per-cluster information
+// required by Vertical Pod Autoscaler to automatically adjust
+// the resources of pods controlled by it.
+type VerticalPodAutoscaling struct {
+	// Enables vertical pod autoscaling.
+	Enabled              bool     `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SetMaintenancePolicyRequest) Reset()         { *m = SetMaintenancePolicyRequest{} }
-func (m *SetMaintenancePolicyRequest) String() string { return proto.CompactTextString(m) }
-func (*SetMaintenancePolicyRequest) ProtoMessage()    {}
-func (*SetMaintenancePolicyRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_cluster_service_8f6af64c98801cf8, []int{49}
+func (m *VerticalPodAutoscaling) Reset()         { *m = VerticalPodAutoscaling{} }
+func (m *VerticalPodAutoscaling) String() string { return proto.CompactTextString(m) }
+func (*VerticalPodAutoscaling) ProtoMessage()    {}
+func (*VerticalPodAutoscaling) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{76}
 }
-func (m *SetMaintenancePolicyRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SetMaintenancePolicyRequest.Unmarshal(m, b)
+func (m *VerticalPodAutoscaling) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VerticalPodAutoscaling.Unmarshal(m, b)
 }
-func (m *SetMaintenancePolicyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SetMaintenancePolicyRequest.Marshal(b, m, deterministic)
+func (m *VerticalPodAutoscaling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VerticalPodAutoscaling.Marshal(b, m, deterministic)
+}
+func (dst *VerticalPodAutoscaling) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VerticalPodAutoscaling.Merge(dst, src)
+}
+func (m *VerticalPodAutoscaling) XXX_Size() int {
+	return xxx_messageInfo_VerticalPodAutoscaling.Size(m)
+}
+func (m *VerticalPodAutoscaling) XXX_DiscardUnknown() {
+	xxx_messageInfo_VerticalPodAutoscaling.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VerticalPodAutoscaling proto.InternalMessageInfo
+
+func (m *VerticalPodAutoscaling) GetEnabled() bool {
+	if m != nil {
+		return m.Enabled
+	}
+	return false
+}
+
+// Constraints applied to pods.
+type MaxPodsConstraint struct {
+	// Constraint enforced on the max num of pods per node.
+	MaxPodsPerNode       int64    `protobuf:"varint,1,opt,name=max_pods_per_node,json=maxPodsPerNode,proto3" json:"max_pods_per_node,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MaxPodsConstraint) Reset()         { *m = MaxPodsConstraint{} }
+func (m *MaxPodsConstraint) String() string { return proto.CompactTextString(m) }
+func (*MaxPodsConstraint) ProtoMessage()    {}
+func (*MaxPodsConstraint) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{77}
+}
+func (m *MaxPodsConstraint) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MaxPodsConstraint.Unmarshal(m, b)
+}
+func (m *MaxPodsConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MaxPodsConstraint.Marshal(b, m, deterministic)
+}
+func (dst *MaxPodsConstraint) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MaxPodsConstraint.Merge(dst, src)
+}
+func (m *MaxPodsConstraint) XXX_Size() int {
+	return xxx_messageInfo_MaxPodsConstraint.Size(m)
+}
+func (m *MaxPodsConstraint) XXX_DiscardUnknown() {
+	xxx_messageInfo_MaxPodsConstraint.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MaxPodsConstraint proto.InternalMessageInfo
+
+func (m *MaxPodsConstraint) GetMaxPodsPerNode() int64 {
+	if m != nil {
+		return m.MaxPodsPerNode
+	}
+	return 0
+}
+
+// Configuration for exporting cluster resource usages.
+type ResourceUsageExportConfig struct {
+	// Configuration to use BigQuery as usage export destination.
+	BigqueryDestination *ResourceUsageExportConfig_BigQueryDestination `protobuf:"bytes,1,opt,name=bigquery_destination,json=bigqueryDestination,proto3" json:"bigquery_destination,omitempty"`
+	// Whether to enable network egress metering for this cluster. If enabled, a
+	// daemonset will be created in the cluster to meter network egress traffic.
+	EnableNetworkEgressMetering bool     `protobuf:"varint,2,opt,name=enable_network_egress_metering,json=enableNetworkEgressMetering,proto3" json:"enable_network_egress_metering,omitempty"`
+	XXX_NoUnkeyedLiteral        struct{} `json:"-"`
+	XXX_unrecognized            []byte   `json:"-"`
+	XXX_sizecache               int32    `json:"-"`
+}
+
+func (m *ResourceUsageExportConfig) Reset()         { *m = ResourceUsageExportConfig{} }
+func (m *ResourceUsageExportConfig) String() string { return proto.CompactTextString(m) }
+func (*ResourceUsageExportConfig) ProtoMessage()    {}
+func (*ResourceUsageExportConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{78}
+}
+func (m *ResourceUsageExportConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceUsageExportConfig.Unmarshal(m, b)
+}
+func (m *ResourceUsageExportConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceUsageExportConfig.Marshal(b, m, deterministic)
 }
-func (dst *SetMaintenancePolicyRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SetMaintenancePolicyRequest.Merge(dst, src)
+func (dst *ResourceUsageExportConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceUsageExportConfig.Merge(dst, src)
 }
-func (m *SetMaintenancePolicyRequest) XXX_Size() int {
-	return xxx_messageInfo_SetMaintenancePolicyRequest.Size(m)
+func (m *ResourceUsageExportConfig) XXX_Size() int {
+	return xxx_messageInfo_ResourceUsageExportConfig.Size(m)
 }
-func (m *SetMaintenancePolicyRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_SetMaintenancePolicyRequest.DiscardUnknown(m)
+func (m *ResourceUsageExportConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceUsageExportConfig.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_SetMaintenancePolicyRequest proto.InternalMessageInfo
+var xxx_messageInfo_ResourceUsageExportConfig proto.InternalMessageInfo
 
-func (m *SetMaintenancePolicyRequest) GetProjectId() string {
+func (m *ResourceUsageExportConfig) GetBigqueryDestination() *ResourceUsageExportConfig_BigQueryDestination {
 	if m != nil {
-		return m.ProjectId
+		return m.BigqueryDestination
 	}
-	return ""
+	return nil
 }
 
-func (m *SetMaintenancePolicyRequest) GetZone() string {
+func (m *ResourceUsageExportConfig) GetEnableNetworkEgressMetering() bool {
 	if m != nil {
-		return m.Zone
+		return m.EnableNetworkEgressMetering
 	}
-	return ""
+	return false
 }
 
-func (m *SetMaintenancePolicyRequest) GetClusterId() string {
-	if m != nil {
-		return m.ClusterId
-	}
-	return ""
+// Parameters for using BigQuery as the destination of resource usage export.
+type ResourceUsageExportConfig_BigQueryDestination struct {
+	// The ID of a BigQuery Dataset.
+	DatasetId            string   `protobuf:"bytes,1,opt,name=dataset_id,json=datasetId,proto3" json:"dataset_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *SetMaintenancePolicyRequest) GetMaintenancePolicy() *MaintenancePolicy {
-	if m != nil {
-		return m.MaintenancePolicy
-	}
-	return nil
+func (m *ResourceUsageExportConfig_BigQueryDestination) Reset() {
+	*m = ResourceUsageExportConfig_BigQueryDestination{}
+}
+func (m *ResourceUsageExportConfig_BigQueryDestination) String() string {
+	return proto.CompactTextString(m)
+}
+func (*ResourceUsageExportConfig_BigQueryDestination) ProtoMessage() {}
+func (*ResourceUsageExportConfig_BigQueryDestination) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cluster_service_4b3d530a1685571f, []int{78, 0}
+}
+func (m *ResourceUsageExportConfig_BigQueryDestination) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResourceUsageExportConfig_BigQueryDestination.Unmarshal(m, b)
+}
+func (m *ResourceUsageExportConfig_BigQueryDestination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResourceUsageExportConfig_BigQueryDestination.Marshal(b, m, deterministic)
+}
+func (dst *ResourceUsageExportConfig_BigQueryDestination) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceUsageExportConfig_BigQueryDestination.Merge(dst, src)
+}
+func (m *ResourceUsageExportConfig_BigQueryDestination) XXX_Size() int {
+	return xxx_messageInfo_ResourceUsageExportConfig_BigQueryDestination.Size(m)
+}
+func (m *ResourceUsageExportConfig_BigQueryDestination) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceUsageExportConfig_BigQueryDestination.DiscardUnknown(m)
 }
 
-func (m *SetMaintenancePolicyRequest) GetName() string {
+var xxx_messageInfo_ResourceUsageExportConfig_BigQueryDestination proto.InternalMessageInfo
+
+func (m *ResourceUsageExportConfig_BigQueryDestination) GetDatasetId() string {
 	if m != nil {
-		return m.Name
+		return m.DatasetId
 	}
 	return ""
 }
@@ -4604,17 +7388,32 @@ func init() {
 	proto.RegisterType((*HorizontalPodAutoscaling)(nil), "google.container.v1beta1.HorizontalPodAutoscaling")
 	proto.RegisterType((*KubernetesDashboard)(nil), "google.container.v1beta1.KubernetesDashboard")
 	proto.RegisterType((*NetworkPolicyConfig)(nil), "google.container.v1beta1.NetworkPolicyConfig")
+	proto.RegisterType((*PrivateClusterConfig)(nil), "google.container.v1beta1.PrivateClusterConfig")
+	proto.RegisterType((*IstioConfig)(nil), "google.container.v1beta1.IstioConfig")
+	proto.RegisterType((*CloudRunConfig)(nil), "google.container.v1beta1.CloudRunConfig")
 	proto.RegisterType((*MasterAuthorizedNetworksConfig)(nil), "google.container.v1beta1.MasterAuthorizedNetworksConfig")
 	proto.RegisterType((*MasterAuthorizedNetworksConfig_CidrBlock)(nil), "google.container.v1beta1.MasterAuthorizedNetworksConfig.CidrBlock")
+	proto.RegisterType((*LegacyAbac)(nil), "google.container.v1beta1.LegacyAbac")
 	proto.RegisterType((*NetworkPolicy)(nil), "google.container.v1beta1.NetworkPolicy")
 	proto.RegisterType((*IPAllocationPolicy)(nil), "google.container.v1beta1.IPAllocationPolicy")
+	proto.RegisterType((*BinaryAuthorization)(nil), "google.container.v1beta1.BinaryAuthorization")
 	proto.RegisterType((*PodSecurityPolicyConfig)(nil), "google.container.v1beta1.PodSecurityPolicyConfig")
 	proto.RegisterType((*Cluster)(nil), "google.container.v1beta1.Cluster")
+	proto.RegisterMapType((map[string]string)(nil), "google.container.v1beta1.Cluster.ResourceLabelsEntry")
 	proto.RegisterType((*ClusterUpdate)(nil), "google.container.v1beta1.ClusterUpdate")
 	proto.RegisterType((*Operation)(nil), "google.container.v1beta1.Operation")
+	proto.RegisterType((*OperationProgress)(nil), "google.container.v1beta1.OperationProgress")
+	proto.RegisterType((*OperationProgress_Metric)(nil), "google.container.v1beta1.OperationProgress.Metric")
 	proto.RegisterType((*CreateClusterRequest)(nil), "google.container.v1beta1.CreateClusterRequest")
 	proto.RegisterType((*GetClusterRequest)(nil), "google.container.v1beta1.GetClusterRequest")
 	proto.RegisterType((*UpdateClusterRequest)(nil), "google.container.v1beta1.UpdateClusterRequest")
+	proto.RegisterType((*UpdateNodePoolRequest)(nil), "google.container.v1beta1.UpdateNodePoolRequest")
+	proto.RegisterType((*SetNodePoolAutoscalingRequest)(nil), "google.container.v1beta1.SetNodePoolAutoscalingRequest")
+	proto.RegisterType((*SetLoggingServiceRequest)(nil), "google.container.v1beta1.SetLoggingServiceRequest")
+	proto.RegisterType((*SetMonitoringServiceRequest)(nil), "google.container.v1beta1.SetMonitoringServiceRequest")
+	proto.RegisterType((*SetAddonsConfigRequest)(nil), "google.container.v1beta1.SetAddonsConfigRequest")
+	proto.RegisterType((*SetLocationsRequest)(nil), "google.container.v1beta1.SetLocationsRequest")
+	proto.RegisterType((*UpdateMasterRequest)(nil), "google.container.v1beta1.UpdateMasterRequest")
 	proto.RegisterType((*SetMasterAuthRequest)(nil), "google.container.v1beta1.SetMasterAuthRequest")
 	proto.RegisterType((*DeleteClusterRequest)(nil), "google.container.v1beta1.DeleteClusterRequest")
 	proto.RegisterType((*ListClustersRequest)(nil), "google.container.v1beta1.ListClustersRequest")
@@ -4636,8 +7435,11 @@ func init() {
 	proto.RegisterType((*MaintenanceWindow)(nil), "google.container.v1beta1.MaintenanceWindow")
 	proto.RegisterType((*DailyMaintenanceWindow)(nil), "google.container.v1beta1.DailyMaintenanceWindow")
 	proto.RegisterType((*SetNodePoolManagementRequest)(nil), "google.container.v1beta1.SetNodePoolManagementRequest")
+	proto.RegisterType((*SetNodePoolSizeRequest)(nil), "google.container.v1beta1.SetNodePoolSizeRequest")
 	proto.RegisterType((*RollbackNodePoolUpgradeRequest)(nil), "google.container.v1beta1.RollbackNodePoolUpgradeRequest")
 	proto.RegisterType((*ListNodePoolsResponse)(nil), "google.container.v1beta1.ListNodePoolsResponse")
+	proto.RegisterType((*ClusterAutoscaling)(nil), "google.container.v1beta1.ClusterAutoscaling")
+	proto.RegisterType((*ResourceLimit)(nil), "google.container.v1beta1.ResourceLimit")
 	proto.RegisterType((*NodePoolAutoscaling)(nil), "google.container.v1beta1.NodePoolAutoscaling")
 	proto.RegisterType((*SetLabelsRequest)(nil), "google.container.v1beta1.SetLabelsRequest")
 	proto.RegisterMapType((map[string]string)(nil), "google.container.v1beta1.SetLabelsRequest.ResourceLabelsEntry")
@@ -4645,15 +7447,34 @@ func init() {
 	proto.RegisterType((*StartIPRotationRequest)(nil), "google.container.v1beta1.StartIPRotationRequest")
 	proto.RegisterType((*CompleteIPRotationRequest)(nil), "google.container.v1beta1.CompleteIPRotationRequest")
 	proto.RegisterType((*AcceleratorConfig)(nil), "google.container.v1beta1.AcceleratorConfig")
+	proto.RegisterType((*WorkloadMetadataConfig)(nil), "google.container.v1beta1.WorkloadMetadataConfig")
 	proto.RegisterType((*SetNetworkPolicyRequest)(nil), "google.container.v1beta1.SetNetworkPolicyRequest")
 	proto.RegisterType((*SetMaintenancePolicyRequest)(nil), "google.container.v1beta1.SetMaintenancePolicyRequest")
+	proto.RegisterType((*ListLocationsRequest)(nil), "google.container.v1beta1.ListLocationsRequest")
+	proto.RegisterType((*ListLocationsResponse)(nil), "google.container.v1beta1.ListLocationsResponse")
+	proto.RegisterType((*Location)(nil), "google.container.v1beta1.Location")
+	proto.RegisterType((*StatusCondition)(nil), "google.container.v1beta1.StatusCondition")
+	proto.RegisterType((*NetworkConfig)(nil), "google.container.v1beta1.NetworkConfig")
+	proto.RegisterType((*ListUsableSubnetworksRequest)(nil), "google.container.v1beta1.ListUsableSubnetworksRequest")
+	proto.RegisterType((*ListUsableSubnetworksResponse)(nil), "google.container.v1beta1.ListUsableSubnetworksResponse")
+	proto.RegisterType((*UsableSubnetworkSecondaryRange)(nil), "google.container.v1beta1.UsableSubnetworkSecondaryRange")
+	proto.RegisterType((*UsableSubnetwork)(nil), "google.container.v1beta1.UsableSubnetwork")
+	proto.RegisterType((*VerticalPodAutoscaling)(nil), "google.container.v1beta1.VerticalPodAutoscaling")
+	proto.RegisterType((*MaxPodsConstraint)(nil), "google.container.v1beta1.MaxPodsConstraint")
+	proto.RegisterType((*ResourceUsageExportConfig)(nil), "google.container.v1beta1.ResourceUsageExportConfig")
+	proto.RegisterType((*ResourceUsageExportConfig_BigQueryDestination)(nil), "google.container.v1beta1.ResourceUsageExportConfig.BigQueryDestination")
 	proto.RegisterEnum("google.container.v1beta1.NodeTaint_Effect", NodeTaint_Effect_name, NodeTaint_Effect_value)
+	proto.RegisterEnum("google.container.v1beta1.IstioConfig_IstioAuthMode", IstioConfig_IstioAuthMode_name, IstioConfig_IstioAuthMode_value)
 	proto.RegisterEnum("google.container.v1beta1.NetworkPolicy_Provider", NetworkPolicy_Provider_name, NetworkPolicy_Provider_value)
 	proto.RegisterEnum("google.container.v1beta1.Cluster_Status", Cluster_Status_name, Cluster_Status_value)
 	proto.RegisterEnum("google.container.v1beta1.Operation_Status", Operation_Status_name, Operation_Status_value)
 	proto.RegisterEnum("google.container.v1beta1.Operation_Type", Operation_Type_name, Operation_Type_value)
 	proto.RegisterEnum("google.container.v1beta1.SetMasterAuthRequest_Action", SetMasterAuthRequest_Action_name, SetMasterAuthRequest_Action_value)
 	proto.RegisterEnum("google.container.v1beta1.NodePool_Status", NodePool_Status_name, NodePool_Status_value)
+	proto.RegisterEnum("google.container.v1beta1.WorkloadMetadataConfig_NodeMetadata", WorkloadMetadataConfig_NodeMetadata_name, WorkloadMetadataConfig_NodeMetadata_value)
+	proto.RegisterEnum("google.container.v1beta1.Location_LocationType", Location_LocationType_name, Location_LocationType_value)
+	proto.RegisterEnum("google.container.v1beta1.StatusCondition_Code", StatusCondition_Code_name, StatusCondition_Code_value)
+	proto.RegisterEnum("google.container.v1beta1.UsableSubnetworkSecondaryRange_Status", UsableSubnetworkSecondaryRange_Status_name, UsableSubnetworkSecondaryRange_Status_value)
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -4671,7 +7492,7 @@ type ClusterManagerClient interface {
 	// Lists all clusters owned by a project in either the specified zone or all
 	// zones.
 	ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error)
-	// Gets the details of a specific cluster.
+	// Gets the details for a specific cluster.
 	GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error)
 	// Creates a cluster, consisting of the specified number and type of Google
 	// Compute Engine instances.
@@ -4687,10 +7508,24 @@ type ClusterManagerClient interface {
 	// Finally, an entry is added to the project's global metadata indicating
 	// which CIDR range is being used by the cluster.
 	CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error)
-	// Updates the settings of a specific cluster.
+	// Updates the settings for a specific cluster.
 	UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Updates the version and/or image type of a specific node pool.
+	UpdateNodePool(ctx context.Context, in *UpdateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Sets the autoscaling settings of a specific node pool.
+	SetNodePoolAutoscaling(ctx context.Context, in *SetNodePoolAutoscalingRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Sets the logging service for a specific cluster.
+	SetLoggingService(ctx context.Context, in *SetLoggingServiceRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Sets the monitoring service for a specific cluster.
+	SetMonitoringService(ctx context.Context, in *SetMonitoringServiceRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Sets the addons for a specific cluster.
+	SetAddonsConfig(ctx context.Context, in *SetAddonsConfigRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Sets the locations for a specific cluster.
+	SetLocations(ctx context.Context, in *SetLocationsRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Updates the master for a specific cluster.
+	UpdateMaster(ctx context.Context, in *UpdateMasterRequest, opts ...grpc.CallOption) (*Operation, error)
 	// Used to set master auth materials. Currently supports :-
-	// Changing the admin password of a specific cluster.
+	// Changing the admin password for a specific cluster.
 	// This can be either via password generation or explicitly set.
 	// Modify basic_auth.csv and reset the K8S API server.
 	SetMasterAuth(ctx context.Context, in *SetMasterAuthRequest, opts ...grpc.CallOption) (*Operation, error)
@@ -4710,7 +7545,7 @@ type ClusterManagerClient interface {
 	GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error)
 	// Cancels the specified operation.
 	CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*empty.Empty, error)
-	// Returns configuration info about the Container Engine service.
+	// Returns configuration info about the Kubernetes Engine service.
 	GetServerConfig(ctx context.Context, in *GetServerConfigRequest, opts ...grpc.CallOption) (*ServerConfig, error)
 	// Lists the node pools for a cluster.
 	ListNodePools(ctx context.Context, in *ListNodePoolsRequest, opts ...grpc.CallOption) (*ListNodePoolsResponse, error)
@@ -4733,10 +7568,16 @@ type ClusterManagerClient interface {
 	StartIPRotation(ctx context.Context, in *StartIPRotationRequest, opts ...grpc.CallOption) (*Operation, error)
 	// Completes master IP rotation.
 	CompleteIPRotation(ctx context.Context, in *CompleteIPRotationRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Sets the size for a specific node pool.
+	SetNodePoolSize(ctx context.Context, in *SetNodePoolSizeRequest, opts ...grpc.CallOption) (*Operation, error)
 	// Enables/Disables Network Policy for a cluster.
 	SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error)
 	// Sets the maintenance policy for a cluster.
 	SetMaintenancePolicy(ctx context.Context, in *SetMaintenancePolicyRequest, opts ...grpc.CallOption) (*Operation, error)
+	// Lists subnetworks that are usable for creating clusters in a project.
+	ListUsableSubnetworks(ctx context.Context, in *ListUsableSubnetworksRequest, opts ...grpc.CallOption) (*ListUsableSubnetworksResponse, error)
+	// Used to fetch locations that offer GKE.
+	ListLocations(ctx context.Context, in *ListLocationsRequest, opts ...grpc.CallOption) (*ListLocationsResponse, error)
 }
 
 type clusterManagerClient struct {
@@ -4783,6 +7624,69 @@ func (c *clusterManagerClient) UpdateCluster(ctx context.Context, in *UpdateClus
 	return out, nil
 }
 
+func (c *clusterManagerClient) UpdateNodePool(ctx context.Context, in *UpdateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/UpdateNodePool", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *clusterManagerClient) SetNodePoolAutoscaling(ctx context.Context, in *SetNodePoolAutoscalingRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetNodePoolAutoscaling", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *clusterManagerClient) SetLoggingService(ctx context.Context, in *SetLoggingServiceRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetLoggingService", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *clusterManagerClient) SetMonitoringService(ctx context.Context, in *SetMonitoringServiceRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetMonitoringService", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *clusterManagerClient) SetAddonsConfig(ctx context.Context, in *SetAddonsConfigRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetAddonsConfig", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *clusterManagerClient) SetLocations(ctx context.Context, in *SetLocationsRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetLocations", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *clusterManagerClient) UpdateMaster(ctx context.Context, in *UpdateMasterRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/UpdateMaster", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *clusterManagerClient) SetMasterAuth(ctx context.Context, in *SetMasterAuthRequest, opts ...grpc.CallOption) (*Operation, error) {
 	out := new(Operation)
 	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetMasterAuth", in, out, opts...)
@@ -4927,6 +7831,15 @@ func (c *clusterManagerClient) CompleteIPRotation(ctx context.Context, in *Compl
 	return out, nil
 }
 
+func (c *clusterManagerClient) SetNodePoolSize(ctx context.Context, in *SetNodePoolSizeRequest, opts ...grpc.CallOption) (*Operation, error) {
+	out := new(Operation)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetNodePoolSize", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *clusterManagerClient) SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error) {
 	out := new(Operation)
 	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetNetworkPolicy", in, out, opts...)
@@ -4945,12 +7858,30 @@ func (c *clusterManagerClient) SetMaintenancePolicy(ctx context.Context, in *Set
 	return out, nil
 }
 
+func (c *clusterManagerClient) ListUsableSubnetworks(ctx context.Context, in *ListUsableSubnetworksRequest, opts ...grpc.CallOption) (*ListUsableSubnetworksResponse, error) {
+	out := new(ListUsableSubnetworksResponse)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/ListUsableSubnetworks", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *clusterManagerClient) ListLocations(ctx context.Context, in *ListLocationsRequest, opts ...grpc.CallOption) (*ListLocationsResponse, error) {
+	out := new(ListLocationsResponse)
+	err := c.cc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/ListLocations", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // ClusterManagerServer is the server API for ClusterManager service.
 type ClusterManagerServer interface {
 	// Lists all clusters owned by a project in either the specified zone or all
 	// zones.
 	ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error)
-	// Gets the details of a specific cluster.
+	// Gets the details for a specific cluster.
 	GetCluster(context.Context, *GetClusterRequest) (*Cluster, error)
 	// Creates a cluster, consisting of the specified number and type of Google
 	// Compute Engine instances.
@@ -4966,10 +7897,24 @@ type ClusterManagerServer interface {
 	// Finally, an entry is added to the project's global metadata indicating
 	// which CIDR range is being used by the cluster.
 	CreateCluster(context.Context, *CreateClusterRequest) (*Operation, error)
-	// Updates the settings of a specific cluster.
+	// Updates the settings for a specific cluster.
 	UpdateCluster(context.Context, *UpdateClusterRequest) (*Operation, error)
+	// Updates the version and/or image type of a specific node pool.
+	UpdateNodePool(context.Context, *UpdateNodePoolRequest) (*Operation, error)
+	// Sets the autoscaling settings of a specific node pool.
+	SetNodePoolAutoscaling(context.Context, *SetNodePoolAutoscalingRequest) (*Operation, error)
+	// Sets the logging service for a specific cluster.
+	SetLoggingService(context.Context, *SetLoggingServiceRequest) (*Operation, error)
+	// Sets the monitoring service for a specific cluster.
+	SetMonitoringService(context.Context, *SetMonitoringServiceRequest) (*Operation, error)
+	// Sets the addons for a specific cluster.
+	SetAddonsConfig(context.Context, *SetAddonsConfigRequest) (*Operation, error)
+	// Sets the locations for a specific cluster.
+	SetLocations(context.Context, *SetLocationsRequest) (*Operation, error)
+	// Updates the master for a specific cluster.
+	UpdateMaster(context.Context, *UpdateMasterRequest) (*Operation, error)
 	// Used to set master auth materials. Currently supports :-
-	// Changing the admin password of a specific cluster.
+	// Changing the admin password for a specific cluster.
 	// This can be either via password generation or explicitly set.
 	// Modify basic_auth.csv and reset the K8S API server.
 	SetMasterAuth(context.Context, *SetMasterAuthRequest) (*Operation, error)
@@ -4989,7 +7934,7 @@ type ClusterManagerServer interface {
 	GetOperation(context.Context, *GetOperationRequest) (*Operation, error)
 	// Cancels the specified operation.
 	CancelOperation(context.Context, *CancelOperationRequest) (*empty.Empty, error)
-	// Returns configuration info about the Container Engine service.
+	// Returns configuration info about the Kubernetes Engine service.
 	GetServerConfig(context.Context, *GetServerConfigRequest) (*ServerConfig, error)
 	// Lists the node pools for a cluster.
 	ListNodePools(context.Context, *ListNodePoolsRequest) (*ListNodePoolsResponse, error)
@@ -5012,10 +7957,16 @@ type ClusterManagerServer interface {
 	StartIPRotation(context.Context, *StartIPRotationRequest) (*Operation, error)
 	// Completes master IP rotation.
 	CompleteIPRotation(context.Context, *CompleteIPRotationRequest) (*Operation, error)
+	// Sets the size for a specific node pool.
+	SetNodePoolSize(context.Context, *SetNodePoolSizeRequest) (*Operation, error)
 	// Enables/Disables Network Policy for a cluster.
 	SetNetworkPolicy(context.Context, *SetNetworkPolicyRequest) (*Operation, error)
 	// Sets the maintenance policy for a cluster.
 	SetMaintenancePolicy(context.Context, *SetMaintenancePolicyRequest) (*Operation, error)
+	// Lists subnetworks that are usable for creating clusters in a project.
+	ListUsableSubnetworks(context.Context, *ListUsableSubnetworksRequest) (*ListUsableSubnetworksResponse, error)
+	// Used to fetch locations that offer GKE.
+	ListLocations(context.Context, *ListLocationsRequest) (*ListLocationsResponse, error)
 }
 
 func RegisterClusterManagerServer(s *grpc.Server, srv ClusterManagerServer) {
@@ -5094,6 +8045,132 @@ func _ClusterManager_UpdateCluster_Handler(srv interface{}, ctx context.Context,
 	return interceptor(ctx, in, info, handler)
 }
 
+func _ClusterManager_UpdateNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateNodePoolRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).UpdateNodePool(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/UpdateNodePool",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).UpdateNodePool(ctx, req.(*UpdateNodePoolRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ClusterManager_SetNodePoolAutoscaling_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetNodePoolAutoscalingRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).SetNodePoolAutoscaling(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/SetNodePoolAutoscaling",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).SetNodePoolAutoscaling(ctx, req.(*SetNodePoolAutoscalingRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ClusterManager_SetLoggingService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetLoggingServiceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).SetLoggingService(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/SetLoggingService",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).SetLoggingService(ctx, req.(*SetLoggingServiceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ClusterManager_SetMonitoringService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetMonitoringServiceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).SetMonitoringService(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/SetMonitoringService",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).SetMonitoringService(ctx, req.(*SetMonitoringServiceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ClusterManager_SetAddonsConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetAddonsConfigRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).SetAddonsConfig(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/SetAddonsConfig",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).SetAddonsConfig(ctx, req.(*SetAddonsConfigRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ClusterManager_SetLocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetLocationsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).SetLocations(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/SetLocations",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).SetLocations(ctx, req.(*SetLocationsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ClusterManager_UpdateMaster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateMasterRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).UpdateMaster(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/UpdateMaster",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).UpdateMaster(ctx, req.(*UpdateMasterRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _ClusterManager_SetMasterAuth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(SetMasterAuthRequest)
 	if err := dec(in); err != nil {
@@ -5382,6 +8459,24 @@ func _ClusterManager_CompleteIPRotation_Handler(srv interface{}, ctx context.Con
 	return interceptor(ctx, in, info, handler)
 }
 
+func _ClusterManager_SetNodePoolSize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetNodePoolSizeRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).SetNodePoolSize(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/SetNodePoolSize",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).SetNodePoolSize(ctx, req.(*SetNodePoolSizeRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _ClusterManager_SetNetworkPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(SetNetworkPolicyRequest)
 	if err := dec(in); err != nil {
@@ -5418,6 +8513,42 @@ func _ClusterManager_SetMaintenancePolicy_Handler(srv interface{}, ctx context.C
 	return interceptor(ctx, in, info, handler)
 }
 
+func _ClusterManager_ListUsableSubnetworks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListUsableSubnetworksRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).ListUsableSubnetworks(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/ListUsableSubnetworks",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).ListUsableSubnetworks(ctx, req.(*ListUsableSubnetworksRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ClusterManager_ListLocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListLocationsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ClusterManagerServer).ListLocations(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.container.v1beta1.ClusterManager/ListLocations",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ClusterManagerServer).ListLocations(ctx, req.(*ListLocationsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _ClusterManager_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "google.container.v1beta1.ClusterManager",
 	HandlerType: (*ClusterManagerServer)(nil),
@@ -5438,6 +8569,34 @@ var _ClusterManager_serviceDesc = grpc.ServiceDesc{
 			MethodName: "UpdateCluster",
 			Handler:    _ClusterManager_UpdateCluster_Handler,
 		},
+		{
+			MethodName: "UpdateNodePool",
+			Handler:    _ClusterManager_UpdateNodePool_Handler,
+		},
+		{
+			MethodName: "SetNodePoolAutoscaling",
+			Handler:    _ClusterManager_SetNodePoolAutoscaling_Handler,
+		},
+		{
+			MethodName: "SetLoggingService",
+			Handler:    _ClusterManager_SetLoggingService_Handler,
+		},
+		{
+			MethodName: "SetMonitoringService",
+			Handler:    _ClusterManager_SetMonitoringService_Handler,
+		},
+		{
+			MethodName: "SetAddonsConfig",
+			Handler:    _ClusterManager_SetAddonsConfig_Handler,
+		},
+		{
+			MethodName: "SetLocations",
+			Handler:    _ClusterManager_SetLocations_Handler,
+		},
+		{
+			MethodName: "UpdateMaster",
+			Handler:    _ClusterManager_UpdateMaster_Handler,
+		},
 		{
 			MethodName: "SetMasterAuth",
 			Handler:    _ClusterManager_SetMasterAuth_Handler,
@@ -5502,6 +8661,10 @@ var _ClusterManager_serviceDesc = grpc.ServiceDesc{
 			MethodName: "CompleteIPRotation",
 			Handler:    _ClusterManager_CompleteIPRotation_Handler,
 		},
+		{
+			MethodName: "SetNodePoolSize",
+			Handler:    _ClusterManager_SetNodePoolSize_Handler,
+		},
 		{
 			MethodName: "SetNetworkPolicy",
 			Handler:    _ClusterManager_SetNetworkPolicy_Handler,
@@ -5510,289 +8673,463 @@ var _ClusterManager_serviceDesc = grpc.ServiceDesc{
 			MethodName: "SetMaintenancePolicy",
 			Handler:    _ClusterManager_SetMaintenancePolicy_Handler,
 		},
+		{
+			MethodName: "ListUsableSubnetworks",
+			Handler:    _ClusterManager_ListUsableSubnetworks_Handler,
+		},
+		{
+			MethodName: "ListLocations",
+			Handler:    _ClusterManager_ListLocations_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "google/container/v1beta1/cluster_service.proto",
 }
 
 func init() {
-	proto.RegisterFile("google/container/v1beta1/cluster_service.proto", fileDescriptor_cluster_service_8f6af64c98801cf8)
-}
-
-var fileDescriptor_cluster_service_8f6af64c98801cf8 = []byte{
-	// 4381 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x5b, 0x6c, 0xe3, 0x56,
-	0x7a, 0xf0, 0xd2, 0x17, 0xd9, 0xfa, 0x24, 0xcb, 0xf2, 0xf1, 0x4d, 0x51, 0x26, 0x93, 0x09, 0x93,
-	0x4d, 0x26, 0x4e, 0x22, 0xcf, 0x25, 0x99, 0x3f, 0x3b, 0x93, 0xfc, 0xa9, 0x2c, 0x73, 0x6c, 0x75,
-	0x6c, 0x49, 0xa5, 0xec, 0x99, 0xcd, 0x34, 0x28, 0x97, 0x26, 0x8f, 0x65, 0xae, 0x29, 0x92, 0x4b,
-	0x52, 0x93, 0x78, 0xb6, 0x69, 0xbb, 0xdb, 0xbe, 0xf5, 0xad, 0x05, 0xda, 0x97, 0xa2, 0x01, 0xb6,
-	0x40, 0x91, 0xde, 0x80, 0x7d, 0x69, 0x17, 0x2d, 0x50, 0x14, 0x28, 0xd0, 0x97, 0xb6, 0x40, 0xd1,
-	0xf6, 0xb1, 0x28, 0xfa, 0xb2, 0xcf, 0x6d, 0x9f, 0x5b, 0x14, 0x28, 0xce, 0x85, 0x14, 0x29, 0x51,
-	0x94, 0x6c, 0xaf, 0xd3, 0x7d, 0x13, 0xbf, 0x73, 0xbe, 0xf3, 0x5d, 0xf8, 0xdd, 0x79, 0x6c, 0xa8,
-	0x74, 0x6c, 0xbb, 0x63, 0xe2, 0x4d, 0xcd, 0xb6, 0x7c, 0xd5, 0xb0, 0xb0, 0xbb, 0xf9, 0xec, 0xf6,
-	0x11, 0xf6, 0xd5, 0xdb, 0x9b, 0x9a, 0xd9, 0xf3, 0x7c, 0xec, 0x2a, 0x1e, 0x76, 0x9f, 0x19, 0x1a,
-	0xae, 0x38, 0xae, 0xed, 0xdb, 0xa8, 0xc4, 0xf6, 0x57, 0xc2, 0xfd, 0x15, 0xbe, 0xbf, 0x7c, 0x8d,
-	0x9f, 0xa4, 0x3a, 0xc6, 0xa6, 0x6a, 0x59, 0xb6, 0xaf, 0xfa, 0x86, 0x6d, 0x79, 0x0c, 0xaf, 0xfc,
-	0x22, 0x5f, 0xa5, 0x4f, 0x47, 0xbd, 0xe3, 0x4d, 0xdc, 0x75, 0xfc, 0x33, 0xb6, 0x28, 0xfe, 0x78,
-	0x16, 0xa0, 0x61, 0xeb, 0xb8, 0x66, 0x5b, 0xc7, 0x46, 0x07, 0xbd, 0x02, 0xf9, 0xae, 0xaa, 0x9d,
-	0x18, 0x16, 0x56, 0xfc, 0x33, 0x07, 0x97, 0x84, 0x1b, 0xc2, 0xcd, 0xac, 0x9c, 0xe3, 0xb0, 0x83,
-	0x33, 0x07, 0xa3, 0x1b, 0x90, 0xd7, 0x0d, 0xef, 0x54, 0xf1, 0x8c, 0xe7, 0x58, 0xe9, 0x1c, 0x95,
-	0xa6, 0x6e, 0x08, 0x37, 0x67, 0x65, 0x20, 0xb0, 0xb6, 0xf1, 0x1c, 0xef, 0x1c, 0x91, 0x43, 0x6c,
-	0xb5, 0xe7, 0x9f, 0x28, 0x9e, 0x66, 0x3b, 0xd8, 0x2b, 0x4d, 0xdf, 0x98, 0x26, 0x87, 0x50, 0x58,
-	0x9b, 0x82, 0xd0, 0x1b, 0xb0, 0xc8, 0x85, 0x53, 0x54, 0x4d, 0xb3, 0x7b, 0x96, 0x5f, 0xca, 0x52,
-	0x52, 0x05, 0x0e, 0xae, 0x32, 0x28, 0x6a, 0xc0, 0x7c, 0x17, 0xfb, 0xaa, 0xae, 0xfa, 0x6a, 0x69,
-	0xe6, 0xc6, 0xf4, 0xcd, 0xdc, 0x9d, 0x3b, 0x95, 0x51, 0x7a, 0xa8, 0xf4, 0x05, 0xa9, 0xec, 0x73,
-	0x24, 0xc9, 0xf2, 0xdd, 0x33, 0x39, 0x3c, 0x03, 0xbd, 0x04, 0x60, 0x74, 0xd5, 0x0e, 0x17, 0x6f,
-	0x96, 0xd2, 0xcc, 0x52, 0x08, 0x15, 0x6e, 0x17, 0x32, 0xa6, 0x7a, 0x84, 0x4d, 0xaf, 0x94, 0xa1,
-	0xc4, 0x6e, 0x4d, 0x44, 0x6c, 0x8f, 0xa2, 0x30, 0x52, 0x1c, 0x1f, 0xbd, 0x0e, 0x8b, 0xa6, 0xad,
-	0xa9, 0xa6, 0xe2, 0x79, 0xba, 0xc2, 0x24, 0x9c, 0xa3, 0x9a, 0x5a, 0xa0, 0xe0, 0xb6, 0xa7, 0xd7,
-	0xa8, 0x80, 0x08, 0x66, 0x7c, 0xb5, 0xe3, 0x95, 0xe6, 0xa9, 0x92, 0xe8, 0x6f, 0x74, 0x03, 0x72,
-	0x8e, 0x8b, 0xc9, 0x6b, 0x32, 0x8e, 0x4c, 0x5c, 0x82, 0x1b, 0xc2, 0xcd, 0x79, 0x39, 0x0a, 0x42,
-	0x4d, 0xc8, 0xab, 0x9a, 0x86, 0x4d, 0xec, 0xaa, 0xbe, 0xed, 0x7a, 0xa5, 0x1c, 0xe5, 0xf6, 0xad,
-	0xd1, 0xdc, 0x56, 0xfb, 0xbb, 0x19, 0xd3, 0x72, 0xec, 0x00, 0x74, 0x13, 0x8a, 0x5d, 0xc3, 0x52,
-	0x34, 0xa7, 0xa7, 0x38, 0xa6, 0xea, 0x1f, 0xdb, 0x6e, 0xb7, 0xb4, 0xc0, 0xde, 0x48, 0xd7, 0xb0,
-	0x6a, 0x4e, 0xaf, 0xc5, 0xa1, 0xe8, 0x01, 0x64, 0xc8, 0xd9, 0xbe, 0x57, 0x5a, 0xa4, 0x44, 0x5f,
-	0x4d, 0x57, 0xd1, 0x01, 0xd9, 0x2b, 0x73, 0x94, 0xf2, 0x03, 0x58, 0x88, 0xbd, 0x19, 0x54, 0x84,
-	0xe9, 0x53, 0x7c, 0xc6, 0xed, 0x8c, 0xfc, 0x44, 0x2b, 0x30, 0xfb, 0x4c, 0x35, 0x7b, 0x98, 0x1a,
-	0x56, 0x56, 0x66, 0x0f, 0xf7, 0xa7, 0xde, 0x17, 0xca, 0xdf, 0x80, 0x5c, 0x44, 0xd3, 0xe7, 0x41,
-	0x15, 0xff, 0x49, 0x80, 0x6c, 0xc8, 0xcd, 0xa4, 0x98, 0x68, 0x0b, 0x32, 0xf8, 0xf8, 0x18, 0x6b,
-	0x7e, 0x69, 0xfa, 0x86, 0x70, 0xb3, 0x70, 0x67, 0x63, 0x02, 0x51, 0x2b, 0x12, 0xc5, 0x90, 0x39,
-	0xa6, 0xf8, 0x31, 0x64, 0x18, 0x04, 0xad, 0x01, 0x92, 0x1e, 0x3e, 0x94, 0x6a, 0x07, 0xca, 0x61,
-	0xa3, 0xdd, 0x92, 0x6a, 0xf5, 0x87, 0x75, 0x69, 0xbb, 0xf8, 0x35, 0xb4, 0x08, 0xb9, 0x46, 0x53,
-	0x69, 0xd7, 0x76, 0xa5, 0xed, 0xc3, 0x3d, 0xa9, 0x28, 0x90, 0x8d, 0x2d, 0x59, 0x7a, 0x28, 0xc9,
-	0x4a, 0x14, 0x3e, 0x85, 0x0a, 0x00, 0x8d, 0xa6, 0x22, 0x7d, 0x53, 0xaa, 0x1d, 0x1e, 0x48, 0xc5,
-	0x69, 0xf1, 0x47, 0x53, 0x00, 0xfb, 0x2a, 0x89, 0x14, 0xd5, 0x9e, 0x7f, 0x82, 0xca, 0x30, 0xdf,
-	0xf3, 0xb0, 0x6b, 0xa9, 0xdd, 0xc0, 0x6f, 0xc3, 0x67, 0xb2, 0xe6, 0xa8, 0x9e, 0xf7, 0xa9, 0xed,
-	0xea, 0x5c, 0xc4, 0xf0, 0x19, 0x75, 0xe1, 0x05, 0xcd, 0x34, 0xb0, 0xe5, 0x2b, 0x1a, 0x76, 0x7d,
-	0xe3, 0xd8, 0xd0, 0x54, 0x1f, 0x2b, 0x1a, 0xb5, 0x12, 0x2a, 0x78, 0xee, 0xce, 0xed, 0xd1, 0x82,
-	0xd7, 0x28, 0x6a, 0xad, 0x8f, 0xc9, 0xcd, 0x6b, 0x5d, 0x4b, 0x5e, 0x40, 0xef, 0xc2, 0x5a, 0x10,
-	0xdf, 0x34, 0x35, 0x4a, 0xb2, 0xa4, 0x53, 0xc6, 0x56, 0xf8, 0x6a, 0x4d, 0x8d, 0xe0, 0xa2, 0x77,
-	0x00, 0x0d, 0x33, 0x59, 0xc2, 0x14, 0x63, 0x69, 0x88, 0x14, 0x71, 0x73, 0xbe, 0x9d, 0xbc, 0xe8,
-	0x63, 0xe6, 0xe6, 0x0c, 0xf2, 0x08, 0x9f, 0x89, 0x6d, 0x58, 0x1f, 0xc1, 0x37, 0x7a, 0x1f, 0x4a,
-	0x86, 0xe7, 0xf5, 0xb0, 0x92, 0x40, 0x4e, 0xa0, 0x8e, 0xb8, 0x46, 0xd7, 0x87, 0xf0, 0xc5, 0x1f,
-	0x4c, 0x43, 0xbe, 0xaa, 0xeb, 0xb6, 0xe5, 0xf1, 0xa3, 0x7e, 0x1e, 0x96, 0x4f, 0x7c, 0xdf, 0x51,
-	0x4c, 0x5b, 0xd5, 0x95, 0x23, 0xd5, 0x54, 0x2d, 0xcd, 0xb0, 0x3a, 0xf4, 0x94, 0x54, 0x5f, 0xdd,
-	0xf5, 0x7d, 0x67, 0xcf, 0x56, 0xf5, 0xad, 0x00, 0x45, 0x5e, 0x3a, 0x19, 0x04, 0x21, 0x07, 0xca,
-	0x27, 0xb6, 0x6b, 0x3c, 0x27, 0xd8, 0xa6, 0xe2, 0xd8, 0xba, 0xa2, 0xf6, 0x7c, 0xdb, 0xd3, 0x54,
-	0x93, 0xd0, 0x98, 0xa2, 0x34, 0x52, 0x42, 0xe5, 0x6e, 0x88, 0xdb, 0xb2, 0xf5, 0x6a, 0x1f, 0x53,
-	0x2e, 0x9d, 0x8c, 0x58, 0x41, 0xdf, 0x82, 0x95, 0xd3, 0xde, 0x11, 0x76, 0x2d, 0xec, 0x63, 0x4f,
-	0xd1, 0x55, 0xef, 0xe4, 0xc8, 0x56, 0x5d, 0x9d, 0x9b, 0xc8, 0x3b, 0xa3, 0x69, 0x3d, 0x0a, 0xb1,
-	0xb6, 0x03, 0x24, 0x79, 0xf9, 0x74, 0x18, 0x88, 0x54, 0x58, 0xb5, 0xb0, 0xff, 0xa9, 0xed, 0x9e,
-	0x2a, 0x8e, 0x6d, 0x1a, 0xda, 0x59, 0x60, 0x85, 0x33, 0xe3, 0x48, 0x34, 0x18, 0x5a, 0x8b, 0x62,
-	0x71, 0x0b, 0x5c, 0xb6, 0x86, 0x81, 0xe2, 0x26, 0x2c, 0x0d, 0xa9, 0x97, 0x78, 0x87, 0x6e, 0x78,
-	0xea, 0x91, 0x89, 0x75, 0xfe, 0x8e, 0xc3, 0x67, 0xf1, 0x1e, 0x94, 0x46, 0xe9, 0x2a, 0x15, 0xef,
-	0x36, 0x2c, 0x27, 0xc8, 0x3d, 0x0e, 0x25, 0x41, 0x8e, 0x54, 0x94, 0x7f, 0x17, 0xe0, 0x7a, 0x3f,
-	0x04, 0x10, 0x3e, 0xb1, 0xce, 0xcf, 0x08, 0xac, 0xb0, 0x04, 0x73, 0xd8, 0x8a, 0x62, 0x07, 0x8f,
-	0x48, 0x83, 0x9c, 0x66, 0xe8, 0xae, 0x72, 0x64, 0xda, 0xda, 0xa9, 0x57, 0x9a, 0xa2, 0xe1, 0x7c,
-	0x6b, 0xb4, 0x92, 0xd3, 0x09, 0x55, 0x6a, 0x86, 0xee, 0x6e, 0x91, 0xa3, 0x64, 0xd0, 0x82, 0x9f,
-	0x5e, 0x79, 0x1f, 0xb2, 0xe1, 0x02, 0xa9, 0x0c, 0x74, 0xc3, 0x73, 0x4c, 0xf5, 0x4c, 0x89, 0x84,
-	0xa9, 0x1c, 0x87, 0x35, 0x48, 0xa4, 0x22, 0x9e, 0x1b, 0x32, 0xc5, 0x63, 0x55, 0x36, 0x3c, 0x4f,
-	0xfc, 0x03, 0x01, 0x16, 0x62, 0x4a, 0x42, 0x7b, 0x30, 0xef, 0xb8, 0xf6, 0x33, 0x43, 0xc7, 0x2e,
-	0x3d, 0xaf, 0x90, 0x9a, 0xb4, 0xa3, 0xa8, 0x95, 0x16, 0xc7, 0x93, 0xc3, 0x13, 0xa2, 0xda, 0x9a,
-	0x8a, 0x69, 0x4b, 0xbc, 0x05, 0xf3, 0xad, 0xfe, 0xae, 0x95, 0x96, 0xdc, 0x7c, 0x5c, 0xdf, 0x96,
-	0xe4, 0x81, 0x60, 0x0e, 0x90, 0xa9, 0x55, 0xf7, 0xea, 0xb5, 0x66, 0x51, 0x10, 0xff, 0x74, 0x06,
-	0x50, 0xbd, 0x55, 0x35, 0x49, 0xc2, 0x27, 0x05, 0x19, 0x67, 0xf8, 0x35, 0x28, 0xf4, 0x3c, 0xac,
-	0x18, 0x8e, 0xa2, 0x9a, 0x86, 0xea, 0x61, 0x8f, 0xbf, 0x97, 0x7c, 0xcf, 0xc3, 0x75, 0xa7, 0xca,
-	0x60, 0xe8, 0x2d, 0x58, 0xd2, 0x5c, 0x4c, 0x22, 0xb1, 0xd7, 0x3b, 0xe2, 0x96, 0xcc, 0x59, 0x2a,
-	0xb2, 0x85, 0x76, 0x08, 0xa7, 0xe5, 0x54, 0xf8, 0xc4, 0x54, 0x3b, 0xcd, 0xcb, 0xa9, 0x10, 0x4c,
-	0xb5, 0xbb, 0x01, 0x4b, 0x41, 0xf0, 0x35, 0x9c, 0x67, 0xef, 0x2a, 0x44, 0xb1, 0xd4, 0xbb, 0xb2,
-	0xf2, 0x22, 0x5f, 0xa8, 0x3b, 0xcf, 0xde, 0x25, 0x6f, 0x8c, 0xf0, 0x69, 0xd9, 0x3a, 0x8e, 0x6c,
-	0x64, 0xe5, 0x52, 0x9e, 0x40, 0xc3, 0x5d, 0x6f, 0x03, 0xe2, 0x25, 0x9b, 0x17, 0xd9, 0x99, 0xa1,
-	0x3b, 0x8b, 0xc1, 0x4a, 0xb8, 0xfb, 0x23, 0xb8, 0xd6, 0x2f, 0x6e, 0x35, 0xdb, 0xd2, 0x55, 0xf7,
-	0x4c, 0x71, 0x55, 0xab, 0x83, 0x19, 0xd7, 0x73, 0x14, 0xef, 0x05, 0xbe, 0xa7, 0x1d, 0x6c, 0x91,
-	0xc9, 0x0e, 0x2a, 0x40, 0x15, 0x5e, 0x0a, 0xc9, 0x25, 0x9e, 0x30, 0x4f, 0x4f, 0x28, 0x07, 0x9b,
-	0x12, 0x8e, 0x78, 0x0f, 0xd6, 0x87, 0x74, 0xc0, 0xcd, 0x2d, 0x1b, 0xcb, 0x40, 0x01, 0xd7, 0xcc,
-	0x76, 0x37, 0x61, 0x25, 0xae, 0x0e, 0x8e, 0x03, 0x2c, 0x07, 0x45, 0x95, 0xc2, 0x10, 0xfe, 0x1f,
-	0x94, 0x86, 0x35, 0xc3, 0x91, 0x72, 0x14, 0x69, 0x75, 0x50, 0x3f, 0xcc, 0xc6, 0xef, 0xc2, 0x7a,
-	0xcb, 0xd6, 0xdb, 0x58, 0xeb, 0xb9, 0x86, 0x7f, 0x16, 0x8b, 0x05, 0x23, 0x9d, 0x59, 0xfc, 0xef,
-	0x02, 0xcc, 0xd5, 0x18, 0xdf, 0xa4, 0xa6, 0x8c, 0xb8, 0x17, 0xfd, 0x4d, 0x6a, 0x4a, 0x1d, 0x7b,
-	0x9a, 0x6b, 0x38, 0xc4, 0x14, 0xb9, 0x63, 0x45, 0x41, 0xe4, 0x4d, 0x1a, 0x96, 0xe1, 0x1b, 0xaa,
-	0xa9, 0x50, 0x41, 0x59, 0xd1, 0x3a, 0x4d, 0x8b, 0xd6, 0x22, 0x5f, 0x61, 0x45, 0x2f, 0xa9, 0x5b,
-	0x25, 0xc8, 0xf1, 0x5d, 0x91, 0x08, 0xfd, 0xda, 0x24, 0xe5, 0xb2, 0x0c, 0x56, 0xbf, 0xe1, 0x90,
-	0x20, 0xd7, 0xa5, 0x61, 0x85, 0xa4, 0xaf, 0x13, 0x6a, 0x61, 0xa9, 0xc7, 0xf4, 0x63, 0x90, 0x0c,
-	0xdd, 0x7e, 0xed, 0xf3, 0x06, 0xa9, 0xb6, 0x3b, 0x1d, 0xc3, 0xea, 0x04, 0x4d, 0x13, 0x37, 0xc1,
-	0x02, 0x07, 0xb7, 0x19, 0x94, 0xd4, 0x11, 0x5d, 0xdb, 0x32, 0x7c, 0xdb, 0x8d, 0xee, 0x65, 0x66,
-	0xb7, 0xd4, 0x5f, 0x09, 0xb6, 0x97, 0x60, 0x2e, 0xf0, 0x3d, 0x66, 0x58, 0xc1, 0x63, 0xb2, 0x27,
-	0x65, 0x93, 0x3d, 0xe9, 0x11, 0x2c, 0xa8, 0xb4, 0x30, 0x08, 0xb4, 0x05, 0x54, 0xcc, 0xd7, 0x53,
-	0xca, 0xf5, 0x48, 0x1d, 0x21, 0xe7, 0xd5, 0x68, 0x55, 0x71, 0x1d, 0x20, 0x12, 0x11, 0x98, 0x21,
-	0x45, 0x20, 0xa8, 0x0a, 0x54, 0xbf, 0x8a, 0x63, 0xdb, 0xa6, 0x57, 0xca, 0xd3, 0xa0, 0x2e, 0xa6,
-	0xbf, 0x97, 0x96, 0x6d, 0x9b, 0x72, 0xd6, 0xe2, 0xbf, 0x3c, 0x74, 0x0d, 0xb2, 0x41, 0xcc, 0xf2,
-	0x4a, 0x0b, 0xb4, 0x31, 0xe9, 0x03, 0xd0, 0x3d, 0x58, 0x67, 0x46, 0xa7, 0x44, 0xca, 0x01, 0xd5,
-	0x74, 0x4e, 0xd4, 0x52, 0x81, 0xda, 0xe4, 0x2a, 0x5b, 0xee, 0xa7, 0xbf, 0x2a, 0x59, 0x44, 0x0d,
-	0x28, 0xc4, 0xb3, 0x7b, 0x69, 0x99, 0xaa, 0xe1, 0x8d, 0x09, 0xc3, 0xb5, 0xbc, 0x10, 0x4b, 0xe8,
-	0xe8, 0x17, 0x60, 0x85, 0xc6, 0xd0, 0x80, 0xb3, 0xe0, 0xd4, 0x15, 0x7a, 0xea, 0xdb, 0xa3, 0x4f,
-	0x1d, 0x8e, 0xc9, 0x32, 0x32, 0x9c, 0xa1, 0x38, 0xfd, 0xab, 0x02, 0xbc, 0x12, 0xb1, 0x4d, 0x96,
-	0xf3, 0x14, 0xce, 0x43, 0xf8, 0x2a, 0xd7, 0x28, 0xb5, 0xf7, 0x2f, 0x9a, 0x35, 0xe5, 0xeb, 0xdd,
-	0xf4, 0xf4, 0xfd, 0x14, 0x50, 0x97, 0xf4, 0x15, 0xd8, 0x52, 0x2d, 0x0d, 0x07, 0x32, 0xae, 0x8f,
-	0xab, 0x21, 0xf7, 0xfb, 0x38, 0x5c, 0xc4, 0xa5, 0xee, 0x20, 0x08, 0x59, 0x50, 0x26, 0x85, 0xa3,
-	0xc7, 0x23, 0xcd, 0x40, 0xd1, 0xf5, 0xc2, 0xb8, 0xd2, 0x7f, 0x44, 0x90, 0x92, 0xd7, 0x9d, 0x11,
-	0xd1, 0xeb, 0x45, 0xc8, 0x7a, 0xd8, 0x3c, 0x56, 0x4c, 0xc3, 0x3a, 0xe5, 0xd5, 0xfe, 0x3c, 0x01,
-	0xec, 0x19, 0xd6, 0x29, 0x09, 0x5a, 0xcf, 0x6d, 0x2b, 0xa8, 0xe9, 0xe9, 0x6f, 0x52, 0xfa, 0x60,
-	0x4b, 0x77, 0x6c, 0xc3, 0xf2, 0x79, 0x11, 0x1f, 0x3e, 0x13, 0x33, 0x0c, 0xc2, 0x55, 0xe0, 0x88,
-	0xcf, 0xb0, 0xeb, 0x91, 0xe0, 0xd6, 0x61, 0xd1, 0x95, 0x2f, 0xf3, 0xa8, 0xf8, 0x98, 0x2d, 0xd2,
-	0xfe, 0xa3, 0xe7, 0xba, 0xa4, 0xb6, 0xe7, 0x6f, 0x37, 0x40, 0x3b, 0xe1, 0xd1, 0x9f, 0xad, 0xb2,
-	0xf7, 0x16, 0x60, 0xdd, 0x82, 0x00, 0xce, 0x82, 0x63, 0x80, 0x63, 0x50, 0x1c, 0xc4, 0xd7, 0x88,
-	0x33, 0x05, 0x18, 0x2f, 0x43, 0x8e, 0x27, 0x70, 0xdf, 0xe8, 0xe2, 0xd2, 0xb7, 0x99, 0xa3, 0x32,
-	0xd0, 0x81, 0xd1, 0xc5, 0xe8, 0x67, 0x20, 0xe3, 0xf9, 0xaa, 0xdf, 0xf3, 0x4a, 0xa7, 0xb4, 0x6c,
-	0xb9, 0x99, 0xd6, 0x64, 0x51, 0x11, 0x2a, 0x6d, 0xba, 0x5f, 0xe6, 0x78, 0xe8, 0xeb, 0x50, 0x60,
-	0xbf, 0x94, 0x2e, 0xf6, 0x3c, 0xb5, 0x83, 0x4b, 0x26, 0xa5, 0xb2, 0xc0, 0xa0, 0xfb, 0x0c, 0x88,
-	0xde, 0x81, 0xe5, 0x81, 0xcc, 0xe5, 0x19, 0xcf, 0x71, 0xa9, 0xcb, 0x22, 0x7b, 0x34, 0x71, 0xb5,
-	0x8d, 0xe7, 0x78, 0x44, 0x46, 0xb7, 0x46, 0x64, 0xf4, 0x0a, 0x2c, 0x1b, 0x96, 0xe7, 0x53, 0xe3,
-	0xec, 0xb8, 0x76, 0xcf, 0x51, 0x7a, 0xae, 0xe9, 0x95, 0x6c, 0x1a, 0x35, 0x96, 0x82, 0xa5, 0x1d,
-	0xb2, 0x72, 0xe8, 0x9a, 0x1e, 0x39, 0x3d, 0xa6, 0x48, 0x96, 0x65, 0x1c, 0xc6, 0x4b, 0x44, 0x8d,
-	0x2c, 0xcb, 0xbc, 0x0c, 0x39, 0xfc, 0x99, 0x63, 0xb8, 0x5c, 0x89, 0xdf, 0x61, 0x4a, 0x64, 0x20,
-	0xaa, 0xc4, 0x32, 0xcc, 0x07, 0x6e, 0x5b, 0x72, 0x99, 0x85, 0x04, 0xcf, 0xa2, 0x01, 0x19, 0xa6,
-	0x30, 0xd2, 0x51, 0xb7, 0x0f, 0xaa, 0x07, 0x87, 0xed, 0x81, 0x6a, 0xad, 0x08, 0x79, 0x5a, 0xc7,
-	0xb5, 0xeb, 0xcd, 0x46, 0xbd, 0xb1, 0x53, 0x14, 0x50, 0x0e, 0xe6, 0xe4, 0xc3, 0x06, 0x7d, 0x98,
-	0x22, 0x9d, 0xb9, 0x2c, 0xd5, 0x9a, 0x8d, 0x5a, 0x7d, 0x8f, 0x00, 0xa6, 0x51, 0x1e, 0xe6, 0xdb,
-	0x07, 0xcd, 0x56, 0x8b, 0x3c, 0xcd, 0xa0, 0x2c, 0xcc, 0x4a, 0xb2, 0xdc, 0x94, 0x8b, 0xb3, 0xe2,
-	0xef, 0x65, 0x60, 0x81, 0xbf, 0xa4, 0x43, 0x47, 0x27, 0x1d, 0xe8, 0x2d, 0x58, 0xd1, 0xb1, 0x67,
-	0xb8, 0x24, 0x64, 0x44, 0x0d, 0x86, 0x15, 0x5b, 0x88, 0xaf, 0x45, 0x0d, 0xe6, 0x03, 0x28, 0x07,
-	0x18, 0x09, 0x29, 0x8a, 0xd5, 0x5e, 0x25, 0xbe, 0x63, 0x7f, 0x28, 0x53, 0x3d, 0x85, 0xd5, 0x00,
-	0x3b, 0x9e, 0x6b, 0x32, 0xe7, 0xca, 0x35, 0xcb, 0xfc, 0x90, 0x58, 0x23, 0xbb, 0x39, 0x20, 0x0b,
-	0x49, 0x2d, 0x8a, 0xa1, 0x07, 0x69, 0x33, 0x22, 0x0b, 0xc9, 0x1f, 0x75, 0x9d, 0xbc, 0xe4, 0x00,
-	0x21, 0x32, 0x6d, 0x63, 0x19, 0xb4, 0xc8, 0x57, 0xea, 0xe1, 0xd0, 0xcd, 0x81, 0x97, 0x86, 0x8f,
-	0x8f, 0x76, 0xb3, 0xd9, 0xb1, 0xed, 0x1f, 0x27, 0x1d, 0x6d, 0x64, 0xcb, 0x03, 0x6c, 0x45, 0x1b,
-	0xb7, 0xb7, 0x20, 0x60, 0x5a, 0xe9, 0x27, 0x3a, 0xa0, 0x26, 0x1b, 0xb0, 0xb7, 0x17, 0xe6, 0xbb,
-	0xdf, 0x10, 0xe0, 0xcd, 0xf0, 0xc5, 0x8c, 0xcd, 0x07, 0xf9, 0x4b, 0xe6, 0x83, 0xaf, 0x07, 0x6f,
-	0x38, 0x3d, 0x2d, 0x7c, 0x0e, 0x62, 0xc0, 0x53, 0x4a, 0x08, 0x2f, 0x5c, 0x34, 0x84, 0x5f, 0xe7,
-	0x87, 0x8f, 0xaa, 0x43, 0xdf, 0x85, 0xb5, 0x01, 0x95, 0x04, 0xf6, 0xcd, 0x87, 0x38, 0x31, 0x29,
-	0xb8, 0x85, 0x8b, 0xff, 0x91, 0x81, 0x6c, 0xd3, 0xc1, 0x2e, 0x55, 0x6c, 0x62, 0x95, 0x1a, 0x24,
-	0x81, 0xa9, 0x48, 0x12, 0x68, 0x42, 0xc1, 0x0e, 0x90, 0x98, 0x21, 0x4d, 0x8f, 0x8b, 0x97, 0x21,
-	0x91, 0x0a, 0x31, 0x30, 0x79, 0x21, 0xc4, 0xa7, 0xf6, 0xb6, 0x15, 0x06, 0xde, 0x99, 0x71, 0x63,
-	0xbd, 0xfe, 0x41, 0x03, 0xa1, 0x77, 0x0d, 0x32, 0x3a, 0xf6, 0x55, 0xc3, 0xe4, 0x56, 0xcd, 0x9f,
-	0x12, 0x42, 0xf2, 0x6c, 0x52, 0x48, 0x8e, 0x65, 0xc2, 0xcc, 0x40, 0x26, 0x7c, 0x19, 0x72, 0xbe,
-	0xea, 0x76, 0xb0, 0xcf, 0x96, 0x99, 0x97, 0x01, 0x03, 0xd1, 0x0d, 0xd1, 0xa0, 0x97, 0x8d, 0x07,
-	0x3d, 0xd2, 0x3f, 0x7b, 0xbe, 0xea, 0xfa, 0x2c, 0x60, 0xb2, 0xe6, 0x24, 0x4b, 0x21, 0x34, 0x5e,
-	0xbe, 0x40, 0x33, 0x2a, 0x5b, 0x64, 0xb5, 0xe3, 0x1c, 0xb6, 0x74, 0xb2, 0x24, 0xca, 0x63, 0xc3,
-	0x65, 0x0e, 0xe6, 0x5a, 0x52, 0x63, 0x3b, 0x21, 0x52, 0xce, 0xc3, 0xcc, 0x76, 0xb3, 0x21, 0xb1,
-	0x10, 0x59, 0xdd, 0x6a, 0xca, 0x07, 0x34, 0x44, 0x8a, 0xff, 0x33, 0x05, 0x33, 0x54, 0xe7, 0x2b,
-	0x50, 0x3c, 0xf8, 0xb8, 0x25, 0x0d, 0x1c, 0x88, 0xa0, 0x50, 0x93, 0xa5, 0xea, 0x81, 0xa4, 0xd4,
-	0xf6, 0x0e, 0xdb, 0x07, 0x92, 0x5c, 0x14, 0x08, 0x6c, 0x5b, 0xda, 0x93, 0x22, 0xb0, 0x29, 0x02,
-	0x3b, 0x6c, 0xed, 0xc8, 0xd5, 0x6d, 0x49, 0xd9, 0xaf, 0x52, 0xd8, 0x34, 0x5a, 0x82, 0x85, 0x00,
-	0xd6, 0x68, 0x6e, 0x4b, 0xed, 0xe2, 0x0c, 0xd9, 0x26, 0x4b, 0xad, 0x6a, 0x5d, 0x0e, 0x51, 0x67,
-	0x19, 0xea, 0x76, 0x94, 0x44, 0x86, 0x30, 0xc3, 0xc9, 0x12, 0x4c, 0xa5, 0xd5, 0x6c, 0xee, 0x15,
-	0xe7, 0x08, 0x94, 0x13, 0xee, 0x43, 0xe7, 0xd1, 0x35, 0x28, 0xb5, 0xa5, 0x83, 0x3e, 0x48, 0xd9,
-	0xaf, 0x36, 0xaa, 0x3b, 0xd2, 0xbe, 0xd4, 0x38, 0x28, 0x66, 0xd1, 0x2a, 0x2c, 0x55, 0x0f, 0x0f,
-	0x9a, 0x0a, 0x27, 0xcb, 0x18, 0x01, 0xa2, 0x40, 0x0a, 0x8e, 0x33, 0x98, 0x43, 0x05, 0x00, 0x72,
-	0xd8, 0x5e, 0x75, 0x4b, 0xda, 0x6b, 0x17, 0xf3, 0x68, 0x19, 0x16, 0xc9, 0x33, 0x93, 0x49, 0xa9,
-	0x1e, 0x1e, 0xec, 0x16, 0x17, 0xa8, 0xf6, 0x63, 0x14, 0xdb, 0xf5, 0xa7, 0x52, 0xb1, 0x10, 0xc2,
-	0xa5, 0x83, 0x27, 0x4d, 0xf9, 0x91, 0xd2, 0x6a, 0xee, 0xd5, 0x6b, 0x1f, 0x17, 0x17, 0x51, 0x19,
-	0xd6, 0xd8, 0x21, 0xf5, 0xc6, 0x81, 0xd4, 0xa8, 0x36, 0x6a, 0x52, 0xb0, 0x56, 0x14, 0x7f, 0x57,
-	0x80, 0x95, 0x1a, 0x2d, 0x39, 0x78, 0x76, 0x92, 0xf1, 0x77, 0x7a, 0xd8, 0xf3, 0x89, 0x99, 0x38,
-	0xae, 0xfd, 0x6d, 0xac, 0xf9, 0x24, 0x90, 0x33, 0x17, 0xcc, 0x72, 0x48, 0x5d, 0x4f, 0xf4, 0xc3,
-	0x07, 0x30, 0xc7, 0x0b, 0x2d, 0x3e, 0xf2, 0x7b, 0x65, 0x6c, 0xc1, 0x22, 0x07, 0x18, 0xc4, 0x5f,
-	0x1c, 0x95, 0xe4, 0x76, 0xee, 0x0f, 0xfc, 0x49, 0x3c, 0x83, 0xa5, 0x1d, 0xec, 0x5f, 0x9e, 0x39,
-	0x3a, 0xf0, 0xe5, 0xed, 0x98, 0xce, 0x87, 0x1f, 0xd9, 0xa0, 0x0f, 0xd3, 0xc3, 0x58, 0x33, 0xdb,
-	0x8f, 0x35, 0xe2, 0x5f, 0x0a, 0xb0, 0xc2, 0x92, 0xf5, 0x95, 0x93, 0xff, 0x08, 0x32, 0x3d, 0x4a,
-	0x89, 0xf7, 0xc9, 0x6f, 0x8c, 0xd5, 0x1c, 0x63, 0x4c, 0xe6, 0x68, 0x89, 0xfc, 0xff, 0xcb, 0x14,
-	0xac, 0xb4, 0xb1, 0x1f, 0xe9, 0x88, 0xaf, 0x8c, 0xff, 0x7d, 0xc8, 0xa8, 0x9a, 0x1f, 0x94, 0x2f,
-	0x85, 0x3b, 0xef, 0x8d, 0xe6, 0x3f, 0x89, 0xa3, 0x4a, 0x95, 0x22, 0xcb, 0xfc, 0x10, 0xf4, 0x41,
-	0xa8, 0x8e, 0xf3, 0xf4, 0xfb, 0x83, 0xba, 0x98, 0x8b, 0xe8, 0xa2, 0x05, 0x19, 0x46, 0x83, 0x84,
-	0xa5, 0xc3, 0xc6, 0xa3, 0x46, 0xf3, 0x49, 0x83, 0xd5, 0x77, 0xc4, 0x35, 0x5a, 0xd5, 0x76, 0xfb,
-	0x49, 0x53, 0xde, 0x2e, 0x0a, 0xc4, 0x61, 0x77, 0xa4, 0x86, 0x24, 0x13, 0xe7, 0x0f, 0xc1, 0x53,
-	0xc1, 0xc6, 0xc3, 0xb6, 0x24, 0x37, 0xaa, 0xfb, 0x52, 0x71, 0x5a, 0xfc, 0x45, 0x58, 0xd9, 0xc6,
-	0x26, 0xfe, 0x0a, 0x8c, 0x23, 0x90, 0x67, 0x26, 0x22, 0xcf, 0xb7, 0x60, 0x79, 0xcf, 0xf0, 0x02,
-	0xbf, 0xf0, 0x2e, 0x41, 0xbc, 0xef, 0x78, 0x33, 0x31, 0xc7, 0x7b, 0x0e, 0x2b, 0x71, 0x0a, 0x9e,
-	0x63, 0x5b, 0x1e, 0x46, 0x1f, 0xc2, 0x3c, 0x67, 0xcd, 0x2b, 0x09, 0x74, 0x78, 0x30, 0x81, 0x9b,
-	0x87, 0x28, 0xe8, 0x55, 0x58, 0xe8, 0x1a, 0x9e, 0x47, 0x2a, 0x57, 0x42, 0x9e, 0x4d, 0x95, 0xb3,
-	0x72, 0x9e, 0x03, 0x9f, 0x12, 0x98, 0xf8, 0xcb, 0xb0, 0xbc, 0x83, 0xfd, 0x30, 0xb7, 0x5e, 0x42,
-	0xba, 0x57, 0x20, 0xdf, 0xaf, 0x0d, 0x42, 0xe5, 0xe6, 0x42, 0xd8, 0x08, 0xd7, 0x3f, 0x82, 0x55,
-	0x22, 0x7c, 0xc8, 0xc1, 0x55, 0x28, 0xf8, 0xfb, 0x02, 0xac, 0xd5, 0x48, 0xef, 0x63, 0x7e, 0xc5,
-	0x82, 0x46, 0xed, 0x88, 0x30, 0x31, 0x28, 0x29, 0x7f, 0xd1, 0x35, 0x80, 0x10, 0x3b, 0x78, 0xd5,
-	0xaf, 0x4e, 0x50, 0x09, 0xc9, 0x11, 0xb4, 0xc9, 0x5e, 0xb7, 0x02, 0x6b, 0x3b, 0xd8, 0x27, 0x8d,
-	0x0a, 0x0e, 0x3e, 0x3e, 0x5f, 0x5c, 0x11, 0x49, 0x52, 0xfe, 0xda, 0x14, 0xe4, 0xa3, 0xc7, 0xa3,
-	0x7b, 0xb0, 0xae, 0xe3, 0x63, 0xb5, 0x67, 0xfa, 0x43, 0xb3, 0x01, 0x46, 0x64, 0x95, 0x2f, 0x0f,
-	0xcc, 0x06, 0x2a, 0xb0, 0xfc, 0x4c, 0x35, 0x8d, 0x78, 0xcb, 0x16, 0x5c, 0x60, 0x58, 0xa2, 0x4b,
-	0x91, 0x8e, 0xcd, 0x63, 0x7d, 0x0e, 0xa3, 0x13, 0xe9, 0x73, 0x66, 0x82, 0x3e, 0x87, 0xae, 0xf4,
-	0xfb, 0x9c, 0x0d, 0x60, 0x47, 0x44, 0xf6, 0x7a, 0xa5, 0x59, 0x7a, 0xf6, 0x22, 0x5d, 0x08, 0xb7,
-	0x7a, 0xe8, 0x0e, 0xac, 0xb2, 0xbd, 0xf1, 0xf2, 0x9a, 0xdd, 0x4b, 0xc8, 0xca, 0x8c, 0xcd, 0x58,
-	0x75, 0xed, 0x89, 0x7f, 0x2d, 0xc0, 0x2a, 0x4b, 0xf6, 0xe1, 0x50, 0xef, 0x0a, 0x33, 0x5a, 0x36,
-	0xec, 0xd5, 0x78, 0x52, 0x9b, 0x64, 0xc8, 0x38, 0x1f, 0x0c, 0x19, 0x23, 0x6e, 0x93, 0x89, 0xb9,
-	0xcd, 0x17, 0x02, 0xac, 0xb2, 0xc0, 0x7b, 0xf5, 0x42, 0xdc, 0x80, 0x7c, 0xac, 0x9f, 0x65, 0x2f,
-	0x0e, 0xac, 0x7e, 0x23, 0x1b, 0x58, 0x5b, 0x26, 0x62, 0x6d, 0xbf, 0x22, 0xb0, 0xd0, 0x19, 0xf0,
-	0xe7, 0x5d, 0x1d, 0x83, 0xa3, 0xaa, 0xa6, 0xdf, 0x11, 0x00, 0xed, 0x60, 0xff, 0xa7, 0x55, 0x43,
-	0xff, 0x35, 0x03, 0xf3, 0x01, 0x6f, 0x89, 0x6d, 0xde, 0x07, 0x90, 0xe1, 0x1d, 0xea, 0xd4, 0x39,
-	0xbe, 0x1b, 0x70, 0x9c, 0x73, 0x7e, 0xa8, 0x48, 0x1d, 0x3a, 0x96, 0x60, 0x2e, 0x08, 0x0c, 0x6c,
-	0xee, 0x18, 0x3c, 0x8e, 0x9a, 0x6b, 0x1d, 0x8f, 0x9a, 0x6b, 0x55, 0xc3, 0xa6, 0xb2, 0x43, 0x4b,
-	0xa4, 0x37, 0xc7, 0x7b, 0xc3, 0xf8, 0x71, 0xde, 0x49, 0x52, 0xef, 0xd8, 0x84, 0x5c, 0x74, 0x38,
-	0x32, 0x73, 0x91, 0xe1, 0x48, 0xf4, 0x04, 0xb4, 0x0b, 0xd0, 0x55, 0x2d, 0xb5, 0x83, 0xbb, 0x81,
-	0xa5, 0xe5, 0xd2, 0x9a, 0x6b, 0x72, 0xde, 0x7e, 0xb8, 0x5f, 0x8e, 0xe0, 0x8a, 0xdf, 0x13, 0x2e,
-	0x3b, 0x72, 0x5b, 0x03, 0xc4, 0x1f, 0x94, 0x27, 0xf5, 0x83, 0x5d, 0x85, 0x0d, 0xd8, 0xa6, 0x07,
-	0x47, 0x71, 0x33, 0xb1, 0x51, 0xdc, 0x6c, 0x7f, 0x14, 0x97, 0x11, 0xff, 0x48, 0x80, 0x42, 0x9c,
-	0x45, 0x92, 0x3c, 0x89, 0xbc, 0x4a, 0xcf, 0xe9, 0xb8, 0xaa, 0x1e, 0xdc, 0xe3, 0xa0, 0x3a, 0x38,
-	0x64, 0x20, 0xd2, 0x73, 0xd3, 0x2d, 0x2e, 0x76, 0x54, 0xc3, 0xe5, 0x1f, 0x5a, 0x81, 0x80, 0x64,
-	0x0a, 0x41, 0x87, 0xb0, 0xc8, 0xd1, 0x15, 0xdb, 0x09, 0x06, 0x46, 0x63, 0x3e, 0x34, 0x54, 0xfb,
-	0x04, 0x9a, 0x0c, 0x47, 0x2e, 0xf4, 0x62, 0xcf, 0x62, 0x17, 0xd0, 0xf0, 0x2e, 0xf4, 0x1e, 0xac,
-	0x47, 0x19, 0x56, 0x22, 0x1d, 0x3d, 0x73, 0xa3, 0x95, 0x08, 0xef, 0xed, 0xb0, 0xb9, 0x1f, 0xfb,
-	0x8d, 0x4f, 0xfc, 0x26, 0x2c, 0x0d, 0x7d, 0x19, 0x40, 0x35, 0xc8, 0x7c, 0x6a, 0x58, 0xba, 0xfd,
-	0xe9, 0xf8, 0xab, 0x29, 0x11, 0xe4, 0x27, 0x14, 0x45, 0xe6, 0xa8, 0xe2, 0xaf, 0x0b, 0xb1, 0xa3,
-	0xd9, 0x2a, 0x32, 0xa1, 0xa4, 0xab, 0x86, 0x79, 0xa6, 0x44, 0xbf, 0x61, 0x70, 0x62, 0xcc, 0xf5,
-	0x53, 0x3e, 0xd6, 0x6f, 0x13, 0xcc, 0xa1, 0x33, 0x77, 0xbf, 0x26, 0xaf, 0xe9, 0x89, 0x2b, 0x5b,
-	0xf3, 0x90, 0x61, 0xf3, 0x2f, 0xb1, 0x0d, 0x6b, 0xc9, 0xd8, 0x03, 0xf3, 0x91, 0xa9, 0xc1, 0xf9,
-	0x48, 0x19, 0xe6, 0xf5, 0x1e, 0xab, 0x6e, 0x78, 0x34, 0x0c, 0x9f, 0xc5, 0xff, 0x14, 0xe0, 0x5a,
-	0xbb, 0x1f, 0x75, 0x23, 0x3e, 0xf0, 0x7f, 0x18, 0x7f, 0x7f, 0x62, 0xce, 0x9b, 0xd8, 0x57, 0x7d,
-	0x29, 0xc0, 0x75, 0xd9, 0x36, 0xcd, 0x23, 0x55, 0x3b, 0x0d, 0xe4, 0xe6, 0x66, 0xf7, 0xd3, 0x96,
-	0x74, 0x9e, 0xb2, 0x9a, 0x3e, 0x92, 0x95, 0x79, 0xa1, 0x1b, 0xff, 0x20, 0x2a, 0x5c, 0xe0, 0x83,
-	0xa8, 0xf8, 0x5d, 0x58, 0x4e, 0x1a, 0x23, 0x8f, 0xbe, 0x5a, 0xf3, 0x1a, 0x14, 0xba, 0x86, 0x15,
-	0x4d, 0x4f, 0xec, 0x9a, 0x6c, 0xbe, 0x6b, 0x58, 0xfd, 0xd4, 0x44, 0x76, 0xa9, 0x9f, 0x0d, 0x27,
-	0xb1, 0x7c, 0x57, 0xfd, 0x2c, 0xdc, 0x25, 0xfe, 0xe3, 0x14, 0x14, 0xdb, 0xd8, 0x67, 0x57, 0x1f,
-	0xaf, 0x4e, 0xeb, 0x1d, 0x58, 0x74, 0xb1, 0x67, 0xf7, 0x5c, 0x0d, 0x2b, 0xfc, 0x0e, 0x2c, 0xbb,
-	0x70, 0xfb, 0xff, 0x53, 0x9b, 0xfd, 0x18, 0x5b, 0x15, 0x99, 0x9f, 0x10, 0xbd, 0x11, 0x5b, 0x70,
-	0x63, 0x40, 0xf4, 0x16, 0x2c, 0xd1, 0xf3, 0x95, 0x63, 0xc3, 0xea, 0x60, 0xd7, 0x71, 0x8d, 0xb0,
-	0xbe, 0x29, 0xd2, 0x85, 0x87, 0x7d, 0x78, 0x92, 0x51, 0x96, 0xab, 0xb0, 0x9c, 0x40, 0xe7, 0x5c,
-	0xf7, 0x41, 0x7f, 0x4b, 0xa0, 0xb3, 0x93, 0x3d, 0xdc, 0x51, 0xb5, 0xb3, 0xea, 0x91, 0xaa, 0x5d,
-	0x9d, 0x5e, 0x23, 0x46, 0x32, 0x13, 0x37, 0x92, 0x24, 0x2b, 0xfe, 0x25, 0x58, 0xa3, 0xf1, 0xbc,
-	0xde, 0x92, 0xf9, 0x35, 0xee, 0xab, 0x1f, 0x3c, 0x44, 0xe9, 0x7f, 0x4f, 0x80, 0x17, 0x6a, 0x76,
-	0xd7, 0x21, 0x05, 0xf8, 0x57, 0xc9, 0x43, 0x34, 0xe8, 0x9c, 0xc2, 0xd2, 0xd0, 0x75, 0x65, 0x62,
-	0x35, 0x91, 0x0b, 0xcb, 0xdc, 0x5d, 0x08, 0x07, 0xd3, 0x72, 0x51, 0x8d, 0xee, 0x26, 0x8e, 0xf5,
-	0x26, 0x44, 0x61, 0xac, 0x2b, 0x63, 0x4c, 0x2d, 0x46, 0xe0, 0xa4, 0xd3, 0x12, 0xff, 0x41, 0x80,
-	0x75, 0x12, 0xd4, 0x63, 0x37, 0x0d, 0xae, 0x4c, 0xdc, 0xe1, 0x3b, 0x10, 0x33, 0x97, 0xba, 0x03,
-	0x91, 0xf4, 0x0a, 0xff, 0x4d, 0x80, 0x17, 0xe9, 0x14, 0x6e, 0xf0, 0x06, 0xc0, 0x95, 0x49, 0x95,
-	0x7c, 0x47, 0x61, 0xe6, 0x27, 0x72, 0x47, 0x21, 0x61, 0x7c, 0x73, 0xe7, 0x5f, 0xaf, 0x43, 0x81,
-	0x77, 0xee, 0x2c, 0x97, 0xb9, 0xe8, 0x4b, 0x01, 0xf2, 0xd1, 0x79, 0x16, 0x4a, 0x29, 0x88, 0x13,
-	0x26, 0x6b, 0xe5, 0xca, 0xa4, 0xdb, 0x59, 0x52, 0x11, 0xbf, 0xf1, 0xfd, 0x7f, 0xfe, 0xf1, 0x6f,
-	0x4e, 0xdd, 0x45, 0xb7, 0xc3, 0x3f, 0xda, 0xf8, 0x2e, 0xeb, 0xcd, 0x3e, 0xe4, 0x9a, 0xf4, 0x36,
-	0x37, 0x36, 0xc3, 0x6f, 0x8b, 0x9b, 0x1b, 0x9f, 0x6f, 0x86, 0x23, 0xb2, 0xdf, 0x16, 0x00, 0xfa,
-	0x33, 0x6f, 0x94, 0xa2, 0xa0, 0xa1, 0xc9, 0x78, 0x79, 0xfc, 0x2c, 0x2e, 0x89, 0x33, 0xa2, 0xb4,
-	0x11, 0x7c, 0x85, 0x6c, 0x6d, 0x6e, 0x7c, 0x8e, 0x7e, 0x20, 0xc0, 0x42, 0xec, 0x6b, 0x01, 0x4a,
-	0x51, 0x4b, 0xd2, 0x67, 0x85, 0xf2, 0x24, 0x03, 0x24, 0xf1, 0x03, 0xca, 0xe1, 0x3d, 0xf1, 0xfc,
-	0xba, 0xbb, 0x2f, 0x6c, 0x50, 0x26, 0x63, 0x63, 0xfb, 0x34, 0x26, 0x93, 0xe6, 0xfb, 0xe7, 0x62,
-	0xb2, 0x7c, 0x7e, 0x35, 0x12, 0x26, 0x7f, 0x28, 0xc0, 0x42, 0x6c, 0x12, 0x9e, 0xc6, 0x64, 0xd2,
-	0xc8, 0x7c, 0x32, 0x26, 0x7f, 0x96, 0x32, 0xb9, 0x2d, 0x7e, 0x74, 0x7e, 0x26, 0xbd, 0x28, 0x51,
-	0xc2, 0xf2, 0x17, 0x02, 0x2c, 0xc4, 0x26, 0xde, 0x69, 0x2c, 0x27, 0x8d, 0xc6, 0x27, 0x63, 0x99,
-	0x9b, 0xe7, 0xc6, 0x05, 0xcc, 0xf3, 0x87, 0x02, 0x14, 0xe2, 0xc3, 0x4c, 0xb4, 0x99, 0xee, 0xb6,
-	0x43, 0x03, 0xde, 0xf2, 0xad, 0xc9, 0x11, 0xb8, 0xa7, 0x3f, 0xa0, 0x0c, 0xbf, 0x87, 0xee, 0x4e,
-	0x6c, 0xad, 0x91, 0xf9, 0xe8, 0x17, 0x02, 0xe4, 0xa3, 0xa3, 0xee, 0xb4, 0xb0, 0x94, 0x30, 0x12,
-	0x9f, 0x4c, 0xa5, 0x09, 0x1c, 0xa6, 0xa9, 0xb4, 0xcf, 0x1e, 0xf7, 0xf9, 0xc5, 0x81, 0x31, 0x35,
-	0x4a, 0x51, 0x52, 0xf2, 0x44, 0xbb, 0xbc, 0x16, 0x60, 0x04, 0x7f, 0x64, 0x56, 0x91, 0xba, 0x8e,
-	0x7f, 0x26, 0x4a, 0x94, 0xb5, 0x8f, 0xc4, 0xfb, 0x17, 0x60, 0xed, 0xbe, 0x46, 0x69, 0x11, 0xdb,
-	0xfc, 0x52, 0x80, 0xc5, 0x81, 0x11, 0x72, 0x1a, 0x93, 0xc9, 0xd3, 0xe6, 0xf2, 0xeb, 0x69, 0x2e,
-	0xd8, 0xdf, 0x7e, 0x4e, 0x7d, 0x7e, 0xbe, 0xe9, 0x45, 0xd9, 0xfa, 0x91, 0x00, 0x0b, 0xb1, 0x3e,
-	0x04, 0x8d, 0x49, 0x2d, 0x83, 0x63, 0xc4, 0xf2, 0xe6, 0xc4, 0xfb, 0xb9, 0x85, 0x72, 0x25, 0xa3,
-	0x0f, 0x27, 0xb4, 0xd0, 0xa8, 0x53, 0x6d, 0xf6, 0x6f, 0x7d, 0xfe, 0xbe, 0x00, 0xb9, 0xc8, 0x50,
-	0x11, 0xbd, 0x9d, 0xaa, 0xe0, 0x81, 0xd9, 0x63, 0x79, 0x82, 0x8e, 0x2a, 0x89, 0xd1, 0xc9, 0x7c,
-	0xbf, 0xcf, 0x65, 0x10, 0x07, 0xe2, 0x73, 0xee, 0xb4, 0x38, 0x90, 0x38, 0x11, 0x9f, 0xcc, 0xb1,
-	0x76, 0x29, 0xbf, 0x5b, 0xe2, 0xe5, 0x14, 0x4b, 0x0c, 0xf8, 0x4f, 0x04, 0x28, 0xc4, 0xa7, 0xda,
-	0x69, 0x2c, 0x27, 0xce, 0xbf, 0x27, 0x63, 0x99, 0xab, 0x78, 0xe3, 0x92, 0x2a, 0xfe, 0x3b, 0x01,
-	0xd6, 0x47, 0xf4, 0xfd, 0x28, 0xe5, 0x6e, 0x53, 0xfa, 0xa8, 0x60, 0x32, 0x09, 0x7e, 0x8e, 0x4a,
-	0xf0, 0x48, 0x7c, 0x78, 0x29, 0x09, 0xee, 0xbb, 0x9c, 0x15, 0xa2, 0xfd, 0xbf, 0x17, 0x60, 0x35,
-	0x71, 0x70, 0x83, 0xee, 0xa5, 0x66, 0xe5, 0x91, 0x93, 0x9e, 0xc9, 0x24, 0x79, 0x4c, 0x25, 0x69,
-	0x89, 0x8f, 0x2e, 0x27, 0x09, 0xcd, 0xd4, 0x01, 0x03, 0x44, 0x9c, 0x3f, 0x16, 0x20, 0x1b, 0x76,
-	0xde, 0x68, 0x63, 0xf2, 0xf6, 0x7c, 0x32, 0xb6, 0x1b, 0x94, 0xed, 0x5d, 0xb1, 0x76, 0xa1, 0xa2,
-	0x22, 0xde, 0x99, 0x47, 0x6a, 0xa1, 0x7e, 0xaf, 0x3d, 0xa6, 0x16, 0x1a, 0x6a, 0xca, 0xbf, 0x8a,
-	0x5a, 0xa8, 0x4f, 0x94, 0xb0, 0xfc, 0x67, 0x02, 0x2c, 0x0e, 0xb4, 0xe1, 0x69, 0xf9, 0x26, 0xb9,
-	0x63, 0x9f, 0x8c, 0xed, 0x3d, 0xca, 0xf6, 0x43, 0xb1, 0x7a, 0x01, 0xb6, 0x29, 0x59, 0x27, 0x20,
-	0x4b, 0x18, 0xff, 0x2b, 0x01, 0xd0, 0x70, 0xfb, 0x8e, 0xee, 0xa6, 0x84, 0xc7, 0x51, 0xcd, 0xfe,
-	0x64, 0xec, 0x37, 0x29, 0xfb, 0x75, 0x71, 0xfb, 0xfc, 0xec, 0x6b, 0x01, 0xe5, 0x98, 0x04, 0x7f,
-	0x2e, 0xd0, 0x69, 0x57, 0xfc, 0x6f, 0xbc, 0x6e, 0xa7, 0xbb, 0x69, 0x42, 0xef, 0x3e, 0x19, 0xf7,
-	0xfb, 0x94, 0xfb, 0x1d, 0x71, 0xeb, 0x42, 0x36, 0x13, 0xa3, 0x4b, 0x78, 0xff, 0x1b, 0x81, 0xdf,
-	0xc8, 0x19, 0x6c, 0x62, 0xc7, 0xdd, 0x97, 0x49, 0xee, 0xd4, 0xaf, 0x38, 0x5e, 0xf2, 0xc8, 0x32,
-	0x40, 0xfb, 0xbe, 0xb0, 0xb1, 0xf5, 0x17, 0x02, 0x5c, 0xd3, 0xec, 0xee, 0x48, 0xea, 0x5b, 0xcb,
-	0xb5, 0xe0, 0x0f, 0xb4, 0xe8, 0xe5, 0xe3, 0x16, 0x29, 0xfa, 0x5a, 0xc2, 0xd3, 0x2a, 0x47, 0xe8,
-	0xd8, 0xa6, 0x6a, 0x75, 0x2a, 0xb6, 0xdb, 0xd9, 0xec, 0x60, 0x8b, 0x96, 0x84, 0x9b, 0x6c, 0x49,
-	0x75, 0x0c, 0x6f, 0xf8, 0x1f, 0x1e, 0x3c, 0x08, 0x21, 0x7f, 0x38, 0x75, 0x7d, 0x87, 0x9d, 0x51,
-	0x33, 0xed, 0x9e, 0x5e, 0xa9, 0x85, 0xa4, 0x1f, 0xdf, 0xde, 0x22, 0x5b, 0xff, 0x36, 0xd8, 0xf0,
-	0x09, 0xdd, 0xf0, 0x49, 0xb8, 0xe1, 0x93, 0xc7, 0xec, 0xac, 0xa3, 0x0c, 0xa5, 0x77, 0xf7, 0x7f,
-	0x03, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x57, 0xdd, 0xd1, 0x5f, 0x41, 0x00, 0x00,
+	proto.RegisterFile("google/container/v1beta1/cluster_service.proto", fileDescriptor_cluster_service_4b3d530a1685571f)
+}
+
+var fileDescriptor_cluster_service_4b3d530a1685571f = []byte{
+	// 7032 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5d, 0x6b, 0x6c, 0x23, 0xd7,
+	0x75, 0xf6, 0x50, 0x94, 0x44, 0x1d, 0x49, 0x14, 0x75, 0xa5, 0xd5, 0x72, 0xb9, 0x0f, 0xef, 0x8e,
+	0x5f, 0xeb, 0xb5, 0x2d, 0x79, 0xd7, 0x8e, 0xed, 0xf8, 0x11, 0x87, 0xa2, 0xc6, 0x5a, 0x61, 0x25,
+	0x92, 0x1e, 0x52, 0xbb, 0xb6, 0x62, 0x64, 0x3a, 0x22, 0xef, 0x52, 0xe3, 0x25, 0x67, 0xc6, 0x33,
+	0xc3, 0x7d, 0x19, 0x1b, 0xd4, 0x79, 0xb4, 0xe9, 0x23, 0x49, 0xf3, 0xea, 0x23, 0x4d, 0xd3, 0x34,
+	0x88, 0x93, 0x34, 0x29, 0x1a, 0x04, 0x45, 0x90, 0x36, 0x6d, 0xd3, 0xfe, 0x69, 0x81, 0xa6, 0x40,
+	0x0b, 0xb4, 0x3f, 0xfa, 0xa3, 0x0d, 0xda, 0x1f, 0x29, 0x8a, 0xb6, 0x68, 0x81, 0xf6, 0x4f, 0x7f,
+	0xb5, 0x28, 0xee, 0x6b, 0x1e, 0xe4, 0xf0, 0x21, 0x6a, 0xad, 0xf8, 0xd7, 0x6a, 0xce, 0xbd, 0xe7,
+	0x3e, 0xce, 0x3d, 0xf7, 0xdc, 0xef, 0x9c, 0x7b, 0x2e, 0x17, 0x96, 0x1b, 0x96, 0xd5, 0x68, 0xe2,
+	0x95, 0x9a, 0x65, 0x7a, 0xba, 0x61, 0x62, 0x67, 0xe5, 0xfa, 0xf9, 0x5d, 0xec, 0xe9, 0xe7, 0x57,
+	0x6a, 0xcd, 0xb6, 0xeb, 0x61, 0x47, 0x73, 0xb1, 0x73, 0xdd, 0xa8, 0xe1, 0x65, 0xdb, 0xb1, 0x3c,
+	0x0b, 0x65, 0x59, 0xfd, 0x65, 0xbf, 0xfe, 0x32, 0xaf, 0x9f, 0x3b, 0xc1, 0x5b, 0xd2, 0x6d, 0x63,
+	0x45, 0x37, 0x4d, 0xcb, 0xd3, 0x3d, 0xc3, 0x32, 0x5d, 0xc6, 0x97, 0x3b, 0xc5, 0x4b, 0x0d, 0xbd,
+	0xb5, 0x72, 0xfd, 0x3c, 0xf9, 0x47, 0xb3, 0xad, 0xa6, 0x51, 0xbb, 0xc5, 0xcb, 0x73, 0xd1, 0xf2,
+	0x48, 0xd9, 0x71, 0x5e, 0x46, 0xbf, 0x76, 0xdb, 0x57, 0x57, 0x70, 0xcb, 0xf6, 0x78, 0xa1, 0xfc,
+	0x1f, 0x13, 0x00, 0x45, 0xab, 0x8e, 0x0b, 0x96, 0x79, 0xd5, 0x68, 0xa0, 0x33, 0x30, 0xd3, 0xd2,
+	0x6b, 0x7b, 0x86, 0x89, 0x35, 0xef, 0x96, 0x8d, 0xb3, 0xd2, 0x69, 0xe9, 0xec, 0x94, 0x3a, 0xcd,
+	0x69, 0xd5, 0x5b, 0x36, 0x46, 0xa7, 0x61, 0xa6, 0x6e, 0xb8, 0xd7, 0x34, 0xd7, 0xb8, 0x8d, 0xb5,
+	0xc6, 0x6e, 0x36, 0x71, 0x5a, 0x3a, 0x3b, 0xae, 0x02, 0xa1, 0x55, 0x8c, 0xdb, 0x78, 0x7d, 0x97,
+	0x34, 0x62, 0xe9, 0x6d, 0x6f, 0x4f, 0x73, 0x6b, 0x96, 0x8d, 0xdd, 0xec, 0xd8, 0xe9, 0x31, 0xd2,
+	0x08, 0xa5, 0x55, 0x28, 0x09, 0x3d, 0x04, 0x73, 0x5c, 0x30, 0x9a, 0x5e, 0xab, 0x59, 0x6d, 0xd3,
+	0xcb, 0x4e, 0xd1, 0xae, 0xd2, 0x9c, 0x9c, 0x67, 0x54, 0x54, 0x84, 0x54, 0x0b, 0x7b, 0x7a, 0x5d,
+	0xf7, 0xf4, 0x6c, 0xf2, 0xf4, 0xd8, 0xd9, 0xe9, 0x0b, 0x17, 0x96, 0x7b, 0xc9, 0x70, 0x39, 0x98,
+	0xc8, 0xf2, 0x16, 0x67, 0x52, 0x4c, 0xcf, 0xb9, 0xa5, 0xfa, 0x6d, 0xa0, 0x93, 0x00, 0x46, 0x4b,
+	0x6f, 0xf0, 0xe9, 0x8d, 0xd3, 0x3e, 0xa7, 0x28, 0x85, 0x4e, 0xee, 0x22, 0x4c, 0x34, 0xf5, 0x5d,
+	0xdc, 0x74, 0xb3, 0x13, 0xb4, 0xb3, 0xc7, 0x87, 0xea, 0x6c, 0x93, 0xb2, 0xb0, 0xae, 0x38, 0x3f,
+	0x7a, 0x10, 0xe6, 0x9a, 0x56, 0x4d, 0x6f, 0x6a, 0xae, 0x5b, 0xd7, 0xd8, 0x0c, 0x27, 0xa9, 0xa4,
+	0x66, 0x29, 0xb9, 0xe2, 0xd6, 0x0b, 0x74, 0x82, 0x08, 0x92, 0x9e, 0xde, 0x70, 0xb3, 0x29, 0x2a,
+	0x24, 0xfa, 0x37, 0x3a, 0x0d, 0xd3, 0xb6, 0x83, 0xc9, 0x32, 0x19, 0xbb, 0x4d, 0x9c, 0x85, 0xd3,
+	0xd2, 0xd9, 0x94, 0x1a, 0x26, 0xa1, 0x12, 0xcc, 0xe8, 0xb5, 0x1a, 0x6e, 0x62, 0x47, 0xf7, 0x2c,
+	0xc7, 0xcd, 0x4e, 0xd3, 0xd1, 0x3e, 0xd2, 0x7b, 0xb4, 0xf9, 0xa0, 0x36, 0x1b, 0xb4, 0x1a, 0x69,
+	0x00, 0x1d, 0x87, 0x29, 0xba, 0xaa, 0x54, 0x2c, 0x33, 0x54, 0x2c, 0x29, 0x42, 0xa0, 0x52, 0x39,
+	0x0b, 0x99, 0x96, 0x61, 0x6a, 0x35, 0xbb, 0xad, 0xd9, 0x4d, 0xdd, 0xbb, 0x6a, 0x39, 0xad, 0xec,
+	0x2c, 0x5b, 0xae, 0x96, 0x61, 0x16, 0xec, 0x76, 0x99, 0x53, 0xd1, 0xeb, 0x90, 0xbd, 0x61, 0x39,
+	0xd7, 0x9a, 0x96, 0x5e, 0xd7, 0x84, 0xcc, 0xb5, 0x1a, 0xed, 0x30, 0x9b, 0x3e, 0x2d, 0xf5, 0x97,
+	0xe8, 0x15, 0xce, 0x29, 0xd6, 0x8e, 0x0f, 0x74, 0xe9, 0x46, 0x2c, 0x1d, 0x3d, 0x07, 0x13, 0xa4,
+	0x01, 0xcf, 0xcd, 0xce, 0xd1, 0xd9, 0xdf, 0xd7, 0x7f, 0xad, 0xaa, 0xa4, 0xae, 0xca, 0x59, 0x72,
+	0xcf, 0xc1, 0x6c, 0x44, 0x45, 0x50, 0x06, 0xc6, 0xae, 0xe1, 0x5b, 0x5c, 0xe1, 0xc9, 0x9f, 0x68,
+	0x11, 0xc6, 0xaf, 0xeb, 0xcd, 0x36, 0xa6, 0x1a, 0x3e, 0xa5, 0xb2, 0x8f, 0x67, 0x13, 0xcf, 0x48,
+	0xb9, 0xf7, 0xc2, 0x74, 0x68, 0xc9, 0xf7, 0xc3, 0x2a, 0xff, 0x8d, 0x04, 0x53, 0xfe, 0x68, 0x86,
+	0xe5, 0x44, 0xab, 0x30, 0x81, 0xaf, 0x5e, 0xc5, 0x35, 0x2f, 0x3b, 0x76, 0x5a, 0x3a, 0x9b, 0xbe,
+	0x70, 0x6e, 0x88, 0xa9, 0x2e, 0x2b, 0x94, 0x43, 0xe5, 0x9c, 0xf2, 0xab, 0x30, 0xc1, 0x28, 0x68,
+	0x09, 0x90, 0xf2, 0xd2, 0x4b, 0x4a, 0xa1, 0xaa, 0x6d, 0x17, 0x2b, 0x65, 0xa5, 0xb0, 0xf1, 0xd2,
+	0x86, 0xb2, 0x96, 0xb9, 0x07, 0xcd, 0xc1, 0x74, 0xb1, 0xa4, 0x55, 0x0a, 0x17, 0x95, 0xb5, 0xed,
+	0x4d, 0x25, 0x23, 0x91, 0x8a, 0x65, 0x55, 0x79, 0x49, 0x51, 0xb5, 0x30, 0x3d, 0x81, 0xd2, 0x00,
+	0xc5, 0x92, 0xa6, 0xbc, 0xa2, 0x14, 0xb6, 0xab, 0x4a, 0x66, 0x4c, 0xfe, 0x5e, 0x02, 0x60, 0x4b,
+	0x27, 0xe6, 0x2e, 0xdf, 0xf6, 0xf6, 0x50, 0x0e, 0x52, 0x6d, 0x17, 0x3b, 0xa6, 0xde, 0x12, 0x06,
+	0xc4, 0xff, 0x26, 0x65, 0xb6, 0xee, 0xba, 0x37, 0x2c, 0xa7, 0xce, 0xa7, 0xe8, 0x7f, 0xa3, 0x16,
+	0x1c, 0xab, 0x35, 0x0d, 0x6c, 0x7a, 0x5a, 0x0d, 0x3b, 0x9e, 0x71, 0xd5, 0xa8, 0xe9, 0x1e, 0x16,
+	0xda, 0x33, 0x46, 0xb5, 0xe7, 0x7c, 0xef, 0x89, 0x17, 0x28, 0x6b, 0x21, 0xe0, 0xe4, 0xea, 0x73,
+	0xb4, 0x16, 0x5f, 0x80, 0x9e, 0x84, 0x25, 0x61, 0xa4, 0x6b, 0x7a, 0xb8, 0xcb, 0x6c, 0x9d, 0x0e,
+	0x6c, 0x91, 0x97, 0x16, 0xf4, 0x10, 0x2f, 0x7a, 0x0c, 0x50, 0xf7, 0x20, 0xb3, 0x98, 0x72, 0xcc,
+	0x77, 0x75, 0x45, 0xec, 0x0d, 0xaf, 0x4e, 0x16, 0xfa, 0x2a, 0xb3, 0x37, 0x8c, 0x72, 0x09, 0xdf,
+	0x92, 0x2b, 0x70, 0xb4, 0xc7, 0xb8, 0xd1, 0x33, 0x90, 0x35, 0x5c, 0xb7, 0x8d, 0xb5, 0x98, 0xee,
+	0x24, 0x6a, 0x11, 0x96, 0x68, 0x79, 0x17, 0xbf, 0xfc, 0xa7, 0x49, 0x98, 0xc9, 0xd7, 0xeb, 0x96,
+	0xe9, 0xf2, 0xa6, 0x3e, 0x00, 0x0b, 0x7b, 0x9e, 0x67, 0x6b, 0x74, 0x5b, 0xee, 0xea, 0x4d, 0xdd,
+	0xac, 0x19, 0x66, 0x83, 0xb6, 0xd2, 0xd7, 0x68, 0x5c, 0xf4, 0x3c, 0x7b, 0xd3, 0xd2, 0xeb, 0xab,
+	0x82, 0x45, 0x9d, 0xdf, 0xeb, 0x24, 0x21, 0x1b, 0x72, 0x7b, 0x96, 0x63, 0xdc, 0x26, 0xdc, 0x4d,
+	0xcd, 0xb6, 0xea, 0x9a, 0xde, 0xf6, 0x2c, 0xb7, 0xa6, 0x37, 0x49, 0x1f, 0x09, 0xda, 0x47, 0x1f,
+	0x9b, 0x7d, 0xd1, 0xe7, 0x2d, 0x5b, 0xf5, 0x7c, 0xc0, 0xa9, 0x66, 0xf7, 0x7a, 0x94, 0xa0, 0x9f,
+	0x82, 0xc5, 0x6b, 0xed, 0x5d, 0xec, 0x98, 0xd8, 0xc3, 0xae, 0x56, 0xd7, 0xdd, 0xbd, 0x5d, 0x4b,
+	0x77, 0xea, 0x5c, 0x45, 0x1e, 0xeb, 0xdd, 0xd7, 0x25, 0x9f, 0x6b, 0x4d, 0x30, 0xa9, 0x0b, 0xd7,
+	0xba, 0x89, 0x48, 0x87, 0x23, 0x26, 0xf6, 0x88, 0xdd, 0xe1, 0xc7, 0xac, 0xd0, 0xc2, 0xe4, 0xa0,
+	0x2e, 0x8a, 0x8c, 0xad, 0x4c, 0xb9, 0xb8, 0x06, 0x2e, 0x98, 0xdd, 0x44, 0x74, 0x11, 0x66, 0x0c,
+	0xd7, 0x33, 0x2c, 0xd1, 0xf2, 0x38, 0x6d, 0xf9, 0x81, 0xde, 0x2d, 0x6f, 0x90, 0xda, 0xbc, 0xc5,
+	0x69, 0x23, 0xf8, 0x40, 0x2a, 0x64, 0x6a, 0x4d, 0xab, 0x5d, 0xd7, 0x9c, 0xb6, 0x29, 0x5a, 0x9b,
+	0xa4, 0xad, 0x9d, 0xed, 0xb7, 0x5b, 0xac, 0x76, 0x5d, 0x6d, 0x9b, 0xbc, 0xc1, 0x74, 0x2d, 0xf2,
+	0x2d, 0xaf, 0xc0, 0x7c, 0xd7, 0xe2, 0x93, 0xbd, 0x5b, 0x37, 0x5c, 0x7d, 0xb7, 0x89, 0xeb, 0x5c,
+	0x03, 0xfd, 0x6f, 0xf9, 0x29, 0xc8, 0xf6, 0x5a, 0xc9, 0xbe, 0x7c, 0xe7, 0x61, 0x21, 0x66, 0x55,
+	0x06, 0xb1, 0xc4, 0x48, 0xb9, 0x2f, 0xcb, 0xcf, 0x25, 0x60, 0xb1, 0xec, 0x18, 0xd7, 0xc9, 0xee,
+	0xe2, 0x9b, 0x9a, 0x31, 0x3d, 0x0e, 0x8b, 0xd8, 0x24, 0x75, 0x34, 0x9b, 0x15, 0x6b, 0xa6, 0x55,
+	0xc7, 0x2e, 0x6f, 0x00, 0xb1, 0x32, 0xce, 0x49, 0x2c, 0xab, 0x8b, 0x9e, 0x82, 0xa3, 0x1d, 0x1c,
+	0xd8, 0xac, 0xdb, 0x96, 0x61, 0x7a, 0x54, 0xd7, 0x53, 0xea, 0x91, 0x08, 0x93, 0xc2, 0x0b, 0xd1,
+	0x13, 0xb0, 0xd4, 0xa2, 0x26, 0x52, 0x33, 0xec, 0xeb, 0x4f, 0x6a, 0x35, 0xa3, 0xee, 0x68, 0xbb,
+	0x4d, 0xab, 0x76, 0x8d, 0xaa, 0xed, 0x94, 0xba, 0xc0, 0x4a, 0x37, 0xec, 0xeb, 0x4f, 0x16, 0x8c,
+	0xba, 0xb3, 0x4a, 0x8a, 0xd0, 0xc3, 0x90, 0xe9, 0xea, 0x25, 0x49, 0xab, 0xcf, 0xd9, 0x1d, 0xed,
+	0x3f, 0x04, 0x73, 0x76, 0x7b, 0xb7, 0x69, 0xd4, 0x82, 0x9a, 0x0c, 0xdd, 0xa4, 0x19, 0x59, 0x54,
+	0x94, 0xbf, 0x2e, 0xc1, 0x74, 0x48, 0x97, 0xfa, 0xc9, 0x0d, 0xad, 0x43, 0x92, 0x80, 0x36, 0x3a,
+	0xb3, 0xf4, 0x85, 0x27, 0x86, 0x52, 0x4e, 0xf6, 0x37, 0x39, 0x08, 0xb6, 0xac, 0x3a, 0x56, 0x69,
+	0x03, 0xf2, 0x13, 0x30, 0x1b, 0x21, 0xa3, 0x59, 0x98, 0xca, 0x6f, 0x57, 0x2f, 0x6a, 0xc5, 0x52,
+	0x51, 0xc9, 0xdc, 0x83, 0x16, 0x60, 0x8e, 0x7e, 0x6e, 0x6d, 0x57, 0xb7, 0xf3, 0x9b, 0x5a, 0x75,
+	0xb3, 0x92, 0x91, 0xe4, 0x47, 0x21, 0x1d, 0x55, 0xd3, 0xbe, 0x6b, 0xfc, 0x9f, 0x12, 0x9c, 0x0a,
+	0x0e, 0x21, 0xa2, 0x8b, 0xb8, 0xce, 0xf5, 0x44, 0xd8, 0xc1, 0x2c, 0x4c, 0xb2, 0xc5, 0x11, 0xdc,
+	0xe2, 0x13, 0xd5, 0x60, 0x3a, 0x58, 0x11, 0x37, 0x9b, 0xa0, 0x80, 0x62, 0xb5, 0xf7, 0x7c, 0xfb,
+	0x77, 0xb4, 0xec, 0xaf, 0xa0, 0x0a, 0x35, 0xf1, 0xa7, 0x9b, 0xdb, 0x82, 0xa9, 0x60, 0x69, 0xcf,
+	0x50, 0x18, 0x6d, 0x37, 0xf5, 0x5b, 0x5a, 0xe8, 0xa0, 0x9c, 0xe6, 0xb4, 0x22, 0x39, 0x2b, 0xc9,
+	0xd9, 0x11, 0xa8, 0x49, 0x82, 0x9f, 0x1d, 0xa2, 0x05, 0xf9, 0x41, 0x80, 0x4d, 0xdc, 0xd0, 0x6b,
+	0xb7, 0xf2, 0xbb, 0x7a, 0xad, 0xf7, 0xdc, 0xe4, 0xdf, 0x96, 0x60, 0x36, 0xb2, 0x61, 0xd0, 0x26,
+	0xa4, 0x6c, 0xc7, 0xba, 0x6e, 0xd4, 0xb1, 0x43, 0x2b, 0xa7, 0xfb, 0xe2, 0xdc, 0x30, 0xeb, 0x72,
+	0x99, 0xf3, 0xa9, 0x7e, 0x0b, 0xe1, 0x9e, 0x13, 0xd1, 0x9e, 0x1f, 0x87, 0x54, 0x39, 0xa8, 0xb5,
+	0x58, 0x56, 0x4b, 0x97, 0x37, 0xd6, 0x14, 0xb5, 0x03, 0x76, 0x00, 0x4c, 0x14, 0xf2, 0x9b, 0x1b,
+	0x85, 0x52, 0x46, 0x92, 0xbf, 0x3c, 0x0e, 0x68, 0xa3, 0x9c, 0x6f, 0x12, 0x8c, 0x4c, 0xfc, 0x1f,
+	0x3e, 0xe0, 0xfb, 0x21, 0xdd, 0x76, 0xb1, 0x66, 0xd8, 0x9a, 0xde, 0x34, 0x74, 0xd7, 0xdf, 0xa0,
+	0x33, 0x6d, 0x17, 0x6f, 0xd8, 0x79, 0x46, 0x43, 0x8f, 0xc0, 0x7c, 0xcd, 0xc1, 0x64, 0xb3, 0xb8,
+	0xed, 0x5d, 0x6e, 0x73, 0xf9, 0x90, 0x32, 0xac, 0xa0, 0xe2, 0xd3, 0xa9, 0x07, 0xe2, 0x7f, 0xb1,
+	0x25, 0x18, 0xe3, 0x1e, 0x88, 0x4f, 0xa6, 0xab, 0xb0, 0x0c, 0xf3, 0x02, 0x26, 0xf8, 0x3b, 0x97,
+	0x6d, 0xc2, 0xd5, 0x44, 0x56, 0x52, 0xe7, 0x78, 0xa1, 0xd8, 0xb8, 0xe8, 0x2c, 0xa4, 0x89, 0x0d,
+	0x09, 0x55, 0x1e, 0xf7, 0x2b, 0xcf, 0x90, 0x12, 0xbf, 0xe6, 0xe3, 0x80, 0xb8, 0xb7, 0xe3, 0x86,
+	0x6a, 0x4f, 0xf8, 0xb5, 0x33, 0xa2, 0xd4, 0xe7, 0x78, 0x11, 0x4e, 0x04, 0x7e, 0x65, 0xcd, 0x32,
+	0xeb, 0xba, 0x73, 0x4b, 0x73, 0x74, 0xb3, 0x81, 0xd9, 0x0c, 0x26, 0xe9, 0x0c, 0x8e, 0xf1, 0x3a,
+	0x15, 0x51, 0x45, 0x25, 0x35, 0xe8, 0x64, 0xf2, 0x70, 0xd2, 0xef, 0x32, 0xb6, 0x85, 0x14, 0x6d,
+	0x21, 0x27, 0x2a, 0xc5, 0x34, 0xf1, 0x1e, 0x38, 0xda, 0x25, 0x0f, 0xae, 0xa2, 0x53, 0x11, 0xdc,
+	0x14, 0x35, 0x65, 0x2b, 0xb0, 0x18, 0x15, 0x0b, 0xe7, 0x01, 0x86, 0x9c, 0xc2, 0x82, 0x61, 0x0c,
+	0x4f, 0x43, 0xb6, 0x5b, 0x3a, 0x9c, 0x69, 0x9a, 0x32, 0x1d, 0xe9, 0x94, 0x0f, 0x63, 0x5c, 0x86,
+	0x05, 0xbd, 0xd9, 0xb4, 0x6e, 0x68, 0x8e, 0xd5, 0xf6, 0xb0, 0x66, 0x5d, 0xc7, 0x4e, 0x53, 0xb7,
+	0xa9, 0x53, 0x93, 0x52, 0xe7, 0x69, 0x91, 0x4a, 0x4a, 0x4a, 0xac, 0x00, 0x3d, 0x06, 0x0b, 0x9e,
+	0xdd, 0xee, 0xea, 0x83, 0x39, 0x38, 0x19, 0xcf, 0x6e, 0x47, 0x9a, 0x97, 0x57, 0x60, 0x61, 0xd5,
+	0x30, 0x75, 0xe7, 0x96, 0xd8, 0xfd, 0x54, 0x51, 0xfb, 0xec, 0xbf, 0x27, 0xe0, 0x68, 0xd9, 0xaa,
+	0x57, 0x70, 0xad, 0xed, 0x18, 0xde, 0xad, 0xc8, 0x99, 0xd5, 0x9b, 0xe9, 0x9f, 0xb3, 0x30, 0xc9,
+	0x8f, 0x2a, 0xe2, 0x22, 0x86, 0x4c, 0x04, 0xfd, 0x9b, 0xb8, 0x88, 0x75, 0xec, 0xd6, 0x1c, 0xc3,
+	0x26, 0xbd, 0x73, 0xe3, 0x10, 0x26, 0xa1, 0x47, 0x01, 0x19, 0xa6, 0xe1, 0x19, 0x7a, 0x93, 0x9e,
+	0x69, 0xdc, 0x07, 0x1d, 0xa3, 0x3e, 0x68, 0x86, 0x97, 0x30, 0x1f, 0x96, 0xb8, 0xa1, 0x0a, 0x4c,
+	0xf3, 0x5a, 0x21, 0x9c, 0x73, 0xff, 0x30, 0xde, 0xaf, 0x0a, 0x66, 0x10, 0x3f, 0x50, 0x60, 0x9a,
+	0x9f, 0x72, 0xf4, 0xdc, 0x18, 0x1f, 0xd4, 0x4c, 0x60, 0x47, 0x55, 0x68, 0x05, 0x1e, 0xc4, 0x43,
+	0xc4, 0x79, 0x6e, 0x34, 0x0c, 0xb3, 0x21, 0xe2, 0x27, 0x6c, 0x5b, 0xa8, 0x69, 0x4e, 0xae, 0x30,
+	0x2a, 0x41, 0xe3, 0x2d, 0xcb, 0x34, 0x3c, 0xcb, 0x09, 0xd7, 0x65, 0xdb, 0x60, 0x3e, 0x28, 0x11,
+	0xd5, 0xb3, 0x30, 0x29, 0xec, 0x02, 0x53, 0x74, 0xf1, 0x89, 0xce, 0xc5, 0xed, 0x72, 0xa6, 0xcf,
+	0x5d, 0x3b, 0xfc, 0x12, 0xcc, 0xea, 0x14, 0x5e, 0x0b, 0x69, 0x01, 0x9d, 0xe6, 0x83, 0x7d, 0xbc,
+	0xef, 0x10, 0x1a, 0x57, 0x67, 0xf4, 0x30, 0x36, 0x3f, 0x05, 0x10, 0xb2, 0x56, 0x4c, 0xb1, 0x43,
+	0x14, 0x94, 0x07, 0x2a, 0x5f, 0xcd, 0xb6, 0xac, 0xa6, 0x9b, 0x9d, 0xa1, 0x07, 0x93, 0xdc, 0x7f,
+	0x5d, 0xca, 0x96, 0xd5, 0x54, 0xa7, 0x4c, 0xfe, 0x97, 0x8b, 0x4e, 0xc0, 0x94, 0xb0, 0xa7, 0x6e,
+	0x76, 0x96, 0xc6, 0x19, 0x02, 0x42, 0x08, 0xd0, 0x84, 0x40, 0xb5, 0xde, 0xb4, 0xf7, 0x74, 0xea,
+	0xb1, 0xfb, 0x80, 0x26, 0x80, 0x69, 0x79, 0x52, 0x88, 0x3e, 0x08, 0x73, 0x0e, 0x76, 0xad, 0xb6,
+	0x53, 0xc3, 0x1a, 0x8f, 0x99, 0x30, 0x3f, 0xfc, 0x3d, 0xfd, 0x50, 0x27, 0x95, 0xe4, 0xb2, 0xca,
+	0x19, 0xc3, 0x81, 0x93, 0xb4, 0x13, 0x21, 0x12, 0x6b, 0x4e, 0x9b, 0xd5, 0xae, 0x1a, 0x66, 0x03,
+	0x3b, 0xb6, 0x43, 0x20, 0x4d, 0x86, 0x6d, 0x4a, 0x5a, 0xf0, 0x52, 0x40, 0x27, 0x7a, 0xd7, 0xa4,
+	0x67, 0xa1, 0xa6, 0xef, 0xea, 0xb5, 0x2c, 0x1a, 0xa4, 0x77, 0xc1, 0xc1, 0xa9, 0x42, 0x33, 0x38,
+	0x44, 0x8b, 0x90, 0x8e, 0xe2, 0xfe, 0xec, 0x02, 0x6d, 0xe9, 0xa1, 0x21, 0x8f, 0x47, 0x75, 0x36,
+	0x02, 0xf5, 0xd1, 0x07, 0x61, 0x91, 0x9e, 0x59, 0x42, 0xda, 0xa2, 0xd5, 0x45, 0xda, 0xea, 0xa3,
+	0x7d, 0xf0, 0x54, 0xd7, 0x19, 0xa8, 0x22, 0xc3, 0xee, 0x3a, 0x17, 0x3f, 0x22, 0xc1, 0x99, 0xd0,
+	0x7e, 0x63, 0x58, 0x44, 0xe3, 0x63, 0xf0, 0xd5, 0x73, 0x89, 0xf6, 0xf6, 0xcc, 0xa8, 0x68, 0x46,
+	0x3d, 0xd5, 0xea, 0x0f, 0xab, 0x76, 0x00, 0xb5, 0x74, 0xc3, 0xf4, 0xb0, 0xa9, 0x9b, 0x35, 0x2c,
+	0xe6, 0x78, 0x74, 0x90, 0x77, 0xb9, 0x15, 0xf0, 0xf0, 0x29, 0xce, 0xb7, 0x3a, 0x49, 0xc4, 0xd7,
+	0xdb, 0xa5, 0xd6, 0xd6, 0x9f, 0x20, 0x9d, 0x7f, 0x36, 0x3b, 0xc8, 0x11, 0x8b, 0xb1, 0xd1, 0xea,
+	0xc2, 0x6e, 0x8c, 0xe1, 0x36, 0x21, 0x47, 0x9c, 0x56, 0x97, 0xdb, 0xe7, 0x0e, 0x87, 0xef, 0xd8,
+	0xa0, 0xb0, 0x43, 0x0f, 0xd3, 0xae, 0x1e, 0xb5, 0x7b, 0xd8, 0xfc, 0x22, 0x4c, 0x87, 0x1d, 0xe4,
+	0xdc, 0x20, 0x55, 0xe0, 0x7b, 0x26, 0xec, 0x1a, 0x87, 0x1b, 0x08, 0xeb, 0x2c, 0x1f, 0xf3, 0xf1,
+	0x21, 0x75, 0x96, 0x8f, 0x54, 0xe8, 0x2c, 0x1f, 0xdf, 0x23, 0x20, 0x7c, 0x0b, 0x8d, 0x1b, 0xbe,
+	0xec, 0x09, 0x62, 0x07, 0x28, 0x24, 0x49, 0xdb, 0x11, 0x2f, 0x0a, 0x3d, 0xdd, 0xd3, 0xab, 0x39,
+	0xe9, 0xc3, 0x98, 0x58, 0xcf, 0xe6, 0x75, 0x38, 0x5e, 0xc7, 0x57, 0xf5, 0x76, 0xd3, 0xd3, 0x5a,
+	0xfa, 0x4d, 0xcd, 0xb6, 0xea, 0x54, 0x5d, 0x5d, 0xcf, 0x21, 0x2a, 0x90, 0x3d, 0x35, 0x58, 0x79,
+	0x6e, 0x96, 0xad, 0x3a, 0xd1, 0x40, 0xce, 0xa2, 0x66, 0x79, 0x7b, 0x5d, 0x25, 0xc8, 0x83, 0x13,
+	0xbe, 0xa5, 0x6a, 0xbb, 0x7a, 0x03, 0x6b, 0xf8, 0xa6, 0x6d, 0x39, 0x9e, 0x90, 0xd7, 0x19, 0xda,
+	0x59, 0x1f, 0xef, 0x46, 0x98, 0xab, 0x6d, 0xc2, 0xac, 0x50, 0x5e, 0x2e, 0xbb, 0x63, 0x4e, 0xaf,
+	0x22, 0x54, 0x87, 0xa5, 0x0e, 0x39, 0x8a, 0xfe, 0x1e, 0xa0, 0xfd, 0x2d, 0xf7, 0xd1, 0xa9, 0x18,
+	0x57, 0x55, 0x5d, 0xb4, 0xe3, 0x1c, 0xd8, 0xd7, 0x21, 0x7b, 0x1d, 0x3b, 0x9e, 0x51, 0x8b, 0x89,
+	0xbd, 0x3c, 0x34, 0x28, 0xe0, 0x7a, 0x99, 0x73, 0x76, 0x44, 0x5e, 0x96, 0xae, 0xc7, 0xd2, 0xd1,
+	0x71, 0x98, 0x72, 0x71, 0xf3, 0xaa, 0xd6, 0x34, 0xcc, 0x6b, 0x3c, 0x46, 0x96, 0x22, 0x84, 0x4d,
+	0xc3, 0xbc, 0x86, 0x96, 0x20, 0x79, 0xdb, 0x32, 0x79, 0x24, 0x8c, 0xae, 0x3b, 0xfd, 0x26, 0x2e,
+	0x9b, 0xef, 0x90, 0xb2, 0xf0, 0x97, 0xff, 0x4d, 0x8e, 0x1e, 0x01, 0x51, 0x84, 0x88, 0xae, 0x63,
+	0xc7, 0x25, 0xfb, 0xbb, 0xc1, 0x10, 0x1e, 0x2f, 0xe6, 0x73, 0xbe, 0xcc, 0x0a, 0x69, 0xe4, 0xae,
+	0xed, 0x38, 0xd8, 0x24, 0xca, 0x13, 0x61, 0xdb, 0xe3, 0x08, 0x94, 0x95, 0x32, 0xbb, 0x16, 0x70,
+	0x09, 0x3a, 0x03, 0x44, 0x82, 0xc7, 0xf0, 0x47, 0x8c, 0x78, 0x39, 0x39, 0x44, 0x05, 0xd7, 0xbd,
+	0x30, 0xcd, 0x9d, 0x0a, 0xcf, 0x68, 0xe1, 0xec, 0xeb, 0xec, 0x80, 0x66, 0xa4, 0xaa, 0xd1, 0xc2,
+	0xe8, 0xfd, 0x30, 0xe1, 0x7a, 0xba, 0xd7, 0x76, 0xb3, 0xd7, 0xa8, 0x2b, 0x75, 0x76, 0xf0, 0xf1,
+	0x57, 0xa1, 0xf5, 0x55, 0xce, 0x87, 0x1e, 0x80, 0x34, 0xfb, 0x4b, 0x6b, 0x61, 0x97, 0xe8, 0x51,
+	0xb6, 0x49, 0x7b, 0x99, 0x65, 0xd4, 0x2d, 0x46, 0x24, 0x38, 0xb5, 0x03, 0x41, 0xbb, 0xc6, 0x6d,
+	0x9c, 0x6d, 0x31, 0x44, 0x17, 0x06, 0xd0, 0x15, 0xe3, 0x36, 0x26, 0xf8, 0x2f, 0xc6, 0xbb, 0x30,
+	0xd9, 0x01, 0xda, 0xe5, 0x59, 0x5c, 0x80, 0x05, 0xc3, 0x74, 0x3d, 0x6a, 0xc0, 0x1b, 0x8e, 0xd5,
+	0xb6, 0xb5, 0xb6, 0xd3, 0x74, 0xb3, 0x16, 0x41, 0x0b, 0x54, 0x36, 0xf3, 0xa2, 0x78, 0x9d, 0x94,
+	0x6e, 0x3b, 0x4d, 0x97, 0xf8, 0x2f, 0x11, 0x81, 0x32, 0x84, 0x69, 0x93, 0xf1, 0x30, 0xff, 0x25,
+	0x24, 0x4e, 0x86, 0x32, 0xef, 0x85, 0x69, 0x7c, 0xd3, 0x36, 0x1c, 0x2e, 0xcc, 0x37, 0x98, 0x30,
+	0x19, 0x89, 0x0a, 0x33, 0x07, 0x29, 0x71, 0xc4, 0x65, 0x1d, 0xa6, 0x2d, 0xe2, 0x9b, 0xb8, 0xc3,
+	0x1c, 0xa8, 0x78, 0x76, 0x3b, 0xeb, 0x52, 0x6c, 0x32, 0xc5, 0x28, 0x55, 0xbb, 0xdd, 0x0b, 0xc6,
+	0x7b, 0xf1, 0x30, 0x1e, 0x6d, 0x00, 0x10, 0xd7, 0xc6, 0x60, 0xa8, 0xe8, 0x3a, 0x45, 0x2e, 0x0f,
+	0xf7, 0x5e, 0x3a, 0xb6, 0x64, 0x05, 0xc1, 0xa1, 0x86, 0x98, 0x73, 0x79, 0x58, 0x88, 0x01, 0x34,
+	0xfb, 0xba, 0x16, 0xb8, 0x01, 0x13, 0xac, 0x07, 0xb4, 0x04, 0xa8, 0x52, 0xcd, 0x57, 0xb7, 0x2b,
+	0x1d, 0x5e, 0x72, 0x06, 0x66, 0xa8, 0xff, 0x5c, 0xd9, 0x28, 0x15, 0x37, 0x8a, 0xeb, 0x19, 0x09,
+	0x4d, 0xc3, 0xa4, 0xba, 0x5d, 0xa4, 0x1f, 0x09, 0x34, 0x07, 0xd3, 0xaa, 0x52, 0x28, 0x15, 0x0b,
+	0x1b, 0x9b, 0x84, 0x30, 0x86, 0x66, 0x20, 0x55, 0xa9, 0x96, 0xca, 0x65, 0xf2, 0x95, 0x44, 0x53,
+	0x30, 0xae, 0xa8, 0x6a, 0x49, 0xcd, 0x8c, 0x93, 0x82, 0x35, 0x65, 0x5d, 0xcd, 0xaf, 0x29, 0x6b,
+	0x99, 0x09, 0xf9, 0x0f, 0x01, 0x66, 0xb9, 0x5a, 0x6e, 0xdb, 0x75, 0xdd, 0xc3, 0xe8, 0x71, 0x58,
+	0xac, 0x63, 0xd7, 0x70, 0x08, 0x90, 0x08, 0x6f, 0x13, 0x16, 0x77, 0x42, 0xbc, 0x2c, 0xbc, 0x45,
+	0x9e, 0x87, 0x9c, 0xe0, 0x88, 0x01, 0xe3, 0x2c, 0x0a, 0x95, 0xe5, 0x35, 0xb6, 0xba, 0x30, 0xf9,
+	0x0e, 0x1c, 0x11, 0xdc, 0x51, 0x54, 0x3d, 0xb1, 0x2f, 0x54, 0xbd, 0xc0, 0x1b, 0x89, 0x04, 0xbe,
+	0x57, 0x3a, 0xe6, 0x42, 0x40, 0xb4, 0x66, 0xd4, 0x85, 0x83, 0x10, 0x9a, 0x0b, 0x41, 0xca, 0x1b,
+	0x75, 0xb2, 0x69, 0x04, 0x43, 0xe8, 0x9a, 0x90, 0xf9, 0x0a, 0x19, 0x5e, 0xb2, 0xe1, 0xdf, 0x16,
+	0xda, 0x70, 0xb2, 0xbb, 0xf9, 0xb0, 0x05, 0x9e, 0x1a, 0x18, 0x2e, 0xe6, 0x5d, 0x87, 0xcd, 0x6f,
+	0xae, 0x63, 0x58, 0x61, 0x13, 0xfc, 0x08, 0x88, 0x41, 0x6b, 0x01, 0xa4, 0x07, 0x0a, 0xe9, 0xc5,
+	0xf0, 0x36, 0x7d, 0x64, 0xff, 0x19, 0x09, 0x1e, 0xf6, 0x17, 0x66, 0x20, 0x4a, 0x9c, 0x39, 0x20,
+	0x4a, 0x7c, 0x40, 0xac, 0x70, 0x7f, 0xb0, 0x78, 0x07, 0x64, 0x31, 0xa6, 0x3e, 0xb0, 0x2b, 0x3d,
+	0x2a, 0xec, 0x3a, 0xc5, 0x1b, 0xef, 0xe5, 0x71, 0x37, 0x09, 0xee, 0x60, 0xdd, 0x8b, 0x23, 0x27,
+	0xbc, 0x60, 0x73, 0x23, 0xa0, 0xb1, 0x63, 0xbc, 0xc1, 0xee, 0x22, 0x64, 0xc1, 0x09, 0xd1, 0x5b,
+	0x2c, 0x8a, 0xcd, 0x8c, 0x82, 0x62, 0x85, 0x7e, 0xc4, 0x45, 0x21, 0x9e, 0x82, 0xa3, 0x81, 0x7e,
+	0x44, 0x1d, 0xe8, 0x05, 0x76, 0xa2, 0xfa, 0x5a, 0x12, 0xf1, 0xa3, 0x3f, 0x22, 0xc1, 0xfd, 0x82,
+	0xb1, 0x2f, 0x56, 0x3a, 0x32, 0x3a, 0x56, 0x3a, 0xcd, 0x3b, 0xe8, 0x59, 0x03, 0xdd, 0x02, 0x51,
+	0x47, 0xeb, 0x09, 0x6a, 0x96, 0x46, 0x04, 0x35, 0x62, 0xa7, 0xc6, 0x17, 0x13, 0x48, 0xd1, 0xb1,
+	0x55, 0x84, 0xdd, 0xe3, 0x97, 0x81, 0x11, 0xed, 0xe6, 0x96, 0x4f, 0xfe, 0xef, 0x14, 0x4c, 0x95,
+	0x6c, 0xec, 0x30, 0xe1, 0xc7, 0xc5, 0x69, 0x04, 0x2c, 0x4a, 0x74, 0xc0, 0xa2, 0x12, 0xa4, 0x2d,
+	0xc1, 0xc8, 0x8c, 0xcc, 0xd8, 0x20, 0xf4, 0xe0, 0x77, 0xb4, 0x4c, 0x8c, 0x8f, 0x3a, 0xeb, 0xf3,
+	0x53, 0x5b, 0xb4, 0xea, 0xc3, 0x90, 0xe4, 0xa0, 0x2b, 0xe2, 0xa0, 0xa1, 0x0e, 0x20, 0xb2, 0x04,
+	0x13, 0x75, 0xec, 0xe9, 0x46, 0x93, 0x5b, 0x3c, 0xfe, 0x15, 0x03, 0x50, 0xc6, 0xe3, 0x00, 0x4a,
+	0x04, 0x1f, 0x4e, 0x74, 0xe0, 0xc3, 0x7b, 0x61, 0xda, 0xd3, 0x9d, 0x06, 0xf6, 0x58, 0x31, 0xb3,
+	0xc0, 0xc0, 0x48, 0xb4, 0x42, 0xf8, 0xe8, 0x9f, 0xea, 0x3e, 0xfa, 0x5d, 0x4f, 0x77, 0x3c, 0x06,
+	0x1b, 0x58, 0xc8, 0x70, 0x8a, 0x52, 0x28, 0x6a, 0x38, 0x46, 0x31, 0x26, 0x2b, 0x64, 0x11, 0x94,
+	0x49, 0x6c, 0xd6, 0x69, 0xd1, 0x3a, 0x0d, 0x75, 0x37, 0x1c, 0xec, 0xba, 0xdc, 0xc2, 0x3d, 0x32,
+	0x84, 0x60, 0xca, 0x9c, 0x45, 0xf5, 0x99, 0xd1, 0x2b, 0x80, 0x42, 0x30, 0x5e, 0xe0, 0x86, 0xd9,
+	0xfd, 0xe2, 0x06, 0x11, 0x65, 0xf2, 0x29, 0x2e, 0xda, 0x61, 0xb8, 0x8e, 0x1e, 0x1e, 0xa1, 0xa6,
+	0xd3, 0xfb, 0x6d, 0x1a, 0x89, 0x56, 0x82, 0xb6, 0x65, 0x75, 0x20, 0xae, 0x98, 0x86, 0xc9, 0xb2,
+	0x52, 0x5c, 0x8b, 0x81, 0x14, 0x29, 0x48, 0xae, 0x95, 0x8a, 0x0a, 0xc3, 0x12, 0xf9, 0xd5, 0x92,
+	0x5a, 0xa5, 0x58, 0x42, 0xfe, 0xdf, 0x04, 0x24, 0xa9, 0xca, 0x2d, 0x42, 0xa6, 0xfa, 0x6a, 0x59,
+	0xe9, 0x68, 0x10, 0x41, 0xba, 0xa0, 0x2a, 0xf9, 0xaa, 0xa2, 0x15, 0x36, 0xb7, 0x2b, 0x55, 0x45,
+	0xcd, 0x48, 0x84, 0xb6, 0xa6, 0x6c, 0x2a, 0x21, 0x5a, 0x82, 0xd0, 0xb6, 0xcb, 0x14, 0x87, 0x68,
+	0x5b, 0x79, 0x4a, 0x1b, 0x43, 0xf3, 0x30, 0x2b, 0x68, 0xc5, 0xd2, 0x9a, 0x52, 0xc9, 0x24, 0x49,
+	0x35, 0x55, 0x29, 0xe7, 0x37, 0x54, 0x9f, 0x75, 0x9c, 0xb1, 0xae, 0x85, 0xbb, 0x98, 0x20, 0x83,
+	0xe1, 0xdd, 0x12, 0x4e, 0xad, 0x5c, 0x2a, 0x6d, 0x66, 0x26, 0x09, 0x95, 0x77, 0x1c, 0x50, 0x53,
+	0xe8, 0x04, 0x64, 0x2b, 0x4a, 0x35, 0x20, 0x69, 0x5b, 0xf9, 0x62, 0x7e, 0x5d, 0xd9, 0x52, 0x8a,
+	0xd5, 0xcc, 0x14, 0x3a, 0x02, 0xf3, 0xf9, 0xed, 0x6a, 0x49, 0xe3, 0xdd, 0xb2, 0x81, 0x00, 0x11,
+	0x20, 0x25, 0x47, 0x07, 0x38, 0x8d, 0xd2, 0x00, 0xa4, 0xb1, 0xcd, 0xfc, 0xaa, 0xb2, 0x59, 0xc9,
+	0xcc, 0xa0, 0x05, 0x98, 0x23, 0xdf, 0x6c, 0x4e, 0x5a, 0x7e, 0xbb, 0x7a, 0x31, 0x33, 0x4b, 0xa5,
+	0x1f, 0xe9, 0xb1, 0xb2, 0xb1, 0xa3, 0x64, 0xd2, 0x3e, 0x5d, 0xa9, 0x5e, 0x29, 0xa9, 0x97, 0xb4,
+	0x72, 0x69, 0x73, 0xa3, 0xf0, 0x6a, 0x66, 0x0e, 0xe5, 0x60, 0x89, 0x35, 0xb2, 0x51, 0xac, 0x2a,
+	0xc5, 0x7c, 0xb1, 0xa0, 0x88, 0xb2, 0x8c, 0xfc, 0xa9, 0x31, 0x98, 0xef, 0xd2, 0xd4, 0x58, 0xe3,
+	0x13, 0xd8, 0x84, 0xc4, 0xc8, 0x36, 0x61, 0x13, 0x26, 0x5b, 0xd8, 0x73, 0x8c, 0x1a, 0xcb, 0xe3,
+	0xea, 0x7b, 0x97, 0xdf, 0x35, 0xaa, 0xe5, 0x2d, 0xca, 0xaa, 0x8a, 0x26, 0x50, 0x81, 0x8e, 0xa8,
+	0x81, 0x5d, 0x9e, 0xcc, 0xb5, 0xaf, 0xcd, 0xc8, 0x59, 0x73, 0x9f, 0x94, 0x60, 0x82, 0x35, 0x1c,
+	0x3b, 0xeb, 0x93, 0x30, 0x65, 0x98, 0x9e, 0x16, 0x20, 0xed, 0xb1, 0x8b, 0xf7, 0xa8, 0x29, 0xc3,
+	0xf4, 0x2e, 0xd3, 0x5c, 0x9a, 0xfb, 0x60, 0xa6, 0x6e, 0xb5, 0x89, 0x1b, 0xc1, 0x6a, 0x10, 0xbb,
+	0x2b, 0x5d, 0xbc, 0x47, 0x9d, 0x66, 0x54, 0xbf, 0x92, 0xeb, 0x51, 0x18, 0xcb, 0x2a, 0x51, 0xf0,
+	0x4b, 0x2a, 0x31, 0x2a, 0xad, 0xb4, 0x3a, 0xc9, 0xe1, 0xbc, 0xfc, 0x35, 0x09, 0x16, 0x0b, 0xd4,
+	0x23, 0xe4, 0x18, 0x40, 0xc5, 0x6f, 0xb4, 0xb1, 0xeb, 0xa1, 0x33, 0x00, 0xb6, 0x63, 0xbd, 0x8e,
+	0x6b, 0x1e, 0x41, 0x9d, 0x92, 0x7f, 0x06, 0x4c, 0x71, 0xea, 0x46, 0xbd, 0xe7, 0x01, 0xf1, 0x1c,
+	0x4c, 0x8a, 0xf0, 0x0b, 0xcb, 0x6b, 0x38, 0x33, 0x10, 0x94, 0xa8, 0x82, 0x83, 0x18, 0x72, 0x5b,
+	0x27, 0xae, 0x17, 0x37, 0xd4, 0xfc, 0x4b, 0xfe, 0x98, 0x04, 0xf3, 0xeb, 0xd8, 0xbb, 0x7b, 0xa3,
+	0x3c, 0x03, 0xe0, 0x87, 0xcd, 0x59, 0x02, 0x06, 0x67, 0x15, 0x31, 0xf3, 0xba, 0xbf, 0x44, 0xe3,
+	0xc1, 0x12, 0xc9, 0x7f, 0x21, 0xc1, 0x22, 0x73, 0x37, 0x0e, 0x75, 0x28, 0x2f, 0xc2, 0x44, 0x9b,
+	0xf6, 0xca, 0xef, 0x37, 0x1e, 0x1a, 0x28, 0x52, 0x36, 0x48, 0x95, 0xb3, 0xc5, 0xce, 0xe5, 0xbf,
+	0x24, 0x38, 0xc2, 0xaa, 0xf9, 0xb1, 0xf7, 0x43, 0x99, 0xcc, 0xfd, 0x30, 0x13, 0xf1, 0x69, 0x82,
+	0x2b, 0x49, 0x30, 0x03, 0x87, 0xe6, 0x0c, 0xaf, 0x25, 0xd0, 0x0c, 0x1b, 0x39, 0xbd, 0xeb, 0x11,
+	0xee, 0x5b, 0x34, 0x25, 0x72, 0xa2, 0x33, 0x25, 0x52, 0xcc, 0x39, 0x15, 0x9a, 0xf3, 0xc7, 0x13,
+	0x70, 0xb2, 0x82, 0xbd, 0x38, 0xef, 0xe5, 0x5d, 0x34, 0xf7, 0x52, 0x34, 0xd2, 0x3a, 0x3e, 0x8a,
+	0x33, 0x16, 0x09, 0xb5, 0x0a, 0x51, 0x4c, 0x84, 0x44, 0xf1, 0x1d, 0x09, 0xb2, 0x15, 0xec, 0x45,
+	0xf1, 0xf4, 0x3e, 0xa4, 0x80, 0xc2, 0x52, 0x18, 0x5e, 0x02, 0x31, 0x37, 0x64, 0xc9, 0xd8, 0x1b,
+	0xb2, 0x38, 0x95, 0xfd, 0x81, 0x04, 0xc7, 0x2b, 0xd8, 0xeb, 0xf2, 0xc5, 0x0f, 0x67, 0xf1, 0xe2,
+	0xef, 0xec, 0x92, 0xbd, 0xee, 0xec, 0xe2, 0x84, 0xfe, 0x77, 0x12, 0x2c, 0x55, 0xb0, 0x17, 0x09,
+	0x00, 0x1c, 0xca, 0xd8, 0xbb, 0xae, 0xfe, 0x92, 0x07, 0xb8, 0xfa, 0x8b, 0x9b, 0xd9, 0xdb, 0x12,
+	0x2c, 0x50, 0x75, 0xe2, 0x4e, 0xfc, 0xe1, 0x4c, 0x2b, 0x72, 0x43, 0x98, 0xec, 0xbc, 0x21, 0x8c,
+	0x1b, 0xe7, 0xef, 0x4a, 0xb0, 0xc0, 0xac, 0x1e, 0xf3, 0x88, 0x0e, 0x67, 0x9c, 0x0f, 0x40, 0xba,
+	0xc3, 0x3b, 0x63, 0x6a, 0x33, 0xdb, 0x8a, 0x44, 0x7a, 0xc5, 0x80, 0x27, 0x43, 0x03, 0xfe, 0x97,
+	0x04, 0x2c, 0x12, 0x9d, 0x0f, 0x2e, 0x9c, 0x0f, 0x65, 0xc4, 0x5b, 0x30, 0xa1, 0xd7, 0x3c, 0x31,
+	0xd2, 0x74, 0xbf, 0xcb, 0xd1, 0xb8, 0xd1, 0x2d, 0xe7, 0x29, 0xb3, 0xca, 0x1b, 0x41, 0xcf, 0xfb,
+	0x27, 0xd8, 0x7e, 0xae, 0xd6, 0x3b, 0x8f, 0xaf, 0xb0, 0x5c, 0xca, 0x30, 0xc1, 0xfa, 0x20, 0xe0,
+	0x7f, 0xbb, 0x78, 0xa9, 0x58, 0xba, 0x52, 0x64, 0xe1, 0x46, 0x02, 0x40, 0xcb, 0xf9, 0x4a, 0xe5,
+	0x4a, 0x49, 0x5d, 0xcb, 0x48, 0x04, 0x16, 0xaf, 0x2b, 0x45, 0x45, 0x25, 0x10, 0xdb, 0x27, 0x27,
+	0x44, 0xc5, 0xed, 0x8a, 0xa2, 0x16, 0xf3, 0x5b, 0x4a, 0x66, 0x4c, 0xfe, 0xb8, 0x04, 0x8b, 0x6b,
+	0xb8, 0x89, 0x0f, 0xf9, 0x70, 0x17, 0x93, 0x4b, 0x86, 0x26, 0xb7, 0x07, 0x0b, 0x9b, 0x86, 0x2b,
+	0xf0, 0xce, 0xdd, 0xd8, 0x4c, 0x01, 0xb2, 0x4a, 0x46, 0x90, 0xd5, 0x6d, 0x58, 0x8c, 0xf6, 0xe4,
+	0xda, 0x96, 0xe9, 0x62, 0xf4, 0x02, 0xa4, 0xf8, 0x10, 0xdd, 0xac, 0x44, 0x21, 0xef, 0x10, 0x38,
+	0xce, 0x67, 0x41, 0xf7, 0xc1, 0x6c, 0xcb, 0x70, 0x5d, 0x62, 0x28, 0x49, 0xf7, 0x2c, 0x33, 0x6d,
+	0x4a, 0x9d, 0xe1, 0xc4, 0x1d, 0x42, 0x93, 0x7f, 0x41, 0x82, 0x85, 0x75, 0xec, 0xf9, 0x80, 0xf9,
+	0x2e, 0x4c, 0xf3, 0x01, 0x98, 0x09, 0xc2, 0x13, 0x11, 0x89, 0x4f, 0xfb, 0xf4, 0x1e, 0xd8, 0xee,
+	0x75, 0x38, 0x42, 0x24, 0xe1, 0x8f, 0xe6, 0x9d, 0x94, 0xfa, 0x27, 0x25, 0x58, 0x2a, 0xe8, 0x66,
+	0x0d, 0x37, 0x7f, 0x82, 0x93, 0x0f, 0x2b, 0xdc, 0x87, 0x25, 0x58, 0xea, 0x9c, 0x3d, 0xd7, 0x84,
+	0x02, 0x80, 0xcf, 0x2d, 0x74, 0xe1, 0xbe, 0x21, 0xdc, 0x1f, 0x35, 0xc4, 0x36, 0x9c, 0x3e, 0x34,
+	0x60, 0x69, 0x1d, 0x7b, 0xe4, 0xfc, 0xf4, 0x2f, 0x0f, 0x0f, 0x2e, 0x94, 0xb8, 0xd9, 0x7e, 0x34,
+	0x01, 0x33, 0xe1, 0x6e, 0x58, 0xf8, 0x91, 0xdd, 0xea, 0x76, 0x5e, 0xe8, 0x49, 0x22, 0xfc, 0x48,
+	0x8b, 0x3b, 0x2e, 0xf4, 0x96, 0x61, 0xe1, 0xba, 0xde, 0x34, 0xa2, 0x37, 0x0e, 0xe2, 0xe1, 0xd0,
+	0x3c, 0x2d, 0x0a, 0x5d, 0x38, 0xb8, 0x2c, 0x4c, 0xcf, 0xfa, 0x09, 0x41, 0xd7, 0xa4, 0x08, 0xd3,
+	0xd3, 0x92, 0x20, 0x4c, 0x7f, 0x0e, 0x58, 0x13, 0xa1, 0xba, 0x6e, 0x76, 0x9c, 0xb6, 0x3d, 0x47,
+	0x0b, 0xfc, 0xaa, 0x2e, 0xba, 0x00, 0x47, 0x58, 0xdd, 0xe8, 0x39, 0xc3, 0xde, 0x03, 0x4d, 0xa9,
+	0x6c, 0x98, 0x91, 0x20, 0xa0, 0x2b, 0xff, 0x95, 0x04, 0x47, 0x98, 0xfb, 0x77, 0xb8, 0x1e, 0xc0,
+	0x8b, 0x30, 0xe5, 0xa3, 0x60, 0x0e, 0x44, 0x86, 0xc9, 0x0c, 0x4a, 0x09, 0x88, 0x1c, 0xda, 0x56,
+	0x13, 0x91, 0x6d, 0xf5, 0x6d, 0x09, 0x8e, 0x30, 0x0b, 0xfe, 0x6e, 0x74, 0x69, 0xe2, 0xe0, 0xc8,
+	0x2f, 0x4a, 0xcc, 0xfe, 0x8a, 0xf1, 0x1e, 0x12, 0x6e, 0xea, 0xe5, 0x67, 0xff, 0x8e, 0x04, 0x68,
+	0x3d, 0xf0, 0x8f, 0xde, 0xed, 0xd2, 0xfb, 0xca, 0x04, 0xa4, 0xc4, 0x58, 0x63, 0x43, 0x2a, 0xcf,
+	0xc3, 0x04, 0xc7, 0xbb, 0x89, 0x7d, 0x24, 0x06, 0x72, 0x9e, 0x7d, 0x66, 0x22, 0xf6, 0xcd, 0x32,
+	0xc8, 0xc2, 0xa4, 0x30, 0x28, 0xec, 0xc9, 0x8d, 0xf8, 0x24, 0x26, 0x24, 0xee, 0x02, 0xfb, 0x2a,
+	0x33, 0x21, 0xdd, 0x97, 0xd7, 0x79, 0x3f, 0x36, 0xd6, 0xa0, 0xc0, 0xec, 0xe1, 0xc1, 0x3b, 0x67,
+	0xf0, 0xbd, 0xfd, 0x5e, 0x5c, 0x58, 0xbc, 0xc3, 0x0d, 0x4d, 0x1e, 0xd8, 0x0d, 0xbd, 0x08, 0xd0,
+	0xd2, 0x4d, 0xbd, 0x81, 0x5b, 0x42, 0xf3, 0xfa, 0x3e, 0xf5, 0x20, 0xed, 0x6d, 0xf9, 0xf5, 0xd5,
+	0x10, 0x2f, 0xfa, 0x00, 0x2c, 0xc4, 0x65, 0xdf, 0x4c, 0xec, 0x3f, 0xfb, 0x66, 0xbe, 0xd5, 0x95,
+	0x76, 0x13, 0xbd, 0x61, 0x37, 0x0e, 0x70, 0xc3, 0x2e, 0xbf, 0x25, 0x1d, 0xf4, 0x7e, 0x7c, 0x09,
+	0x10, 0xff, 0xd0, 0xae, 0x6c, 0x54, 0x2f, 0x6a, 0xec, 0x36, 0x7c, 0xac, 0xf3, 0xde, 0x3c, 0x19,
+	0xb9, 0x37, 0x1f, 0x0f, 0xee, 0xcd, 0x27, 0xe4, 0x6f, 0x49, 0x90, 0x8e, 0x8a, 0x12, 0x9d, 0x81,
+	0x19, 0xb2, 0x2e, 0x5a, 0xdb, 0x6e, 0x38, 0x7a, 0x5d, 0x3c, 0xcb, 0xa2, 0x6b, 0xb5, 0xcd, 0x48,
+	0xe8, 0x5e, 0xb6, 0xf8, 0x9a, 0x83, 0x6d, 0xdd, 0x70, 0x78, 0x36, 0x3a, 0x10, 0x92, 0x4a, 0x29,
+	0x68, 0x1b, 0xe6, 0x38, 0xbb, 0x66, 0xd9, 0xe2, 0x3e, 0x77, 0xc0, 0x25, 0x64, 0x3e, 0xe8, 0xa0,
+	0xc4, 0x78, 0xd4, 0x74, 0x3b, 0xf2, 0x2d, 0xb7, 0x00, 0x75, 0xd7, 0x42, 0xef, 0x81, 0xa3, 0xe1,
+	0x01, 0x6b, 0xa1, 0x4b, 0x15, 0xb6, 0xdd, 0x17, 0x43, 0x63, 0xaf, 0xf8, 0xf7, 0x2b, 0x03, 0x93,
+	0x8d, 0xe5, 0x57, 0x60, 0xbe, 0x2b, 0x9d, 0x0f, 0x15, 0x60, 0xe2, 0x86, 0x61, 0xd6, 0xad, 0x1b,
+	0x83, 0x5f, 0x9a, 0x85, 0x98, 0xaf, 0x50, 0x16, 0x95, 0xb3, 0x12, 0x70, 0x3b, 0xdf, 0x55, 0x8a,
+	0x9a, 0x90, 0xad, 0xeb, 0x46, 0xf3, 0x96, 0x16, 0x4e, 0x3c, 0xe4, 0x9d, 0x25, 0x06, 0xdd, 0x10,
+	0xae, 0x11, 0xce, 0xae, 0x36, 0x2f, 0xde, 0xa3, 0x2e, 0xd5, 0x63, 0x4b, 0x56, 0x53, 0x30, 0xc1,
+	0xae, 0xa7, 0xe5, 0x0a, 0x2c, 0xc5, 0x73, 0x77, 0x5c, 0x51, 0x25, 0x3a, 0xaf, 0xa8, 0x72, 0x90,
+	0xaa, 0xb7, 0x19, 0x8a, 0xe3, 0xef, 0x0c, 0xfc, 0x6f, 0xf9, 0xa7, 0x13, 0x70, 0x22, 0x14, 0x4d,
+	0x0b, 0xed, 0xd5, 0x77, 0xd1, 0xb9, 0x71, 0xf7, 0x8c, 0x4e, 0x9c, 0x17, 0xfa, 0xd7, 0x2c, 0xa0,
+	0x23, 0x44, 0x50, 0x31, 0x6e, 0xe3, 0x77, 0xd3, 0xe4, 0x4f, 0xf2, 0x24, 0x6c, 0x76, 0x72, 0x8d,
+	0xd3, 0x93, 0x6b, 0xca, 0xf4, 0x8f, 0xac, 0xb8, 0x19, 0xfd, 0xbe, 0x04, 0xa7, 0x54, 0xab, 0xd9,
+	0xdc, 0xd5, 0x6b, 0xd7, 0xc4, 0xb4, 0xf8, 0xc6, 0x7a, 0xb7, 0xc3, 0x81, 0x1d, 0xe6, 0xc1, 0x85,
+	0xb0, 0x14, 0x77, 0x61, 0xa2, 0xb9, 0xe8, 0xd2, 0x08, 0xb9, 0xe8, 0xf2, 0x37, 0x24, 0x40, 0x31,
+	0x89, 0x12, 0xef, 0x87, 0x13, 0x3c, 0xb7, 0x8b, 0x76, 0x40, 0xac, 0x10, 0x7d, 0x5f, 0x44, 0x8e,
+	0x76, 0xf1, 0x54, 0x35, 0xa5, 0xe6, 0x58, 0x1d, 0xd2, 0x6e, 0xbe, 0xa3, 0x06, 0x2a, 0x87, 0xd3,
+	0xd1, 0x8d, 0x96, 0xe1, 0x89, 0x57, 0x5c, 0x0f, 0x0d, 0xce, 0x55, 0xd8, 0x24, 0xf5, 0x43, 0x09,
+	0xe8, 0x94, 0x5d, 0xde, 0x83, 0xd9, 0x48, 0x05, 0xe2, 0x7c, 0xf9, 0x5d, 0x84, 0x7e, 0x1d, 0x61,
+	0x46, 0x10, 0xa9, 0xb3, 0x91, 0x85, 0xc9, 0x96, 0x61, 0x1a, 0xad, 0x76, 0x8b, 0xdd, 0x3d, 0xa9,
+	0xe2, 0x93, 0x96, 0xe8, 0x37, 0x69, 0xc9, 0x18, 0x2f, 0x61, 0x9f, 0x34, 0xe8, 0x17, 0x97, 0xed,
+	0xd3, 0xfb, 0xbd, 0xda, 0xfd, 0x90, 0x6e, 0x19, 0x66, 0x18, 0x4e, 0xb1, 0x9f, 0x61, 0x98, 0x69,
+	0x19, 0x66, 0x00, 0xa5, 0x48, 0x2d, 0xfd, 0x66, 0x37, 0xe8, 0x9a, 0x69, 0xe9, 0x37, 0x83, 0x5a,
+	0x67, 0x61, 0x2e, 0x22, 0x6f, 0xcc, 0x74, 0x25, 0xa5, 0x76, 0x92, 0xe5, 0x1f, 0x25, 0x20, 0x53,
+	0xc1, 0x1e, 0x4b, 0x72, 0x3b, 0x1c, 0x2d, 0x6e, 0x74, 0xbf, 0x32, 0x60, 0x37, 0x87, 0xef, 0xeb,
+	0x1b, 0x48, 0x8b, 0x0c, 0x71, 0xf4, 0xe7, 0x06, 0xe3, 0x3d, 0x9e, 0x1b, 0xc4, 0x6c, 0xf8, 0xbb,
+	0x91, 0x05, 0xf8, 0x15, 0x89, 0xc6, 0x28, 0x43, 0x8f, 0x13, 0x0e, 0x45, 0xc6, 0x21, 0x35, 0x4b,
+	0x46, 0xd5, 0x2c, 0xce, 0x3a, 0xfc, 0x01, 0x31, 0xd5, 0xe4, 0x5c, 0xdb, 0x28, 0xab, 0xfc, 0x57,
+	0x4a, 0x0e, 0x37, 0xc0, 0x17, 0x1a, 0x0c, 0x7a, 0x0c, 0x90, 0x43, 0x06, 0x81, 0xb5, 0x9a, 0x83,
+	0xeb, 0xd8, 0x24, 0xae, 0x84, 0x4b, 0x97, 0x25, 0xa5, 0xce, 0xb3, 0x92, 0x42, 0x50, 0x20, 0x7f,
+	0x42, 0x82, 0x63, 0x05, 0xab, 0x65, 0x13, 0xd7, 0xf6, 0x27, 0x35, 0xfc, 0xf0, 0x21, 0x71, 0x0d,
+	0xe6, 0xbb, 0x7e, 0x98, 0x83, 0x68, 0x62, 0xe8, 0xa7, 0x39, 0xf8, 0xc6, 0x95, 0xa8, 0xc5, 0xc8,
+	0xe8, 0xe1, 0xda, 0x64, 0xf3, 0x3e, 0x0c, 0x61, 0x1a, 0x33, 0x4b, 0x4c, 0xaf, 0xe6, 0x42, 0x74,
+	0x62, 0x99, 0xe4, 0xef, 0x4a, 0xb0, 0x14, 0xff, 0x13, 0x1b, 0x68, 0x17, 0x66, 0xa9, 0x91, 0xf0,
+	0x7f, 0x6a, 0x85, 0xbd, 0x0a, 0x7d, 0x61, 0xbf, 0xbf, 0xd5, 0xc1, 0x8e, 0x7d, 0x4e, 0x62, 0xaf,
+	0x1d, 0xc5, 0x97, 0xfc, 0x34, 0xcc, 0x84, 0x4b, 0x09, 0xf2, 0xee, 0x7a, 0x07, 0x5a, 0x51, 0x0a,
+	0xdb, 0xaa, 0x92, 0x91, 0xc8, 0xdf, 0xca, 0x2b, 0xe5, 0x52, 0x45, 0xc9, 0x24, 0xe4, 0xbf, 0x97,
+	0xe0, 0x28, 0xc1, 0x06, 0x91, 0x87, 0x36, 0x87, 0xb2, 0x64, 0xdd, 0xcf, 0x81, 0x92, 0x07, 0x7a,
+	0x0e, 0x14, 0xb7, 0x9d, 0xfe, 0x91, 0xdf, 0xc5, 0x75, 0x3d, 0x86, 0xe1, 0x33, 0x3c, 0xd9, 0x3d,
+	0xc3, 0x41, 0xd7, 0x87, 0x27, 0xbb, 0x67, 0x16, 0x9e, 0x55, 0xfc, 0x73, 0x9d, 0xe4, 0x5d, 0x79,
+	0xae, 0x13, 0x17, 0x10, 0x5e, 0x66, 0xa1, 0x99, 0xae, 0x2b, 0xad, 0x20, 0x78, 0x22, 0x45, 0x82,
+	0x27, 0x6f, 0x49, 0x0c, 0x7f, 0x84, 0x18, 0x38, 0xfe, 0x78, 0x7f, 0xf8, 0x9a, 0x6a, 0x20, 0xfc,
+	0x10, 0xfc, 0xe1, 0xab, 0xac, 0x07, 0x61, 0xce, 0xc4, 0x37, 0x3d, 0xcd, 0xa6, 0x81, 0x40, 0xeb,
+	0x1a, 0x16, 0xde, 0xcc, 0x2c, 0x21, 0x97, 0xf5, 0x06, 0xae, 0x12, 0xa2, 0xfc, 0x43, 0x09, 0x52,
+	0x82, 0x1f, 0x15, 0x20, 0xe9, 0x1f, 0xf7, 0xe9, 0x0b, 0x2b, 0x83, 0x7b, 0xf4, 0xff, 0xa0, 0x89,
+	0x7a, 0x94, 0xd9, 0x97, 0x4c, 0x22, 0xfa, 0x88, 0xd3, 0xc1, 0x35, 0xab, 0xd5, 0xc2, 0x66, 0x1d,
+	0xb3, 0x95, 0x4a, 0xa9, 0x61, 0x92, 0x5c, 0x80, 0x99, 0x70, 0x5b, 0xe8, 0x24, 0x1c, 0xdb, 0x2c,
+	0x15, 0xf2, 0xd5, 0x8d, 0x52, 0x51, 0x8b, 0xc9, 0xbd, 0x4a, 0x41, 0x72, 0xa7, 0x54, 0xe4, 0x1b,
+	0x48, 0x55, 0xd6, 0x37, 0x4a, 0xc5, 0x4c, 0x42, 0xfe, 0xb1, 0x04, 0x73, 0x1d, 0xde, 0x35, 0x5a,
+	0x85, 0x64, 0xcd, 0xaa, 0x8b, 0x39, 0x2d, 0x0f, 0xed, 0x96, 0x2f, 0x17, 0xe8, 0xa3, 0x7e, 0xc2,
+	0x4b, 0x01, 0x0d, 0x0f, 0x7c, 0xb0, 0x59, 0x89, 0x4f, 0xd9, 0x85, 0x24, 0xa9, 0xd7, 0x75, 0xa5,
+	0xb4, 0x5e, 0x50, 0xb4, 0x4a, 0xb5, 0x54, 0xb8, 0x54, 0xda, 0xae, 0x66, 0x24, 0x74, 0x2f, 0x1c,
+	0x5f, 0xbf, 0xa4, 0x68, 0x15, 0x45, 0xbd, 0xbc, 0x51, 0x50, 0xb4, 0x7c, 0xa1, 0x50, 0xda, 0x2e,
+	0x56, 0x35, 0x96, 0xb1, 0xb5, 0xc6, 0xbc, 0x76, 0xc2, 0xf2, 0xf2, 0x76, 0xa9, 0x9a, 0xd7, 0x94,
+	0x57, 0x0a, 0x8a, 0xb2, 0xa6, 0xac, 0x65, 0xc6, 0x44, 0x8e, 0xd5, 0xea, 0xab, 0x5a, 0xa9, 0xac,
+	0xa8, 0xf9, 0x6a, 0x49, 0xcd, 0x24, 0xe5, 0x0d, 0xff, 0x99, 0x7b, 0xf0, 0xba, 0x56, 0xbc, 0xab,
+	0x94, 0xa2, 0xaf, 0x3d, 0xa3, 0x8f, 0x2e, 0x13, 0x9d, 0x8f, 0x2e, 0xe5, 0x9f, 0x97, 0xe0, 0x04,
+	0x51, 0xc1, 0x6d, 0xfa, 0xdb, 0x02, 0xc1, 0xab, 0xf1, 0x41, 0xba, 0x4b, 0xe8, 0x57, 0x8d, 0xa6,
+	0x87, 0x1d, 0xde, 0x28, 0xff, 0x42, 0xc7, 0x61, 0x8a, 0xaa, 0x1c, 0x7d, 0xb1, 0xc1, 0x40, 0x58,
+	0x8a, 0x10, 0xe8, 0x4b, 0x0d, 0xb2, 0xc5, 0x03, 0x7d, 0x4c, 0xf2, 0x2d, 0xee, 0xeb, 0xe2, 0xe7,
+	0x25, 0x38, 0xd9, 0x63, 0x30, 0x7c, 0x5f, 0x6c, 0xc2, 0x74, 0x30, 0x78, 0xb1, 0x33, 0xfa, 0x24,
+	0x7b, 0x75, 0xb6, 0xa4, 0x86, 0xd9, 0x87, 0xde, 0x23, 0x6f, 0x27, 0xe0, 0x54, 0x67, 0x4b, 0xd1,
+	0xf7, 0xe2, 0x64, 0x66, 0xa1, 0xb7, 0xe5, 0xdc, 0x78, 0x39, 0xfe, 0x53, 0x72, 0x19, 0x66, 0x0d,
+	0x9b, 0x3d, 0xd6, 0xa0, 0x44, 0x11, 0x59, 0x30, 0xec, 0x82, 0x51, 0x77, 0x58, 0x13, 0x57, 0xfc,
+	0x38, 0x1d, 0x4b, 0x90, 0x7d, 0x71, 0xf8, 0x69, 0x45, 0x07, 0xd3, 0x11, 0xbd, 0x93, 0x1b, 0x7e,
+	0x48, 0x29, 0xa2, 0xa5, 0x00, 0x13, 0xdb, 0xc5, 0xed, 0x8a, 0xb2, 0xc6, 0xd2, 0x16, 0x37, 0x8a,
+	0xda, 0x76, 0xc5, 0x57, 0xd1, 0x4c, 0x02, 0x65, 0x61, 0x51, 0xd0, 0x2e, 0xe6, 0x55, 0x25, 0xbf,
+	0xba, 0xa9, 0x68, 0xe5, 0x12, 0x51, 0xca, 0x25, 0x40, 0xbc, 0x84, 0xa5, 0x13, 0xae, 0x51, 0x7a,
+	0x52, 0x7e, 0x2b, 0x01, 0x99, 0xce, 0xa1, 0x75, 0x68, 0xa0, 0xd4, 0xf5, 0xec, 0x37, 0xa4, 0xbb,
+	0x89, 0xa8, 0xee, 0x76, 0x09, 0x6d, 0xac, 0x5b, 0x68, 0x7b, 0xb0, 0x10, 0xbc, 0xee, 0x37, 0x6c,
+	0x56, 0x51, 0x20, 0xe7, 0x67, 0x46, 0x95, 0xa0, 0x3a, 0xef, 0x37, 0xba, 0x61, 0x53, 0x8a, 0x3b,
+	0x64, 0x6a, 0xb0, 0x7c, 0x01, 0x96, 0x7a, 0x24, 0x5e, 0xf7, 0x7e, 0x02, 0xff, 0x3e, 0x98, 0xef,
+	0x7e, 0xcb, 0xf7, 0x30, 0xcc, 0xfb, 0x11, 0x4b, 0x1b, 0x3b, 0xd4, 0xb7, 0xe1, 0xe0, 0x28, 0xcd,
+	0x43, 0x90, 0x65, 0xec, 0x10, 0xa0, 0x21, 0x7f, 0x26, 0x01, 0xc7, 0x7a, 0xe7, 0x9a, 0xdf, 0x86,
+	0xc5, 0x5d, 0xa3, 0xf1, 0x46, 0x1b, 0x3b, 0xb7, 0xb4, 0x3a, 0x76, 0x3d, 0xc3, 0x64, 0xc1, 0x19,
+	0x16, 0xaa, 0x5a, 0x1f, 0x21, 0xc1, 0x7d, 0x79, 0xd5, 0x68, 0xbc, 0x4c, 0xda, 0x5b, 0x0b, 0x9a,
+	0x53, 0x17, 0x44, 0x27, 0x21, 0x22, 0x2a, 0xc0, 0x29, 0xe1, 0xed, 0x72, 0x78, 0x81, 0x69, 0x86,
+	0x23, 0xc1, 0x5f, 0xd8, 0x11, 0x3f, 0x9b, 0x94, 0x52, 0x8f, 0x73, 0x7f, 0x97, 0x55, 0x52, 0x68,
+	0x9d, 0x2d, 0x5e, 0x25, 0xf7, 0x24, 0x2c, 0xc4, 0x74, 0x48, 0xb6, 0x1c, 0x81, 0x57, 0x2e, 0x0e,
+	0xe3, 0x05, 0x4e, 0xd9, 0xa8, 0x5f, 0xf8, 0x74, 0x1e, 0xd2, 0xdc, 0xff, 0x66, 0xe1, 0x19, 0x07,
+	0xfd, 0x93, 0x04, 0x33, 0xe1, 0xbb, 0x6b, 0xd4, 0x27, 0x36, 0x1d, 0x73, 0x9b, 0x9e, 0x5b, 0x1e,
+	0xb6, 0x3a, 0xb3, 0x56, 0xf2, 0x1b, 0x1f, 0xfe, 0xdb, 0x1f, 0x7f, 0x36, 0x71, 0x0d, 0x9d, 0xf7,
+	0x7f, 0x2b, 0xf1, 0x4d, 0x66, 0x3d, 0x5f, 0xe0, 0xb0, 0xc6, 0x5d, 0x39, 0xb7, 0xe2, 0x1f, 0xd9,
+	0x2b, 0xe7, 0xee, 0x88, 0xdf, 0x52, 0x74, 0x77, 0x9e, 0x42, 0x4f, 0xfa, 0x4c, 0x7e, 0xe5, 0x37,
+	0x03, 0x7c, 0x74, 0x67, 0x85, 0xde, 0x8a, 0xae, 0xbc, 0x49, 0xfe, 0x09, 0xf8, 0xd0, 0x3f, 0x48,
+	0x00, 0x41, 0xde, 0x23, 0xea, 0x83, 0x72, 0xba, 0xb2, 0x23, 0x73, 0x83, 0xef, 0xeb, 0xe5, 0x0f,
+	0xd1, 0x19, 0xdd, 0x0c, 0xcf, 0x88, 0x18, 0xbc, 0x1e, 0xf3, 0xf1, 0x87, 0xb5, 0x72, 0xee, 0xce,
+	0x4e, 0x01, 0xe5, 0x47, 0x99, 0xd1, 0xca, 0x9b, 0x01, 0xc2, 0xbb, 0x83, 0x7e, 0x24, 0xc1, 0x6c,
+	0x24, 0xff, 0x14, 0xf5, 0x59, 0x93, 0xb8, 0x44, 0xd5, 0xdc, 0x30, 0x17, 0xd1, 0xf2, 0x0d, 0x3a,
+	0xcd, 0x37, 0xe4, 0xfd, 0x2f, 0xdc, 0xb3, 0xd2, 0xb9, 0x9d, 0xf7, 0xca, 0x23, 0xad, 0xdd, 0xb3,
+	0xd2, 0x39, 0xf4, 0xef, 0x12, 0xcc, 0x46, 0xd2, 0x45, 0xfb, 0xcd, 0x2f, 0x2e, 0xaf, 0x74, 0xb8,
+	0xf9, 0x7d, 0x54, 0xa2, 0x13, 0xfc, 0x50, 0x6e, 0xff, 0xeb, 0x48, 0x26, 0xf8, 0x52, 0xee, 0xe0,
+	0x4b, 0x49, 0x66, 0xfb, 0x85, 0x04, 0xa4, 0xa3, 0x09, 0xa5, 0x68, 0x65, 0xd0, 0x74, 0x3b, 0x6e,
+	0x1a, 0x87, 0x9b, 0xef, 0x77, 0xd8, 0x7c, 0xbf, 0x29, 0xe5, 0x5e, 0xd8, 0xef, 0x84, 0x57, 0xfc,
+	0x88, 0x1e, 0x9f, 0xfc, 0x55, 0x59, 0x3f, 0xf0, 0xe4, 0x43, 0x8d, 0xbe, 0x19, 0x0e, 0x5d, 0xde,
+	0x59, 0x61, 0xf9, 0x4b, 0x44, 0x38, 0x3f, 0x48, 0x44, 0x02, 0xc5, 0xe1, 0x93, 0xe4, 0xe9, 0xbe,
+	0x11, 0xa1, 0xde, 0xb9, 0xaa, 0xc3, 0x09, 0xeb, 0xcf, 0x98, 0xb0, 0x7e, 0x20, 0xc9, 0x9b, 0x07,
+	0x13, 0x96, 0x8b, 0xbd, 0xd0, 0x18, 0x88, 0xec, 0xae, 0xc9, 0x57, 0xdf, 0x41, 0xd9, 0xe9, 0x91,
+	0xce, 0xd0, 0xcf, 0x26, 0x60, 0xbe, 0x2b, 0x5f, 0x15, 0x5d, 0xe8, 0x1f, 0x4d, 0x8b, 0x4b, 0x6e,
+	0x1d, 0x4e, 0x6c, 0xbf, 0xca, 0xc4, 0xf6, 0x69, 0x49, 0x7e, 0x7e, 0xff, 0x9b, 0xca, 0xf5, 0xbb,
+	0x26, 0x62, 0x2a, 0xca, 0x1b, 0x07, 0x17, 0x53, 0xd3, 0x6f, 0x0f, 0x7d, 0x96, 0x67, 0x04, 0x76,
+	0x65, 0x9c, 0x0e, 0xc8, 0xd1, 0xeb, 0x91, 0x35, 0x3b, 0x9c, 0x3c, 0xbe, 0xc4, 0xe4, 0xf1, 0x2b,
+	0x92, 0xfc, 0xe2, 0x48, 0xf2, 0x08, 0x7a, 0x27, 0x22, 0x79, 0x39, 0xa4, 0x8c, 0x23, 0x8b, 0xa4,
+	0x15, 0x6e, 0x12, 0xbd, 0x95, 0x80, 0xb9, 0x8e, 0xd4, 0x5a, 0xf4, 0x78, 0x5f, 0x81, 0xc4, 0x64,
+	0xe1, 0x0e, 0x27, 0x8b, 0x5f, 0x66, 0xb2, 0xf8, 0x94, 0x24, 0x3f, 0x37, 0x92, 0x2c, 0x58, 0xc7,
+	0x44, 0x0e, 0x5b, 0xf2, 0xc5, 0x83, 0xcb, 0x41, 0x17, 0xcd, 0x11, 0x19, 0xcc, 0x84, 0x93, 0x70,
+	0xfb, 0x21, 0xa2, 0x98, 0x64, 0xdd, 0xe1, 0x66, 0xff, 0x45, 0x36, 0xfb, 0xcf, 0x4b, 0xf2, 0xfb,
+	0x46, 0xdc, 0x19, 0xbc, 0x88, 0x08, 0xa0, 0x2c, 0x5f, 0xba, 0x1b, 0x7b, 0x23, 0x68, 0x11, 0xfd,
+	0x9f, 0x04, 0x33, 0xe1, 0x04, 0xdf, 0x7e, 0x32, 0x88, 0x49, 0x04, 0x1e, 0x4e, 0x06, 0xbf, 0xc6,
+	0x64, 0xf0, 0x99, 0x91, 0x64, 0xd0, 0x0e, 0xf5, 0x7a, 0xd7, 0x94, 0xa0, 0x25, 0x9a, 0x43, 0x1f,
+	0x4f, 0xc0, 0x6c, 0x24, 0x25, 0xb7, 0x1f, 0xe8, 0x88, 0xcb, 0xdd, 0x1d, 0x4e, 0x04, 0xbf, 0xc5,
+	0x44, 0xf0, 0x85, 0x91, 0x0d, 0x82, 0xdf, 0x2d, 0x91, 0x41, 0x55, 0x2e, 0x1d, 0x1c, 0x83, 0x74,
+	0xb6, 0x8a, 0x7e, 0x2c, 0xc1, 0x6c, 0x24, 0xa3, 0xb7, 0x9f, 0x28, 0xe2, 0x52, 0x7f, 0x87, 0x13,
+	0x05, 0x87, 0xd1, 0xe7, 0x46, 0x81, 0xd1, 0xe7, 0xee, 0x02, 0x8c, 0xfe, 0x37, 0x09, 0xd2, 0xd1,
+	0xe4, 0xcd, 0x7e, 0xc0, 0x2b, 0x36, 0xc9, 0x35, 0xf7, 0xf8, 0xf0, 0x0c, 0xdc, 0x1d, 0x6a, 0xd3,
+	0x59, 0x5b, 0xe8, 0x89, 0xa1, 0x51, 0x75, 0x90, 0x0f, 0xba, 0xf3, 0x0c, 0x7a, 0x6a, 0x3f, 0xf3,
+	0x0e, 0x65, 0x92, 0xfe, 0xab, 0x04, 0x33, 0xe1, 0xa4, 0xe1, 0x7e, 0xfb, 0x3b, 0x26, 0xb9, 0x78,
+	0x7f, 0x88, 0x3a, 0x3c, 0xb9, 0x7e, 0x4b, 0x1a, 0x8c, 0x8f, 0x2c, 0xea, 0x3a, 0x52, 0x46, 0x9b,
+	0xdc, 0xca, 0x9b, 0xe1, 0xfc, 0xdd, 0x3b, 0xe8, 0x7f, 0x24, 0x98, 0xeb, 0x48, 0x13, 0xee, 0x77,
+	0xa6, 0xc5, 0x67, 0x14, 0xe7, 0x96, 0x04, 0x87, 0xf8, 0x21, 0xfd, 0x65, 0xa5, 0x65, 0x7b, 0xb7,
+	0x42, 0x46, 0xec, 0xd9, 0x11, 0x66, 0xf9, 0x6c, 0x8d, 0xf6, 0x36, 0xc2, 0x69, 0xde, 0x73, 0xbe,
+	0x41, 0x93, 0x64, 0xe7, 0xce, 0x75, 0xe4, 0x02, 0xf7, 0x9b, 0x79, 0x7c, 0xda, 0x70, 0xee, 0xc1,
+	0x7e, 0x86, 0x2f, 0xa8, 0x2e, 0x1c, 0xc4, 0x21, 0x57, 0xfb, 0xce, 0x8a, 0x1b, 0x62, 0xde, 0x79,
+	0x16, 0x3d, 0xb3, 0x9f, 0xd9, 0x33, 0x5e, 0x9e, 0x61, 0x48, 0x6c, 0x75, 0x24, 0x65, 0x01, 0x0d,
+	0x08, 0x4a, 0x74, 0xe6, 0x89, 0xe6, 0x56, 0x86, 0xae, 0xcf, 0xb7, 0xed, 0xe7, 0xd9, 0xaa, 0x7f,
+	0x52, 0x42, 0x2f, 0x0c, 0xb9, 0x71, 0xc3, 0x06, 0x2b, 0x80, 0xeb, 0x3b, 0x5b, 0xe8, 0xd2, 0x5d,
+	0x44, 0xff, 0xe8, 0x67, 0x12, 0x30, 0x1d, 0x4a, 0x3d, 0x45, 0x8f, 0xf6, 0x5d, 0xed, 0x4e, 0xbf,
+	0x71, 0x88, 0x6c, 0x0e, 0xf9, 0xab, 0x6c, 0xe6, 0xbf, 0x11, 0x99, 0xf9, 0x08, 0x9e, 0xd0, 0xce,
+	0x6b, 0x68, 0xe7, 0x9d, 0xf3, 0x7b, 0xd0, 0x47, 0x13, 0x90, 0x8e, 0x66, 0x65, 0xf7, 0xb3, 0xe6,
+	0xb1, 0xf9, 0xdb, 0xc3, 0x19, 0xb9, 0x5f, 0x67, 0xf2, 0xf8, 0x9c, 0x24, 0x1f, 0x4c, 0x13, 0xee,
+	0x1a, 0x8e, 0x0b, 0xb7, 0x88, 0x3e, 0x91, 0x80, 0x74, 0x34, 0x97, 0xbb, 0x9f, 0x18, 0x62, 0xb3,
+	0xbe, 0x87, 0x13, 0x83, 0xaf, 0x16, 0xe7, 0x0e, 0xaa, 0x16, 0xe7, 0xde, 0x49, 0xb5, 0xf8, 0x5e,
+	0x02, 0x8e, 0xf6, 0xc8, 0xcb, 0x42, 0x7d, 0x22, 0xe3, 0xfd, 0x53, 0xb9, 0x86, 0x93, 0xd0, 0x1f,
+	0x31, 0x09, 0x7d, 0x57, 0x92, 0x5f, 0x3a, 0x58, 0x08, 0xc1, 0xe1, 0x83, 0x21, 0x1a, 0xb3, 0x27,
+	0xd7, 0xde, 0x39, 0x69, 0x85, 0x7b, 0x42, 0x7f, 0x9c, 0x80, 0x23, 0xb1, 0x69, 0x8a, 0xe8, 0xa9,
+	0xa1, 0x22, 0x2f, 0x5d, 0x79, 0x8d, 0xc3, 0x49, 0xed, 0xcf, 0x99, 0xd4, 0xfe, 0x44, 0x0a, 0x6d,
+	0x8d, 0x51, 0x03, 0x2f, 0xc1, 0x10, 0x88, 0xe8, 0x5a, 0xf2, 0xde, 0x3b, 0x18, 0x77, 0xe9, 0xec,
+	0x0e, 0x7d, 0x2c, 0x01, 0x53, 0x7e, 0x6a, 0x12, 0x3a, 0x37, 0x7c, 0xfe, 0xd2, 0x70, 0x72, 0xfa,
+	0x1a, 0x93, 0xd3, 0x6f, 0x4a, 0x72, 0x61, 0x24, 0x47, 0x22, 0x9a, 0xbc, 0x44, 0xe4, 0xb3, 0x2d,
+	0x97, 0x0f, 0x2e, 0x1f, 0xa7, 0xb3, 0x59, 0x22, 0x87, 0xd9, 0x48, 0x96, 0xd3, 0x00, 0xc7, 0xaa,
+	0x2b, 0x1d, 0xea, 0x70, 0x22, 0x2d, 0x41, 0xb7, 0x77, 0x2d, 0xd2, 0xd2, 0x0c, 0x37, 0x89, 0x7e,
+	0x29, 0x41, 0xaf, 0xe5, 0xc3, 0x89, 0x54, 0x7d, 0x23, 0x2d, 0xb1, 0x39, 0x57, 0xc3, 0xc9, 0xe2,
+	0x6d, 0x26, 0x8b, 0x2f, 0x49, 0x72, 0x7e, 0x04, 0x59, 0xd0, 0x8e, 0x6d, 0xd1, 0x31, 0x91, 0xc6,
+	0x65, 0xf9, 0xe5, 0xbb, 0xe0, 0x66, 0x76, 0xb5, 0x8b, 0xbe, 0x98, 0x00, 0xd4, 0x9d, 0x9f, 0x85,
+	0xfa, 0xfc, 0xdc, 0x54, 0xcf, 0x6c, 0xae, 0xe1, 0x04, 0xf3, 0x2d, 0x26, 0x98, 0xaf, 0x4a, 0xf2,
+	0xda, 0xfe, 0x05, 0x53, 0x13, 0x7d, 0x47, 0x64, 0xf3, 0xaa, 0x5c, 0x3d, 0xb8, 0x6c, 0x62, 0x9b,
+	0x46, 0x6f, 0xb3, 0xd8, 0x5c, 0x38, 0x4b, 0x7a, 0x40, 0x6c, 0x2e, 0x26, 0xa1, 0x7a, 0x38, 0xc1,
+	0x7c, 0x9f, 0x09, 0xe6, 0xf7, 0x24, 0x59, 0x39, 0xb0, 0xd5, 0x25, 0x9d, 0x13, 0xc9, 0x34, 0xe4,
+	0xdd, 0x77, 0xd6, 0xde, 0xf2, 0x8e, 0xd0, 0xe7, 0x58, 0x9e, 0x6a, 0xf4, 0x3f, 0x3d, 0x38, 0xdf,
+	0x5f, 0x50, 0x31, 0xd9, 0x65, 0xc3, 0x49, 0xea, 0xeb, 0x4c, 0x52, 0x5f, 0x96, 0xe4, 0xd5, 0x91,
+	0xec, 0x4c, 0xa4, 0x67, 0x22, 0xa6, 0x2b, 0xb2, 0x7a, 0x57, 0x62, 0x38, 0x9d, 0x0d, 0xa3, 0xaf,
+	0x8a, 0x27, 0xf0, 0x9d, 0x59, 0x5b, 0x83, 0x1e, 0xa5, 0xc7, 0xa7, 0xa6, 0x0d, 0x27, 0x9e, 0x6f,
+	0x33, 0xf1, 0x7c, 0x63, 0x04, 0xd0, 0xc3, 0x8f, 0xec, 0x8e, 0xde, 0x89, 0x88, 0x3e, 0x20, 0x5f,
+	0xbe, 0x4b, 0x61, 0xae, 0xee, 0xc6, 0xd1, 0x5f, 0xf2, 0xfc, 0xb3, 0xae, 0x7c, 0x9b, 0x7e, 0x38,
+	0xa7, 0x5f, 0xb6, 0x50, 0xee, 0xe9, 0x7d, 0xf3, 0x71, 0x27, 0x33, 0x4f, 0x65, 0xf7, 0x1c, 0x7a,
+	0x6f, 0x1f, 0xc7, 0xe2, 0xce, 0x8a, 0xde, 0x68, 0x38, 0xb8, 0xa1, 0x7b, 0xb8, 0xbe, 0xd2, 0xee,
+	0x1a, 0xf3, 0x97, 0x25, 0xe6, 0x1a, 0x07, 0xc1, 0xec, 0x01, 0xae, 0x71, 0x57, 0x34, 0x7b, 0x65,
+	0xe8, 0xfa, 0x7c, 0xd4, 0xcb, 0x74, 0xd4, 0x67, 0xd1, 0x83, 0x7d, 0x47, 0xed, 0xaf, 0xf9, 0xea,
+	0xf7, 0x25, 0x38, 0x51, 0xb3, 0x5a, 0x3d, 0xbb, 0x59, 0x5d, 0x28, 0x88, 0xff, 0xd0, 0x82, 0x5e,
+	0xb8, 0x94, 0x1d, 0xcb, 0xb3, 0xca, 0xd2, 0x4e, 0x9e, 0x33, 0x34, 0xac, 0xa6, 0x6e, 0x36, 0x96,
+	0x2d, 0xa7, 0xb1, 0xd2, 0xc0, 0x26, 0x8d, 0xce, 0xac, 0xb0, 0x22, 0xdd, 0x36, 0xdc, 0xee, 0xff,
+	0x9b, 0xf1, 0x39, 0x9f, 0xf2, 0xcd, 0xc4, 0xa9, 0x75, 0xd6, 0x06, 0xfd, 0x8f, 0x66, 0x96, 0x0b,
+	0x7e, 0xd7, 0x97, 0xcf, 0xaf, 0x92, 0xaa, 0x3f, 0x14, 0x15, 0x5e, 0xa3, 0x15, 0x5e, 0xf3, 0x2b,
+	0xbc, 0x76, 0x99, 0xb5, 0xb5, 0x3b, 0x41, 0xfb, 0x7b, 0xe2, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0x29, 0xa8, 0xb0, 0xd5, 0x0a, 0x72, 0x00, 0x00,
 }
diff --git a/googleapis/home/graph/v1/homegraph.pb.go b/googleapis/home/graph/v1/homegraph.pb.go
index 24e609c5ff4d69b1c283c1fb22c050b5151ab9dc..87cc494a7065af5bf831907f21eb291991368a84 100644
--- a/googleapis/home/graph/v1/homegraph.pb.go
+++ b/googleapis/home/graph/v1/homegraph.pb.go
@@ -44,7 +44,7 @@ func (m *RequestSyncDevicesRequest) Reset()         { *m = RequestSyncDevicesReq
 func (m *RequestSyncDevicesRequest) String() string { return proto.CompactTextString(m) }
 func (*RequestSyncDevicesRequest) ProtoMessage()    {}
 func (*RequestSyncDevicesRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{0}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{0}
 }
 func (m *RequestSyncDevicesRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_RequestSyncDevicesRequest.Unmarshal(m, b)
@@ -90,7 +90,7 @@ func (m *RequestSyncDevicesResponse) Reset()         { *m = RequestSyncDevicesRe
 func (m *RequestSyncDevicesResponse) String() string { return proto.CompactTextString(m) }
 func (*RequestSyncDevicesResponse) ProtoMessage()    {}
 func (*RequestSyncDevicesResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{1}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{1}
 }
 func (m *RequestSyncDevicesResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_RequestSyncDevicesResponse.Unmarshal(m, b)
@@ -114,7 +114,7 @@ var xxx_messageInfo_RequestSyncDevicesResponse proto.InternalMessageInfo
 // defined per device_id (eg: "123" and "456" in the following example):
 // {
 //   "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
-//   "agent_user_id": "1234",
+//   "agentUserId": "1234",
 //   "payload": {
 //     "devices": {
 //       "states": {
@@ -185,7 +185,7 @@ func (m *ReportStateAndNotificationRequest) Reset()         { *m = ReportStateAn
 func (m *ReportStateAndNotificationRequest) String() string { return proto.CompactTextString(m) }
 func (*ReportStateAndNotificationRequest) ProtoMessage()    {}
 func (*ReportStateAndNotificationRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{2}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{2}
 }
 func (m *ReportStateAndNotificationRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ReportStateAndNotificationRequest.Unmarshal(m, b)
@@ -253,7 +253,7 @@ func (m *ReportStateAndNotificationResponse) Reset()         { *m = ReportStateA
 func (m *ReportStateAndNotificationResponse) String() string { return proto.CompactTextString(m) }
 func (*ReportStateAndNotificationResponse) ProtoMessage()    {}
 func (*ReportStateAndNotificationResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{3}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{3}
 }
 func (m *ReportStateAndNotificationResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ReportStateAndNotificationResponse.Unmarshal(m, b)
@@ -293,7 +293,7 @@ func (m *StateAndNotificationPayload) Reset()         { *m = StateAndNotificatio
 func (m *StateAndNotificationPayload) String() string { return proto.CompactTextString(m) }
 func (*StateAndNotificationPayload) ProtoMessage()    {}
 func (*StateAndNotificationPayload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{4}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{4}
 }
 func (m *StateAndNotificationPayload) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_StateAndNotificationPayload.Unmarshal(m, b)
@@ -335,7 +335,7 @@ func (m *ReportStateAndNotificationDevice) Reset()         { *m = ReportStateAnd
 func (m *ReportStateAndNotificationDevice) String() string { return proto.CompactTextString(m) }
 func (*ReportStateAndNotificationDevice) ProtoMessage()    {}
 func (*ReportStateAndNotificationDevice) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{5}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{5}
 }
 func (m *ReportStateAndNotificationDevice) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ReportStateAndNotificationDevice.Unmarshal(m, b)
@@ -384,7 +384,7 @@ func (m *DeleteAgentUserRequest) Reset()         { *m = DeleteAgentUserRequest{}
 func (m *DeleteAgentUserRequest) String() string { return proto.CompactTextString(m) }
 func (*DeleteAgentUserRequest) ProtoMessage()    {}
 func (*DeleteAgentUserRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{6}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{6}
 }
 func (m *DeleteAgentUserRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_DeleteAgentUserRequest.Unmarshal(m, b)
@@ -440,7 +440,7 @@ func (m *QueryRequest) Reset()         { *m = QueryRequest{} }
 func (m *QueryRequest) String() string { return proto.CompactTextString(m) }
 func (*QueryRequest) ProtoMessage()    {}
 func (*QueryRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{7}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{7}
 }
 func (m *QueryRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_QueryRequest.Unmarshal(m, b)
@@ -494,7 +494,7 @@ func (m *QueryRequestInput) Reset()         { *m = QueryRequestInput{} }
 func (m *QueryRequestInput) String() string { return proto.CompactTextString(m) }
 func (*QueryRequestInput) ProtoMessage()    {}
 func (*QueryRequestInput) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{8}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{8}
 }
 func (m *QueryRequestInput) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_QueryRequestInput.Unmarshal(m, b)
@@ -534,7 +534,7 @@ func (m *QueryRequestPayload) Reset()         { *m = QueryRequestPayload{} }
 func (m *QueryRequestPayload) String() string { return proto.CompactTextString(m) }
 func (*QueryRequestPayload) ProtoMessage()    {}
 func (*QueryRequestPayload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{9}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{9}
 }
 func (m *QueryRequestPayload) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_QueryRequestPayload.Unmarshal(m, b)
@@ -574,7 +574,7 @@ func (m *AgentDeviceId) Reset()         { *m = AgentDeviceId{} }
 func (m *AgentDeviceId) String() string { return proto.CompactTextString(m) }
 func (*AgentDeviceId) ProtoMessage()    {}
 func (*AgentDeviceId) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{10}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{10}
 }
 func (m *AgentDeviceId) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AgentDeviceId.Unmarshal(m, b)
@@ -618,7 +618,7 @@ func (m *QueryResponse) Reset()         { *m = QueryResponse{} }
 func (m *QueryResponse) String() string { return proto.CompactTextString(m) }
 func (*QueryResponse) ProtoMessage()    {}
 func (*QueryResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{11}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{11}
 }
 func (m *QueryResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_QueryResponse.Unmarshal(m, b)
@@ -666,7 +666,7 @@ func (m *QueryResponsePayload) Reset()         { *m = QueryResponsePayload{} }
 func (m *QueryResponsePayload) String() string { return proto.CompactTextString(m) }
 func (*QueryResponsePayload) ProtoMessage()    {}
 func (*QueryResponsePayload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{12}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{12}
 }
 func (m *QueryResponsePayload) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_QueryResponsePayload.Unmarshal(m, b)
@@ -711,7 +711,7 @@ func (m *SyncRequest) Reset()         { *m = SyncRequest{} }
 func (m *SyncRequest) String() string { return proto.CompactTextString(m) }
 func (*SyncRequest) ProtoMessage()    {}
 func (*SyncRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{13}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{13}
 }
 func (m *SyncRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SyncRequest.Unmarshal(m, b)
@@ -794,7 +794,7 @@ func (m *SyncResponse) Reset()         { *m = SyncResponse{} }
 func (m *SyncResponse) String() string { return proto.CompactTextString(m) }
 func (*SyncResponse) ProtoMessage()    {}
 func (*SyncResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{14}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{14}
 }
 func (m *SyncResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SyncResponse.Unmarshal(m, b)
@@ -843,7 +843,7 @@ func (m *SyncResponsePayload) Reset()         { *m = SyncResponsePayload{} }
 func (m *SyncResponsePayload) String() string { return proto.CompactTextString(m) }
 func (*SyncResponsePayload) ProtoMessage()    {}
 func (*SyncResponsePayload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_homegraph_d5a465603b8fcbc5, []int{15}
+	return fileDescriptor_homegraph_a63234dfcc84278e, []int{15}
 }
 func (m *SyncResponsePayload) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SyncResponsePayload.Unmarshal(m, b)
@@ -1194,10 +1194,10 @@ var _HomeGraphApiService_serviceDesc = grpc.ServiceDesc{
 }
 
 func init() {
-	proto.RegisterFile("google/home/graph/v1/homegraph.proto", fileDescriptor_homegraph_d5a465603b8fcbc5)
+	proto.RegisterFile("google/home/graph/v1/homegraph.proto", fileDescriptor_homegraph_a63234dfcc84278e)
 }
 
-var fileDescriptor_homegraph_d5a465603b8fcbc5 = []byte{
+var fileDescriptor_homegraph_a63234dfcc84278e = []byte{
 	// 879 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x4f, 0x8f, 0xdb, 0x44,
 	0x14, 0x97, 0x93, 0x66, 0xb7, 0x7d, 0xd9, 0xd0, 0x76, 0x76, 0xd9, 0xba, 0xd9, 0x20, 0x92, 0x59,