| // Code generated by protoc-gen-go. DO NOT EDIT. |
| // source: github.com/maps-booking-v3/feeds/feeds.proto |
| |
| /* |
| Package maps_booking_feeds is a generated protocol buffer package. |
| |
| It is generated from these files: |
| github.com/maps-booking-v3/feeds/feeds.proto |
| |
| It has these top-level messages: |
| FeedMetadata |
| AvailabilityFeed |
| ServiceAvailability |
| Availability |
| Resources |
| TimeRange |
| ServiceFeed |
| Service |
| Price |
| SchedulingRules |
| TaxRate |
| ServiceIntakeFormField |
| ServiceIntakeForm |
| Deposit |
| NoShowFee |
| ActionLink |
| TicketType |
| RelatedMedia |
| ServiceAttributeValueId |
| WaitlistRules |
| */ |
| package maps_booking_feeds |
| |
| import proto "github.com/golang/protobuf/proto" |
| import fmt "fmt" |
| import math "math" |
| |
| // Reference imports to suppress errors if they are not otherwise used. |
| var _ = proto.Marshal |
| var _ = fmt.Errorf |
| var _ = math.Inf |
| |
| // This is a compile-time assertion to ensure that this generated file |
| // is compatible with the proto package it is being compiled against. |
| // A compilation error at this line likely means your copy of the |
| // proto package needs to be updated. |
| const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package |
| |
| // 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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []int{0, 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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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,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" json:"shard_number,omitempty"` |
| TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards" 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" 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" json:"generation_timestamp,omitempty"` |
| } |
| |
| func (m *FeedMetadata) Reset() { *m = FeedMetadata{} } |
| func (m *FeedMetadata) String() string { return proto.CompactTextString(m) } |
| func (*FeedMetadata) ProtoMessage() {} |
| func (*FeedMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } |
| |
| 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" json:"metadata,omitempty"` |
| ServiceAvailability []*ServiceAvailability `protobuf:"bytes,2,rep,name=service_availability,json=serviceAvailability" json:"service_availability,omitempty"` |
| } |
| |
| func (m *AvailabilityFeed) Reset() { *m = AvailabilityFeed{} } |
| func (m *AvailabilityFeed) String() string { return proto.CompactTextString(m) } |
| func (*AvailabilityFeed) ProtoMessage() {} |
| func (*AvailabilityFeed) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } |
| |
| 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" json:"start_timestamp_restrict,omitempty"` |
| EndTimestampRestrict int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict" 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" json:"merchant_id_restrict,omitempty"` |
| ServiceIdRestrict string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict" 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" json:"resources_restrict,omitempty"` |
| Availability []*Availability `protobuf:"bytes,5,rep,name=availability" json:"availability,omitempty"` |
| } |
| |
| func (m *ServiceAvailability) Reset() { *m = ServiceAvailability{} } |
| func (m *ServiceAvailability) String() string { return proto.CompactTextString(m) } |
| func (*ServiceAvailability) ProtoMessage() {} |
| func (*ServiceAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } |
| |
| 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" 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" 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" 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" 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" json:"spots_total,omitempty"` |
| SpotsOpen int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen" 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" 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" 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" 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" 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" 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" 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" 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,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" 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" json:"scheduling_rule_overrides,omitempty"` |
| } |
| |
| func (m *Availability) Reset() { *m = Availability{} } |
| func (m *Availability) String() string { return proto.CompactTextString(m) } |
| func (*Availability) ProtoMessage() {} |
| func (*Availability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } |
| |
| 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 |
| } |
| |
| // 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. |
| 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" 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" json:"repeat_every_sec,omitempty"` |
| } |
| |
| 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 fileDescriptor0, []int{3, 0} } |
| |
| 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" json:"time_range,omitempty"` |
| } |
| |
| 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 fileDescriptor0, []int{3, 1} |
| } |
| |
| 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" json:"last_bookable_sec,omitempty"` |
| } |
| |
| 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 fileDescriptor0, []int{3, 2} |
| } |
| |
| func (m *Availability_SchedulingRuleOverrides) GetLastBookableSec() int64 { |
| if m != nil { |
| return m.LastBookableSec |
| } |
| 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" 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" 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" 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" 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" json:"party_size,omitempty"` |
| } |
| |
| func (m *Resources) Reset() { *m = Resources{} } |
| func (m *Resources) String() string { return proto.CompactTextString(m) } |
| func (*Resources) ProtoMessage() {} |
| func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } |
| |
| 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" json:"begin_sec,omitempty"` |
| EndSec int64 `protobuf:"varint,2,opt,name=end_sec,json=endSec" json:"end_sec,omitempty"` |
| } |
| |
| func (m *TimeRange) Reset() { *m = TimeRange{} } |
| func (m *TimeRange) String() string { return proto.CompactTextString(m) } |
| func (*TimeRange) ProtoMessage() {} |
| func (*TimeRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } |
| |
| 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" json:"metadata,omitempty"` |
| Service []*Service `protobuf:"bytes,2,rep,name=service" json:"service,omitempty"` |
| } |
| |
| func (m *ServiceFeed) Reset() { *m = ServiceFeed{} } |
| func (m *ServiceFeed) String() string { return proto.CompactTextString(m) } |
| func (*ServiceFeed) ProtoMessage() {} |
| func (*ServiceFeed) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } |
| |
| 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" 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" 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" 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" 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" json:"price,omitempty"` |
| // Rules to book/cancel an appointment. (optional) |
| Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules" 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" json:"form,omitempty"` |
| // 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" 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" 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,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" 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" 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" 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" 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,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" 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,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" 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" 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" 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" json:"waitlist_rules,omitempty"` |
| } |
| |
| func (m *Service) Reset() { *m = Service{} } |
| func (m *Service) String() string { return proto.CompactTextString(m) } |
| func (*Service) ProtoMessage() {} |
| func (*Service) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } |
| |
| 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 |
| } |
| |
| 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" 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" 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" json:"pricing_option_tag,omitempty"` |
| } |
| |
| func (m *Price) Reset() { *m = Price{} } |
| func (m *Price) String() string { return proto.CompactTextString(m) } |
| func (*Price) ProtoMessage() {} |
| func (*Price) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } |
| |
| 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" 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" json:"late_cancellation_fee,omitempty"` |
| // The fee for no-show without canceling. |
| NoshowFee *Price `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee" json:"noshow_fee,omitempty"` |
| // 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,enum=maps.booking.feeds.SchedulingRules_AdmissionPolicy" json:"admission_policy,omitempty"` |
| } |
| |
| func (m *SchedulingRules) Reset() { *m = SchedulingRules{} } |
| func (m *SchedulingRules) String() string { return proto.CompactTextString(m) } |
| func (*SchedulingRules) ProtoMessage() {} |
| func (*SchedulingRules) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } |
| |
| type isSchedulingRules_MinBookingBuffer interface { |
| isSchedulingRules_MinBookingBuffer() |
| } |
| |
| type SchedulingRules_MinAdvanceBooking struct { |
| MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking,oneof"` |
| } |
| type SchedulingRules_MinBookingBufferBeforeEndTime struct { |
| MinBookingBufferBeforeEndTime int64 `protobuf:"varint,6,opt,name=min_booking_buffer_before_end_time,json=minBookingBufferBeforeEndTime,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 |
| } |
| |
| func (m *SchedulingRules) GetLateCancellationFee() *Price { |
| if m != nil { |
| return m.LateCancellationFee |
| } |
| return nil |
| } |
| |
| 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_OneofFuncs is for the internal use of the proto package. |
| func (*SchedulingRules) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { |
| return _SchedulingRules_OneofMarshaler, _SchedulingRules_OneofUnmarshaler, _SchedulingRules_OneofSizer, []interface{}{ |
| (*SchedulingRules_MinAdvanceBooking)(nil), |
| (*SchedulingRules_MinBookingBufferBeforeEndTime)(nil), |
| } |
| } |
| |
| func _SchedulingRules_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { |
| m := msg.(*SchedulingRules) |
| // min_booking_buffer |
| switch x := m.MinBookingBuffer.(type) { |
| case *SchedulingRules_MinAdvanceBooking: |
| b.EncodeVarint(1<<3 | proto.WireVarint) |
| b.EncodeVarint(uint64(x.MinAdvanceBooking)) |
| case *SchedulingRules_MinBookingBufferBeforeEndTime: |
| b.EncodeVarint(6<<3 | proto.WireVarint) |
| b.EncodeVarint(uint64(x.MinBookingBufferBeforeEndTime)) |
| case nil: |
| default: |
| return fmt.Errorf("SchedulingRules.MinBookingBuffer has unexpected type %T", x) |
| } |
| return nil |
| } |
| |
| func _SchedulingRules_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { |
| m := msg.(*SchedulingRules) |
| switch tag { |
| case 1: // min_booking_buffer.min_advance_booking |
| if wire != proto.WireVarint { |
| return true, proto.ErrInternalBadWireType |
| } |
| x, err := b.DecodeVarint() |
| m.MinBookingBuffer = &SchedulingRules_MinAdvanceBooking{int64(x)} |
| return true, err |
| case 6: // min_booking_buffer.min_booking_buffer_before_end_time |
| if wire != proto.WireVarint { |
| return true, proto.ErrInternalBadWireType |
| } |
| x, err := b.DecodeVarint() |
| m.MinBookingBuffer = &SchedulingRules_MinBookingBufferBeforeEndTime{int64(x)} |
| return true, err |
| default: |
| return false, nil |
| } |
| } |
| |
| func _SchedulingRules_OneofSizer(msg proto.Message) (n int) { |
| m := msg.(*SchedulingRules) |
| // min_booking_buffer |
| switch x := m.MinBookingBuffer.(type) { |
| case *SchedulingRules_MinAdvanceBooking: |
| n += proto.SizeVarint(1<<3 | proto.WireVarint) |
| n += proto.SizeVarint(uint64(x.MinAdvanceBooking)) |
| case *SchedulingRules_MinBookingBufferBeforeEndTime: |
| n += proto.SizeVarint(6<<3 | proto.WireVarint) |
| n += proto.SizeVarint(uint64(x.MinBookingBufferBeforeEndTime)) |
| case nil: |
| default: |
| panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) |
| } |
| return n |
| } |
| |
| // 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" json:"micro_percent,omitempty"` |
| } |
| |
| func (m *TaxRate) Reset() { *m = TaxRate{} } |
| func (m *TaxRate) String() string { return proto.CompactTextString(m) } |
| func (*TaxRate) ProtoMessage() {} |
| func (*TaxRate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } |
| |
| 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" json:"id,omitempty"` |
| // The type of this field. (required) |
| Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,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" json:"label,omitempty"` |
| // For MULTIPLE_CHOICE, CHECKBOXES, or DROPDOWN, the values to enumerate. |
| // (optional) |
| Value []string `protobuf:"bytes,3,rep,name=value" 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" json:"is_required,omitempty"` |
| } |
| |
| func (m *ServiceIntakeFormField) Reset() { *m = ServiceIntakeFormField{} } |
| func (m *ServiceIntakeFormField) String() string { return proto.CompactTextString(m) } |
| func (*ServiceIntakeFormField) ProtoMessage() {} |
| func (*ServiceIntakeFormField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } |
| |
| 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" 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" json:"first_time_customers,omitempty"` |
| // 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" json:"returning_customers,omitempty"` |
| } |
| |
| func (m *ServiceIntakeForm) Reset() { *m = ServiceIntakeForm{} } |
| func (m *ServiceIntakeForm) String() string { return proto.CompactTextString(m) } |
| func (*ServiceIntakeForm) ProtoMessage() {} |
| func (*ServiceIntakeForm) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } |
| |
| func (m *ServiceIntakeForm) GetField() []*ServiceIntakeFormField { |
| if m != nil { |
| return m.Field |
| } |
| return nil |
| } |
| |
| func (m *ServiceIntakeForm) GetFirstTimeCustomers() bool { |
| if m != nil { |
| return m.FirstTimeCustomers |
| } |
| return false |
| } |
| |
| 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" json:"deposit,omitempty"` |
| // Minimum advance cancellation for the deposit. |
| MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec" 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,enum=maps.booking.feeds.PriceType" json:"deposit_type,omitempty"` |
| } |
| |
| func (m *Deposit) Reset() { *m = Deposit{} } |
| func (m *Deposit) String() string { return proto.CompactTextString(m) } |
| func (*Deposit) ProtoMessage() {} |
| func (*Deposit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } |
| |
| 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" json:"fee,omitempty"` |
| // Defines how the fee is determined from the availability. |
| FeeType PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,enum=maps.booking.feeds.PriceType" json:"fee_type,omitempty"` |
| } |
| |
| func (m *NoShowFee) Reset() { *m = NoShowFee{} } |
| func (m *NoShowFee) String() string { return proto.CompactTextString(m) } |
| func (*NoShowFee) ProtoMessage() {} |
| func (*NoShowFee) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } |
| |
| 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" 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" 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" 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,enum=maps.booking.feeds.ActionPlatform" json:"platform,omitempty"` |
| } |
| |
| func (m *ActionLink) Reset() { *m = ActionLink{} } |
| func (m *ActionLink) String() string { return proto.CompactTextString(m) } |
| func (*ActionLink) ProtoMessage() {} |
| func (*ActionLink) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } |
| |
| 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 (where a ticket can be a |
| // spot on a raft trip, an admission to a museum, etc.) with different prices |
| // and/or availabilities due to different user types or different service |
| // attributes. |
| 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" json:"ticket_type_id,omitempty"` |
| // This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc. |
| ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription" 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" json:"price,omitempty"` |
| } |
| |
| func (m *TicketType) Reset() { *m = TicketType{} } |
| func (m *TicketType) String() string { return proto.CompactTextString(m) } |
| func (*TicketType) ProtoMessage() {} |
| func (*TicketType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } |
| |
| 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 |
| } |
| |
| // 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" json:"url,omitempty"` |
| // Type of this media source. |
| Type RelatedMedia_MediaType `protobuf:"varint,2,opt,name=type,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" 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" json:"attribution,omitempty"` |
| } |
| |
| func (m *RelatedMedia) Reset() { *m = RelatedMedia{} } |
| func (m *RelatedMedia) String() string { return proto.CompactTextString(m) } |
| func (*RelatedMedia) ProtoMessage() {} |
| func (*RelatedMedia) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } |
| |
| 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" json:"text,omitempty"` |
| } |
| |
| 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 fileDescriptor0, []int{17, 0} } |
| |
| 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" 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" json:"value_id,omitempty"` |
| } |
| |
| func (m *ServiceAttributeValueId) Reset() { *m = ServiceAttributeValueId{} } |
| func (m *ServiceAttributeValueId) String() string { return proto.CompactTextString(m) } |
| func (*ServiceAttributeValueId) ProtoMessage() {} |
| func (*ServiceAttributeValueId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } |
| |
| 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" 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" 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" json:"supports_additional_request,omitempty"` |
| } |
| |
| func (m *WaitlistRules) Reset() { *m = WaitlistRules{} } |
| func (m *WaitlistRules) String() string { return proto.CompactTextString(m) } |
| func (*WaitlistRules) ProtoMessage() {} |
| func (*WaitlistRules) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } |
| |
| 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.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") |
| 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.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) |
| } |
| |
| func init() { proto.RegisterFile("github.com/maps-booking-v3/feeds/feeds.proto", fileDescriptor0) } |
| |
| var fileDescriptor0 = []byte{ |
| // 2706 bytes of a gzipped FileDescriptorProto |
| 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4f, 0x73, 0xe3, 0xc6, |
| 0xb1, 0x5f, 0x92, 0xd2, 0x92, 0x6c, 0x52, 0x12, 0x34, 0xd2, 0x4a, 0x94, 0xd6, 0xeb, 0x95, 0xe1, |
| 0xe7, 0xf7, 0xf6, 0xed, 0xae, 0x69, 0x3f, 0xad, 0xed, 0xf2, 0x2b, 0xff, 0xa5, 0x48, 0xc8, 0x42, |
| 0x2d, 0x45, 0xc0, 0x43, 0xc8, 0xf2, 0xfa, 0x90, 0x31, 0x04, 0x8c, 0x24, 0xd4, 0x92, 0x00, 0x03, |
| 0x80, 0xda, 0x95, 0xab, 0x5c, 0xa9, 0xca, 0x29, 0xc7, 0x9c, 0xe3, 0xaa, 0xdc, 0x53, 0xf1, 0x87, |
| 0x48, 0xae, 0xf9, 0x06, 0xf9, 0x14, 0x39, 0xe6, 0x90, 0x4b, 0x6a, 0x7a, 0x00, 0x10, 0x94, 0xa8, |
| 0x95, 0x1c, 0xfb, 0x42, 0x01, 0xdd, 0xbf, 0xee, 0x99, 0xe9, 0x99, 0xfe, 0x75, 0x0f, 0x04, 0x8f, |
| 0x4f, 0xbc, 0xf8, 0x74, 0x7c, 0xd4, 0x74, 0x82, 0xe1, 0x3b, 0x43, 0x7b, 0x14, 0xbd, 0x7d, 0x14, |
| 0x04, 0xcf, 0x3d, 0xff, 0xe4, 0xed, 0xb3, 0x27, 0xef, 0x1c, 0x73, 0xee, 0x46, 0xf2, 0xb7, 0x39, |
| 0x0a, 0x83, 0x38, 0x20, 0x44, 0x40, 0x9a, 0x09, 0xa4, 0x89, 0x1a, 0xf5, 0x1f, 0x45, 0xa8, 0xef, |
| 0x72, 0xee, 0xee, 0xf3, 0xd8, 0x76, 0xed, 0xd8, 0x26, 0x43, 0x58, 0x1b, 0x85, 0x81, 0xc3, 0xa3, |
| 0xc8, 0xf3, 0x4f, 0x98, 0xe7, 0x47, 0x71, 0x38, 0x76, 0x62, 0x2f, 0xf0, 0x1b, 0x85, 0xad, 0xc2, |
| 0x83, 0xc5, 0xed, 0x0f, 0x9a, 0x97, 0xbd, 0x34, 0xf3, 0x1e, 0x9a, 0x66, 0x66, 0xae, 0x4f, 0xac, |
| 0xe9, 0x9d, 0xd1, 0x2c, 0x31, 0x79, 0x03, 0xea, 0xd1, 0xa9, 0x1d, 0xba, 0xcc, 0x1f, 0x0f, 0x8f, |
| 0x78, 0xd8, 0x28, 0x6e, 0x15, 0x1e, 0xcc, 0xd3, 0x1a, 0xca, 0x7a, 0x28, 0x12, 0x90, 0x38, 0x88, |
| 0xed, 0x01, 0x43, 0x61, 0xd4, 0x28, 0x49, 0x08, 0xca, 0xfa, 0x28, 0x22, 0xab, 0x30, 0xef, 0x07, |
| 0xbe, 0xc3, 0x1b, 0xf3, 0x5b, 0x85, 0x07, 0x73, 0x54, 0xbe, 0x90, 0xff, 0x83, 0xd5, 0x13, 0xee, |
| 0xf3, 0xd0, 0x16, 0x23, 0xb1, 0xd8, 0x1b, 0xf2, 0x28, 0xb6, 0x87, 0xa3, 0xc6, 0xdc, 0x56, 0xe1, |
| 0x41, 0x89, 0xae, 0x4c, 0x74, 0x56, 0xaa, 0x52, 0x6d, 0xb8, 0x33, 0x73, 0xfa, 0x64, 0x05, 0x96, |
| 0x4c, 0x6a, 0xb4, 0xb5, 0x7e, 0x9f, 0x1d, 0xf4, 0x9e, 0xf6, 0x8c, 0xc3, 0x9e, 0x72, 0x8b, 0xac, |
| 0xc3, 0x4a, 0x2a, 0x6c, 0xf5, 0x59, 0xdb, 0xd8, 0x37, 0xbb, 0x9a, 0xa5, 0x29, 0x05, 0xb2, 0x09, |
| 0x6b, 0x39, 0x85, 0xde, 0x6b, 0x53, 0x6d, 0x5f, 0xeb, 0x59, 0xad, 0xae, 0x52, 0x54, 0x7f, 0x2c, |
| 0x80, 0xd2, 0x3a, 0xb3, 0xbd, 0x81, 0x7d, 0xe4, 0x0d, 0xbc, 0xf8, 0x5c, 0xc4, 0x8e, 0x7c, 0x0c, |
| 0x95, 0x61, 0x12, 0x3f, 0x8c, 0x73, 0x6d, 0x7b, 0xeb, 0xba, 0x38, 0xd3, 0xcc, 0x82, 0x7c, 0x03, |
| 0xab, 0x11, 0x0f, 0xcf, 0x3c, 0x87, 0x33, 0x3b, 0xe7, 0xb9, 0x51, 0xdc, 0x2a, 0x3d, 0xa8, 0x6d, |
| 0xff, 0xcf, 0x2c, 0x4f, 0x7d, 0x89, 0xcf, 0x4f, 0x84, 0xae, 0x44, 0x97, 0x85, 0xea, 0xbf, 0x8a, |
| 0xb0, 0x32, 0x03, 0x4c, 0x3e, 0x84, 0x46, 0x14, 0xdb, 0x61, 0x3c, 0x89, 0x2b, 0x0b, 0x79, 0x14, |
| 0x87, 0x9e, 0x13, 0xe3, 0x0a, 0x4a, 0x74, 0x0d, 0xf5, 0x59, 0x6c, 0x69, 0xa2, 0x25, 0xef, 0xc1, |
| 0x1a, 0xf7, 0xdd, 0x59, 0x76, 0x45, 0xb4, 0x5b, 0xe5, 0xbe, 0x7b, 0xd9, 0xea, 0x5d, 0x58, 0x1d, |
| 0xf2, 0xd0, 0x39, 0xb5, 0xfd, 0x98, 0x79, 0xee, 0xc4, 0x46, 0x9c, 0x86, 0x2a, 0x25, 0xa9, 0x4e, |
| 0x77, 0x33, 0x8b, 0x26, 0xa4, 0x0b, 0x9a, 0x32, 0x98, 0x43, 0x83, 0xe5, 0x44, 0x95, 0xc3, 0x77, |
| 0x81, 0x84, 0x3c, 0x0a, 0xc6, 0xa1, 0xc3, 0xa3, 0x09, 0xfc, 0x36, 0xee, 0xc6, 0xbd, 0x59, 0x31, |
| 0xa4, 0x29, 0x9a, 0x2e, 0x67, 0x86, 0x99, 0xb7, 0x0e, 0xd4, 0xa7, 0xf6, 0x62, 0x1e, 0xf7, 0x62, |
| 0xe6, 0xae, 0x4e, 0x6d, 0xc2, 0x94, 0x95, 0xfa, 0xcf, 0x0a, 0xd4, 0xa7, 0xc2, 0x7e, 0x1f, 0x6a, |
| 0xb9, 0x30, 0x60, 0xa4, 0xab, 0x14, 0x26, 0xab, 0x27, 0xf7, 0x00, 0x26, 0xab, 0xc6, 0x88, 0x56, |
| 0x69, 0x35, 0x5b, 0x2c, 0xb9, 0x0b, 0x55, 0xb9, 0x6d, 0x11, 0x77, 0x30, 0x76, 0x25, 0x5a, 0x41, |
| 0x41, 0x9f, 0x3b, 0x22, 0xd3, 0xdc, 0x71, 0x92, 0x2e, 0x42, 0x2f, 0x13, 0xa5, 0x96, 0xca, 0x04, |
| 0xe4, 0x3e, 0xd4, 0xa2, 0x51, 0x10, 0x47, 0x0c, 0xd3, 0x0f, 0xf3, 0xad, 0x44, 0x01, 0x45, 0x96, |
| 0x90, 0xe0, 0xf8, 0x08, 0x08, 0x46, 0xdc, 0xc7, 0xe8, 0x95, 0x68, 0x15, 0x25, 0xc6, 0x88, 0xfb, |
| 0xe4, 0x7f, 0x41, 0xc9, 0x2f, 0x90, 0xc5, 0xf6, 0x49, 0xa3, 0x8c, 0x93, 0x5c, 0xca, 0xcb, 0x2d, |
| 0xfb, 0x84, 0x7c, 0x04, 0xd5, 0x2c, 0xac, 0x8d, 0xca, 0x4d, 0xb6, 0x61, 0x82, 0x27, 0x0f, 0x61, |
| 0x79, 0x64, 0x9f, 0x0f, 0xb9, 0x1f, 0xb3, 0x60, 0x84, 0x0b, 0xf2, 0xdc, 0x46, 0x75, 0xab, 0x24, |
| 0x06, 0x4a, 0x14, 0x06, 0xca, 0x75, 0x97, 0x3c, 0x05, 0x08, 0xb9, 0x33, 0x0e, 0x43, 0x2e, 0x28, |
| 0x04, 0x70, 0xa4, 0x47, 0xd7, 0x6d, 0x54, 0x93, 0x66, 0x26, 0x34, 0x67, 0x4e, 0x6c, 0x20, 0x91, |
| 0x73, 0xca, 0xdd, 0xf1, 0x80, 0x33, 0xfe, 0xd2, 0xe1, 0x38, 0x48, 0xa3, 0x86, 0xbb, 0xbf, 0x7d, |
| 0xad, 0xd3, 0x7e, 0x62, 0xaa, 0xa5, 0x96, 0x74, 0x39, 0xba, 0x28, 0x22, 0xef, 0x43, 0xd9, 0xe5, |
| 0xa3, 0x20, 0xf2, 0xe2, 0x46, 0x1d, 0x27, 0x7b, 0x77, 0x96, 0xdf, 0x8e, 0x84, 0xd0, 0x14, 0x4b, |
| 0x3e, 0x81, 0x9a, 0x1f, 0xb0, 0xe8, 0x34, 0x78, 0xc1, 0x8e, 0x39, 0x6f, 0x2c, 0x5c, 0x1d, 0xd1, |
| 0x5e, 0xd0, 0x3f, 0x0d, 0x5e, 0xec, 0x72, 0x4e, 0xab, 0x7e, 0xfa, 0x48, 0x0e, 0x60, 0x25, 0xe4, |
| 0xbf, 0x1e, 0x7b, 0x21, 0x67, 0x4e, 0xc8, 0x5d, 0x2f, 0x66, 0x8e, 0x1d, 0xba, 0x8d, 0x45, 0xac, |
| 0x0a, 0x6f, 0xcd, 0xde, 0x18, 0x84, 0xb7, 0x11, 0xdd, 0xb6, 0x43, 0x57, 0xe4, 0xc9, 0x05, 0x11, |
| 0xf9, 0x2f, 0x58, 0x8c, 0x3d, 0xe7, 0x39, 0x8f, 0x59, 0x7c, 0x3e, 0xc2, 0x33, 0xbb, 0x84, 0xbb, |
| 0x54, 0x97, 0x52, 0xeb, 0x7c, 0x24, 0x8e, 0x6d, 0x0c, 0x1b, 0x49, 0x1c, 0x44, 0x55, 0x0a, 0x45, |
| 0x70, 0x83, 0x33, 0x1e, 0x86, 0x9e, 0xcb, 0xa3, 0x86, 0x82, 0x2b, 0xf9, 0xf0, 0xa6, 0xc1, 0xf5, |
| 0xfc, 0x13, 0x3a, 0x1e, 0x70, 0x23, 0xb5, 0xa7, 0xeb, 0xd1, 0x6c, 0xc5, 0xe6, 0xb7, 0x00, 0x93, |
| 0x5d, 0x26, 0x0f, 0x40, 0x09, 0xf9, 0x88, 0xdb, 0x31, 0x1b, 0xfb, 0xb1, 0x37, 0xc0, 0x0c, 0x91, |
| 0x4c, 0xb7, 0x28, 0xe5, 0x07, 0x42, 0x2c, 0x92, 0x64, 0x82, 0xe4, 0x67, 0x3c, 0x3c, 0x47, 0xa4, |
| 0x2c, 0x6c, 0x09, 0x52, 0x13, 0xe2, 0x3e, 0x77, 0x36, 0xbf, 0x84, 0xe5, 0x4b, 0x5b, 0x4e, 0x3e, |
| 0x06, 0x10, 0xe4, 0xc8, 0x42, 0xdb, 0x3f, 0xe1, 0x49, 0x39, 0x98, 0xb9, 0x4f, 0x82, 0x25, 0xa9, |
| 0x00, 0xd1, 0x6a, 0x9c, 0x3e, 0x6e, 0x6a, 0xb0, 0x7e, 0xc5, 0x42, 0x45, 0x52, 0x0c, 0xec, 0x28, |
| 0x66, 0xc2, 0x8b, 0x7d, 0x34, 0xe0, 0xb9, 0x25, 0x2c, 0x09, 0xc5, 0x4e, 0x22, 0xef, 0x73, 0x47, |
| 0xfd, 0x43, 0x01, 0xaa, 0x59, 0x66, 0x91, 0x0d, 0x10, 0x2c, 0x71, 0x7c, 0x3c, 0xe1, 0x9c, 0x32, |
| 0xbe, 0x27, 0x84, 0x83, 0x2a, 0xdf, 0x1e, 0xf2, 0x8c, 0x70, 0x84, 0xa4, 0x67, 0x0f, 0x39, 0x59, |
| 0x87, 0x72, 0x18, 0x04, 0x43, 0x61, 0x28, 0xa9, 0xfa, 0xb6, 0x78, 0x95, 0x4c, 0x84, 0x0a, 0x34, |
| 0x93, 0xa4, 0x5c, 0x11, 0x02, 0xb4, 0xba, 0x07, 0x30, 0xb2, 0xc3, 0xf8, 0x9c, 0x45, 0xde, 0x77, |
| 0xb2, 0xaa, 0xcf, 0xd3, 0x2a, 0x4a, 0xfa, 0xde, 0x77, 0x5c, 0x6d, 0x41, 0x35, 0x5b, 0xbb, 0x70, |
| 0x74, 0xc4, 0x4f, 0x3c, 0x3f, 0xb7, 0x9a, 0x0a, 0x0a, 0xc4, 0x56, 0xac, 0x43, 0x59, 0x14, 0x9b, |
| 0x74, 0x07, 0x4a, 0xf4, 0x36, 0xf7, 0x5d, 0xb1, 0xbe, 0xdf, 0x16, 0xa0, 0x96, 0xd4, 0xb5, 0x5f, |
| 0xa0, 0x02, 0xbf, 0x0f, 0xe5, 0x84, 0x63, 0x93, 0xa2, 0x7b, 0xf7, 0x15, 0x45, 0x97, 0xa6, 0x58, |
| 0xf5, 0x8f, 0x75, 0x28, 0x27, 0xc2, 0x9f, 0xcd, 0xec, 0x04, 0xe6, 0x30, 0x94, 0x32, 0xca, 0xf8, |
| 0x4c, 0xb6, 0xa0, 0xe6, 0xf2, 0xc8, 0x09, 0x3d, 0xc9, 0x42, 0x32, 0xca, 0x79, 0x11, 0x79, 0x07, |
| 0xe6, 0x47, 0xa1, 0x97, 0x74, 0x4e, 0xb5, 0xed, 0x8d, 0x59, 0xd3, 0x36, 0x05, 0x80, 0x4a, 0x1c, |
| 0xf9, 0x7f, 0x98, 0x17, 0xe9, 0x17, 0x25, 0x85, 0xf1, 0xcd, 0x99, 0xeb, 0x9c, 0x3a, 0x7f, 0x11, |
| 0x95, 0x16, 0xe4, 0x13, 0x98, 0x3b, 0x0e, 0xc2, 0x61, 0xa3, 0x8c, 0x11, 0x7a, 0xeb, 0x15, 0x11, |
| 0xd2, 0xfd, 0xd8, 0x7e, 0xce, 0x77, 0x83, 0x70, 0xb8, 0x53, 0x6c, 0x14, 0x28, 0x9a, 0x91, 0x5d, |
| 0xa8, 0x79, 0x28, 0x67, 0xe8, 0x65, 0x15, 0xc7, 0xbf, 0x99, 0x17, 0x0a, 0x5e, 0xf6, 0x4c, 0xbe, |
| 0x81, 0xb5, 0x11, 0x0f, 0x59, 0xc2, 0x3a, 0x79, 0x97, 0x77, 0x7e, 0x8a, 0xcb, 0x95, 0x11, 0x0f, |
| 0x2d, 0xf4, 0x31, 0x11, 0x92, 0x3e, 0x2c, 0x8d, 0x42, 0x9e, 0x56, 0x1e, 0xc1, 0x68, 0x58, 0xb9, |
| 0x16, 0xb7, 0x1f, 0xbe, 0xc2, 0x69, 0xd3, 0xcc, 0x4c, 0x04, 0xdd, 0xd1, 0xc5, 0xd1, 0xd4, 0x3b, |
| 0xf9, 0x00, 0x2a, 0xb1, 0xfd, 0x92, 0x85, 0x76, 0xcc, 0x1b, 0xd5, 0xab, 0x09, 0xdf, 0xb2, 0x5f, |
| 0x52, 0x3b, 0xe6, 0xb4, 0x1c, 0xcb, 0x87, 0xd9, 0x35, 0x10, 0x66, 0xd7, 0xc0, 0x5c, 0x4d, 0xa9, |
| 0xfd, 0xe7, 0x35, 0xa5, 0xfe, 0xcb, 0xd4, 0x94, 0x85, 0x9f, 0x59, 0x53, 0x3e, 0x83, 0x9a, 0x8d, |
| 0x6d, 0x3b, 0x1b, 0x78, 0xfe, 0xf3, 0xc6, 0x22, 0x9e, 0xb7, 0xd7, 0x67, 0xd6, 0x07, 0x84, 0x75, |
| 0x3d, 0xff, 0x39, 0x05, 0x3b, 0x7b, 0x26, 0x1f, 0xc1, 0x1c, 0xee, 0xdd, 0x12, 0x4e, 0xe4, 0x55, |
| 0x0d, 0x74, 0xfa, 0x17, 0x37, 0x0e, 0x8d, 0xc4, 0xe8, 0xb9, 0x8a, 0xd6, 0x50, 0xae, 0x1e, 0xdd, |
| 0xca, 0x4a, 0x1c, 0x85, 0x49, 0xb9, 0x23, 0x1a, 0x2c, 0x84, 0x7c, 0x60, 0xc7, 0xdc, 0x65, 0x43, |
| 0xee, 0x7a, 0x76, 0x63, 0xf9, 0xea, 0xde, 0x91, 0x4a, 0xe0, 0xbe, 0xc0, 0xd1, 0x7a, 0x98, 0x7b, |
| 0x23, 0xa7, 0xb0, 0x99, 0xdd, 0x0a, 0xe2, 0x38, 0xf4, 0x8e, 0xc6, 0x31, 0x67, 0x67, 0xf6, 0x60, |
| 0x8c, 0xfc, 0x41, 0xd0, 0xe7, 0xa3, 0x57, 0xdd, 0x0d, 0x52, 0xa3, 0xaf, 0x84, 0x8d, 0xee, 0xd2, |
| 0xf5, 0x68, 0xb6, 0x82, 0xec, 0xc1, 0xe2, 0x0b, 0xdb, 0x8b, 0x07, 0x5e, 0x14, 0x33, 0x49, 0x0e, |
| 0x2b, 0x78, 0x10, 0xde, 0x98, 0xe5, 0xfd, 0x30, 0x41, 0x4a, 0x6a, 0x58, 0x78, 0x91, 0x7f, 0x55, |
| 0xbf, 0x85, 0xc5, 0xe9, 0x64, 0x20, 0xf7, 0xe1, 0xae, 0x49, 0x35, 0xb3, 0xf5, 0x4c, 0x5c, 0xa0, |
| 0x98, 0xf5, 0xcc, 0xd4, 0xd8, 0x41, 0xaf, 0x6f, 0x6a, 0x6d, 0x7d, 0x57, 0xd7, 0x3a, 0xca, 0x2d, |
| 0x52, 0x87, 0x0a, 0xd5, 0xbe, 0x3c, 0xd0, 0xa9, 0xd6, 0x51, 0x0a, 0xe2, 0xcd, 0x30, 0x2d, 0xdd, |
| 0xe8, 0x89, 0xbb, 0x16, 0x59, 0x86, 0x85, 0x9e, 0x61, 0xb1, 0xfe, 0x81, 0x69, 0x1a, 0xd4, 0xd2, |
| 0x3a, 0x4a, 0x49, 0xfd, 0xf3, 0x84, 0xf7, 0xd1, 0xff, 0x6b, 0xd0, 0xe8, 0x6b, 0xf4, 0x2b, 0xbd, |
| 0xad, 0xcd, 0x72, 0xfe, 0x26, 0xdc, 0x9f, 0xd2, 0x76, 0xf4, 0x9e, 0xde, 0xfb, 0x82, 0x51, 0x4d, |
| 0x48, 0x5b, 0x62, 0x1c, 0xa5, 0x40, 0x5e, 0x87, 0xcd, 0x29, 0xd0, 0xae, 0x61, 0x74, 0x98, 0x41, |
| 0x3b, 0x1a, 0xd5, 0x7b, 0x5f, 0x28, 0x45, 0x72, 0x0f, 0x36, 0xa6, 0xf4, 0xda, 0x57, 0xb8, 0x14, |
| 0xbd, 0xfd, 0x54, 0xb3, 0x94, 0x92, 0xb8, 0x2c, 0x4e, 0xa9, 0x2d, 0xaa, 0x9b, 0xcc, 0x32, 0x0e, |
| 0xa8, 0x32, 0xa7, 0x7e, 0x0f, 0xf3, 0xc8, 0xbe, 0xa2, 0x35, 0x47, 0xfe, 0x65, 0x43, 0xcf, 0x09, |
| 0x83, 0x28, 0xa9, 0x73, 0x35, 0x94, 0xed, 0xa3, 0x88, 0xbc, 0x09, 0x0b, 0x49, 0xaf, 0x72, 0xce, |
| 0x9c, 0xc0, 0x4d, 0x6b, 0x71, 0x3d, 0x15, 0xb6, 0x03, 0x97, 0x93, 0xc7, 0x40, 0x84, 0x8d, 0xe8, |
| 0xa2, 0x12, 0x4e, 0x10, 0x1d, 0xb8, 0xac, 0x19, 0x4a, 0xa2, 0x91, 0xa4, 0x60, 0xd9, 0x27, 0xea, |
| 0xdf, 0xe7, 0x60, 0xe9, 0x02, 0x99, 0x93, 0x77, 0x61, 0x65, 0xe8, 0xf9, 0xcc, 0x76, 0xcf, 0x6c, |
| 0xdf, 0xe1, 0x2c, 0xd9, 0x5c, 0x39, 0xa1, 0xbd, 0x5b, 0x74, 0x79, 0xe8, 0xf9, 0x2d, 0xa9, 0xdb, |
| 0x91, 0x2a, 0xf2, 0x14, 0x54, 0x61, 0x91, 0x20, 0xd9, 0xd1, 0xf8, 0xf8, 0x98, 0x87, 0xec, 0x88, |
| 0x1f, 0x07, 0x21, 0x67, 0xe9, 0x55, 0x50, 0x5e, 0x15, 0xf6, 0x6e, 0xd1, 0x7b, 0x43, 0xcf, 0x4f, |
| 0x2c, 0x77, 0x10, 0xb9, 0x83, 0x40, 0x4d, 0x5e, 0x0a, 0xc9, 0x67, 0xf0, 0x5a, 0x7e, 0xf8, 0xc0, |
| 0x1f, 0x78, 0x3e, 0x67, 0x8e, 0x78, 0x11, 0x73, 0x4c, 0xaa, 0xfc, 0xc6, 0x64, 0x16, 0x06, 0x22, |
| 0xda, 0x29, 0x80, 0x7c, 0x09, 0x77, 0x44, 0x92, 0x24, 0x26, 0x03, 0x79, 0xdb, 0x11, 0xe4, 0x55, |
| 0xba, 0xa6, 0x02, 0x62, 0x29, 0x5a, 0x11, 0xb6, 0xed, 0x9c, 0xa9, 0xa0, 0xb1, 0x8f, 0x01, 0xfc, |
| 0x20, 0x23, 0xc1, 0xb9, 0x9b, 0xf8, 0xa9, 0x4a, 0x03, 0x61, 0xfd, 0x2b, 0x50, 0x6c, 0x77, 0xe8, |
| 0x45, 0x91, 0x98, 0xc8, 0x28, 0x18, 0x78, 0xce, 0x39, 0x56, 0xe3, 0xc5, 0xed, 0x27, 0x37, 0x28, |
| 0xae, 0xcd, 0x56, 0x6a, 0x6b, 0xa2, 0x29, 0x5d, 0xb2, 0xa7, 0x05, 0xea, 0x6f, 0x60, 0xe9, 0x02, |
| 0x86, 0x6c, 0xc1, 0x6b, 0xad, 0xce, 0xbe, 0xde, 0xef, 0xeb, 0x46, 0x8f, 0x99, 0x46, 0x57, 0x6f, |
| 0x3f, 0xbb, 0x70, 0xf0, 0x97, 0xa0, 0x66, 0xe9, 0xfb, 0x1a, 0xeb, 0x5b, 0x54, 0x6f, 0x5b, 0x4a, |
| 0x41, 0xa4, 0x12, 0x0a, 0x76, 0xbb, 0xda, 0xd7, 0xfa, 0x4e, 0x57, 0x53, 0x8a, 0xe4, 0xbf, 0x41, |
| 0x15, 0xa2, 0x0e, 0xd3, 0x7a, 0x16, 0x7d, 0xc6, 0x0e, 0x75, 0x6b, 0x2f, 0x53, 0xb3, 0xce, 0x01, |
| 0x95, 0xf9, 0x51, 0xda, 0x59, 0x05, 0x72, 0x79, 0xff, 0xd5, 0x26, 0x94, 0x93, 0x8a, 0x25, 0x4e, |
| 0x2e, 0x1e, 0x6b, 0x36, 0xe2, 0xa1, 0xc3, 0x7d, 0xf9, 0x01, 0x61, 0x9e, 0xd6, 0x51, 0x68, 0x4a, |
| 0x99, 0xfa, 0xb7, 0x22, 0xac, 0x5d, 0xaa, 0xc2, 0xbb, 0x1e, 0x1f, 0xb8, 0x64, 0x11, 0x8a, 0x9e, |
| 0x8b, 0x31, 0xab, 0xd2, 0xa2, 0x27, 0xf8, 0x48, 0xd2, 0xb7, 0xfc, 0x62, 0xf5, 0xde, 0x8d, 0xea, |
| 0x39, 0x7a, 0x6a, 0xe2, 0x6f, 0x8e, 0xcb, 0x57, 0x61, 0x7e, 0x60, 0x1f, 0xf1, 0x41, 0x92, 0x4b, |
| 0xf2, 0x45, 0x48, 0x91, 0x47, 0x1b, 0x25, 0x2c, 0xa6, 0xf2, 0x45, 0x34, 0x70, 0x5e, 0xc4, 0x92, |
| 0x6a, 0xe4, 0xe2, 0x31, 0xa8, 0x50, 0xf0, 0xa2, 0xa4, 0x64, 0xb9, 0xea, 0xef, 0x0a, 0x50, 0xcd, |
| 0x06, 0x10, 0x69, 0xbf, 0xab, 0x6b, 0xdd, 0xce, 0x2c, 0xda, 0x51, 0xa0, 0xde, 0xdf, 0x33, 0xa8, |
| 0xc5, 0x5a, 0xbd, 0xfe, 0xa1, 0x46, 0x95, 0x02, 0x59, 0x80, 0xaa, 0xd9, 0xa2, 0xad, 0x2f, 0x68, |
| 0xcb, 0xdc, 0x53, 0x8a, 0x64, 0x05, 0x96, 0xf6, 0x0f, 0xba, 0x96, 0x6e, 0x76, 0x35, 0xd6, 0xde, |
| 0x33, 0xf4, 0xb6, 0xa6, 0x94, 0xc8, 0x22, 0x40, 0x7b, 0x4f, 0x6b, 0x3f, 0xdd, 0x31, 0xbe, 0xd6, |
| 0xfa, 0xca, 0x9c, 0xe0, 0xc2, 0x0e, 0x35, 0xcc, 0x8e, 0x71, 0xd8, 0x53, 0xe6, 0x49, 0x0d, 0xca, |
| 0x3b, 0x86, 0xd1, 0xd5, 0x5a, 0x3d, 0xe5, 0xb6, 0xfa, 0x97, 0x02, 0x2c, 0x5f, 0x0a, 0x01, 0xf9, |
| 0x1c, 0xe6, 0x8f, 0xc5, 0xfc, 0x1a, 0x05, 0x2c, 0x0e, 0x0f, 0x6f, 0x1e, 0x38, 0x2a, 0x0d, 0xc9, |
| 0x7b, 0xb0, 0x7a, 0xec, 0x85, 0x91, 0xfc, 0x2a, 0xc4, 0x9c, 0x71, 0x14, 0x07, 0x43, 0x1e, 0x46, |
| 0x18, 0xbe, 0x0a, 0x1e, 0x7c, 0x82, 0x7a, 0x91, 0xca, 0xed, 0x54, 0x4b, 0x9e, 0x88, 0x36, 0x20, |
| 0x1e, 0x87, 0xbe, 0x38, 0x1e, 0x13, 0xa3, 0xd2, 0xc4, 0x28, 0x53, 0x67, 0x46, 0xea, 0x5f, 0x0b, |
| 0x50, 0x4e, 0xfa, 0x11, 0xf2, 0x64, 0xd2, 0xbd, 0x14, 0xae, 0xeb, 0x63, 0xb3, 0xde, 0xe5, 0x02, |
| 0x93, 0x4c, 0xf1, 0xc1, 0xe4, 0xbe, 0x90, 0x63, 0x92, 0x7c, 0xda, 0x8b, 0xbb, 0xc5, 0xe7, 0x50, |
| 0x4f, 0x7c, 0xc9, 0x4a, 0x5f, 0xc2, 0xe3, 0x76, 0xef, 0xca, 0xa1, 0xf1, 0x5c, 0xd5, 0x12, 0x13, |
| 0xf1, 0xa2, 0x86, 0x50, 0xcd, 0xfa, 0x22, 0xf2, 0x08, 0x4a, 0x82, 0x3e, 0xae, 0x5d, 0x80, 0x40, |
| 0x91, 0x0f, 0xa1, 0x72, 0xcc, 0xf9, 0x4f, 0x18, 0xb7, 0x7c, 0xcc, 0xf1, 0x41, 0xfd, 0x53, 0x01, |
| 0x60, 0xd2, 0xf6, 0x10, 0x05, 0x4a, 0xe3, 0x70, 0x90, 0x5c, 0x37, 0xc4, 0x23, 0xd9, 0x84, 0xca, |
| 0xc0, 0xf6, 0x4f, 0xc6, 0xf6, 0x49, 0x5a, 0x42, 0xb2, 0x77, 0xf2, 0x36, 0x7e, 0x23, 0xc3, 0x2f, |
| 0x5c, 0xdc, 0x65, 0x4e, 0x30, 0xf6, 0xe3, 0xf0, 0x3c, 0x49, 0x83, 0xe5, 0x89, 0xa6, 0x2d, 0x15, |
| 0xe4, 0x53, 0xa8, 0x8c, 0x06, 0x76, 0x8c, 0xcd, 0xf5, 0x1c, 0xce, 0x52, 0xbd, 0xba, 0x0b, 0x33, |
| 0x13, 0x24, 0xcd, 0x6c, 0xd4, 0xdf, 0x17, 0x00, 0x26, 0x4d, 0xd2, 0x8c, 0x6f, 0x05, 0x72, 0xda, |
| 0xd3, 0xdf, 0x0a, 0x1e, 0xc1, 0x72, 0x74, 0x1a, 0x84, 0x31, 0xcb, 0x5f, 0x7d, 0xe4, 0x42, 0x14, |
| 0x54, 0x74, 0x66, 0xdd, 0x7f, 0x4a, 0x37, 0xbb, 0xff, 0xa8, 0x3f, 0x14, 0xa1, 0x9e, 0x6f, 0xba, |
| 0x66, 0x04, 0xf0, 0xd3, 0x84, 0x7e, 0x8a, 0x57, 0x77, 0xfe, 0x79, 0x0f, 0x4d, 0xfc, 0xcd, 0x91, |
| 0x4e, 0x03, 0xca, 0x8e, 0x2d, 0xa7, 0x2d, 0x0b, 0x73, 0xfa, 0x4a, 0x7a, 0x50, 0x4b, 0x5b, 0xb9, |
| 0xf4, 0x3e, 0x57, 0xdb, 0x7e, 0x7c, 0xed, 0x00, 0xad, 0x89, 0x0d, 0xcd, 0x3b, 0xd8, 0x7c, 0x03, |
| 0x6a, 0x39, 0x9d, 0xb8, 0x42, 0xc6, 0xfc, 0x65, 0x9c, 0xac, 0x05, 0x9f, 0xd5, 0xc7, 0x50, 0xcd, |
| 0xe6, 0x47, 0x56, 0x41, 0x99, 0xc1, 0x56, 0x55, 0x98, 0x37, 0xf7, 0x0c, 0xcb, 0x50, 0x0a, 0xea, |
| 0x21, 0xac, 0x5f, 0xd1, 0x3d, 0x8a, 0x0e, 0x66, 0xd2, 0x86, 0x66, 0x5b, 0x97, 0x4d, 0x47, 0x40, |
| 0x36, 0xa0, 0x92, 0xf5, 0xa7, 0x72, 0xc3, 0xca, 0x67, 0xd2, 0x5a, 0xfd, 0xa1, 0x00, 0x0b, 0x53, |
| 0x9d, 0xa3, 0x38, 0x0c, 0x22, 0x7d, 0x73, 0x9f, 0x09, 0xb2, 0xaa, 0xe1, 0x9b, 0xe9, 0x97, 0x02, |
| 0x44, 0xd9, 0x2f, 0xf3, 0xa8, 0x62, 0x82, 0xb2, 0x5f, 0x4e, 0x50, 0x9f, 0xc2, 0xdd, 0x68, 0x3c, |
| 0x1a, 0x05, 0x61, 0x1c, 0x31, 0xdb, 0x75, 0x3d, 0x11, 0x0d, 0x7b, 0x80, 0x5c, 0xce, 0x23, 0xf9, |
| 0x8d, 0xb9, 0x42, 0x37, 0x52, 0x48, 0x2b, 0x43, 0x50, 0x09, 0x78, 0xf8, 0x04, 0xaa, 0x59, 0xa6, |
| 0x91, 0x35, 0x20, 0xbb, 0xfa, 0xd7, 0x5a, 0x87, 0xd1, 0x96, 0xa5, 0xb1, 0x8e, 0xb6, 0xdb, 0x3a, |
| 0xe8, 0x5a, 0xca, 0x2d, 0x41, 0xcf, 0xa6, 0x46, 0x99, 0xa9, 0xd1, 0xbe, 0x68, 0x1b, 0x1f, 0x7e, |
| 0x0f, 0xcb, 0x97, 0x6e, 0x33, 0xa2, 0xe1, 0x4c, 0xba, 0x59, 0xd6, 0xa6, 0x5a, 0x47, 0xb7, 0x58, |
| 0xbb, 0x45, 0x3b, 0x97, 0xbb, 0xd2, 0x59, 0xa0, 0xb6, 0xd1, 0xeb, 0xe8, 0x49, 0xef, 0x8b, 0x5d, |
| 0xe9, 0x2c, 0x50, 0xab, 0x7b, 0xd8, 0x7a, 0xd6, 0x57, 0x8a, 0x0f, 0x7f, 0x2c, 0xc0, 0xe2, 0x74, |
| 0xe2, 0x89, 0x5e, 0xbb, 0xd5, 0xb6, 0xb0, 0x27, 0xe8, 0xb6, 0xac, 0x5d, 0x83, 0xee, 0x5f, 0x1e, |
| 0xf8, 0x22, 0xe0, 0x50, 0xdb, 0x61, 0x2d, 0xd3, 0xec, 0xea, 0xed, 0x5c, 0x3b, 0x7c, 0x11, 0xb4, |
| 0x6f, 0xec, 0xe8, 0x5d, 0x4d, 0x60, 0x95, 0x22, 0xb9, 0x0b, 0xeb, 0x17, 0xf5, 0xad, 0x5e, 0x87, |
| 0x1a, 0x7a, 0x47, 0x29, 0x91, 0x75, 0x58, 0xb9, 0xa8, 0xd4, 0x8d, 0xbe, 0x32, 0x77, 0x74, 0x1b, |
| 0xff, 0x87, 0xf5, 0xe4, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x88, 0x76, 0xcd, 0xf3, 0x1a, |
| 0x00, 0x00, |
| } |