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

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.33.0
// 	protoc        v4.25.3
// source: google/maps/routeoptimization/v1/route_optimization_service.proto

package routeoptimizationpb

import (
	context "context"
	reflect "reflect"
	sync "sync"

	longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	latlng "google.golang.org/genproto/googleapis/type/latlng"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	durationpb "google.golang.org/protobuf/types/known/durationpb"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// Data formats for input and output files.
type DataFormat int32

const (
	// Invalid value, format must not be UNSPECIFIED.
	DataFormat_DATA_FORMAT_UNSPECIFIED DataFormat = 0
	// JavaScript Object Notation.
	DataFormat_JSON DataFormat = 1
	// Protocol Buffers text format.  See
	// https://protobuf.dev/reference/protobuf/textformat-spec/
	DataFormat_PROTO_TEXT DataFormat = 2
)

// Enum value maps for DataFormat.
var (
	DataFormat_name = map[int32]string{
		0: "DATA_FORMAT_UNSPECIFIED",
		1: "JSON",
		2: "PROTO_TEXT",
	}
	DataFormat_value = map[string]int32{
		"DATA_FORMAT_UNSPECIFIED": 0,
		"JSON":                    1,
		"PROTO_TEXT":              2,
	}
)

func (x DataFormat) Enum() *DataFormat {
	p := new(DataFormat)
	*p = x
	return p
}

func (x DataFormat) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (DataFormat) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[0].Descriptor()
}

func (DataFormat) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[0]
}

func (x DataFormat) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use DataFormat.Descriptor instead.
func (DataFormat) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{0}
}

// Defines how the solver should handle the request. In all modes but
// `VALIDATE_ONLY`, if the request is invalid, you will receive an
// `INVALID_REQUEST` error. See
// [max_validation_errors][google.maps.routeoptimization.v1.OptimizeToursRequest.max_validation_errors]
// to cap the number of errors returned.
type OptimizeToursRequest_SolvingMode int32

const (
	// Solve the model.
	OptimizeToursRequest_DEFAULT_SOLVE OptimizeToursRequest_SolvingMode = 0
	// Only validates the model without solving it: populates as many
	// [OptimizeToursResponse.validation_errors][google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors]
	// as possible.
	OptimizeToursRequest_VALIDATE_ONLY OptimizeToursRequest_SolvingMode = 1
	// Only populates
	// [OptimizeToursResponse.validation_errors][google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors]
	// or
	// [OptimizeToursResponse.skipped_shipments][google.maps.routeoptimization.v1.OptimizeToursResponse.skipped_shipments],
	// and doesn't actually solve the rest of the request (`status` and `routes`
	// are unset in the response).
	// If infeasibilities in `injected_solution_constraint` routes are detected
	// they are populated in the
	// [OptimizeToursResponse.validation_errors][google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors]
	// field and
	// [OptimizeToursResponse.skipped_shipments][google.maps.routeoptimization.v1.OptimizeToursResponse.skipped_shipments]
	// is left empty.
	//
	// *IMPORTANT*: not all infeasible shipments are returned here, but only the
	// ones that are detected as infeasible during preprocessing.
	OptimizeToursRequest_DETECT_SOME_INFEASIBLE_SHIPMENTS OptimizeToursRequest_SolvingMode = 2
)

// Enum value maps for OptimizeToursRequest_SolvingMode.
var (
	OptimizeToursRequest_SolvingMode_name = map[int32]string{
		0: "DEFAULT_SOLVE",
		1: "VALIDATE_ONLY",
		2: "DETECT_SOME_INFEASIBLE_SHIPMENTS",
	}
	OptimizeToursRequest_SolvingMode_value = map[string]int32{
		"DEFAULT_SOLVE":                    0,
		"VALIDATE_ONLY":                    1,
		"DETECT_SOME_INFEASIBLE_SHIPMENTS": 2,
	}
)

func (x OptimizeToursRequest_SolvingMode) Enum() *OptimizeToursRequest_SolvingMode {
	p := new(OptimizeToursRequest_SolvingMode)
	*p = x
	return p
}

func (x OptimizeToursRequest_SolvingMode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (OptimizeToursRequest_SolvingMode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[1].Descriptor()
}

func (OptimizeToursRequest_SolvingMode) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[1]
}

func (x OptimizeToursRequest_SolvingMode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use OptimizeToursRequest_SolvingMode.Descriptor instead.
func (OptimizeToursRequest_SolvingMode) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{3, 0}
}

// Mode defining the behavior of the search, trading off latency versus
// solution quality. In all modes, the global request deadline is enforced.
type OptimizeToursRequest_SearchMode int32

const (
	// Unspecified search mode, equivalent to `RETURN_FAST`.
	OptimizeToursRequest_SEARCH_MODE_UNSPECIFIED OptimizeToursRequest_SearchMode = 0
	// Stop the search after finding the first good solution.
	OptimizeToursRequest_RETURN_FAST OptimizeToursRequest_SearchMode = 1
	// Spend all the available time to search for better solutions.
	OptimizeToursRequest_CONSUME_ALL_AVAILABLE_TIME OptimizeToursRequest_SearchMode = 2
)

// Enum value maps for OptimizeToursRequest_SearchMode.
var (
	OptimizeToursRequest_SearchMode_name = map[int32]string{
		0: "SEARCH_MODE_UNSPECIFIED",
		1: "RETURN_FAST",
		2: "CONSUME_ALL_AVAILABLE_TIME",
	}
	OptimizeToursRequest_SearchMode_value = map[string]int32{
		"SEARCH_MODE_UNSPECIFIED":    0,
		"RETURN_FAST":                1,
		"CONSUME_ALL_AVAILABLE_TIME": 2,
	}
)

func (x OptimizeToursRequest_SearchMode) Enum() *OptimizeToursRequest_SearchMode {
	p := new(OptimizeToursRequest_SearchMode)
	*p = x
	return p
}

func (x OptimizeToursRequest_SearchMode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (OptimizeToursRequest_SearchMode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[2].Descriptor()
}

func (OptimizeToursRequest_SearchMode) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[2]
}

func (x OptimizeToursRequest_SearchMode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use OptimizeToursRequest_SearchMode.Descriptor instead.
func (OptimizeToursRequest_SearchMode) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{3, 1}
}

// Modes defining how the appearance of incompatible shipments are restricted
// on the same route.
type ShipmentTypeIncompatibility_IncompatibilityMode int32

const (
	// Unspecified incompatibility mode. This value should never be used.
	ShipmentTypeIncompatibility_INCOMPATIBILITY_MODE_UNSPECIFIED ShipmentTypeIncompatibility_IncompatibilityMode = 0
	// In this mode, two shipments with incompatible types can never share the
	// same vehicle.
	ShipmentTypeIncompatibility_NOT_PERFORMED_BY_SAME_VEHICLE ShipmentTypeIncompatibility_IncompatibilityMode = 1
	// For two shipments with incompatible types with the
	// `NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY` incompatibility mode:
	//
	//   - If both are pickups only (no deliveries) or deliveries only (no
	//     pickups), they cannot share the same vehicle at all.
	//   - If one of the shipments has a delivery and the other a pickup, the two
	//     shipments can share the same vehicle iff the former shipment is
	//     delivered before the latter is picked up.
	ShipmentTypeIncompatibility_NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY ShipmentTypeIncompatibility_IncompatibilityMode = 2
)

// Enum value maps for ShipmentTypeIncompatibility_IncompatibilityMode.
var (
	ShipmentTypeIncompatibility_IncompatibilityMode_name = map[int32]string{
		0: "INCOMPATIBILITY_MODE_UNSPECIFIED",
		1: "NOT_PERFORMED_BY_SAME_VEHICLE",
		2: "NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY",
	}
	ShipmentTypeIncompatibility_IncompatibilityMode_value = map[string]int32{
		"INCOMPATIBILITY_MODE_UNSPECIFIED":   0,
		"NOT_PERFORMED_BY_SAME_VEHICLE":      1,
		"NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY": 2,
	}
)

func (x ShipmentTypeIncompatibility_IncompatibilityMode) Enum() *ShipmentTypeIncompatibility_IncompatibilityMode {
	p := new(ShipmentTypeIncompatibility_IncompatibilityMode)
	*p = x
	return p
}

func (x ShipmentTypeIncompatibility_IncompatibilityMode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ShipmentTypeIncompatibility_IncompatibilityMode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[3].Descriptor()
}

func (ShipmentTypeIncompatibility_IncompatibilityMode) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[3]
}

func (x ShipmentTypeIncompatibility_IncompatibilityMode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ShipmentTypeIncompatibility_IncompatibilityMode.Descriptor instead.
func (ShipmentTypeIncompatibility_IncompatibilityMode) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{7, 0}
}

// Modes defining the appearance of dependent shipments on a route.
type ShipmentTypeRequirement_RequirementMode int32

const (
	// Unspecified requirement mode. This value should never be used.
	ShipmentTypeRequirement_REQUIREMENT_MODE_UNSPECIFIED ShipmentTypeRequirement_RequirementMode = 0
	// In this mode, all "dependent" shipments must share the same vehicle as at
	// least one of their "required" shipments.
	ShipmentTypeRequirement_PERFORMED_BY_SAME_VEHICLE ShipmentTypeRequirement_RequirementMode = 1
	// With the `IN_SAME_VEHICLE_AT_PICKUP_TIME` mode, all "dependent"
	// shipments need to have at least one "required" shipment on their vehicle
	// at the time of their pickup.
	//
	// A "dependent" shipment pickup must therefore have either:
	//
	//   - A delivery-only "required" shipment delivered on the route after, or
	//   - A "required" shipment picked up on the route before it, and if the
	//     "required" shipment has a delivery, this delivery must be performed
	//     after the "dependent" shipment's pickup.
	ShipmentTypeRequirement_IN_SAME_VEHICLE_AT_PICKUP_TIME ShipmentTypeRequirement_RequirementMode = 2
	// Same as before, except the "dependent" shipments need to have a
	// "required" shipment on their vehicle at the time of their *delivery*.
	ShipmentTypeRequirement_IN_SAME_VEHICLE_AT_DELIVERY_TIME ShipmentTypeRequirement_RequirementMode = 3
)

// Enum value maps for ShipmentTypeRequirement_RequirementMode.
var (
	ShipmentTypeRequirement_RequirementMode_name = map[int32]string{
		0: "REQUIREMENT_MODE_UNSPECIFIED",
		1: "PERFORMED_BY_SAME_VEHICLE",
		2: "IN_SAME_VEHICLE_AT_PICKUP_TIME",
		3: "IN_SAME_VEHICLE_AT_DELIVERY_TIME",
	}
	ShipmentTypeRequirement_RequirementMode_value = map[string]int32{
		"REQUIREMENT_MODE_UNSPECIFIED":     0,
		"PERFORMED_BY_SAME_VEHICLE":        1,
		"IN_SAME_VEHICLE_AT_PICKUP_TIME":   2,
		"IN_SAME_VEHICLE_AT_DELIVERY_TIME": 3,
	}
)

func (x ShipmentTypeRequirement_RequirementMode) Enum() *ShipmentTypeRequirement_RequirementMode {
	p := new(ShipmentTypeRequirement_RequirementMode)
	*p = x
	return p
}

func (x ShipmentTypeRequirement_RequirementMode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ShipmentTypeRequirement_RequirementMode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[4].Descriptor()
}

func (ShipmentTypeRequirement_RequirementMode) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[4]
}

func (x ShipmentTypeRequirement_RequirementMode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ShipmentTypeRequirement_RequirementMode.Descriptor instead.
func (ShipmentTypeRequirement_RequirementMode) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{8, 0}
}

// Travel modes which can be used by vehicles.
//
// These should be a subset of the Google Maps Platform Routes Preferred API
// travel modes, see:
// https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
type Vehicle_TravelMode int32

const (
	// Unspecified travel mode, equivalent to `DRIVING`.
	Vehicle_TRAVEL_MODE_UNSPECIFIED Vehicle_TravelMode = 0
	// Travel mode corresponding to driving directions (car, ...).
	Vehicle_DRIVING Vehicle_TravelMode = 1
	// Travel mode corresponding to walking directions.
	Vehicle_WALKING Vehicle_TravelMode = 2
)

// Enum value maps for Vehicle_TravelMode.
var (
	Vehicle_TravelMode_name = map[int32]string{
		0: "TRAVEL_MODE_UNSPECIFIED",
		1: "DRIVING",
		2: "WALKING",
	}
	Vehicle_TravelMode_value = map[string]int32{
		"TRAVEL_MODE_UNSPECIFIED": 0,
		"DRIVING":                 1,
		"WALKING":                 2,
	}
)

func (x Vehicle_TravelMode) Enum() *Vehicle_TravelMode {
	p := new(Vehicle_TravelMode)
	*p = x
	return p
}

func (x Vehicle_TravelMode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Vehicle_TravelMode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[5].Descriptor()
}

func (Vehicle_TravelMode) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[5]
}

func (x Vehicle_TravelMode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Vehicle_TravelMode.Descriptor instead.
func (Vehicle_TravelMode) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 0}
}

// Policy on how a vehicle can be unloaded. Applies only to shipments having
// both a pickup and a delivery.
//
// Other shipments are free to occur anywhere on the route independent of
// `unloading_policy`.
type Vehicle_UnloadingPolicy int32

const (
	// Unspecified unloading policy; deliveries must just occur after their
	// corresponding pickups.
	Vehicle_UNLOADING_POLICY_UNSPECIFIED Vehicle_UnloadingPolicy = 0
	// Deliveries must occur in reverse order of pickups
	Vehicle_LAST_IN_FIRST_OUT Vehicle_UnloadingPolicy = 1
	// Deliveries must occur in the same order as pickups
	Vehicle_FIRST_IN_FIRST_OUT Vehicle_UnloadingPolicy = 2
)

// Enum value maps for Vehicle_UnloadingPolicy.
var (
	Vehicle_UnloadingPolicy_name = map[int32]string{
		0: "UNLOADING_POLICY_UNSPECIFIED",
		1: "LAST_IN_FIRST_OUT",
		2: "FIRST_IN_FIRST_OUT",
	}
	Vehicle_UnloadingPolicy_value = map[string]int32{
		"UNLOADING_POLICY_UNSPECIFIED": 0,
		"LAST_IN_FIRST_OUT":            1,
		"FIRST_IN_FIRST_OUT":           2,
	}
)

func (x Vehicle_UnloadingPolicy) Enum() *Vehicle_UnloadingPolicy {
	p := new(Vehicle_UnloadingPolicy)
	*p = x
	return p
}

func (x Vehicle_UnloadingPolicy) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Vehicle_UnloadingPolicy) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[6].Descriptor()
}

func (Vehicle_UnloadingPolicy) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[6]
}

func (x Vehicle_UnloadingPolicy) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Vehicle_UnloadingPolicy.Descriptor instead.
func (Vehicle_UnloadingPolicy) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 1}
}

// Code identifying the reason type. The order here is meaningless. In
// particular, it gives no indication of whether a given reason will
// appear before another in the solution, if both apply.
type SkippedShipment_Reason_Code int32

const (
	// This should never be used. If we are unable to understand why a
	// shipment was skipped, we simply return an empty set of reasons.
	SkippedShipment_Reason_CODE_UNSPECIFIED SkippedShipment_Reason_Code = 0
	// There is no vehicle in the model making all shipments infeasible.
	SkippedShipment_Reason_NO_VEHICLE SkippedShipment_Reason_Code = 1
	// The demand of the shipment exceeds a vehicle's capacity for some
	// capacity types, one of which is `example_exceeded_capacity_type`.
	SkippedShipment_Reason_DEMAND_EXCEEDS_VEHICLE_CAPACITY SkippedShipment_Reason_Code = 2
	// The minimum distance necessary to perform this shipment, i.e. from
	// the vehicle's `start_location` to the shipment's pickup and/or delivery
	// locations and to the vehicle's end location exceeds the vehicle's
	// `route_distance_limit`.
	//
	// Note that for this computation we use the geodesic distances.
	SkippedShipment_Reason_CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT SkippedShipment_Reason_Code = 3
	// The minimum time necessary to perform this shipment, including travel
	// time, wait time and service time exceeds the vehicle's
	// `route_duration_limit`.
	//
	// Note: travel time is computed in the best-case scenario, namely as
	// geodesic distance x 36 m/s (roughly 130 km/hour).
	SkippedShipment_Reason_CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT SkippedShipment_Reason_Code = 4
	// Same as above but we only compare minimum travel time and the
	// vehicle's `travel_duration_limit`.
	SkippedShipment_Reason_CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT SkippedShipment_Reason_Code = 5
	// The vehicle cannot perform this shipment in the best-case scenario
	// (see `CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT` for time
	// computation) if it starts at its earliest start time: the total time
	// would make the vehicle end after its latest end time.
	SkippedShipment_Reason_CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS SkippedShipment_Reason_Code = 6
	// The `allowed_vehicle_indices` field of the shipment is not empty and
	// this vehicle does not belong to it.
	SkippedShipment_Reason_VEHICLE_NOT_ALLOWED SkippedShipment_Reason_Code = 7
)

// Enum value maps for SkippedShipment_Reason_Code.
var (
	SkippedShipment_Reason_Code_name = map[int32]string{
		0: "CODE_UNSPECIFIED",
		1: "NO_VEHICLE",
		2: "DEMAND_EXCEEDS_VEHICLE_CAPACITY",
		3: "CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT",
		4: "CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT",
		5: "CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT",
		6: "CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS",
		7: "VEHICLE_NOT_ALLOWED",
	}
	SkippedShipment_Reason_Code_value = map[string]int32{
		"CODE_UNSPECIFIED":                0,
		"NO_VEHICLE":                      1,
		"DEMAND_EXCEEDS_VEHICLE_CAPACITY": 2,
		"CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT":        3,
		"CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT":        4,
		"CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT": 5,
		"CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS":          6,
		"VEHICLE_NOT_ALLOWED":                                      7,
	}
)

func (x SkippedShipment_Reason_Code) Enum() *SkippedShipment_Reason_Code {
	p := new(SkippedShipment_Reason_Code)
	*p = x
	return p
}

func (x SkippedShipment_Reason_Code) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SkippedShipment_Reason_Code) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[7].Descriptor()
}

func (SkippedShipment_Reason_Code) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[7]
}

func (x SkippedShipment_Reason_Code) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SkippedShipment_Reason_Code.Descriptor instead.
func (SkippedShipment_Reason_Code) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 0, 0}
}

// Expresses the different constraint relaxation levels, which are
// applied for a visit and those that follow when it satisfies the
// threshold conditions.
//
// The enumeration below is in order of increasing relaxation.
type InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level int32

const (
	// Implicit default relaxation level: no constraints are relaxed,
	// i.e., all visits are fully constrained.
	//
	// This value must not be explicitly used in `level`.
	InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_LEVEL_UNSPECIFIED InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level = 0
	// Visit start times and vehicle start/end times will be relaxed, but
	// each visit remains bound to the same vehicle and the visit sequence
	// must be observed: no visit can be inserted between them or before
	// them.
	InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_RELAX_VISIT_TIMES_AFTER_THRESHOLD InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level = 1
	// Same as `RELAX_VISIT_TIMES_AFTER_THRESHOLD`, but the visit sequence
	// is also relaxed: visits remain simply bound to their vehicle.
	InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level = 2
	// Same as `RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD`, but the
	// vehicle is also relaxed: visits are completely free at or after the
	// threshold time and can potentially become unperformed.
	InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_RELAX_ALL_AFTER_THRESHOLD InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level = 3
)

// Enum value maps for InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level.
var (
	InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level_name = map[int32]string{
		0: "LEVEL_UNSPECIFIED",
		1: "RELAX_VISIT_TIMES_AFTER_THRESHOLD",
		2: "RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD",
		3: "RELAX_ALL_AFTER_THRESHOLD",
	}
	InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level_value = map[string]int32{
		"LEVEL_UNSPECIFIED":                              0,
		"RELAX_VISIT_TIMES_AFTER_THRESHOLD":              1,
		"RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD": 2,
		"RELAX_ALL_AFTER_THRESHOLD":                      3,
	}
)

func (x InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) Enum() *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level {
	p := new(InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level)
	*p = x
	return p
}

func (x InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) Descriptor() protoreflect.EnumDescriptor {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[8].Descriptor()
}

func (InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) Type() protoreflect.EnumType {
	return &file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes[8]
}

func (x InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level.Descriptor instead.
func (InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level) EnumDescriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19, 0, 0, 0}
}

// Request to batch optimize tours as an asynchronous operation.
// Each input file should contain one `OptimizeToursRequest`, and each output
// file will contain one `OptimizeToursResponse`. The request contains
// information to read/write and parse the files. All the input and output files
// should be under the same project.
type BatchOptimizeToursRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Target project and location to make a call.
	//
	// Format:
	// * `projects/{project-id}`
	// * `projects/{project-id}/locations/{location-id}`
	//
	// If no location is specified, a region will be chosen automatically.
	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
	// Required. Input/Output information each purchase model, such as file paths
	// and data formats.
	ModelConfigs []*BatchOptimizeToursRequest_AsyncModelConfig `protobuf:"bytes,2,rep,name=model_configs,json=modelConfigs,proto3" json:"model_configs,omitempty"`
}

func (x *BatchOptimizeToursRequest) Reset() {
	*x = BatchOptimizeToursRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BatchOptimizeToursRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BatchOptimizeToursRequest) ProtoMessage() {}

func (x *BatchOptimizeToursRequest) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BatchOptimizeToursRequest.ProtoReflect.Descriptor instead.
func (*BatchOptimizeToursRequest) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{0}
}

func (x *BatchOptimizeToursRequest) GetParent() string {
	if x != nil {
		return x.Parent
	}
	return ""
}

func (x *BatchOptimizeToursRequest) GetModelConfigs() []*BatchOptimizeToursRequest_AsyncModelConfig {
	if x != nil {
		return x.ModelConfigs
	}
	return nil
}

// Response to a `BatchOptimizeToursRequest`. This is returned in
// the Long Running Operation after the operation is complete.
type BatchOptimizeToursResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *BatchOptimizeToursResponse) Reset() {
	*x = BatchOptimizeToursResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BatchOptimizeToursResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BatchOptimizeToursResponse) ProtoMessage() {}

func (x *BatchOptimizeToursResponse) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BatchOptimizeToursResponse.ProtoReflect.Descriptor instead.
func (*BatchOptimizeToursResponse) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{1}
}

// Operation metadata for `BatchOptimizeToursRequest` calls.
type BatchOptimizeToursMetadata struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *BatchOptimizeToursMetadata) Reset() {
	*x = BatchOptimizeToursMetadata{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BatchOptimizeToursMetadata) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BatchOptimizeToursMetadata) ProtoMessage() {}

func (x *BatchOptimizeToursMetadata) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BatchOptimizeToursMetadata.ProtoReflect.Descriptor instead.
func (*BatchOptimizeToursMetadata) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{2}
}

// Request to be given to a tour optimization solver which defines the
// shipment model to solve as well as optimization parameters.
type OptimizeToursRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Target project or location to make a call.
	//
	// Format:
	// * `projects/{project-id}`
	// * `projects/{project-id}/locations/{location-id}`
	//
	// If no location is specified, a region will be chosen automatically.
	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
	// If this timeout is set, the server returns a response before the timeout
	// period has elapsed or the server deadline for synchronous requests is
	// reached, whichever is sooner.
	//
	// For asynchronous requests, the server will generate a solution (if
	// possible) before the timeout has elapsed.
	Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// Shipment model to solve.
	Model *ShipmentModel `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"`
	// By default, the solving mode is `DEFAULT_SOLVE` (0).
	SolvingMode OptimizeToursRequest_SolvingMode `protobuf:"varint,4,opt,name=solving_mode,json=solvingMode,proto3,enum=google.maps.routeoptimization.v1.OptimizeToursRequest_SolvingMode" json:"solving_mode,omitempty"`
	// Search mode used to solve the request.
	SearchMode OptimizeToursRequest_SearchMode `protobuf:"varint,6,opt,name=search_mode,json=searchMode,proto3,enum=google.maps.routeoptimization.v1.OptimizeToursRequest_SearchMode" json:"search_mode,omitempty"`
	// Guide the optimization algorithm in finding a first solution that is
	// similar to a previous solution.
	//
	// The model is constrained when the first solution is built.
	// Any shipments not performed on a route are implicitly skipped in the first
	// solution, but they may be performed in successive solutions.
	//
	// The solution must satisfy some basic validity assumptions:
	//
	//   - for all routes, `vehicle_index` must be in range and not be duplicated.
	//   - for all visits, `shipment_index` and `visit_request_index` must be
	//     in range.
	//   - a shipment may only be referenced on one route.
	//   - the pickup of a pickup-delivery shipment must be performed before
	//     the delivery.
	//   - no more than one pickup alternative or delivery alternative of
	//     a shipment may be performed.
	//   - for all routes, times are increasing (i.e., `vehicle_start_time
	//     <= visits[0].start_time <= visits[1].start_time ...
	//     <= vehicle_end_time`).
	//   - a shipment may only be performed on a vehicle that is allowed. A
	//     vehicle is allowed if
	//     [Shipment.allowed_vehicle_indices][google.maps.routeoptimization.v1.Shipment.allowed_vehicle_indices]
	//     is empty or its `vehicle_index` is included in
	//     [Shipment.allowed_vehicle_indices][google.maps.routeoptimization.v1.Shipment.allowed_vehicle_indices].
	//
	// If the injected solution is not feasible, a validation error is not
	// necessarily returned and an error indicating infeasibility may be returned
	// instead.
	InjectedFirstSolutionRoutes []*ShipmentRoute `protobuf:"bytes,7,rep,name=injected_first_solution_routes,json=injectedFirstSolutionRoutes,proto3" json:"injected_first_solution_routes,omitempty"`
	// Constrain the optimization algorithm to find a final solution that is
	// similar to a previous solution. For example, this may be used to freeze
	// portions of routes which have already been completed or which are to be
	// completed but must not be modified.
	//
	// If the injected solution is not feasible, a validation error is not
	// necessarily returned and an error indicating infeasibility may be returned
	// instead.
	InjectedSolutionConstraint *InjectedSolutionConstraint `protobuf:"bytes,8,opt,name=injected_solution_constraint,json=injectedSolutionConstraint,proto3" json:"injected_solution_constraint,omitempty"`
	// If non-empty, the given routes will be refreshed, without modifying their
	// underlying sequence of visits or travel times: only other details will be
	// updated. This does not solve the model.
	//
	// As of 2020/11, this only populates the polylines of non-empty routes and
	// requires that `populate_polylines` is true.
	//
	// The `route_polyline` fields of the passed-in routes may be inconsistent
	// with route `transitions`.
	//
	// This field must not be used together with `injected_first_solution_routes`
	// or `injected_solution_constraint`.
	//
	// `Shipment.ignore` and `Vehicle.ignore` have no effect on the behavior.
	// Polylines are still populated between all visits in all non-empty routes
	// regardless of whether the related shipments or vehicles are ignored.
	RefreshDetailsRoutes []*ShipmentRoute `protobuf:"bytes,9,rep,name=refresh_details_routes,json=refreshDetailsRoutes,proto3" json:"refresh_details_routes,omitempty"`
	// If true:
	//
	//   - uses
	//     [ShipmentRoute.vehicle_label][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_label]
	//     instead of `vehicle_index` to
	//     match routes in an injected solution with vehicles in the request;
	//     reuses the mapping of original
	//     [ShipmentRoute.vehicle_index][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_index]
	//     to new
	//     [ShipmentRoute.vehicle_index][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_index]
	//     to update
	//     [ConstraintRelaxation.vehicle_indices][google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.vehicle_indices]
	//     if non-empty, but the mapping must be unambiguous (i.e., multiple
	//     `ShipmentRoute`s must not share the same original `vehicle_index`).
	//   - uses
	//     [ShipmentRoute.Visit.shipment_label][google.maps.routeoptimization.v1.ShipmentRoute.Visit.shipment_label]
	//     instead of `shipment_index`
	//     to match visits in an injected solution with shipments in the request;
	//   - uses
	//     [SkippedShipment.label][google.maps.routeoptimization.v1.SkippedShipment.label]
	//     instead of
	//     [SkippedShipment.index][google.maps.routeoptimization.v1.SkippedShipment.index]
	//     to
	//     match skipped shipments in the injected solution with request
	//     shipments.
	//
	// This interpretation applies to the `injected_first_solution_routes`,
	// `injected_solution_constraint`, and `refresh_details_routes` fields.
	// It can be used when shipment or vehicle indices in the request have
	// changed since the solution was created, perhaps because shipments or
	// vehicles have been removed from or added to the request.
	//
	// If true, labels in the following categories must appear at most once in
	// their category:
	//
	//   - [Vehicle.label][google.maps.routeoptimization.v1.Vehicle.label] in the
	//     request;
	//   - [Shipment.label][google.maps.routeoptimization.v1.Shipment.label] in
	//     the request;
	//   - [ShipmentRoute.vehicle_label][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_label] in the injected solution;
	//   - [SkippedShipment.label][google.maps.routeoptimization.v1.SkippedShipment.label] and [ShipmentRoute.Visit.shipment_label][google.maps.routeoptimization.v1.ShipmentRoute.Visit.shipment_label] in
	//     the injected solution (except pickup/delivery visit pairs, whose
	//     `shipment_label` must appear twice).
	//
	// If a `vehicle_label` in the injected solution does not correspond to a
	// request vehicle, the corresponding route is removed from the solution
	// along with its visits. If a `shipment_label` in the injected solution does
	// not correspond to a request shipment, the corresponding visit is removed
	// from the solution. If a
	// [SkippedShipment.label][google.maps.routeoptimization.v1.SkippedShipment.label]
	// in the injected solution does not correspond to a request shipment, the
	// `SkippedShipment` is removed from the solution.
	//
	// Removing route visits or entire routes from an injected solution may
	// have an effect on the implied constraints, which may lead to change in
	// solution, validation errors, or infeasibility.
	//
	// NOTE: The caller must ensure that each
	// [Vehicle.label][google.maps.routeoptimization.v1.Vehicle.label] (resp.
	// [Shipment.label][google.maps.routeoptimization.v1.Shipment.label]) uniquely
	// identifies a vehicle (resp. shipment) entity used across the two relevant
	// requests: the past request that produced the `OptimizeToursResponse` used
	// in the injected solution and the current request that includes the injected
	// solution. The uniqueness checks described above are not enough to guarantee
	// this requirement.
	InterpretInjectedSolutionsUsingLabels bool `protobuf:"varint,10,opt,name=interpret_injected_solutions_using_labels,json=interpretInjectedSolutionsUsingLabels,proto3" json:"interpret_injected_solutions_using_labels,omitempty"`
	// Consider traffic estimation in calculating `ShipmentRoute` fields
	// [Transition.travel_duration][google.maps.routeoptimization.v1.ShipmentRoute.Transition.travel_duration],
	// [Visit.start_time][google.maps.routeoptimization.v1.ShipmentRoute.Visit.start_time],
	// and `vehicle_end_time`; in setting the
	// [ShipmentRoute.has_traffic_infeasibilities][google.maps.routeoptimization.v1.ShipmentRoute.has_traffic_infeasibilities]
	// field, and in calculating the
	// [OptimizeToursResponse.total_cost][google.maps.routeoptimization.v1.OptimizeToursResponse.total_cost]
	// field.
	ConsiderRoadTraffic bool `protobuf:"varint,11,opt,name=consider_road_traffic,json=considerRoadTraffic,proto3" json:"consider_road_traffic,omitempty"`
	// If true, polylines will be populated in response `ShipmentRoute`s.
	PopulatePolylines bool `protobuf:"varint,12,opt,name=populate_polylines,json=populatePolylines,proto3" json:"populate_polylines,omitempty"`
	// If true, polylines will be populated in response
	// [ShipmentRoute.transitions][google.maps.routeoptimization.v1.ShipmentRoute.transitions].
	PopulateTransitionPolylines bool `protobuf:"varint,13,opt,name=populate_transition_polylines,json=populateTransitionPolylines,proto3" json:"populate_transition_polylines,omitempty"`
	// If this is set, then the request can have a deadline
	// (see https://grpc.io/blog/deadlines) of up to 60 minutes.
	// Otherwise, the maximum deadline is only 30 minutes.
	// Note that long-lived requests have a significantly larger (but still small)
	// risk of interruption.
	AllowLargeDeadlineDespiteInterruptionRisk bool `protobuf:"varint,14,opt,name=allow_large_deadline_despite_interruption_risk,json=allowLargeDeadlineDespiteInterruptionRisk,proto3" json:"allow_large_deadline_despite_interruption_risk,omitempty"`
	// If true, travel distances will be computed using geodesic distances instead
	// of Google Maps distances, and travel times will be computed using geodesic
	// distances with a speed defined by `geodesic_meters_per_second`.
	UseGeodesicDistances bool `protobuf:"varint,15,opt,name=use_geodesic_distances,json=useGeodesicDistances,proto3" json:"use_geodesic_distances,omitempty"`
	// When `use_geodesic_distances` is true, this field must be set and defines
	// the speed applied to compute travel times. Its value must be at least 1.0
	// meters/seconds.
	GeodesicMetersPerSecond *float64 `protobuf:"fixed64,16,opt,name=geodesic_meters_per_second,json=geodesicMetersPerSecond,proto3,oneof" json:"geodesic_meters_per_second,omitempty"`
	// Truncates the number of validation errors returned. These errors are
	// typically attached to an INVALID_ARGUMENT error payload as a BadRequest
	// error detail (https://cloud.google.com/apis/design/errors#error_details),
	// unless solving_mode=VALIDATE_ONLY: see the
	// [OptimizeToursResponse.validation_errors][google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors]
	// field.
	// This defaults to 100 and is capped at 10,000.
	MaxValidationErrors *int32 `protobuf:"varint,5,opt,name=max_validation_errors,json=maxValidationErrors,proto3,oneof" json:"max_validation_errors,omitempty"`
	// Label that may be used to identify this request, reported back in the
	// [OptimizeToursResponse.request_label][google.maps.routeoptimization.v1.OptimizeToursResponse.request_label].
	Label string `protobuf:"bytes,17,opt,name=label,proto3" json:"label,omitempty"`
}

func (x *OptimizeToursRequest) Reset() {
	*x = OptimizeToursRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *OptimizeToursRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OptimizeToursRequest) ProtoMessage() {}

func (x *OptimizeToursRequest) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OptimizeToursRequest.ProtoReflect.Descriptor instead.
func (*OptimizeToursRequest) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{3}
}

func (x *OptimizeToursRequest) GetParent() string {
	if x != nil {
		return x.Parent
	}
	return ""
}

func (x *OptimizeToursRequest) GetTimeout() *durationpb.Duration {
	if x != nil {
		return x.Timeout
	}
	return nil
}

func (x *OptimizeToursRequest) GetModel() *ShipmentModel {
	if x != nil {
		return x.Model
	}
	return nil
}

func (x *OptimizeToursRequest) GetSolvingMode() OptimizeToursRequest_SolvingMode {
	if x != nil {
		return x.SolvingMode
	}
	return OptimizeToursRequest_DEFAULT_SOLVE
}

func (x *OptimizeToursRequest) GetSearchMode() OptimizeToursRequest_SearchMode {
	if x != nil {
		return x.SearchMode
	}
	return OptimizeToursRequest_SEARCH_MODE_UNSPECIFIED
}

func (x *OptimizeToursRequest) GetInjectedFirstSolutionRoutes() []*ShipmentRoute {
	if x != nil {
		return x.InjectedFirstSolutionRoutes
	}
	return nil
}

func (x *OptimizeToursRequest) GetInjectedSolutionConstraint() *InjectedSolutionConstraint {
	if x != nil {
		return x.InjectedSolutionConstraint
	}
	return nil
}

func (x *OptimizeToursRequest) GetRefreshDetailsRoutes() []*ShipmentRoute {
	if x != nil {
		return x.RefreshDetailsRoutes
	}
	return nil
}

func (x *OptimizeToursRequest) GetInterpretInjectedSolutionsUsingLabels() bool {
	if x != nil {
		return x.InterpretInjectedSolutionsUsingLabels
	}
	return false
}

func (x *OptimizeToursRequest) GetConsiderRoadTraffic() bool {
	if x != nil {
		return x.ConsiderRoadTraffic
	}
	return false
}

func (x *OptimizeToursRequest) GetPopulatePolylines() bool {
	if x != nil {
		return x.PopulatePolylines
	}
	return false
}

func (x *OptimizeToursRequest) GetPopulateTransitionPolylines() bool {
	if x != nil {
		return x.PopulateTransitionPolylines
	}
	return false
}

func (x *OptimizeToursRequest) GetAllowLargeDeadlineDespiteInterruptionRisk() bool {
	if x != nil {
		return x.AllowLargeDeadlineDespiteInterruptionRisk
	}
	return false
}

func (x *OptimizeToursRequest) GetUseGeodesicDistances() bool {
	if x != nil {
		return x.UseGeodesicDistances
	}
	return false
}

func (x *OptimizeToursRequest) GetGeodesicMetersPerSecond() float64 {
	if x != nil && x.GeodesicMetersPerSecond != nil {
		return *x.GeodesicMetersPerSecond
	}
	return 0
}

func (x *OptimizeToursRequest) GetMaxValidationErrors() int32 {
	if x != nil && x.MaxValidationErrors != nil {
		return *x.MaxValidationErrors
	}
	return 0
}

func (x *OptimizeToursRequest) GetLabel() string {
	if x != nil {
		return x.Label
	}
	return ""
}

// Response after solving a tour optimization problem containing the routes
// followed by each vehicle, the shipments which have been skipped and the
// overall cost of the solution.
type OptimizeToursResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Routes computed for each vehicle; the i-th route corresponds to the i-th
	// vehicle in the model.
	Routes []*ShipmentRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"`
	// Copy of the
	// [OptimizeToursRequest.label][google.maps.routeoptimization.v1.OptimizeToursRequest.label],
	// if a label was specified in the request.
	RequestLabel string `protobuf:"bytes,3,opt,name=request_label,json=requestLabel,proto3" json:"request_label,omitempty"`
	// The list of all shipments skipped.
	SkippedShipments []*SkippedShipment `protobuf:"bytes,4,rep,name=skipped_shipments,json=skippedShipments,proto3" json:"skipped_shipments,omitempty"`
	// List of all the validation errors that we were able to detect
	// independently. See the "MULTIPLE ERRORS" explanation for the
	// [OptimizeToursValidationError][google.maps.routeoptimization.v1.OptimizeToursValidationError]
	// message.
	ValidationErrors []*OptimizeToursValidationError `protobuf:"bytes,5,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"`
	// Duration, distance and usage metrics for this solution.
	Metrics *OptimizeToursResponse_Metrics `protobuf:"bytes,6,opt,name=metrics,proto3" json:"metrics,omitempty"`
}

func (x *OptimizeToursResponse) Reset() {
	*x = OptimizeToursResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *OptimizeToursResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OptimizeToursResponse) ProtoMessage() {}

func (x *OptimizeToursResponse) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OptimizeToursResponse.ProtoReflect.Descriptor instead.
func (*OptimizeToursResponse) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{4}
}

func (x *OptimizeToursResponse) GetRoutes() []*ShipmentRoute {
	if x != nil {
		return x.Routes
	}
	return nil
}

func (x *OptimizeToursResponse) GetRequestLabel() string {
	if x != nil {
		return x.RequestLabel
	}
	return ""
}

func (x *OptimizeToursResponse) GetSkippedShipments() []*SkippedShipment {
	if x != nil {
		return x.SkippedShipments
	}
	return nil
}

func (x *OptimizeToursResponse) GetValidationErrors() []*OptimizeToursValidationError {
	if x != nil {
		return x.ValidationErrors
	}
	return nil
}

func (x *OptimizeToursResponse) GetMetrics() *OptimizeToursResponse_Metrics {
	if x != nil {
		return x.Metrics
	}
	return nil
}

// A shipment model contains a set of shipments which must be performed by a
// set of vehicles, while minimizing the overall cost, which is the sum of:
//
//   - the cost of routing the vehicles (sum of cost per total time, cost per
//     travel time, and fixed cost over all vehicles).
//   - the unperformed shipment penalties.
//   - the cost of the global duration of the shipments
type ShipmentModel struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Set of shipments which must be performed in the model.
	Shipments []*Shipment `protobuf:"bytes,1,rep,name=shipments,proto3" json:"shipments,omitempty"`
	// Set of vehicles which can be used to perform visits.
	Vehicles []*Vehicle `protobuf:"bytes,2,rep,name=vehicles,proto3" json:"vehicles,omitempty"`
	// Constrains the maximum number of active vehicles. A vehicle is active if
	// its route performs at least one shipment. This can be used to limit the
	// number of routes in the case where there are fewer drivers than
	// vehicles and that the fleet of vehicles is heterogeneous. The optimization
	// will then select the best subset of vehicles to use.
	// Must be strictly positive.
	MaxActiveVehicles *int32 `protobuf:"varint,4,opt,name=max_active_vehicles,json=maxActiveVehicles,proto3,oneof" json:"max_active_vehicles,omitempty"`
	// Global start and end time of the model: no times outside of this range
	// can be considered valid.
	//
	// The model's time span must be less than a year, i.e. the `global_end_time`
	// and the `global_start_time` must be within 31536000 seconds of each other.
	//
	// When using `cost_per_*hour` fields, you might want to set this window to a
	// smaller interval to increase performance (eg. if you model a single day,
	// you should set the global time limits to that day).
	// If unset, 00:00:00 UTC, January 1, 1970 (i.e. seconds: 0, nanos: 0) is used
	// as default.
	GlobalStartTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=global_start_time,json=globalStartTime,proto3" json:"global_start_time,omitempty"`
	// If unset, 00:00:00 UTC, January 1, 1971 (i.e. seconds: 31536000, nanos: 0)
	// is used as default.
	GlobalEndTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=global_end_time,json=globalEndTime,proto3" json:"global_end_time,omitempty"`
	// The "global duration" of the overall plan is the difference between the
	// earliest effective start time and the latest effective end time of
	// all vehicles. Users can assign a cost per hour to that quantity to try
	// and optimize for earliest job completion, for example. This cost must be in
	// the same unit as
	// [Shipment.penalty_cost][google.maps.routeoptimization.v1.Shipment.penalty_cost].
	GlobalDurationCostPerHour float64 `protobuf:"fixed64,7,opt,name=global_duration_cost_per_hour,json=globalDurationCostPerHour,proto3" json:"global_duration_cost_per_hour,omitempty"`
	// Specifies duration and distance matrices used in the model. If this field
	// is empty, Google Maps or geodesic distances will be used instead, depending
	// on the value of the `use_geodesic_distances` field. If it is not empty,
	// `use_geodesic_distances` cannot be true and neither
	// `duration_distance_matrix_src_tags` nor `duration_distance_matrix_dst_tags`
	// can be empty.
	//
	// Usage examples:
	//
	// * There are two locations: locA and locB.
	// * 1 vehicle starting its route at locA and ending it at locA.
	// * 1 pickup visit request at locB.
	//
	// ```
	//
	//	model {
	//	  vehicles { start_tags: "locA"  end_tags: "locA" }
	//	  shipments { pickups { tags: "locB" } }
	//	  duration_distance_matrix_src_tags: "locA"
	//	  duration_distance_matrix_src_tags: "locB"
	//	  duration_distance_matrix_dst_tags: "locA"
	//	  duration_distance_matrix_dst_tags: "locB"
	//	  duration_distance_matrices {
	//	    rows {  # from: locA
	//	      durations { seconds: 0 }   meters: 0    # to: locA
	//	      durations { seconds: 100 } meters: 1000 # to: locB
	//	    }
	//	    rows {  # from: locB
	//	      durations { seconds: 102 } meters: 990 # to: locA
	//	      durations { seconds: 0 }   meters: 0   # to: locB
	//	    }
	//	  }
	//	}
	//
	// ```
	//
	//   - There are three locations: locA, locB and locC.
	//   - 1 vehicle starting its route at locA and ending it at locB, using
	//     matrix "fast".
	//   - 1 vehicle starting its route at locB and ending it at locB, using
	//     matrix "slow".
	//   - 1 vehicle starting its route at locB and ending it at locB, using
	//     matrix "fast".
	//   - 1 pickup visit request at locC.
	//
	// ```
	//
	//	model {
	//	  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
	//	  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
	//	  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
	//	  shipments { pickups { tags: "locC" } }
	//	  duration_distance_matrix_src_tags: "locA"
	//	  duration_distance_matrix_src_tags: "locB"
	//	  duration_distance_matrix_src_tags: "locC"
	//	  duration_distance_matrix_dst_tags: "locB"
	//	  duration_distance_matrix_dst_tags: "locC"
	//	  duration_distance_matrices {
	//	    vehicle_start_tag: "fast"
	//	    rows {  # from: locA
	//	      durations { seconds: 1000 } meters: 2000 # to: locB
	//	      durations { seconds: 600 }  meters: 1000 # to: locC
	//	    }
	//	    rows {  # from: locB
	//	      durations { seconds: 0 }   meters: 0    # to: locB
	//	      durations { seconds: 700 } meters: 1200 # to: locC
	//	    }
	//	    rows {  # from: locC
	//	      durations { seconds: 702 } meters: 1190 # to: locB
	//	      durations { seconds: 0 }   meters: 0    # to: locC
	//	    }
	//	  }
	//	  duration_distance_matrices {
	//	    vehicle_start_tag: "slow"
	//	    rows {  # from: locA
	//	      durations { seconds: 1800 } meters: 2001 # to: locB
	//	      durations { seconds: 900 }  meters: 1002 # to: locC
	//	    }
	//	    rows {  # from: locB
	//	      durations { seconds: 0 }    meters: 0    # to: locB
	//	      durations { seconds: 1000 } meters: 1202 # to: locC
	//	    }
	//	    rows {  # from: locC
	//	      durations { seconds: 1001 } meters: 1195 # to: locB
	//	      durations { seconds: 0 }    meters: 0    # to: locC
	//	    }
	//	  }
	//	}
	//
	// ```
	DurationDistanceMatrices []*ShipmentModel_DurationDistanceMatrix `protobuf:"bytes,8,rep,name=duration_distance_matrices,json=durationDistanceMatrices,proto3" json:"duration_distance_matrices,omitempty"`
	// Tags defining the sources of the duration and distance matrices;
	// `duration_distance_matrices(i).rows(j)` defines durations and distances
	// from visits with tag `duration_distance_matrix_src_tags(j)` to other visits
	// in matrix i.
	//
	// Tags correspond to
	// [VisitRequest.tags][google.maps.routeoptimization.v1.Shipment.VisitRequest.tags]
	// or
	// [Vehicle.start_tags][google.maps.routeoptimization.v1.Vehicle.start_tags].
	// A given `VisitRequest` or `Vehicle` must match exactly one tag in this
	// field. Note that a `Vehicle`'s source, destination and matrix tags may be
	// the same; similarly a `VisitRequest`'s source and destination tags may be
	// the same. All tags must be different and cannot be empty strings. If this
	// field is not empty, then `duration_distance_matrices` must not be empty.
	DurationDistanceMatrixSrcTags []string `protobuf:"bytes,9,rep,name=duration_distance_matrix_src_tags,json=durationDistanceMatrixSrcTags,proto3" json:"duration_distance_matrix_src_tags,omitempty"`
	// Tags defining the destinations of the duration and distance matrices;
	// `duration_distance_matrices(i).rows(j).durations(k)` (resp.
	// `duration_distance_matrices(i).rows(j).meters(k))` defines the duration
	// (resp. the distance) of the travel from visits with tag
	// `duration_distance_matrix_src_tags(j)` to visits with tag
	// `duration_distance_matrix_dst_tags(k)` in matrix i.
	//
	// Tags correspond to
	// [VisitRequest.tags][google.maps.routeoptimization.v1.Shipment.VisitRequest.tags]
	// or
	// [Vehicle.start_tags][google.maps.routeoptimization.v1.Vehicle.start_tags].
	// A given `VisitRequest` or `Vehicle` must match exactly one tag in this
	// field. Note that a `Vehicle`'s source, destination and matrix tags may be
	// the same; similarly a `VisitRequest`'s source and destination tags may be
	// the same. All tags must be different and cannot be empty strings. If this
	// field is not empty, then `duration_distance_matrices` must not be empty.
	DurationDistanceMatrixDstTags []string `protobuf:"bytes,10,rep,name=duration_distance_matrix_dst_tags,json=durationDistanceMatrixDstTags,proto3" json:"duration_distance_matrix_dst_tags,omitempty"`
	// Transition attributes added to the model.
	TransitionAttributes []*TransitionAttributes `protobuf:"bytes,11,rep,name=transition_attributes,json=transitionAttributes,proto3" json:"transition_attributes,omitempty"`
	// Sets of incompatible shipment_types (see `ShipmentTypeIncompatibility`).
	ShipmentTypeIncompatibilities []*ShipmentTypeIncompatibility `protobuf:"bytes,12,rep,name=shipment_type_incompatibilities,json=shipmentTypeIncompatibilities,proto3" json:"shipment_type_incompatibilities,omitempty"`
	// Sets of `shipment_type` requirements (see `ShipmentTypeRequirement`).
	ShipmentTypeRequirements []*ShipmentTypeRequirement `protobuf:"bytes,13,rep,name=shipment_type_requirements,json=shipmentTypeRequirements,proto3" json:"shipment_type_requirements,omitempty"`
	// Set of precedence rules which must be enforced in the model.
	PrecedenceRules []*ShipmentModel_PrecedenceRule `protobuf:"bytes,14,rep,name=precedence_rules,json=precedenceRules,proto3" json:"precedence_rules,omitempty"`
}

func (x *ShipmentModel) Reset() {
	*x = ShipmentModel{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentModel) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentModel) ProtoMessage() {}

func (x *ShipmentModel) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentModel.ProtoReflect.Descriptor instead.
func (*ShipmentModel) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{5}
}

func (x *ShipmentModel) GetShipments() []*Shipment {
	if x != nil {
		return x.Shipments
	}
	return nil
}

func (x *ShipmentModel) GetVehicles() []*Vehicle {
	if x != nil {
		return x.Vehicles
	}
	return nil
}

func (x *ShipmentModel) GetMaxActiveVehicles() int32 {
	if x != nil && x.MaxActiveVehicles != nil {
		return *x.MaxActiveVehicles
	}
	return 0
}

func (x *ShipmentModel) GetGlobalStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.GlobalStartTime
	}
	return nil
}

func (x *ShipmentModel) GetGlobalEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.GlobalEndTime
	}
	return nil
}

func (x *ShipmentModel) GetGlobalDurationCostPerHour() float64 {
	if x != nil {
		return x.GlobalDurationCostPerHour
	}
	return 0
}

func (x *ShipmentModel) GetDurationDistanceMatrices() []*ShipmentModel_DurationDistanceMatrix {
	if x != nil {
		return x.DurationDistanceMatrices
	}
	return nil
}

func (x *ShipmentModel) GetDurationDistanceMatrixSrcTags() []string {
	if x != nil {
		return x.DurationDistanceMatrixSrcTags
	}
	return nil
}

func (x *ShipmentModel) GetDurationDistanceMatrixDstTags() []string {
	if x != nil {
		return x.DurationDistanceMatrixDstTags
	}
	return nil
}

func (x *ShipmentModel) GetTransitionAttributes() []*TransitionAttributes {
	if x != nil {
		return x.TransitionAttributes
	}
	return nil
}

func (x *ShipmentModel) GetShipmentTypeIncompatibilities() []*ShipmentTypeIncompatibility {
	if x != nil {
		return x.ShipmentTypeIncompatibilities
	}
	return nil
}

func (x *ShipmentModel) GetShipmentTypeRequirements() []*ShipmentTypeRequirement {
	if x != nil {
		return x.ShipmentTypeRequirements
	}
	return nil
}

func (x *ShipmentModel) GetPrecedenceRules() []*ShipmentModel_PrecedenceRule {
	if x != nil {
		return x.PrecedenceRules
	}
	return nil
}

// The shipment of a single item, from one of its pickups to one of its
// deliveries. For the shipment to be considered as performed, a unique vehicle
// must visit one of its pickup locations (and decrease its spare capacities
// accordingly), then visit one of its delivery locations later on (and
// therefore re-increase its spare capacities accordingly).
type Shipment struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The user-defined display name of the shipment.
	// It can be up to 63 characters long and may use UTF-8 characters.
	DisplayName string `protobuf:"bytes,16,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// Set of pickup alternatives associated to the shipment. If not specified,
	// the vehicle only needs to visit a location corresponding to the deliveries.
	Pickups []*Shipment_VisitRequest `protobuf:"bytes,1,rep,name=pickups,proto3" json:"pickups,omitempty"`
	// Set of delivery alternatives associated to the shipment. If not specified,
	// the vehicle only needs to visit a location corresponding to the pickups.
	Deliveries []*Shipment_VisitRequest `protobuf:"bytes,2,rep,name=deliveries,proto3" json:"deliveries,omitempty"`
	// Load demands of the shipment (for example weight, volume, number of
	// pallets etc). The keys in the map should be identifiers describing the type
	// of the corresponding load, ideally also including the units.
	// For example: "weight_kg", "volume_gallons", "pallet_count", etc.
	// If a given key does not appear in the map, the corresponding load is
	// considered as null.
	LoadDemands map[string]*Shipment_Load `protobuf:"bytes,14,rep,name=load_demands,json=loadDemands,proto3" json:"load_demands,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// If the shipment is not completed, this penalty is added to the overall
	// cost of the routes. A shipment is considered completed if one of its pickup
	// and delivery alternatives is visited. The cost may be expressed in the
	// same unit used for all other cost-related fields in the model and must be
	// positive.
	//
	// *IMPORTANT*: If this penalty is not specified, it is considered infinite,
	// i.e. the shipment must be completed.
	PenaltyCost *float64 `protobuf:"fixed64,4,opt,name=penalty_cost,json=penaltyCost,proto3,oneof" json:"penalty_cost,omitempty"`
	// The set of vehicles that may perform this shipment. If empty, all vehicles
	// may perform it. Vehicles are given by their index in the `ShipmentModel`'s
	// `vehicles` list.
	AllowedVehicleIndices []int32 `protobuf:"varint,5,rep,packed,name=allowed_vehicle_indices,json=allowedVehicleIndices,proto3" json:"allowed_vehicle_indices,omitempty"`
	// Specifies the cost that is incurred when this shipment is delivered by each
	// vehicle. If specified, it must have EITHER:
	//
	//   - the same number of elements as `costs_per_vehicle_indices`.
	//     `costs_per_vehicle[i]` corresponds to vehicle
	//     `costs_per_vehicle_indices[i]` of the model.
	//   - the same number of elements as there are vehicles in the model. The
	//     i-th element corresponds to vehicle #i of the model.
	//
	// These costs must be in the same unit as `penalty_cost` and must not be
	// negative. Leave this field empty, if there are no such costs.
	CostsPerVehicle []float64 `protobuf:"fixed64,6,rep,packed,name=costs_per_vehicle,json=costsPerVehicle,proto3" json:"costs_per_vehicle,omitempty"`
	// Indices of the vehicles to which `costs_per_vehicle` applies. If non-empty,
	// it must have the same number of elements as `costs_per_vehicle`. A vehicle
	// index may not be specified more than once. If a vehicle is excluded from
	// `costs_per_vehicle_indices`, its cost is zero.
	CostsPerVehicleIndices []int32 `protobuf:"varint,7,rep,packed,name=costs_per_vehicle_indices,json=costsPerVehicleIndices,proto3" json:"costs_per_vehicle_indices,omitempty"`
	// Specifies the maximum relative detour time compared to the shortest path
	// from pickup to delivery. If specified, it must be nonnegative, and the
	// shipment must contain at least a pickup and a delivery.
	//
	// For example, let t be the shortest time taken to go from the selected
	// pickup alternative directly to the selected delivery alternative. Then
	// setting `pickup_to_delivery_relative_detour_limit` enforces:
	//
	// ```
	// start_time(delivery) - start_time(pickup) <=
	// std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))
	// ```
	//
	// If both relative and absolute limits are specified on the same shipment,
	// the more constraining limit is used for each possible pickup/delivery pair.
	// As of 2017/10, detours are only supported when travel durations do not
	// depend on vehicles.
	PickupToDeliveryRelativeDetourLimit *float64 `protobuf:"fixed64,8,opt,name=pickup_to_delivery_relative_detour_limit,json=pickupToDeliveryRelativeDetourLimit,proto3,oneof" json:"pickup_to_delivery_relative_detour_limit,omitempty"`
	// Specifies the maximum absolute detour time compared to the shortest path
	// from pickup to delivery. If specified, it must be nonnegative, and the
	// shipment must contain at least a pickup and a delivery.
	//
	// For example, let t be the shortest time taken to go from the selected
	// pickup alternative directly to the selected delivery alternative. Then
	// setting `pickup_to_delivery_absolute_detour_limit` enforces:
	//
	// ```
	// start_time(delivery) - start_time(pickup) <=
	// t + pickup_to_delivery_absolute_detour_limit
	// ```
	//
	// If both relative and absolute limits are specified on the same shipment,
	// the more constraining limit is used for each possible pickup/delivery pair.
	// As of 2017/10, detours are only supported when travel durations do not
	// depend on vehicles.
	PickupToDeliveryAbsoluteDetourLimit *durationpb.Duration `protobuf:"bytes,9,opt,name=pickup_to_delivery_absolute_detour_limit,json=pickupToDeliveryAbsoluteDetourLimit,proto3" json:"pickup_to_delivery_absolute_detour_limit,omitempty"`
	// Specifies the maximum duration from start of pickup to start of delivery of
	// a shipment. If specified, it must be nonnegative, and the shipment must
	// contain at least a pickup and a delivery. This does not depend on which
	// alternatives are selected for pickup and delivery, nor on vehicle speed.
	// This can be specified alongside maximum detour constraints: the solution
	// will respect both specifications.
	PickupToDeliveryTimeLimit *durationpb.Duration `protobuf:"bytes,10,opt,name=pickup_to_delivery_time_limit,json=pickupToDeliveryTimeLimit,proto3" json:"pickup_to_delivery_time_limit,omitempty"`
	// Non-empty string specifying a "type" for this shipment.
	// This feature can be used to define incompatibilities or requirements
	// between `shipment_types` (see `shipment_type_incompatibilities` and
	// `shipment_type_requirements` in `ShipmentModel`).
	//
	// Differs from `visit_types` which is specified for a single visit: All
	// pickup/deliveries belonging to the same shipment share the same
	// `shipment_type`.
	ShipmentType string `protobuf:"bytes,11,opt,name=shipment_type,json=shipmentType,proto3" json:"shipment_type,omitempty"`
	// Specifies a label for this shipment. This label is reported in the response
	// in the `shipment_label` of the corresponding
	// [ShipmentRoute.Visit][google.maps.routeoptimization.v1.ShipmentRoute.Visit].
	Label string `protobuf:"bytes,12,opt,name=label,proto3" json:"label,omitempty"`
	// If true, skip this shipment, but don't apply a `penalty_cost`.
	//
	// Ignoring a shipment results in a validation error when there are any
	// `shipment_type_requirements` in the model.
	//
	// Ignoring a shipment that is performed in `injected_first_solution_routes`
	// or `injected_solution_constraint` is permitted; the solver removes the
	// related pickup/delivery visits from the performing route.
	// `precedence_rules` that reference ignored shipments will also be ignored.
	Ignore bool `protobuf:"varint,13,opt,name=ignore,proto3" json:"ignore,omitempty"`
}

func (x *Shipment) Reset() {
	*x = Shipment{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Shipment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Shipment) ProtoMessage() {}

func (x *Shipment) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[6]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Shipment.ProtoReflect.Descriptor instead.
func (*Shipment) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{6}
}

func (x *Shipment) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *Shipment) GetPickups() []*Shipment_VisitRequest {
	if x != nil {
		return x.Pickups
	}
	return nil
}

func (x *Shipment) GetDeliveries() []*Shipment_VisitRequest {
	if x != nil {
		return x.Deliveries
	}
	return nil
}

func (x *Shipment) GetLoadDemands() map[string]*Shipment_Load {
	if x != nil {
		return x.LoadDemands
	}
	return nil
}

func (x *Shipment) GetPenaltyCost() float64 {
	if x != nil && x.PenaltyCost != nil {
		return *x.PenaltyCost
	}
	return 0
}

func (x *Shipment) GetAllowedVehicleIndices() []int32 {
	if x != nil {
		return x.AllowedVehicleIndices
	}
	return nil
}

func (x *Shipment) GetCostsPerVehicle() []float64 {
	if x != nil {
		return x.CostsPerVehicle
	}
	return nil
}

func (x *Shipment) GetCostsPerVehicleIndices() []int32 {
	if x != nil {
		return x.CostsPerVehicleIndices
	}
	return nil
}

func (x *Shipment) GetPickupToDeliveryRelativeDetourLimit() float64 {
	if x != nil && x.PickupToDeliveryRelativeDetourLimit != nil {
		return *x.PickupToDeliveryRelativeDetourLimit
	}
	return 0
}

func (x *Shipment) GetPickupToDeliveryAbsoluteDetourLimit() *durationpb.Duration {
	if x != nil {
		return x.PickupToDeliveryAbsoluteDetourLimit
	}
	return nil
}

func (x *Shipment) GetPickupToDeliveryTimeLimit() *durationpb.Duration {
	if x != nil {
		return x.PickupToDeliveryTimeLimit
	}
	return nil
}

func (x *Shipment) GetShipmentType() string {
	if x != nil {
		return x.ShipmentType
	}
	return ""
}

func (x *Shipment) GetLabel() string {
	if x != nil {
		return x.Label
	}
	return ""
}

func (x *Shipment) GetIgnore() bool {
	if x != nil {
		return x.Ignore
	}
	return false
}

// Specifies incompatibilties between shipments depending on their
// shipment_type. The appearance of incompatible shipments on the same route is
// restricted based on the incompatibility mode.
type ShipmentTypeIncompatibility struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// List of incompatible types. Two shipments having different `shipment_types`
	// among those listed are "incompatible".
	Types []string `protobuf:"bytes,1,rep,name=types,proto3" json:"types,omitempty"`
	// Mode applied to the incompatibility.
	IncompatibilityMode ShipmentTypeIncompatibility_IncompatibilityMode `protobuf:"varint,2,opt,name=incompatibility_mode,json=incompatibilityMode,proto3,enum=google.maps.routeoptimization.v1.ShipmentTypeIncompatibility_IncompatibilityMode" json:"incompatibility_mode,omitempty"`
}

func (x *ShipmentTypeIncompatibility) Reset() {
	*x = ShipmentTypeIncompatibility{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentTypeIncompatibility) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentTypeIncompatibility) ProtoMessage() {}

func (x *ShipmentTypeIncompatibility) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[7]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentTypeIncompatibility.ProtoReflect.Descriptor instead.
func (*ShipmentTypeIncompatibility) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{7}
}

func (x *ShipmentTypeIncompatibility) GetTypes() []string {
	if x != nil {
		return x.Types
	}
	return nil
}

func (x *ShipmentTypeIncompatibility) GetIncompatibilityMode() ShipmentTypeIncompatibility_IncompatibilityMode {
	if x != nil {
		return x.IncompatibilityMode
	}
	return ShipmentTypeIncompatibility_INCOMPATIBILITY_MODE_UNSPECIFIED
}

// Specifies requirements between shipments based on their shipment_type.
// The specifics of the requirement are defined by the requirement mode.
type ShipmentTypeRequirement struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// List of alternative shipment types required by the
	// `dependent_shipment_types`.
	RequiredShipmentTypeAlternatives []string `protobuf:"bytes,1,rep,name=required_shipment_type_alternatives,json=requiredShipmentTypeAlternatives,proto3" json:"required_shipment_type_alternatives,omitempty"`
	// All shipments with a type in the `dependent_shipment_types` field require
	// at least one shipment of type `required_shipment_type_alternatives` to be
	// visited on the same route.
	//
	// NOTE: Chains of requirements such that a `shipment_type` depends on itself
	// are not allowed.
	DependentShipmentTypes []string `protobuf:"bytes,2,rep,name=dependent_shipment_types,json=dependentShipmentTypes,proto3" json:"dependent_shipment_types,omitempty"`
	// Mode applied to the requirement.
	RequirementMode ShipmentTypeRequirement_RequirementMode `protobuf:"varint,3,opt,name=requirement_mode,json=requirementMode,proto3,enum=google.maps.routeoptimization.v1.ShipmentTypeRequirement_RequirementMode" json:"requirement_mode,omitempty"`
}

func (x *ShipmentTypeRequirement) Reset() {
	*x = ShipmentTypeRequirement{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentTypeRequirement) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentTypeRequirement) ProtoMessage() {}

func (x *ShipmentTypeRequirement) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[8]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentTypeRequirement.ProtoReflect.Descriptor instead.
func (*ShipmentTypeRequirement) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{8}
}

func (x *ShipmentTypeRequirement) GetRequiredShipmentTypeAlternatives() []string {
	if x != nil {
		return x.RequiredShipmentTypeAlternatives
	}
	return nil
}

func (x *ShipmentTypeRequirement) GetDependentShipmentTypes() []string {
	if x != nil {
		return x.DependentShipmentTypes
	}
	return nil
}

func (x *ShipmentTypeRequirement) GetRequirementMode() ShipmentTypeRequirement_RequirementMode {
	if x != nil {
		return x.RequirementMode
	}
	return ShipmentTypeRequirement_REQUIREMENT_MODE_UNSPECIFIED
}

// Models a vehicle in a shipment problem. Solving a shipment problem will
// build a route starting from `start_location` and ending at `end_location`
// for this vehicle. A route is a sequence of visits (see `ShipmentRoute`).
type Vehicle struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The user-defined display name of the vehicle.
	// It can be up to 63 characters long and may use UTF-8 characters.
	DisplayName string `protobuf:"bytes,32,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// The travel mode which affects the roads usable by the vehicle and its
	// speed. See also `travel_duration_multiple`.
	TravelMode Vehicle_TravelMode `protobuf:"varint,1,opt,name=travel_mode,json=travelMode,proto3,enum=google.maps.routeoptimization.v1.Vehicle_TravelMode" json:"travel_mode,omitempty"`
	// Geographic location where the vehicle starts before picking up any
	// shipments. If not specified, the vehicle starts at its first pickup.
	// If the shipment model has duration and distance matrices, `start_location`
	// must not be specified.
	StartLocation *latlng.LatLng `protobuf:"bytes,3,opt,name=start_location,json=startLocation,proto3" json:"start_location,omitempty"`
	// Waypoint representing a geographic location where the vehicle starts before
	// picking up any shipments. If neither `start_waypoint` nor `start_location`
	// is specified, the vehicle starts at its first pickup.
	// If the shipment model has duration and distance matrices, `start_waypoint`
	// must not be specified.
	StartWaypoint *Waypoint `protobuf:"bytes,4,opt,name=start_waypoint,json=startWaypoint,proto3" json:"start_waypoint,omitempty"`
	// Geographic location where the vehicle ends after it has completed its last
	// `VisitRequest`. If not specified the vehicle's `ShipmentRoute` ends
	// immediately when it completes its last `VisitRequest`.
	// If the shipment model has duration and distance matrices, `end_location`
	// must not be specified.
	EndLocation *latlng.LatLng `protobuf:"bytes,5,opt,name=end_location,json=endLocation,proto3" json:"end_location,omitempty"`
	// Waypoint representing a geographic location where the vehicle ends after
	// it has completed its last `VisitRequest`. If neither `end_waypoint` nor
	// `end_location` is specified, the vehicle's `ShipmentRoute` ends immediately
	// when it completes its last `VisitRequest`.
	// If the shipment model has duration and distance matrices, `end_waypoint`
	// must not be specified.
	EndWaypoint *Waypoint `protobuf:"bytes,6,opt,name=end_waypoint,json=endWaypoint,proto3" json:"end_waypoint,omitempty"`
	// Specifies tags attached to the start of the vehicle's route.
	//
	// Empty or duplicate strings are not allowed.
	StartTags []string `protobuf:"bytes,7,rep,name=start_tags,json=startTags,proto3" json:"start_tags,omitempty"`
	// Specifies tags attached to the end of the vehicle's route.
	//
	// Empty or duplicate strings are not allowed.
	EndTags []string `protobuf:"bytes,8,rep,name=end_tags,json=endTags,proto3" json:"end_tags,omitempty"`
	// Time windows during which the vehicle may depart its start location.
	// They must be within the global time limits (see
	// [ShipmentModel.global_*][google.maps.routeoptimization.v1.ShipmentModel.global_start_time]
	// fields). If unspecified, there is no limitation besides those global time
	// limits.
	//
	// Time windows belonging to the same repeated field must be disjoint, i.e. no
	// time window can overlap with or be adjacent to another, and they must be in
	// chronological order.
	//
	// `cost_per_hour_after_soft_end_time` and `soft_end_time` can only be set if
	// there is a single time window.
	StartTimeWindows []*TimeWindow `protobuf:"bytes,9,rep,name=start_time_windows,json=startTimeWindows,proto3" json:"start_time_windows,omitempty"`
	// Time windows during which the vehicle may arrive at its end location.
	// They must be within the global time limits (see
	// [ShipmentModel.global_*][google.maps.routeoptimization.v1.ShipmentModel.global_start_time]
	// fields). If unspecified, there is no limitation besides those global time
	// limits.
	//
	// Time windows belonging to the same repeated field must be disjoint, i.e. no
	// time window can overlap with or be adjacent to another, and they must be in
	// chronological order.
	//
	// `cost_per_hour_after_soft_end_time` and `soft_end_time` can only be set if
	// there is a single time window.
	EndTimeWindows []*TimeWindow `protobuf:"bytes,10,rep,name=end_time_windows,json=endTimeWindows,proto3" json:"end_time_windows,omitempty"`
	// Specifies a multiplicative factor that can be used to increase or decrease
	// travel times of this vehicle. For example, setting this to 2.0 means
	// that this vehicle is slower and has travel times that are twice what they
	// are for standard vehicles. This multiple does not affect visit durations.
	// It does affect cost if `cost_per_hour` or `cost_per_traveled_hour` are
	// specified. This must be in the range [0.001, 1000.0]. If unset, the vehicle
	// is standard, and this multiple is considered 1.0.
	//
	// WARNING: Travel times will be rounded to the nearest second after this
	// multiple is applied but before performing any numerical operations, thus,
	// a small multiple may result in a loss of precision.
	//
	// See also `extra_visit_duration_for_visit_type` below.
	TravelDurationMultiple *float64 `protobuf:"fixed64,11,opt,name=travel_duration_multiple,json=travelDurationMultiple,proto3,oneof" json:"travel_duration_multiple,omitempty"`
	// Unloading policy enforced on the vehicle.
	UnloadingPolicy Vehicle_UnloadingPolicy `protobuf:"varint,12,opt,name=unloading_policy,json=unloadingPolicy,proto3,enum=google.maps.routeoptimization.v1.Vehicle_UnloadingPolicy" json:"unloading_policy,omitempty"`
	// Capacities of the vehicle (weight, volume, # of pallets for example).
	// The keys in the map are the identifiers of the type of load, consistent
	// with the keys of the
	// [Shipment.load_demands][google.maps.routeoptimization.v1.Shipment.load_demands]
	// field. If a given key is absent from this map, the corresponding capacity
	// is considered to be limitless.
	LoadLimits map[string]*Vehicle_LoadLimit `protobuf:"bytes,30,rep,name=load_limits,json=loadLimits,proto3" json:"load_limits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Vehicle costs: all costs add up and must be in the same unit as
	// [Shipment.penalty_cost][google.maps.routeoptimization.v1.Shipment.penalty_cost].
	//
	// Cost per hour of the vehicle route. This cost is applied to the total time
	// taken by the route, and includes travel time, waiting time, and visit time.
	// Using `cost_per_hour` instead of just `cost_per_traveled_hour` may result
	// in additional latency.
	CostPerHour float64 `protobuf:"fixed64,16,opt,name=cost_per_hour,json=costPerHour,proto3" json:"cost_per_hour,omitempty"`
	// Cost per traveled hour of the vehicle route. This cost is applied only to
	// travel time taken by the route (i.e., that reported in
	// [ShipmentRoute.transitions][google.maps.routeoptimization.v1.ShipmentRoute.transitions]),
	// and excludes waiting time and visit time.
	CostPerTraveledHour float64 `protobuf:"fixed64,17,opt,name=cost_per_traveled_hour,json=costPerTraveledHour,proto3" json:"cost_per_traveled_hour,omitempty"`
	// Cost per kilometer of the vehicle route. This cost is applied to the
	// distance reported in the
	// [ShipmentRoute.transitions][google.maps.routeoptimization.v1.ShipmentRoute.transitions]
	// and does not apply to any distance implicitly traveled from the
	// `arrival_location` to the `departure_location` of a single `VisitRequest`.
	CostPerKilometer float64 `protobuf:"fixed64,18,opt,name=cost_per_kilometer,json=costPerKilometer,proto3" json:"cost_per_kilometer,omitempty"`
	// Fixed cost applied if this vehicle is used to handle a shipment.
	FixedCost float64 `protobuf:"fixed64,19,opt,name=fixed_cost,json=fixedCost,proto3" json:"fixed_cost,omitempty"`
	// This field only applies to vehicles when their route does not serve any
	// shipments. It indicates if the vehicle should be considered as used or not
	// in this case.
	//
	// If true, the vehicle goes from its start to its end location even if it
	// doesn't serve any shipments, and time and distance costs resulting from its
	// start --> end travel are taken into account.
	//
	// Otherwise, it doesn't travel from its start to its end location, and no
	// `break_rule` or delay (from `TransitionAttributes`) are scheduled for this
	// vehicle. In this case, the vehicle's `ShipmentRoute` doesn't contain any
	// information except for the vehicle index and label.
	UsedIfRouteIsEmpty bool `protobuf:"varint,20,opt,name=used_if_route_is_empty,json=usedIfRouteIsEmpty,proto3" json:"used_if_route_is_empty,omitempty"`
	// Limit applied to the total duration of the vehicle's route. In a given
	// `OptimizeToursResponse`, the route duration of a vehicle is the
	// difference between its `vehicle_end_time` and `vehicle_start_time`.
	RouteDurationLimit *Vehicle_DurationLimit `protobuf:"bytes,21,opt,name=route_duration_limit,json=routeDurationLimit,proto3" json:"route_duration_limit,omitempty"`
	// Limit applied to the travel duration of the vehicle's route. In a given
	// `OptimizeToursResponse`, the route travel duration is the sum of all its
	// [transitions.travel_duration][google.maps.routeoptimization.v1.ShipmentRoute.Transition.travel_duration].
	TravelDurationLimit *Vehicle_DurationLimit `protobuf:"bytes,22,opt,name=travel_duration_limit,json=travelDurationLimit,proto3" json:"travel_duration_limit,omitempty"`
	// Limit applied to the total distance of the vehicle's route. In a given
	// `OptimizeToursResponse`, the route distance is the sum of all its
	// [transitions.travel_distance_meters][google.maps.routeoptimization.v1.ShipmentRoute.Transition.travel_distance_meters].
	RouteDistanceLimit *DistanceLimit `protobuf:"bytes,23,opt,name=route_distance_limit,json=routeDistanceLimit,proto3" json:"route_distance_limit,omitempty"`
	// Specifies a map from visit_types strings to durations. The duration is time
	// in addition to
	// [VisitRequest.duration][google.maps.routeoptimization.v1.Shipment.VisitRequest.duration]
	// to be taken at visits with the specified `visit_types`. This extra visit
	// duration adds cost if `cost_per_hour` is specified. Keys (i.e.
	// `visit_types`) cannot be empty strings.
	//
	// If a visit request has multiple types, a duration will be added for each
	// type in the map.
	ExtraVisitDurationForVisitType map[string]*durationpb.Duration `protobuf:"bytes,24,rep,name=extra_visit_duration_for_visit_type,json=extraVisitDurationForVisitType,proto3" json:"extra_visit_duration_for_visit_type,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Describes the break schedule to be enforced on this vehicle.
	// If empty, no breaks will be scheduled for this vehicle.
	BreakRule *BreakRule `protobuf:"bytes,25,opt,name=break_rule,json=breakRule,proto3" json:"break_rule,omitempty"`
	// Specifies a label for this vehicle. This label is reported in the response
	// as the `vehicle_label` of the corresponding
	// [ShipmentRoute][google.maps.routeoptimization.v1.ShipmentRoute].
	Label string `protobuf:"bytes,27,opt,name=label,proto3" json:"label,omitempty"`
	// If true, `used_if_route_is_empty` must be false, and this vehicle will
	// remain unused.
	//
	// If a shipment is performed by an ignored vehicle in
	// `injected_first_solution_routes`, it is skipped in the first solution but
	// is free to be performed in the response.
	//
	// If a shipment is performed by an ignored vehicle in
	// `injected_solution_constraint` and any related pickup/delivery is
	// constrained to remain on the vehicle (i.e., not relaxed to level
	// `RELAX_ALL_AFTER_THRESHOLD`), it is skipped in the response.
	// If a shipment has a non-empty `allowed_vehicle_indices` field and all of
	// the allowed vehicles are ignored, it is skipped in the response.
	Ignore bool `protobuf:"varint,28,opt,name=ignore,proto3" json:"ignore,omitempty"`
}

func (x *Vehicle) Reset() {
	*x = Vehicle{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Vehicle) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Vehicle) ProtoMessage() {}

func (x *Vehicle) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Vehicle.ProtoReflect.Descriptor instead.
func (*Vehicle) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9}
}

func (x *Vehicle) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *Vehicle) GetTravelMode() Vehicle_TravelMode {
	if x != nil {
		return x.TravelMode
	}
	return Vehicle_TRAVEL_MODE_UNSPECIFIED
}

func (x *Vehicle) GetStartLocation() *latlng.LatLng {
	if x != nil {
		return x.StartLocation
	}
	return nil
}

func (x *Vehicle) GetStartWaypoint() *Waypoint {
	if x != nil {
		return x.StartWaypoint
	}
	return nil
}

func (x *Vehicle) GetEndLocation() *latlng.LatLng {
	if x != nil {
		return x.EndLocation
	}
	return nil
}

func (x *Vehicle) GetEndWaypoint() *Waypoint {
	if x != nil {
		return x.EndWaypoint
	}
	return nil
}

func (x *Vehicle) GetStartTags() []string {
	if x != nil {
		return x.StartTags
	}
	return nil
}

func (x *Vehicle) GetEndTags() []string {
	if x != nil {
		return x.EndTags
	}
	return nil
}

func (x *Vehicle) GetStartTimeWindows() []*TimeWindow {
	if x != nil {
		return x.StartTimeWindows
	}
	return nil
}

func (x *Vehicle) GetEndTimeWindows() []*TimeWindow {
	if x != nil {
		return x.EndTimeWindows
	}
	return nil
}

func (x *Vehicle) GetTravelDurationMultiple() float64 {
	if x != nil && x.TravelDurationMultiple != nil {
		return *x.TravelDurationMultiple
	}
	return 0
}

func (x *Vehicle) GetUnloadingPolicy() Vehicle_UnloadingPolicy {
	if x != nil {
		return x.UnloadingPolicy
	}
	return Vehicle_UNLOADING_POLICY_UNSPECIFIED
}

func (x *Vehicle) GetLoadLimits() map[string]*Vehicle_LoadLimit {
	if x != nil {
		return x.LoadLimits
	}
	return nil
}

func (x *Vehicle) GetCostPerHour() float64 {
	if x != nil {
		return x.CostPerHour
	}
	return 0
}

func (x *Vehicle) GetCostPerTraveledHour() float64 {
	if x != nil {
		return x.CostPerTraveledHour
	}
	return 0
}

func (x *Vehicle) GetCostPerKilometer() float64 {
	if x != nil {
		return x.CostPerKilometer
	}
	return 0
}

func (x *Vehicle) GetFixedCost() float64 {
	if x != nil {
		return x.FixedCost
	}
	return 0
}

func (x *Vehicle) GetUsedIfRouteIsEmpty() bool {
	if x != nil {
		return x.UsedIfRouteIsEmpty
	}
	return false
}

func (x *Vehicle) GetRouteDurationLimit() *Vehicle_DurationLimit {
	if x != nil {
		return x.RouteDurationLimit
	}
	return nil
}

func (x *Vehicle) GetTravelDurationLimit() *Vehicle_DurationLimit {
	if x != nil {
		return x.TravelDurationLimit
	}
	return nil
}

func (x *Vehicle) GetRouteDistanceLimit() *DistanceLimit {
	if x != nil {
		return x.RouteDistanceLimit
	}
	return nil
}

func (x *Vehicle) GetExtraVisitDurationForVisitType() map[string]*durationpb.Duration {
	if x != nil {
		return x.ExtraVisitDurationForVisitType
	}
	return nil
}

func (x *Vehicle) GetBreakRule() *BreakRule {
	if x != nil {
		return x.BreakRule
	}
	return nil
}

func (x *Vehicle) GetLabel() string {
	if x != nil {
		return x.Label
	}
	return ""
}

func (x *Vehicle) GetIgnore() bool {
	if x != nil {
		return x.Ignore
	}
	return false
}

// Time windows constrain the time of an event, such as the arrival time at a
// visit, or the start and end time of a vehicle.
//
// Hard time window bounds, `start_time` and `end_time`, enforce the earliest
// and latest time of the event, such that `start_time <= event_time <=
// end_time`. The soft time window lower bound, `soft_start_time`, expresses a
// preference for the event to happen at or after `soft_start_time` by incurring
// a cost proportional to how long before soft_start_time the event occurs. The
// soft time window upper bound, `soft_end_time`, expresses a preference for the
// event to happen at or before `soft_end_time` by incurring a cost proportional
// to how long after `soft_end_time` the event occurs. `start_time`, `end_time`,
// `soft_start_time` and `soft_end_time` should be within the global time limits
// (see
// [ShipmentModel.global_start_time][google.maps.routeoptimization.v1.ShipmentModel.global_start_time]
// and
// [ShipmentModel.global_end_time][google.maps.routeoptimization.v1.ShipmentModel.global_end_time])
// and should respect:
// ```
//
//	0 <= `start_time` <= `soft_start_time` <= `end_time` and
//	0 <= `start_time` <= `soft_end_time` <= `end_time`.
//
// ```
type TimeWindow struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The hard time window start time. If unspecified it will be set to
	// `ShipmentModel.global_start_time`.
	StartTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// The hard time window end time. If unspecified it will be set to
	// `ShipmentModel.global_end_time`.
	EndTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// The soft start time of the time window.
	SoftStartTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=soft_start_time,json=softStartTime,proto3" json:"soft_start_time,omitempty"`
	// The soft end time of the time window.
	SoftEndTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=soft_end_time,json=softEndTime,proto3" json:"soft_end_time,omitempty"`
	// A cost per hour added to other costs in the model if the event occurs
	// before soft_start_time, computed as:
	//
	// ```
	//
	//	max(0, soft_start_time - t.seconds)
	//	                       * cost_per_hour_before_soft_start_time / 3600,
	//
	// t being the time of the event.
	// ```
	//
	// This cost must be positive, and the field can only be set if
	// soft_start_time has been set.
	CostPerHourBeforeSoftStartTime *float64 `protobuf:"fixed64,5,opt,name=cost_per_hour_before_soft_start_time,json=costPerHourBeforeSoftStartTime,proto3,oneof" json:"cost_per_hour_before_soft_start_time,omitempty"`
	// A cost per hour added to other costs in the model if the event occurs after
	// `soft_end_time`, computed as:
	//
	// ```
	//
	//	max(0, t.seconds - soft_end_time.seconds)
	//	                 * cost_per_hour_after_soft_end_time / 3600,
	//
	// t being the time of the event.
	// ```
	//
	// This cost must be positive, and the field can only be set if
	// `soft_end_time` has been set.
	CostPerHourAfterSoftEndTime *float64 `protobuf:"fixed64,6,opt,name=cost_per_hour_after_soft_end_time,json=costPerHourAfterSoftEndTime,proto3,oneof" json:"cost_per_hour_after_soft_end_time,omitempty"`
}

func (x *TimeWindow) Reset() {
	*x = TimeWindow{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *TimeWindow) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TimeWindow) ProtoMessage() {}

func (x *TimeWindow) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TimeWindow.ProtoReflect.Descriptor instead.
func (*TimeWindow) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{10}
}

func (x *TimeWindow) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *TimeWindow) GetEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EndTime
	}
	return nil
}

func (x *TimeWindow) GetSoftStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.SoftStartTime
	}
	return nil
}

func (x *TimeWindow) GetSoftEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.SoftEndTime
	}
	return nil
}

func (x *TimeWindow) GetCostPerHourBeforeSoftStartTime() float64 {
	if x != nil && x.CostPerHourBeforeSoftStartTime != nil {
		return *x.CostPerHourBeforeSoftStartTime
	}
	return 0
}

func (x *TimeWindow) GetCostPerHourAfterSoftEndTime() float64 {
	if x != nil && x.CostPerHourAfterSoftEndTime != nil {
		return *x.CostPerHourAfterSoftEndTime
	}
	return 0
}

// A limit defining a maximum distance which can be traveled. It can be either
// hard or soft.
//
// If a soft limit is defined, both `soft_max_meters` and
// `cost_per_kilometer_above_soft_max` must be defined and be nonnegative.
type DistanceLimit struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A hard limit constraining the distance to be at most max_meters. The limit
	// must be nonnegative.
	MaxMeters *int64 `protobuf:"varint,1,opt,name=max_meters,json=maxMeters,proto3,oneof" json:"max_meters,omitempty"`
	// A soft limit not enforcing a maximum distance limit, but when violated
	// results in a cost which adds up to other costs defined in the model,
	// with the same unit.
	//
	// If defined soft_max_meters must be less than max_meters and must be
	// nonnegative.
	SoftMaxMeters *int64 `protobuf:"varint,2,opt,name=soft_max_meters,json=softMaxMeters,proto3,oneof" json:"soft_max_meters,omitempty"`
	// Cost per kilometer incurred if distance is above `soft_max_meters` limit.
	// The additional cost is 0 if the distance is under the limit, otherwise the
	// formula used to compute the cost is the following:
	// ```
	//
	//	(distance_meters - soft_max_meters) / 1000.0 *
	//	cost_per_kilometer_above_soft_max.
	//
	// ```
	// The cost must be nonnegative.
	CostPerKilometerAboveSoftMax *float64 `protobuf:"fixed64,3,opt,name=cost_per_kilometer_above_soft_max,json=costPerKilometerAboveSoftMax,proto3,oneof" json:"cost_per_kilometer_above_soft_max,omitempty"`
}

func (x *DistanceLimit) Reset() {
	*x = DistanceLimit{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *DistanceLimit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DistanceLimit) ProtoMessage() {}

func (x *DistanceLimit) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DistanceLimit.ProtoReflect.Descriptor instead.
func (*DistanceLimit) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{11}
}

func (x *DistanceLimit) GetMaxMeters() int64 {
	if x != nil && x.MaxMeters != nil {
		return *x.MaxMeters
	}
	return 0
}

func (x *DistanceLimit) GetSoftMaxMeters() int64 {
	if x != nil && x.SoftMaxMeters != nil {
		return *x.SoftMaxMeters
	}
	return 0
}

func (x *DistanceLimit) GetCostPerKilometerAboveSoftMax() float64 {
	if x != nil && x.CostPerKilometerAboveSoftMax != nil {
		return *x.CostPerKilometerAboveSoftMax
	}
	return 0
}

// Specifies attributes of transitions between two consecutive visits on a
// route. Several `TransitionAttributes` may apply to the same transition: in
// that case, all extra costs add up and the strictest constraint or limit
// applies (following natural "AND" semantics).
type TransitionAttributes struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Tags defining the set of (src->dst) transitions these attributes apply to.
	//
	// A source visit or vehicle start matches iff its
	// [VisitRequest.tags][google.maps.routeoptimization.v1.Shipment.VisitRequest.tags]
	// or
	// [Vehicle.start_tags][google.maps.routeoptimization.v1.Vehicle.start_tags]
	// either contains `src_tag` or does not contain `excluded_src_tag` (depending
	// on which of these two fields is non-empty).
	SrcTag string `protobuf:"bytes,1,opt,name=src_tag,json=srcTag,proto3" json:"src_tag,omitempty"`
	// See `src_tag`. Exactly one of `src_tag` and `excluded_src_tag` must be
	// non-empty.
	ExcludedSrcTag string `protobuf:"bytes,2,opt,name=excluded_src_tag,json=excludedSrcTag,proto3" json:"excluded_src_tag,omitempty"`
	// A destination visit or vehicle end matches iff its
	// [VisitRequest.tags][google.maps.routeoptimization.v1.Shipment.VisitRequest.tags]
	// or [Vehicle.end_tags][google.maps.routeoptimization.v1.Vehicle.end_tags]
	// either contains `dst_tag` or does not contain `excluded_dst_tag` (depending
	// on which of these two fields is non-empty).
	DstTag string `protobuf:"bytes,3,opt,name=dst_tag,json=dstTag,proto3" json:"dst_tag,omitempty"`
	// See `dst_tag`. Exactly one of `dst_tag` and `excluded_dst_tag` must be
	// non-empty.
	ExcludedDstTag string `protobuf:"bytes,4,opt,name=excluded_dst_tag,json=excludedDstTag,proto3" json:"excluded_dst_tag,omitempty"`
	// Specifies a cost for performing this transition. This is in the same unit
	// as all other costs in the model and must not be negative. It is applied on
	// top of all other existing costs.
	Cost float64 `protobuf:"fixed64,5,opt,name=cost,proto3" json:"cost,omitempty"`
	// Specifies a cost per kilometer applied to the distance traveled while
	// performing this transition. It adds up to any
	// [Vehicle.cost_per_kilometer][google.maps.routeoptimization.v1.Vehicle.cost_per_kilometer]
	// specified on vehicles.
	CostPerKilometer float64 `protobuf:"fixed64,6,opt,name=cost_per_kilometer,json=costPerKilometer,proto3" json:"cost_per_kilometer,omitempty"`
	// Specifies a limit on the distance traveled while performing this
	// transition.
	//
	// As of 2021/06, only soft limits are supported.
	DistanceLimit *DistanceLimit `protobuf:"bytes,7,opt,name=distance_limit,json=distanceLimit,proto3" json:"distance_limit,omitempty"`
	// Specifies a delay incurred when performing this transition.
	//
	// This delay always occurs *after* finishing the source visit and *before*
	// starting the destination visit.
	Delay *durationpb.Duration `protobuf:"bytes,8,opt,name=delay,proto3" json:"delay,omitempty"`
}

func (x *TransitionAttributes) Reset() {
	*x = TransitionAttributes{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *TransitionAttributes) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TransitionAttributes) ProtoMessage() {}

func (x *TransitionAttributes) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TransitionAttributes.ProtoReflect.Descriptor instead.
func (*TransitionAttributes) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{12}
}

func (x *TransitionAttributes) GetSrcTag() string {
	if x != nil {
		return x.SrcTag
	}
	return ""
}

func (x *TransitionAttributes) GetExcludedSrcTag() string {
	if x != nil {
		return x.ExcludedSrcTag
	}
	return ""
}

func (x *TransitionAttributes) GetDstTag() string {
	if x != nil {
		return x.DstTag
	}
	return ""
}

func (x *TransitionAttributes) GetExcludedDstTag() string {
	if x != nil {
		return x.ExcludedDstTag
	}
	return ""
}

func (x *TransitionAttributes) GetCost() float64 {
	if x != nil {
		return x.Cost
	}
	return 0
}

func (x *TransitionAttributes) GetCostPerKilometer() float64 {
	if x != nil {
		return x.CostPerKilometer
	}
	return 0
}

func (x *TransitionAttributes) GetDistanceLimit() *DistanceLimit {
	if x != nil {
		return x.DistanceLimit
	}
	return nil
}

func (x *TransitionAttributes) GetDelay() *durationpb.Duration {
	if x != nil {
		return x.Delay
	}
	return nil
}

// Encapsulates a waypoint. Waypoints mark arrival and departure locations of
// VisitRequests, and start and end locations of Vehicles.
type Waypoint struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Different ways to represent a location.
	//
	// Types that are assignable to LocationType:
	//
	//	*Waypoint_Location
	//	*Waypoint_PlaceId
	LocationType isWaypoint_LocationType `protobuf_oneof:"location_type"`
	// Optional. Indicates that the location of this waypoint is meant to have a
	// preference for the vehicle to stop at a particular side of road. When you
	// set this value, the route will pass through the location so that the
	// vehicle can stop at the side of road that the location is biased towards
	// from the center of the road. This option doesn't work for the 'WALKING'
	// travel mode.
	SideOfRoad bool `protobuf:"varint,3,opt,name=side_of_road,json=sideOfRoad,proto3" json:"side_of_road,omitempty"`
}

func (x *Waypoint) Reset() {
	*x = Waypoint{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Waypoint) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Waypoint) ProtoMessage() {}

func (x *Waypoint) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Waypoint.ProtoReflect.Descriptor instead.
func (*Waypoint) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{13}
}

func (m *Waypoint) GetLocationType() isWaypoint_LocationType {
	if m != nil {
		return m.LocationType
	}
	return nil
}

func (x *Waypoint) GetLocation() *Location {
	if x, ok := x.GetLocationType().(*Waypoint_Location); ok {
		return x.Location
	}
	return nil
}

func (x *Waypoint) GetPlaceId() string {
	if x, ok := x.GetLocationType().(*Waypoint_PlaceId); ok {
		return x.PlaceId
	}
	return ""
}

func (x *Waypoint) GetSideOfRoad() bool {
	if x != nil {
		return x.SideOfRoad
	}
	return false
}

type isWaypoint_LocationType interface {
	isWaypoint_LocationType()
}

type Waypoint_Location struct {
	// A point specified using geographic coordinates, including an optional
	// heading.
	Location *Location `protobuf:"bytes,1,opt,name=location,proto3,oneof"`
}

type Waypoint_PlaceId struct {
	// The POI Place ID associated with the waypoint.
	PlaceId string `protobuf:"bytes,2,opt,name=place_id,json=placeId,proto3,oneof"`
}

func (*Waypoint_Location) isWaypoint_LocationType() {}

func (*Waypoint_PlaceId) isWaypoint_LocationType() {}

// Encapsulates a location (a geographic point, and an optional heading).
type Location struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The waypoint's geographic coordinates.
	LatLng *latlng.LatLng `protobuf:"bytes,1,opt,name=lat_lng,json=latLng,proto3" json:"lat_lng,omitempty"`
	// The compass heading associated with the direction of the flow of traffic.
	// This value is used to specify the side of the road to use for pickup and
	// drop-off. Heading values can be from 0 to 360, where 0 specifies a heading
	// of due North, 90 specifies a heading of due East, etc.
	Heading *int32 `protobuf:"varint,2,opt,name=heading,proto3,oneof" json:"heading,omitempty"`
}

func (x *Location) Reset() {
	*x = Location{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Location) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Location) ProtoMessage() {}

func (x *Location) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Location.ProtoReflect.Descriptor instead.
func (*Location) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{14}
}

func (x *Location) GetLatLng() *latlng.LatLng {
	if x != nil {
		return x.LatLng
	}
	return nil
}

func (x *Location) GetHeading() int32 {
	if x != nil && x.Heading != nil {
		return *x.Heading
	}
	return 0
}

// Rules to generate time breaks for a vehicle (e.g. lunch breaks). A break
// is a contiguous period of time during which the vehicle remains idle at its
// current position and cannot perform any visit. A break may occur:
//
//   - during the travel between two visits (which includes the time right
//     before or right after a visit, but not in the middle of a visit), in
//     which case it extends the corresponding transit time between the visits,
//   - or before the vehicle start (the vehicle may not start in the middle of
//     a break), in which case it does not affect the vehicle start time.
//   - or after the vehicle end (ditto, with the vehicle end time).
type BreakRule struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Sequence of breaks. See the `BreakRequest` message.
	BreakRequests []*BreakRule_BreakRequest `protobuf:"bytes,1,rep,name=break_requests,json=breakRequests,proto3" json:"break_requests,omitempty"`
	// Several `FrequencyConstraint` may apply. They must all be satisfied by
	// the `BreakRequest`s of this `BreakRule`. See `FrequencyConstraint`.
	FrequencyConstraints []*BreakRule_FrequencyConstraint `protobuf:"bytes,2,rep,name=frequency_constraints,json=frequencyConstraints,proto3" json:"frequency_constraints,omitempty"`
}

func (x *BreakRule) Reset() {
	*x = BreakRule{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BreakRule) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BreakRule) ProtoMessage() {}

func (x *BreakRule) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BreakRule.ProtoReflect.Descriptor instead.
func (*BreakRule) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{15}
}

func (x *BreakRule) GetBreakRequests() []*BreakRule_BreakRequest {
	if x != nil {
		return x.BreakRequests
	}
	return nil
}

func (x *BreakRule) GetFrequencyConstraints() []*BreakRule_FrequencyConstraint {
	if x != nil {
		return x.FrequencyConstraints
	}
	return nil
}

// A vehicle's route can be decomposed, along the time axis, like this (we
// assume there are n visits):
// ```
//
//	|            |            |          |       |  T[2], |        |      |
//	| Transition |  Visit #0  |          |       |  V[2], |        |      |
//	|     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
//	|  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
//	|            |            |          |       | T[n-1] |        |      |
//	^            ^            ^          ^       ^        ^        ^      ^
//
// vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
//
//	start     (arrival)   (departure)   start   end      start    end     end
//
// ```
// Note that we make a difference between:
//
//   - "punctual events", such as the vehicle start and end and each visit's start
//     and end (aka arrival and departure). They happen at a given second.
//   - "time intervals", such as the visits themselves, and the transition between
//     visits. Though time intervals can sometimes have zero duration, i.e. start
//     and end at the same second, they often have a positive duration.
//
// Invariants:
//
//   - If there are n visits, there are n+1 transitions.
//   - A visit is always surrounded by a transition before it (same index) and a
//     transition after it (index + 1).
//   - The vehicle start is always followed by transition #0.
//   - The vehicle end is always preceded by transition #n.
//
// Zooming in, here is what happens during a `Transition` and a `Visit`:
// ```
// ---+-------------------------------------+-----------------------------+-->
//
//	|           TRANSITION[i]             |           VISIT[i]          |
//	|                                     |                             |
//	|  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
//	|    VISIT[i-1].departure_location to |                             |
//	|    VISIT[i].arrival_location, which |  * Spend some time:         |
//	|    takes a given travel duration    |    the "visit duration".    |
//	|    and distance                     |                             |
//	|                                     |  * Load or unload           |
//	|  * BREAKS: the driver may have      |    some quantities from the |
//	|    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
//	|                                     |                             |
//	|  * WAIT: the driver/vehicle does    |                             |
//	|    nothing. This can happen for     |                             |
//	|    many reasons, for example when   |                             |
//	|    the vehicle reaches the next     |                             |
//	|    event's destination before the   |                             |
//	|    start of its time window         |                             |
//	|                                     |                             |
//	|  * DELAY: *right before* the next   |                             |
//	|    arrival. E.g. the vehicle and/or |                             |
//	|    driver spends time unloading.    |                             |
//	|                                     |                             |
//
// ---+-------------------------------------+-----------------------------+-->
//
//	^                                     ^                             ^
//
// V[i-1].end                           V[i].start                    V[i].end
// ```
// Lastly, here is how the TRAVEL, BREAKS, DELAY and WAIT can be arranged
// during a transition.
//
//   - They don't overlap.
//   - The DELAY is unique and *must* be a contiguous period of time right
//     before the next visit (or vehicle end). Thus, it suffice to know the
//     delay duration to know its start and end time.
//   - The BREAKS are contiguous, non-overlapping periods of time. The
//     response specifies the start time and duration of each break.
//   - TRAVEL and WAIT are "preemptable": they can be interrupted several times
//     during this transition. Clients can assume that travel happens "as soon as
//     possible" and that "wait" fills the remaining time.
//
// A (complex) example:
// ```
//
//	TRANSITION[i]
//
// --++-----+-----------------------------------------------------------++-->
//
//	||     |       |           |       |           |         |         ||
//	||  T  |   B   |     T     |       |     B     |         |    D    ||
//	||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
//	||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
//	||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
//	||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
//	||  l  |       |     l     |       |           |         |         ||
//	||     |       |           |       |           |         |         ||
//
// --++-----------------------------------------------------------------++-->
// ```
type ShipmentRoute struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Vehicle performing the route, identified by its index in the source
	// `ShipmentModel`.
	VehicleIndex int32 `protobuf:"varint,1,opt,name=vehicle_index,json=vehicleIndex,proto3" json:"vehicle_index,omitempty"`
	// Label of the vehicle performing this route, equal to
	// `ShipmentModel.vehicles(vehicle_index).label`, if specified.
	VehicleLabel string `protobuf:"bytes,2,opt,name=vehicle_label,json=vehicleLabel,proto3" json:"vehicle_label,omitempty"`
	// Time at which the vehicle starts its route.
	VehicleStartTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=vehicle_start_time,json=vehicleStartTime,proto3" json:"vehicle_start_time,omitempty"`
	// Time at which the vehicle finishes its route.
	VehicleEndTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=vehicle_end_time,json=vehicleEndTime,proto3" json:"vehicle_end_time,omitempty"`
	// Ordered sequence of visits representing a route.
	// visits[i] is the i-th visit in the route.
	// If this field is empty, the vehicle is considered as unused.
	Visits []*ShipmentRoute_Visit `protobuf:"bytes,7,rep,name=visits,proto3" json:"visits,omitempty"`
	// Ordered list of transitions for the route.
	Transitions []*ShipmentRoute_Transition `protobuf:"bytes,8,rep,name=transitions,proto3" json:"transitions,omitempty"`
	// When
	// [OptimizeToursRequest.consider_road_traffic][google.maps.routeoptimization.v1.OptimizeToursRequest.consider_road_traffic],
	// is set to true, this field indicates that inconsistencies in route timings
	// are predicted using traffic-based travel duration estimates. There may be
	// insufficient time to complete traffic-adjusted travel, delays, and breaks
	// between visits, before the first visit, or after the last visit, while
	// still satisfying the visit and vehicle time windows. For example,
	//
	// ```
	//
	//	start_time(previous_visit) + duration(previous_visit) +
	//	travel_duration(previous_visit, next_visit) > start_time(next_visit)
	//
	// ```
	//
	// Arrival at next_visit will likely happen later than its current
	// time window due the increased estimate of travel time
	// `travel_duration(previous_visit, next_visit)` due to traffic. Also, a break
	// may be forced to overlap with a visit due to an increase in travel time
	// estimates and visit or break time window restrictions.
	HasTrafficInfeasibilities bool `protobuf:"varint,9,opt,name=has_traffic_infeasibilities,json=hasTrafficInfeasibilities,proto3" json:"has_traffic_infeasibilities,omitempty"`
	// The encoded polyline representation of the route.
	// This field is only populated if
	// [OptimizeToursRequest.populate_polylines][google.maps.routeoptimization.v1.OptimizeToursRequest.populate_polylines]
	// is set to true.
	RoutePolyline *ShipmentRoute_EncodedPolyline `protobuf:"bytes,10,opt,name=route_polyline,json=routePolyline,proto3" json:"route_polyline,omitempty"`
	// Breaks scheduled for the vehicle performing this route.
	// The `breaks` sequence represents time intervals, each starting at the
	// corresponding `start_time` and lasting `duration` seconds.
	Breaks []*ShipmentRoute_Break `protobuf:"bytes,11,rep,name=breaks,proto3" json:"breaks,omitempty"`
	// Duration, distance and load metrics for this route. The fields of
	// [AggregatedMetrics][google.maps.routeoptimization.v1.AggregatedMetrics] are
	// summed over all
	// [ShipmentRoute.transitions][google.maps.routeoptimization.v1.ShipmentRoute.transitions]
	// or
	// [ShipmentRoute.visits][google.maps.routeoptimization.v1.ShipmentRoute.visits],
	// depending on the context.
	Metrics *AggregatedMetrics `protobuf:"bytes,12,opt,name=metrics,proto3" json:"metrics,omitempty"`
	// Cost of the route, broken down by cost-related request fields.
	// The keys are proto paths, relative to the input OptimizeToursRequest, e.g.
	// "model.shipments.pickups.cost", and the values are the total cost
	// generated by the corresponding cost field, aggregated over the whole route.
	// In other words, costs["model.shipments.pickups.cost"] is the sum of all
	// pickup costs over the route. All costs defined in the model are reported in
	// detail here with the exception of costs related to TransitionAttributes
	// that are only reported in an aggregated way as of 2022/01.
	RouteCosts map[string]float64 `protobuf:"bytes,17,rep,name=route_costs,json=routeCosts,proto3" json:"route_costs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"`
	// Total cost of the route. The sum of all costs in the cost map.
	RouteTotalCost float64 `protobuf:"fixed64,18,opt,name=route_total_cost,json=routeTotalCost,proto3" json:"route_total_cost,omitempty"`
}

func (x *ShipmentRoute) Reset() {
	*x = ShipmentRoute{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentRoute) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentRoute) ProtoMessage() {}

func (x *ShipmentRoute) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentRoute.ProtoReflect.Descriptor instead.
func (*ShipmentRoute) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16}
}

func (x *ShipmentRoute) GetVehicleIndex() int32 {
	if x != nil {
		return x.VehicleIndex
	}
	return 0
}

func (x *ShipmentRoute) GetVehicleLabel() string {
	if x != nil {
		return x.VehicleLabel
	}
	return ""
}

func (x *ShipmentRoute) GetVehicleStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.VehicleStartTime
	}
	return nil
}

func (x *ShipmentRoute) GetVehicleEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.VehicleEndTime
	}
	return nil
}

func (x *ShipmentRoute) GetVisits() []*ShipmentRoute_Visit {
	if x != nil {
		return x.Visits
	}
	return nil
}

func (x *ShipmentRoute) GetTransitions() []*ShipmentRoute_Transition {
	if x != nil {
		return x.Transitions
	}
	return nil
}

func (x *ShipmentRoute) GetHasTrafficInfeasibilities() bool {
	if x != nil {
		return x.HasTrafficInfeasibilities
	}
	return false
}

func (x *ShipmentRoute) GetRoutePolyline() *ShipmentRoute_EncodedPolyline {
	if x != nil {
		return x.RoutePolyline
	}
	return nil
}

func (x *ShipmentRoute) GetBreaks() []*ShipmentRoute_Break {
	if x != nil {
		return x.Breaks
	}
	return nil
}

func (x *ShipmentRoute) GetMetrics() *AggregatedMetrics {
	if x != nil {
		return x.Metrics
	}
	return nil
}

func (x *ShipmentRoute) GetRouteCosts() map[string]float64 {
	if x != nil {
		return x.RouteCosts
	}
	return nil
}

func (x *ShipmentRoute) GetRouteTotalCost() float64 {
	if x != nil {
		return x.RouteTotalCost
	}
	return 0
}

// Specifies details of unperformed shipments in a solution. For trivial cases
// and/or if we are able to identify the cause for skipping, we report the
// reason here.
type SkippedShipment struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The index corresponds to the index of the shipment in the source
	// `ShipmentModel`.
	Index int32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
	// Copy of the corresponding
	// [Shipment.label][google.maps.routeoptimization.v1.Shipment.label], if
	// specified in the `Shipment`.
	Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
	// A list of reasons that explain why the shipment was skipped. See comment
	// above `Reason`.
	Reasons []*SkippedShipment_Reason `protobuf:"bytes,3,rep,name=reasons,proto3" json:"reasons,omitempty"`
}

func (x *SkippedShipment) Reset() {
	*x = SkippedShipment{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SkippedShipment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SkippedShipment) ProtoMessage() {}

func (x *SkippedShipment) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SkippedShipment.ProtoReflect.Descriptor instead.
func (*SkippedShipment) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17}
}

func (x *SkippedShipment) GetIndex() int32 {
	if x != nil {
		return x.Index
	}
	return 0
}

func (x *SkippedShipment) GetLabel() string {
	if x != nil {
		return x.Label
	}
	return ""
}

func (x *SkippedShipment) GetReasons() []*SkippedShipment_Reason {
	if x != nil {
		return x.Reasons
	}
	return nil
}

// Aggregated metrics for
// [ShipmentRoute][google.maps.routeoptimization.v1.ShipmentRoute] (resp. for
// [OptimizeToursResponse][google.maps.routeoptimization.v1.OptimizeToursResponse]
// over all
// [Transition][google.maps.routeoptimization.v1.ShipmentRoute.Transition]
// and/or [Visit][google.maps.routeoptimization.v1.ShipmentRoute.Visit] (resp.
// over all [ShipmentRoute][google.maps.routeoptimization.v1.ShipmentRoute])
// elements.
type AggregatedMetrics struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Number of shipments performed. Note that a pickup and delivery pair only
	// counts once.
	PerformedShipmentCount int32 `protobuf:"varint,1,opt,name=performed_shipment_count,json=performedShipmentCount,proto3" json:"performed_shipment_count,omitempty"`
	// Total travel duration for a route or a solution.
	TravelDuration *durationpb.Duration `protobuf:"bytes,2,opt,name=travel_duration,json=travelDuration,proto3" json:"travel_duration,omitempty"`
	// Total wait duration for a route or a solution.
	WaitDuration *durationpb.Duration `protobuf:"bytes,3,opt,name=wait_duration,json=waitDuration,proto3" json:"wait_duration,omitempty"`
	// Total delay duration for a route or a solution.
	DelayDuration *durationpb.Duration `protobuf:"bytes,4,opt,name=delay_duration,json=delayDuration,proto3" json:"delay_duration,omitempty"`
	// Total break duration for a route or a solution.
	BreakDuration *durationpb.Duration `protobuf:"bytes,5,opt,name=break_duration,json=breakDuration,proto3" json:"break_duration,omitempty"`
	// Total visit duration for a route or a solution.
	VisitDuration *durationpb.Duration `protobuf:"bytes,6,opt,name=visit_duration,json=visitDuration,proto3" json:"visit_duration,omitempty"`
	// The total duration should be equal to the sum of all durations above.
	// For routes, it also corresponds to:
	// ```
	// [ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time]
	// -
	// [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
	// ```
	TotalDuration *durationpb.Duration `protobuf:"bytes,7,opt,name=total_duration,json=totalDuration,proto3" json:"total_duration,omitempty"`
	// Total travel distance for a route or a solution.
	TravelDistanceMeters float64 `protobuf:"fixed64,8,opt,name=travel_distance_meters,json=travelDistanceMeters,proto3" json:"travel_distance_meters,omitempty"`
	// Maximum load achieved over the entire route (resp. solution), for each of
	// the quantities on this route (resp. solution), computed as the maximum over
	// all
	// [Transition.vehicle_loads][google.maps.routeoptimization.v1.ShipmentRoute.Transition.vehicle_loads]
	// (resp.
	// [ShipmentRoute.metrics.max_loads][google.maps.routeoptimization.v1.AggregatedMetrics.max_loads].
	MaxLoads map[string]*ShipmentRoute_VehicleLoad `protobuf:"bytes,9,rep,name=max_loads,json=maxLoads,proto3" json:"max_loads,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

func (x *AggregatedMetrics) Reset() {
	*x = AggregatedMetrics{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AggregatedMetrics) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AggregatedMetrics) ProtoMessage() {}

func (x *AggregatedMetrics) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AggregatedMetrics.ProtoReflect.Descriptor instead.
func (*AggregatedMetrics) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{18}
}

func (x *AggregatedMetrics) GetPerformedShipmentCount() int32 {
	if x != nil {
		return x.PerformedShipmentCount
	}
	return 0
}

func (x *AggregatedMetrics) GetTravelDuration() *durationpb.Duration {
	if x != nil {
		return x.TravelDuration
	}
	return nil
}

func (x *AggregatedMetrics) GetWaitDuration() *durationpb.Duration {
	if x != nil {
		return x.WaitDuration
	}
	return nil
}

func (x *AggregatedMetrics) GetDelayDuration() *durationpb.Duration {
	if x != nil {
		return x.DelayDuration
	}
	return nil
}

func (x *AggregatedMetrics) GetBreakDuration() *durationpb.Duration {
	if x != nil {
		return x.BreakDuration
	}
	return nil
}

func (x *AggregatedMetrics) GetVisitDuration() *durationpb.Duration {
	if x != nil {
		return x.VisitDuration
	}
	return nil
}

func (x *AggregatedMetrics) GetTotalDuration() *durationpb.Duration {
	if x != nil {
		return x.TotalDuration
	}
	return nil
}

func (x *AggregatedMetrics) GetTravelDistanceMeters() float64 {
	if x != nil {
		return x.TravelDistanceMeters
	}
	return 0
}

func (x *AggregatedMetrics) GetMaxLoads() map[string]*ShipmentRoute_VehicleLoad {
	if x != nil {
		return x.MaxLoads
	}
	return nil
}

// Solution injected in the request including information about which visits
// must be constrained and how they must be constrained.
type InjectedSolutionConstraint struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Routes of the solution to inject. Some routes may be omitted from the
	// original solution. The routes and skipped shipments must satisfy the basic
	// validity assumptions listed for `injected_first_solution_routes`.
	Routes []*ShipmentRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"`
	// Skipped shipments of the solution to inject. Some may be omitted from the
	// original solution. See the `routes` field.
	SkippedShipments []*SkippedShipment `protobuf:"bytes,2,rep,name=skipped_shipments,json=skippedShipments,proto3" json:"skipped_shipments,omitempty"`
	// For zero or more groups of vehicles, specifies when and how much to relax
	// constraints. If this field is empty, all non-empty vehicle routes are
	// fully constrained.
	ConstraintRelaxations []*InjectedSolutionConstraint_ConstraintRelaxation `protobuf:"bytes,3,rep,name=constraint_relaxations,json=constraintRelaxations,proto3" json:"constraint_relaxations,omitempty"`
}

func (x *InjectedSolutionConstraint) Reset() {
	*x = InjectedSolutionConstraint{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InjectedSolutionConstraint) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InjectedSolutionConstraint) ProtoMessage() {}

func (x *InjectedSolutionConstraint) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use InjectedSolutionConstraint.ProtoReflect.Descriptor instead.
func (*InjectedSolutionConstraint) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19}
}

func (x *InjectedSolutionConstraint) GetRoutes() []*ShipmentRoute {
	if x != nil {
		return x.Routes
	}
	return nil
}

func (x *InjectedSolutionConstraint) GetSkippedShipments() []*SkippedShipment {
	if x != nil {
		return x.SkippedShipments
	}
	return nil
}

func (x *InjectedSolutionConstraint) GetConstraintRelaxations() []*InjectedSolutionConstraint_ConstraintRelaxation {
	if x != nil {
		return x.ConstraintRelaxations
	}
	return nil
}

// Describes an error encountered when validating an `OptimizeToursRequest`.
type OptimizeToursValidationError struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A validation error is defined by the pair (`code`, `display_name`) which
	// are always present.
	//
	// Other fields (below) provide more context about the error.
	//
	// *MULTIPLE ERRORS*:
	// When there are multiple errors, the validation process tries to output
	// several of them. Much like a compiler, this is an imperfect process. Some
	// validation errors will be "fatal", meaning that they stop the entire
	// validation process. This is the case for `display_name="UNSPECIFIED"`
	// errors, among others. Some may cause the validation process to skip other
	// errors.
	//
	// *STABILITY*:
	// `code` and `display_name` should be very stable. But new codes and
	// display names may appear over time, which may cause a given (invalid)
	// request to yield a different (`code`, `display_name`) pair because the new
	// error hid the old one (see "MULTIPLE ERRORS").
	//
	// *REFERENCE*: A list of all (code, name) pairs:
	//
	// * UNSPECIFIED = 0;
	// * VALIDATION_TIMEOUT_ERROR = 10; Validation couldn't be completed within
	// the deadline.
	//
	// * REQUEST_OPTIONS_ERROR = 12;
	//   - REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201;
	//   - REQUEST_OPTIONS_INVALID_MAX_VALIDATION_ERRORS = 1203;
	//   - REQUEST_OPTIONS_INVALID_GEODESIC_METERS_PER_SECOND = 1204;
	//   - REQUEST_OPTIONS_GEODESIC_METERS_PER_SECOND_TOO_SMALL = 1205;
	//   - REQUEST_OPTIONS_MISSING_GEODESIC_METERS_PER_SECOND = 1206;
	//   - REQUEST_OPTIONS_POPULATE_PATHFINDER_TRIPS_AND_GEODESIC_DISTANCE
	//     = 1207;
	//   - REQUEST_OPTIONS_COST_MODEL_OPTIONS_AND_GEODESIC_DISTANCE = 1208;
	//   - REQUEST_OPTIONS_TRAVEL_MODE_INCOMPATIBLE_WITH_TRAFFIC = 1211;
	//   - REQUEST_OPTIONS_MULTIPLE_TRAFFIC_FLAVORS = 1212;
	//   - REQUEST_OPTIONS_INVALID_TRAFFIC_FLAVOR = 1213;
	//   - REQUEST_OPTIONS_TRAFFIC_ENABLED_WITHOUT_GLOBAL_START_TIME = 1214;
	//   - REQUEST_OPTIONS_TRAFFIC_ENABLED_WITH_PRECEDENCES = 1215;
	//   - REQUEST_OPTIONS_TRAFFIC_PREFILL_MODE_INVALID = 1216;
	//   - REQUEST_OPTIONS_TRAFFIC_PREFILL_ENABLED_WITHOUT_TRAFFIC = 1217;
	//
	// * INJECTED_SOLUTION_ERROR = 20;
	//   - INJECTED_SOLUTION_MISSING_LABEL = 2000;
	//   - INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
	//   - INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
	//   - INJECTED_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 2003;
	//   - INJECTED_SOLUTION_TRANSITION_INCONSISTENT_WITH_ACTUAL_TRAVEL = 2004;
	//   - INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
	//   - INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006;
	//   - INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
	//   - INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
	//
	// * SHIPMENT_MODEL_ERROR = 22;
	//   - SHIPMENT_MODEL_TOO_LARGE = 2200;
	//   - SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
	//   - SHIPMENT_MODEL_GLOBAL_START_TIME_NEGATIVE_OR_NAN = 2202;
	//   - SHIPMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2203;
	//   - SHIPMENT_MODEL_GLOBAL_START_TIME_AFTER_GLOBAL_END_TIME = 2204;
	//   - SHIPMENT_MODEL_GLOBAL_DURATION_TOO_LONG = 2205;
	//   - SHIPMENT_MODEL_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
	//   - SHIPMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2207;
	//
	// * INDEX_ERROR = 24;
	// * TAG_ERROR = 26;
	// * TIME_WINDOW_ERROR = 28;
	//   - TIME_WINDOW_INVALID_START_TIME = 2800;
	//   - TIME_WINDOW_INVALID_END_TIME = 2801;
	//   - TIME_WINDOW_INVALID_SOFT_START_TIME = 2802;
	//   - TIME_WINDOW_INVALID_SOFT_END_TIME = 2803;
	//   - TIME_WINDOW_OUTSIDE_GLOBAL_TIME_WINDOW = 2804;
	//   - TIME_WINDOW_START_TIME_AFTER_END_TIME = 2805;
	//   - TIME_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
	//   - TIME_WINDOW_INVALID_COST_PER_HOUR_AFTER_SOFT_END_TIME = 2807;
	//   - TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME
	//     = 2808;
	//   - TIME_WINDOW_COST_AFTER_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
	//   - TIME_WINDOW_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME
	//     = 2810;
	//   - TIME_WINDOW_SOFT_END_TIME_WITHOUT_COST_AFTER_SOFT_END_TIME = 2811;
	//   - TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812;
	//   - TIME_WINDOW_START_TIME_AFTER_SOFT_START_TIME = 2813;
	//   - TIME_WINDOW_SOFT_START_TIME_AFTER_END_TIME = 2814;
	//   - TIME_WINDOW_START_TIME_AFTER_SOFT_END_TIME = 2815;
	//   - TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
	//   - TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS
	//     = 2817;
	//   - TIME_WINDOW_COST_AFTER_SOFT_END_TIME_SET_AND_MULTIPLE_WINDOWS = 2818;
	//   - TRANSITION_ATTRIBUTES_ERROR = 30;
	//   - TRANSITION_ATTRIBUTES_INVALID_COST = 3000;
	//   - TRANSITION_ATTRIBUTES_INVALID_COST_PER_KILOMETER = 3001;
	//   - TRANSITION_ATTRIBUTES_DUPLICATE_TAG_PAIR = 3002;
	//   - TRANSITION_ATTRIBUTES_DISTANCE_LIMIT_MAX_METERS_UNSUPPORTED = 3003;
	//   - TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
	//   - TRANSITION_ATTRIBUTES_CONFLICTING_SOURCE_TAGS_FIELDS = 3005;
	//   - TRANSITION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
	//   - TRANSITION_ATTRIBUTES_CONFLICTING_DESTINATION_TAGS_FIELDS = 3007;
	//   - TRANSITION_ATTRIBUTES_DELAY_DURATION_NEGATIVE_OR_NAN = 3008;
	//   - TRANSITION_ATTRIBUTES_DELAY_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
	//
	// * AMOUNT_ERROR = 31;
	//   - AMOUNT_NEGATIVE_VALUE = 3100;
	//
	// * LOAD_LIMIT_ERROR = 33;
	//   - LOAD_LIMIT_INVALID_COST_ABOVE_SOFT_MAX = 3303;
	//   - LOAD_LIMIT_SOFT_MAX_WITHOUT_COST_ABOVE_SOFT_MAX = 3304;
	//   - LOAD_LIMIT_COST_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
	//   - LOAD_LIMIT_NEGATIVE_SOFT_MAX = 3306;
	//   - LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
	//   - LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
	//   - LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
	//
	// * INTERVAL_ERROR = 34;
	//   - INTERVAL_MIN_EXCEEDS_MAX = 3401;
	//   - INTERVAL_NEGATIVE_MIN = 3402;
	//   - INTERVAL_NEGATIVE_MAX = 3403;
	//   - INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
	//   - INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
	//
	// * DISTANCE_LIMIT_ERROR = 36;
	//   - DISTANCE_LIMIT_INVALID_COST_AFTER_SOFT_MAX = 3601;
	//   - DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3602;
	//   - DISTANCE_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
	//   - DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
	//   - DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
	//   - DISTANCE_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3606;
	//
	// * DURATION_LIMIT_ERROR = 38;
	//   - DURATION_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3800;
	//   - DURATION_LIMIT_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3801;
	//   - DURATION_LIMIT_INVALID_COST_PER_HOUR_AFTER_SOFT_MAX = 3802;
	//   - DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3803;
	//   - DURATION_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
	//   - DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
	//   - DURATION_LIMIT_INVALID_COST_AFTER_QUADRATIC_SOFT_MAX = 3806;
	//   - DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_COST_PER_SQUARE_HOUR
	//     = 3807;
	//   - DURATION_LIMIT_COST_PER_SQUARE_HOUR_WITHOUT_QUADRATIC_SOFT_MAX
	//     = 3808;
	//   - DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
	//   - DURATION_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
	//   - DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
	//   - DURATION_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE
	//     = 3812;
	//   - DURATION_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
	//   - DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
	//   - DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION
	//     = 3815;
	//
	// * SHIPMENT_ERROR = 40;
	//   - SHIPMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
	//   - SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4000;
	//   - SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION
	//     = 4001;
	//   - SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
	//   - SHIPMENT_PD_DETOUR_LIMIT_AND_EXTRA_VISIT_DURATION = 4016;
	//   - SHIPMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002;
	//   - SHIPMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003;
	//   - SHIPMENT_EMPTY_SHIPMENT_TYPE = 4004;
	//   - SHIPMENT_NO_PICKUP_NO_DELIVERY = 4005;
	//   - SHIPMENT_INVALID_PENALTY_COST = 4006;
	//   - SHIPMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
	//   - SHIPMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
	//   - SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
	//   - SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
	//   - SHIPMENT_INVALID_COST_FOR_VEHICLE = 4011;
	//   - SHIPMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
	//   - SHIPMENT_DUPLICATE_COST_FOR_VEHICLE_INDEX = 4013;
	//
	// * VEHICLE_ERROR = 42;
	//   - VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
	//   - VEHICLE_DUPLICATE_REQUIRED_OPERATOR_TYPE = 4201;
	//   - VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
	//   - VEHICLE_EMPTY_START_TAG = 4203;
	//   - VEHICLE_DUPLICATE_START_TAG = 4204;
	//   - VEHICLE_EMPTY_END_TAG = 4205;
	//   - VEHICLE_DUPLICATE_END_TAG = 4206;
	//   - VEHICLE_EXTRA_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
	//   - VEHICLE_EXTRA_VISIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4208;
	//   - VEHICLE_EXTRA_VISIT_DURATION_EMPTY_KEY = 4209;
	//   - VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210;
	//   - VEHICLE_FIRST_SHIPMENT_IGNORED = 4211;
	//   - VEHICLE_FIRST_SHIPMENT_NOT_BOUND = 4212;
	//   - VEHICLE_LAST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4213;
	//   - VEHICLE_LAST_SHIPMENT_IGNORED = 4214;
	//   - VEHICLE_LAST_SHIPMENT_NOT_BOUND = 4215;
	//   - VEHICLE_IGNORED_WITH_USED_IF_ROUTE_IS_EMPTY = 4216;
	//   - VEHICLE_INVALID_COST_PER_KILOMETER = 4217;
	//   - VEHICLE_INVALID_COST_PER_HOUR = 4218;
	//   - VEHICLE_INVALID_COST_PER_TRAVELED_HOUR = 4219;
	//   - VEHICLE_INVALID_FIXED_COST = 4220;
	//   - VEHICLE_INVALID_TRAVEL_DURATION_MULTIPLE = 4221;
	//   - VEHICLE_TRAVEL_DURATION_MULTIPLE_WITH_SHIPMENT_PD_DETOUR_LIMITS
	//     = 4223;
	//   - VEHICLE_MATRIX_INDEX_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4224;
	//   - VEHICLE_MINIMUM_DURATION_LONGER_THAN_DURATION_LIMIT = 4222;
	//
	// * VISIT_REQUEST_ERROR = 44;
	//   - VISIT_REQUEST_EMPTY_TAG = 4400;
	//   - VISIT_REQUEST_DUPLICATE_TAG = 4401;
	//   - VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
	//   - VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405;
	//
	// * PRECEDENCE_ERROR = 46;
	// * BREAK_ERROR = 48;
	//   - BREAK_RULE_EMPTY = 4800;
	//   - BREAK_REQUEST_UNSPECIFIED_DURATION = 4801;
	//   - BREAK_REQUEST_UNSPECIFIED_EARLIEST_START_TIME = 4802;
	//   - BREAK_REQUEST_UNSPECIFIED_LATEST_START_TIME = 4803;
	//   - BREAK_REQUEST_DURATION_NEGATIVE_OR_NAN = 4804; = 4804;
	//   - BREAK_REQUEST_LATEST_START_TIME_BEFORE_EARLIEST_START_TIME = 4805;
	//   - BREAK_REQUEST_EARLIEST_START_TIME_BEFORE_GLOBAL_START_TIME = 4806;
	//   - BREAK_REQUEST_LATEST_END_TIME_AFTER_GLOBAL_END_TIME = 4807;
	//   - BREAK_REQUEST_NON_SCHEDULABLE = 4808;
	//   - BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
	//   - BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4810;
	//   - BREAK_FREQUENCY_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
	//   - BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION
	//     = 4812;
	//   - BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
	//   - BREAK_FREQUENCY_MISSING_MAX_INTER_BREAK_DURATION = 4814;
	//   - BREAK_FREQUENCY_MISSING_MIN_BREAK_DURATION = 4815;
	//
	// * SHIPMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
	//   - SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
	//   - SHIPMENT_TYPE_INCOMPATIBILITY_LESS_THAN_TWO_TYPES = 5002;
	//   - SHIPMENT_TYPE_INCOMPATIBILITY_DUPLICATE_TYPE = 5003;
	//   - SHIPMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_MODE = 5004;
	//   - SHIPMENT_TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBILITIES = 5005;
	//
	// * SHIPMENT_TYPE_REQUIREMENT_ERROR = 52;
	//   - SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
	//   - SHIPMENT_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
	//   - SHIPMENT_TYPE_REQUIREMENT_INVALID_REQUIREMENT_MODE = 52003;
	//   - SHIPMENT_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
	//   - SHIPMENT_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
	//   - SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_REQUIRED_TYPE = 52006;
	//   - SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
	//   - SHIPMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
	//   - SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_DEPENDENT_TYPE = 52009;
	//   - SHIPMENT_TYPE_REQUIREMENT_SELF_DEPENDENT_TYPE = 52010;
	//   - SHIPMENT_TYPE_REQUIREMENT_GRAPH_HAS_CYCLES = 52011;
	//
	// * VEHICLE_OPERATOR_ERROR = 54;
	//   - VEHICLE_OPERATOR_EMPTY_TYPE = 5400;
	//   - VEHICLE_OPERATOR_MULTIPLE_START_TIME_WINDOWS = 5401;
	//   - VEHICLE_OPERATOR_SOFT_START_TIME_WINDOW = 5402;
	//   - VEHICLE_OPERATOR_MULTIPLE_END_TIME_WINDOWS = 5403;
	//   - VEHICLE_OPERATOR_SOFT_END_TIME_WINDOW = 5404;
	//
	// * DURATION_SECONDS_MATRIX_ERROR = 56;
	//   - DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5600;
	//   - DURATION_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5601;
	Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
	// The error display name.
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// An error context may involve 0, 1 (most of the time) or more fields. For
	// example, referring to vehicle #4 and shipment #2's first pickup can be
	// done as follows:
	// ```
	// fields { name: "vehicles" index: 4}
	// fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }
	// ```
	// Note, however, that the cardinality of `fields` should not change for a
	// given error code.
	Fields []*OptimizeToursValidationError_FieldReference `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty"`
	// Human-readable string describing the error. There is a 1:1 mapping
	// between `code` and `error_message` (when code != "UNSPECIFIED").
	//
	// *STABILITY*: Not stable: the error message associated to a given `code` may
	// change (hopefully to clarify it) over time. Please rely on the
	// `display_name` and `code` instead.
	ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
	// May contain the value(s) of the field(s). This is not always available. You
	// should absolutely not rely on it and use it only for manual model
	// debugging.
	OffendingValues string `protobuf:"bytes,5,opt,name=offending_values,json=offendingValues,proto3" json:"offending_values,omitempty"`
}

func (x *OptimizeToursValidationError) Reset() {
	*x = OptimizeToursValidationError{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *OptimizeToursValidationError) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OptimizeToursValidationError) ProtoMessage() {}

func (x *OptimizeToursValidationError) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OptimizeToursValidationError.ProtoReflect.Descriptor instead.
func (*OptimizeToursValidationError) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20}
}

func (x *OptimizeToursValidationError) GetCode() int32 {
	if x != nil {
		return x.Code
	}
	return 0
}

func (x *OptimizeToursValidationError) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *OptimizeToursValidationError) GetFields() []*OptimizeToursValidationError_FieldReference {
	if x != nil {
		return x.Fields
	}
	return nil
}

func (x *OptimizeToursValidationError) GetErrorMessage() string {
	if x != nil {
		return x.ErrorMessage
	}
	return ""
}

func (x *OptimizeToursValidationError) GetOffendingValues() string {
	if x != nil {
		return x.OffendingValues
	}
	return ""
}

// Specify an input for
// [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
type InputConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required.
	//
	// Types that are assignable to Source:
	//
	//	*InputConfig_GcsSource
	Source isInputConfig_Source `protobuf_oneof:"source"`
	// Required. The input data format.
	DataFormat DataFormat `protobuf:"varint,2,opt,name=data_format,json=dataFormat,proto3,enum=google.maps.routeoptimization.v1.DataFormat" json:"data_format,omitempty"`
}

func (x *InputConfig) Reset() {
	*x = InputConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InputConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InputConfig) ProtoMessage() {}

func (x *InputConfig) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use InputConfig.ProtoReflect.Descriptor instead.
func (*InputConfig) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{21}
}

func (m *InputConfig) GetSource() isInputConfig_Source {
	if m != nil {
		return m.Source
	}
	return nil
}

func (x *InputConfig) GetGcsSource() *GcsSource {
	if x, ok := x.GetSource().(*InputConfig_GcsSource); ok {
		return x.GcsSource
	}
	return nil
}

func (x *InputConfig) GetDataFormat() DataFormat {
	if x != nil {
		return x.DataFormat
	}
	return DataFormat_DATA_FORMAT_UNSPECIFIED
}

type isInputConfig_Source interface {
	isInputConfig_Source()
}

type InputConfig_GcsSource struct {
	// A Google Cloud Storage location. This must be a single object (file).
	GcsSource *GcsSource `protobuf:"bytes,1,opt,name=gcs_source,json=gcsSource,proto3,oneof"`
}

func (*InputConfig_GcsSource) isInputConfig_Source() {}

// Specify a destination for
// [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours]
// results.
type OutputConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required.
	//
	// Types that are assignable to Destination:
	//
	//	*OutputConfig_GcsDestination
	Destination isOutputConfig_Destination `protobuf_oneof:"destination"`
	// Required. The output data format.
	DataFormat DataFormat `protobuf:"varint,2,opt,name=data_format,json=dataFormat,proto3,enum=google.maps.routeoptimization.v1.DataFormat" json:"data_format,omitempty"`
}

func (x *OutputConfig) Reset() {
	*x = OutputConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *OutputConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OutputConfig) ProtoMessage() {}

func (x *OutputConfig) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OutputConfig.ProtoReflect.Descriptor instead.
func (*OutputConfig) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{22}
}

func (m *OutputConfig) GetDestination() isOutputConfig_Destination {
	if m != nil {
		return m.Destination
	}
	return nil
}

func (x *OutputConfig) GetGcsDestination() *GcsDestination {
	if x, ok := x.GetDestination().(*OutputConfig_GcsDestination); ok {
		return x.GcsDestination
	}
	return nil
}

func (x *OutputConfig) GetDataFormat() DataFormat {
	if x != nil {
		return x.DataFormat
	}
	return DataFormat_DATA_FORMAT_UNSPECIFIED
}

type isOutputConfig_Destination interface {
	isOutputConfig_Destination()
}

type OutputConfig_GcsDestination struct {
	// The Google Cloud Storage location to write the output to.
	GcsDestination *GcsDestination `protobuf:"bytes,1,opt,name=gcs_destination,json=gcsDestination,proto3,oneof"`
}

func (*OutputConfig_GcsDestination) isOutputConfig_Destination() {}

// The Google Cloud Storage location where the input file will be read from.
type GcsSource struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. URI of a Google Cloud Storage object with the format
	// `gs://bucket/path/to/object`.
	Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
}

func (x *GcsSource) Reset() {
	*x = GcsSource{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GcsSource) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GcsSource) ProtoMessage() {}

func (x *GcsSource) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GcsSource.ProtoReflect.Descriptor instead.
func (*GcsSource) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{23}
}

func (x *GcsSource) GetUri() string {
	if x != nil {
		return x.Uri
	}
	return ""
}

// The Google Cloud Storage location where the output file(s) will be written
// to.
type GcsDestination struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Google Cloud Storage URI.
	Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
}

func (x *GcsDestination) Reset() {
	*x = GcsDestination{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GcsDestination) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GcsDestination) ProtoMessage() {}

func (x *GcsDestination) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GcsDestination.ProtoReflect.Descriptor instead.
func (*GcsDestination) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{24}
}

func (x *GcsDestination) GetUri() string {
	if x != nil {
		return x.Uri
	}
	return ""
}

// Information for solving one optimization model asynchronously.
type BatchOptimizeToursRequest_AsyncModelConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Optional. User defined model name, can be used as alias by users to keep
	// track of models.
	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// Required. Information about the input model.
	InputConfig *InputConfig `protobuf:"bytes,2,opt,name=input_config,json=inputConfig,proto3" json:"input_config,omitempty"`
	// Required. The desired output location information.
	OutputConfig *OutputConfig `protobuf:"bytes,3,opt,name=output_config,json=outputConfig,proto3" json:"output_config,omitempty"`
}

func (x *BatchOptimizeToursRequest_AsyncModelConfig) Reset() {
	*x = BatchOptimizeToursRequest_AsyncModelConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BatchOptimizeToursRequest_AsyncModelConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BatchOptimizeToursRequest_AsyncModelConfig) ProtoMessage() {}

func (x *BatchOptimizeToursRequest_AsyncModelConfig) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BatchOptimizeToursRequest_AsyncModelConfig.ProtoReflect.Descriptor instead.
func (*BatchOptimizeToursRequest_AsyncModelConfig) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{0, 0}
}

func (x *BatchOptimizeToursRequest_AsyncModelConfig) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *BatchOptimizeToursRequest_AsyncModelConfig) GetInputConfig() *InputConfig {
	if x != nil {
		return x.InputConfig
	}
	return nil
}

func (x *BatchOptimizeToursRequest_AsyncModelConfig) GetOutputConfig() *OutputConfig {
	if x != nil {
		return x.OutputConfig
	}
	return nil
}

// Overall metrics, aggregated over all routes.
type OptimizeToursResponse_Metrics struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Aggregated over the routes. Each metric is the sum (or max, for loads)
	// over all
	// [ShipmentRoute.metrics][google.maps.routeoptimization.v1.ShipmentRoute.metrics]
	// fields of the same name.
	AggregatedRouteMetrics *AggregatedMetrics `protobuf:"bytes,1,opt,name=aggregated_route_metrics,json=aggregatedRouteMetrics,proto3" json:"aggregated_route_metrics,omitempty"`
	// Number of mandatory shipments skipped.
	SkippedMandatoryShipmentCount int32 `protobuf:"varint,2,opt,name=skipped_mandatory_shipment_count,json=skippedMandatoryShipmentCount,proto3" json:"skipped_mandatory_shipment_count,omitempty"`
	// Number of vehicles used. Note: if a vehicle route is empty and
	// [Vehicle.used_if_route_is_empty][google.maps.routeoptimization.v1.Vehicle.used_if_route_is_empty]
	// is true, the vehicle is considered used.
	UsedVehicleCount int32 `protobuf:"varint,3,opt,name=used_vehicle_count,json=usedVehicleCount,proto3" json:"used_vehicle_count,omitempty"`
	// The earliest start time for a used vehicle, computed as the minimum over
	// all used vehicles of
	// [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time].
	EarliestVehicleStartTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=earliest_vehicle_start_time,json=earliestVehicleStartTime,proto3" json:"earliest_vehicle_start_time,omitempty"`
	// The latest end time for a used vehicle, computed as the maximum over all
	// used vehicles of
	// [ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time].
	LatestVehicleEndTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=latest_vehicle_end_time,json=latestVehicleEndTime,proto3" json:"latest_vehicle_end_time,omitempty"`
	// Cost of the solution, broken down by cost-related request fields.
	// The keys are proto paths, relative to the input OptimizeToursRequest,
	// e.g. "model.shipments.pickups.cost", and the values are the total cost
	// generated by the corresponding cost field, aggregated over the whole
	// solution. In other words, costs["model.shipments.pickups.cost"] is the
	// sum of all pickup costs over the solution. All costs defined in the model
	// are reported in detail here with the exception of costs related to
	// TransitionAttributes that are only reported in an aggregated way as of
	// 2022/01.
	Costs map[string]float64 `protobuf:"bytes,10,rep,name=costs,proto3" json:"costs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"`
	// Total cost of the solution. The sum of all values in the costs map.
	TotalCost float64 `protobuf:"fixed64,6,opt,name=total_cost,json=totalCost,proto3" json:"total_cost,omitempty"`
}

func (x *OptimizeToursResponse_Metrics) Reset() {
	*x = OptimizeToursResponse_Metrics{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *OptimizeToursResponse_Metrics) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OptimizeToursResponse_Metrics) ProtoMessage() {}

func (x *OptimizeToursResponse_Metrics) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OptimizeToursResponse_Metrics.ProtoReflect.Descriptor instead.
func (*OptimizeToursResponse_Metrics) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{4, 0}
}

func (x *OptimizeToursResponse_Metrics) GetAggregatedRouteMetrics() *AggregatedMetrics {
	if x != nil {
		return x.AggregatedRouteMetrics
	}
	return nil
}

func (x *OptimizeToursResponse_Metrics) GetSkippedMandatoryShipmentCount() int32 {
	if x != nil {
		return x.SkippedMandatoryShipmentCount
	}
	return 0
}

func (x *OptimizeToursResponse_Metrics) GetUsedVehicleCount() int32 {
	if x != nil {
		return x.UsedVehicleCount
	}
	return 0
}

func (x *OptimizeToursResponse_Metrics) GetEarliestVehicleStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EarliestVehicleStartTime
	}
	return nil
}

func (x *OptimizeToursResponse_Metrics) GetLatestVehicleEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.LatestVehicleEndTime
	}
	return nil
}

func (x *OptimizeToursResponse_Metrics) GetCosts() map[string]float64 {
	if x != nil {
		return x.Costs
	}
	return nil
}

func (x *OptimizeToursResponse_Metrics) GetTotalCost() float64 {
	if x != nil {
		return x.TotalCost
	}
	return 0
}

// Specifies a duration and distance matrix from visit and vehicle start
// locations to visit and vehicle end locations.
type ShipmentModel_DurationDistanceMatrix struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Specifies the rows of the duration and distance matrix. It must have as
	// many elements as
	// [ShipmentModel.duration_distance_matrix_src_tags][google.maps.routeoptimization.v1.ShipmentModel.duration_distance_matrix_src_tags].
	Rows []*ShipmentModel_DurationDistanceMatrix_Row `protobuf:"bytes,1,rep,name=rows,proto3" json:"rows,omitempty"`
	// Tag defining to which vehicles this duration and distance matrix applies.
	// If empty, this applies to all vehicles, and there can only be a single
	// matrix.
	//
	// Each vehicle start must match exactly one matrix, i.e. exactly one of
	// their `start_tags` field must match the `vehicle_start_tag` of a matrix
	// (and of that matrix only).
	//
	// All matrices must have a different `vehicle_start_tag`.
	VehicleStartTag string `protobuf:"bytes,2,opt,name=vehicle_start_tag,json=vehicleStartTag,proto3" json:"vehicle_start_tag,omitempty"`
}

func (x *ShipmentModel_DurationDistanceMatrix) Reset() {
	*x = ShipmentModel_DurationDistanceMatrix{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[28]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentModel_DurationDistanceMatrix) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentModel_DurationDistanceMatrix) ProtoMessage() {}

func (x *ShipmentModel_DurationDistanceMatrix) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[28]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentModel_DurationDistanceMatrix.ProtoReflect.Descriptor instead.
func (*ShipmentModel_DurationDistanceMatrix) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{5, 0}
}

func (x *ShipmentModel_DurationDistanceMatrix) GetRows() []*ShipmentModel_DurationDistanceMatrix_Row {
	if x != nil {
		return x.Rows
	}
	return nil
}

func (x *ShipmentModel_DurationDistanceMatrix) GetVehicleStartTag() string {
	if x != nil {
		return x.VehicleStartTag
	}
	return ""
}

// A precedence rule between two events (each event is the pickup or the
// delivery of a shipment): the "second" event has to start at least
// `offset_duration` after "first" has started.
//
// Several precedences can refer to the same (or related) events, e.g.,
// "pickup of B happens after delivery of A" and "pickup of C happens after
// pickup of B".
//
// Furthermore, precedences only apply when both shipments are performed and
// are otherwise ignored.
type ShipmentModel_PrecedenceRule struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Shipment index of the "first" event. This field must be specified.
	FirstIndex *int32 `protobuf:"varint,1,opt,name=first_index,json=firstIndex,proto3,oneof" json:"first_index,omitempty"`
	// Indicates if the "first" event is a delivery.
	FirstIsDelivery bool `protobuf:"varint,3,opt,name=first_is_delivery,json=firstIsDelivery,proto3" json:"first_is_delivery,omitempty"`
	// Shipment index of the "second" event. This field must be specified.
	SecondIndex *int32 `protobuf:"varint,2,opt,name=second_index,json=secondIndex,proto3,oneof" json:"second_index,omitempty"`
	// Indicates if the "second" event is a delivery.
	SecondIsDelivery bool `protobuf:"varint,4,opt,name=second_is_delivery,json=secondIsDelivery,proto3" json:"second_is_delivery,omitempty"`
	// The offset between the "first" and "second" event. It can be negative.
	OffsetDuration *durationpb.Duration `protobuf:"bytes,5,opt,name=offset_duration,json=offsetDuration,proto3" json:"offset_duration,omitempty"`
}

func (x *ShipmentModel_PrecedenceRule) Reset() {
	*x = ShipmentModel_PrecedenceRule{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentModel_PrecedenceRule) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentModel_PrecedenceRule) ProtoMessage() {}

func (x *ShipmentModel_PrecedenceRule) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentModel_PrecedenceRule.ProtoReflect.Descriptor instead.
func (*ShipmentModel_PrecedenceRule) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{5, 1}
}

func (x *ShipmentModel_PrecedenceRule) GetFirstIndex() int32 {
	if x != nil && x.FirstIndex != nil {
		return *x.FirstIndex
	}
	return 0
}

func (x *ShipmentModel_PrecedenceRule) GetFirstIsDelivery() bool {
	if x != nil {
		return x.FirstIsDelivery
	}
	return false
}

func (x *ShipmentModel_PrecedenceRule) GetSecondIndex() int32 {
	if x != nil && x.SecondIndex != nil {
		return *x.SecondIndex
	}
	return 0
}

func (x *ShipmentModel_PrecedenceRule) GetSecondIsDelivery() bool {
	if x != nil {
		return x.SecondIsDelivery
	}
	return false
}

func (x *ShipmentModel_PrecedenceRule) GetOffsetDuration() *durationpb.Duration {
	if x != nil {
		return x.OffsetDuration
	}
	return nil
}

// Specifies a row of the duration and distance matrix.
type ShipmentModel_DurationDistanceMatrix_Row struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Duration values for a given row. It must have as many elements as
	// [ShipmentModel.duration_distance_matrix_dst_tags][google.maps.routeoptimization.v1.ShipmentModel.duration_distance_matrix_dst_tags].
	Durations []*durationpb.Duration `protobuf:"bytes,1,rep,name=durations,proto3" json:"durations,omitempty"`
	// Distance values for a given row. If no costs or constraints refer to
	// distances in the model, this can be left empty; otherwise it must have
	// as many elements as `durations`.
	Meters []float64 `protobuf:"fixed64,2,rep,packed,name=meters,proto3" json:"meters,omitempty"`
}

func (x *ShipmentModel_DurationDistanceMatrix_Row) Reset() {
	*x = ShipmentModel_DurationDistanceMatrix_Row{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentModel_DurationDistanceMatrix_Row) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentModel_DurationDistanceMatrix_Row) ProtoMessage() {}

func (x *ShipmentModel_DurationDistanceMatrix_Row) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentModel_DurationDistanceMatrix_Row.ProtoReflect.Descriptor instead.
func (*ShipmentModel_DurationDistanceMatrix_Row) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{5, 0, 0}
}

func (x *ShipmentModel_DurationDistanceMatrix_Row) GetDurations() []*durationpb.Duration {
	if x != nil {
		return x.Durations
	}
	return nil
}

func (x *ShipmentModel_DurationDistanceMatrix_Row) GetMeters() []float64 {
	if x != nil {
		return x.Meters
	}
	return nil
}

// Request for a visit which can be done by a vehicle: it has a geo-location
// (or two, see below), opening and closing times represented by time windows,
// and a service duration time (time spent by the vehicle once it has arrived
// to pickup or drop off goods).
type Shipment_VisitRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The geo-location where the vehicle arrives when performing this
	// `VisitRequest`. If the shipment model has duration distance matrices,
	// `arrival_location` must not be specified.
	ArrivalLocation *latlng.LatLng `protobuf:"bytes,1,opt,name=arrival_location,json=arrivalLocation,proto3" json:"arrival_location,omitempty"`
	// The waypoint where the vehicle arrives when performing this
	// `VisitRequest`. If the shipment model has duration distance matrices,
	// `arrival_waypoint` must not be specified.
	ArrivalWaypoint *Waypoint `protobuf:"bytes,2,opt,name=arrival_waypoint,json=arrivalWaypoint,proto3" json:"arrival_waypoint,omitempty"`
	// The geo-location where the vehicle departs after completing this
	// `VisitRequest`. Can be omitted if it is the same as `arrival_location`.
	// If the shipment model has duration distance matrices,
	// `departure_location` must not be specified.
	DepartureLocation *latlng.LatLng `protobuf:"bytes,3,opt,name=departure_location,json=departureLocation,proto3" json:"departure_location,omitempty"`
	// The waypoint where the vehicle departs after completing this
	// `VisitRequest`. Can be omitted if it is the same as `arrival_waypoint`.
	// If the shipment model has duration distance matrices,
	// `departure_waypoint` must not be specified.
	DepartureWaypoint *Waypoint `protobuf:"bytes,4,opt,name=departure_waypoint,json=departureWaypoint,proto3" json:"departure_waypoint,omitempty"`
	// Specifies tags attached to the visit request.
	// Empty or duplicate strings are not allowed.
	Tags []string `protobuf:"bytes,5,rep,name=tags,proto3" json:"tags,omitempty"`
	// Time windows which constrain the arrival time at a visit.
	// Note that a vehicle may depart outside of the arrival time window, i.e.
	// arrival time + duration do not need to be inside a time window. This can
	// result in waiting time if the vehicle arrives before
	// [TimeWindow.start_time][google.maps.routeoptimization.v1.TimeWindow.start_time].
	//
	// The absence of `TimeWindow` means that the vehicle can perform this visit
	// at any time.
	//
	// Time windows must be disjoint, i.e. no time window must overlap with or
	// be adjacent to another, and they must be in increasing order.
	//
	// `cost_per_hour_after_soft_end_time` and `soft_end_time` can only
	// be set if there is a single time window.
	TimeWindows []*TimeWindow `protobuf:"bytes,6,rep,name=time_windows,json=timeWindows,proto3" json:"time_windows,omitempty"`
	// Duration of the visit, i.e. time spent by the vehicle between arrival
	// and departure (to be added to the possible waiting time; see
	// `time_windows`).
	Duration *durationpb.Duration `protobuf:"bytes,7,opt,name=duration,proto3" json:"duration,omitempty"`
	// Cost to service this visit request on a vehicle route. This can be used
	// to pay different costs for each alternative pickup or delivery of a
	// shipment. This cost must be in the same unit as `Shipment.penalty_cost`
	// and must not be negative.
	Cost float64 `protobuf:"fixed64,8,opt,name=cost,proto3" json:"cost,omitempty"`
	// Load demands of this visit request. This is just like
	// [Shipment.load_demands][google.maps.routeoptimization.v1.Shipment.load_demands]
	// field, except that it only applies to this
	// [VisitRequest][google.maps.routeoptimization.v1.Shipment.VisitRequest]
	// instead of the whole
	// [Shipment][google.maps.routeoptimization.v1.Shipment]. The demands listed
	// here are added to the demands listed in
	// [Shipment.load_demands][google.maps.routeoptimization.v1.Shipment.load_demands].
	LoadDemands map[string]*Shipment_Load `protobuf:"bytes,12,rep,name=load_demands,json=loadDemands,proto3" json:"load_demands,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Specifies the types of the visit. This may be used to allocate additional
	// time required for a vehicle to complete this visit (see
	// [Vehicle.extra_visit_duration_for_visit_type][google.maps.routeoptimization.v1.Vehicle.extra_visit_duration_for_visit_type]).
	//
	// A type can only appear once.
	VisitTypes []string `protobuf:"bytes,10,rep,name=visit_types,json=visitTypes,proto3" json:"visit_types,omitempty"`
	// Specifies a label for this `VisitRequest`. This label is reported in the
	// response as `visit_label` in the corresponding
	// [ShipmentRoute.Visit][google.maps.routeoptimization.v1.ShipmentRoute.Visit].
	Label string `protobuf:"bytes,11,opt,name=label,proto3" json:"label,omitempty"`
}

func (x *Shipment_VisitRequest) Reset() {
	*x = Shipment_VisitRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Shipment_VisitRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Shipment_VisitRequest) ProtoMessage() {}

func (x *Shipment_VisitRequest) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Shipment_VisitRequest.ProtoReflect.Descriptor instead.
func (*Shipment_VisitRequest) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{6, 0}
}

func (x *Shipment_VisitRequest) GetArrivalLocation() *latlng.LatLng {
	if x != nil {
		return x.ArrivalLocation
	}
	return nil
}

func (x *Shipment_VisitRequest) GetArrivalWaypoint() *Waypoint {
	if x != nil {
		return x.ArrivalWaypoint
	}
	return nil
}

func (x *Shipment_VisitRequest) GetDepartureLocation() *latlng.LatLng {
	if x != nil {
		return x.DepartureLocation
	}
	return nil
}

func (x *Shipment_VisitRequest) GetDepartureWaypoint() *Waypoint {
	if x != nil {
		return x.DepartureWaypoint
	}
	return nil
}

func (x *Shipment_VisitRequest) GetTags() []string {
	if x != nil {
		return x.Tags
	}
	return nil
}

func (x *Shipment_VisitRequest) GetTimeWindows() []*TimeWindow {
	if x != nil {
		return x.TimeWindows
	}
	return nil
}

func (x *Shipment_VisitRequest) GetDuration() *durationpb.Duration {
	if x != nil {
		return x.Duration
	}
	return nil
}

func (x *Shipment_VisitRequest) GetCost() float64 {
	if x != nil {
		return x.Cost
	}
	return 0
}

func (x *Shipment_VisitRequest) GetLoadDemands() map[string]*Shipment_Load {
	if x != nil {
		return x.LoadDemands
	}
	return nil
}

func (x *Shipment_VisitRequest) GetVisitTypes() []string {
	if x != nil {
		return x.VisitTypes
	}
	return nil
}

func (x *Shipment_VisitRequest) GetLabel() string {
	if x != nil {
		return x.Label
	}
	return ""
}

// When performing a visit, a predefined amount may be added to the vehicle
// load if it's a pickup, or subtracted if it's a delivery. This message
// defines such amount. See
// [load_demands][google.maps.routeoptimization.v1.Shipment.load_demands].
type Shipment_Load struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The amount by which the load of the vehicle performing the corresponding
	// visit will vary. Since it is an integer, users are advised to choose an
	// appropriate unit to avoid loss of precision. Must be ≥ 0.
	Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"`
}

func (x *Shipment_Load) Reset() {
	*x = Shipment_Load{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Shipment_Load) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Shipment_Load) ProtoMessage() {}

func (x *Shipment_Load) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Shipment_Load.ProtoReflect.Descriptor instead.
func (*Shipment_Load) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{6, 1}
}

func (x *Shipment_Load) GetAmount() int64 {
	if x != nil {
		return x.Amount
	}
	return 0
}

// Defines a load limit applying to a vehicle, e.g. "this truck may only
// carry up to 3500 kg". See
// [load_limits][google.maps.routeoptimization.v1.Vehicle.load_limits].
type Vehicle_LoadLimit struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The maximum acceptable amount of load.
	MaxLoad *int64 `protobuf:"varint,1,opt,name=max_load,json=maxLoad,proto3,oneof" json:"max_load,omitempty"`
	// A soft limit of the load. See
	// [cost_per_unit_above_soft_max][google.maps.routeoptimization.v1.Vehicle.LoadLimit.cost_per_unit_above_soft_max].
	SoftMaxLoad int64 `protobuf:"varint,2,opt,name=soft_max_load,json=softMaxLoad,proto3" json:"soft_max_load,omitempty"`
	// If the load ever exceeds
	// [soft_max_load][google.maps.routeoptimization.v1.Vehicle.LoadLimit.soft_max_load]
	// along this vehicle's route, the following cost penalty applies (only once
	// per vehicle): (load -
	// [soft_max_load][google.maps.routeoptimization.v1.Vehicle.LoadLimit.soft_max_load])
	// * [cost_per_unit_above_soft_max][google.maps.routeoptimization.v1.Vehicle.LoadLimit.cost_per_unit_above_soft_max]. All costs
	// add up and must be in the same unit as
	// [Shipment.penalty_cost][google.maps.routeoptimization.v1.Shipment.penalty_cost].
	CostPerUnitAboveSoftMax float64 `protobuf:"fixed64,3,opt,name=cost_per_unit_above_soft_max,json=costPerUnitAboveSoftMax,proto3" json:"cost_per_unit_above_soft_max,omitempty"`
	// The acceptable load interval of the vehicle at the start of the route.
	StartLoadInterval *Vehicle_LoadLimit_Interval `protobuf:"bytes,4,opt,name=start_load_interval,json=startLoadInterval,proto3" json:"start_load_interval,omitempty"`
	// The acceptable load interval of the vehicle at the end of the route.
	EndLoadInterval *Vehicle_LoadLimit_Interval `protobuf:"bytes,5,opt,name=end_load_interval,json=endLoadInterval,proto3" json:"end_load_interval,omitempty"`
}

func (x *Vehicle_LoadLimit) Reset() {
	*x = Vehicle_LoadLimit{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Vehicle_LoadLimit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Vehicle_LoadLimit) ProtoMessage() {}

func (x *Vehicle_LoadLimit) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Vehicle_LoadLimit.ProtoReflect.Descriptor instead.
func (*Vehicle_LoadLimit) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 0}
}

func (x *Vehicle_LoadLimit) GetMaxLoad() int64 {
	if x != nil && x.MaxLoad != nil {
		return *x.MaxLoad
	}
	return 0
}

func (x *Vehicle_LoadLimit) GetSoftMaxLoad() int64 {
	if x != nil {
		return x.SoftMaxLoad
	}
	return 0
}

func (x *Vehicle_LoadLimit) GetCostPerUnitAboveSoftMax() float64 {
	if x != nil {
		return x.CostPerUnitAboveSoftMax
	}
	return 0
}

func (x *Vehicle_LoadLimit) GetStartLoadInterval() *Vehicle_LoadLimit_Interval {
	if x != nil {
		return x.StartLoadInterval
	}
	return nil
}

func (x *Vehicle_LoadLimit) GetEndLoadInterval() *Vehicle_LoadLimit_Interval {
	if x != nil {
		return x.EndLoadInterval
	}
	return nil
}

// A limit defining a maximum duration of the route of a vehicle. It can be
// either hard or soft.
//
// When a soft limit field is defined, both the soft max threshold and its
// associated cost must be defined together.
type Vehicle_DurationLimit struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A hard limit constraining the duration to be at most max_duration.
	MaxDuration *durationpb.Duration `protobuf:"bytes,1,opt,name=max_duration,json=maxDuration,proto3" json:"max_duration,omitempty"`
	// A soft limit not enforcing a maximum duration limit, but when violated
	// makes the route incur a cost. This cost adds up to other costs defined in
	// the model, with the same unit.
	//
	// If defined, `soft_max_duration` must be nonnegative. If max_duration is
	// also defined, `soft_max_duration` must be less than max_duration.
	SoftMaxDuration *durationpb.Duration `protobuf:"bytes,2,opt,name=soft_max_duration,json=softMaxDuration,proto3" json:"soft_max_duration,omitempty"`
	// Cost per hour incurred if the `soft_max_duration` threshold is violated.
	// The additional cost is 0 if the duration is under the threshold,
	// otherwise the cost depends on the duration as follows:
	// ```
	//
	//	cost_per_hour_after_soft_max * (duration - soft_max_duration)
	//
	// ```
	// The cost must be nonnegative.
	CostPerHourAfterSoftMax *float64 `protobuf:"fixed64,3,opt,name=cost_per_hour_after_soft_max,json=costPerHourAfterSoftMax,proto3,oneof" json:"cost_per_hour_after_soft_max,omitempty"`
	// A soft limit not enforcing a maximum duration limit, but when violated
	// makes the route incur a cost, quadratic in the duration. This cost adds
	// up to other costs defined in the model, with the same unit.
	//
	// If defined, `quadratic_soft_max_duration` must be nonnegative. If
	// `max_duration` is also defined, `quadratic_soft_max_duration` must be
	// less than `max_duration`, and the difference must be no larger than one
	// day:
	//
	//	`max_duration - quadratic_soft_max_duration <= 86400 seconds`
	QuadraticSoftMaxDuration *durationpb.Duration `protobuf:"bytes,4,opt,name=quadratic_soft_max_duration,json=quadraticSoftMaxDuration,proto3" json:"quadratic_soft_max_duration,omitempty"`
	// Cost per square hour incurred if the
	// `quadratic_soft_max_duration` threshold is violated.
	//
	// The additional cost is 0 if the duration is under the threshold,
	// otherwise the cost depends on the duration as follows:
	//
	// ```
	//
	//	cost_per_square_hour_after_quadratic_soft_max *
	//	(duration - quadratic_soft_max_duration)^2
	//
	// ```
	//
	// The cost must be nonnegative.
	CostPerSquareHourAfterQuadraticSoftMax *float64 `protobuf:"fixed64,5,opt,name=cost_per_square_hour_after_quadratic_soft_max,json=costPerSquareHourAfterQuadraticSoftMax,proto3,oneof" json:"cost_per_square_hour_after_quadratic_soft_max,omitempty"`
}

func (x *Vehicle_DurationLimit) Reset() {
	*x = Vehicle_DurationLimit{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Vehicle_DurationLimit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Vehicle_DurationLimit) ProtoMessage() {}

func (x *Vehicle_DurationLimit) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Vehicle_DurationLimit.ProtoReflect.Descriptor instead.
func (*Vehicle_DurationLimit) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 1}
}

func (x *Vehicle_DurationLimit) GetMaxDuration() *durationpb.Duration {
	if x != nil {
		return x.MaxDuration
	}
	return nil
}

func (x *Vehicle_DurationLimit) GetSoftMaxDuration() *durationpb.Duration {
	if x != nil {
		return x.SoftMaxDuration
	}
	return nil
}

func (x *Vehicle_DurationLimit) GetCostPerHourAfterSoftMax() float64 {
	if x != nil && x.CostPerHourAfterSoftMax != nil {
		return *x.CostPerHourAfterSoftMax
	}
	return 0
}

func (x *Vehicle_DurationLimit) GetQuadraticSoftMaxDuration() *durationpb.Duration {
	if x != nil {
		return x.QuadraticSoftMaxDuration
	}
	return nil
}

func (x *Vehicle_DurationLimit) GetCostPerSquareHourAfterQuadraticSoftMax() float64 {
	if x != nil && x.CostPerSquareHourAfterQuadraticSoftMax != nil {
		return *x.CostPerSquareHourAfterQuadraticSoftMax
	}
	return 0
}

// Interval of acceptable load amounts.
type Vehicle_LoadLimit_Interval struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A minimum acceptable load. Must be ≥ 0.
	// If they're both specified,
	// [min][google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval.min]
	// must be ≤
	// [max][google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval.max].
	Min int64 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"`
	// A maximum acceptable load. Must be ≥ 0. If unspecified, the maximum
	// load is unrestricted by this message.
	// If they're both specified,
	// [min][google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval.min]
	// must be ≤
	// [max][google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval.max].
	Max *int64 `protobuf:"varint,2,opt,name=max,proto3,oneof" json:"max,omitempty"`
}

func (x *Vehicle_LoadLimit_Interval) Reset() {
	*x = Vehicle_LoadLimit_Interval{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Vehicle_LoadLimit_Interval) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Vehicle_LoadLimit_Interval) ProtoMessage() {}

func (x *Vehicle_LoadLimit_Interval) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Vehicle_LoadLimit_Interval.ProtoReflect.Descriptor instead.
func (*Vehicle_LoadLimit_Interval) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{9, 0, 0}
}

func (x *Vehicle_LoadLimit_Interval) GetMin() int64 {
	if x != nil {
		return x.Min
	}
	return 0
}

func (x *Vehicle_LoadLimit_Interval) GetMax() int64 {
	if x != nil && x.Max != nil {
		return *x.Max
	}
	return 0
}

// The sequence of breaks (i.e. their number and order) that apply to each
// vehicle must be known beforehand. The repeated `BreakRequest`s define
// that sequence, in the order in which they must occur. Their time windows
// (`earliest_start_time` / `latest_start_time`) may overlap, but they must
// be compatible with the order (this is checked).
type BreakRule_BreakRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Lower bound (inclusive) on the start of the break.
	EarliestStartTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=earliest_start_time,json=earliestStartTime,proto3" json:"earliest_start_time,omitempty"`
	// Required. Upper bound (inclusive) on the start of the break.
	LatestStartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=latest_start_time,json=latestStartTime,proto3" json:"latest_start_time,omitempty"`
	// Required. Minimum duration of the break. Must be positive.
	MinDuration *durationpb.Duration `protobuf:"bytes,3,opt,name=min_duration,json=minDuration,proto3" json:"min_duration,omitempty"`
}

func (x *BreakRule_BreakRequest) Reset() {
	*x = BreakRule_BreakRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BreakRule_BreakRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BreakRule_BreakRequest) ProtoMessage() {}

func (x *BreakRule_BreakRequest) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BreakRule_BreakRequest.ProtoReflect.Descriptor instead.
func (*BreakRule_BreakRequest) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{15, 0}
}

func (x *BreakRule_BreakRequest) GetEarliestStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EarliestStartTime
	}
	return nil
}

func (x *BreakRule_BreakRequest) GetLatestStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.LatestStartTime
	}
	return nil
}

func (x *BreakRule_BreakRequest) GetMinDuration() *durationpb.Duration {
	if x != nil {
		return x.MinDuration
	}
	return nil
}

// One may further constrain the frequency and duration of the breaks
// specified above, by enforcing a minimum break frequency, such as
// "There must be a break of at least 1 hour every 12 hours". Assuming that
// this can be interpreted as "Within any sliding time window of 12h, there
// must be at least one break of at least one hour", that example would
// translate to the following `FrequencyConstraint`:
// ```
//
//	{
//	   min_break_duration { seconds: 3600 }         # 1 hour.
//	   max_inter_break_duration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
//	}
//
// ```
//
// The timing and duration of the breaks in the solution will respect all
// such constraints, in addition to the time windows and minimum durations
// already specified in the `BreakRequest`.
//
// A `FrequencyConstraint` may in practice apply to non-consecutive breaks.
// For example, the following schedule honors the "1h every 12h" example:
// ```
//
//	04:00 vehicle start
//	 .. performing travel and visits ..
//	09:00 1 hour break
//	10:00 end of the break
//	 .. performing travel and visits ..
//	12:00 20-min lunch break
//	12:20 end of the break
//	 .. performing travel and visits ..
//	21:00 1 hour break
//	22:00 end of the break
//	 .. performing travel and visits ..
//	23:59 vehicle end
//
// ```
type BreakRule_FrequencyConstraint struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Minimum break duration for this constraint. Nonnegative.
	// See description of `FrequencyConstraint`.
	MinBreakDuration *durationpb.Duration `protobuf:"bytes,1,opt,name=min_break_duration,json=minBreakDuration,proto3" json:"min_break_duration,omitempty"`
	// Required. Maximum allowed span of any interval of time in the route that
	// does not include at least partially a break of `duration >=
	// min_break_duration`. Must be positive.
	MaxInterBreakDuration *durationpb.Duration `protobuf:"bytes,2,opt,name=max_inter_break_duration,json=maxInterBreakDuration,proto3" json:"max_inter_break_duration,omitempty"`
}

func (x *BreakRule_FrequencyConstraint) Reset() {
	*x = BreakRule_FrequencyConstraint{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BreakRule_FrequencyConstraint) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BreakRule_FrequencyConstraint) ProtoMessage() {}

func (x *BreakRule_FrequencyConstraint) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BreakRule_FrequencyConstraint.ProtoReflect.Descriptor instead.
func (*BreakRule_FrequencyConstraint) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{15, 1}
}

func (x *BreakRule_FrequencyConstraint) GetMinBreakDuration() *durationpb.Duration {
	if x != nil {
		return x.MinBreakDuration
	}
	return nil
}

func (x *BreakRule_FrequencyConstraint) GetMaxInterBreakDuration() *durationpb.Duration {
	if x != nil {
		return x.MaxInterBreakDuration
	}
	return nil
}

// A visit performed during a route. This visit corresponds to a pickup or a
// delivery of a `Shipment`.
type ShipmentRoute_Visit struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Index of the `shipments` field in the source
	// [ShipmentModel][google.maps.routeoptimization.v1.ShipmentModel].
	ShipmentIndex int32 `protobuf:"varint,1,opt,name=shipment_index,json=shipmentIndex,proto3" json:"shipment_index,omitempty"`
	// If true the visit corresponds to a pickup of a `Shipment`. Otherwise, it
	// corresponds to a delivery.
	IsPickup bool `protobuf:"varint,2,opt,name=is_pickup,json=isPickup,proto3" json:"is_pickup,omitempty"`
	// Index of `VisitRequest` in either the pickup or delivery field of the
	// `Shipment` (see `is_pickup`).
	VisitRequestIndex int32 `protobuf:"varint,3,opt,name=visit_request_index,json=visitRequestIndex,proto3" json:"visit_request_index,omitempty"`
	// Time at which the visit starts. Note that the vehicle may arrive earlier
	// than this at the visit location. Times are consistent with the
	// `ShipmentModel`.
	StartTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// Total visit load demand as the sum of the shipment and the visit request
	// `load_demands`. The values are negative if the visit is a delivery.
	// Demands are reported for the same types as the
	// [Transition.loads][google.maps.routeoptimization.v1.ShipmentRoute.Transition]
	// (see this field).
	LoadDemands map[string]*Shipment_Load `protobuf:"bytes,11,rep,name=load_demands,json=loadDemands,proto3" json:"load_demands,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Extra detour time due to the shipments visited on the route before the
	// visit and to the potential waiting time induced by time windows.
	// If the visit is a delivery, the detour is computed from the corresponding
	// pickup visit and is equal to:
	// ```
	// start_time(delivery) - start_time(pickup)
	// - (duration(pickup) + travel duration from the pickup location
	// to the delivery location).
	// ```
	// Otherwise, it is computed from the vehicle `start_location` and is equal
	// to:
	// ```
	// start_time - vehicle_start_time - travel duration from
	// the vehicle's `start_location` to the visit.
	// ```
	Detour *durationpb.Duration `protobuf:"bytes,6,opt,name=detour,proto3" json:"detour,omitempty"`
	// Copy of the corresponding `Shipment.label`, if specified in the
	// `Shipment`.
	ShipmentLabel string `protobuf:"bytes,7,opt,name=shipment_label,json=shipmentLabel,proto3" json:"shipment_label,omitempty"`
	// Copy of the corresponding
	// [VisitRequest.label][google.maps.routeoptimization.v1.Shipment.VisitRequest.label],
	// if specified in the `VisitRequest`.
	VisitLabel string `protobuf:"bytes,8,opt,name=visit_label,json=visitLabel,proto3" json:"visit_label,omitempty"`
}

func (x *ShipmentRoute_Visit) Reset() {
	*x = ShipmentRoute_Visit{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentRoute_Visit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentRoute_Visit) ProtoMessage() {}

func (x *ShipmentRoute_Visit) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentRoute_Visit.ProtoReflect.Descriptor instead.
func (*ShipmentRoute_Visit) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 0}
}

func (x *ShipmentRoute_Visit) GetShipmentIndex() int32 {
	if x != nil {
		return x.ShipmentIndex
	}
	return 0
}

func (x *ShipmentRoute_Visit) GetIsPickup() bool {
	if x != nil {
		return x.IsPickup
	}
	return false
}

func (x *ShipmentRoute_Visit) GetVisitRequestIndex() int32 {
	if x != nil {
		return x.VisitRequestIndex
	}
	return 0
}

func (x *ShipmentRoute_Visit) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *ShipmentRoute_Visit) GetLoadDemands() map[string]*Shipment_Load {
	if x != nil {
		return x.LoadDemands
	}
	return nil
}

func (x *ShipmentRoute_Visit) GetDetour() *durationpb.Duration {
	if x != nil {
		return x.Detour
	}
	return nil
}

func (x *ShipmentRoute_Visit) GetShipmentLabel() string {
	if x != nil {
		return x.ShipmentLabel
	}
	return ""
}

func (x *ShipmentRoute_Visit) GetVisitLabel() string {
	if x != nil {
		return x.VisitLabel
	}
	return ""
}

// Transition between two events on the route. See the description of
// [ShipmentRoute][google.maps.routeoptimization.v1.ShipmentRoute].
//
// If the vehicle does not have a `start_location` and/or `end_location`, the
// corresponding travel metrics are 0.
type ShipmentRoute_Transition struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Travel duration during this transition.
	TravelDuration *durationpb.Duration `protobuf:"bytes,1,opt,name=travel_duration,json=travelDuration,proto3" json:"travel_duration,omitempty"`
	// Distance traveled during the transition.
	TravelDistanceMeters float64 `protobuf:"fixed64,2,opt,name=travel_distance_meters,json=travelDistanceMeters,proto3" json:"travel_distance_meters,omitempty"`
	// When traffic is requested via
	// [OptimizeToursRequest.consider_road_traffic]
	// [google.maps.routeoptimization.v1.OptimizeToursRequest.consider_road_traffic],
	// and the traffic info couldn't be retrieved for a `Transition`, this
	// boolean is set to true. This may be temporary (rare hiccup in the
	// realtime traffic servers) or permanent (no data for this location).
	TrafficInfoUnavailable bool `protobuf:"varint,3,opt,name=traffic_info_unavailable,json=trafficInfoUnavailable,proto3" json:"traffic_info_unavailable,omitempty"`
	// Sum of the delay durations applied to this transition. If any, the delay
	// starts exactly `delay_duration` seconds before the next event (visit or
	// vehicle end). See
	// [TransitionAttributes.delay][google.maps.routeoptimization.v1.TransitionAttributes.delay].
	DelayDuration *durationpb.Duration `protobuf:"bytes,4,opt,name=delay_duration,json=delayDuration,proto3" json:"delay_duration,omitempty"`
	// Sum of the duration of the breaks occurring during this transition, if
	// any. Details about each break's start time and duration are stored in
	// [ShipmentRoute.breaks][google.maps.routeoptimization.v1.ShipmentRoute.breaks].
	BreakDuration *durationpb.Duration `protobuf:"bytes,5,opt,name=break_duration,json=breakDuration,proto3" json:"break_duration,omitempty"`
	// Time spent waiting during this transition. Wait duration corresponds to
	// idle time and does not include break time. Also note that this wait time
	// may be split into several non-contiguous intervals.
	WaitDuration *durationpb.Duration `protobuf:"bytes,6,opt,name=wait_duration,json=waitDuration,proto3" json:"wait_duration,omitempty"`
	// Total duration of the transition, provided for convenience. It is equal
	// to:
	//
	// * next visit `start_time` (or `vehicle_end_time` if this is the last
	// transition) - this transition's `start_time`;
	// * if `ShipmentRoute.has_traffic_infeasibilities` is false, the following
	// additionally holds: `total_duration = travel_duration + delay_duration
	// + break_duration + wait_duration`.
	TotalDuration *durationpb.Duration `protobuf:"bytes,7,opt,name=total_duration,json=totalDuration,proto3" json:"total_duration,omitempty"`
	// Start time of this transition.
	StartTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// The encoded polyline representation of the route followed during the
	// transition.
	// This field is only populated if [populate_transition_polylines]
	// [google.maps.routeoptimization.v1.OptimizeToursRequest.populate_transition_polylines]
	// is set to true.
	RoutePolyline *ShipmentRoute_EncodedPolyline `protobuf:"bytes,9,opt,name=route_polyline,json=routePolyline,proto3" json:"route_polyline,omitempty"`
	// Vehicle loads during this transition, for each type that either appears
	// in this vehicle's
	// [Vehicle.load_limits][google.maps.routeoptimization.v1.Vehicle.load_limits],
	// or that have non-zero
	// [Shipment.load_demands][google.maps.routeoptimization.v1.Shipment.load_demands]
	// on some shipment performed on this route.
	//
	// The loads during the first transition are the starting loads of the
	// vehicle route. Then, after each visit, the visit's `load_demands` are
	// either added or subtracted to get the next transition's loads, depending
	// on whether the visit was a pickup or a delivery.
	VehicleLoads map[string]*ShipmentRoute_VehicleLoad `protobuf:"bytes,11,rep,name=vehicle_loads,json=vehicleLoads,proto3" json:"vehicle_loads,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

func (x *ShipmentRoute_Transition) Reset() {
	*x = ShipmentRoute_Transition{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentRoute_Transition) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentRoute_Transition) ProtoMessage() {}

func (x *ShipmentRoute_Transition) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentRoute_Transition.ProtoReflect.Descriptor instead.
func (*ShipmentRoute_Transition) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 1}
}

func (x *ShipmentRoute_Transition) GetTravelDuration() *durationpb.Duration {
	if x != nil {
		return x.TravelDuration
	}
	return nil
}

func (x *ShipmentRoute_Transition) GetTravelDistanceMeters() float64 {
	if x != nil {
		return x.TravelDistanceMeters
	}
	return 0
}

func (x *ShipmentRoute_Transition) GetTrafficInfoUnavailable() bool {
	if x != nil {
		return x.TrafficInfoUnavailable
	}
	return false
}

func (x *ShipmentRoute_Transition) GetDelayDuration() *durationpb.Duration {
	if x != nil {
		return x.DelayDuration
	}
	return nil
}

func (x *ShipmentRoute_Transition) GetBreakDuration() *durationpb.Duration {
	if x != nil {
		return x.BreakDuration
	}
	return nil
}

func (x *ShipmentRoute_Transition) GetWaitDuration() *durationpb.Duration {
	if x != nil {
		return x.WaitDuration
	}
	return nil
}

func (x *ShipmentRoute_Transition) GetTotalDuration() *durationpb.Duration {
	if x != nil {
		return x.TotalDuration
	}
	return nil
}

func (x *ShipmentRoute_Transition) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *ShipmentRoute_Transition) GetRoutePolyline() *ShipmentRoute_EncodedPolyline {
	if x != nil {
		return x.RoutePolyline
	}
	return nil
}

func (x *ShipmentRoute_Transition) GetVehicleLoads() map[string]*ShipmentRoute_VehicleLoad {
	if x != nil {
		return x.VehicleLoads
	}
	return nil
}

// Reports the actual load of the vehicle at some point along the route,
// for a given type (see
// [Transition.vehicle_loads][google.maps.routeoptimization.v1.ShipmentRoute.Transition.vehicle_loads]).
type ShipmentRoute_VehicleLoad struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The amount of load on the vehicle, for the given type. The unit of load
	// is usually indicated by the type. See
	// [Transition.vehicle_loads][google.maps.routeoptimization.v1.ShipmentRoute.Transition.vehicle_loads].
	Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"`
}

func (x *ShipmentRoute_VehicleLoad) Reset() {
	*x = ShipmentRoute_VehicleLoad{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentRoute_VehicleLoad) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentRoute_VehicleLoad) ProtoMessage() {}

func (x *ShipmentRoute_VehicleLoad) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentRoute_VehicleLoad.ProtoReflect.Descriptor instead.
func (*ShipmentRoute_VehicleLoad) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 2}
}

func (x *ShipmentRoute_VehicleLoad) GetAmount() int64 {
	if x != nil {
		return x.Amount
	}
	return 0
}

// The encoded representation of a polyline. More information on polyline
// encoding can be found here:
// https://developers.google.com/maps/documentation/utilities/polylinealgorithm
// https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
type ShipmentRoute_EncodedPolyline struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// String representing encoded points of the polyline.
	Points string `protobuf:"bytes,1,opt,name=points,proto3" json:"points,omitempty"`
}

func (x *ShipmentRoute_EncodedPolyline) Reset() {
	*x = ShipmentRoute_EncodedPolyline{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentRoute_EncodedPolyline) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentRoute_EncodedPolyline) ProtoMessage() {}

func (x *ShipmentRoute_EncodedPolyline) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentRoute_EncodedPolyline.ProtoReflect.Descriptor instead.
func (*ShipmentRoute_EncodedPolyline) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 3}
}

func (x *ShipmentRoute_EncodedPolyline) GetPoints() string {
	if x != nil {
		return x.Points
	}
	return ""
}

// Data representing the execution of a break.
type ShipmentRoute_Break struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Start time of a break.
	StartTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// Duration of a break.
	Duration *durationpb.Duration `protobuf:"bytes,2,opt,name=duration,proto3" json:"duration,omitempty"`
}

func (x *ShipmentRoute_Break) Reset() {
	*x = ShipmentRoute_Break{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ShipmentRoute_Break) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ShipmentRoute_Break) ProtoMessage() {}

func (x *ShipmentRoute_Break) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ShipmentRoute_Break.ProtoReflect.Descriptor instead.
func (*ShipmentRoute_Break) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{16, 4}
}

func (x *ShipmentRoute_Break) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *ShipmentRoute_Break) GetDuration() *durationpb.Duration {
	if x != nil {
		return x.Duration
	}
	return nil
}

// If we can explain why the shipment was skipped, reasons will be listed
// here. If the reason is not the same for all vehicles, `reason` will have
// more than 1 element. A skipped shipment cannot have duplicate reasons,
// i.e. where all fields are the same except for `example_vehicle_index`.
// Example:
// ```
//
//	reasons {
//	  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
//	  example_vehicle_index: 1
//	  example_exceeded_capacity_type: "Apples"
//	}
//
//	reasons {
//	  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
//	  example_vehicle_index: 3
//	  example_exceeded_capacity_type: "Pears"
//	}
//
//	reasons {
//	  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
//	  example_vehicle_index: 1
//	}
//
// ```
// The skipped shipment is incompatible with all vehicles. The reasons may
// be different for all vehicles but at least one vehicle's "Apples"
// capacity would be exceeded (including vehicle 1), at least one vehicle's
// "Pears" capacity would be exceeded (including vehicle 3) and at least one
// vehicle's distance limit would be exceeded (including vehicle 1).
type SkippedShipment_Reason struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Refer to the comments of Code.
	Code SkippedShipment_Reason_Code `protobuf:"varint,1,opt,name=code,proto3,enum=google.maps.routeoptimization.v1.SkippedShipment_Reason_Code" json:"code,omitempty"`
	// If the reason is related to a shipment-vehicle incompatibility, this
	// field provides the index of one relevant vehicle.
	ExampleVehicleIndex *int32 `protobuf:"varint,2,opt,name=example_vehicle_index,json=exampleVehicleIndex,proto3,oneof" json:"example_vehicle_index,omitempty"`
	// If the reason code is `DEMAND_EXCEEDS_VEHICLE_CAPACITY`, documents one
	// capacity type that is exceeded.
	ExampleExceededCapacityType string `protobuf:"bytes,3,opt,name=example_exceeded_capacity_type,json=exampleExceededCapacityType,proto3" json:"example_exceeded_capacity_type,omitempty"`
}

func (x *SkippedShipment_Reason) Reset() {
	*x = SkippedShipment_Reason{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SkippedShipment_Reason) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SkippedShipment_Reason) ProtoMessage() {}

func (x *SkippedShipment_Reason) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SkippedShipment_Reason.ProtoReflect.Descriptor instead.
func (*SkippedShipment_Reason) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{17, 0}
}

func (x *SkippedShipment_Reason) GetCode() SkippedShipment_Reason_Code {
	if x != nil {
		return x.Code
	}
	return SkippedShipment_Reason_CODE_UNSPECIFIED
}

func (x *SkippedShipment_Reason) GetExampleVehicleIndex() int32 {
	if x != nil && x.ExampleVehicleIndex != nil {
		return *x.ExampleVehicleIndex
	}
	return 0
}

func (x *SkippedShipment_Reason) GetExampleExceededCapacityType() string {
	if x != nil {
		return x.ExampleExceededCapacityType
	}
	return ""
}

// For a group of vehicles, specifies at what threshold(s) constraints on
// visits will be relaxed and to which level. Shipments listed in
// the `skipped_shipment` field are constrained to be skipped; i.e., they
// cannot be performed.
type InjectedSolutionConstraint_ConstraintRelaxation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// All the visit constraint relaxations that will apply to visits on
	// routes with vehicles in `vehicle_indices`.
	Relaxations []*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation `protobuf:"bytes,1,rep,name=relaxations,proto3" json:"relaxations,omitempty"`
	// Specifies the vehicle indices to which the visit constraint
	// `relaxations` apply. If empty, this is considered the default and the
	// `relaxations` apply to all vehicles that are not specified in other
	// `constraint_relaxations`. There can be at most one default, i.e., at
	// most one constraint relaxation field is allowed empty
	// `vehicle_indices`. A vehicle index can only be listed once, even within
	// several `constraint_relaxations`.
	//
	// A vehicle index is mapped the same as
	// [ShipmentRoute.vehicle_index][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_index],
	// if `interpret_injected_solutions_using_labels` is true (see `fields`
	// comment).
	VehicleIndices []int32 `protobuf:"varint,2,rep,packed,name=vehicle_indices,json=vehicleIndices,proto3" json:"vehicle_indices,omitempty"`
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation) Reset() {
	*x = InjectedSolutionConstraint_ConstraintRelaxation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[52]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InjectedSolutionConstraint_ConstraintRelaxation) ProtoMessage() {}

func (x *InjectedSolutionConstraint_ConstraintRelaxation) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[52]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use InjectedSolutionConstraint_ConstraintRelaxation.ProtoReflect.Descriptor instead.
func (*InjectedSolutionConstraint_ConstraintRelaxation) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19, 0}
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation) GetRelaxations() []*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation {
	if x != nil {
		return x.Relaxations
	}
	return nil
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation) GetVehicleIndices() []int32 {
	if x != nil {
		return x.VehicleIndices
	}
	return nil
}

// If `relaxations` is empty, the start time and sequence of all visits
// on `routes` are fully constrained and no new visits may be inserted or
// added to those routes. Also, a vehicle's start and end time in
// `routes` is fully constrained, unless the vehicle is empty (i.e., has no
// visits and has `used_if_route_is_empty` set to false in the model).
//
// `relaxations(i).level` specifies the constraint relaxation level applied
// to a visit #j that satisfies:
//
//   - `route.visits(j).start_time >= relaxations(i).threshold_time` AND
//   - `j + 1 >= relaxations(i).threshold_visit_count`
//
// Similarly, the vehicle start is relaxed to `relaxations(i).level` if it
// satisfies:
//
//   - `vehicle_start_time >= relaxations(i).threshold_time` AND
//   - `relaxations(i).threshold_visit_count == 0`
//
// and the vehicle end is relaxed to `relaxations(i).level` if it satisfies:
//   - `vehicle_end_time >= relaxations(i).threshold_time` AND
//   - `route.visits_size() + 1 >= relaxations(i).threshold_visit_count`
//
// To apply a relaxation level if a visit meets the `threshold_visit_count`
// OR the `threshold_time` add two `relaxations` with the same `level`:
// one with only `threshold_visit_count` set and the other with only
// `threshold_time` set. If a visit satisfies the conditions of multiple
// `relaxations`, the most relaxed level applies. As a result, from the
// vehicle start through the route visits in order to the vehicle end, the
// relaxation level becomes more relaxed: i.e., the relaxation level is
// non-decreasing as the route progresses.
//
// The timing and sequence of route visits that do not satisfy the
// threshold conditions of any `relaxations` are fully constrained
// and no visits may be inserted into these sequences. Also, if a
// vehicle start or end does not satisfy the conditions of any
// relaxation the time is fixed, unless the vehicle is empty.
type InjectedSolutionConstraint_ConstraintRelaxation_Relaxation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The constraint relaxation level that applies when the conditions
	// at or after `threshold_time` AND at least `threshold_visit_count` are
	// satisfied.
	Level InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level `protobuf:"varint,1,opt,name=level,proto3,enum=google.maps.routeoptimization.v1.InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level" json:"level,omitempty"`
	// The time at or after which the relaxation `level` may be applied.
	ThresholdTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=threshold_time,json=thresholdTime,proto3" json:"threshold_time,omitempty"`
	// The number of visits at or after which the relaxation `level` may be
	// applied. If `threshold_visit_count` is 0 (or unset), the `level` may be
	// applied directly at the vehicle start.
	//
	// If it is `route.visits_size() + 1`, the `level` may only be applied to
	// the vehicle end. If it is more than `route.visits_size() + 1`,
	// `level` is not applied at all for that route.
	ThresholdVisitCount int32 `protobuf:"varint,3,opt,name=threshold_visit_count,json=thresholdVisitCount,proto3" json:"threshold_visit_count,omitempty"`
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) Reset() {
	*x = InjectedSolutionConstraint_ConstraintRelaxation_Relaxation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) ProtoMessage() {}

func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use InjectedSolutionConstraint_ConstraintRelaxation_Relaxation.ProtoReflect.Descriptor instead.
func (*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{19, 0, 0}
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) GetLevel() InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level {
	if x != nil {
		return x.Level
	}
	return InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_LEVEL_UNSPECIFIED
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) GetThresholdTime() *timestamppb.Timestamp {
	if x != nil {
		return x.ThresholdTime
	}
	return nil
}

func (x *InjectedSolutionConstraint_ConstraintRelaxation_Relaxation) GetThresholdVisitCount() int32 {
	if x != nil {
		return x.ThresholdVisitCount
	}
	return 0
}

// Specifies a context for the validation error. A `FieldReference` always
// refers to a given field in this file and follows the same hierarchical
// structure. For example, we may specify element #2 of `start_time_windows`
// of vehicle #5 using:
// ```
// name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
// ```
// We however omit top-level entities such as `OptimizeToursRequest` or
// `ShipmentModel` to avoid crowding the message.
type OptimizeToursValidationError_FieldReference struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Name of the field, e.g., "vehicles".
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are assignable to IndexOrKey:
	//
	//	*OptimizeToursValidationError_FieldReference_Index
	//	*OptimizeToursValidationError_FieldReference_Key
	IndexOrKey isOptimizeToursValidationError_FieldReference_IndexOrKey `protobuf_oneof:"index_or_key"`
	// Recursively nested sub-field, if needed.
	SubField *OptimizeToursValidationError_FieldReference `protobuf:"bytes,3,opt,name=sub_field,json=subField,proto3" json:"sub_field,omitempty"`
}

func (x *OptimizeToursValidationError_FieldReference) Reset() {
	*x = OptimizeToursValidationError_FieldReference{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *OptimizeToursValidationError_FieldReference) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OptimizeToursValidationError_FieldReference) ProtoMessage() {}

func (x *OptimizeToursValidationError_FieldReference) ProtoReflect() protoreflect.Message {
	mi := &file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OptimizeToursValidationError_FieldReference.ProtoReflect.Descriptor instead.
func (*OptimizeToursValidationError_FieldReference) Descriptor() ([]byte, []int) {
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP(), []int{20, 0}
}

func (x *OptimizeToursValidationError_FieldReference) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (m *OptimizeToursValidationError_FieldReference) GetIndexOrKey() isOptimizeToursValidationError_FieldReference_IndexOrKey {
	if m != nil {
		return m.IndexOrKey
	}
	return nil
}

func (x *OptimizeToursValidationError_FieldReference) GetIndex() int32 {
	if x, ok := x.GetIndexOrKey().(*OptimizeToursValidationError_FieldReference_Index); ok {
		return x.Index
	}
	return 0
}

func (x *OptimizeToursValidationError_FieldReference) GetKey() string {
	if x, ok := x.GetIndexOrKey().(*OptimizeToursValidationError_FieldReference_Key); ok {
		return x.Key
	}
	return ""
}

func (x *OptimizeToursValidationError_FieldReference) GetSubField() *OptimizeToursValidationError_FieldReference {
	if x != nil {
		return x.SubField
	}
	return nil
}

type isOptimizeToursValidationError_FieldReference_IndexOrKey interface {
	isOptimizeToursValidationError_FieldReference_IndexOrKey()
}

type OptimizeToursValidationError_FieldReference_Index struct {
	// Index of the field if repeated.
	Index int32 `protobuf:"varint,2,opt,name=index,proto3,oneof"`
}

type OptimizeToursValidationError_FieldReference_Key struct {
	// Key if the field is a map.
	Key string `protobuf:"bytes,4,opt,name=key,proto3,oneof"`
}

func (*OptimizeToursValidationError_FieldReference_Index) isOptimizeToursValidationError_FieldReference_IndexOrKey() {
}

func (*OptimizeToursValidationError_FieldReference_Key) isOptimizeToursValidationError_FieldReference_IndexOrKey() {
}

var File_google_maps_routeoptimization_v1_route_optimization_service_proto protoreflect.FileDescriptor

var file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDesc = []byte{
	0x0a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
	0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x12, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
	0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,
	0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62,
	0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e,
	0x67, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65,
	0x2f, 0x6c, 0x61, 0x74, 0x6c, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x03,
	0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54,
	0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x70,
	0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02,
	0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x76, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x65,
	0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65,
	0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x79,
	0x6e, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0,
	0x41, 0x02, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73,
	0x1a, 0xeb, 0x01, 0x0a, 0x10, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79,
	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01,
	0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a,
	0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70,
	0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x12, 0x58, 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x63,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f,
	0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x02,
	0x52, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x1c,
	0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54,
	0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a,
	0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75,
	0x72, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf2, 0x0b, 0x0a, 0x14, 0x4f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
	0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69,
	0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x45, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
	0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x65, 0x0a, 0x0c,
	0x73, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f,
	0x75, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x6c, 0x76, 0x69,
	0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x73, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x4d,
	0x6f, 0x64, 0x65, 0x12, 0x62, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6d, 0x6f,
	0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, 0x65, 0x61,
	0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x74, 0x0a, 0x1e, 0x69, 0x6e, 0x6a, 0x65, 0x63,
	0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65,
	0x52, 0x1b, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x53,
	0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x7e, 0x0a,
	0x1c, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x08, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70,
	0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53,
	0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e,
	0x74, 0x52, 0x1a, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74,
	0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x65, 0x0a,
	0x16, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
	0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x14,
	0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x6f,
	0x75, 0x74, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x29, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65,
	0x74, 0x5f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x6c, 0x75, 0x74,
	0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c,
	0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x25, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72,
	0x65, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69,
	0x6f, 0x6e, 0x73, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x32,
	0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x61, 0x64, 0x5f,
	0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x63,
	0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x52, 0x6f, 0x61, 0x64, 0x54, 0x72, 0x61, 0x66, 0x66,
	0x69, 0x63, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x70,
	0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11,
	0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65,
	0x73, 0x12, 0x42, 0x0a, 0x1d, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x72,
	0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e,
	0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61,
	0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x79,
	0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6c,
	0x61, 0x72, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x65,
	0x73, 0x70, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x72, 0x69, 0x73, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x29, 0x61,
	0x6c, 0x6c, 0x6f, 0x77, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e,
	0x65, 0x44, 0x65, 0x73, 0x70, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x69, 0x73, 0x6b, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x5f,
	0x67, 0x65, 0x6f, 0x64, 0x65, 0x73, 0x69, 0x63, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63,
	0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6f,
	0x64, 0x65, 0x73, 0x69, 0x63, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x40,
	0x0a, 0x1a, 0x67, 0x65, 0x6f, 0x64, 0x65, 0x73, 0x69, 0x63, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72,
	0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x10, 0x20, 0x01,
	0x28, 0x01, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x6f, 0x64, 0x65, 0x73, 0x69, 0x63, 0x4d, 0x65,
	0x74, 0x65, 0x72, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x88, 0x01, 0x01,
	0x12, 0x37, 0x0a, 0x15, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x48,
	0x01, 0x52, 0x13, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62,
	0x65, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
	0x59, 0x0a, 0x0b, 0x53, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x11,
	0x0a, 0x0d, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x10,
	0x00, 0x12, 0x11, 0x0a, 0x0d, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e,
	0x4c, 0x59, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x44, 0x45, 0x54, 0x45, 0x43, 0x54, 0x5f, 0x53,
	0x4f, 0x4d, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x45, 0x41, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53,
	0x48, 0x49, 0x50, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x0a, 0x53, 0x65,
	0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x41, 0x52,
	0x43, 0x48, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x5f,
	0x46, 0x41, 0x53, 0x54, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x4f, 0x4e, 0x53, 0x55, 0x4d,
	0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x5f,
	0x54, 0x49, 0x4d, 0x45, 0x10, 0x02, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x67, 0x65, 0x6f, 0x64, 0x65,
	0x73, 0x69, 0x63, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73,
	0x65, 0x63, 0x6f, 0x6e, 0x64, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61,
	0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22,
	0x88, 0x08, 0x0a, 0x15, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72,
	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x6f, 0x75,
	0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69,
	0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x61,
	0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x5e, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x70,
	0x65, 0x64, 0x5f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69,
	0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68,
	0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x6b, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f,
	0x75, 0x72, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72,
	0x6f, 0x72, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72,
	0x72, 0x6f, 0x72, 0x73, 0x12, 0x59, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18,
	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d,
	0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a,
	0xd8, 0x04, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x6d, 0x0a, 0x18, 0x61,
	0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f,
	0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69,
	0x63, 0x73, 0x52, 0x16, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f,
	0x75, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x47, 0x0a, 0x20, 0x73, 0x6b,
	0x69, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x5f,
	0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x1d, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x4d, 0x61, 0x6e,
	0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f,
	0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
	0x10, 0x75, 0x73, 0x65, 0x64, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e,
	0x74, 0x12, 0x59, 0x0a, 0x1b, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65,
	0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
	0x6d, 0x70, 0x52, 0x18, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x56, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x17,
	0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x65,
	0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x14, 0x6c, 0x61, 0x74, 0x65, 0x73,
	0x74, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12,
	0x60, 0x0a, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75,
	0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
	0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e,
	0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x63, 0x6f, 0x73, 0x74,
	0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18,
	0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74,
	0x1a, 0x38, 0x0a, 0x0a, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52,
	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, 0x0d, 0x0a, 0x0d, 0x53,
	0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x48, 0x0a, 0x09,
	0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x73, 0x68, 0x69,
	0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c,
	0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x52, 0x08, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x12, 0x33, 0x0a,
	0x13, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x11, 0x6d, 0x61,
	0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x88,
	0x01, 0x01, 0x12, 0x46, 0x0a, 0x11, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61,
	0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x67, 0x6c, 0x6f, 0x62, 0x61,
	0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x67, 0x6c,
	0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
	0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40,
	0x0a, 0x1d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72,
	0x12, 0x84, 0x01, 0x0a, 0x1a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69,
	0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18,
	0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e,
	0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44,
	0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x52, 0x18, 0x64,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d,
	0x61, 0x74, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x21, 0x64, 0x75, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x74,
	0x72, 0x69, 0x78, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x1d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x74,
	0x61, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x53, 0x72, 0x63, 0x54, 0x61, 0x67,
	0x73, 0x12, 0x48, 0x0a, 0x21, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69,
	0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5f, 0x64, 0x73,
	0x74, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1d, 0x64, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x61,
	0x74, 0x72, 0x69, 0x78, 0x44, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x6b, 0x0a, 0x15, 0x74,
	0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
	0x75, 0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70,
	0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72,
	0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
	0x65, 0x73, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74,
	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x1f, 0x73, 0x68, 0x69,
	0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x63, 0x6f, 0x6d,
	0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79,
	0x70, 0x65, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
	0x79, 0x52, 0x1d, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x49,
	0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73,
	0x12, 0x77, 0x0a, 0x1a, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70,
	0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0d,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
	0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52,
	0x18, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71,
	0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x69, 0x0a, 0x10, 0x70, 0x72, 0x65,
	0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x0e, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70,
	0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4d,
	0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52,
	0x75, 0x6c, 0x65, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52,
	0x75, 0x6c, 0x65, 0x73, 0x1a, 0xfc, 0x01, 0x0a, 0x16, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12,
	0x5e, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d,
	0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12,
	0x2a, 0x0a, 0x11, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74,
	0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x61, 0x67, 0x1a, 0x56, 0x0a, 0x03, 0x52,
	0x6f, 0x77, 0x12, 0x37, 0x0a, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d,
	0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x6d, 0x65, 0x74,
	0x65, 0x72, 0x73, 0x1a, 0x9d, 0x02, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e,
	0x63, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0b, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f,
	0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0a, 0x66,
	0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x11,
	0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72,
	0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x49, 0x73,
	0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x6f,
	0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01,
	0x52, 0x0b, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01,
	0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x69, 0x73, 0x5f, 0x64, 0x65,
	0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x65,
	0x63, 0x6f, 0x6e, 0x64, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x12, 0x42,
	0x0a, 0x0f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x64,
	0x65, 0x78, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x69, 0x6e,
	0x64, 0x65, 0x78, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x63, 0x74, 0x69,
	0x76, 0x65, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x22, 0xd9, 0x0e, 0x0a, 0x08,
	0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70,
	0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
	0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x07, 0x70,
	0x69, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x74, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x57,
	0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56,
	0x69, 0x73, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x6c,
	0x69, 0x76, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
	0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x65,
	0x6d, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6c, 0x6f, 0x61, 0x64,
	0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0c, 0x70, 0x65, 0x6e, 0x61, 0x6c,
	0x74, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52,
	0x0b, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x43, 0x6f, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12,
	0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63,
	0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05,
	0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65,
	0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x73, 0x74, 0x73,
	0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x03,
	0x28, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x56, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72,
	0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73,
	0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72,
	0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5a,
	0x0a, 0x28, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x69,
	0x76, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65,
	0x74, 0x6f, 0x75, 0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01,
	0x48, 0x01, 0x52, 0x23, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x6f, 0x44, 0x65, 0x6c, 0x69,
	0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x6f,
	0x75, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x70, 0x0a, 0x28, 0x70, 0x69,
	0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79,
	0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x6f, 0x75, 0x72,
	0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x23, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x54,
	0x6f, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74,
	0x65, 0x44, 0x65, 0x74, 0x6f, 0x75, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x5b, 0x0a, 0x1d,
	0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65,
	0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0a, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x19,
	0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x6f, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79,
	0x54, 0x69, 0x6d, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x68, 0x69,
	0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0c, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14,
	0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c,
	0x61, 0x62, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x18, 0x0d,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x1a, 0x89, 0x06, 0x0a,
	0x0c, 0x56, 0x69, 0x73, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a,
	0x10, 0x61, 0x72, 0x72, 0x69, 0x76, 0x61, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x0f, 0x61, 0x72,
	0x72, 0x69, 0x76, 0x61, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a,
	0x10, 0x61, 0x72, 0x72, 0x69, 0x76, 0x61, 0x6c, 0x5f, 0x77, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e,
	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d,
	0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x79, 0x70, 0x6f,
	0x69, 0x6e, 0x74, 0x52, 0x0f, 0x61, 0x72, 0x72, 0x69, 0x76, 0x61, 0x6c, 0x57, 0x61, 0x79, 0x70,
	0x6f, 0x69, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72,
	0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c,
	0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x11, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65,
	0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x61,
	0x72, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74,
	0x52, 0x11, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x57, 0x61, 0x79, 0x70, 0x6f,
	0x69, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x4f, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f,
	0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x0b, 0x74, 0x69, 0x6d,
	0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
	0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x63,
	0x6f, 0x73, 0x74, 0x12, 0x6b, 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x64, 0x65, 0x6d, 0x61,
	0x6e, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69,
	0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x52, 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73,
	0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18,
	0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65,
	0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x1a, 0x6f, 0x0a, 0x10, 0x4c, 0x6f, 0x61, 0x64, 0x44,
	0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
	0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a,
	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x1e, 0x0a, 0x04, 0x4c, 0x6f, 0x61, 0x64,
	0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x6f, 0x0a, 0x10, 0x4c, 0x6f, 0x61, 0x64,
	0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45,
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x05,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x65,
	0x6e, 0x61, 0x6c, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x42, 0x2b, 0x0a, 0x29, 0x5f, 0x70,
	0x69, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72,
	0x79, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x6f, 0x75,
	0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xc3, 0x02, 0x0a, 0x1b, 0x53, 0x68, 0x69, 0x70,
	0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74,
	0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x84, 0x01,
	0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
	0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x51, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x63, 0x6f,
	0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x49, 0x6e, 0x63, 0x6f,
	0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52,
	0x13, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
	0x4d, 0x6f, 0x64, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61,
	0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x20,
	0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f,
	0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
	0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52,
	0x4d, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x56, 0x45, 0x48, 0x49,
	0x43, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f,
	0x53, 0x41, 0x4d, 0x45, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x53, 0x49, 0x4d,
	0x55, 0x4c, 0x54, 0x41, 0x4e, 0x45, 0x4f, 0x55, 0x53, 0x4c, 0x59, 0x10, 0x02, 0x22, 0xb7, 0x03,
	0x0a, 0x17, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65,
	0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x23, 0x72, 0x65, 0x71,
	0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74,
	0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
	0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x74, 0x65,
	0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x65,
	0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x64, 0x65, 0x70, 0x65,
	0x6e, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
	0x65, 0x73, 0x12, 0x74, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e,
	0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x49, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75,
	0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d,
	0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
	0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x71,
	0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x1c,
	0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45,
	0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d,
	0x0a, 0x19, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x5f, 0x53,
	0x41, 0x4d, 0x45, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x22, 0x0a,
	0x1e, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45,
	0x5f, 0x41, 0x54, 0x5f, 0x50, 0x49, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10,
	0x02, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x56, 0x45, 0x48,
	0x49, 0x43, 0x4c, 0x45, 0x5f, 0x41, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59,
	0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x22, 0xfb, 0x17, 0x0a, 0x07, 0x56, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e,
	0x61, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c,
	0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c,
	0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56,
	0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64,
	0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a,
	0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72,
	0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x0e, 0x73, 0x74, 0x61,
	0x72, 0x74, 0x5f, 0x77, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e,
	0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0d, 0x73,
	0x74, 0x61, 0x72, 0x74, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x0c,
	0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x4c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x77, 0x61, 0x79, 0x70,
	0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70,
	0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61,
	0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x57, 0x61, 0x79, 0x70, 0x6f,
	0x69, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x61, 0x67,
	0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x61,
	0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x08,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x73, 0x12, 0x5a, 0x0a,
	0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64,
	0x6f, 0x77, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d,
	0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
	0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x12, 0x56, 0x0a, 0x10, 0x65, 0x6e, 0x64,
	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x18, 0x0a, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70,
	0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f,
	0x77, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77,
	0x73, 0x12, 0x3d, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x0b, 0x20,
	0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x16, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x88, 0x01, 0x01,
	0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f,
	0x6c, 0x69, 0x63, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70,
	0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65,
	0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50,
	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67,
	0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x5a, 0x0a, 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6c,
	0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56,
	0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74,
	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69,
	0x74, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68,
	0x6f, 0x75, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x73, 0x74, 0x50,
	0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70,
	0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x75, 0x72,
	0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x54,
	0x72, 0x61, 0x76, 0x65, 0x6c, 0x65, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x63,
	0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65,
	0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72,
	0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x78,
	0x65, 0x64, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66,
	0x69, 0x78, 0x65, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x64,
	0x5f, 0x69, 0x66, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x5f, 0x65, 0x6d, 0x70,
	0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75, 0x73, 0x65, 0x64, 0x49, 0x66,
	0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x69, 0x0a, 0x14,
	0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c,
	0x69, 0x6d, 0x69, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70,
	0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65,
	0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69,
	0x6d, 0x69, 0x74, 0x52, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x6b, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x76, 0x65,
	0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74,
	0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69,
	0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c,
	0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52,
	0x13, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
	0x69, 0x6d, 0x69, 0x74, 0x12, 0x61, 0x0a, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x69,
	0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x17, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69,
	0x6d, 0x69, 0x74, 0x52, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e,
	0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x72,
	0x61, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
	0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65,
	0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x45,
	0x6e, 0x74, 0x72, 0x79, 0x52, 0x1e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, 0x69, 0x74,
	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x74,
	0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, 0x0a, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x72, 0x75,
	0x6c, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x65, 0x61,
	0x6b, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65,
	0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
	0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x1a, 0xb0,
	0x03, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x08,
	0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00,
	0x52, 0x07, 0x6d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0d,
	0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64,
	0x12, 0x3d, 0x0a, 0x1c, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69,
	0x74, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x55,
	0x6e, 0x69, 0x74, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x12,
	0x6c, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e,
	0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69,
	0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72,
	0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x68, 0x0a,
	0x11, 0x65, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76,
	0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x49, 0x6e,
	0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x4c, 0x6f, 0x61, 0x64, 0x49,
	0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x1a, 0x3b, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72,
	0x76, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04,
	0x5f, 0x6d, 0x61, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61,
	0x64, 0x1a, 0xe9, 0x03, 0x0a, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69,
	0x6d, 0x69, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x45, 0x0a, 0x11, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78,
	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x1c, 0x63, 0x6f, 0x73, 0x74,
	0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f,
	0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00,
	0x52, 0x17, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x41, 0x66, 0x74,
	0x65, 0x72, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, 0x1b,
	0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d,
	0x61, 0x78, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x71, 0x75,
	0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x44, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x2d, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70,
	0x65, 0x72, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61,
	0x66, 0x74, 0x65, 0x72, 0x5f, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x73,
	0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52,
	0x26, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x48, 0x6f,
	0x75, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x51, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63,
	0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x63,
	0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74,
	0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x30, 0x0a, 0x2e, 0x5f,
	0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f,
	0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x71, 0x75, 0x61, 0x64, 0x72,
	0x61, 0x74, 0x69, 0x63, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x1a, 0x72, 0x0a,
	0x0f, 0x4c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
	0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e,
	0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x61,
	0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
	0x01, 0x1a, 0x6c, 0x0a, 0x23, 0x45, 0x78, 0x74, 0x72, 0x61, 0x56, 0x69, 0x73, 0x69, 0x74, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x56, 0x69, 0x73, 0x69, 0x74, 0x54,
	0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
	0x43, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a,
	0x17, 0x54, 0x52, 0x41, 0x56, 0x45, 0x4c, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53,
	0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x52,
	0x49, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x4c, 0x4b, 0x49,
	0x4e, 0x47, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e,
	0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x4e, 0x4c, 0x4f, 0x41,
	0x44, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50,
	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x41, 0x53,
	0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x01,
	0x12, 0x16, 0x0a, 0x12, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x46, 0x49, 0x52,
	0x53, 0x54, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x02, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x74, 0x72, 0x61,
	0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c,
	0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0xf1, 0x03, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69,
	0x6e, 0x64, 0x6f, 0x77, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69,
	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
	0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12,
	0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65,
	0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73,
	0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x73, 0x6f, 0x66,
	0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x6f,
	0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73,
	0x6f, 0x66, 0x74, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x24, 0x63, 0x6f,
	0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x62, 0x65, 0x66, 0x6f,
	0x72, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69,
	0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x63, 0x6f, 0x73, 0x74,
	0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x6f, 0x66,
	0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a,
	0x21, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61,
	0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69,
	0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x1b, 0x63, 0x6f, 0x73, 0x74,
	0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x6f, 0x66, 0x74,
	0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x27, 0x0a, 0x25, 0x5f, 0x63,
	0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x62, 0x65, 0x66,
	0x6f, 0x72, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74,
	0x69, 0x6d, 0x65, 0x42, 0x24, 0x0a, 0x22, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72,
	0x5f, 0x68, 0x6f, 0x75, 0x72, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x66, 0x74,
	0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x0d, 0x44, 0x69,
	0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x6d,
	0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48,
	0x00, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12,
	0x2b, 0x0a, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65,
	0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0d, 0x73, 0x6f, 0x66, 0x74,
	0x4d, 0x61, 0x78, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x21,
	0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74,
	0x65, 0x72, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x6d, 0x61,
	0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x1c, 0x63, 0x6f, 0x73, 0x74, 0x50,
	0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x62, 0x6f, 0x76, 0x65,
	0x53, 0x6f, 0x66, 0x74, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6d,
	0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, 0x6f,
	0x66, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x24, 0x0a,
	0x22, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d,
	0x65, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x5f,
	0x6d, 0x61, 0x78, 0x22, 0xe7, 0x02, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07,
	0x73, 0x72, 0x63, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
	0x72, 0x63, 0x54, 0x61, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65,
	0x64, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x53, 0x72, 0x63, 0x54, 0x61, 0x67, 0x12,
	0x17, 0x0a, 0x07, 0x64, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x06, 0x64, 0x73, 0x74, 0x54, 0x61, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c,
	0x75, 0x64, 0x65, 0x64, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x44, 0x73, 0x74, 0x54,
	0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01,
	0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70,
	0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01,
	0x28, 0x01, 0x52, 0x10, 0x63, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x4b, 0x69, 0x6c, 0x6f, 0x6d,
	0x65, 0x74, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
	0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0d, 0x64,
	0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2f, 0x0a, 0x05,
	0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x22, 0xa9, 0x01,
	0x0a, 0x08, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x08, 0x6c, 0x6f,
	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x49,
	0x64, 0x12, 0x25, 0x0a, 0x0c, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x6f, 0x61,
	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x73, 0x69,
	0x64, 0x65, 0x4f, 0x66, 0x52, 0x6f, 0x61, 0x64, 0x42, 0x0f, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x63, 0x0a, 0x08, 0x4c, 0x6f, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6c, 0x61, 0x74, 0x5f, 0x6c, 0x6e, 0x67,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x74, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x61, 0x74, 0x4c, 0x6e, 0x67, 0x52, 0x06, 0x6c, 0x61, 0x74,
	0x4c, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x88,
	0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x93,
	0x05, 0x0a, 0x09, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x5f, 0x0a, 0x0e,
	0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c,
	0x65, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d,
	0x62, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x74, 0x0a,
	0x15, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74,
	0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
	0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x75, 0x6c, 0x65, 0x2e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65,
	0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x66,
	0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
	0x6e, 0x74, 0x73, 0x1a, 0xef, 0x01, 0x0a, 0x0c, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x13, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74,
	0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0,
	0x41, 0x02, 0x52, 0x11, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x72,
	0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f,
	0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
	0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41,
	0x02, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
	0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x44, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xbc, 0x01, 0x0a, 0x13, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65,
	0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x4c, 0x0a,
	0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x42, 0x72,
	0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x18, 0x6d,
	0x61, 0x78, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x15, 0x6d,
	0x61, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe1, 0x13, 0x0a, 0x0d, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e,
	0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c,
	0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76,
	0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x76,
	0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0c, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c,
	0x12, 0x48, 0x0a, 0x12, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72,
	0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c,
	0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x76, 0x65,
	0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
	0x52, 0x0e, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65,
	0x12, 0x4d, 0x0a, 0x06, 0x76, 0x69, 0x73, 0x69, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72,
	0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74,
	0x65, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x74, 0x52, 0x06, 0x76, 0x69, 0x73, 0x69, 0x74, 0x73, 0x12,
	0x5c, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
	0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
	0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a,
	0x1b, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66,
	0x65, 0x61, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x19, 0x68, 0x61, 0x73, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x49, 0x6e,
	0x66, 0x65, 0x61, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x66, 0x0a,
	0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18,
	0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e,
	0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f,
	0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c,
	0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x18,
	0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e,
	0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x06, 0x62, 0x72,
	0x65, 0x61, 0x6b, 0x73, 0x12, 0x4d, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18,
	0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
	0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72,
	0x69, 0x63, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x73,
	0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70,
	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43,
	0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65,
	0x43, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74,
	0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52,
	0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74, 0x1a,
	0x8d, 0x04, 0x0a, 0x05, 0x56, 0x69, 0x73, 0x69, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x69,
	0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x0d, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78,
	0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x50, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2e, 0x0a,
	0x13, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69,
	0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x76, 0x69, 0x73, 0x69,
	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x39, 0x0a,
	0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73,
	0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x69, 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x64,
	0x5f, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75,
	0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
	0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e,
	0x56, 0x69, 0x73, 0x69, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64,
	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61,
	0x6e, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x6f, 0x75, 0x72, 0x18, 0x06, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06,
	0x64, 0x65, 0x74, 0x6f, 0x75, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65,
	0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
	0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1f, 0x0a,
	0x0b, 0x76, 0x69, 0x73, 0x69, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x1a, 0x6f,
	0x0a, 0x10, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74,
	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70,
	0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
	0x4c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
	0xda, 0x06, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42,
	0x0a, 0x0f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x73,
	0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x01, 0x52, 0x14, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e,
	0x63, 0x65, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x66,
	0x66, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c,
	0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x74, 0x72, 0x61, 0x66,
	0x66, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
	0x6c, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x44, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x44, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f,
	0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
	0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c,
	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72,
	0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54,
	0x69, 0x6d, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x6c,
	0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53,
	0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x63,
	0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x71, 0x0a, 0x0d, 0x76,
	0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73,
	0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f,
	0x75, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56,
	0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
	0x52, 0x0c, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x1a, 0x7c,
	0x0a, 0x11, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
	0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61,
	0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x25, 0x0a, 0x0b,
	0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61,
	0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f,
	0x75, 0x6e, 0x74, 0x1a, 0x29, 0x0a, 0x0f, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f,
	0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x79,
	0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74,
	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
	0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
	0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x6f, 0x75,
	0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd5, 0x05, 0x0a, 0x0f, 0x53, 0x6b, 0x69,
	0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05,
	0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64,
	0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x52, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x73,
	0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69,
	0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x61,
	0x73, 0x6f, 0x6e, 0x52, 0x07, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x1a, 0xc1, 0x04, 0x0a,
	0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64,
	0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e,
	0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x37, 0x0a, 0x15, 0x65, 0x78,
	0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e,
	0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x13, 0x65, 0x78, 0x61,
	0x6d, 0x70, 0x6c, 0x65, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78,
	0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x1e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65,
	0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
	0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x65, 0x78, 0x61,
	0x6d, 0x70, 0x6c, 0x65, 0x45, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x43, 0x61, 0x70, 0x61,
	0x63, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0xcb, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x64,
	0x65, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x56, 0x45,
	0x48, 0x49, 0x43, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x44, 0x45, 0x4d, 0x41, 0x4e,
	0x44, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x53, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c,
	0x45, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, 0x54, 0x59, 0x10, 0x02, 0x12, 0x35, 0x0a, 0x31,
	0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52,
	0x4d, 0x45, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43,
	0x4c, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49,
	0x54, 0x10, 0x03, 0x12, 0x35, 0x0a, 0x31, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45,
	0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49,
	0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49,
	0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x04, 0x12, 0x3c, 0x0a, 0x38, 0x43, 0x41,
	0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45,
	0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45,
	0x5f, 0x54, 0x52, 0x41, 0x56, 0x45, 0x4c, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e,
	0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x12, 0x33, 0x0a, 0x2f, 0x43, 0x41, 0x4e, 0x4e,
	0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f,
	0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x54,
	0x49, 0x4d, 0x45, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x10, 0x06, 0x12, 0x17, 0x0a,
	0x13, 0x56, 0x45, 0x48, 0x49, 0x43, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x4c, 0x4c,
	0x4f, 0x57, 0x45, 0x44, 0x10, 0x07, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70,
	0x6c, 0x65, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78,
	0x22, 0xe9, 0x05, 0x0a, 0x11, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d,
	0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72,
	0x6d, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75,
	0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72,
	0x6d, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74,
	0x12, 0x42, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x44, 0x75, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f,
	0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
	0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x62, 0x72, 0x65, 0x61, 0x6b,
	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x76, 0x69, 0x73, 0x69,
	0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
	0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x76, 0x69, 0x73,
	0x69, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x6f,
	0x74, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74,
	0x6f, 0x74, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16,
	0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f,
	0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x74, 0x72,
	0x61, 0x76, 0x65, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x65,
	0x72, 0x73, 0x12, 0x5e, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18,
	0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
	0x74, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x61, 0x78, 0x4c, 0x6f,
	0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4c, 0x6f, 0x61,
	0x64, 0x73, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x78, 0x4c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
	0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4c, 0x6f, 0x61,
	0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xad, 0x07, 0x0a,
	0x1a, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f,
	0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72,
	0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53,
	0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x5f,
	0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d, 0x65,
	0x6e, 0x74, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x53, 0x68, 0x69, 0x70, 0x6d,
	0x65, 0x6e, 0x74, 0x73, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61,
	0x69, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d,
	0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65,
	0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61,
	0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65,
	0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72,
	0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a,
	0xda, 0x04, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65,
	0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61,
	0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5c, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f,
	0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x73,
	0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x6c,
	0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x65, 0x68, 0x69,
	0x63, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
	0x05, 0x52, 0x0e, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65,
	0x73, 0x1a, 0x98, 0x03, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x12, 0x78, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x62, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f,
	0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x76, 0x31, 0x2e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x6f, 0x6c, 0x75, 0x74,
	0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x2e, 0x43, 0x6f,
	0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x65,
	0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x74, 0x68,
	0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d,
	0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a,
	0x15, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x74,
	0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x74, 0x68,
	0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x56, 0x69, 0x73, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e,
	0x74, 0x22, 0x98, 0x01, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x15, 0x0a, 0x11, 0x4c,
	0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
	0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x5f, 0x56, 0x49, 0x53, 0x49,
	0x54, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48,
	0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x01, 0x12, 0x32, 0x0a, 0x2e, 0x52, 0x45, 0x4c,
	0x41, 0x58, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x54, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x5f, 0x41,
	0x4e, 0x44, 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x41, 0x46, 0x54, 0x45,
	0x52, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a,
	0x19, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52,
	0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x03, 0x22, 0xdb, 0x03, 0x0a,
	0x1c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x56, 0x61,
	0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a,
	0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64,
	0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d,
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79,
	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61,
	0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65,
	0x54, 0x6f, 0x75, 0x72, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45,
	0x72, 0x72, 0x6f, 0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
	0x6e, 0x63, 0x65, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65,
	0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x12, 0x29, 0x0a, 0x10, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x66, 0x66, 0x65,
	0x6e, 0x64, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0xcc, 0x01, 0x0a, 0x0e,
	0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12,
	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x05, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x03, 0x6b, 0x65,
	0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6a,
	0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e,
	0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75,
	0x72, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f,
	0x72, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
	0x52, 0x08, 0x73, 0x75, 0x62, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x69, 0x6e,
	0x64, 0x65, 0x78, 0x5f, 0x6f, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0xb9, 0x01, 0x0a, 0x0b, 0x49,
	0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x0a, 0x67, 0x63,
	0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75,
	0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
	0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67,
	0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61,
	0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74,
	0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
	0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02,
	0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x08, 0x0a, 0x06,
	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xce, 0x01, 0x0a, 0x0c, 0x4f, 0x75, 0x74, 0x70, 0x75,
	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5b, 0x0a, 0x0f, 0x67, 0x63, 0x73, 0x5f, 0x64,
	0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72,
	0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72,
	0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74,
	0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x64, 0x61,
	0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74,
	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x22, 0x0a, 0x09, 0x47, 0x63, 0x73, 0x53, 0x6f,
	0x75, 0x72, 0x63, 0x65, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x27, 0x0a, 0x0e, 0x47,
	0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a,
	0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52,
	0x03, 0x75, 0x72, 0x69, 0x2a, 0x43, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d,
	0x61, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41,
	0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
	0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f,
	0x54, 0x4f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x02, 0x32, 0xf9, 0x04, 0x0a, 0x11, 0x52, 0x6f,
	0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
	0xea, 0x01, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72,
	0x73, 0x12, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e,
	0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75,
	0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x22, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x62, 0x3a, 0x01, 0x2a, 0x5a, 0x2a, 0x3a,
	0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d,
	0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x6f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x22, 0x31, 0x2f, 0x76, 0x31, 0x2f, 0x7b,
	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f,
	0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x12, 0xa0, 0x02, 0x0a,
	0x12, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f,
	0x75, 0x72, 0x73, 0x12, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70,
	0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75,
	0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
	0xad, 0x01, 0xca, 0x41, 0x38, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69,
	0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
	0x65, 0x12, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65,
	0x54, 0x6f, 0x75, 0x72, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x82, 0xd3, 0xe4,
	0x93, 0x02, 0x6c, 0x3a, 0x01, 0x2a, 0x5a, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31,
	0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
	0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69,
	0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x22, 0x36, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61,
	0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f,
	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x62, 0x61, 0x74,
	0x63, 0x68, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x54, 0x6f, 0x75, 0x72, 0x73, 0x1a,
	0x54, 0xca, 0x41, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
	0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77,
	0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f,
	0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61,
	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x8d, 0x02, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x1d,
	0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
	0x58, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
	0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f,
	0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76,
	0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x70, 0x62, 0x3b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6d,
	0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0xaa, 0x02, 0x20, 0x47, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74,
	0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x20, 0x47,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x4d, 0x61, 0x70, 0x73, 0x5c, 0x52, 0x6f, 0x75, 0x74, 0x65,
	0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xea,
	0x02, 0x23, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x4d, 0x61, 0x70, 0x73, 0x3a, 0x3a,
	0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescOnce sync.Once
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescData = file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDesc
)

func file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescGZIP() []byte {
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescOnce.Do(func() {
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescData)
	})
	return file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDescData
}

var file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes = make([]protoimpl.EnumInfo, 9)
var file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes = make([]protoimpl.MessageInfo, 55)
var file_google_maps_routeoptimization_v1_route_optimization_service_proto_goTypes = []interface{}{
	(DataFormat)(0),                                                       // 0: google.maps.routeoptimization.v1.DataFormat
	(OptimizeToursRequest_SolvingMode)(0),                                 // 1: google.maps.routeoptimization.v1.OptimizeToursRequest.SolvingMode
	(OptimizeToursRequest_SearchMode)(0),                                  // 2: google.maps.routeoptimization.v1.OptimizeToursRequest.SearchMode
	(ShipmentTypeIncompatibility_IncompatibilityMode)(0),                  // 3: google.maps.routeoptimization.v1.ShipmentTypeIncompatibility.IncompatibilityMode
	(ShipmentTypeRequirement_RequirementMode)(0),                          // 4: google.maps.routeoptimization.v1.ShipmentTypeRequirement.RequirementMode
	(Vehicle_TravelMode)(0),                                               // 5: google.maps.routeoptimization.v1.Vehicle.TravelMode
	(Vehicle_UnloadingPolicy)(0),                                          // 6: google.maps.routeoptimization.v1.Vehicle.UnloadingPolicy
	(SkippedShipment_Reason_Code)(0),                                      // 7: google.maps.routeoptimization.v1.SkippedShipment.Reason.Code
	(InjectedSolutionConstraint_ConstraintRelaxation_Relaxation_Level)(0), // 8: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level
	(*BatchOptimizeToursRequest)(nil),                                     // 9: google.maps.routeoptimization.v1.BatchOptimizeToursRequest
	(*BatchOptimizeToursResponse)(nil),                                    // 10: google.maps.routeoptimization.v1.BatchOptimizeToursResponse
	(*BatchOptimizeToursMetadata)(nil),                                    // 11: google.maps.routeoptimization.v1.BatchOptimizeToursMetadata
	(*OptimizeToursRequest)(nil),                                          // 12: google.maps.routeoptimization.v1.OptimizeToursRequest
	(*OptimizeToursResponse)(nil),                                         // 13: google.maps.routeoptimization.v1.OptimizeToursResponse
	(*ShipmentModel)(nil),                                                 // 14: google.maps.routeoptimization.v1.ShipmentModel
	(*Shipment)(nil),                                                      // 15: google.maps.routeoptimization.v1.Shipment
	(*ShipmentTypeIncompatibility)(nil),                                   // 16: google.maps.routeoptimization.v1.ShipmentTypeIncompatibility
	(*ShipmentTypeRequirement)(nil),                                       // 17: google.maps.routeoptimization.v1.ShipmentTypeRequirement
	(*Vehicle)(nil),                                                       // 18: google.maps.routeoptimization.v1.Vehicle
	(*TimeWindow)(nil),                                                    // 19: google.maps.routeoptimization.v1.TimeWindow
	(*DistanceLimit)(nil),                                                 // 20: google.maps.routeoptimization.v1.DistanceLimit
	(*TransitionAttributes)(nil),                                          // 21: google.maps.routeoptimization.v1.TransitionAttributes
	(*Waypoint)(nil),                                                      // 22: google.maps.routeoptimization.v1.Waypoint
	(*Location)(nil),                                                      // 23: google.maps.routeoptimization.v1.Location
	(*BreakRule)(nil),                                                     // 24: google.maps.routeoptimization.v1.BreakRule
	(*ShipmentRoute)(nil),                                                 // 25: google.maps.routeoptimization.v1.ShipmentRoute
	(*SkippedShipment)(nil),                                               // 26: google.maps.routeoptimization.v1.SkippedShipment
	(*AggregatedMetrics)(nil),                                             // 27: google.maps.routeoptimization.v1.AggregatedMetrics
	(*InjectedSolutionConstraint)(nil),                                    // 28: google.maps.routeoptimization.v1.InjectedSolutionConstraint
	(*OptimizeToursValidationError)(nil),                                  // 29: google.maps.routeoptimization.v1.OptimizeToursValidationError
	(*InputConfig)(nil),                                                   // 30: google.maps.routeoptimization.v1.InputConfig
	(*OutputConfig)(nil),                                                  // 31: google.maps.routeoptimization.v1.OutputConfig
	(*GcsSource)(nil),                                                     // 32: google.maps.routeoptimization.v1.GcsSource
	(*GcsDestination)(nil),                                                // 33: google.maps.routeoptimization.v1.GcsDestination
	(*BatchOptimizeToursRequest_AsyncModelConfig)(nil),                    // 34: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig
	(*OptimizeToursResponse_Metrics)(nil),                                 // 35: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics
	nil,                                                                   // 36: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.CostsEntry
	(*ShipmentModel_DurationDistanceMatrix)(nil),                          // 37: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix
	(*ShipmentModel_PrecedenceRule)(nil),                                  // 38: google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule
	(*ShipmentModel_DurationDistanceMatrix_Row)(nil),                      // 39: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row
	(*Shipment_VisitRequest)(nil),                                         // 40: google.maps.routeoptimization.v1.Shipment.VisitRequest
	(*Shipment_Load)(nil),                                                 // 41: google.maps.routeoptimization.v1.Shipment.Load
	nil,                                                                   // 42: google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry
	nil,                                                                   // 43: google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry
	(*Vehicle_LoadLimit)(nil),                                             // 44: google.maps.routeoptimization.v1.Vehicle.LoadLimit
	(*Vehicle_DurationLimit)(nil),                                         // 45: google.maps.routeoptimization.v1.Vehicle.DurationLimit
	nil,                                                                   // 46: google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry
	nil,                                                                   // 47: google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry
	(*Vehicle_LoadLimit_Interval)(nil),                                    // 48: google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval
	(*BreakRule_BreakRequest)(nil),                                        // 49: google.maps.routeoptimization.v1.BreakRule.BreakRequest
	(*BreakRule_FrequencyConstraint)(nil),                                 // 50: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint
	(*ShipmentRoute_Visit)(nil),                                           // 51: google.maps.routeoptimization.v1.ShipmentRoute.Visit
	(*ShipmentRoute_Transition)(nil),                                      // 52: google.maps.routeoptimization.v1.ShipmentRoute.Transition
	(*ShipmentRoute_VehicleLoad)(nil),                                     // 53: google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad
	(*ShipmentRoute_EncodedPolyline)(nil),                                 // 54: google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline
	(*ShipmentRoute_Break)(nil),                                           // 55: google.maps.routeoptimization.v1.ShipmentRoute.Break
	nil,                                                                   // 56: google.maps.routeoptimization.v1.ShipmentRoute.RouteCostsEntry
	nil,                                                                   // 57: google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry
	nil,                                                                   // 58: google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry
	(*SkippedShipment_Reason)(nil),                                        // 59: google.maps.routeoptimization.v1.SkippedShipment.Reason
	nil,                                                                   // 60: google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry
	(*InjectedSolutionConstraint_ConstraintRelaxation)(nil),            // 61: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation
	(*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation)(nil), // 62: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation
	(*OptimizeToursValidationError_FieldReference)(nil),                // 63: google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference
	(*durationpb.Duration)(nil),                                        // 64: google.protobuf.Duration
	(*timestamppb.Timestamp)(nil),                                      // 65: google.protobuf.Timestamp
	(*latlng.LatLng)(nil),                                              // 66: google.type.LatLng
	(*longrunningpb.Operation)(nil),                                    // 67: google.longrunning.Operation
}
var file_google_maps_routeoptimization_v1_route_optimization_service_proto_depIdxs = []int32{
	34,  // 0: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.model_configs:type_name -> google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig
	64,  // 1: google.maps.routeoptimization.v1.OptimizeToursRequest.timeout:type_name -> google.protobuf.Duration
	14,  // 2: google.maps.routeoptimization.v1.OptimizeToursRequest.model:type_name -> google.maps.routeoptimization.v1.ShipmentModel
	1,   // 3: google.maps.routeoptimization.v1.OptimizeToursRequest.solving_mode:type_name -> google.maps.routeoptimization.v1.OptimizeToursRequest.SolvingMode
	2,   // 4: google.maps.routeoptimization.v1.OptimizeToursRequest.search_mode:type_name -> google.maps.routeoptimization.v1.OptimizeToursRequest.SearchMode
	25,  // 5: google.maps.routeoptimization.v1.OptimizeToursRequest.injected_first_solution_routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute
	28,  // 6: google.maps.routeoptimization.v1.OptimizeToursRequest.injected_solution_constraint:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint
	25,  // 7: google.maps.routeoptimization.v1.OptimizeToursRequest.refresh_details_routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute
	25,  // 8: google.maps.routeoptimization.v1.OptimizeToursResponse.routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute
	26,  // 9: google.maps.routeoptimization.v1.OptimizeToursResponse.skipped_shipments:type_name -> google.maps.routeoptimization.v1.SkippedShipment
	29,  // 10: google.maps.routeoptimization.v1.OptimizeToursResponse.validation_errors:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError
	35,  // 11: google.maps.routeoptimization.v1.OptimizeToursResponse.metrics:type_name -> google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics
	15,  // 12: google.maps.routeoptimization.v1.ShipmentModel.shipments:type_name -> google.maps.routeoptimization.v1.Shipment
	18,  // 13: google.maps.routeoptimization.v1.ShipmentModel.vehicles:type_name -> google.maps.routeoptimization.v1.Vehicle
	65,  // 14: google.maps.routeoptimization.v1.ShipmentModel.global_start_time:type_name -> google.protobuf.Timestamp
	65,  // 15: google.maps.routeoptimization.v1.ShipmentModel.global_end_time:type_name -> google.protobuf.Timestamp
	37,  // 16: google.maps.routeoptimization.v1.ShipmentModel.duration_distance_matrices:type_name -> google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix
	21,  // 17: google.maps.routeoptimization.v1.ShipmentModel.transition_attributes:type_name -> google.maps.routeoptimization.v1.TransitionAttributes
	16,  // 18: google.maps.routeoptimization.v1.ShipmentModel.shipment_type_incompatibilities:type_name -> google.maps.routeoptimization.v1.ShipmentTypeIncompatibility
	17,  // 19: google.maps.routeoptimization.v1.ShipmentModel.shipment_type_requirements:type_name -> google.maps.routeoptimization.v1.ShipmentTypeRequirement
	38,  // 20: google.maps.routeoptimization.v1.ShipmentModel.precedence_rules:type_name -> google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule
	40,  // 21: google.maps.routeoptimization.v1.Shipment.pickups:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest
	40,  // 22: google.maps.routeoptimization.v1.Shipment.deliveries:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest
	42,  // 23: google.maps.routeoptimization.v1.Shipment.load_demands:type_name -> google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry
	64,  // 24: google.maps.routeoptimization.v1.Shipment.pickup_to_delivery_absolute_detour_limit:type_name -> google.protobuf.Duration
	64,  // 25: google.maps.routeoptimization.v1.Shipment.pickup_to_delivery_time_limit:type_name -> google.protobuf.Duration
	3,   // 26: google.maps.routeoptimization.v1.ShipmentTypeIncompatibility.incompatibility_mode:type_name -> google.maps.routeoptimization.v1.ShipmentTypeIncompatibility.IncompatibilityMode
	4,   // 27: google.maps.routeoptimization.v1.ShipmentTypeRequirement.requirement_mode:type_name -> google.maps.routeoptimization.v1.ShipmentTypeRequirement.RequirementMode
	5,   // 28: google.maps.routeoptimization.v1.Vehicle.travel_mode:type_name -> google.maps.routeoptimization.v1.Vehicle.TravelMode
	66,  // 29: google.maps.routeoptimization.v1.Vehicle.start_location:type_name -> google.type.LatLng
	22,  // 30: google.maps.routeoptimization.v1.Vehicle.start_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint
	66,  // 31: google.maps.routeoptimization.v1.Vehicle.end_location:type_name -> google.type.LatLng
	22,  // 32: google.maps.routeoptimization.v1.Vehicle.end_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint
	19,  // 33: google.maps.routeoptimization.v1.Vehicle.start_time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow
	19,  // 34: google.maps.routeoptimization.v1.Vehicle.end_time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow
	6,   // 35: google.maps.routeoptimization.v1.Vehicle.unloading_policy:type_name -> google.maps.routeoptimization.v1.Vehicle.UnloadingPolicy
	46,  // 36: google.maps.routeoptimization.v1.Vehicle.load_limits:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry
	45,  // 37: google.maps.routeoptimization.v1.Vehicle.route_duration_limit:type_name -> google.maps.routeoptimization.v1.Vehicle.DurationLimit
	45,  // 38: google.maps.routeoptimization.v1.Vehicle.travel_duration_limit:type_name -> google.maps.routeoptimization.v1.Vehicle.DurationLimit
	20,  // 39: google.maps.routeoptimization.v1.Vehicle.route_distance_limit:type_name -> google.maps.routeoptimization.v1.DistanceLimit
	47,  // 40: google.maps.routeoptimization.v1.Vehicle.extra_visit_duration_for_visit_type:type_name -> google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry
	24,  // 41: google.maps.routeoptimization.v1.Vehicle.break_rule:type_name -> google.maps.routeoptimization.v1.BreakRule
	65,  // 42: google.maps.routeoptimization.v1.TimeWindow.start_time:type_name -> google.protobuf.Timestamp
	65,  // 43: google.maps.routeoptimization.v1.TimeWindow.end_time:type_name -> google.protobuf.Timestamp
	65,  // 44: google.maps.routeoptimization.v1.TimeWindow.soft_start_time:type_name -> google.protobuf.Timestamp
	65,  // 45: google.maps.routeoptimization.v1.TimeWindow.soft_end_time:type_name -> google.protobuf.Timestamp
	20,  // 46: google.maps.routeoptimization.v1.TransitionAttributes.distance_limit:type_name -> google.maps.routeoptimization.v1.DistanceLimit
	64,  // 47: google.maps.routeoptimization.v1.TransitionAttributes.delay:type_name -> google.protobuf.Duration
	23,  // 48: google.maps.routeoptimization.v1.Waypoint.location:type_name -> google.maps.routeoptimization.v1.Location
	66,  // 49: google.maps.routeoptimization.v1.Location.lat_lng:type_name -> google.type.LatLng
	49,  // 50: google.maps.routeoptimization.v1.BreakRule.break_requests:type_name -> google.maps.routeoptimization.v1.BreakRule.BreakRequest
	50,  // 51: google.maps.routeoptimization.v1.BreakRule.frequency_constraints:type_name -> google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint
	65,  // 52: google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time:type_name -> google.protobuf.Timestamp
	65,  // 53: google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time:type_name -> google.protobuf.Timestamp
	51,  // 54: google.maps.routeoptimization.v1.ShipmentRoute.visits:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Visit
	52,  // 55: google.maps.routeoptimization.v1.ShipmentRoute.transitions:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Transition
	54,  // 56: google.maps.routeoptimization.v1.ShipmentRoute.route_polyline:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline
	55,  // 57: google.maps.routeoptimization.v1.ShipmentRoute.breaks:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Break
	27,  // 58: google.maps.routeoptimization.v1.ShipmentRoute.metrics:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics
	56,  // 59: google.maps.routeoptimization.v1.ShipmentRoute.route_costs:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.RouteCostsEntry
	59,  // 60: google.maps.routeoptimization.v1.SkippedShipment.reasons:type_name -> google.maps.routeoptimization.v1.SkippedShipment.Reason
	64,  // 61: google.maps.routeoptimization.v1.AggregatedMetrics.travel_duration:type_name -> google.protobuf.Duration
	64,  // 62: google.maps.routeoptimization.v1.AggregatedMetrics.wait_duration:type_name -> google.protobuf.Duration
	64,  // 63: google.maps.routeoptimization.v1.AggregatedMetrics.delay_duration:type_name -> google.protobuf.Duration
	64,  // 64: google.maps.routeoptimization.v1.AggregatedMetrics.break_duration:type_name -> google.protobuf.Duration
	64,  // 65: google.maps.routeoptimization.v1.AggregatedMetrics.visit_duration:type_name -> google.protobuf.Duration
	64,  // 66: google.maps.routeoptimization.v1.AggregatedMetrics.total_duration:type_name -> google.protobuf.Duration
	60,  // 67: google.maps.routeoptimization.v1.AggregatedMetrics.max_loads:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry
	25,  // 68: google.maps.routeoptimization.v1.InjectedSolutionConstraint.routes:type_name -> google.maps.routeoptimization.v1.ShipmentRoute
	26,  // 69: google.maps.routeoptimization.v1.InjectedSolutionConstraint.skipped_shipments:type_name -> google.maps.routeoptimization.v1.SkippedShipment
	61,  // 70: google.maps.routeoptimization.v1.InjectedSolutionConstraint.constraint_relaxations:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation
	63,  // 71: google.maps.routeoptimization.v1.OptimizeToursValidationError.fields:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference
	32,  // 72: google.maps.routeoptimization.v1.InputConfig.gcs_source:type_name -> google.maps.routeoptimization.v1.GcsSource
	0,   // 73: google.maps.routeoptimization.v1.InputConfig.data_format:type_name -> google.maps.routeoptimization.v1.DataFormat
	33,  // 74: google.maps.routeoptimization.v1.OutputConfig.gcs_destination:type_name -> google.maps.routeoptimization.v1.GcsDestination
	0,   // 75: google.maps.routeoptimization.v1.OutputConfig.data_format:type_name -> google.maps.routeoptimization.v1.DataFormat
	30,  // 76: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig.input_config:type_name -> google.maps.routeoptimization.v1.InputConfig
	31,  // 77: google.maps.routeoptimization.v1.BatchOptimizeToursRequest.AsyncModelConfig.output_config:type_name -> google.maps.routeoptimization.v1.OutputConfig
	27,  // 78: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.aggregated_route_metrics:type_name -> google.maps.routeoptimization.v1.AggregatedMetrics
	65,  // 79: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.earliest_vehicle_start_time:type_name -> google.protobuf.Timestamp
	65,  // 80: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.latest_vehicle_end_time:type_name -> google.protobuf.Timestamp
	36,  // 81: google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.costs:type_name -> google.maps.routeoptimization.v1.OptimizeToursResponse.Metrics.CostsEntry
	39,  // 82: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.rows:type_name -> google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row
	64,  // 83: google.maps.routeoptimization.v1.ShipmentModel.PrecedenceRule.offset_duration:type_name -> google.protobuf.Duration
	64,  // 84: google.maps.routeoptimization.v1.ShipmentModel.DurationDistanceMatrix.Row.durations:type_name -> google.protobuf.Duration
	66,  // 85: google.maps.routeoptimization.v1.Shipment.VisitRequest.arrival_location:type_name -> google.type.LatLng
	22,  // 86: google.maps.routeoptimization.v1.Shipment.VisitRequest.arrival_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint
	66,  // 87: google.maps.routeoptimization.v1.Shipment.VisitRequest.departure_location:type_name -> google.type.LatLng
	22,  // 88: google.maps.routeoptimization.v1.Shipment.VisitRequest.departure_waypoint:type_name -> google.maps.routeoptimization.v1.Waypoint
	19,  // 89: google.maps.routeoptimization.v1.Shipment.VisitRequest.time_windows:type_name -> google.maps.routeoptimization.v1.TimeWindow
	64,  // 90: google.maps.routeoptimization.v1.Shipment.VisitRequest.duration:type_name -> google.protobuf.Duration
	43,  // 91: google.maps.routeoptimization.v1.Shipment.VisitRequest.load_demands:type_name -> google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry
	41,  // 92: google.maps.routeoptimization.v1.Shipment.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load
	41,  // 93: google.maps.routeoptimization.v1.Shipment.VisitRequest.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load
	48,  // 94: google.maps.routeoptimization.v1.Vehicle.LoadLimit.start_load_interval:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval
	48,  // 95: google.maps.routeoptimization.v1.Vehicle.LoadLimit.end_load_interval:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit.Interval
	64,  // 96: google.maps.routeoptimization.v1.Vehicle.DurationLimit.max_duration:type_name -> google.protobuf.Duration
	64,  // 97: google.maps.routeoptimization.v1.Vehicle.DurationLimit.soft_max_duration:type_name -> google.protobuf.Duration
	64,  // 98: google.maps.routeoptimization.v1.Vehicle.DurationLimit.quadratic_soft_max_duration:type_name -> google.protobuf.Duration
	44,  // 99: google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry.value:type_name -> google.maps.routeoptimization.v1.Vehicle.LoadLimit
	64,  // 100: google.maps.routeoptimization.v1.Vehicle.ExtraVisitDurationForVisitTypeEntry.value:type_name -> google.protobuf.Duration
	65,  // 101: google.maps.routeoptimization.v1.BreakRule.BreakRequest.earliest_start_time:type_name -> google.protobuf.Timestamp
	65,  // 102: google.maps.routeoptimization.v1.BreakRule.BreakRequest.latest_start_time:type_name -> google.protobuf.Timestamp
	64,  // 103: google.maps.routeoptimization.v1.BreakRule.BreakRequest.min_duration:type_name -> google.protobuf.Duration
	64,  // 104: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint.min_break_duration:type_name -> google.protobuf.Duration
	64,  // 105: google.maps.routeoptimization.v1.BreakRule.FrequencyConstraint.max_inter_break_duration:type_name -> google.protobuf.Duration
	65,  // 106: google.maps.routeoptimization.v1.ShipmentRoute.Visit.start_time:type_name -> google.protobuf.Timestamp
	57,  // 107: google.maps.routeoptimization.v1.ShipmentRoute.Visit.load_demands:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry
	64,  // 108: google.maps.routeoptimization.v1.ShipmentRoute.Visit.detour:type_name -> google.protobuf.Duration
	64,  // 109: google.maps.routeoptimization.v1.ShipmentRoute.Transition.travel_duration:type_name -> google.protobuf.Duration
	64,  // 110: google.maps.routeoptimization.v1.ShipmentRoute.Transition.delay_duration:type_name -> google.protobuf.Duration
	64,  // 111: google.maps.routeoptimization.v1.ShipmentRoute.Transition.break_duration:type_name -> google.protobuf.Duration
	64,  // 112: google.maps.routeoptimization.v1.ShipmentRoute.Transition.wait_duration:type_name -> google.protobuf.Duration
	64,  // 113: google.maps.routeoptimization.v1.ShipmentRoute.Transition.total_duration:type_name -> google.protobuf.Duration
	65,  // 114: google.maps.routeoptimization.v1.ShipmentRoute.Transition.start_time:type_name -> google.protobuf.Timestamp
	54,  // 115: google.maps.routeoptimization.v1.ShipmentRoute.Transition.route_polyline:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline
	58,  // 116: google.maps.routeoptimization.v1.ShipmentRoute.Transition.vehicle_loads:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry
	65,  // 117: google.maps.routeoptimization.v1.ShipmentRoute.Break.start_time:type_name -> google.protobuf.Timestamp
	64,  // 118: google.maps.routeoptimization.v1.ShipmentRoute.Break.duration:type_name -> google.protobuf.Duration
	41,  // 119: google.maps.routeoptimization.v1.ShipmentRoute.Visit.LoadDemandsEntry.value:type_name -> google.maps.routeoptimization.v1.Shipment.Load
	53,  // 120: google.maps.routeoptimization.v1.ShipmentRoute.Transition.VehicleLoadsEntry.value:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad
	7,   // 121: google.maps.routeoptimization.v1.SkippedShipment.Reason.code:type_name -> google.maps.routeoptimization.v1.SkippedShipment.Reason.Code
	53,  // 122: google.maps.routeoptimization.v1.AggregatedMetrics.MaxLoadsEntry.value:type_name -> google.maps.routeoptimization.v1.ShipmentRoute.VehicleLoad
	62,  // 123: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.relaxations:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation
	8,   // 124: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.level:type_name -> google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level
	65,  // 125: google.maps.routeoptimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.threshold_time:type_name -> google.protobuf.Timestamp
	63,  // 126: google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference.sub_field:type_name -> google.maps.routeoptimization.v1.OptimizeToursValidationError.FieldReference
	12,  // 127: google.maps.routeoptimization.v1.RouteOptimization.OptimizeTours:input_type -> google.maps.routeoptimization.v1.OptimizeToursRequest
	9,   // 128: google.maps.routeoptimization.v1.RouteOptimization.BatchOptimizeTours:input_type -> google.maps.routeoptimization.v1.BatchOptimizeToursRequest
	13,  // 129: google.maps.routeoptimization.v1.RouteOptimization.OptimizeTours:output_type -> google.maps.routeoptimization.v1.OptimizeToursResponse
	67,  // 130: google.maps.routeoptimization.v1.RouteOptimization.BatchOptimizeTours:output_type -> google.longrunning.Operation
	129, // [129:131] is the sub-list for method output_type
	127, // [127:129] is the sub-list for method input_type
	127, // [127:127] is the sub-list for extension type_name
	127, // [127:127] is the sub-list for extension extendee
	0,   // [0:127] is the sub-list for field type_name
}

func init() { file_google_maps_routeoptimization_v1_route_optimization_service_proto_init() }
func file_google_maps_routeoptimization_v1_route_optimization_service_proto_init() {
	if File_google_maps_routeoptimization_v1_route_optimization_service_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BatchOptimizeToursRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BatchOptimizeToursResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BatchOptimizeToursMetadata); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*OptimizeToursRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*OptimizeToursResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentModel); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Shipment); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentTypeIncompatibility); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentTypeRequirement); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Vehicle); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TimeWindow); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DistanceLimit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TransitionAttributes); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Waypoint); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Location); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BreakRule); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentRoute); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SkippedShipment); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AggregatedMetrics); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InjectedSolutionConstraint); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*OptimizeToursValidationError); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InputConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*OutputConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GcsSource); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GcsDestination); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BatchOptimizeToursRequest_AsyncModelConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*OptimizeToursResponse_Metrics); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentModel_DurationDistanceMatrix); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentModel_PrecedenceRule); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentModel_DurationDistanceMatrix_Row); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Shipment_VisitRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Shipment_Load); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Vehicle_LoadLimit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Vehicle_DurationLimit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Vehicle_LoadLimit_Interval); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BreakRule_BreakRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BreakRule_FrequencyConstraint); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentRoute_Visit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentRoute_Transition); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentRoute_VehicleLoad); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentRoute_EncodedPolyline); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ShipmentRoute_Break); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SkippedShipment_Reason); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InjectedSolutionConstraint_ConstraintRelaxation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InjectedSolutionConstraint_ConstraintRelaxation_Relaxation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*OptimizeToursValidationError_FieldReference); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[3].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[5].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[6].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[9].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[10].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[11].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[13].OneofWrappers = []interface{}{
		(*Waypoint_Location)(nil),
		(*Waypoint_PlaceId)(nil),
	}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[14].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[21].OneofWrappers = []interface{}{
		(*InputConfig_GcsSource)(nil),
	}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[22].OneofWrappers = []interface{}{
		(*OutputConfig_GcsDestination)(nil),
	}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[29].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[35].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[36].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[39].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[50].OneofWrappers = []interface{}{}
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes[54].OneofWrappers = []interface{}{
		(*OptimizeToursValidationError_FieldReference_Index)(nil),
		(*OptimizeToursValidationError_FieldReference_Key)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDesc,
			NumEnums:      9,
			NumMessages:   55,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_google_maps_routeoptimization_v1_route_optimization_service_proto_goTypes,
		DependencyIndexes: file_google_maps_routeoptimization_v1_route_optimization_service_proto_depIdxs,
		EnumInfos:         file_google_maps_routeoptimization_v1_route_optimization_service_proto_enumTypes,
		MessageInfos:      file_google_maps_routeoptimization_v1_route_optimization_service_proto_msgTypes,
	}.Build()
	File_google_maps_routeoptimization_v1_route_optimization_service_proto = out.File
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_rawDesc = nil
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_goTypes = nil
	file_google_maps_routeoptimization_v1_route_optimization_service_proto_depIdxs = nil
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6

// RouteOptimizationClient is the client API for RouteOptimization service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type RouteOptimizationClient interface {
	// Sends an `OptimizeToursRequest` containing a `ShipmentModel` and returns an
	// `OptimizeToursResponse` containing `ShipmentRoute`s, which are a set of
	// routes to be performed by vehicles minimizing the overall cost.
	//
	// A `ShipmentModel` model consists mainly of `Shipment`s that need to be
	// carried out and `Vehicle`s that can be used to transport the `Shipment`s.
	// The `ShipmentRoute`s assign `Shipment`s to `Vehicle`s. More specifically,
	// they assign a series of `Visit`s to each vehicle, where a `Visit`
	// corresponds to a `VisitRequest`, which is a pickup or delivery for a
	// `Shipment`.
	//
	// The goal is to provide an assignment of `ShipmentRoute`s to `Vehicle`s that
	// minimizes the total cost where cost has many components defined in the
	// `ShipmentModel`.
	OptimizeTours(ctx context.Context, in *OptimizeToursRequest, opts ...grpc.CallOption) (*OptimizeToursResponse, error)
	// Optimizes vehicle tours for one or more `OptimizeToursRequest`
	// messages as a batch.
	//
	// This method is a Long Running Operation (LRO). The inputs for optimization
	// (`OptimizeToursRequest` messages) and outputs (`OptimizeToursResponse`
	// messages) are read/written from/to Cloud Storage in user-specified
	// format. Like the `OptimizeTours` method, each `OptimizeToursRequest`
	// contains a `ShipmentModel` and returns an `OptimizeToursResponse`
	// containing `ShipmentRoute`s, which are a set of routes to be performed by
	// vehicles minimizing the overall cost.
	BatchOptimizeTours(ctx context.Context, in *BatchOptimizeToursRequest, opts ...grpc.CallOption) (*longrunningpb.Operation, error)
}

type routeOptimizationClient struct {
	cc grpc.ClientConnInterface
}

func NewRouteOptimizationClient(cc grpc.ClientConnInterface) RouteOptimizationClient {
	return &routeOptimizationClient{cc}
}

func (c *routeOptimizationClient) OptimizeTours(ctx context.Context, in *OptimizeToursRequest, opts ...grpc.CallOption) (*OptimizeToursResponse, error) {
	out := new(OptimizeToursResponse)
	err := c.cc.Invoke(ctx, "/google.maps.routeoptimization.v1.RouteOptimization/OptimizeTours", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *routeOptimizationClient) BatchOptimizeTours(ctx context.Context, in *BatchOptimizeToursRequest, opts ...grpc.CallOption) (*longrunningpb.Operation, error) {
	out := new(longrunningpb.Operation)
	err := c.cc.Invoke(ctx, "/google.maps.routeoptimization.v1.RouteOptimization/BatchOptimizeTours", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// RouteOptimizationServer is the server API for RouteOptimization service.
type RouteOptimizationServer interface {
	// Sends an `OptimizeToursRequest` containing a `ShipmentModel` and returns an
	// `OptimizeToursResponse` containing `ShipmentRoute`s, which are a set of
	// routes to be performed by vehicles minimizing the overall cost.
	//
	// A `ShipmentModel` model consists mainly of `Shipment`s that need to be
	// carried out and `Vehicle`s that can be used to transport the `Shipment`s.
	// The `ShipmentRoute`s assign `Shipment`s to `Vehicle`s. More specifically,
	// they assign a series of `Visit`s to each vehicle, where a `Visit`
	// corresponds to a `VisitRequest`, which is a pickup or delivery for a
	// `Shipment`.
	//
	// The goal is to provide an assignment of `ShipmentRoute`s to `Vehicle`s that
	// minimizes the total cost where cost has many components defined in the
	// `ShipmentModel`.
	OptimizeTours(context.Context, *OptimizeToursRequest) (*OptimizeToursResponse, error)
	// Optimizes vehicle tours for one or more `OptimizeToursRequest`
	// messages as a batch.
	//
	// This method is a Long Running Operation (LRO). The inputs for optimization
	// (`OptimizeToursRequest` messages) and outputs (`OptimizeToursResponse`
	// messages) are read/written from/to Cloud Storage in user-specified
	// format. Like the `OptimizeTours` method, each `OptimizeToursRequest`
	// contains a `ShipmentModel` and returns an `OptimizeToursResponse`
	// containing `ShipmentRoute`s, which are a set of routes to be performed by
	// vehicles minimizing the overall cost.
	BatchOptimizeTours(context.Context, *BatchOptimizeToursRequest) (*longrunningpb.Operation, error)
}

// UnimplementedRouteOptimizationServer can be embedded to have forward compatible implementations.
type UnimplementedRouteOptimizationServer struct {
}

func (*UnimplementedRouteOptimizationServer) OptimizeTours(context.Context, *OptimizeToursRequest) (*OptimizeToursResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method OptimizeTours not implemented")
}
func (*UnimplementedRouteOptimizationServer) BatchOptimizeTours(context.Context, *BatchOptimizeToursRequest) (*longrunningpb.Operation, error) {
	return nil, status.Errorf(codes.Unimplemented, "method BatchOptimizeTours not implemented")
}

func RegisterRouteOptimizationServer(s *grpc.Server, srv RouteOptimizationServer) {
	s.RegisterService(&_RouteOptimization_serviceDesc, srv)
}

func _RouteOptimization_OptimizeTours_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(OptimizeToursRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RouteOptimizationServer).OptimizeTours(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.maps.routeoptimization.v1.RouteOptimization/OptimizeTours",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RouteOptimizationServer).OptimizeTours(ctx, req.(*OptimizeToursRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _RouteOptimization_BatchOptimizeTours_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(BatchOptimizeToursRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RouteOptimizationServer).BatchOptimizeTours(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.maps.routeoptimization.v1.RouteOptimization/BatchOptimizeTours",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RouteOptimizationServer).BatchOptimizeTours(ctx, req.(*BatchOptimizeToursRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _RouteOptimization_serviceDesc = grpc.ServiceDesc{
	ServiceName: "google.maps.routeoptimization.v1.RouteOptimization",
	HandlerType: (*RouteOptimizationServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "OptimizeTours",
			Handler:    _RouteOptimization_OptimizeTours_Handler,
		},
		{
			MethodName: "BatchOptimizeTours",
			Handler:    _RouteOptimization_BatchOptimizeTours_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "google/maps/routeoptimization/v1/route_optimization_service.proto",
}
