// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: test_platform/steps/execution.proto

package steps

import (
	test_platform "go.chromium.org/chromiumos/infra/proto/go/test_platform"
	common "go.chromium.org/chromiumos/infra/proto/go/test_platform/common"
	config "go.chromium.org/chromiumos/infra/proto/go/test_platform/config"
	execute "go.chromium.org/chromiumos/infra/proto/go/test_platform/steps/execute"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

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)
)

type ExecuteRequests struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Each ExecuteRequest is handled independently.
	Requests       []*ExecuteRequest          `protobuf:"bytes,1,rep,name=requests,proto3" json:"requests,omitempty"`
	TaggedRequests map[string]*ExecuteRequest `protobuf:"bytes,2,rep,name=tagged_requests,json=taggedRequests,proto3" json:"tagged_requests,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Build contains relevant information about the current test platform
	// buildbucket build.
	Build *execute.Build `protobuf:"bytes,3,opt,name=build,proto3" json:"build,omitempty"`
}

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

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

func (*ExecuteRequests) ProtoMessage() {}

func (x *ExecuteRequests) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_steps_execution_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 ExecuteRequests.ProtoReflect.Descriptor instead.
func (*ExecuteRequests) Descriptor() ([]byte, []int) {
	return file_test_platform_steps_execution_proto_rawDescGZIP(), []int{0}
}

func (x *ExecuteRequests) GetRequests() []*ExecuteRequest {
	if x != nil {
		return x.Requests
	}
	return nil
}

func (x *ExecuteRequests) GetTaggedRequests() map[string]*ExecuteRequest {
	if x != nil {
		return x.TaggedRequests
	}
	return nil
}

func (x *ExecuteRequests) GetBuild() *execute.Build {
	if x != nil {
		return x.Build
	}
	return nil
}

type ExecuteResponses struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Each ExecuteResponse corresponds to a single ExecuteRequest handled
	// independently.
	Responses       []*ExecuteResponse          `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"`
	TaggedResponses map[string]*ExecuteResponse `protobuf:"bytes,2,rep,name=tagged_responses,json=taggedResponses,proto3" json:"tagged_responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

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

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

func (*ExecuteResponses) ProtoMessage() {}

func (x *ExecuteResponses) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_steps_execution_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 ExecuteResponses.ProtoReflect.Descriptor instead.
func (*ExecuteResponses) Descriptor() ([]byte, []int) {
	return file_test_platform_steps_execution_proto_rawDescGZIP(), []int{1}
}

func (x *ExecuteResponses) GetResponses() []*ExecuteResponse {
	if x != nil {
		return x.Responses
	}
	return nil
}

func (x *ExecuteResponses) GetTaggedResponses() map[string]*ExecuteResponse {
	if x != nil {
		return x.TaggedResponses
	}
	return nil
}

// ExecuteRequest defines the input of the Execute step.
type ExecuteRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// RequestParams are the request-wide parameters for the
	// cros_test_platform request. This includes all the request-wide information
	// needed in order to execute tests (e.g. labels, retry parameters,
	// scheduling parameters).
	RequestParams *test_platform.Request_Params `protobuf:"bytes,1,opt,name=request_params,json=requestParams,proto3" json:"request_params,omitempty"`
	Enumeration   *EnumerationResponse          `protobuf:"bytes,2,opt,name=enumeration,proto3" json:"enumeration,omitempty"`
	Config        *config.Config                `protobuf:"bytes,3,opt,name=config,proto3" json:"config,omitempty"`
}

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

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

func (*ExecuteRequest) ProtoMessage() {}

func (x *ExecuteRequest) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_steps_execution_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 ExecuteRequest.ProtoReflect.Descriptor instead.
func (*ExecuteRequest) Descriptor() ([]byte, []int) {
	return file_test_platform_steps_execution_proto_rawDescGZIP(), []int{2}
}

func (x *ExecuteRequest) GetRequestParams() *test_platform.Request_Params {
	if x != nil {
		return x.RequestParams
	}
	return nil
}

func (x *ExecuteRequest) GetEnumeration() *EnumerationResponse {
	if x != nil {
		return x.Enumeration
	}
	return nil
}

func (x *ExecuteRequest) GetConfig() *config.Config {
	if x != nil {
		return x.Config
	}
	return nil
}

// ExecuteResponse defines the output of the Execute step.
type ExecuteResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Use consolidated_results instead.
	//
	// Deprecated: Do not use.
	TaskResults         []*ExecuteResponse_TaskResult         `protobuf:"bytes,1,rep,name=task_results,json=taskResults,proto3" json:"task_results,omitempty"`
	ConsolidatedResults []*ExecuteResponse_ConsolidatedResult `protobuf:"bytes,3,rep,name=consolidated_results,json=consolidatedResults,proto3" json:"consolidated_results,omitempty"`
	// State encodes the state of the overall execution, including the ultimate
	// verdict (taking into account any sub-task verdicts).
	State *test_platform.TaskState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"`
}

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

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

func (*ExecuteResponse) ProtoMessage() {}

func (x *ExecuteResponse) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_steps_execution_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 ExecuteResponse.ProtoReflect.Descriptor instead.
func (*ExecuteResponse) Descriptor() ([]byte, []int) {
	return file_test_platform_steps_execution_proto_rawDescGZIP(), []int{3}
}

// Deprecated: Do not use.
func (x *ExecuteResponse) GetTaskResults() []*ExecuteResponse_TaskResult {
	if x != nil {
		return x.TaskResults
	}
	return nil
}

func (x *ExecuteResponse) GetConsolidatedResults() []*ExecuteResponse_ConsolidatedResult {
	if x != nil {
		return x.ConsolidatedResults
	}
	return nil
}

func (x *ExecuteResponse) GetState() *test_platform.TaskState {
	if x != nil {
		return x.State
	}
	return nil
}

type ExecuteResponse_TaskResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// URL at which a human can view the task's run state (e.g. link to
	// swarming or cautotest job view).
	TaskUrl string                   `protobuf:"bytes,2,opt,name=task_url,json=taskUrl,proto3" json:"task_url,omitempty"`
	State   *test_platform.TaskState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"`
	Name    string                   `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
	// URL at which a human can view the task's logs (e.g. a link to
	// stainless gs viewer for this task).
	LogUrl string `protobuf:"bytes,5,opt,name=log_url,json=logUrl,proto3" json:"log_url,omitempty"`
	// The attempt number, starting at 0.
	// Within an execution, the tuple (name, attempt) will be unique.
	Attempt int32 `protobuf:"varint,6,opt,name=attempt,proto3" json:"attempt,omitempty"`
	// The results of individual test cases that were executed as part of
	// the task.
	TestCases []*ExecuteResponse_TaskResult_TestCaseResult `protobuf:"bytes,7,rep,name=test_cases,json=testCases,proto3" json:"test_cases,omitempty"`
	// The results of steps run prior to running the actual tests
	// (e.g. provision).
	PrejobSteps []*ExecuteResponse_TaskResult_TestCaseResult `protobuf:"bytes,8,rep,name=prejob_steps,json=prejobSteps,proto3" json:"prejob_steps,omitempty"`
	// Logdata is the location at which the task's full output will
	// eventually be available. Not intended for human's to view; use
	// log_url instead.
	LogData *common.TaskLogData `protobuf:"bytes,9,opt,name=log_data,json=logData,proto3" json:"log_data,omitempty"`
	// Any rejected task dimensions from the task execution request,
	// stored as key-value pairs. This field is only populated if the
	// task was rejected by Swarming due to a lack of matching bot.
	RejectedTaskDimensions map[string]string `protobuf:"bytes,11,rep,name=rejected_task_dimensions,json=rejectedTaskDimensions,proto3" json:"rejected_task_dimensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

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

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

func (*ExecuteResponse_TaskResult) ProtoMessage() {}

func (x *ExecuteResponse_TaskResult) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_steps_execution_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 ExecuteResponse_TaskResult.ProtoReflect.Descriptor instead.
func (*ExecuteResponse_TaskResult) Descriptor() ([]byte, []int) {
	return file_test_platform_steps_execution_proto_rawDescGZIP(), []int{3, 0}
}

func (x *ExecuteResponse_TaskResult) GetTaskUrl() string {
	if x != nil {
		return x.TaskUrl
	}
	return ""
}

func (x *ExecuteResponse_TaskResult) GetState() *test_platform.TaskState {
	if x != nil {
		return x.State
	}
	return nil
}

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

func (x *ExecuteResponse_TaskResult) GetLogUrl() string {
	if x != nil {
		return x.LogUrl
	}
	return ""
}

func (x *ExecuteResponse_TaskResult) GetAttempt() int32 {
	if x != nil {
		return x.Attempt
	}
	return 0
}

func (x *ExecuteResponse_TaskResult) GetTestCases() []*ExecuteResponse_TaskResult_TestCaseResult {
	if x != nil {
		return x.TestCases
	}
	return nil
}

func (x *ExecuteResponse_TaskResult) GetPrejobSteps() []*ExecuteResponse_TaskResult_TestCaseResult {
	if x != nil {
		return x.PrejobSteps
	}
	return nil
}

func (x *ExecuteResponse_TaskResult) GetLogData() *common.TaskLogData {
	if x != nil {
		return x.LogData
	}
	return nil
}

func (x *ExecuteResponse_TaskResult) GetRejectedTaskDimensions() map[string]string {
	if x != nil {
		return x.RejectedTaskDimensions
	}
	return nil
}

type ExecuteResponse_ConsolidatedResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// result for each attempt of the corresponding enumeration.
	Attempts []*ExecuteResponse_TaskResult `protobuf:"bytes,1,rep,name=attempts,proto3" json:"attempts,omitempty"`
}

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

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

func (*ExecuteResponse_ConsolidatedResult) ProtoMessage() {}

func (x *ExecuteResponse_ConsolidatedResult) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_steps_execution_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 ExecuteResponse_ConsolidatedResult.ProtoReflect.Descriptor instead.
func (*ExecuteResponse_ConsolidatedResult) Descriptor() ([]byte, []int) {
	return file_test_platform_steps_execution_proto_rawDescGZIP(), []int{3, 1}
}

func (x *ExecuteResponse_ConsolidatedResult) GetAttempts() []*ExecuteResponse_TaskResult {
	if x != nil {
		return x.Attempts
	}
	return nil
}

type ExecuteResponse_TaskResult_TestCaseResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Test case name which is generally independent from task name.
	// E.g. a task named "tast.critical-system" may have a test case
	// named "tast.audio.DevicePlay".
	// For tasks with a single test case it will generally be the same
	// as the task name, e.g. "logging_UserCrash".
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Verdict describes whether the test case passed, failed, or had
	// some other indefinite verdict.
	Verdict test_platform.TaskState_Verdict `protobuf:"varint,2,opt,name=verdict,proto3,enum=test_platform.TaskState_Verdict" json:"verdict,omitempty"`
	// A one line human readable description of what happened during
	// test case execution (e.g. error/warning message). Not intended
	// to be machine parseable. There's no guarantee that a given root
	// cause will always resolve to the same summary.
	HumanReadableSummary string `protobuf:"bytes,3,opt,name=human_readable_summary,json=humanReadableSummary,proto3" json:"human_readable_summary,omitempty"`
}

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

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

func (*ExecuteResponse_TaskResult_TestCaseResult) ProtoMessage() {}

func (x *ExecuteResponse_TaskResult_TestCaseResult) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_steps_execution_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 ExecuteResponse_TaskResult_TestCaseResult.ProtoReflect.Descriptor instead.
func (*ExecuteResponse_TaskResult_TestCaseResult) Descriptor() ([]byte, []int) {
	return file_test_platform_steps_execution_proto_rawDescGZIP(), []int{3, 0, 0}
}

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

func (x *ExecuteResponse_TaskResult_TestCaseResult) GetVerdict() test_platform.TaskState_Verdict {
	if x != nil {
		return x.Verdict
	}
	return test_platform.TaskState_VERDICT_UNSPECIFIED
}

func (x *ExecuteResponse_TaskResult_TestCaseResult) GetHumanReadableSummary() string {
	if x != nil {
		return x.HumanReadableSummary
	}
	return ""
}

var File_test_platform_steps_execution_proto protoreflect.FileDescriptor

var file_test_platform_steps_execution_proto_rawDesc = []byte{
	0x0a, 0x23, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f,
	0x73, 0x74, 0x65, 0x70, 0x73, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74,
	0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x1a, 0x1f, 0x74, 0x65, 0x73, 0x74,
	0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
	0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x74, 0x65, 0x73,
	0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b,
	0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x74, 0x65, 0x73,
	0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x73, 0x74, 0x65, 0x70, 0x73,
	0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x1a, 0x27, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
	0x6d, 0x2f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x2f,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x74, 0x65, 0x73,
	0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73,
	0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd7, 0x02, 0x0a, 0x0f, 0x45,
	0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x3f,
	0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x23, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
	0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12,
	0x61, 0x0a, 0x0f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f,
	0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45,
	0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x54,
	0x61, 0x67, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74,
	0x72, 0x79, 0x52, 0x0e, 0x74, 0x61, 0x67, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x73, 0x12, 0x38, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
	0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x1a, 0x66, 0x0a, 0x13,
	0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 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, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74,
	0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75,
	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7, 0x02, 0x0a, 0x10, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x72, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74,
	0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65,
	0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x65, 0x0a,
	0x10, 0x74, 0x61, 0x67, 0x67, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70,
	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78,
	0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x54,
	0x61, 0x67, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x52, 0x0f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x73, 0x1a, 0x68, 0x0a, 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 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, 0x3a,
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
	0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74,
	0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd8,
	0x01, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x12, 0x44, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72,
	0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74,
	0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4a, 0x0a, 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x65,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74,
	0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65,
	0x70, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66,
	0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x95, 0x09, 0x0a, 0x0f, 0x45, 0x78,
	0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a,
	0x0c, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66,
	0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x6a, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69,
	0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66,
	0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c,
	0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x13, 0x63, 0x6f,
	0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
	0x73, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x18, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
	0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
	0x65, 0x1a, 0xaa, 0x06, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
	0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x55, 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x05, 0x73,
	0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x73,
	0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53,
	0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e,
	0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
	0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x06, 0x6c, 0x6f, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x65,
	0x6d, 0x70, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d,
	0x70, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73,
	0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c,
	0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65,
	0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73,
	0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65,
	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x09, 0x74, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65,
	0x73, 0x12, 0x61, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x65, 0x70,
	0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70,
	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78,
	0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61,
	0x73, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73,
	0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x6a, 0x6f, 0x62, 0x53,
	0x74, 0x65, 0x70, 0x73, 0x12, 0x3c, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61,
	0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c,
	0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x61,
	0x73, 0x6b, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x44, 0x61,
	0x74, 0x61, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
	0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
	0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61,
	0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63,
	0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b,
	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54,
	0x61, 0x73, 0x6b, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74,
	0x72, 0x79, 0x52, 0x16, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b,
	0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x96, 0x01, 0x0a, 0x0e, 0x54,
	0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
	0x65, 0x12, 0x3a, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f,
	0x72, 0x6d, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x65, 0x72,
	0x64, 0x69, 0x63, 0x74, 0x52, 0x07, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x12, 0x34, 0x0a,
	0x16, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f,
	0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x68,
	0x75, 0x6d, 0x61, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x6d,
	0x61, 0x72, 0x79, 0x1a, 0x49, 0x0a, 0x1b, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54,
	0x61, 0x73, 0x6b, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 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, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04,
	0x08, 0x0a, 0x10, 0x0b, 0x52, 0x18, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x6f, 0x75,
	0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x72, 0x6c, 0x1a, 0x61,
	0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x12, 0x4b, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c,
	0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x2e, 0x45, 0x78, 0x65,
	0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73,
	0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74,
	0x73, 0x42, 0x3f, 0x5a, 0x3d, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f,
	0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74,
	0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x73, 0x74, 0x65,
	0x70, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_test_platform_steps_execution_proto_rawDescOnce sync.Once
	file_test_platform_steps_execution_proto_rawDescData = file_test_platform_steps_execution_proto_rawDesc
)

func file_test_platform_steps_execution_proto_rawDescGZIP() []byte {
	file_test_platform_steps_execution_proto_rawDescOnce.Do(func() {
		file_test_platform_steps_execution_proto_rawDescData = protoimpl.X.CompressGZIP(file_test_platform_steps_execution_proto_rawDescData)
	})
	return file_test_platform_steps_execution_proto_rawDescData
}

var file_test_platform_steps_execution_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
var file_test_platform_steps_execution_proto_goTypes = []interface{}{
	(*ExecuteRequests)(nil),            // 0: test_platform.steps.ExecuteRequests
	(*ExecuteResponses)(nil),           // 1: test_platform.steps.ExecuteResponses
	(*ExecuteRequest)(nil),             // 2: test_platform.steps.ExecuteRequest
	(*ExecuteResponse)(nil),            // 3: test_platform.steps.ExecuteResponse
	nil,                                // 4: test_platform.steps.ExecuteRequests.TaggedRequestsEntry
	nil,                                // 5: test_platform.steps.ExecuteResponses.TaggedResponsesEntry
	(*ExecuteResponse_TaskResult)(nil), // 6: test_platform.steps.ExecuteResponse.TaskResult
	(*ExecuteResponse_ConsolidatedResult)(nil),        // 7: test_platform.steps.ExecuteResponse.ConsolidatedResult
	(*ExecuteResponse_TaskResult_TestCaseResult)(nil), // 8: test_platform.steps.ExecuteResponse.TaskResult.TestCaseResult
	nil,                                  // 9: test_platform.steps.ExecuteResponse.TaskResult.RejectedTaskDimensionsEntry
	(*execute.Build)(nil),                // 10: test_platform.steps.execute.Build
	(*test_platform.Request_Params)(nil), // 11: test_platform.Request.Params
	(*EnumerationResponse)(nil),          // 12: test_platform.steps.EnumerationResponse
	(*config.Config)(nil),                // 13: test_platform.config.Config
	(*test_platform.TaskState)(nil),      // 14: test_platform.TaskState
	(*common.TaskLogData)(nil),           // 15: test_platform.common.TaskLogData
	(test_platform.TaskState_Verdict)(0), // 16: test_platform.TaskState.Verdict
}
var file_test_platform_steps_execution_proto_depIdxs = []int32{
	2,  // 0: test_platform.steps.ExecuteRequests.requests:type_name -> test_platform.steps.ExecuteRequest
	4,  // 1: test_platform.steps.ExecuteRequests.tagged_requests:type_name -> test_platform.steps.ExecuteRequests.TaggedRequestsEntry
	10, // 2: test_platform.steps.ExecuteRequests.build:type_name -> test_platform.steps.execute.Build
	3,  // 3: test_platform.steps.ExecuteResponses.responses:type_name -> test_platform.steps.ExecuteResponse
	5,  // 4: test_platform.steps.ExecuteResponses.tagged_responses:type_name -> test_platform.steps.ExecuteResponses.TaggedResponsesEntry
	11, // 5: test_platform.steps.ExecuteRequest.request_params:type_name -> test_platform.Request.Params
	12, // 6: test_platform.steps.ExecuteRequest.enumeration:type_name -> test_platform.steps.EnumerationResponse
	13, // 7: test_platform.steps.ExecuteRequest.config:type_name -> test_platform.config.Config
	6,  // 8: test_platform.steps.ExecuteResponse.task_results:type_name -> test_platform.steps.ExecuteResponse.TaskResult
	7,  // 9: test_platform.steps.ExecuteResponse.consolidated_results:type_name -> test_platform.steps.ExecuteResponse.ConsolidatedResult
	14, // 10: test_platform.steps.ExecuteResponse.state:type_name -> test_platform.TaskState
	2,  // 11: test_platform.steps.ExecuteRequests.TaggedRequestsEntry.value:type_name -> test_platform.steps.ExecuteRequest
	3,  // 12: test_platform.steps.ExecuteResponses.TaggedResponsesEntry.value:type_name -> test_platform.steps.ExecuteResponse
	14, // 13: test_platform.steps.ExecuteResponse.TaskResult.state:type_name -> test_platform.TaskState
	8,  // 14: test_platform.steps.ExecuteResponse.TaskResult.test_cases:type_name -> test_platform.steps.ExecuteResponse.TaskResult.TestCaseResult
	8,  // 15: test_platform.steps.ExecuteResponse.TaskResult.prejob_steps:type_name -> test_platform.steps.ExecuteResponse.TaskResult.TestCaseResult
	15, // 16: test_platform.steps.ExecuteResponse.TaskResult.log_data:type_name -> test_platform.common.TaskLogData
	9,  // 17: test_platform.steps.ExecuteResponse.TaskResult.rejected_task_dimensions:type_name -> test_platform.steps.ExecuteResponse.TaskResult.RejectedTaskDimensionsEntry
	6,  // 18: test_platform.steps.ExecuteResponse.ConsolidatedResult.attempts:type_name -> test_platform.steps.ExecuteResponse.TaskResult
	16, // 19: test_platform.steps.ExecuteResponse.TaskResult.TestCaseResult.verdict:type_name -> test_platform.TaskState.Verdict
	20, // [20:20] is the sub-list for method output_type
	20, // [20:20] is the sub-list for method input_type
	20, // [20:20] is the sub-list for extension type_name
	20, // [20:20] is the sub-list for extension extendee
	0,  // [0:20] is the sub-list for field type_name
}

func init() { file_test_platform_steps_execution_proto_init() }
func file_test_platform_steps_execution_proto_init() {
	if File_test_platform_steps_execution_proto != nil {
		return
	}
	file_test_platform_steps_enumeration_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_test_platform_steps_execution_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecuteRequests); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_steps_execution_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecuteResponses); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_steps_execution_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecuteRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_steps_execution_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecuteResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_steps_execution_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecuteResponse_TaskResult); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_steps_execution_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecuteResponse_ConsolidatedResult); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_steps_execution_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecuteResponse_TaskResult_TestCaseResult); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_test_platform_steps_execution_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   10,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_test_platform_steps_execution_proto_goTypes,
		DependencyIndexes: file_test_platform_steps_execution_proto_depIdxs,
		MessageInfos:      file_test_platform_steps_execution_proto_msgTypes,
	}.Build()
	File_test_platform_steps_execution_proto = out.File
	file_test_platform_steps_execution_proto_rawDesc = nil
	file_test_platform_steps_execution_proto_goTypes = nil
	file_test_platform_steps_execution_proto_depIdxs = nil
}
