| // Code generated by protoc-gen-go. DO NOT EDIT. | 
 | // source: feeds.proto | 
 |  | 
 | package maps_booking_feeds | 
 |  | 
 | import ( | 
 | 	fmt "fmt" | 
 | 	proto "github.com/golang/protobuf/proto" | 
 | 	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.ProtoPackageIsVersion3 // please upgrade the proto package | 
 |  | 
 | // Defines how a total price is determined from an availability. | 
 | type PriceType int32 | 
 |  | 
 | const ( | 
 | 	// The price is for a fixed amount. This is the default value if the field is | 
 | 	// not set. | 
 | 	PriceType_FIXED_RATE_DEFAULT PriceType = 0 | 
 | 	// The price specified is per person, and the total price is calculated | 
 | 	// according to the party size specified in Resources as | 
 | 	// price_micros * party_size. A PER_PERSON price must be accompanied by a | 
 | 	// party size in the availability resources. If it is not, a party size of one | 
 | 	// is used. | 
 | 	PriceType_PER_PERSON PriceType = 1 | 
 | ) | 
 |  | 
 | var PriceType_name = map[int32]string{ | 
 | 	0: "FIXED_RATE_DEFAULT", | 
 | 	1: "PER_PERSON", | 
 | } | 
 |  | 
 | var PriceType_value = map[string]int32{ | 
 | 	"FIXED_RATE_DEFAULT": 0, | 
 | 	"PER_PERSON":         1, | 
 | } | 
 |  | 
 | func (x PriceType) String() string { | 
 | 	return proto.EnumName(PriceType_name, int32(x)) | 
 | } | 
 |  | 
 | func (PriceType) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{0} | 
 | } | 
 |  | 
 | // Defines whether a credit card is required in order to book an appointment. | 
 | type RequireCreditCard int32 | 
 |  | 
 | const ( | 
 | 	// The credit card requirement is not explicitly specified and the | 
 | 	// behaviour is identical to the one specified for CONDITIONAL. | 
 | 	RequireCreditCard_REQUIRE_CREDIT_CARD_UNSPECIFIED RequireCreditCard = 0 | 
 | 	// Google will require a credit card for the booking if any of the following | 
 | 	// conditions are met: | 
 | 	// * the availability has a price and the prepayment_type is REQUIRED | 
 | 	// * the no_show_fee is set | 
 | 	// * the deposit field is set. | 
 | 	RequireCreditCard_REQUIRE_CREDIT_CARD_CONDITIONAL RequireCreditCard = 1 | 
 | 	// A credit card is always required in order to book this availability | 
 | 	// regardless of other field values. | 
 | 	RequireCreditCard_REQUIRE_CREDIT_CARD_ALWAYS RequireCreditCard = 2 | 
 | ) | 
 |  | 
 | var RequireCreditCard_name = map[int32]string{ | 
 | 	0: "REQUIRE_CREDIT_CARD_UNSPECIFIED", | 
 | 	1: "REQUIRE_CREDIT_CARD_CONDITIONAL", | 
 | 	2: "REQUIRE_CREDIT_CARD_ALWAYS", | 
 | } | 
 |  | 
 | var RequireCreditCard_value = map[string]int32{ | 
 | 	"REQUIRE_CREDIT_CARD_UNSPECIFIED": 0, | 
 | 	"REQUIRE_CREDIT_CARD_CONDITIONAL": 1, | 
 | 	"REQUIRE_CREDIT_CARD_ALWAYS":      2, | 
 | } | 
 |  | 
 | func (x RequireCreditCard) String() string { | 
 | 	return proto.EnumName(RequireCreditCard_name, int32(x)) | 
 | } | 
 |  | 
 | func (RequireCreditCard) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{1} | 
 | } | 
 |  | 
 | // The platform that the action is performed on. Web application is the general | 
 | // fallback. It is recommended to have at least one ActionLink with | 
 | // ACTION_PLATFORM_WEB_APPLICATION. Links with Android and iOS as platform are | 
 | // only used on the respective system. | 
 | type ActionPlatform int32 | 
 |  | 
 | const ( | 
 | 	// The platform is unspecified. | 
 | 	ActionPlatform_ACTION_PLATFORM_UNSPECIFIED ActionPlatform = 0 | 
 | 	// The action platform is web in general. | 
 | 	ActionPlatform_ACTION_PLATFORM_WEB_APPLICATION ActionPlatform = 1 | 
 | 	// The action platform is web on mobile devices. | 
 | 	ActionPlatform_ACTION_PLATFORM_MOBILE_WEB ActionPlatform = 2 | 
 | 	// The action platform is Android OS. | 
 | 	ActionPlatform_ACTION_PLATFORM_ANDROID ActionPlatform = 3 | 
 | 	// The action platform is iOS. | 
 | 	ActionPlatform_ACTION_PLATFORM_IOS ActionPlatform = 4 | 
 | ) | 
 |  | 
 | var ActionPlatform_name = map[int32]string{ | 
 | 	0: "ACTION_PLATFORM_UNSPECIFIED", | 
 | 	1: "ACTION_PLATFORM_WEB_APPLICATION", | 
 | 	2: "ACTION_PLATFORM_MOBILE_WEB", | 
 | 	3: "ACTION_PLATFORM_ANDROID", | 
 | 	4: "ACTION_PLATFORM_IOS", | 
 | } | 
 |  | 
 | var ActionPlatform_value = map[string]int32{ | 
 | 	"ACTION_PLATFORM_UNSPECIFIED":     0, | 
 | 	"ACTION_PLATFORM_WEB_APPLICATION": 1, | 
 | 	"ACTION_PLATFORM_MOBILE_WEB":      2, | 
 | 	"ACTION_PLATFORM_ANDROID":         3, | 
 | 	"ACTION_PLATFORM_IOS":             4, | 
 | } | 
 |  | 
 | func (x ActionPlatform) String() string { | 
 | 	return proto.EnumName(ActionPlatform_name, int32(x)) | 
 | } | 
 |  | 
 | func (ActionPlatform) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{2} | 
 | } | 
 |  | 
 | type FeedMetadata_ProcessingInstruction int32 | 
 |  | 
 | const ( | 
 | 	// By default we will assume that this feed is an incremental feed. | 
 | 	FeedMetadata_PROCESS_UNKNOWN FeedMetadata_ProcessingInstruction = 0 | 
 | 	// This Feed message is one shard of a complete feed. Anything previously | 
 | 	// supplied by this partner will be deleted; the contents of this feed | 
 | 	// represent the entire state of the world. | 
 | 	FeedMetadata_PROCESS_AS_COMPLETE FeedMetadata_ProcessingInstruction = 1 | 
 | 	// This Feed message is one shard of an incremental feed. Existing entities | 
 | 	// will be left untouched except as modified in this feed. | 
 | 	FeedMetadata_PROCESS_AS_INCREMENTAL FeedMetadata_ProcessingInstruction = 2 | 
 | ) | 
 |  | 
 | var FeedMetadata_ProcessingInstruction_name = map[int32]string{ | 
 | 	0: "PROCESS_UNKNOWN", | 
 | 	1: "PROCESS_AS_COMPLETE", | 
 | 	2: "PROCESS_AS_INCREMENTAL", | 
 | } | 
 |  | 
 | var FeedMetadata_ProcessingInstruction_value = map[string]int32{ | 
 | 	"PROCESS_UNKNOWN":        0, | 
 | 	"PROCESS_AS_COMPLETE":    1, | 
 | 	"PROCESS_AS_INCREMENTAL": 2, | 
 | } | 
 |  | 
 | func (x FeedMetadata_ProcessingInstruction) String() string { | 
 | 	return proto.EnumName(FeedMetadata_ProcessingInstruction_name, int32(x)) | 
 | } | 
 |  | 
 | func (FeedMetadata_ProcessingInstruction) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{0, 0} | 
 | } | 
 |  | 
 | // The confirmation modes used when booking availabilities. | 
 | type Availability_ConfirmationMode int32 | 
 |  | 
 | const ( | 
 | 	// The confirmation mode was not specified. | 
 | 	// Synchronous confirmation will be assumed. | 
 | 	Availability_CONFIRMATION_MODE_UNSPECIFIED Availability_ConfirmationMode = 0 | 
 | 	// Bookings for this availability will be confirmed synchronously. | 
 | 	Availability_CONFIRMATION_MODE_SYNCHRONOUS Availability_ConfirmationMode = 1 | 
 | 	// Bookings for this availability will be confirmed asynchronously. | 
 | 	Availability_CONFIRMATION_MODE_ASYNCHRONOUS Availability_ConfirmationMode = 2 | 
 | ) | 
 |  | 
 | var Availability_ConfirmationMode_name = map[int32]string{ | 
 | 	0: "CONFIRMATION_MODE_UNSPECIFIED", | 
 | 	1: "CONFIRMATION_MODE_SYNCHRONOUS", | 
 | 	2: "CONFIRMATION_MODE_ASYNCHRONOUS", | 
 | } | 
 |  | 
 | var Availability_ConfirmationMode_value = map[string]int32{ | 
 | 	"CONFIRMATION_MODE_UNSPECIFIED":  0, | 
 | 	"CONFIRMATION_MODE_SYNCHRONOUS":  1, | 
 | 	"CONFIRMATION_MODE_ASYNCHRONOUS": 2, | 
 | } | 
 |  | 
 | func (x Availability_ConfirmationMode) String() string { | 
 | 	return proto.EnumName(Availability_ConfirmationMode_name, int32(x)) | 
 | } | 
 |  | 
 | func (Availability_ConfirmationMode) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 0} | 
 | } | 
 |  | 
 | // Enum to indicate the prepayment type. | 
 | type Service_PrepaymentType int32 | 
 |  | 
 | const ( | 
 | 	// By default we will assume that the prepayment is NOT_SUPPORTED. | 
 | 	Service_PREPAYMENT_TYPE_UNSPECIFIED Service_PrepaymentType = 0 | 
 | 	// The user has to pay this service at the booking time. | 
 | 	Service_REQUIRED Service_PrepaymentType = 1 | 
 | 	// The user can choose to pre-pay this service at the booking time or later, | 
 | 	// but it is not required in order to book. | 
 | 	Service_OPTIONAL Service_PrepaymentType = 2 | 
 | 	// The prepayment is not supported for this service. | 
 | 	Service_NOT_SUPPORTED Service_PrepaymentType = 3 | 
 | ) | 
 |  | 
 | var Service_PrepaymentType_name = map[int32]string{ | 
 | 	0: "PREPAYMENT_TYPE_UNSPECIFIED", | 
 | 	1: "REQUIRED", | 
 | 	2: "OPTIONAL", | 
 | 	3: "NOT_SUPPORTED", | 
 | } | 
 |  | 
 | var Service_PrepaymentType_value = map[string]int32{ | 
 | 	"PREPAYMENT_TYPE_UNSPECIFIED": 0, | 
 | 	"REQUIRED":                    1, | 
 | 	"OPTIONAL":                    2, | 
 | 	"NOT_SUPPORTED":               3, | 
 | } | 
 |  | 
 | func (x Service_PrepaymentType) String() string { | 
 | 	return proto.EnumName(Service_PrepaymentType_name, int32(x)) | 
 | } | 
 |  | 
 | func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{7, 0} | 
 | } | 
 |  | 
 | type Service_ServiceType int32 | 
 |  | 
 | const ( | 
 | 	Service_SERVICE_TYPE_UNSPECIFIED        Service_ServiceType = 0 | 
 | 	Service_SERVICE_TYPE_DINING_RESERVATION Service_ServiceType = 1 | 
 | 	Service_SERVICE_TYPE_FOOD_ORDERING      Service_ServiceType = 2 | 
 | 	Service_SERVICE_TYPE_EVENT_TICKET       Service_ServiceType = 3 | 
 | 	Service_SERVICE_TYPE_TRIP_TOUR          Service_ServiceType = 4 | 
 | ) | 
 |  | 
 | var Service_ServiceType_name = map[int32]string{ | 
 | 	0: "SERVICE_TYPE_UNSPECIFIED", | 
 | 	1: "SERVICE_TYPE_DINING_RESERVATION", | 
 | 	2: "SERVICE_TYPE_FOOD_ORDERING", | 
 | 	3: "SERVICE_TYPE_EVENT_TICKET", | 
 | 	4: "SERVICE_TYPE_TRIP_TOUR", | 
 | } | 
 |  | 
 | var Service_ServiceType_value = map[string]int32{ | 
 | 	"SERVICE_TYPE_UNSPECIFIED":        0, | 
 | 	"SERVICE_TYPE_DINING_RESERVATION": 1, | 
 | 	"SERVICE_TYPE_FOOD_ORDERING":      2, | 
 | 	"SERVICE_TYPE_EVENT_TICKET":       3, | 
 | 	"SERVICE_TYPE_TRIP_TOUR":          4, | 
 | } | 
 |  | 
 | func (x Service_ServiceType) String() string { | 
 | 	return proto.EnumName(Service_ServiceType_name, int32(x)) | 
 | } | 
 |  | 
 | func (Service_ServiceType) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{7, 1} | 
 | } | 
 |  | 
 | // The admission policy of this service. | 
 | type SchedulingRules_AdmissionPolicy int32 | 
 |  | 
 | const ( | 
 | 	// Unused. | 
 | 	SchedulingRules_ADMISSION_POLICY_UNSPECIFIED SchedulingRules_AdmissionPolicy = 0 | 
 | 	// Customers are required to be present at the start time of the | 
 | 	// availability slot, and the service is expected to finish at the | 
 | 	// end time of the slot. | 
 | 	// Examples of TIME_STRICT use cases: | 
 | 	//   * A tour that starts at 9am that requires all attendees to arrive | 
 | 	//     at the start time, and returns at around 12pm. | 
 | 	//   * A haircut reservation at 3pm on Saturday that will take approximately | 
 | 	//   30 minutes. | 
 | 	//   * A fitness class from 6pm to 8pm. | 
 | 	SchedulingRules_TIME_STRICT SchedulingRules_AdmissionPolicy = 1 | 
 | 	// Customers can arrive at any time between the start and end time of the | 
 | 	// availability slot to use this booking. | 
 | 	// | 
 | 	// Examples of TIME_FLEXIBLE use cases: | 
 | 	//   * A museum ticket that can be used during any time on the purchase | 
 | 	//     date. | 
 | 	//   * An afternoon admission to an amusement park that can be used from | 
 | 	//     12pm to 9pm. | 
 | 	SchedulingRules_TIME_FLEXIBLE SchedulingRules_AdmissionPolicy = 2 | 
 | 	// Customers need to arrive at the merchant at the start time of the | 
 | 	// availability slot but can leave any time they want. | 
 | 	// | 
 | 	// For example, in the museum admission scenario, a timed entry ticket | 
 | 	// for 10am requires the user to be at the museum at 10am. The start time of | 
 | 	// availability slots for this service represents the designated entry | 
 | 	// time. The end time, however, is used solely as a key to identify the | 
 | 	// availability slot for booking. | 
 | 	SchedulingRules_TIMED_ENTRY_WITH_FLEXIBLE_DURATION SchedulingRules_AdmissionPolicy = 3 | 
 | ) | 
 |  | 
 | var SchedulingRules_AdmissionPolicy_name = map[int32]string{ | 
 | 	0: "ADMISSION_POLICY_UNSPECIFIED", | 
 | 	1: "TIME_STRICT", | 
 | 	2: "TIME_FLEXIBLE", | 
 | 	3: "TIMED_ENTRY_WITH_FLEXIBLE_DURATION", | 
 | } | 
 |  | 
 | var SchedulingRules_AdmissionPolicy_value = map[string]int32{ | 
 | 	"ADMISSION_POLICY_UNSPECIFIED":       0, | 
 | 	"TIME_STRICT":                        1, | 
 | 	"TIME_FLEXIBLE":                      2, | 
 | 	"TIMED_ENTRY_WITH_FLEXIBLE_DURATION": 3, | 
 | } | 
 |  | 
 | func (x SchedulingRules_AdmissionPolicy) String() string { | 
 | 	return proto.EnumName(SchedulingRules_AdmissionPolicy_name, int32(x)) | 
 | } | 
 |  | 
 | func (SchedulingRules_AdmissionPolicy) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{9, 0} | 
 | } | 
 |  | 
 | // Enum to indicate the type of field. | 
 | type ServiceIntakeFormField_FieldType int32 | 
 |  | 
 | const ( | 
 | 	// Fields of unspecified or unknown type will be ignored. | 
 | 	ServiceIntakeFormField_FIELD_TYPE_UNSPECIFIED ServiceIntakeFormField_FieldType = 0 | 
 | 	// A one-line input field for text. | 
 | 	ServiceIntakeFormField_SHORT_ANSWER ServiceIntakeFormField_FieldType = 1 | 
 | 	// A multi-line input field for text. | 
 | 	ServiceIntakeFormField_PARAGRAPH ServiceIntakeFormField_FieldType = 2 | 
 | 	// A set of radio buttons that requires one choice from many options. | 
 | 	ServiceIntakeFormField_MULTIPLE_CHOICE ServiceIntakeFormField_FieldType = 3 | 
 | 	// One or more enumerated items with checkboxes. | 
 | 	ServiceIntakeFormField_CHECKBOXES ServiceIntakeFormField_FieldType = 4 | 
 | 	// A selection from a dropdown. | 
 | 	ServiceIntakeFormField_DROPDOWN ServiceIntakeFormField_FieldType = 5 | 
 | 	// A yes/no button. | 
 | 	ServiceIntakeFormField_BOOLEAN ServiceIntakeFormField_FieldType = 6 | 
 | ) | 
 |  | 
 | var ServiceIntakeFormField_FieldType_name = map[int32]string{ | 
 | 	0: "FIELD_TYPE_UNSPECIFIED", | 
 | 	1: "SHORT_ANSWER", | 
 | 	2: "PARAGRAPH", | 
 | 	3: "MULTIPLE_CHOICE", | 
 | 	4: "CHECKBOXES", | 
 | 	5: "DROPDOWN", | 
 | 	6: "BOOLEAN", | 
 | } | 
 |  | 
 | var ServiceIntakeFormField_FieldType_value = map[string]int32{ | 
 | 	"FIELD_TYPE_UNSPECIFIED": 0, | 
 | 	"SHORT_ANSWER":           1, | 
 | 	"PARAGRAPH":              2, | 
 | 	"MULTIPLE_CHOICE":        3, | 
 | 	"CHECKBOXES":             4, | 
 | 	"DROPDOWN":               5, | 
 | 	"BOOLEAN":                6, | 
 | } | 
 |  | 
 | func (x ServiceIntakeFormField_FieldType) String() string { | 
 | 	return proto.EnumName(ServiceIntakeFormField_FieldType_name, int32(x)) | 
 | } | 
 |  | 
 | func (ServiceIntakeFormField_FieldType) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{11, 0} | 
 | } | 
 |  | 
 | // Enum to indicate the type of this media source. Only photos are supported. | 
 | // Please reach out to the Reserve with Google team if other media beyond | 
 | // photos need to be supported. | 
 | type RelatedMedia_MediaType int32 | 
 |  | 
 | const ( | 
 | 	// Unused. | 
 | 	RelatedMedia_TYPE_UNSPECIFIED RelatedMedia_MediaType = 0 | 
 | 	// Indicates the media provided by the url is a photo. | 
 | 	RelatedMedia_PHOTO RelatedMedia_MediaType = 1 | 
 | ) | 
 |  | 
 | var RelatedMedia_MediaType_name = map[int32]string{ | 
 | 	0: "TYPE_UNSPECIFIED", | 
 | 	1: "PHOTO", | 
 | } | 
 |  | 
 | var RelatedMedia_MediaType_value = map[string]int32{ | 
 | 	"TYPE_UNSPECIFIED": 0, | 
 | 	"PHOTO":            1, | 
 | } | 
 |  | 
 | func (x RelatedMedia_MediaType) String() string { | 
 | 	return proto.EnumName(RelatedMedia_MediaType_name, int32(x)) | 
 | } | 
 |  | 
 | func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{17, 0} | 
 | } | 
 |  | 
 | type FeedMetadata struct { | 
 | 	// Instructs us how to process the feed: either as a shard of a complete feed, | 
 | 	// or as a shard of an incremental update. | 
 | 	ProcessingInstruction FeedMetadata_ProcessingInstruction `protobuf:"varint,1,opt,name=processing_instruction,json=processingInstruction,proto3,enum=maps.booking.feeds.FeedMetadata_ProcessingInstruction" json:"processing_instruction,omitempty"` | 
 | 	// The current shard and total number of shards for this feed. | 
 | 	// | 
 | 	// Shard number is assumed to be zero-based. | 
 | 	// | 
 | 	// There does not need to be any relationship to the file name. | 
 | 	// | 
 | 	// Shards do not need to be transferred in order, and they may not be | 
 | 	// processed in order. | 
 | 	ShardNumber int32 `protobuf:"varint,2,opt,name=shard_number,json=shardNumber,proto3" json:"shard_number,omitempty"` | 
 | 	TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards,proto3" json:"total_shards,omitempty"` | 
 | 	// An identifier that must be consistent across all shards in a feed. | 
 | 	// This value must be globally unique across each feed type. | 
 | 	// | 
 | 	// This value ensures that complete feeds spanning multiple shards are | 
 | 	// processed together correctly. | 
 | 	// | 
 | 	// Clients only need to set this value when the processing_instruction is set | 
 | 	// to PROCESS_AS_COMPLETE and the feed spans multiple shards (defined by | 
 | 	// total_shards). | 
 | 	// | 
 | 	// Feeds that span multiple shards must set this nonce to the same value. | 
 | 	Nonce uint64 `protobuf:"varint,5,opt,name=nonce,proto3" json:"nonce,omitempty"` | 
 | 	// The timestamp at which this feed shard was generated. | 
 | 	// | 
 | 	// In Unix time format (seconds since the epoch). | 
 | 	GenerationTimestamp  int64    `protobuf:"varint,4,opt,name=generation_timestamp,json=generationTimestamp,proto3" json:"generation_timestamp,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *FeedMetadata) Reset()         { *m = FeedMetadata{} } | 
 | func (m *FeedMetadata) String() string { return proto.CompactTextString(m) } | 
 | func (*FeedMetadata) ProtoMessage()    {} | 
 | func (*FeedMetadata) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{0} | 
 | } | 
 |  | 
 | func (m *FeedMetadata) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_FeedMetadata.Unmarshal(m, b) | 
 | } | 
 | func (m *FeedMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_FeedMetadata.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *FeedMetadata) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_FeedMetadata.Merge(m, src) | 
 | } | 
 | func (m *FeedMetadata) XXX_Size() int { | 
 | 	return xxx_messageInfo_FeedMetadata.Size(m) | 
 | } | 
 | func (m *FeedMetadata) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_FeedMetadata.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_FeedMetadata proto.InternalMessageInfo | 
 |  | 
 | func (m *FeedMetadata) GetProcessingInstruction() FeedMetadata_ProcessingInstruction { | 
 | 	if m != nil { | 
 | 		return m.ProcessingInstruction | 
 | 	} | 
 | 	return FeedMetadata_PROCESS_UNKNOWN | 
 | } | 
 |  | 
 | func (m *FeedMetadata) GetShardNumber() int32 { | 
 | 	if m != nil { | 
 | 		return m.ShardNumber | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *FeedMetadata) GetTotalShards() int32 { | 
 | 	if m != nil { | 
 | 		return m.TotalShards | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *FeedMetadata) GetNonce() uint64 { | 
 | 	if m != nil { | 
 | 		return m.Nonce | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *FeedMetadata) GetGenerationTimestamp() int64 { | 
 | 	if m != nil { | 
 | 		return m.GenerationTimestamp | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | type AvailabilityFeed struct { | 
 | 	Metadata             *FeedMetadata          `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` | 
 | 	ServiceAvailability  []*ServiceAvailability `protobuf:"bytes,2,rep,name=service_availability,json=serviceAvailability,proto3" json:"service_availability,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}               `json:"-"` | 
 | 	XXX_unrecognized     []byte                 `json:"-"` | 
 | 	XXX_sizecache        int32                  `json:"-"` | 
 | } | 
 |  | 
 | func (m *AvailabilityFeed) Reset()         { *m = AvailabilityFeed{} } | 
 | func (m *AvailabilityFeed) String() string { return proto.CompactTextString(m) } | 
 | func (*AvailabilityFeed) ProtoMessage()    {} | 
 | func (*AvailabilityFeed) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{1} | 
 | } | 
 |  | 
 | func (m *AvailabilityFeed) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_AvailabilityFeed.Unmarshal(m, b) | 
 | } | 
 | func (m *AvailabilityFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_AvailabilityFeed.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *AvailabilityFeed) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_AvailabilityFeed.Merge(m, src) | 
 | } | 
 | func (m *AvailabilityFeed) XXX_Size() int { | 
 | 	return xxx_messageInfo_AvailabilityFeed.Size(m) | 
 | } | 
 | func (m *AvailabilityFeed) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_AvailabilityFeed.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_AvailabilityFeed proto.InternalMessageInfo | 
 |  | 
 | func (m *AvailabilityFeed) GetMetadata() *FeedMetadata { | 
 | 	if m != nil { | 
 | 		return m.Metadata | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *AvailabilityFeed) GetServiceAvailability() []*ServiceAvailability { | 
 | 	if m != nil { | 
 | 		return m.ServiceAvailability | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | type ServiceAvailability struct { | 
 | 	// If provided, we will consider the Availability entities provided to be a | 
 | 	// complete snapshot from [start_timestamp_restrict, end_timestamp_restrict). | 
 | 	// That is, all existing availability will be deleted if the following | 
 | 	// condition holds true: | 
 | 	// | 
 | 	//    start_timestamp_restrict <= Availability.start_sec && | 
 | 	//    Availability.start_sec < end_timestamp_restrict | 
 | 	// | 
 | 	// If a resource_restrict message is set, the condition is further restricted: | 
 | 	// | 
 | 	//    Availability.resource.staff_id == resource_restrict.staff_id && | 
 | 	//    Availability.resource.room_id == resource_restrict.room_id | 
 | 	// | 
 | 	// These fields are typically used to provide a complete update of | 
 | 	// availability in a given time range. | 
 | 	// | 
 | 	// Setting start_timestamp_restrict while leaving end_timestamp_restrict unset | 
 | 	// is interpreted to mean all time beginning at start_timestamp_restrict. | 
 | 	// | 
 | 	// Setting end_timestamp_restrict while leaving start_timestamp_restrict unset | 
 | 	// is interpreted to mean all time up to the end_timestamp_restrict. | 
 | 	// | 
 | 	// In Unix time format (seconds since the epoch). | 
 | 	StartTimestampRestrict int64 `protobuf:"varint,1,opt,name=start_timestamp_restrict,json=startTimestampRestrict,proto3" json:"start_timestamp_restrict,omitempty"` | 
 | 	EndTimestampRestrict   int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict,proto3" json:"end_timestamp_restrict,omitempty"` | 
 | 	// If provided, the timestamp restricts will be applied only to the given | 
 | 	// merchant or service. | 
 | 	// | 
 | 	// These fields are typically used to provide complete snapshot of | 
 | 	// availability in a given range (defined above) for a specific merchant or | 
 | 	// service. | 
 | 	// | 
 | 	// Leaving these fields unset, or setting these to the empty string or null, | 
 | 	// is interpreted to mean that no restrict is intended. | 
 | 	MerchantIdRestrict string `protobuf:"bytes,3,opt,name=merchant_id_restrict,json=merchantIdRestrict,proto3" json:"merchant_id_restrict,omitempty"` | 
 | 	ServiceIdRestrict  string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict,proto3" json:"service_id_restrict,omitempty"` | 
 | 	// Setting resources_restrict further restricts the scope of the update to | 
 | 	// just this set of resources. All id fields of the resources must match | 
 | 	// exactly. | 
 | 	ResourcesRestrict    *Resources      `protobuf:"bytes,6,opt,name=resources_restrict,json=resourcesRestrict,proto3" json:"resources_restrict,omitempty"` | 
 | 	Availability         []*Availability `protobuf:"bytes,5,rep,name=availability,proto3" json:"availability,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}        `json:"-"` | 
 | 	XXX_unrecognized     []byte          `json:"-"` | 
 | 	XXX_sizecache        int32           `json:"-"` | 
 | } | 
 |  | 
 | func (m *ServiceAvailability) Reset()         { *m = ServiceAvailability{} } | 
 | func (m *ServiceAvailability) String() string { return proto.CompactTextString(m) } | 
 | func (*ServiceAvailability) ProtoMessage()    {} | 
 | func (*ServiceAvailability) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{2} | 
 | } | 
 |  | 
 | func (m *ServiceAvailability) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_ServiceAvailability.Unmarshal(m, b) | 
 | } | 
 | func (m *ServiceAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_ServiceAvailability.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *ServiceAvailability) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_ServiceAvailability.Merge(m, src) | 
 | } | 
 | func (m *ServiceAvailability) XXX_Size() int { | 
 | 	return xxx_messageInfo_ServiceAvailability.Size(m) | 
 | } | 
 | func (m *ServiceAvailability) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_ServiceAvailability.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_ServiceAvailability proto.InternalMessageInfo | 
 |  | 
 | func (m *ServiceAvailability) GetStartTimestampRestrict() int64 { | 
 | 	if m != nil { | 
 | 		return m.StartTimestampRestrict | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *ServiceAvailability) GetEndTimestampRestrict() int64 { | 
 | 	if m != nil { | 
 | 		return m.EndTimestampRestrict | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *ServiceAvailability) GetMerchantIdRestrict() string { | 
 | 	if m != nil { | 
 | 		return m.MerchantIdRestrict | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *ServiceAvailability) GetServiceIdRestrict() string { | 
 | 	if m != nil { | 
 | 		return m.ServiceIdRestrict | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *ServiceAvailability) GetResourcesRestrict() *Resources { | 
 | 	if m != nil { | 
 | 		return m.ResourcesRestrict | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *ServiceAvailability) GetAvailability() []*Availability { | 
 | 	if m != nil { | 
 | 		return m.Availability | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // An availability of the merchant's service, indicating time and number | 
 | // of spots. | 
 | // The availability feed should be a list of this message. | 
 | // Please note that it's up to the partner to call out all the possible | 
 | // availabilities. | 
 | // If a massage therapist is available 9am-12pm, and they provide | 
 | // one-hour massage sessions, the aggregator should provide the feed as | 
 | //   availability {start_sec: 9am, duration: 60 minutes, ...} | 
 | //   availability {start_sec: 10am, duration: 60 minutes, ...} | 
 | //   availability {start_sec: 11am, duration: 60 minutes, ...} | 
 | // instead of | 
 | //   availability {start_sec: 9am, duration: 180 minutes, ...} | 
 | // | 
 | type Availability struct { | 
 | 	// An opaque string from an aggregator to identify a merchant. (required) | 
 | 	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"` | 
 | 	// An opaque string from aggregator to identify a service of the | 
 | 	// merchant. (required) | 
 | 	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` | 
 | 	// Start time of this availability, using epoch time in seconds in UTC. | 
 | 	//(required) | 
 | 	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"` | 
 | 	// Duration of the service in seconds, e.g. 30 minutes for a chair massage. | 
 | 	// (required) | 
 | 	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` | 
 | 	// Number of total spots and open spots of this availability. | 
 | 	// E.g. a Yoga class of 10 spots with 3 booked. | 
 | 	//   availability {spots_total: 10, spots_open: 7 ...} | 
 | 	// E.g. a chair massage session which was already booked. | 
 | 	//   availability {spots_total: 1, spots_open: 0 ...} | 
 | 	// | 
 | 	// Note: If sending requests using the availability compression format defined | 
 | 	//       below, these two fields will be inferred. A Recurrence | 
 | 	//       implies spots_total=1 and spots_open=1. A ScheduleException implies | 
 | 	//       spots_total=1 and spots_open=0. | 
 | 	// (both required if recurrence not set) | 
 | 	SpotsTotal int64 `protobuf:"varint,5,opt,name=spots_total,json=spotsTotal,proto3" json:"spots_total,omitempty"` | 
 | 	SpotsOpen  int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"` | 
 | 	// An optional opaque string to identify this availability slot. If set, it | 
 | 	// will be included in the requests that book/update/cancel appointments. | 
 | 	// (optional) | 
 | 	AvailabilityTag string `protobuf:"bytes,7,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"` | 
 | 	// Optional resources used to disambiguate this availability slot from | 
 | 	// others when different staff, room, or party_size values are part | 
 | 	// of the service. | 
 | 	// | 
 | 	// E.g. the same Yoga class with two 2 instructors. | 
 | 	//  availability { resources { staff_id: "1" staff_name: "Amy" } | 
 | 	//                 spots_total: 10 spots_open: 7 } | 
 | 	//  availability { resources { staff_id: "2" staff_name: "John" } | 
 | 	//                 spots_total: 5 spots_open: 2 } | 
 | 	// (optional) | 
 | 	Resources *Resources `protobuf:"bytes,8,opt,name=resources,proto3" json:"resources,omitempty"` | 
 | 	// A list of IDs referencing the payment options which can be used to pay | 
 | 	// for this slot. The actual payment options are defined at the Merchant | 
 | 	// level, and can also be shared among multiple Merchants. | 
 | 	// | 
 | 	// This field overrides any payment_option_ids specified in the service | 
 | 	// message. Similarly payment_option_ids specified here do NOT have to be | 
 | 	// present in the service message, though must be defined at the | 
 | 	// Merchant level. | 
 | 	// Our current implementation limits the number of entries in this array to | 
 | 	// one element. Multiple payment_option_id are still allowed at the Service | 
 | 	// level, but an override at the availability slot level, is limited to a | 
 | 	// single payment_option_id. (optional) | 
 | 	PaymentOptionId []string `protobuf:"bytes,9,rep,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"` | 
 | 	// The recurrence information for the availability, representing more than one | 
 | 	// start time. A recurrence should contain appointments for one working day. | 
 | 	// (optional) | 
 | 	Recurrence *Availability_Recurrence `protobuf:"bytes,10,opt,name=recurrence,proto3" json:"recurrence,omitempty"` | 
 | 	// Times when this service cannot be scheduled. To limit the number of | 
 | 	// schedule_exception messages, consider joining adjacent exceptions. | 
 | 	// (optional) | 
 | 	ScheduleException []*Availability_ScheduleException `protobuf:"bytes,11,rep,name=schedule_exception,json=scheduleException,proto3" json:"schedule_exception,omitempty"` | 
 | 	// Defines how a deposit may be charged to the user. Overrides the service | 
 | 	// deposit if one was specified. Setting this to an empty Deposit message | 
 | 	// removes any service-level deposit. (optional) | 
 | 	Deposit *Deposit `protobuf:"bytes,12,opt,name=deposit,proto3" json:"deposit,omitempty"` | 
 | 	// Defines a no show fee that may be charged to the user. Overrides the | 
 | 	// service no show fee if one was specified. Setting this to an empty | 
 | 	// NoShowFee message removes any service-level no show fee. (optional) | 
 | 	NoShowFee *NoShowFee `protobuf:"bytes,13,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"` | 
 | 	// Indicates whether the user must provide a credit card in order to book this | 
 | 	// availability slot. | 
 | 	// If the value is not set, it is inherited from the service level if it's set | 
 | 	// there. (optional) | 
 | 	RequireCreditCard RequireCreditCard `protobuf:"varint,14,opt,name=require_credit_card,json=requireCreditCard,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"` | 
 | 	// Indicates a list of supported ticket types for this availability slot. If | 
 | 	// unset, all ticket types in the parent service are available for this slot. | 
 | 	// Note that the values of this field must be defined in the parent service. | 
 | 	// Examples: | 
 | 	// | 
 | 	// * Service with four ticket types: | 
 | 	// TicketType {ticket_type_id: "adult_1" short_description: "Adult weekdays"} | 
 | 	// TicketType {ticket_type_id: "adult_2" short_description: "Adult weekends"} | 
 | 	// TicketType {ticket_type_id: "youth_1" short_description: "Youth weekdays"} | 
 | 	// TicketType {ticket_type_id: "youth_2" short_description: "Youth weekends"} | 
 | 	// | 
 | 	// To represent the inventory during the weekdays: | 
 | 	//   `availability {ticket_type_id: "adult_1" ticket_type_id: "youth_1"...}`. | 
 | 	// To represent the inventory during the holidays: | 
 | 	//   `availability {ticket_type_id: "adult_2" ticket_type_id: "youth_2"...}`. | 
 | 	// | 
 | 	// * Service with three ticket types: | 
 | 	// TicketType {ticket_type_id: "adult" short_description: "Adult"} | 
 | 	// TicketType {ticket_type_id: "youth" short_description: "Youth"} | 
 | 	// TicketType {ticket_type_id: "senior" short_description: "Senior"} | 
 | 	// | 
 | 	// To indicate that all three ticket types are available for this time | 
 | 	// slot, use either | 
 | 	//   `availability {ticket_type_id: "adult" ticket_type_id: "youth" | 
 | 	//   ticket_type_id: "senior" ...}` | 
 | 	// or | 
 | 	//   `availability {...}' (do not set ticket_type_id in this slot). | 
 | 	// | 
 | 	//  (optional) | 
 | 	TicketTypeId []string `protobuf:"bytes,15,rep,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"` | 
 | 	// Availability scheduling rules. If fields are populated, they will override | 
 | 	// any corresponding scheduling rules on the service-level SchedulingRules. | 
 | 	SchedulingRuleOverrides *Availability_SchedulingRuleOverrides `protobuf:"bytes,16,opt,name=scheduling_rule_overrides,json=schedulingRuleOverrides,proto3" json:"scheduling_rule_overrides,omitempty"` | 
 | 	// The confirmation mode that will be used when booking this availability. | 
 | 	// Attempts to create bookings for availabilities with a confirmation mode | 
 | 	// of CONFIRMATION_MODE_SYNCHRONOUS must be immediatlely confirmed or denied. | 
 | 	// Attempts to create bookings for availabilities with confirmation mode | 
 | 	// of CONFIRMATION_MODE_ASYNCHRONOUS must be either immediately denied | 
 | 	// or created with status PENDING. | 
 | 	ConfirmationMode     Availability_ConfirmationMode `protobuf:"varint,17,opt,name=confirmation_mode,json=confirmationMode,proto3,enum=maps.booking.feeds.Availability_ConfirmationMode" json:"confirmation_mode,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}                      `json:"-"` | 
 | 	XXX_unrecognized     []byte                        `json:"-"` | 
 | 	XXX_sizecache        int32                         `json:"-"` | 
 | } | 
 |  | 
 | func (m *Availability) Reset()         { *m = Availability{} } | 
 | func (m *Availability) String() string { return proto.CompactTextString(m) } | 
 | func (*Availability) ProtoMessage()    {} | 
 | func (*Availability) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{3} | 
 | } | 
 |  | 
 | func (m *Availability) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_Availability.Unmarshal(m, b) | 
 | } | 
 | func (m *Availability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_Availability.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *Availability) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Availability.Merge(m, src) | 
 | } | 
 | func (m *Availability) XXX_Size() int { | 
 | 	return xxx_messageInfo_Availability.Size(m) | 
 | } | 
 | func (m *Availability) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_Availability.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_Availability proto.InternalMessageInfo | 
 |  | 
 | func (m *Availability) GetMerchantId() string { | 
 | 	if m != nil { | 
 | 		return m.MerchantId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Availability) GetServiceId() string { | 
 | 	if m != nil { | 
 | 		return m.ServiceId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Availability) GetStartSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.StartSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Availability) GetDurationSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.DurationSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Availability) GetSpotsTotal() int64 { | 
 | 	if m != nil { | 
 | 		return m.SpotsTotal | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Availability) GetSpotsOpen() int64 { | 
 | 	if m != nil { | 
 | 		return m.SpotsOpen | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Availability) GetAvailabilityTag() string { | 
 | 	if m != nil { | 
 | 		return m.AvailabilityTag | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Availability) GetResources() *Resources { | 
 | 	if m != nil { | 
 | 		return m.Resources | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetPaymentOptionId() []string { | 
 | 	if m != nil { | 
 | 		return m.PaymentOptionId | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetRecurrence() *Availability_Recurrence { | 
 | 	if m != nil { | 
 | 		return m.Recurrence | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetScheduleException() []*Availability_ScheduleException { | 
 | 	if m != nil { | 
 | 		return m.ScheduleException | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetDeposit() *Deposit { | 
 | 	if m != nil { | 
 | 		return m.Deposit | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetNoShowFee() *NoShowFee { | 
 | 	if m != nil { | 
 | 		return m.NoShowFee | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetRequireCreditCard() RequireCreditCard { | 
 | 	if m != nil { | 
 | 		return m.RequireCreditCard | 
 | 	} | 
 | 	return RequireCreditCard_REQUIRE_CREDIT_CARD_UNSPECIFIED | 
 | } | 
 |  | 
 | func (m *Availability) GetTicketTypeId() []string { | 
 | 	if m != nil { | 
 | 		return m.TicketTypeId | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetSchedulingRuleOverrides() *Availability_SchedulingRuleOverrides { | 
 | 	if m != nil { | 
 | 		return m.SchedulingRuleOverrides | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Availability) GetConfirmationMode() Availability_ConfirmationMode { | 
 | 	if m != nil { | 
 | 		return m.ConfirmationMode | 
 | 	} | 
 | 	return Availability_CONFIRMATION_MODE_UNSPECIFIED | 
 | } | 
 |  | 
 | // Recurrence messages are optional, but allow for a more compact | 
 | // representation of consistently repeating availability slots. They typically | 
 | // represent a day's working schedule. | 
 | // ScheduleException messages are then used to represent booked/unavailable | 
 | // time ranges within the work day. | 
 | // | 
 | // Requirements: | 
 | //   1. The expansion of availability slots or recurrences must NOT create | 
 | //      identical slots. If the ids, start_sec, duration_sec, and resources | 
 | //      match, slots are considered identical. | 
 | //   2. Do NOT mix the standard availability format and recurrence within the | 
 | //      slots of a single service. Recurrence benefits merchants/services that | 
 | //      offer appointments. The standard format is geared towards | 
 | //      merchants/services with regularly scheduled classes. | 
 | //   3. Recurrences should not last for more than 24 hours. | 
 | type Availability_Recurrence struct { | 
 | 	// The inclusive maximum UTC timestamp the availability repeats until. | 
 | 	// (required) | 
 | 	RepeatUntilSec int64 `protobuf:"varint,1,opt,name=repeat_until_sec,json=repeatUntilSec,proto3" json:"repeat_until_sec,omitempty"` | 
 | 	// Defines the time between successive availability slots. | 
 | 	// | 
 | 	// Example: An availability with a duration of 20 min, a repeat_every_sec of | 
 | 	// 30 min, a start_sec of 9:00am, and a repeat_until_sec of 11:00am will | 
 | 	// yield slots at 9-9:20am, 9:30-9:50am, 10-10:20am, 10:30-10:50am, | 
 | 	// 11-11:20am. (required) | 
 | 	RepeatEverySec       int32    `protobuf:"varint,2,opt,name=repeat_every_sec,json=repeatEverySec,proto3" json:"repeat_every_sec,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *Availability_Recurrence) Reset()         { *m = Availability_Recurrence{} } | 
 | func (m *Availability_Recurrence) String() string { return proto.CompactTextString(m) } | 
 | func (*Availability_Recurrence) ProtoMessage()    {} | 
 | func (*Availability_Recurrence) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 0} | 
 | } | 
 |  | 
 | func (m *Availability_Recurrence) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_Availability_Recurrence.Unmarshal(m, b) | 
 | } | 
 | func (m *Availability_Recurrence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_Availability_Recurrence.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *Availability_Recurrence) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Availability_Recurrence.Merge(m, src) | 
 | } | 
 | func (m *Availability_Recurrence) XXX_Size() int { | 
 | 	return xxx_messageInfo_Availability_Recurrence.Size(m) | 
 | } | 
 | func (m *Availability_Recurrence) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_Availability_Recurrence.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_Availability_Recurrence proto.InternalMessageInfo | 
 |  | 
 | func (m *Availability_Recurrence) GetRepeatUntilSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.RepeatUntilSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Availability_Recurrence) GetRepeatEverySec() int32 { | 
 | 	if m != nil { | 
 | 		return m.RepeatEverySec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | // ScheduleException messages represent booked/unavailable time ranges within | 
 | // the workday, which are exceptions to the recurrence described above. As | 
 | // time slots are booked, the list of exceptions should be updated to reflect | 
 | // the newly unavailable time ranges. The recurrence itself shouldn't be | 
 | // modified. | 
 | type Availability_ScheduleException struct { | 
 | 	// The time range of the exception. Any slots described by the recurrence | 
 | 	// which overlap this closed-open time range will be considered unavailable. | 
 | 	// | 
 | 	// Example: If the recurrence specifies a duration of 20 min, a | 
 | 	// repeat_every_sec of 30 min, a start_time of 9:00am, and a | 
 | 	// repeat_until_sec of 11:00am, then a ScheduleException with a time_range | 
 | 	// of 9:45am-11:00am would make unavailable the slots at 9:30-9:50am, | 
 | 	// 10-10:20am, and 10:30-10:50am. | 
 | 	// | 
 | 	// Note that because the time range is closed-open, the slot beginning at | 
 | 	// 11am slot would not be impacted. | 
 | 	TimeRange            *TimeRange `protobuf:"bytes,1,opt,name=time_range,json=timeRange,proto3" json:"time_range,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}   `json:"-"` | 
 | 	XXX_unrecognized     []byte     `json:"-"` | 
 | 	XXX_sizecache        int32      `json:"-"` | 
 | } | 
 |  | 
 | func (m *Availability_ScheduleException) Reset()         { *m = Availability_ScheduleException{} } | 
 | func (m *Availability_ScheduleException) String() string { return proto.CompactTextString(m) } | 
 | func (*Availability_ScheduleException) ProtoMessage()    {} | 
 | func (*Availability_ScheduleException) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 1} | 
 | } | 
 |  | 
 | func (m *Availability_ScheduleException) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_Availability_ScheduleException.Unmarshal(m, b) | 
 | } | 
 | func (m *Availability_ScheduleException) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_Availability_ScheduleException.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *Availability_ScheduleException) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Availability_ScheduleException.Merge(m, src) | 
 | } | 
 | func (m *Availability_ScheduleException) XXX_Size() int { | 
 | 	return xxx_messageInfo_Availability_ScheduleException.Size(m) | 
 | } | 
 | func (m *Availability_ScheduleException) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_Availability_ScheduleException.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_Availability_ScheduleException proto.InternalMessageInfo | 
 |  | 
 | func (m *Availability_ScheduleException) GetTimeRange() *TimeRange { | 
 | 	if m != nil { | 
 | 		return m.TimeRange | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // Availability level scheduling rules. | 
 | type Availability_SchedulingRuleOverrides struct { | 
 | 	// The last time (in seconds) that this slot is able to be booked. This | 
 | 	// timestamp must be before the start_sec of the slot to be respected | 
 | 	// (if users should be able to book after the start time, use service level | 
 | 	// SchedulingRules.min_booking_before_end_time). If present, will override | 
 | 	// anything specified in the min_booking_buffer of the corresponding | 
 | 	// Service's SchedulingRules. | 
 | 	LastBookableSec int64 `protobuf:"varint,1,opt,name=last_bookable_sec,json=lastBookableSec,proto3" json:"last_bookable_sec,omitempty"` | 
 | 	// The first time (in seconds) that this slot is able to be booked. | 
 | 	FirstBookableSec     int64    `protobuf:"varint,2,opt,name=first_bookable_sec,json=firstBookableSec,proto3" json:"first_bookable_sec,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *Availability_SchedulingRuleOverrides) Reset()         { *m = Availability_SchedulingRuleOverrides{} } | 
 | func (m *Availability_SchedulingRuleOverrides) String() string { return proto.CompactTextString(m) } | 
 | func (*Availability_SchedulingRuleOverrides) ProtoMessage()    {} | 
 | func (*Availability_SchedulingRuleOverrides) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 2} | 
 | } | 
 |  | 
 | func (m *Availability_SchedulingRuleOverrides) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_Availability_SchedulingRuleOverrides.Unmarshal(m, b) | 
 | } | 
 | func (m *Availability_SchedulingRuleOverrides) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_Availability_SchedulingRuleOverrides.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *Availability_SchedulingRuleOverrides) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Availability_SchedulingRuleOverrides.Merge(m, src) | 
 | } | 
 | func (m *Availability_SchedulingRuleOverrides) XXX_Size() int { | 
 | 	return xxx_messageInfo_Availability_SchedulingRuleOverrides.Size(m) | 
 | } | 
 | func (m *Availability_SchedulingRuleOverrides) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_Availability_SchedulingRuleOverrides.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_Availability_SchedulingRuleOverrides proto.InternalMessageInfo | 
 |  | 
 | func (m *Availability_SchedulingRuleOverrides) GetLastBookableSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.LastBookableSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Availability_SchedulingRuleOverrides) GetFirstBookableSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.FirstBookableSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | // A resource is used to disambiguate availability slots from one another when | 
 | // different staff, room or party_size values are part of the service. | 
 | // Multiple slots for the same service and time interval can co-exist when they | 
 | // have different resources. | 
 | type Resources struct { | 
 | 	// Optional id for a staff member providing the service. This field identifies | 
 | 	// the staff member across all merchants, services, and availability records. | 
 | 	// It also needs to be stable over time to allow correlation with past | 
 | 	// bookings. | 
 | 	// This field must be present if staff_name is present. | 
 | 	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"` | 
 | 	// Optional name of a staff member providing the service. This field will be | 
 | 	// displayed to users making a booking, and should be human readable, as | 
 | 	// opposed to an opaque identifier. | 
 | 	// This field must be present if staff_id is present. | 
 | 	StaffName string `protobuf:"bytes,2,opt,name=staff_name,json=staffName,proto3" json:"staff_name,omitempty"` | 
 | 	// An optional id for the room the service is located in. This field | 
 | 	// identifies the room across all merchants, services, and availability | 
 | 	// records. It also needs to be stable over time to allow correlation with | 
 | 	// past bookings. | 
 | 	// This field must be present if room_name is present. | 
 | 	RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` | 
 | 	// An optional name for the room the service is located in. This | 
 | 	// field will be displayed to users making a booking, and should be human | 
 | 	// readable, as opposed to an opaque identifier. | 
 | 	// This field must be present if room_id is present. | 
 | 	RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` | 
 | 	// Applicable only for Dining: The party size which can be accommodated | 
 | 	// during this time slot. A restaurant can be associated with multiple Slots | 
 | 	// for the same time, each specifying a different party_size, if for instance | 
 | 	// 2, 3, or 4 people can be seated with a reservation. | 
 | 	PartySize            int32    `protobuf:"varint,5,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *Resources) Reset()         { *m = Resources{} } | 
 | func (m *Resources) String() string { return proto.CompactTextString(m) } | 
 | func (*Resources) ProtoMessage()    {} | 
 | func (*Resources) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{4} | 
 | } | 
 |  | 
 | func (m *Resources) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_Resources.Unmarshal(m, b) | 
 | } | 
 | func (m *Resources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_Resources.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *Resources) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Resources.Merge(m, src) | 
 | } | 
 | func (m *Resources) XXX_Size() int { | 
 | 	return xxx_messageInfo_Resources.Size(m) | 
 | } | 
 | func (m *Resources) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_Resources.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_Resources proto.InternalMessageInfo | 
 |  | 
 | func (m *Resources) GetStaffId() string { | 
 | 	if m != nil { | 
 | 		return m.StaffId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Resources) GetStaffName() string { | 
 | 	if m != nil { | 
 | 		return m.StaffName | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Resources) GetRoomId() string { | 
 | 	if m != nil { | 
 | 		return m.RoomId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Resources) GetRoomName() string { | 
 | 	if m != nil { | 
 | 		return m.RoomName | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Resources) GetPartySize() int32 { | 
 | 	if m != nil { | 
 | 		return m.PartySize | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | type TimeRange struct { | 
 | 	BeginSec             int64    `protobuf:"varint,1,opt,name=begin_sec,json=beginSec,proto3" json:"begin_sec,omitempty"` | 
 | 	EndSec               int64    `protobuf:"varint,2,opt,name=end_sec,json=endSec,proto3" json:"end_sec,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *TimeRange) Reset()         { *m = TimeRange{} } | 
 | func (m *TimeRange) String() string { return proto.CompactTextString(m) } | 
 | func (*TimeRange) ProtoMessage()    {} | 
 | func (*TimeRange) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{5} | 
 | } | 
 |  | 
 | func (m *TimeRange) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_TimeRange.Unmarshal(m, b) | 
 | } | 
 | func (m *TimeRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_TimeRange.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *TimeRange) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_TimeRange.Merge(m, src) | 
 | } | 
 | func (m *TimeRange) XXX_Size() int { | 
 | 	return xxx_messageInfo_TimeRange.Size(m) | 
 | } | 
 | func (m *TimeRange) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_TimeRange.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_TimeRange proto.InternalMessageInfo | 
 |  | 
 | func (m *TimeRange) GetBeginSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.BeginSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *TimeRange) GetEndSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.EndSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | type ServiceFeed struct { | 
 | 	Metadata             *FeedMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` | 
 | 	Service              []*Service    `protobuf:"bytes,2,rep,name=service,proto3" json:"service,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}      `json:"-"` | 
 | 	XXX_unrecognized     []byte        `json:"-"` | 
 | 	XXX_sizecache        int32         `json:"-"` | 
 | } | 
 |  | 
 | func (m *ServiceFeed) Reset()         { *m = ServiceFeed{} } | 
 | func (m *ServiceFeed) String() string { return proto.CompactTextString(m) } | 
 | func (*ServiceFeed) ProtoMessage()    {} | 
 | func (*ServiceFeed) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{6} | 
 | } | 
 |  | 
 | func (m *ServiceFeed) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_ServiceFeed.Unmarshal(m, b) | 
 | } | 
 | func (m *ServiceFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_ServiceFeed.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *ServiceFeed) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_ServiceFeed.Merge(m, src) | 
 | } | 
 | func (m *ServiceFeed) XXX_Size() int { | 
 | 	return xxx_messageInfo_ServiceFeed.Size(m) | 
 | } | 
 | func (m *ServiceFeed) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_ServiceFeed.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_ServiceFeed proto.InternalMessageInfo | 
 |  | 
 | func (m *ServiceFeed) GetMetadata() *FeedMetadata { | 
 | 	if m != nil { | 
 | 		return m.Metadata | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *ServiceFeed) GetService() []*Service { | 
 | 	if m != nil { | 
 | 		return m.Service | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // The definition of a service provided by a merchant. | 
 | type Service struct { | 
 | 	// An opaque string from an aggregator partner which uniquely identifies a | 
 | 	// merchant. (required) | 
 | 	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"` | 
 | 	// An opaque string from an aggregator partner which uniquely identifies the | 
 | 	// service. (required) | 
 | 	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` | 
 | 	// The name of the service, suitable for display to users, e.g. "Men's | 
 | 	// haircut". (required) | 
 | 	Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` | 
 | 	// The description of the service, suitable for display to users. | 
 | 	// | 
 | 	// This field now supports both plain text and HTML-like formatting rules to | 
 | 	// display structural contents to end-users. Unlike plain text sections, | 
 | 	// customized layouts can be created here using headings, paragraphs, lists | 
 | 	// and some phrase tags. Please read the following instructions and notes | 
 | 	// carefully to create better user-experience. | 
 | 	// | 
 | 	// Supported HTML-like formatting tags: | 
 | 	// | 
 | 	// Heading tags: <h1>, <h2>, <h3>, <h4>, <h5>, <h6> | 
 | 	//   Heading tags can be used to display titles and sub-titles. For example, | 
 | 	//   <h1>Itinerary</h1> will display the inline text as the most important | 
 | 	//   heading of the section. Note that any inner HTML tags, styles or | 
 | 	//   attributes will be ignored. For example, <h1 style=".."> will be treated | 
 | 	//   the same as <h1>. Only pure text wil be preserved. | 
 | 	// | 
 | 	// Paragraph tag: <p>: | 
 | 	//   Paragraph tag can be used to wrap detailed introduction or contents. Any | 
 | 	//   inner tags, styles or attributes will be ignored with a few exceptions: | 
 | 	//   <br>, <strong> and <em>. Please see the phrase tag section below for more | 
 | 	//   details. | 
 | 	// | 
 | 	// List tags: <ul>, <ol>, <li> | 
 | 	//   <ul> tag can be used with <li> tag to display unordered lists, and <ol> | 
 | 	//   tag can be used with <li> to display ordered lists. This is a good tool | 
 | 	//   to display checklists, highlights or any other lists that fit your | 
 | 	//   use-cases. | 
 | 	// Example: To show a list of features of a cruise trip: | 
 | 	//  <ol> | 
 | 	//    <li>Wonderful ocean view and chances to play with wildlife.</li> | 
 | 	//    <li>Carefully designed travel arrangements and services.</li> | 
 | 	//    <li>Gauranteed lowest price.</li> | 
 | 	// </ol> | 
 | 	// Note that only <li> children under <ul> or <ol> tags will be converted. All | 
 | 	// other children will be dropped. Also any inner tags, attributes and styles | 
 | 	// will be ignored, only pure text contents are preserved. | 
 | 	// | 
 | 	// Division tag: <div> | 
 | 	//   All supported inner tags of the <div> tag will be parsed with the rules | 
 | 	//   stated above. But <div> tag itself does not mean any grouping or | 
 | 	//   indenting here. Also any inner attributes and styles will be ignored. | 
 | 	// | 
 | 	// Phrase tags: <br>, <strong>, <em>: | 
 | 	//   Only the three tags mentioned above are supported. <br> can be used to | 
 | 	//   break lines in paragraphs, and <strong>/<em> can be used to highlight | 
 | 	//   important text. Any other phrase tags will be ignored. | 
 | 	// | 
 | 	// Unsupported tags: | 
 | 	//   * <html>, <header> and <body> tags are not allowed. | 
 | 	//   * Any URLs, anchors, links will be striped, and will never be displayed | 
 | 	//   to end-users. If you want to use photos to create a rich user experience, | 
 | 	//   please use the "related_media" field below to send your photo urls | 
 | 	//   * Any other tags not mentioned above are not supported (for example | 
 | 	//   <table>, <td> ...). | 
 | 	// | 
 | 	// Important notes: | 
 | 	//   * Try not to use other tags except for the supported ones mentioned | 
 | 	//   above, because contents within unsupported tags will be excluded from UI | 
 | 	//   rendering and may lead to undesired user experience. | 
 | 	//   * Try avoid deep nested structures like more than 3 different heading | 
 | 	//   levels or nested lists. Keeping the structure flat, simple and | 
 | 	//   straightforward helps to create a better user experience. | 
 | 	//   * If the currently supported layouts are not enough for your use cases, | 
 | 	//   please contact Google with your requests and we will find the best | 
 | 	//   approach for you. | 
 | 	// | 
 | 	// (required) | 
 | 	Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` | 
 | 	// The price of the service. (optional, overridden when payment options or | 
 | 	// ticket types present) | 
 | 	Price *Price `protobuf:"bytes,5,opt,name=price,proto3" json:"price,omitempty"` | 
 | 	// Rules to book/cancel an appointment. (optional) | 
 | 	Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules,proto3" json:"rules,omitempty"` | 
 | 	// Intake forms to customize the service. (optional) | 
 | 	// | 
 | 	// Deprecated. Please see intake_form and per_ticket_intake_form. | 
 | 	Form []*ServiceIntakeForm `protobuf:"bytes,7,rep,name=form,proto3" json:"form,omitempty"` // Deprecated: Do not use. | 
 | 	// A form requesting additional information from the user when they book this | 
 | 	// service. (optional) | 
 | 	IntakeForm *ServiceIntakeForm `protobuf:"bytes,20,opt,name=intake_form,json=intakeForm,proto3" json:"intake_form,omitempty"` | 
 | 	// A form requesting additional information from the user when they book this | 
 | 	// service. This form must be filled out once for each ticket the user is | 
 | 	// booking. (optional) | 
 | 	PerTicketIntakeForm *ServiceIntakeForm `protobuf:"bytes,21,opt,name=per_ticket_intake_form,json=perTicketIntakeForm,proto3" json:"per_ticket_intake_form,omitempty"` | 
 | 	// Whether a prepayment is required, optional or not supported. (optional) | 
 | 	PrepaymentType Service_PrepaymentType `protobuf:"varint,8,opt,name=prepayment_type,json=prepaymentType,proto3,enum=maps.booking.feeds.Service_PrepaymentType" json:"prepayment_type,omitempty"` | 
 | 	// The service's tax rate. If present this field overrides any tax_rate set at | 
 | 	// the merchant level. An empty message (i.e. tax_rate { }) will reset the | 
 | 	// applied tax rate to zero. (optional) | 
 | 	TaxRate *TaxRate `protobuf:"bytes,9,opt,name=tax_rate,json=taxRate,proto3" json:"tax_rate,omitempty"` | 
 | 	// A list of ids referencing the payment options which can be used to pay | 
 | 	// for this service. The actual payment options are defined at the Merchant | 
 | 	// level, and can also be shared among multiple Merchants. (optional) | 
 | 	PaymentOptionId []string `protobuf:"bytes,10,rep,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"` | 
 | 	// Defines how a deposit may be charged to the user. Can be overridden at the | 
 | 	// availability level. (optional) | 
 | 	Deposit *Deposit `protobuf:"bytes,11,opt,name=deposit,proto3" json:"deposit,omitempty"` | 
 | 	// Defines a no show fee that may be charged to the user. Can be overridden | 
 | 	// at the availability level. (optional) | 
 | 	NoShowFee *NoShowFee `protobuf:"bytes,12,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"` | 
 | 	// Indicates whether the user must provide a credit card in order to book this | 
 | 	// service. | 
 | 	// This value can be overridden at the availability level. (optional) | 
 | 	RequireCreditCard RequireCreditCard `protobuf:"varint,13,opt,name=require_credit_card,json=requireCreditCard,proto3,enum=maps.booking.feeds.RequireCreditCard" json:"require_credit_card,omitempty"` | 
 | 	// An action link related to this service. | 
 | 	ActionLink []*ActionLink `protobuf:"bytes,14,rep,name=action_link,json=actionLink,proto3" json:"action_link,omitempty"` | 
 | 	// The predefined type of this service. Currently, only used with action_link. | 
 | 	Type Service_ServiceType `protobuf:"varint,15,opt,name=type,proto3,enum=maps.booking.feeds.Service_ServiceType" json:"type,omitempty"` | 
 | 	// Types of tickets that can be booked/purchased for this service, if tickets | 
 | 	// are supported. (optional) | 
 | 	TicketType []*TicketType `protobuf:"bytes,16,rep,name=ticket_type,json=ticketType,proto3" json:"ticket_type,omitempty"` | 
 | 	// Photos related to this service. Google will crawl these media to | 
 | 	// ensure that they are displayed to end-users in the most efficient way. | 
 | 	// (optional) | 
 | 	RelatedMedia []*RelatedMedia `protobuf:"bytes,17,rep,name=related_media,json=relatedMedia,proto3" json:"related_media,omitempty"` | 
 | 	// Service attribute values that apply to this service (optional). | 
 | 	// Each Service may have zero or more values for each service attribute | 
 | 	// defined in the corresponding Merchant. | 
 | 	ServiceAttributeValueId []*ServiceAttributeValueId `protobuf:"bytes,18,rep,name=service_attribute_value_id,json=serviceAttributeValueId,proto3" json:"service_attribute_value_id,omitempty"` | 
 | 	// Rules related to joining the waitlist. Should be populated if the service | 
 | 	// and merchant support waitlist functionality. Should not be populated | 
 | 	// otherwise. | 
 | 	WaitlistRules        *WaitlistRules `protobuf:"bytes,19,opt,name=waitlist_rules,json=waitlistRules,proto3" json:"waitlist_rules,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}       `json:"-"` | 
 | 	XXX_unrecognized     []byte         `json:"-"` | 
 | 	XXX_sizecache        int32          `json:"-"` | 
 | } | 
 |  | 
 | func (m *Service) Reset()         { *m = Service{} } | 
 | func (m *Service) String() string { return proto.CompactTextString(m) } | 
 | func (*Service) ProtoMessage()    {} | 
 | func (*Service) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{7} | 
 | } | 
 |  | 
 | func (m *Service) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_Service.Unmarshal(m, b) | 
 | } | 
 | func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_Service.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *Service) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Service.Merge(m, src) | 
 | } | 
 | func (m *Service) XXX_Size() int { | 
 | 	return xxx_messageInfo_Service.Size(m) | 
 | } | 
 | func (m *Service) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_Service.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_Service proto.InternalMessageInfo | 
 |  | 
 | func (m *Service) GetMerchantId() string { | 
 | 	if m != nil { | 
 | 		return m.MerchantId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Service) GetServiceId() string { | 
 | 	if m != nil { | 
 | 		return m.ServiceId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Service) GetName() string { | 
 | 	if m != nil { | 
 | 		return m.Name | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Service) GetDescription() string { | 
 | 	if m != nil { | 
 | 		return m.Description | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Service) GetPrice() *Price { | 
 | 	if m != nil { | 
 | 		return m.Price | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetRules() *SchedulingRules { | 
 | 	if m != nil { | 
 | 		return m.Rules | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // Deprecated: Do not use. | 
 | func (m *Service) GetForm() []*ServiceIntakeForm { | 
 | 	if m != nil { | 
 | 		return m.Form | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetIntakeForm() *ServiceIntakeForm { | 
 | 	if m != nil { | 
 | 		return m.IntakeForm | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetPerTicketIntakeForm() *ServiceIntakeForm { | 
 | 	if m != nil { | 
 | 		return m.PerTicketIntakeForm | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetPrepaymentType() Service_PrepaymentType { | 
 | 	if m != nil { | 
 | 		return m.PrepaymentType | 
 | 	} | 
 | 	return Service_PREPAYMENT_TYPE_UNSPECIFIED | 
 | } | 
 |  | 
 | func (m *Service) GetTaxRate() *TaxRate { | 
 | 	if m != nil { | 
 | 		return m.TaxRate | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetPaymentOptionId() []string { | 
 | 	if m != nil { | 
 | 		return m.PaymentOptionId | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetDeposit() *Deposit { | 
 | 	if m != nil { | 
 | 		return m.Deposit | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetNoShowFee() *NoShowFee { | 
 | 	if m != nil { | 
 | 		return m.NoShowFee | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetRequireCreditCard() RequireCreditCard { | 
 | 	if m != nil { | 
 | 		return m.RequireCreditCard | 
 | 	} | 
 | 	return RequireCreditCard_REQUIRE_CREDIT_CARD_UNSPECIFIED | 
 | } | 
 |  | 
 | func (m *Service) GetActionLink() []*ActionLink { | 
 | 	if m != nil { | 
 | 		return m.ActionLink | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetType() Service_ServiceType { | 
 | 	if m != nil { | 
 | 		return m.Type | 
 | 	} | 
 | 	return Service_SERVICE_TYPE_UNSPECIFIED | 
 | } | 
 |  | 
 | func (m *Service) GetTicketType() []*TicketType { | 
 | 	if m != nil { | 
 | 		return m.TicketType | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetRelatedMedia() []*RelatedMedia { | 
 | 	if m != nil { | 
 | 		return m.RelatedMedia | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetServiceAttributeValueId() []*ServiceAttributeValueId { | 
 | 	if m != nil { | 
 | 		return m.ServiceAttributeValueId | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Service) GetWaitlistRules() *WaitlistRules { | 
 | 	if m != nil { | 
 | 		return m.WaitlistRules | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // The price of a service or a fee. | 
 | type Price struct { | 
 | 	// The price in micro-units of the currency. | 
 | 	// Fractions of smallest currency unit will be rounded using nearest even | 
 | 	// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to | 
 | 	// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents). | 
 | 	// (required) | 
 | 	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros,proto3" json:"price_micros,omitempty"` | 
 | 	// The currency of the price that is defined in ISO 4217. (required) | 
 | 	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` | 
 | 	// An optional and opaque string that identifies the pricing option that is | 
 | 	// associated with the extended price. (optional) | 
 | 	PricingOptionTag     string   `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag,proto3" json:"pricing_option_tag,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_7aa923a38d4cd9d3, []int{8} | 
 | } | 
 |  | 
 | 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 (m *Price) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Price.Merge(m, 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) GetPriceMicros() int64 { | 
 | 	if m != nil { | 
 | 		return m.PriceMicros | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Price) GetCurrencyCode() string { | 
 | 	if m != nil { | 
 | 		return m.CurrencyCode | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *Price) GetPricingOptionTag() string { | 
 | 	if m != nil { | 
 | 		return m.PricingOptionTag | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | // The scheduling rules for a service. | 
 | type SchedulingRules struct { | 
 | 	// The duration (in seconds) from when the last booking can be made to | 
 | 	// when the availability slot starts or ends. | 
 | 	// | 
 | 	// If "min_advance_booking" is set, the last bookable time is calculated as | 
 | 	// (<slot start time> - "min_advance_booking"). | 
 | 	// If "min_booking_buffer_before_end_time" is set, the last bookable time is | 
 | 	// calculated as (<slot end time> - "min_booking_buffer_before_end_time"). | 
 | 	// Note that the value of "min_booking_buffer_before_end_time" must be | 
 | 	// positive if set. | 
 | 	// If both are unset, the slot is bookable until the slot begin time. | 
 | 	// | 
 | 	// Examples: | 
 | 	//  * A haircut that needs to be booked at least 1 hour before the start time. | 
 | 	//      'scheduling_rules{ min_advance_booking: 3600 ...}` | 
 | 	// | 
 | 	//  * A museum where the last ticket can be purchased 30 mins before closing: | 
 | 	//     'scheduling_rules{ min_booking_buffer_before_end_time: 1800 ...}' | 
 | 	// | 
 | 	//  * A movie ticket that needs to be purchased before the start time. | 
 | 	//        'scheduling_rules{ ...}' (leave this field empty) | 
 | 	// (optional) | 
 | 	// | 
 | 	// Types that are valid to be assigned to MinBookingBuffer: | 
 | 	//	*SchedulingRules_MinAdvanceBooking | 
 | 	//	*SchedulingRules_MinBookingBufferBeforeEndTime | 
 | 	MinBookingBuffer isSchedulingRules_MinBookingBuffer `protobuf_oneof:"min_booking_buffer"` | 
 | 	// The minimum advance notice in seconds required to cancel a booked | 
 | 	// appointment online. (optional) | 
 | 	MinAdvanceOnlineCanceling int64 `protobuf:"varint,2,opt,name=min_advance_online_canceling,json=minAdvanceOnlineCanceling,proto3" json:"min_advance_online_canceling,omitempty"` | 
 | 	// The fee for canceling within the minimum advance notice period. | 
 | 	LateCancellationFee *Price `protobuf:"bytes,3,opt,name=late_cancellation_fee,json=lateCancellationFee,proto3" json:"late_cancellation_fee,omitempty"` // Deprecated: Do not use. | 
 | 	// The fee for no-show without canceling. | 
 | 	NoshowFee *Price `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee,proto3" json:"noshow_fee,omitempty"` // Deprecated: Do not use. | 
 | 	// The admission policy that applied to this service. If unset, defaults to | 
 | 	// TIME_STRICT. (optional) | 
 | 	AdmissionPolicy      SchedulingRules_AdmissionPolicy `protobuf:"varint,5,opt,name=admission_policy,json=admissionPolicy,proto3,enum=maps.booking.feeds.SchedulingRules_AdmissionPolicy" json:"admission_policy,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}                        `json:"-"` | 
 | 	XXX_unrecognized     []byte                          `json:"-"` | 
 | 	XXX_sizecache        int32                           `json:"-"` | 
 | } | 
 |  | 
 | func (m *SchedulingRules) Reset()         { *m = SchedulingRules{} } | 
 | func (m *SchedulingRules) String() string { return proto.CompactTextString(m) } | 
 | func (*SchedulingRules) ProtoMessage()    {} | 
 | func (*SchedulingRules) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{9} | 
 | } | 
 |  | 
 | func (m *SchedulingRules) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_SchedulingRules.Unmarshal(m, b) | 
 | } | 
 | func (m *SchedulingRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_SchedulingRules.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *SchedulingRules) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_SchedulingRules.Merge(m, src) | 
 | } | 
 | func (m *SchedulingRules) XXX_Size() int { | 
 | 	return xxx_messageInfo_SchedulingRules.Size(m) | 
 | } | 
 | func (m *SchedulingRules) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_SchedulingRules.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_SchedulingRules proto.InternalMessageInfo | 
 |  | 
 | type isSchedulingRules_MinBookingBuffer interface { | 
 | 	isSchedulingRules_MinBookingBuffer() | 
 | } | 
 |  | 
 | type SchedulingRules_MinAdvanceBooking struct { | 
 | 	MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking,proto3,oneof"` | 
 | } | 
 |  | 
 | type SchedulingRules_MinBookingBufferBeforeEndTime struct { | 
 | 	MinBookingBufferBeforeEndTime int64 `protobuf:"varint,6,opt,name=min_booking_buffer_before_end_time,json=minBookingBufferBeforeEndTime,proto3,oneof"` | 
 | } | 
 |  | 
 | func (*SchedulingRules_MinAdvanceBooking) isSchedulingRules_MinBookingBuffer() {} | 
 |  | 
 | func (*SchedulingRules_MinBookingBufferBeforeEndTime) isSchedulingRules_MinBookingBuffer() {} | 
 |  | 
 | func (m *SchedulingRules) GetMinBookingBuffer() isSchedulingRules_MinBookingBuffer { | 
 | 	if m != nil { | 
 | 		return m.MinBookingBuffer | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *SchedulingRules) GetMinAdvanceBooking() int64 { | 
 | 	if x, ok := m.GetMinBookingBuffer().(*SchedulingRules_MinAdvanceBooking); ok { | 
 | 		return x.MinAdvanceBooking | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *SchedulingRules) GetMinBookingBufferBeforeEndTime() int64 { | 
 | 	if x, ok := m.GetMinBookingBuffer().(*SchedulingRules_MinBookingBufferBeforeEndTime); ok { | 
 | 		return x.MinBookingBufferBeforeEndTime | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *SchedulingRules) GetMinAdvanceOnlineCanceling() int64 { | 
 | 	if m != nil { | 
 | 		return m.MinAdvanceOnlineCanceling | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | // Deprecated: Do not use. | 
 | func (m *SchedulingRules) GetLateCancellationFee() *Price { | 
 | 	if m != nil { | 
 | 		return m.LateCancellationFee | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // Deprecated: Do not use. | 
 | func (m *SchedulingRules) GetNoshowFee() *Price { | 
 | 	if m != nil { | 
 | 		return m.NoshowFee | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *SchedulingRules) GetAdmissionPolicy() SchedulingRules_AdmissionPolicy { | 
 | 	if m != nil { | 
 | 		return m.AdmissionPolicy | 
 | 	} | 
 | 	return SchedulingRules_ADMISSION_POLICY_UNSPECIFIED | 
 | } | 
 |  | 
 | // XXX_OneofWrappers is for the internal use of the proto package. | 
 | func (*SchedulingRules) XXX_OneofWrappers() []interface{} { | 
 | 	return []interface{}{ | 
 | 		(*SchedulingRules_MinAdvanceBooking)(nil), | 
 | 		(*SchedulingRules_MinBookingBufferBeforeEndTime)(nil), | 
 | 	} | 
 | } | 
 |  | 
 | // A tax rate applied when charging the user for a service, and which can be set | 
 | // on either a per merchant, or per service basis. | 
 | type TaxRate struct { | 
 | 	// A tax rate in millionths of one percent, effectively giving 6 decimals of | 
 | 	// precision. For example, if the tax rate is 7.253%, this field should be set | 
 | 	// to 7253000. | 
 | 	// | 
 | 	// If this field is left unset or set to 0, the total price charged to a user | 
 | 	// for any service provided by this merchant is the exact price specified by | 
 | 	// Service.price. The service price is assumed to be exempt from or already | 
 | 	// inclusive of applicable taxes. Taxes will not be shown to the user as a | 
 | 	// separate line item. | 
 | 	// | 
 | 	// If this field is set to any nonzero value, the total price charged to a | 
 | 	// user for any service provided by this merchant will include the service | 
 | 	// price plus the tax assessed using the tax rate provided here. Fractions of | 
 | 	// the smallest currency unit (for example, fractions of one cent) will be | 
 | 	// rounded using nearest even rounding. Taxes will be shown to the user as a | 
 | 	// separate line item. (required) | 
 | 	MicroPercent         int32    `protobuf:"varint,1,opt,name=micro_percent,json=microPercent,proto3" json:"micro_percent,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *TaxRate) Reset()         { *m = TaxRate{} } | 
 | func (m *TaxRate) String() string { return proto.CompactTextString(m) } | 
 | func (*TaxRate) ProtoMessage()    {} | 
 | func (*TaxRate) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{10} | 
 | } | 
 |  | 
 | func (m *TaxRate) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_TaxRate.Unmarshal(m, b) | 
 | } | 
 | func (m *TaxRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_TaxRate.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *TaxRate) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_TaxRate.Merge(m, src) | 
 | } | 
 | func (m *TaxRate) XXX_Size() int { | 
 | 	return xxx_messageInfo_TaxRate.Size(m) | 
 | } | 
 | func (m *TaxRate) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_TaxRate.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_TaxRate proto.InternalMessageInfo | 
 |  | 
 | func (m *TaxRate) GetMicroPercent() int32 { | 
 | 	if m != nil { | 
 | 		return m.MicroPercent | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | // Defines a field that is included in a ServiceIntakeForm. | 
 | type ServiceIntakeFormField struct { | 
 | 	// A string from an aggregator partner which uniquely identifies a form field. | 
 | 	// This id should be the same as the id in the corresponding form field | 
 | 	// answer. (required) | 
 | 	Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"` | 
 | 	// The type of this field. (required) | 
 | 	Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,proto3,enum=maps.booking.feeds.ServiceIntakeFormField_FieldType" json:"type,omitempty"` | 
 | 	// The text shown to the user for this field. (required) | 
 | 	Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` | 
 | 	// For MULTIPLE_CHOICE, CHECKBOXES, or DROPDOWN, the values to enumerate. | 
 | 	// (optional) | 
 | 	Value []string `protobuf:"bytes,3,rep,name=value,proto3" json:"value,omitempty"` | 
 | 	// Indicates whether an answer to this field is required by a user. (optional) | 
 | 	IsRequired           bool     `protobuf:"varint,4,opt,name=is_required,json=isRequired,proto3" json:"is_required,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *ServiceIntakeFormField) Reset()         { *m = ServiceIntakeFormField{} } | 
 | func (m *ServiceIntakeFormField) String() string { return proto.CompactTextString(m) } | 
 | func (*ServiceIntakeFormField) ProtoMessage()    {} | 
 | func (*ServiceIntakeFormField) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{11} | 
 | } | 
 |  | 
 | func (m *ServiceIntakeFormField) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_ServiceIntakeFormField.Unmarshal(m, b) | 
 | } | 
 | func (m *ServiceIntakeFormField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_ServiceIntakeFormField.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *ServiceIntakeFormField) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_ServiceIntakeFormField.Merge(m, src) | 
 | } | 
 | func (m *ServiceIntakeFormField) XXX_Size() int { | 
 | 	return xxx_messageInfo_ServiceIntakeFormField.Size(m) | 
 | } | 
 | func (m *ServiceIntakeFormField) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_ServiceIntakeFormField.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_ServiceIntakeFormField proto.InternalMessageInfo | 
 |  | 
 | func (m *ServiceIntakeFormField) GetId() string { | 
 | 	if m != nil { | 
 | 		return m.Id | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *ServiceIntakeFormField) GetType() ServiceIntakeFormField_FieldType { | 
 | 	if m != nil { | 
 | 		return m.Type | 
 | 	} | 
 | 	return ServiceIntakeFormField_FIELD_TYPE_UNSPECIFIED | 
 | } | 
 |  | 
 | func (m *ServiceIntakeFormField) GetLabel() string { | 
 | 	if m != nil { | 
 | 		return m.Label | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *ServiceIntakeFormField) GetValue() []string { | 
 | 	if m != nil { | 
 | 		return m.Value | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *ServiceIntakeFormField) GetIsRequired() bool { | 
 | 	if m != nil { | 
 | 		return m.IsRequired | 
 | 	} | 
 | 	return false | 
 | } | 
 |  | 
 | // Defines an intake form that customizes the service provided by a merchant. | 
 | type ServiceIntakeForm struct { | 
 | 	// Fields that will be displayed to the user. (required) | 
 | 	Field []*ServiceIntakeFormField `protobuf:"bytes,1,rep,name=field,proto3" json:"field,omitempty"` | 
 | 	// If true, this form will be shown to first time customers. | 
 | 	// Deprecated. This functionality is not supported for intake forms. | 
 | 	FirstTimeCustomers bool `protobuf:"varint,2,opt,name=first_time_customers,json=firstTimeCustomers,proto3" json:"first_time_customers,omitempty"` // Deprecated: Do not use. | 
 | 	// If true, this form will be shown to repeat customers. | 
 | 	// Deprecated. This functionality is not supported for intake forms. | 
 | 	ReturningCustomers   bool     `protobuf:"varint,3,opt,name=returning_customers,json=returningCustomers,proto3" json:"returning_customers,omitempty"` // Deprecated: Do not use. | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *ServiceIntakeForm) Reset()         { *m = ServiceIntakeForm{} } | 
 | func (m *ServiceIntakeForm) String() string { return proto.CompactTextString(m) } | 
 | func (*ServiceIntakeForm) ProtoMessage()    {} | 
 | func (*ServiceIntakeForm) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{12} | 
 | } | 
 |  | 
 | func (m *ServiceIntakeForm) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_ServiceIntakeForm.Unmarshal(m, b) | 
 | } | 
 | func (m *ServiceIntakeForm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_ServiceIntakeForm.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *ServiceIntakeForm) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_ServiceIntakeForm.Merge(m, src) | 
 | } | 
 | func (m *ServiceIntakeForm) XXX_Size() int { | 
 | 	return xxx_messageInfo_ServiceIntakeForm.Size(m) | 
 | } | 
 | func (m *ServiceIntakeForm) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_ServiceIntakeForm.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_ServiceIntakeForm proto.InternalMessageInfo | 
 |  | 
 | func (m *ServiceIntakeForm) GetField() []*ServiceIntakeFormField { | 
 | 	if m != nil { | 
 | 		return m.Field | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // Deprecated: Do not use. | 
 | func (m *ServiceIntakeForm) GetFirstTimeCustomers() bool { | 
 | 	if m != nil { | 
 | 		return m.FirstTimeCustomers | 
 | 	} | 
 | 	return false | 
 | } | 
 |  | 
 | // Deprecated: Do not use. | 
 | func (m *ServiceIntakeForm) GetReturningCustomers() bool { | 
 | 	if m != nil { | 
 | 		return m.ReturningCustomers | 
 | 	} | 
 | 	return false | 
 | } | 
 |  | 
 | // A deposit that the user may be charged or have a hold on their credit card | 
 | // for. | 
 | type Deposit struct { | 
 | 	// Deposit amount. | 
 | 	Deposit *Price `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"` | 
 | 	// Minimum advance cancellation for the deposit. | 
 | 	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec,proto3" json:"min_advance_cancellation_sec,omitempty"` | 
 | 	// Defines how the deposit is determined from the availability. | 
 | 	DepositType          PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,proto3,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}  `json:"-"` | 
 | 	XXX_unrecognized     []byte    `json:"-"` | 
 | 	XXX_sizecache        int32     `json:"-"` | 
 | } | 
 |  | 
 | func (m *Deposit) Reset()         { *m = Deposit{} } | 
 | func (m *Deposit) String() string { return proto.CompactTextString(m) } | 
 | func (*Deposit) ProtoMessage()    {} | 
 | func (*Deposit) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{13} | 
 | } | 
 |  | 
 | func (m *Deposit) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_Deposit.Unmarshal(m, b) | 
 | } | 
 | func (m *Deposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_Deposit.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *Deposit) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_Deposit.Merge(m, src) | 
 | } | 
 | func (m *Deposit) XXX_Size() int { | 
 | 	return xxx_messageInfo_Deposit.Size(m) | 
 | } | 
 | func (m *Deposit) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_Deposit.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_Deposit proto.InternalMessageInfo | 
 |  | 
 | func (m *Deposit) GetDeposit() *Price { | 
 | 	if m != nil { | 
 | 		return m.Deposit | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *Deposit) GetMinAdvanceCancellationSec() int64 { | 
 | 	if m != nil { | 
 | 		return m.MinAdvanceCancellationSec | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *Deposit) GetDepositType() PriceType { | 
 | 	if m != nil { | 
 | 		return m.DepositType | 
 | 	} | 
 | 	return PriceType_FIXED_RATE_DEFAULT | 
 | } | 
 |  | 
 | // A fee that a user may be charged if they have made a booking but do not | 
 | // show up. | 
 | type NoShowFee struct { | 
 | 	// The amount the user may be charged if they do not show up for their | 
 | 	// reservation. | 
 | 	Fee *Price `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee,omitempty"` | 
 | 	// Defines how the fee is determined from the availability. | 
 | 	FeeType              PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,proto3,enum=maps.booking.feeds.PriceType" json:"fee_type,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}  `json:"-"` | 
 | 	XXX_unrecognized     []byte    `json:"-"` | 
 | 	XXX_sizecache        int32     `json:"-"` | 
 | } | 
 |  | 
 | func (m *NoShowFee) Reset()         { *m = NoShowFee{} } | 
 | func (m *NoShowFee) String() string { return proto.CompactTextString(m) } | 
 | func (*NoShowFee) ProtoMessage()    {} | 
 | func (*NoShowFee) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{14} | 
 | } | 
 |  | 
 | func (m *NoShowFee) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_NoShowFee.Unmarshal(m, b) | 
 | } | 
 | func (m *NoShowFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_NoShowFee.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *NoShowFee) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_NoShowFee.Merge(m, src) | 
 | } | 
 | func (m *NoShowFee) XXX_Size() int { | 
 | 	return xxx_messageInfo_NoShowFee.Size(m) | 
 | } | 
 | func (m *NoShowFee) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_NoShowFee.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_NoShowFee proto.InternalMessageInfo | 
 |  | 
 | func (m *NoShowFee) GetFee() *Price { | 
 | 	if m != nil { | 
 | 		return m.Fee | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *NoShowFee) GetFeeType() PriceType { | 
 | 	if m != nil { | 
 | 		return m.FeeType | 
 | 	} | 
 | 	return PriceType_FIXED_RATE_DEFAULT | 
 | } | 
 |  | 
 | // An action URL with associated language, list of countries restricted to, and | 
 | // optional platform that indicates which platform this action should be | 
 | // performed on. | 
 | type ActionLink struct { | 
 | 	// The entry point URL for this action link. | 
 | 	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` | 
 | 	// The BCP-47 language tag identifying the language in which the content | 
 | 	// from this URI is available. | 
 | 	Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` | 
 | 	// ISO 3166-1 alpha-2 country code. Leave empty for unrestricted visibility. | 
 | 	RestrictedCountry []string `protobuf:"bytes,3,rep,name=restricted_country,json=restrictedCountry,proto3" json:"restricted_country,omitempty"` | 
 | 	// The platform that this action should be performed on. If this field is | 
 | 	// unset, ACTION_PLATFORM_WEB_APPLICATION will be used as fallback. | 
 | 	Platform             ActionPlatform `protobuf:"varint,4,opt,name=platform,proto3,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}       `json:"-"` | 
 | 	XXX_unrecognized     []byte         `json:"-"` | 
 | 	XXX_sizecache        int32          `json:"-"` | 
 | } | 
 |  | 
 | func (m *ActionLink) Reset()         { *m = ActionLink{} } | 
 | func (m *ActionLink) String() string { return proto.CompactTextString(m) } | 
 | func (*ActionLink) ProtoMessage()    {} | 
 | func (*ActionLink) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{15} | 
 | } | 
 |  | 
 | func (m *ActionLink) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_ActionLink.Unmarshal(m, b) | 
 | } | 
 | func (m *ActionLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_ActionLink.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *ActionLink) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_ActionLink.Merge(m, src) | 
 | } | 
 | func (m *ActionLink) XXX_Size() int { | 
 | 	return xxx_messageInfo_ActionLink.Size(m) | 
 | } | 
 | func (m *ActionLink) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_ActionLink.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_ActionLink proto.InternalMessageInfo | 
 |  | 
 | func (m *ActionLink) GetUrl() string { | 
 | 	if m != nil { | 
 | 		return m.Url | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *ActionLink) GetLanguage() string { | 
 | 	if m != nil { | 
 | 		return m.Language | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *ActionLink) GetRestrictedCountry() []string { | 
 | 	if m != nil { | 
 | 		return m.RestrictedCountry | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *ActionLink) GetPlatform() ActionPlatform { | 
 | 	if m != nil { | 
 | 		return m.Platform | 
 | 	} | 
 | 	return ActionPlatform_ACTION_PLATFORM_UNSPECIFIED | 
 | } | 
 |  | 
 | // TicketType is used to differentiate among tickets with different prices | 
 | // and/or availabilities due to different user types, different | 
 | // service attributes, or different options/add-ons. | 
 | // | 
 | // A ticket is the minimal bookable unit to a service, e.g. a spot on a rafting | 
 | // trip, an admission to a museum, a full day double kayak rental. | 
 | type TicketType struct { | 
 | 	// The ticket id is used to differentiate among different ticket types of the | 
 | 	// same service, and is only expected to be unique within a service. | 
 | 	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"` | 
 | 	// A short description to this TicketType. | 
 | 	// | 
 | 	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc. | 
 | 	// Required, each ticket type should have a description to be user visible. | 
 | 	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"` | 
 | 	// The price of a single ticket of this type, exclusive of any taxes. The tax | 
 | 	// rate of Service is applied to its tickets. | 
 | 	Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"` | 
 | 	// Description of any additional option which this ticket type represents, if | 
 | 	// any. | 
 | 	// | 
 | 	// This is useful when the ticket type represents multiple dimensions. | 
 | 	// | 
 | 	// Example 1: an admission ticket with different types 'adult', 'child' and | 
 | 	// language as an additional option, the expected TicketType list would be: | 
 | 	//     - { ticket_type_id: "ticket_type_1" short_description: "adult" | 
 | 	//         option_description: "english" } | 
 | 	//     - { ticket_type_id: "ticket_type_2" short_description: "adult" | 
 | 	//         option_description: "spanish" } | 
 | 	//     - { ticket_type_id: "ticket_type_3" short_description: "child" | 
 | 	//         option_description: "english" } | 
 | 	//     - { ticket_type_id: "ticket_type_4" short_description: "child" | 
 | 	//         option_description: "spanish" } | 
 | 	// | 
 | 	// Example 2: an multi-hour kayak rental with optional dry bag add-on, the | 
 | 	// short_description could be "3 hours" and the option_description could be | 
 | 	// either "with dry bag" or "without dry bag": | 
 | 	//     - { ticket_type_id: "ticket_type_1" short_description: "2 hours" | 
 | 	//         option_description: "english" } | 
 | 	//     - { ticket_type_id: "ticket_type_2" short_description: "3 hours" | 
 | 	//         option_description: "spanish" } | 
 | 	//     - { ticket_type_id: "ticket_type_3" short_description: "2 hours" | 
 | 	//          option_description: "english" } | 
 | 	//     - { ticket_type_id: "ticket_type_4" short_description: "3 hours" | 
 | 	//          option_description: "spanish" } | 
 | 	// | 
 | 	// Optional, but if any ticket type within the service has this field set, we | 
 | 	// expect all other ticket types to have this field set as well (a default | 
 | 	// option_description could be used). E.g. | 
 | 	// [{ticket_type_1, adult, english}, {ticket_type_1, adult, ''}] is not a | 
 | 	// valid list. | 
 | 	OptionDescription    string   `protobuf:"bytes,4,opt,name=option_description,json=optionDescription,proto3" json:"option_description,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *TicketType) Reset()         { *m = TicketType{} } | 
 | func (m *TicketType) String() string { return proto.CompactTextString(m) } | 
 | func (*TicketType) ProtoMessage()    {} | 
 | func (*TicketType) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{16} | 
 | } | 
 |  | 
 | func (m *TicketType) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_TicketType.Unmarshal(m, b) | 
 | } | 
 | func (m *TicketType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_TicketType.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *TicketType) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_TicketType.Merge(m, src) | 
 | } | 
 | func (m *TicketType) XXX_Size() int { | 
 | 	return xxx_messageInfo_TicketType.Size(m) | 
 | } | 
 | func (m *TicketType) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_TicketType.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_TicketType proto.InternalMessageInfo | 
 |  | 
 | func (m *TicketType) GetTicketTypeId() string { | 
 | 	if m != nil { | 
 | 		return m.TicketTypeId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *TicketType) GetShortDescription() string { | 
 | 	if m != nil { | 
 | 		return m.ShortDescription | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *TicketType) GetPrice() *Price { | 
 | 	if m != nil { | 
 | 		return m.Price | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | func (m *TicketType) GetOptionDescription() string { | 
 | 	if m != nil { | 
 | 		return m.OptionDescription | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | // Defines a media source. This field only contains the URL of this media source | 
 | // (only photos are supported for now). Google will crawl the media data to | 
 | // ensure that they are displayed to end-users in the most efficient way. | 
 | type RelatedMedia struct { | 
 | 	// URL of this media source. Google will crawl the media hosted at this URL. | 
 | 	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` | 
 | 	// Type of this media source. | 
 | 	Type RelatedMedia_MediaType `protobuf:"varint,2,opt,name=type,proto3,enum=maps.booking.feeds.RelatedMedia_MediaType" json:"type,omitempty"` | 
 | 	// Caption of the media, only plain text is supported. Any HTML components | 
 | 	// will be stripped. (optional) | 
 | 	Caption string `protobuf:"bytes,3,opt,name=caption,proto3" json:"caption,omitempty"` | 
 | 	// Attribution information about the source of the media. Note that if | 
 | 	// the attribution is required to display with the media to give credit to | 
 | 	// photographer or agency, this field must be set. (optional) | 
 | 	Attribution          *RelatedMedia_Attribution `protobuf:"bytes,4,opt,name=attribution,proto3" json:"attribution,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{}                  `json:"-"` | 
 | 	XXX_unrecognized     []byte                    `json:"-"` | 
 | 	XXX_sizecache        int32                     `json:"-"` | 
 | } | 
 |  | 
 | func (m *RelatedMedia) Reset()         { *m = RelatedMedia{} } | 
 | func (m *RelatedMedia) String() string { return proto.CompactTextString(m) } | 
 | func (*RelatedMedia) ProtoMessage()    {} | 
 | func (*RelatedMedia) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{17} | 
 | } | 
 |  | 
 | func (m *RelatedMedia) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_RelatedMedia.Unmarshal(m, b) | 
 | } | 
 | func (m *RelatedMedia) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_RelatedMedia.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *RelatedMedia) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_RelatedMedia.Merge(m, src) | 
 | } | 
 | func (m *RelatedMedia) XXX_Size() int { | 
 | 	return xxx_messageInfo_RelatedMedia.Size(m) | 
 | } | 
 | func (m *RelatedMedia) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_RelatedMedia.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_RelatedMedia proto.InternalMessageInfo | 
 |  | 
 | func (m *RelatedMedia) GetUrl() string { | 
 | 	if m != nil { | 
 | 		return m.Url | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *RelatedMedia) GetType() RelatedMedia_MediaType { | 
 | 	if m != nil { | 
 | 		return m.Type | 
 | 	} | 
 | 	return RelatedMedia_TYPE_UNSPECIFIED | 
 | } | 
 |  | 
 | func (m *RelatedMedia) GetCaption() string { | 
 | 	if m != nil { | 
 | 		return m.Caption | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *RelatedMedia) GetAttribution() *RelatedMedia_Attribution { | 
 | 	if m != nil { | 
 | 		return m.Attribution | 
 | 	} | 
 | 	return nil | 
 | } | 
 |  | 
 | // Attribution information for this media. | 
 | type RelatedMedia_Attribution struct { | 
 | 	// The text to give credit to the photographer or agency. This text will be | 
 | 	// displayed together with the source media. Note that only plain text is | 
 | 	// supported for this field, any HTML components will be stripped (hyperlink | 
 | 	// based attribution is not supported). | 
 | 	Text                 string   `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *RelatedMedia_Attribution) Reset()         { *m = RelatedMedia_Attribution{} } | 
 | func (m *RelatedMedia_Attribution) String() string { return proto.CompactTextString(m) } | 
 | func (*RelatedMedia_Attribution) ProtoMessage()    {} | 
 | func (*RelatedMedia_Attribution) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{17, 0} | 
 | } | 
 |  | 
 | func (m *RelatedMedia_Attribution) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_RelatedMedia_Attribution.Unmarshal(m, b) | 
 | } | 
 | func (m *RelatedMedia_Attribution) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_RelatedMedia_Attribution.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *RelatedMedia_Attribution) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_RelatedMedia_Attribution.Merge(m, src) | 
 | } | 
 | func (m *RelatedMedia_Attribution) XXX_Size() int { | 
 | 	return xxx_messageInfo_RelatedMedia_Attribution.Size(m) | 
 | } | 
 | func (m *RelatedMedia_Attribution) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_RelatedMedia_Attribution.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_RelatedMedia_Attribution proto.InternalMessageInfo | 
 |  | 
 | func (m *RelatedMedia_Attribution) GetText() string { | 
 | 	if m != nil { | 
 | 		return m.Text | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | // Identifies a particular value of a service attribute to be applied to a | 
 | // Service. | 
 | type ServiceAttributeValueId struct { | 
 | 	// ID of an attribute as defined in Merchant.service_attribute, e.g. | 
 | 	// "service-type". | 
 | 	AttributeId string `protobuf:"bytes,1,opt,name=attribute_id,json=attributeId,proto3" json:"attribute_id,omitempty"` | 
 | 	// ID of the value for this attribute, e.g. "haircut". Must match a value_id | 
 | 	// in the service attribute definition. | 
 | 	ValueId              string   `protobuf:"bytes,2,opt,name=value_id,json=valueId,proto3" json:"value_id,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral struct{} `json:"-"` | 
 | 	XXX_unrecognized     []byte   `json:"-"` | 
 | 	XXX_sizecache        int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *ServiceAttributeValueId) Reset()         { *m = ServiceAttributeValueId{} } | 
 | func (m *ServiceAttributeValueId) String() string { return proto.CompactTextString(m) } | 
 | func (*ServiceAttributeValueId) ProtoMessage()    {} | 
 | func (*ServiceAttributeValueId) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{18} | 
 | } | 
 |  | 
 | func (m *ServiceAttributeValueId) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_ServiceAttributeValueId.Unmarshal(m, b) | 
 | } | 
 | func (m *ServiceAttributeValueId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_ServiceAttributeValueId.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *ServiceAttributeValueId) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_ServiceAttributeValueId.Merge(m, src) | 
 | } | 
 | func (m *ServiceAttributeValueId) XXX_Size() int { | 
 | 	return xxx_messageInfo_ServiceAttributeValueId.Size(m) | 
 | } | 
 | func (m *ServiceAttributeValueId) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_ServiceAttributeValueId.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_ServiceAttributeValueId proto.InternalMessageInfo | 
 |  | 
 | func (m *ServiceAttributeValueId) GetAttributeId() string { | 
 | 	if m != nil { | 
 | 		return m.AttributeId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | func (m *ServiceAttributeValueId) GetValueId() string { | 
 | 	if m != nil { | 
 | 		return m.ValueId | 
 | 	} | 
 | 	return "" | 
 | } | 
 |  | 
 | // Rules related to joining the waitlist. | 
 | type WaitlistRules struct { | 
 | 	// Required. Must be a positive integer for services providing waitlist | 
 | 	// functionality. If the service or merchant does not provide waitlist | 
 | 	// functionality, this must not be populated. | 
 | 	MinPartySize int32 `protobuf:"varint,1,opt,name=min_party_size,json=minPartySize,proto3" json:"min_party_size,omitempty"` | 
 | 	// Required. Must be a positive integer for services providing waitlist | 
 | 	// functionality. If the service or merchant does not provide waitlist | 
 | 	// functionality, this must not be populated. | 
 | 	MaxPartySize int32 `protobuf:"varint,2,opt,name=max_party_size,json=maxPartySize,proto3" json:"max_party_size,omitempty"` | 
 | 	// If true, the user will be able to send a free-form additional text request | 
 | 	// when joining the waitlist for this service. | 
 | 	SupportsAdditionalRequest bool     `protobuf:"varint,3,opt,name=supports_additional_request,json=supportsAdditionalRequest,proto3" json:"supports_additional_request,omitempty"` | 
 | 	XXX_NoUnkeyedLiteral      struct{} `json:"-"` | 
 | 	XXX_unrecognized          []byte   `json:"-"` | 
 | 	XXX_sizecache             int32    `json:"-"` | 
 | } | 
 |  | 
 | func (m *WaitlistRules) Reset()         { *m = WaitlistRules{} } | 
 | func (m *WaitlistRules) String() string { return proto.CompactTextString(m) } | 
 | func (*WaitlistRules) ProtoMessage()    {} | 
 | func (*WaitlistRules) Descriptor() ([]byte, []int) { | 
 | 	return fileDescriptor_7aa923a38d4cd9d3, []int{19} | 
 | } | 
 |  | 
 | func (m *WaitlistRules) XXX_Unmarshal(b []byte) error { | 
 | 	return xxx_messageInfo_WaitlistRules.Unmarshal(m, b) | 
 | } | 
 | func (m *WaitlistRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | 
 | 	return xxx_messageInfo_WaitlistRules.Marshal(b, m, deterministic) | 
 | } | 
 | func (m *WaitlistRules) XXX_Merge(src proto.Message) { | 
 | 	xxx_messageInfo_WaitlistRules.Merge(m, src) | 
 | } | 
 | func (m *WaitlistRules) XXX_Size() int { | 
 | 	return xxx_messageInfo_WaitlistRules.Size(m) | 
 | } | 
 | func (m *WaitlistRules) XXX_DiscardUnknown() { | 
 | 	xxx_messageInfo_WaitlistRules.DiscardUnknown(m) | 
 | } | 
 |  | 
 | var xxx_messageInfo_WaitlistRules proto.InternalMessageInfo | 
 |  | 
 | func (m *WaitlistRules) GetMinPartySize() int32 { | 
 | 	if m != nil { | 
 | 		return m.MinPartySize | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *WaitlistRules) GetMaxPartySize() int32 { | 
 | 	if m != nil { | 
 | 		return m.MaxPartySize | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func (m *WaitlistRules) GetSupportsAdditionalRequest() bool { | 
 | 	if m != nil { | 
 | 		return m.SupportsAdditionalRequest | 
 | 	} | 
 | 	return false | 
 | } | 
 |  | 
 | func init() { | 
 | 	proto.RegisterEnum("maps.booking.feeds.PriceType", PriceType_name, PriceType_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.RequireCreditCard", RequireCreditCard_name, RequireCreditCard_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.ActionPlatform", ActionPlatform_name, ActionPlatform_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.FeedMetadata_ProcessingInstruction", FeedMetadata_ProcessingInstruction_name, FeedMetadata_ProcessingInstruction_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.Availability_ConfirmationMode", Availability_ConfirmationMode_name, Availability_ConfirmationMode_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.Service_PrepaymentType", Service_PrepaymentType_name, Service_PrepaymentType_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.Service_ServiceType", Service_ServiceType_name, Service_ServiceType_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.SchedulingRules_AdmissionPolicy", SchedulingRules_AdmissionPolicy_name, SchedulingRules_AdmissionPolicy_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.ServiceIntakeFormField_FieldType", ServiceIntakeFormField_FieldType_name, ServiceIntakeFormField_FieldType_value) | 
 | 	proto.RegisterEnum("maps.booking.feeds.RelatedMedia_MediaType", RelatedMedia_MediaType_name, RelatedMedia_MediaType_value) | 
 | 	proto.RegisterType((*FeedMetadata)(nil), "maps.booking.feeds.FeedMetadata") | 
 | 	proto.RegisterType((*AvailabilityFeed)(nil), "maps.booking.feeds.AvailabilityFeed") | 
 | 	proto.RegisterType((*ServiceAvailability)(nil), "maps.booking.feeds.ServiceAvailability") | 
 | 	proto.RegisterType((*Availability)(nil), "maps.booking.feeds.Availability") | 
 | 	proto.RegisterType((*Availability_Recurrence)(nil), "maps.booking.feeds.Availability.Recurrence") | 
 | 	proto.RegisterType((*Availability_ScheduleException)(nil), "maps.booking.feeds.Availability.ScheduleException") | 
 | 	proto.RegisterType((*Availability_SchedulingRuleOverrides)(nil), "maps.booking.feeds.Availability.SchedulingRuleOverrides") | 
 | 	proto.RegisterType((*Resources)(nil), "maps.booking.feeds.Resources") | 
 | 	proto.RegisterType((*TimeRange)(nil), "maps.booking.feeds.TimeRange") | 
 | 	proto.RegisterType((*ServiceFeed)(nil), "maps.booking.feeds.ServiceFeed") | 
 | 	proto.RegisterType((*Service)(nil), "maps.booking.feeds.Service") | 
 | 	proto.RegisterType((*Price)(nil), "maps.booking.feeds.Price") | 
 | 	proto.RegisterType((*SchedulingRules)(nil), "maps.booking.feeds.SchedulingRules") | 
 | 	proto.RegisterType((*TaxRate)(nil), "maps.booking.feeds.TaxRate") | 
 | 	proto.RegisterType((*ServiceIntakeFormField)(nil), "maps.booking.feeds.ServiceIntakeFormField") | 
 | 	proto.RegisterType((*ServiceIntakeForm)(nil), "maps.booking.feeds.ServiceIntakeForm") | 
 | 	proto.RegisterType((*Deposit)(nil), "maps.booking.feeds.Deposit") | 
 | 	proto.RegisterType((*NoShowFee)(nil), "maps.booking.feeds.NoShowFee") | 
 | 	proto.RegisterType((*ActionLink)(nil), "maps.booking.feeds.ActionLink") | 
 | 	proto.RegisterType((*TicketType)(nil), "maps.booking.feeds.TicketType") | 
 | 	proto.RegisterType((*RelatedMedia)(nil), "maps.booking.feeds.RelatedMedia") | 
 | 	proto.RegisterType((*RelatedMedia_Attribution)(nil), "maps.booking.feeds.RelatedMedia.Attribution") | 
 | 	proto.RegisterType((*ServiceAttributeValueId)(nil), "maps.booking.feeds.ServiceAttributeValueId") | 
 | 	proto.RegisterType((*WaitlistRules)(nil), "maps.booking.feeds.WaitlistRules") | 
 | } | 
 |  | 
 | func init() { proto.RegisterFile("feeds.proto", fileDescriptor_7aa923a38d4cd9d3) } | 
 |  | 
 | var fileDescriptor_7aa923a38d4cd9d3 = []byte{ | 
 | 	// 2783 bytes of a gzipped FileDescriptorProto | 
 | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x5f, 0x73, 0xdb, 0xc6, | 
 | 	0xb5, 0x37, 0x49, 0xc9, 0x24, 0x0f, 0x29, 0x09, 0x5c, 0xc9, 0x12, 0x25, 0x47, 0xb1, 0x8c, 0xdc, | 
 | 	0xdc, 0xeb, 0x6b, 0x3b, 0xba, 0x89, 0x9c, 0x64, 0x72, 0x27, 0x7f, 0x29, 0x12, 0x8a, 0x30, 0xa6, | 
 | 	0x08, 0x64, 0x09, 0x45, 0x71, 0x1e, 0xb2, 0x81, 0x80, 0x95, 0x84, 0x31, 0x09, 0xb0, 0x00, 0x28, | 
 | 	0x5b, 0x99, 0x66, 0x3a, 0xd3, 0xbe, 0xf4, 0x33, 0x34, 0x33, 0x7d, 0xef, 0x34, 0xdf, 0xa1, 0xed, | 
 | 	0x6b, 0xbf, 0x41, 0x3f, 0x45, 0x3f, 0x40, 0x5f, 0x3a, 0x7b, 0x16, 0x04, 0x41, 0x8a, 0xb2, 0x94, | 
 | 	0x26, 0x2f, 0x14, 0xf6, 0x9c, 0xdf, 0x39, 0xbb, 0x7b, 0x76, 0xcf, 0xbf, 0x15, 0x54, 0x4e, 0x38, | 
 | 	0x77, 0xa3, 0xed, 0x41, 0x18, 0xc4, 0x01, 0x21, 0x7d, 0x7b, 0x10, 0x6d, 0x1f, 0x07, 0xc1, 0x73, | 
 | 	0xcf, 0x3f, 0xdd, 0x46, 0x8e, 0xfa, 0xcf, 0x3c, 0x54, 0xf7, 0x38, 0x77, 0x0f, 0x78, 0x6c, 0xbb, | 
 | 	0x76, 0x6c, 0x93, 0x3e, 0xac, 0x0e, 0xc2, 0xc0, 0xe1, 0x51, 0xe4, 0xf9, 0xa7, 0xcc, 0xf3, 0xa3, | 
 | 	0x38, 0x1c, 0x3a, 0xb1, 0x17, 0xf8, 0xf5, 0xdc, 0x56, 0xee, 0xc1, 0xe2, 0xce, 0xfb, 0xdb, 0x97, | 
 | 	0xb5, 0x6c, 0x67, 0x35, 0x6c, 0x9b, 0xa9, 0xb8, 0x3e, 0x96, 0xa6, 0x77, 0x06, 0xb3, 0xc8, 0xe4, | 
 | 	0x3e, 0x54, 0xa3, 0x33, 0x3b, 0x74, 0x99, 0x3f, 0xec, 0x1f, 0xf3, 0xb0, 0x9e, 0xdf, 0xca, 0x3d, | 
 | 	0x98, 0xa7, 0x15, 0xa4, 0x75, 0x90, 0x24, 0x20, 0x71, 0x10, 0xdb, 0x3d, 0x86, 0xc4, 0xa8, 0x5e, | 
 | 	0x90, 0x10, 0xa4, 0x75, 0x91, 0x44, 0x56, 0x60, 0xde, 0x0f, 0x7c, 0x87, 0xd7, 0xe7, 0xb7, 0x72, | 
 | 	0x0f, 0xe6, 0xa8, 0x1c, 0x90, 0x77, 0x60, 0xe5, 0x94, 0xfb, 0x3c, 0xb4, 0xc5, 0x4c, 0x2c, 0xf6, | 
 | 	0xfa, 0x3c, 0x8a, 0xed, 0xfe, 0xa0, 0x3e, 0xb7, 0x95, 0x7b, 0x50, 0xa0, 0xcb, 0x63, 0x9e, 0x35, | 
 | 	0x62, 0xa9, 0x36, 0xdc, 0x99, 0xb9, 0x7c, 0xb2, 0x0c, 0x4b, 0x26, 0x35, 0x9a, 0x5a, 0xb7, 0xcb, | 
 | 	0x0e, 0x3b, 0x4f, 0x3b, 0xc6, 0x51, 0x47, 0xb9, 0x45, 0xd6, 0x60, 0x79, 0x44, 0x6c, 0x74, 0x59, | 
 | 	0xd3, 0x38, 0x30, 0xdb, 0x9a, 0xa5, 0x29, 0x39, 0xb2, 0x01, 0xab, 0x19, 0x86, 0xde, 0x69, 0x52, | 
 | 	0xed, 0x40, 0xeb, 0x58, 0x8d, 0xb6, 0x92, 0x57, 0x7f, 0xcc, 0x81, 0xd2, 0x38, 0xb7, 0xbd, 0x9e, | 
 | 	0x7d, 0xec, 0xf5, 0xbc, 0xf8, 0x42, 0xd8, 0x8e, 0x7c, 0x04, 0xa5, 0x7e, 0x62, 0x3f, 0xb4, 0x73, | 
 | 	0x65, 0x67, 0xeb, 0x3a, 0x3b, 0xd3, 0x54, 0x82, 0x7c, 0x0d, 0x2b, 0x11, 0x0f, 0xcf, 0x3d, 0x87, | 
 | 	0x33, 0x3b, 0xa3, 0xb9, 0x9e, 0xdf, 0x2a, 0x3c, 0xa8, 0xec, 0xfc, 0xcf, 0x2c, 0x4d, 0x5d, 0x89, | 
 | 	0xcf, 0x2e, 0x84, 0x2e, 0x47, 0x97, 0x89, 0xea, 0xbf, 0xf2, 0xb0, 0x3c, 0x03, 0x4c, 0x3e, 0x80, | 
 | 	0x7a, 0x14, 0xdb, 0x61, 0x3c, 0xb6, 0x2b, 0x0b, 0x79, 0x14, 0x87, 0x9e, 0x13, 0xe3, 0x0e, 0x0a, | 
 | 	0x74, 0x15, 0xf9, 0xa9, 0x6d, 0x69, 0xc2, 0x25, 0xef, 0xc2, 0x2a, 0xf7, 0xdd, 0x59, 0x72, 0x79, | 
 | 	0x94, 0x5b, 0xe1, 0xbe, 0x7b, 0x59, 0xea, 0x6d, 0x58, 0xe9, 0xf3, 0xd0, 0x39, 0xb3, 0xfd, 0x98, | 
 | 	0x79, 0xee, 0x58, 0x46, 0xdc, 0x86, 0x32, 0x25, 0x23, 0x9e, 0xee, 0xa6, 0x12, 0xdb, 0x30, 0xda, | 
 | 	0xd0, 0x84, 0xc0, 0x1c, 0x0a, 0xd4, 0x12, 0x56, 0x06, 0xdf, 0x06, 0x12, 0xf2, 0x28, 0x18, 0x86, | 
 | 	0x0e, 0x8f, 0xc6, 0xf0, 0xdb, 0x78, 0x1a, 0x9b, 0xb3, 0x6c, 0x48, 0x47, 0x68, 0x5a, 0x4b, 0x05, | 
 | 	0x53, 0x6d, 0x2d, 0xa8, 0x4e, 0x9c, 0xc5, 0x3c, 0x9e, 0xc5, 0xcc, 0x53, 0x9d, 0x38, 0x84, 0x09, | 
 | 	0x29, 0xf5, 0x77, 0x15, 0xa8, 0x4e, 0x98, 0xfd, 0x1e, 0x54, 0x32, 0x66, 0x40, 0x4b, 0x97, 0x29, | 
 | 	0x8c, 0x77, 0x4f, 0x36, 0x01, 0xc6, 0xbb, 0x46, 0x8b, 0x96, 0x69, 0x39, 0xdd, 0x2c, 0xb9, 0x0b, | 
 | 	0x65, 0x79, 0x6c, 0x11, 0x77, 0xd0, 0x76, 0x05, 0x5a, 0x42, 0x42, 0x97, 0x3b, 0xc2, 0xd3, 0xdc, | 
 | 	0x61, 0xe2, 0x2e, 0x82, 0x2f, 0x1d, 0xa5, 0x32, 0xa2, 0x09, 0xc8, 0x3d, 0xa8, 0x44, 0x83, 0x20, | 
 | 	0x8e, 0x18, 0xba, 0x1f, 0xfa, 0x5b, 0x81, 0x02, 0x92, 0x2c, 0x41, 0xc1, 0xf9, 0x11, 0x10, 0x0c, | 
 | 	0xb8, 0x8f, 0xd6, 0x2b, 0xd0, 0x32, 0x52, 0x8c, 0x01, 0xf7, 0xc9, 0xff, 0x82, 0x92, 0xdd, 0x20, | 
 | 	0x8b, 0xed, 0xd3, 0x7a, 0x11, 0x17, 0xb9, 0x94, 0xa5, 0x5b, 0xf6, 0x29, 0xf9, 0x10, 0xca, 0xa9, | 
 | 	0x59, 0xeb, 0xa5, 0x9b, 0x1c, 0xc3, 0x18, 0x4f, 0x1e, 0x42, 0x6d, 0x60, 0x5f, 0xf4, 0xb9, 0x1f, | 
 | 	0xb3, 0x60, 0x80, 0x1b, 0xf2, 0xdc, 0x7a, 0x79, 0xab, 0x20, 0x26, 0x4a, 0x18, 0x06, 0xd2, 0x75, | 
 | 	0x97, 0x3c, 0x05, 0x08, 0xb9, 0x33, 0x0c, 0x43, 0x2e, 0x42, 0x08, 0xe0, 0x4c, 0x8f, 0xae, 0x3b, | 
 | 	0xa8, 0x6d, 0x9a, 0x8a, 0xd0, 0x8c, 0x38, 0xb1, 0x81, 0x44, 0xce, 0x19, 0x77, 0x87, 0x3d, 0xce, | 
 | 	0xf8, 0x4b, 0x87, 0xe3, 0x24, 0xf5, 0x0a, 0x9e, 0xfe, 0xce, 0xb5, 0x4a, 0xbb, 0x89, 0xa8, 0x36, | 
 | 	0x92, 0xa4, 0xb5, 0x68, 0x9a, 0x44, 0xde, 0x83, 0xa2, 0xcb, 0x07, 0x41, 0xe4, 0xc5, 0xf5, 0x2a, | 
 | 	0x2e, 0xf6, 0xee, 0x2c, 0xbd, 0x2d, 0x09, 0xa1, 0x23, 0x2c, 0xf9, 0x18, 0x2a, 0x7e, 0xc0, 0xa2, | 
 | 	0xb3, 0xe0, 0x05, 0x3b, 0xe1, 0xbc, 0xbe, 0x70, 0xb5, 0x45, 0x3b, 0x41, 0xf7, 0x2c, 0x78, 0xb1, | 
 | 	0xc7, 0x39, 0x2d, 0xfb, 0xa3, 0x4f, 0x72, 0x08, 0xcb, 0x21, 0xff, 0xd5, 0xd0, 0x0b, 0x39, 0x73, | 
 | 	0x42, 0xee, 0x7a, 0x31, 0x73, 0xec, 0xd0, 0xad, 0x2f, 0x62, 0x56, 0x78, 0x73, 0xf6, 0xc1, 0x20, | 
 | 	0xbc, 0x89, 0xe8, 0xa6, 0x1d, 0xba, 0xc2, 0x4f, 0xa6, 0x48, 0xe4, 0xbf, 0x60, 0x31, 0xf6, 0x9c, | 
 | 	0xe7, 0x3c, 0x66, 0xf1, 0xc5, 0x00, 0xef, 0xec, 0x12, 0x9e, 0x52, 0x55, 0x52, 0xad, 0x8b, 0x81, | 
 | 	0xb8, 0xb6, 0x31, 0xac, 0x27, 0x76, 0x10, 0x59, 0x29, 0x14, 0xc6, 0x0d, 0xce, 0x79, 0x18, 0x7a, | 
 | 	0x2e, 0x8f, 0xea, 0x0a, 0xee, 0xe4, 0x83, 0x9b, 0x1a, 0xd7, 0xf3, 0x4f, 0xe9, 0xb0, 0xc7, 0x8d, | 
 | 	0x91, 0x3c, 0x5d, 0x8b, 0x66, 0x33, 0xc8, 0x37, 0x50, 0x73, 0x02, 0xff, 0xc4, 0x0b, 0xfb, 0xd2, | 
 | 	0x27, 0xfa, 0x81, 0xcb, 0xeb, 0x35, 0xdc, 0xf0, 0x3b, 0xd7, 0xce, 0xd6, 0xcc, 0x48, 0x1e, 0x04, | 
 | 	0x2e, 0xa7, 0x8a, 0x33, 0x45, 0xd9, 0xf8, 0x16, 0x60, 0x7c, 0x8b, 0xc8, 0x03, 0x50, 0x42, 0x3e, | 
 | 	0xe0, 0x76, 0xcc, 0x86, 0x7e, 0xec, 0xf5, 0xd0, 0x03, 0x65, 0x24, 0x5d, 0x94, 0xf4, 0x43, 0x41, | 
 | 	0x16, 0x4e, 0x38, 0x46, 0xf2, 0x73, 0x1e, 0x5e, 0x20, 0x52, 0x26, 0xce, 0x04, 0xa9, 0x09, 0x72, | 
 | 	0x97, 0x3b, 0x1b, 0x5f, 0x40, 0xed, 0xd2, 0x95, 0x22, 0x1f, 0x01, 0x88, 0xe0, 0xcb, 0x42, 0xdb, | 
 | 	0x3f, 0xe5, 0x49, 0xba, 0x99, 0x79, 0x0f, 0x44, 0x14, 0xa6, 0x02, 0x44, 0xcb, 0xf1, 0xe8, 0x73, | 
 | 	0x23, 0x82, 0xb5, 0x2b, 0x0c, 0x29, 0x9c, 0xae, 0x67, 0x47, 0x31, 0x13, 0x5a, 0xec, 0xe3, 0x1e, | 
 | 	0xcf, 0x6c, 0x61, 0x49, 0x30, 0x76, 0x13, 0xba, 0xd8, 0xc3, 0x63, 0x20, 0x27, 0x5e, 0x38, 0x0d, | 
 | 	0x96, 0x19, 0x40, 0x41, 0x4e, 0x06, 0xad, 0xfe, 0x1a, 0x94, 0x69, 0x7b, 0x92, 0xfb, 0xb0, 0xd9, | 
 | 	0x34, 0x3a, 0x7b, 0x3a, 0x3d, 0x68, 0x58, 0xba, 0xd1, 0x61, 0x07, 0x46, 0x4b, 0x63, 0x87, 0x9d, | 
 | 	0xae, 0xa9, 0x35, 0xf5, 0x3d, 0x5d, 0x6b, 0x29, 0xb7, 0x66, 0x43, 0xba, 0xcf, 0x3a, 0xcd, 0x7d, | 
 | 	0x6a, 0x74, 0x8c, 0xc3, 0xae, 0x92, 0x23, 0x2a, 0xbc, 0x7e, 0x19, 0xd2, 0xc8, 0x62, 0xf2, 0xea, | 
 | 	0x1f, 0x72, 0x50, 0x4e, 0xa3, 0x0c, 0x59, 0x07, 0x11, 0x31, 0x4f, 0x4e, 0xc6, 0xf1, 0xb7, 0x88, | 
 | 	0xe3, 0x24, 0xf8, 0x22, 0xcb, 0xb7, 0xfb, 0x3c, 0x0d, 0xbe, 0x82, 0xd2, 0xb1, 0xfb, 0x9c, 0xac, | 
 | 	0x41, 0x31, 0x0c, 0x82, 0xbe, 0x10, 0x94, 0x69, 0xeb, 0xb6, 0x18, 0xca, 0xa8, 0x8c, 0x0c, 0x14, | 
 | 	0x93, 0x09, 0xaa, 0x24, 0x08, 0x28, 0xb5, 0x09, 0x30, 0xb0, 0xc3, 0xf8, 0x82, 0x45, 0xde, 0x77, | 
 | 	0xb2, 0xc2, 0x99, 0xa7, 0x65, 0xa4, 0x74, 0xbd, 0xef, 0xb8, 0xda, 0x80, 0x72, 0x7a, 0x4e, 0x42, | 
 | 	0xd1, 0x31, 0x3f, 0xf5, 0xfc, 0x8c, 0xe5, 0x4b, 0x48, 0x10, 0x26, 0x5f, 0x83, 0xa2, 0x48, 0xbc, | 
 | 	0x63, 0x3b, 0xdf, 0xe6, 0xbe, 0x2b, 0xac, 0xfb, 0xdb, 0x1c, 0x54, 0x92, 0x1c, 0xff, 0x0b, 0x54, | 
 | 	0x23, 0xef, 0x41, 0x31, 0xc9, 0x37, 0x49, 0x01, 0x72, 0xf7, 0x15, 0x05, 0x08, 0x1d, 0x61, 0xd5, | 
 | 	0x3f, 0x56, 0xa1, 0x98, 0x10, 0x7f, 0x76, 0x96, 0x23, 0x30, 0x87, 0xa6, 0x94, 0x56, 0xc6, 0x6f, | 
 | 	0xb2, 0x05, 0x15, 0x97, 0x47, 0x4e, 0xe8, 0xc9, 0x88, 0x2c, 0xad, 0x9c, 0x25, 0x91, 0xff, 0x83, | 
 | 	0xf9, 0x41, 0xe8, 0x25, 0x55, 0x64, 0x65, 0x67, 0x7d, 0xd6, 0xb2, 0x4d, 0x01, 0xa0, 0x12, 0x47, | 
 | 	0xfe, 0x1f, 0xe6, 0x45, 0x28, 0x8a, 0x92, 0x22, 0xe1, 0x8d, 0x99, 0xfb, 0x9c, 0xf0, 0x95, 0x88, | 
 | 	0x4a, 0x09, 0xf2, 0x31, 0xcc, 0x9d, 0x04, 0x61, 0xbf, 0x5e, 0x44, 0x0b, 0xbd, 0xf9, 0x0a, 0x0b, | 
 | 	0xe9, 0x7e, 0x6c, 0x3f, 0xe7, 0x7b, 0x41, 0xd8, 0xdf, 0xcd, 0xd7, 0x73, 0x14, 0xc5, 0xc8, 0x1e, | 
 | 	0x54, 0x3c, 0xa4, 0x33, 0xd4, 0xb2, 0x82, 0xf3, 0xdf, 0x4c, 0x0b, 0x05, 0x2f, 0xfd, 0x26, 0x5f, | 
 | 	0xc3, 0xea, 0x80, 0x87, 0x2c, 0x89, 0xc0, 0x59, 0x95, 0x77, 0x7e, 0x8a, 0xca, 0xe5, 0x01, 0x0f, | 
 | 	0x2d, 0xd4, 0x31, 0x26, 0x92, 0x2e, 0x2c, 0x0d, 0x42, 0x3e, 0xca, 0xc2, 0x22, 0xba, 0x63, 0x16, | 
 | 	0x5f, 0xdc, 0x79, 0xf8, 0x0a, 0xa5, 0xdb, 0x66, 0x2a, 0x22, 0x42, 0x3f, 0x5d, 0x1c, 0x4c, 0x8c, | 
 | 	0xc9, 0xfb, 0x50, 0x8a, 0xed, 0x97, 0x2c, 0xb4, 0x63, 0x5e, 0x2f, 0x5f, 0x9d, 0xfc, 0x2c, 0xfb, | 
 | 	0x25, 0xb5, 0x63, 0x4e, 0x8b, 0xb1, 0xfc, 0x98, 0x5d, 0x0f, 0xc0, 0xec, 0x7a, 0x20, 0x93, 0x5f, | 
 | 	0x2b, 0xff, 0x79, 0x7e, 0xad, 0xfe, 0x32, 0xf9, 0x75, 0xe1, 0x67, 0xe6, 0xd7, 0x4f, 0xa1, 0x62, | 
 | 	0x63, 0x0b, 0xc3, 0x7a, 0x9e, 0xff, 0xbc, 0xbe, 0x88, 0xf7, 0xed, 0xf5, 0x99, 0xd9, 0x0b, 0x61, | 
 | 	0x6d, 0xcf, 0x7f, 0x4e, 0xc1, 0x4e, 0xbf, 0xc9, 0x87, 0x30, 0x87, 0x67, 0xb7, 0x84, 0x0b, 0x79, | 
 | 	0x55, 0x33, 0x31, 0xfa, 0x8b, 0x07, 0x87, 0x42, 0x62, 0xf6, 0x4c, 0x76, 0xaf, 0x2b, 0x57, 0xcf, | 
 | 	0x6e, 0xa5, 0xe9, 0x9e, 0xc2, 0x38, 0xf5, 0x13, 0x0d, 0x16, 0x42, 0xde, 0xb3, 0x63, 0xee, 0xb2, | 
 | 	0x3e, 0x77, 0x3d, 0xbb, 0x5e, 0xbb, 0xba, 0x8e, 0xa6, 0x12, 0x78, 0x20, 0x70, 0xb4, 0x1a, 0x66, | 
 | 	0x46, 0xe4, 0x0c, 0x36, 0xd2, 0x0e, 0x29, 0x8e, 0x43, 0xef, 0x78, 0x18, 0x73, 0x76, 0x6e, 0xf7, | 
 | 	0x86, 0x18, 0x3f, 0x08, 0xea, 0x7c, 0xf4, 0xaa, 0x3e, 0x69, 0x24, 0xf4, 0xa5, 0x90, 0xd1, 0x5d, | 
 | 	0xba, 0x16, 0xcd, 0x66, 0x90, 0x7d, 0x58, 0x7c, 0x61, 0x7b, 0x71, 0xcf, 0x8b, 0x62, 0x26, 0x83, | 
 | 	0xc3, 0x32, 0x5e, 0x84, 0xfb, 0xb3, 0xb4, 0x1f, 0x25, 0x48, 0x19, 0x1a, 0x16, 0x5e, 0x64, 0x87, | 
 | 	0xea, 0xb7, 0xb0, 0x38, 0xe9, 0x0c, 0xe4, 0x1e, 0xdc, 0x35, 0xa9, 0x66, 0x36, 0x9e, 0x89, 0x66, | 
 | 	0x92, 0x59, 0xcf, 0xcc, 0xe9, 0x7c, 0x57, 0x85, 0x12, 0xd5, 0xbe, 0x38, 0xd4, 0xa9, 0xd6, 0x52, | 
 | 	0x72, 0x62, 0x64, 0x98, 0x22, 0xa9, 0x89, 0xbe, 0x93, 0xd4, 0x60, 0xa1, 0x63, 0x58, 0xac, 0x7b, | 
 | 	0x68, 0x9a, 0x06, 0xb5, 0xb4, 0x96, 0x52, 0x50, 0xff, 0x3c, 0x8e, 0xfb, 0xa8, 0xff, 0x35, 0xa8, | 
 | 	0x77, 0x35, 0xfa, 0xa5, 0xde, 0xd4, 0x66, 0x29, 0x7f, 0x03, 0xee, 0x4d, 0x70, 0x5b, 0x7a, 0x47, | 
 | 	0xef, 0x7c, 0xce, 0xa8, 0x26, 0xa8, 0x98, 0x3c, 0x95, 0x1c, 0x79, 0x1d, 0x36, 0x26, 0x40, 0x7b, | 
 | 	0x86, 0xd1, 0x62, 0x06, 0x6d, 0x69, 0x54, 0xef, 0x7c, 0xae, 0xe4, 0xc9, 0x26, 0xac, 0x4f, 0xf0, | 
 | 	0xb5, 0x2f, 0x71, 0x2b, 0x7a, 0xf3, 0xa9, 0x66, 0x29, 0x05, 0xd1, 0x38, 0x4f, 0xb0, 0x2d, 0xaa, | 
 | 	0x9b, 0xcc, 0x32, 0x0e, 0xa9, 0x32, 0xa7, 0x7e, 0x0f, 0xf3, 0x18, 0x7d, 0x45, 0x9b, 0x82, 0xf1, | 
 | 	0x97, 0xf5, 0x3d, 0x27, 0x0c, 0xa2, 0x24, 0xcf, 0x55, 0x90, 0x76, 0x80, 0x24, 0xf2, 0x06, 0x2c, | 
 | 	0x24, 0x75, 0xd5, 0x05, 0x73, 0x44, 0xd5, 0x26, 0x53, 0x44, 0x75, 0x44, 0x6c, 0x8a, 0x02, 0xe2, | 
 | 	0x31, 0x10, 0x21, 0x23, 0x2a, 0xca, 0x24, 0x26, 0x88, 0x6e, 0x44, 0xe6, 0x0c, 0x25, 0xe1, 0xc8, | 
 | 	0xa0, 0x60, 0xd9, 0xa7, 0xea, 0x3f, 0xe6, 0x60, 0x69, 0x2a, 0x98, 0x93, 0xb7, 0x61, 0xb9, 0xef, | 
 | 	0xf9, 0xcc, 0x76, 0xcf, 0x6d, 0xdf, 0xe1, 0x2c, 0x39, 0x5c, 0xb9, 0xa0, 0xfd, 0x5b, 0xb4, 0xd6, | 
 | 	0xf7, 0xfc, 0x86, 0xe4, 0xed, 0x4a, 0x16, 0x79, 0x0a, 0xaa, 0x90, 0x48, 0x90, 0xec, 0x78, 0x78, | 
 | 	0x72, 0xc2, 0x43, 0x76, 0xcc, 0x4f, 0x82, 0x90, 0xb3, 0x51, 0x5b, 0x2c, 0xdb, 0xa6, 0xfd, 0x5b, | 
 | 	0x74, 0xb3, 0xef, 0xf9, 0x89, 0xe4, 0x2e, 0x22, 0x77, 0x11, 0xa8, 0xc9, 0x06, 0x99, 0x7c, 0x0a, | 
 | 	0xaf, 0x65, 0xa7, 0x0f, 0xfc, 0x9e, 0xe7, 0x73, 0xe6, 0x88, 0x81, 0x58, 0x63, 0x92, 0xe5, 0xd7, | 
 | 	0xc7, 0xab, 0x30, 0x10, 0xd1, 0x1c, 0x01, 0xc8, 0x17, 0x70, 0x47, 0x38, 0x49, 0x22, 0xd2, 0x93, | 
 | 	0x55, 0xae, 0x08, 0x5e, 0x85, 0x6b, 0x32, 0x20, 0xa6, 0xa2, 0x65, 0x21, 0xdb, 0xcc, 0x88, 0x8a, | 
 | 	0x30, 0xf6, 0x11, 0x80, 0x1f, 0xa4, 0x41, 0x70, 0xee, 0x26, 0x7a, 0xca, 0x52, 0x40, 0x48, 0x7f, | 
 | 	0x03, 0x8a, 0xed, 0xf6, 0xbd, 0x28, 0x12, 0x0b, 0x19, 0x04, 0x3d, 0xcf, 0xb9, 0xc0, 0x6c, 0xbc, | 
 | 	0xb8, 0xf3, 0xe4, 0x06, 0xc9, 0x75, 0xbb, 0x31, 0x92, 0x35, 0x51, 0x94, 0x2e, 0xd9, 0x93, 0x04, | 
 | 	0xf5, 0x37, 0xb0, 0x34, 0x85, 0x21, 0x5b, 0xf0, 0x5a, 0xa3, 0x75, 0xa0, 0x77, 0xbb, 0xa2, 0xfa, | 
 | 	0x33, 0x8d, 0xb6, 0xde, 0x7c, 0x36, 0x75, 0xf1, 0x97, 0xa0, 0x62, 0xe9, 0x07, 0x1a, 0xeb, 0x5a, | 
 | 	0x54, 0x6f, 0x5a, 0x4a, 0x4e, 0xb8, 0x12, 0x12, 0xf6, 0xda, 0xda, 0x57, 0xfa, 0x6e, 0x5b, 0x53, | 
 | 	0xf2, 0xe4, 0xbf, 0x41, 0x15, 0xa4, 0x16, 0xd3, 0x3a, 0x16, 0x7d, 0xc6, 0x8e, 0x74, 0x6b, 0x3f, | 
 | 	0x65, 0xb3, 0xd6, 0x21, 0x95, 0xfe, 0x51, 0xd8, 0x5d, 0x01, 0x72, 0xf9, 0xfc, 0xd5, 0x6d, 0x28, | 
 | 	0x26, 0x19, 0x4b, 0xdc, 0x5c, 0xbc, 0xd6, 0x6c, 0xc0, 0x43, 0x87, 0xfb, 0xf2, 0x31, 0x65, 0x9e, | 
 | 	0x56, 0x91, 0x68, 0x4a, 0x9a, 0xfa, 0xf7, 0x3c, 0xac, 0x5e, 0xca, 0xc2, 0x7b, 0x1e, 0xef, 0xb9, | 
 | 	0x64, 0x11, 0xf2, 0x9e, 0x8b, 0x36, 0x2b, 0xd3, 0xbc, 0x27, 0xe2, 0x91, 0x0c, 0xdf, 0xf2, 0xf5, | 
 | 	0xee, 0xdd, 0x1b, 0xe5, 0x73, 0xd4, 0xb4, 0x8d, 0xbf, 0x99, 0x58, 0xbe, 0x02, 0xf3, 0x3d, 0xfb, | 
 | 	0x98, 0xf7, 0x12, 0x5f, 0x92, 0x03, 0x41, 0xc5, 0x38, 0x5a, 0x2f, 0x60, 0x32, 0x95, 0x03, 0x51, | 
 | 	0xc0, 0x79, 0x11, 0x4b, 0xb2, 0x91, 0x8b, 0xd7, 0xa0, 0x44, 0xc1, 0x8b, 0x92, 0x94, 0xe5, 0xaa, | 
 | 	0xbf, 0xcf, 0x41, 0x39, 0x9d, 0x40, 0xb8, 0xfd, 0x9e, 0xae, 0xb5, 0x5b, 0xb3, 0xc2, 0x8e, 0x02, | 
 | 	0xd5, 0xee, 0xbe, 0x41, 0x2d, 0xd6, 0xe8, 0x74, 0x8f, 0x34, 0xaa, 0xe4, 0xc8, 0x02, 0x94, 0xcd, | 
 | 	0x06, 0x6d, 0x7c, 0x4e, 0x1b, 0xe6, 0xbe, 0x92, 0x27, 0xcb, 0xb0, 0x74, 0x70, 0xd8, 0xb6, 0x74, | 
 | 	0xb3, 0xad, 0xb1, 0xe6, 0xbe, 0xa1, 0x37, 0x35, 0xa5, 0x40, 0x16, 0x01, 0x9a, 0xfb, 0x5a, 0xf3, | 
 | 	0xe9, 0xae, 0xf1, 0x95, 0xd6, 0x55, 0xe6, 0x44, 0x2c, 0x6c, 0x51, 0xc3, 0x6c, 0x19, 0x47, 0x1d, | 
 | 	0x65, 0x9e, 0x54, 0xa0, 0xb8, 0x6b, 0x18, 0x6d, 0xad, 0xd1, 0x51, 0x6e, 0xab, 0x7f, 0xcd, 0x41, | 
 | 	0xed, 0x92, 0x09, 0xc8, 0x67, 0x30, 0x7f, 0x22, 0xd6, 0x57, 0xcf, 0x61, 0x72, 0x78, 0x78, 0x73, | 
 | 	0xc3, 0x51, 0x29, 0x48, 0xde, 0x85, 0x15, 0xd9, 0xe1, 0x60, 0xb3, 0xe5, 0x0c, 0xa3, 0x38, 0xe8, | 
 | 	0xf3, 0x30, 0x42, 0xf3, 0x95, 0xf0, 0xe2, 0xcb, 0x0e, 0x48, 0xb8, 0x72, 0x73, 0xc4, 0x25, 0x4f, | 
 | 	0x44, 0x19, 0x10, 0x0f, 0x43, 0x5f, 0x5c, 0x8f, 0xb1, 0x50, 0x61, 0x2c, 0x94, 0xb2, 0x53, 0x21, | 
 | 	0xf5, 0x6f, 0x39, 0x28, 0x26, 0xf5, 0x08, 0x79, 0x32, 0xae, 0x5e, 0x72, 0xd7, 0xd5, 0xb1, 0x69, | 
 | 	0xed, 0x32, 0x15, 0x49, 0x26, 0xe2, 0xc1, 0xb8, 0x5f, 0xc8, 0x44, 0x92, 0xac, 0xdb, 0x8b, 0xde, | 
 | 	0xe2, 0x33, 0xa8, 0x26, 0xba, 0x64, 0xa6, 0x2f, 0xe0, 0x75, 0xdb, 0xbc, 0x72, 0x6a, 0xbc, 0x57, | 
 | 	0x95, 0x44, 0x44, 0x0c, 0xd4, 0x10, 0xca, 0x69, 0x5d, 0x44, 0x1e, 0x41, 0x41, 0x84, 0x8f, 0x6b, | 
 | 	0x37, 0x20, 0x50, 0xe4, 0x03, 0x28, 0x9d, 0x70, 0xfe, 0x13, 0xe6, 0x2d, 0x9e, 0x70, 0xfc, 0x50, | 
 | 	0xff, 0x94, 0x03, 0x18, 0x97, 0x3d, 0x44, 0x81, 0xc2, 0x30, 0xec, 0x25, 0xed, 0x86, 0xf8, 0x24, | 
 | 	0x1b, 0x50, 0xea, 0xd9, 0xfe, 0xe9, 0xd0, 0x3e, 0x1d, 0xa5, 0x90, 0x74, 0x4c, 0xde, 0xc2, 0xf7, | 
 | 	0x42, 0x7c, 0xed, 0xe3, 0x2e, 0x73, 0x82, 0xa1, 0x1f, 0x87, 0x17, 0x89, 0x1b, 0xd4, 0xc6, 0x9c, | 
 | 	0xa6, 0x64, 0x90, 0x4f, 0xa0, 0x34, 0xe8, 0xd9, 0x31, 0x16, 0xd7, 0x73, 0xb8, 0x4a, 0xf5, 0xea, | 
 | 	0x2a, 0xcc, 0x4c, 0x90, 0x34, 0x95, 0x51, 0xff, 0x92, 0x03, 0x18, 0x17, 0x49, 0x33, 0xde, 0x4d, | 
 | 	0xe4, 0xb2, 0x27, 0xdf, 0x4d, 0x1e, 0x41, 0x2d, 0x3a, 0x0b, 0xc2, 0x98, 0x65, 0x5b, 0x1f, 0xb9, | 
 | 	0x11, 0x05, 0x19, 0xad, 0x59, 0xfd, 0x4f, 0xe1, 0x86, 0xfd, 0xcf, 0x5b, 0x40, 0x92, 0xc4, 0x79, | 
 | 	0xb9, 0xb3, 0xaa, 0x49, 0x4e, 0x46, 0xbf, 0xfa, 0x43, 0x1e, 0xaa, 0xd9, 0x1a, 0x6d, 0x86, 0xbd, | 
 | 	0x3f, 0x49, 0xa2, 0x55, 0xfe, 0xea, 0x46, 0x21, 0xab, 0x61, 0x1b, 0x7f, 0x33, 0x31, 0xaa, 0x0e, | 
 | 	0x45, 0xc7, 0x96, 0xcb, 0x90, 0x79, 0x7c, 0x34, 0x24, 0x1d, 0xa8, 0x8c, 0x2a, 0xbf, 0xd1, 0x22, | 
 | 	0x2b, 0x3b, 0x8f, 0xaf, 0x9d, 0xa0, 0x31, 0x96, 0xa1, 0x59, 0x05, 0x1b, 0xf7, 0xa1, 0x92, 0xe1, | 
 | 	0x89, 0x8e, 0x33, 0xe6, 0x2f, 0xe3, 0x64, 0x2f, 0xf8, 0xad, 0x3e, 0x86, 0x72, 0xba, 0x3e, 0xb2, | 
 | 	0x02, 0xca, 0x8c, 0xe0, 0x56, 0x86, 0x79, 0x73, 0xdf, 0xb0, 0x0c, 0x25, 0xa7, 0x1e, 0xc1, 0xda, | 
 | 	0x15, 0xc5, 0xa6, 0x28, 0x78, 0xc6, 0x55, 0x6b, 0x7a, 0xd2, 0xe9, 0x72, 0x04, 0x64, 0x1d, 0x4a, | 
 | 	0x69, 0x39, 0x2b, 0xcf, 0xb7, 0x78, 0x2e, 0xa5, 0xd5, 0x1f, 0x72, 0xb0, 0x30, 0x51, 0x68, 0x8a, | 
 | 	0xbb, 0x23, 0xbc, 0x3d, 0xf3, 0xaa, 0x90, 0x26, 0x19, 0xdf, 0x1c, 0x3d, 0x2c, 0x20, 0xca, 0x7e, | 
 | 	0x99, 0x45, 0xe5, 0x13, 0x94, 0xfd, 0x72, 0x8c, 0xfa, 0x04, 0xee, 0x46, 0xc3, 0xc1, 0x20, 0x08, | 
 | 	0xe3, 0x88, 0xd9, 0xae, 0xeb, 0x09, 0x6b, 0xd8, 0x3d, 0x0c, 0xfd, 0x3c, 0x92, 0xcf, 0xf3, 0x25, | 
 | 	0xba, 0x3e, 0x82, 0x34, 0x52, 0x04, 0x95, 0x80, 0x87, 0x4f, 0xa0, 0x9c, 0x3a, 0x26, 0x59, 0x05, | 
 | 	0xb2, 0xa7, 0x7f, 0xa5, 0xb5, 0x18, 0x6d, 0x58, 0x1a, 0x6b, 0x69, 0x7b, 0x8d, 0xc3, 0xb6, 0xa5, | 
 | 	0xdc, 0x12, 0xd1, 0xdc, 0xd4, 0x28, 0x33, 0x35, 0xda, 0x15, 0x55, 0xe6, 0xc3, 0xef, 0xa1, 0x76, | 
 | 	0xa9, 0xf9, 0x11, 0xf5, 0x69, 0x52, 0xfc, 0xb2, 0x26, 0xd5, 0x5a, 0xba, 0xc5, 0x9a, 0x0d, 0xda, | 
 | 	0xba, 0x5c, 0xc4, 0xce, 0x02, 0x35, 0x8d, 0x4e, 0x4b, 0x4f, 0x4a, 0x65, 0x2c, 0x62, 0x67, 0x81, | 
 | 	0x1a, 0xed, 0xa3, 0xc6, 0xb3, 0xae, 0x92, 0x7f, 0xf8, 0x63, 0x0e, 0x16, 0x27, 0xfd, 0x54, 0x94, | 
 | 	0xe6, 0x8d, 0x26, 0x3e, 0x20, 0x99, 0xed, 0x86, 0xb5, 0x67, 0xd0, 0x83, 0xcb, 0x13, 0x4f, 0x03, | 
 | 	0x8e, 0xb4, 0x5d, 0xd6, 0x30, 0xcd, 0xb6, 0xde, 0xcc, 0x54, 0xcf, 0xd3, 0xa0, 0x03, 0x63, 0x57, | 
 | 	0x6f, 0x6b, 0x02, 0xab, 0xe4, 0xc9, 0x5d, 0x58, 0x9b, 0xe6, 0x37, 0x3a, 0x2d, 0x6a, 0xe8, 0x2d, | 
 | 	0xa5, 0x40, 0xd6, 0x60, 0x79, 0x9a, 0xa9, 0x1b, 0x5d, 0x65, 0xee, 0xf8, 0x36, 0xfe, 0xfb, 0xef, | 
 | 	0xc9, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xe5, 0xfd, 0x18, 0xc8, 0x0d, 0x1c, 0x00, 0x00, | 
 | } |