// Copyright (C) 2018 The Android Open Source Project
//
// 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.

// Note that if you add/remove methods in this file you must update
// the metrics sql as well ./android/scripts/gen-grpc-sql.py
//
// Please group deleted methods in a block including the date (MM/DD/YY)
// it was removed. This enables us to easily keep metrics around after removal
//
// List of deleted methods
// rpc iWasDeleted (03/12/12)
// ...

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.17.3
// source: emulator_controller.proto

package android_emulator_control_proto

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	emptypb "google.golang.org/protobuf/types/known/emptypb"
	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 VmRunState_RunState int32

const (
	// The emulator is in an unknown state. You cannot transition to this state.
	VmRunState_UNKNOWN VmRunState_RunState = 0
	// Guest is actively running. You can transition to this state from the
	// paused state.
	VmRunState_RUNNING VmRunState_RunState = 1
	// Guest is paused to load a snapshot. You cannot transition to this state.
	VmRunState_RESTORE_VM VmRunState_RunState = 2
	// Guest has been paused. Transitioning to this state will pause the
	// emulator the guest will not be consuming any cpu cycles.
	VmRunState_PAUSED VmRunState_RunState = 3
	// Guest is paused to take or export a snapshot. You cannot
	// transition to this state.
	VmRunState_SAVE_VM VmRunState_RunState = 4
	// System shutdown, note that it is similar to power off. It tries to set
	// the system status and notify guest. The system is likely going to
	// disappear soon and do proper cleanup of resources, possibly taking
	// a snapshot. This is the same behavior as closing the emulator by clicking
	// the X (close) in the user interface.
	VmRunState_SHUTDOWN VmRunState_RunState = 5
	// Immediately terminate the emulator. No resource cleanup will take place.
	// There is a good change to corrupt the system.
	VmRunState_TERMINATE VmRunState_RunState = 7
	// Will cause the emulator to reset. This is not a state you can observe.
	VmRunState_RESET VmRunState_RunState = 9
	// Guest experienced some error state, you cannot transition to this state.
	VmRunState_INTERNAL_ERROR VmRunState_RunState = 10
)

// Enum value maps for VmRunState_RunState.
var (
	VmRunState_RunState_name = map[int32]string{
		0:  "UNKNOWN",
		1:  "RUNNING",
		2:  "RESTORE_VM",
		3:  "PAUSED",
		4:  "SAVE_VM",
		5:  "SHUTDOWN",
		7:  "TERMINATE",
		9:  "RESET",
		10: "INTERNAL_ERROR",
	}
	VmRunState_RunState_value = map[string]int32{
		"UNKNOWN":        0,
		"RUNNING":        1,
		"RESTORE_VM":     2,
		"PAUSED":         3,
		"SAVE_VM":        4,
		"SHUTDOWN":       5,
		"TERMINATE":      7,
		"RESET":          9,
		"INTERNAL_ERROR": 10,
	}
)

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

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

func (VmRunState_RunState) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[0].Descriptor()
}

func (VmRunState_RunState) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[0]
}

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

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

type PhysicalModelValue_State int32

const (
	PhysicalModelValue_OK         PhysicalModelValue_State = 0
	PhysicalModelValue_NO_SERVICE PhysicalModelValue_State = -3 // qemud service is not available/initiated.
	PhysicalModelValue_DISABLED   PhysicalModelValue_State = -2 // Sensor is disabled.
	PhysicalModelValue_UNKNOWN    PhysicalModelValue_State = -1 // Unknown sensor (should not happen)
)

// Enum value maps for PhysicalModelValue_State.
var (
	PhysicalModelValue_State_name = map[int32]string{
		0:  "OK",
		-3: "NO_SERVICE",
		-2: "DISABLED",
		-1: "UNKNOWN",
	}
	PhysicalModelValue_State_value = map[string]int32{
		"OK":         0,
		"NO_SERVICE": -3,
		"DISABLED":   -2,
		"UNKNOWN":    -1,
	}
)

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

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

func (PhysicalModelValue_State) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[1].Descriptor()
}

func (PhysicalModelValue_State) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[1]
}

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

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

// Details on the sensors documentation can be found here:
// https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_
// The types must follow the order defined in "external/qemu/android/hw-sensors.h"
type PhysicalModelValue_PhysicalType int32

const (
	PhysicalModelValue_POSITION PhysicalModelValue_PhysicalType = 0
	// All values are angles in degrees.
	// values = [x,y,z]
	PhysicalModelValue_ROTATION       PhysicalModelValue_PhysicalType = 1
	PhysicalModelValue_MAGNETIC_FIELD PhysicalModelValue_PhysicalType = 2
	// Temperature in °C
	PhysicalModelValue_TEMPERATURE PhysicalModelValue_PhysicalType = 3
	// Proximity sensor distance measured in centimeters
	PhysicalModelValue_PROXIMITY PhysicalModelValue_PhysicalType = 4
	// Ambient light level in SI lux units
	PhysicalModelValue_LIGHT PhysicalModelValue_PhysicalType = 5
	// Atmospheric pressure in hPa (millibar)
	PhysicalModelValue_PRESSURE PhysicalModelValue_PhysicalType = 6
	// Relative ambient air humidity in percent
	PhysicalModelValue_HUMIDITY       PhysicalModelValue_PhysicalType = 7
	PhysicalModelValue_VELOCITY       PhysicalModelValue_PhysicalType = 8
	PhysicalModelValue_AMBIENT_MOTION PhysicalModelValue_PhysicalType = 9
	// Describing a hinge angle sensor in degrees.
	PhysicalModelValue_HINGE_ANGLE0 PhysicalModelValue_PhysicalType = 10
	PhysicalModelValue_HINGE_ANGLE1 PhysicalModelValue_PhysicalType = 11
	PhysicalModelValue_HINGE_ANGLE2 PhysicalModelValue_PhysicalType = 12
	PhysicalModelValue_ROLLABLE0    PhysicalModelValue_PhysicalType = 13
	PhysicalModelValue_ROLLABLE1    PhysicalModelValue_PhysicalType = 14
	PhysicalModelValue_ROLLABLE2    PhysicalModelValue_PhysicalType = 15
)

// Enum value maps for PhysicalModelValue_PhysicalType.
var (
	PhysicalModelValue_PhysicalType_name = map[int32]string{
		0:  "POSITION",
		1:  "ROTATION",
		2:  "MAGNETIC_FIELD",
		3:  "TEMPERATURE",
		4:  "PROXIMITY",
		5:  "LIGHT",
		6:  "PRESSURE",
		7:  "HUMIDITY",
		8:  "VELOCITY",
		9:  "AMBIENT_MOTION",
		10: "HINGE_ANGLE0",
		11: "HINGE_ANGLE1",
		12: "HINGE_ANGLE2",
		13: "ROLLABLE0",
		14: "ROLLABLE1",
		15: "ROLLABLE2",
	}
	PhysicalModelValue_PhysicalType_value = map[string]int32{
		"POSITION":       0,
		"ROTATION":       1,
		"MAGNETIC_FIELD": 2,
		"TEMPERATURE":    3,
		"PROXIMITY":      4,
		"LIGHT":          5,
		"PRESSURE":       6,
		"HUMIDITY":       7,
		"VELOCITY":       8,
		"AMBIENT_MOTION": 9,
		"HINGE_ANGLE0":   10,
		"HINGE_ANGLE1":   11,
		"HINGE_ANGLE2":   12,
		"ROLLABLE0":      13,
		"ROLLABLE1":      14,
		"ROLLABLE2":      15,
	}
)

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

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

func (PhysicalModelValue_PhysicalType) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[2].Descriptor()
}

func (PhysicalModelValue_PhysicalType) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[2]
}

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

// Deprecated: Use PhysicalModelValue_PhysicalType.Descriptor instead.
func (PhysicalModelValue_PhysicalType) EnumDescriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{2, 1}
}

type SensorValue_State int32

const (
	SensorValue_OK         SensorValue_State = 0
	SensorValue_NO_SERVICE SensorValue_State = -3 // qemud service is not available/initiated.
	SensorValue_DISABLED   SensorValue_State = -2 // Sensor is disabled.
	SensorValue_UNKNOWN    SensorValue_State = -1 // Unknown sensor (should not happen)
)

// Enum value maps for SensorValue_State.
var (
	SensorValue_State_name = map[int32]string{
		0:  "OK",
		-3: "NO_SERVICE",
		-2: "DISABLED",
		-1: "UNKNOWN",
	}
	SensorValue_State_value = map[string]int32{
		"OK":         0,
		"NO_SERVICE": -3,
		"DISABLED":   -2,
		"UNKNOWN":    -1,
	}
)

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

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

func (SensorValue_State) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[3].Descriptor()
}

func (SensorValue_State) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[3]
}

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

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

// These are the various sensors that can be available in an emulated
// devices.
type SensorValue_SensorType int32

const (
	// Measures the acceleration force in m/s2 that is applied to a device
	// on all three physical axes (x, y, and z), including the force of
	// gravity.
	SensorValue_ACCELERATION SensorValue_SensorType = 0
	// Measures a device's rate of rotation in rad/s around each of the
	// three physical axes (x, y, and z).
	SensorValue_GYROSCOPE SensorValue_SensorType = 1
	// Measures the ambient geomagnetic field for all three physical axes
	// (x, y, z) in μT.
	SensorValue_MAGNETIC_FIELD SensorValue_SensorType = 2
	// Measures degrees of rotation that a device makes around all three
	// physical axes (x, y, z)
	SensorValue_ORIENTATION SensorValue_SensorType = 3
	// Measures the temperature of the device in degrees Celsius (°C).
	SensorValue_TEMPERATURE SensorValue_SensorType = 4
	// Measures the proximity of an object in cm relative to the view screen
	// of a device. This sensor is typically used to determine whether a
	// handset is being held up to a person's ear.
	SensorValue_PROXIMITY SensorValue_SensorType = 5
	// Measures the ambient light level (illumination) in lx.
	SensorValue_LIGHT SensorValue_SensorType = 6
	// Measures the ambient air pressure in hPa or mbar.
	SensorValue_PRESSURE SensorValue_SensorType = 7
	// Measures the relative ambient humidity in percent (%).
	SensorValue_HUMIDITY                    SensorValue_SensorType = 8
	SensorValue_MAGNETIC_FIELD_UNCALIBRATED SensorValue_SensorType = 9
	SensorValue_GYROSCOPE_UNCALIBRATED      SensorValue_SensorType = 10
)

// Enum value maps for SensorValue_SensorType.
var (
	SensorValue_SensorType_name = map[int32]string{
		0:  "ACCELERATION",
		1:  "GYROSCOPE",
		2:  "MAGNETIC_FIELD",
		3:  "ORIENTATION",
		4:  "TEMPERATURE",
		5:  "PROXIMITY",
		6:  "LIGHT",
		7:  "PRESSURE",
		8:  "HUMIDITY",
		9:  "MAGNETIC_FIELD_UNCALIBRATED",
		10: "GYROSCOPE_UNCALIBRATED",
	}
	SensorValue_SensorType_value = map[string]int32{
		"ACCELERATION":                0,
		"GYROSCOPE":                   1,
		"MAGNETIC_FIELD":              2,
		"ORIENTATION":                 3,
		"TEMPERATURE":                 4,
		"PROXIMITY":                   5,
		"LIGHT":                       6,
		"PRESSURE":                    7,
		"HUMIDITY":                    8,
		"MAGNETIC_FIELD_UNCALIBRATED": 9,
		"GYROSCOPE_UNCALIBRATED":      10,
	}
)

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

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

func (SensorValue_SensorType) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[4].Descriptor()
}

func (SensorValue_SensorType) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[4]
}

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

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

type LogMessage_LogType int32

const (
	LogMessage_Text   LogMessage_LogType = 0
	LogMessage_Parsed LogMessage_LogType = 1
)

// Enum value maps for LogMessage_LogType.
var (
	LogMessage_LogType_name = map[int32]string{
		0: "Text",
		1: "Parsed",
	}
	LogMessage_LogType_value = map[string]int32{
		"Text":   0,
		"Parsed": 1,
	}
)

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

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

func (LogMessage_LogType) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[5].Descriptor()
}

func (LogMessage_LogType) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[5]
}

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

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

// The possible log levels.
type LogcatEntry_LogLevel int32

const (
	LogcatEntry_UNKNOWN LogcatEntry_LogLevel = 0
	LogcatEntry_DEFAULT LogcatEntry_LogLevel = 1
	LogcatEntry_VERBOSE LogcatEntry_LogLevel = 2
	LogcatEntry_DEBUG   LogcatEntry_LogLevel = 3
	LogcatEntry_INFO    LogcatEntry_LogLevel = 4
	LogcatEntry_WARN    LogcatEntry_LogLevel = 5
	LogcatEntry_ERR     LogcatEntry_LogLevel = 6
	LogcatEntry_FATAL   LogcatEntry_LogLevel = 7
	LogcatEntry_SILENT  LogcatEntry_LogLevel = 8
)

// Enum value maps for LogcatEntry_LogLevel.
var (
	LogcatEntry_LogLevel_name = map[int32]string{
		0: "UNKNOWN",
		1: "DEFAULT",
		2: "VERBOSE",
		3: "DEBUG",
		4: "INFO",
		5: "WARN",
		6: "ERR",
		7: "FATAL",
		8: "SILENT",
	}
	LogcatEntry_LogLevel_value = map[string]int32{
		"UNKNOWN": 0,
		"DEFAULT": 1,
		"VERBOSE": 2,
		"DEBUG":   3,
		"INFO":    4,
		"WARN":    5,
		"ERR":     6,
		"FATAL":   7,
		"SILENT":  8,
	}
)

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

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

func (LogcatEntry_LogLevel) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[6].Descriptor()
}

func (LogcatEntry_LogLevel) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[6]
}

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

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

type VmConfiguration_VmHypervisorType int32

const (
	// An unknown hypervisor
	VmConfiguration_UNKNOWN VmConfiguration_VmHypervisorType = 0
	// No hypervisor is in use. This usually means that the guest is
	// running on a different CPU than the host, or you are using a
	// platform where no hypervisor is available.
	VmConfiguration_NONE VmConfiguration_VmHypervisorType = 1
	// The Kernel based Virtual Machine
	// (https://www.linux-kvm.org/page/Main_Page)
	VmConfiguration_KVM VmConfiguration_VmHypervisorType = 2
	// Intel® Hardware Accelerated Execution Manager (Intel® HAXM)
	// https://github.com/intel/haxm
	VmConfiguration_HAXM VmConfiguration_VmHypervisorType = 3
	// Hypervisor Framework.
	// https://developer.apple.com/documentation/hypervisor
	VmConfiguration_HVF VmConfiguration_VmHypervisorType = 4
	// Window Hypervisor Platform
	// https://docs.microsoft.com/en-us/virtualization/api/
	VmConfiguration_WHPX VmConfiguration_VmHypervisorType = 5
	VmConfiguration_GVM  VmConfiguration_VmHypervisorType = 6
)

// Enum value maps for VmConfiguration_VmHypervisorType.
var (
	VmConfiguration_VmHypervisorType_name = map[int32]string{
		0: "UNKNOWN",
		1: "NONE",
		2: "KVM",
		3: "HAXM",
		4: "HVF",
		5: "WHPX",
		6: "GVM",
	}
	VmConfiguration_VmHypervisorType_value = map[string]int32{
		"UNKNOWN": 0,
		"NONE":    1,
		"KVM":     2,
		"HAXM":    3,
		"HVF":     4,
		"WHPX":    5,
		"GVM":     6,
	}
)

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

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

func (VmConfiguration_VmHypervisorType) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[7].Descriptor()
}

func (VmConfiguration_VmHypervisorType) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[7]
}

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

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

type Touch_EventExpiration int32

const (
	// The system will use the default time of 120s to track
	// the touch event with the given identifier. If no update happens
	// within this timeframe the identifier is considered expired
	// and can be made available for re-use. This means that a touch event
	// with pressure 0 for this identifier will be send to the emulator.
	Touch_EVENT_EXPIRATION_UNSPECIFIED Touch_EventExpiration = 0
	// Never expire the given slot. You must *ALWAYS* close the identifier
	// by sending a touch event with 0 pressure.
	Touch_NEVER_EXPIRE Touch_EventExpiration = 1
)

// Enum value maps for Touch_EventExpiration.
var (
	Touch_EventExpiration_name = map[int32]string{
		0: "EVENT_EXPIRATION_UNSPECIFIED",
		1: "NEVER_EXPIRE",
	}
	Touch_EventExpiration_value = map[string]int32{
		"EVENT_EXPIRATION_UNSPECIFIED": 0,
		"NEVER_EXPIRE":                 1,
	}
)

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

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

func (Touch_EventExpiration) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[8].Descriptor()
}

func (Touch_EventExpiration) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[8]
}

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

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

// Code types that the emulator can receive. Note that the emulator
// will do its best to translate the code to an evdev value that
// will be send to the emulator. This translation is based on
// the chromium translation tables. See
// (this)[https://android.googlesource.com/platform/external/qemu/+/refs/heads/emu-master-dev/android/android-grpc/android/emulation/control/keyboard/keycode_converter_data.inc]
// for details on the translation.
type KeyboardEvent_KeyCodeType int32

const (
	KeyboardEvent_Usb   KeyboardEvent_KeyCodeType = 0
	KeyboardEvent_Evdev KeyboardEvent_KeyCodeType = 1
	KeyboardEvent_XKB   KeyboardEvent_KeyCodeType = 2
	KeyboardEvent_Win   KeyboardEvent_KeyCodeType = 3
	KeyboardEvent_Mac   KeyboardEvent_KeyCodeType = 4
)

// Enum value maps for KeyboardEvent_KeyCodeType.
var (
	KeyboardEvent_KeyCodeType_name = map[int32]string{
		0: "Usb",
		1: "Evdev",
		2: "XKB",
		3: "Win",
		4: "Mac",
	}
	KeyboardEvent_KeyCodeType_value = map[string]int32{
		"Usb":   0,
		"Evdev": 1,
		"XKB":   2,
		"Win":   3,
		"Mac":   4,
	}
)

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

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

func (KeyboardEvent_KeyCodeType) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[9].Descriptor()
}

func (KeyboardEvent_KeyCodeType) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[9]
}

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

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

type KeyboardEvent_KeyEventType int32

const (
	// Indicates that this keyevent should be send to the emulator
	// as a key down event. Meaning that the key event will be
	// translated to an EvDev event type and bit 11 (0x400) will be
	// set before it is sent to the emulator.
	KeyboardEvent_keydown KeyboardEvent_KeyEventType = 0
	// Indicates that the keyevent should be send to the emulator
	// as a key up event. Meaning that the key event will be
	// translated to an EvDev event type and
	// sent to the emulator.
	KeyboardEvent_keyup KeyboardEvent_KeyEventType = 1
	// Indicates that the keyevent will be send to the emulator
	// as e key down event and immediately followed by a keyup event.
	KeyboardEvent_keypress KeyboardEvent_KeyEventType = 2
)

// Enum value maps for KeyboardEvent_KeyEventType.
var (
	KeyboardEvent_KeyEventType_name = map[int32]string{
		0: "keydown",
		1: "keyup",
		2: "keypress",
	}
	KeyboardEvent_KeyEventType_value = map[string]int32{
		"keydown":  0,
		"keyup":    1,
		"keypress": 2,
	}
)

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

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

func (KeyboardEvent_KeyEventType) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[10].Descriptor()
}

func (KeyboardEvent_KeyEventType) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[10]
}

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

// Deprecated: Use KeyboardEvent_KeyEventType.Descriptor instead.
func (KeyboardEvent_KeyEventType) EnumDescriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{11, 1}
}

type BatteryState_BatteryStatus int32

const (
	BatteryState_UNKNOWN      BatteryState_BatteryStatus = 0
	BatteryState_CHARGING     BatteryState_BatteryStatus = 1
	BatteryState_DISCHARGING  BatteryState_BatteryStatus = 2
	BatteryState_NOT_CHARGING BatteryState_BatteryStatus = 3
	BatteryState_FULL         BatteryState_BatteryStatus = 4
)

// Enum value maps for BatteryState_BatteryStatus.
var (
	BatteryState_BatteryStatus_name = map[int32]string{
		0: "UNKNOWN",
		1: "CHARGING",
		2: "DISCHARGING",
		3: "NOT_CHARGING",
		4: "FULL",
	}
	BatteryState_BatteryStatus_value = map[string]int32{
		"UNKNOWN":      0,
		"CHARGING":     1,
		"DISCHARGING":  2,
		"NOT_CHARGING": 3,
		"FULL":         4,
	}
)

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

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

func (BatteryState_BatteryStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[11].Descriptor()
}

func (BatteryState_BatteryStatus) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[11]
}

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

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

type BatteryState_BatteryCharger int32

const (
	BatteryState_NONE     BatteryState_BatteryCharger = 0
	BatteryState_AC       BatteryState_BatteryCharger = 1
	BatteryState_USB      BatteryState_BatteryCharger = 2
	BatteryState_WIRELESS BatteryState_BatteryCharger = 3
)

// Enum value maps for BatteryState_BatteryCharger.
var (
	BatteryState_BatteryCharger_name = map[int32]string{
		0: "NONE",
		1: "AC",
		2: "USB",
		3: "WIRELESS",
	}
	BatteryState_BatteryCharger_value = map[string]int32{
		"NONE":     0,
		"AC":       1,
		"USB":      2,
		"WIRELESS": 3,
	}
)

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

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

func (BatteryState_BatteryCharger) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[12].Descriptor()
}

func (BatteryState_BatteryCharger) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[12]
}

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

// Deprecated: Use BatteryState_BatteryCharger.Descriptor instead.
func (BatteryState_BatteryCharger) EnumDescriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{14, 1}
}

type BatteryState_BatteryHealth int32

const (
	BatteryState_GOOD        BatteryState_BatteryHealth = 0
	BatteryState_FAILED      BatteryState_BatteryHealth = 1
	BatteryState_DEAD        BatteryState_BatteryHealth = 2
	BatteryState_OVERVOLTAGE BatteryState_BatteryHealth = 3
	BatteryState_OVERHEATED  BatteryState_BatteryHealth = 4
)

// Enum value maps for BatteryState_BatteryHealth.
var (
	BatteryState_BatteryHealth_name = map[int32]string{
		0: "GOOD",
		1: "FAILED",
		2: "DEAD",
		3: "OVERVOLTAGE",
		4: "OVERHEATED",
	}
	BatteryState_BatteryHealth_value = map[string]int32{
		"GOOD":        0,
		"FAILED":      1,
		"DEAD":        2,
		"OVERVOLTAGE": 3,
		"OVERHEATED":  4,
	}
)

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

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

func (BatteryState_BatteryHealth) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[13].Descriptor()
}

func (BatteryState_BatteryHealth) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[13]
}

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

// Deprecated: Use BatteryState_BatteryHealth.Descriptor instead.
func (BatteryState_BatteryHealth) EnumDescriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{14, 2}
}

type ImageTransport_TransportChannel int32

const (
	// Return full frames over the gRPC transport
	ImageTransport_TRANSPORT_CHANNEL_UNSPECIFIED ImageTransport_TransportChannel = 0
	// Write images to the a file/shared memory handle.
	ImageTransport_MMAP ImageTransport_TransportChannel = 1
)

// Enum value maps for ImageTransport_TransportChannel.
var (
	ImageTransport_TransportChannel_name = map[int32]string{
		0: "TRANSPORT_CHANNEL_UNSPECIFIED",
		1: "MMAP",
	}
	ImageTransport_TransportChannel_value = map[string]int32{
		"TRANSPORT_CHANNEL_UNSPECIFIED": 0,
		"MMAP":                          1,
	}
)

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

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

func (ImageTransport_TransportChannel) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[14].Descriptor()
}

func (ImageTransport_TransportChannel) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[14]
}

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

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

type ImageFormat_ImgFormat int32

const (
	// Portable Network Graphics format
	// (https://en.wikipedia.org/wiki/Portable_Network_Graphics)
	ImageFormat_PNG ImageFormat_ImgFormat = 0
	// Three-channel RGB color model supplemented with a fourth alpha
	// channel. https://en.wikipedia.org/wiki/RGBA_color_model
	// Each pixel consists of 4 bytes.
	ImageFormat_RGBA8888 ImageFormat_ImgFormat = 1
	// Three-channel RGB color model, each pixel consists of 3 bytes
	ImageFormat_RGB888 ImageFormat_ImgFormat = 2
)

// Enum value maps for ImageFormat_ImgFormat.
var (
	ImageFormat_ImgFormat_name = map[int32]string{
		0: "PNG",
		1: "RGBA8888",
		2: "RGB888",
	}
	ImageFormat_ImgFormat_value = map[string]int32{
		"PNG":      0,
		"RGBA8888": 1,
		"RGB888":   2,
	}
)

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

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

func (ImageFormat_ImgFormat) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[15].Descriptor()
}

func (ImageFormat_ImgFormat) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[15]
}

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

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

type Rotation_SkinRotation int32

const (
	Rotation_PORTRAIT          Rotation_SkinRotation = 0 // 0 degrees
	Rotation_LANDSCAPE         Rotation_SkinRotation = 1 // 90 degrees
	Rotation_REVERSE_PORTRAIT  Rotation_SkinRotation = 2 // -180 degrees
	Rotation_REVERSE_LANDSCAPE Rotation_SkinRotation = 3 // -90 degrees
)

// Enum value maps for Rotation_SkinRotation.
var (
	Rotation_SkinRotation_name = map[int32]string{
		0: "PORTRAIT",
		1: "LANDSCAPE",
		2: "REVERSE_PORTRAIT",
		3: "REVERSE_LANDSCAPE",
	}
	Rotation_SkinRotation_value = map[string]int32{
		"PORTRAIT":          0,
		"LANDSCAPE":         1,
		"REVERSE_PORTRAIT":  2,
		"REVERSE_LANDSCAPE": 3,
	}
)

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

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

func (Rotation_SkinRotation) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[16].Descriptor()
}

func (Rotation_SkinRotation) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[16]
}

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

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

type PhoneCall_Operation int32

const (
	PhoneCall_InitCall           PhoneCall_Operation = 0
	PhoneCall_AcceptCall         PhoneCall_Operation = 1
	PhoneCall_RejectCallExplicit PhoneCall_Operation = 2
	PhoneCall_RejectCallBusy     PhoneCall_Operation = 3
	PhoneCall_DisconnectCall     PhoneCall_Operation = 4
	PhoneCall_PlaceCallOnHold    PhoneCall_Operation = 5
	PhoneCall_TakeCallOffHold    PhoneCall_Operation = 6
)

// Enum value maps for PhoneCall_Operation.
var (
	PhoneCall_Operation_name = map[int32]string{
		0: "InitCall",
		1: "AcceptCall",
		2: "RejectCallExplicit",
		3: "RejectCallBusy",
		4: "DisconnectCall",
		5: "PlaceCallOnHold",
		6: "TakeCallOffHold",
	}
	PhoneCall_Operation_value = map[string]int32{
		"InitCall":           0,
		"AcceptCall":         1,
		"RejectCallExplicit": 2,
		"RejectCallBusy":     3,
		"DisconnectCall":     4,
		"PlaceCallOnHold":    5,
		"TakeCallOffHold":    6,
	}
)

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

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

func (PhoneCall_Operation) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[17].Descriptor()
}

func (PhoneCall_Operation) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[17]
}

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

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

type PhoneResponse_Response int32

const (
	PhoneResponse_OK            PhoneResponse_Response = 0
	PhoneResponse_BadOperation  PhoneResponse_Response = 1 // Enum out of range
	PhoneResponse_BadNumber     PhoneResponse_Response = 2 // Mal-formed telephone number
	PhoneResponse_InvalidAction PhoneResponse_Response = 3 // E.g., disconnect when no call is in progress
	PhoneResponse_ActionFailed  PhoneResponse_Response = 4 // Internal error
	PhoneResponse_RadioOff      PhoneResponse_Response = 5 // Radio power off
)

// Enum value maps for PhoneResponse_Response.
var (
	PhoneResponse_Response_name = map[int32]string{
		0: "OK",
		1: "BadOperation",
		2: "BadNumber",
		3: "InvalidAction",
		4: "ActionFailed",
		5: "RadioOff",
	}
	PhoneResponse_Response_value = map[string]int32{
		"OK":            0,
		"BadOperation":  1,
		"BadNumber":     2,
		"InvalidAction": 3,
		"ActionFailed":  4,
		"RadioOff":      5,
	}
)

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

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

func (PhoneResponse_Response) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[18].Descriptor()
}

func (PhoneResponse_Response) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[18]
}

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

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

type AudioFormat_SampleFormat int32

const (
	AudioFormat_AUD_FMT_U8  AudioFormat_SampleFormat = 0 // Unsigned 8 bit
	AudioFormat_AUD_FMT_S16 AudioFormat_SampleFormat = 1 // Signed 16 bit (little endian)
)

// Enum value maps for AudioFormat_SampleFormat.
var (
	AudioFormat_SampleFormat_name = map[int32]string{
		0: "AUD_FMT_U8",
		1: "AUD_FMT_S16",
	}
	AudioFormat_SampleFormat_value = map[string]int32{
		"AUD_FMT_U8":  0,
		"AUD_FMT_S16": 1,
	}
)

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

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

func (AudioFormat_SampleFormat) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[19].Descriptor()
}

func (AudioFormat_SampleFormat) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[19]
}

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

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

type AudioFormat_Channels int32

const (
	AudioFormat_Mono   AudioFormat_Channels = 0
	AudioFormat_Stereo AudioFormat_Channels = 1
)

// Enum value maps for AudioFormat_Channels.
var (
	AudioFormat_Channels_name = map[int32]string{
		0: "Mono",
		1: "Stereo",
	}
	AudioFormat_Channels_value = map[string]int32{
		"Mono":   0,
		"Stereo": 1,
	}
)

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

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

func (AudioFormat_Channels) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[20].Descriptor()
}

func (AudioFormat_Channels) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[20]
}

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

// Deprecated: Use AudioFormat_Channels.Descriptor instead.
func (AudioFormat_Channels) EnumDescriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{25, 1}
}

// These are the set of known android flags and their respective values.
// you can combine the int values to (de)construct the flags field below.
type DisplayConfiguration_DisplayFlags int32

const (
	DisplayConfiguration_DISPLAYFLAGS_UNSPECIFIED DisplayConfiguration_DisplayFlags = 0
	// When this flag is set, the virtual display is public.
	// A public virtual display behaves just like most any other display
	// that is connected to the system such as an external or wireless
	// display. Applications can open windows on the display and the system
	// may mirror the contents of other displays onto it. see:
	// https://developer.android.com/reference/android/hardware/display/DisplayManager#VIRTUAL_DISPLAY_FLAG_PUBLIC
	DisplayConfiguration_VIRTUAL_DISPLAY_FLAG_PUBLIC DisplayConfiguration_DisplayFlags = 1
	// When this flag is set, the virtual display is registered as a
	// presentation display in the presentation display category.
	// Applications may automatically project their content to presentation
	// displays to provide richer second screen experiences.
	// https://developer.android.com/reference/android/hardware/display/DisplayManager#VIRTUAL_DISPLAY_FLAG_PRESENTATION
	DisplayConfiguration_VIRTUAL_DISPLAY_FLAG_PRESENTATION DisplayConfiguration_DisplayFlags = 2
	// When this flag is set, the virtual display is considered secure as
	// defined by the Display#FLAG_SECURE display flag. The caller promises
	// to take reasonable measures, such as over-the-air encryption, to
	// prevent the contents of the display from being intercepted or
	// recorded on a persistent medium.
	// see:
	// https://developer.android.com/reference/android/hardware/display/DisplayManager#VIRTUAL_DISPLAY_FLAG_SECURE
	DisplayConfiguration_VIRTUAL_DISPLAY_FLAG_SECURE DisplayConfiguration_DisplayFlags = 4
	// This flag is used in conjunction with VIRTUAL_DISPLAY_FLAG_PUBLIC.
	// Ordinarily public virtual displays will automatically mirror the
	// content of the default display if they have no windows of their own.
	// When this flag is specified, the virtual display will only ever show
	// its own content and will be blanked instead if it has no windows. See
	// https://developer.android.com/reference/android/hardware/display/DisplayManager#VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY
	DisplayConfiguration_VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY DisplayConfiguration_DisplayFlags = 8
	// Allows content to be mirrored on private displays when no content is
	// being shown.
	// This flag is mutually exclusive with
	// VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY. If both flags are specified
	// then the own-content only behavior will be applied.
	// see:
	// https://developer.android.com/reference/android/hardware/display/DisplayManager#VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR)
	DisplayConfiguration_VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR DisplayConfiguration_DisplayFlags = 16
)

// Enum value maps for DisplayConfiguration_DisplayFlags.
var (
	DisplayConfiguration_DisplayFlags_name = map[int32]string{
		0:  "DISPLAYFLAGS_UNSPECIFIED",
		1:  "VIRTUAL_DISPLAY_FLAG_PUBLIC",
		2:  "VIRTUAL_DISPLAY_FLAG_PRESENTATION",
		4:  "VIRTUAL_DISPLAY_FLAG_SECURE",
		8:  "VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY",
		16: "VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR",
	}
	DisplayConfiguration_DisplayFlags_value = map[string]int32{
		"DISPLAYFLAGS_UNSPECIFIED":              0,
		"VIRTUAL_DISPLAY_FLAG_PUBLIC":           1,
		"VIRTUAL_DISPLAY_FLAG_PRESENTATION":     2,
		"VIRTUAL_DISPLAY_FLAG_SECURE":           4,
		"VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY": 8,
		"VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR":      16,
	}
)

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

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

func (DisplayConfiguration_DisplayFlags) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[21].Descriptor()
}

func (DisplayConfiguration_DisplayFlags) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[21]
}

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

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

type Notification_EventType int32

const (
	Notification_VIRTUAL_SCENE_CAMERA_INACTIVE Notification_EventType = 0
	Notification_VIRTUAL_SCENE_CAMERA_ACTIVE   Notification_EventType = 1
	// Fired when an update to a display event has been fired through
	// the extended ui. This does not fire events when the display
	// is changed through the console or gRPC endpoint.
	Notification_DISPLAY_CONFIGURATIONS_CHANGED_UI Notification_EventType = 2 // Keep adding more for other event types
)

// Enum value maps for Notification_EventType.
var (
	Notification_EventType_name = map[int32]string{
		0: "VIRTUAL_SCENE_CAMERA_INACTIVE",
		1: "VIRTUAL_SCENE_CAMERA_ACTIVE",
		2: "DISPLAY_CONFIGURATIONS_CHANGED_UI",
	}
	Notification_EventType_value = map[string]int32{
		"VIRTUAL_SCENE_CAMERA_INACTIVE":     0,
		"VIRTUAL_SCENE_CAMERA_ACTIVE":       1,
		"DISPLAY_CONFIGURATIONS_CHANGED_UI": 2,
	}
)

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

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

func (Notification_EventType) Descriptor() protoreflect.EnumDescriptor {
	return file_emulator_controller_proto_enumTypes[22].Descriptor()
}

func (Notification_EventType) Type() protoreflect.EnumType {
	return &file_emulator_controller_proto_enumTypes[22]
}

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

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

// A Run State that describes the state of the Virtual Machine.
type VmRunState struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	State VmRunState_RunState `protobuf:"varint,1,opt,name=state,proto3,enum=android.emulation.control.VmRunState_RunState" json:"state,omitempty"`
}

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

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

func (*VmRunState) ProtoMessage() {}

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

func (x *VmRunState) GetState() VmRunState_RunState {
	if x != nil {
		return x.State
	}
	return VmRunState_UNKNOWN
}

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

	Data []float32 `protobuf:"fixed32,1,rep,packed,name=data,proto3" json:"data,omitempty"`
}

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

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

func (*ParameterValue) ProtoMessage() {}

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

func (x *ParameterValue) GetData() []float32 {
	if x != nil {
		return x.Data
	}
	return nil
}

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

	Target PhysicalModelValue_PhysicalType `protobuf:"varint,1,opt,name=target,proto3,enum=android.emulation.control.PhysicalModelValue_PhysicalType" json:"target,omitempty"`
	// [Output Only]
	Status PhysicalModelValue_State `protobuf:"varint,2,opt,name=status,proto3,enum=android.emulation.control.PhysicalModelValue_State" json:"status,omitempty"`
	// Value interpretation depends on sensor, will contain at most 3 values.
	Value *ParameterValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
}

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

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

func (*PhysicalModelValue) ProtoMessage() {}

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

func (x *PhysicalModelValue) GetTarget() PhysicalModelValue_PhysicalType {
	if x != nil {
		return x.Target
	}
	return PhysicalModelValue_POSITION
}

func (x *PhysicalModelValue) GetStatus() PhysicalModelValue_State {
	if x != nil {
		return x.Status
	}
	return PhysicalModelValue_OK
}

func (x *PhysicalModelValue) GetValue() *ParameterValue {
	if x != nil {
		return x.Value
	}
	return nil
}

// A single sensor value.
type SensorValue struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Type of sensor
	Target SensorValue_SensorType `protobuf:"varint,1,opt,name=target,proto3,enum=android.emulation.control.SensorValue_SensorType" json:"target,omitempty"`
	// [Output Only]
	Status SensorValue_State `protobuf:"varint,2,opt,name=status,proto3,enum=android.emulation.control.SensorValue_State" json:"status,omitempty"`
	// Value interpretation depends on sensor enum, will contain at most 3
	// values.
	Value *ParameterValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
}

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

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

func (*SensorValue) ProtoMessage() {}

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

func (x *SensorValue) GetTarget() SensorValue_SensorType {
	if x != nil {
		return x.Target
	}
	return SensorValue_ACCELERATION
}

func (x *SensorValue) GetStatus() SensorValue_State {
	if x != nil {
		return x.Status
	}
	return SensorValue_OK
}

func (x *SensorValue) GetValue() *ParameterValue {
	if x != nil {
		return x.Value
	}
	return nil
}

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

	// [Output Only] The contents of the log output.
	Contents string `protobuf:"bytes,1,opt,name=contents,proto3" json:"contents,omitempty"`
	// The starting byte position of the output that was returned. This
	// should match the start parameter sent with the request. If the serial
	// console output exceeds the size of the buffer, older output will be
	// overwritten by newer content and the start values will be mismatched.
	Start int64 `protobuf:"varint,2,opt,name=start,proto3" json:"start,omitempty"`
	//[Output Only] The position of the next byte of content from the serial
	// console output. Use this value in the next request as the start
	// parameter.
	Next int64 `protobuf:"varint,3,opt,name=next,proto3" json:"next,omitempty"`
	// Set the sort of response you are interested it in.
	// It the type is "Parsed" the entries field will contain the parsed
	// results. otherwise the contents field will be set.
	Sort LogMessage_LogType `protobuf:"varint,4,opt,name=sort,proto3,enum=android.emulation.control.LogMessage_LogType" json:"sort,omitempty"`
	// [Output Only] The parsed logcat entries so far. Only set if sort is
	// set to Parsed
	Entries []*LogcatEntry `protobuf:"bytes,5,rep,name=entries,proto3" json:"entries,omitempty"`
}

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

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

func (*LogMessage) ProtoMessage() {}

func (x *LogMessage) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 LogMessage.ProtoReflect.Descriptor instead.
func (*LogMessage) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{4}
}

func (x *LogMessage) GetContents() string {
	if x != nil {
		return x.Contents
	}
	return ""
}

func (x *LogMessage) GetStart() int64 {
	if x != nil {
		return x.Start
	}
	return 0
}

func (x *LogMessage) GetNext() int64 {
	if x != nil {
		return x.Next
	}
	return 0
}

func (x *LogMessage) GetSort() LogMessage_LogType {
	if x != nil {
		return x.Sort
	}
	return LogMessage_Text
}

func (x *LogMessage) GetEntries() []*LogcatEntry {
	if x != nil {
		return x.Entries
	}
	return nil
}

// A parsed logcat entry.
type LogcatEntry struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A Unix timestamps in  milliseconds (The number of milliseconds that
	// have elapsed since January 1, 1970 (midnight UTC/GMT), not counting
	// leap seconds)
	Timestamp uint64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	// Process id.
	Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
	// Thread id.
	Tid   uint32               `protobuf:"varint,3,opt,name=tid,proto3" json:"tid,omitempty"`
	Level LogcatEntry_LogLevel `protobuf:"varint,4,opt,name=level,proto3,enum=android.emulation.control.LogcatEntry_LogLevel" json:"level,omitempty"`
	Tag   string               `protobuf:"bytes,5,opt,name=tag,proto3" json:"tag,omitempty"`
	Msg   string               `protobuf:"bytes,6,opt,name=msg,proto3" json:"msg,omitempty"`
}

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

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

func (*LogcatEntry) ProtoMessage() {}

func (x *LogcatEntry) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 LogcatEntry.ProtoReflect.Descriptor instead.
func (*LogcatEntry) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{5}
}

func (x *LogcatEntry) GetTimestamp() uint64 {
	if x != nil {
		return x.Timestamp
	}
	return 0
}

func (x *LogcatEntry) GetPid() uint32 {
	if x != nil {
		return x.Pid
	}
	return 0
}

func (x *LogcatEntry) GetTid() uint32 {
	if x != nil {
		return x.Tid
	}
	return 0
}

func (x *LogcatEntry) GetLevel() LogcatEntry_LogLevel {
	if x != nil {
		return x.Level
	}
	return LogcatEntry_UNKNOWN
}

func (x *LogcatEntry) GetTag() string {
	if x != nil {
		return x.Tag
	}
	return ""
}

func (x *LogcatEntry) GetMsg() string {
	if x != nil {
		return x.Msg
	}
	return ""
}

// Information about the hypervisor that is currently in use.
type VmConfiguration struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	HypervisorType   VmConfiguration_VmHypervisorType `protobuf:"varint,1,opt,name=hypervisorType,proto3,enum=android.emulation.control.VmConfiguration_VmHypervisorType" json:"hypervisorType,omitempty"`
	NumberOfCpuCores int32                            `protobuf:"varint,2,opt,name=numberOfCpuCores,proto3" json:"numberOfCpuCores,omitempty"`
	RamSizeBytes     int64                            `protobuf:"varint,3,opt,name=ramSizeBytes,proto3" json:"ramSizeBytes,omitempty"`
}

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

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

func (*VmConfiguration) ProtoMessage() {}

func (x *VmConfiguration) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 VmConfiguration.ProtoReflect.Descriptor instead.
func (*VmConfiguration) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{6}
}

func (x *VmConfiguration) GetHypervisorType() VmConfiguration_VmHypervisorType {
	if x != nil {
		return x.HypervisorType
	}
	return VmConfiguration_UNKNOWN
}

func (x *VmConfiguration) GetNumberOfCpuCores() int32 {
	if x != nil {
		return x.NumberOfCpuCores
	}
	return 0
}

func (x *VmConfiguration) GetRamSizeBytes() int64 {
	if x != nil {
		return x.RamSizeBytes
	}
	return 0
}

// Representation of a clipped data object on the clipboard.
type ClipData struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// UTF-8 Encoded text.
	Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
}

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

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

func (*ClipData) ProtoMessage() {}

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

func (x *ClipData) GetText() string {
	if x != nil {
		return x.Text
	}
	return ""
}

// The Touch interface represents a single contact point on a
// touch-sensitive device. The contact point is commonly a finger or stylus
// and the device may be a touchscreen or trackpad.
type Touch struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The horizontal coordinate. This is the physical location on the
	// screen For example 0 indicates the leftmost coordinate.
	X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"`
	// The vertical coordinate. This is the physical location on the screen
	// For example 0 indicates the top left coordinate.
	Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"`
	// The identifier is an arbitrary non-negative integer that is used to
	// identify and track each tool independently when multiple tools are
	// active. For example, when multiple fingers are touching the device,
	// each finger should be assigned a distinct tracking id that is used as
	// long as the finger remains in contact. Tracking ids may be reused
	// when their associated tools move out of range.
	//
	// The emulator currently supports up to 10 concurrent touch events. The
	// identifier can be any uninque value and will be mapped to the next
	// available internal identifier.
	Identifier int32 `protobuf:"varint,3,opt,name=identifier,proto3" json:"identifier,omitempty"`
	// Reports the physical pressure applied to the tip of the tool or the
	// signal strength of the touch contact.
	//
	// The values reported must be non-zero when the tool is touching the
	// device and zero otherwise to indicate that the touch event is
	// completed.
	//
	// Make sure to deliver a pressure of 0 for the given identifier when
	// the touch event is completed, otherwise the touch identifier will not
	// be unregistered!
	Pressure int32 `protobuf:"varint,4,opt,name=pressure,proto3" json:"pressure,omitempty"`
	// Optionally reports the cross-sectional area of the touch contact, or
	// the length of the longer dimension of the touch contact.
	TouchMajor int32 `protobuf:"varint,5,opt,name=touch_major,json=touchMajor,proto3" json:"touch_major,omitempty"`
	// Optionally reports the length of the shorter dimension of the touch
	// contact. This axis will be ignored if touch_major is reporting an
	// area measurement greater than 0.
	TouchMinor int32                 `protobuf:"varint,6,opt,name=touch_minor,json=touchMinor,proto3" json:"touch_minor,omitempty"`
	Expiration Touch_EventExpiration `protobuf:"varint,7,opt,name=expiration,proto3,enum=android.emulation.control.Touch_EventExpiration" json:"expiration,omitempty"`
}

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

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

func (*Touch) ProtoMessage() {}

func (x *Touch) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 Touch.ProtoReflect.Descriptor instead.
func (*Touch) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{8}
}

func (x *Touch) GetX() int32 {
	if x != nil {
		return x.X
	}
	return 0
}

func (x *Touch) GetY() int32 {
	if x != nil {
		return x.Y
	}
	return 0
}

func (x *Touch) GetIdentifier() int32 {
	if x != nil {
		return x.Identifier
	}
	return 0
}

func (x *Touch) GetPressure() int32 {
	if x != nil {
		return x.Pressure
	}
	return 0
}

func (x *Touch) GetTouchMajor() int32 {
	if x != nil {
		return x.TouchMajor
	}
	return 0
}

func (x *Touch) GetTouchMinor() int32 {
	if x != nil {
		return x.TouchMinor
	}
	return 0
}

func (x *Touch) GetExpiration() Touch_EventExpiration {
	if x != nil {
		return x.Expiration
	}
	return Touch_EVENT_EXPIRATION_UNSPECIFIED
}

// A TouchEvent contains a list of Touch objects that are in contact with
// the touch surface.
//
// Touch events are delivered in sequence as specified in the touchList.
//
// TouchEvents are delivered to the emulated devices using ["Protocol
// B"](https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt)
type TouchEvent struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The list of Touch objects, note that these do not need to be unique
	Touches []*Touch `protobuf:"bytes,1,rep,name=touches,proto3" json:"touches,omitempty"`
	// The display device where the touch event occurred.
	// Omitting or using the value 0 indicates the main display.
	//
	// Touch events cannot be send to displays other than 0, due to
	// https://issuetracker.google.com/issues/150699691
	Display int32 `protobuf:"varint,2,opt,name=display,proto3" json:"display,omitempty"`
}

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

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

func (*TouchEvent) ProtoMessage() {}

func (x *TouchEvent) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 TouchEvent.ProtoReflect.Descriptor instead.
func (*TouchEvent) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{9}
}

func (x *TouchEvent) GetTouches() []*Touch {
	if x != nil {
		return x.Touches
	}
	return nil
}

func (x *TouchEvent) GetDisplay() int32 {
	if x != nil {
		return x.Display
	}
	return 0
}

// The MouseEvent interface represents events that occur due to the user
// interacting with a pointing device (such as a mouse).
type MouseEvent struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The horizontal coordinate. This is the physical location on the
	// screen For example 0 indicates the leftmost coordinate.
	X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"`
	// The vertical coordinate. This is the physical location on the screen
	// For example 0 indicates the top left coordinate.
	Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"`
	// Indicates which buttons are pressed.
	// 0: No button was pressed
	// 1: Primary button (left)
	// 2: Secondary button (right)
	Buttons int32 `protobuf:"varint,3,opt,name=buttons,proto3" json:"buttons,omitempty"`
	// The display device where the mouse event occurred.
	// Omitting or using the value 0 indicates the main display.
	Display int32 `protobuf:"varint,4,opt,name=display,proto3" json:"display,omitempty"`
}

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

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

func (*MouseEvent) ProtoMessage() {}

func (x *MouseEvent) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 MouseEvent.ProtoReflect.Descriptor instead.
func (*MouseEvent) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{10}
}

func (x *MouseEvent) GetX() int32 {
	if x != nil {
		return x.X
	}
	return 0
}

func (x *MouseEvent) GetY() int32 {
	if x != nil {
		return x.Y
	}
	return 0
}

func (x *MouseEvent) GetButtons() int32 {
	if x != nil {
		return x.Buttons
	}
	return 0
}

func (x *MouseEvent) GetDisplay() int32 {
	if x != nil {
		return x.Display
	}
	return 0
}

// KeyboardEvent objects describe a user interaction with the keyboard; each
// event describes a single interaction between the user and a key (or
// combination of a key with modifier keys) on the keyboard.
// This follows the pattern as set by
// (javascript)[https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent]
//
// Note: that only keyCode, key, or text can be set and that the semantics
// will slightly vary.
type KeyboardEvent struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Type of keycode contained in the keyCode field.
	CodeType KeyboardEvent_KeyCodeType `protobuf:"varint,1,opt,name=codeType,proto3,enum=android.emulation.control.KeyboardEvent_KeyCodeType" json:"codeType,omitempty"`
	// The type of keyboard event that should be sent to the emulator
	EventType KeyboardEvent_KeyEventType `protobuf:"varint,2,opt,name=eventType,proto3,enum=android.emulation.control.KeyboardEvent_KeyEventType" json:"eventType,omitempty"`
	// This property represents a physical key on the keyboard (as opposed
	// to the character generated by pressing the key). In other words, this
	// property is a value which isn't altered by keyboard layout or the
	// state of the modifier keys. This value will be interpreted by the
	// emulator depending on the KeyCodeType. The incoming key code will be
	// translated to an evdev code type and send to the emulator.
	// The values in key and text will be ignored.
	KeyCode int32 `protobuf:"varint,3,opt,name=keyCode,proto3" json:"keyCode,omitempty"`
	// The value of the key pressed by the user, taking into consideration
	// the state of modifier keys such as Shift as well as the keyboard
	// locale and layout. This follows the w3c standard used in browsers.
	// You can find an accurate description of valid values
	// [here](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)
	//
	// Note that some keys can result in multiple evdev events that are
	// delivered to the emulator. for example the Key "A" will result in a
	// sequence:
	// ["Shift", "a"] -> [0x2a, 0x1e] whereas "a" results in ["a"] -> [0x1e].
	//
	// Not all documented keys are understood by android, and only printable
	// ASCII [32-127) characters are properly translated.
	//
	// Keep in mind that there are a set of key values that result in android
	// specific behavior
	// [see](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values#Phone_keys):
	//
	// - "AppSwitch": Behaves as the "Overview" button in android.
	// - "GoBack": The Back button.
	// - "GoHome": The Home button, which takes the user to the phone's main
	//             screen (usually an application launcher).
	// - "Power":  The Power button.
	Key string `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"`
	// Series of utf8 encoded characters to send to the emulator. An attempt
	// will be made to translate every character will an EvDev event type and
	// send to the emulator as a keypress event. The values in keyCode,
	// eventType, codeType and key will be ignored.
	//
	// Note that most printable ASCII characters (range [32-127) can be send
	// individually with the "key" param. Do not expect arbitrary UTF symbols to
	// arrive in the emulator (most will be ignored).
	//
	// Note that it is possible to overrun the keyboard buffer by slamming this
	// endpoint with large quantities of text (>1kb). The clipboard api is better
	// suited for transferring large quantities of text.
	Text string `protobuf:"bytes,5,opt,name=text,proto3" json:"text,omitempty"`
}

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

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

func (*KeyboardEvent) ProtoMessage() {}

func (x *KeyboardEvent) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 KeyboardEvent.ProtoReflect.Descriptor instead.
func (*KeyboardEvent) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{11}
}

func (x *KeyboardEvent) GetCodeType() KeyboardEvent_KeyCodeType {
	if x != nil {
		return x.CodeType
	}
	return KeyboardEvent_Usb
}

func (x *KeyboardEvent) GetEventType() KeyboardEvent_KeyEventType {
	if x != nil {
		return x.EventType
	}
	return KeyboardEvent_keydown
}

func (x *KeyboardEvent) GetKeyCode() int32 {
	if x != nil {
		return x.KeyCode
	}
	return 0
}

func (x *KeyboardEvent) GetKey() string {
	if x != nil {
		return x.Key
	}
	return ""
}

func (x *KeyboardEvent) GetText() string {
	if x != nil {
		return x.Text
	}
	return ""
}

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

	// True when the fingprint is touched.
	IsTouching bool `protobuf:"varint,1,opt,name=isTouching,proto3" json:"isTouching,omitempty"`
	// The identifier of the registered fingerprint.
	TouchId int32 `protobuf:"varint,2,opt,name=touchId,proto3" json:"touchId,omitempty"`
}

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

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

func (*Fingerprint) ProtoMessage() {}

func (x *Fingerprint) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 Fingerprint.ProtoReflect.Descriptor instead.
func (*Fingerprint) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{12}
}

func (x *Fingerprint) GetIsTouching() bool {
	if x != nil {
		return x.IsTouching
	}
	return false
}

func (x *Fingerprint) GetTouchId() int32 {
	if x != nil {
		return x.TouchId
	}
	return 0
}

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

	// Setting this to false will disable auto updating  from the LocationUI,
	// otherwise the location UI will override the location at a frequency of 1hz.
	//
	// - This is unused if the emulator is launched with -no-window, or when he
	//   location ui is disabled.
	// - This will BREAK the location ui experience if it is set to false. For
	//    example routing will no longer function.
	PassiveUpdate bool `protobuf:"varint,1,opt,name=passiveUpdate,proto3" json:"passiveUpdate,omitempty"`
	// The latitude, in degrees.
	Latitude float64 `protobuf:"fixed64,2,opt,name=latitude,proto3" json:"latitude,omitempty"`
	// The longitude, in degrees.
	Longitude float64 `protobuf:"fixed64,3,opt,name=longitude,proto3" json:"longitude,omitempty"`
	// The speed if it is available, in meters/second over ground
	Speed float64 `protobuf:"fixed64,4,opt,name=speed,proto3" json:"speed,omitempty"`
	// gets the horizontal direction of travel of this device, and is not
	// related to the device orientation. It is guaranteed to be in the
	// range [0.0, 360.0] if the device has a bearing. 0=North, 90=East,
	// 180=South, etc..
	Bearing float64 `protobuf:"fixed64,5,opt,name=bearing,proto3" json:"bearing,omitempty"`
	// The altitude if available, in meters above the WGS 84 reference
	// ellipsoid.
	Altitude float64 `protobuf:"fixed64,6,opt,name=altitude,proto3" json:"altitude,omitempty"`
	// The number of satellites used to derive the fix
	Satellites int32 `protobuf:"varint,7,opt,name=satellites,proto3" json:"satellites,omitempty"`
}

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

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

func (*GpsState) ProtoMessage() {}

func (x *GpsState) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 GpsState.ProtoReflect.Descriptor instead.
func (*GpsState) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{13}
}

func (x *GpsState) GetPassiveUpdate() bool {
	if x != nil {
		return x.PassiveUpdate
	}
	return false
}

func (x *GpsState) GetLatitude() float64 {
	if x != nil {
		return x.Latitude
	}
	return 0
}

func (x *GpsState) GetLongitude() float64 {
	if x != nil {
		return x.Longitude
	}
	return 0
}

func (x *GpsState) GetSpeed() float64 {
	if x != nil {
		return x.Speed
	}
	return 0
}

func (x *GpsState) GetBearing() float64 {
	if x != nil {
		return x.Bearing
	}
	return 0
}

func (x *GpsState) GetAltitude() float64 {
	if x != nil {
		return x.Altitude
	}
	return 0
}

func (x *GpsState) GetSatellites() int32 {
	if x != nil {
		return x.Satellites
	}
	return 0
}

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

	HasBattery  bool                        `protobuf:"varint,1,opt,name=hasBattery,proto3" json:"hasBattery,omitempty"`
	IsPresent   bool                        `protobuf:"varint,2,opt,name=isPresent,proto3" json:"isPresent,omitempty"`
	Charger     BatteryState_BatteryCharger `protobuf:"varint,3,opt,name=charger,proto3,enum=android.emulation.control.BatteryState_BatteryCharger" json:"charger,omitempty"`
	ChargeLevel int32                       `protobuf:"varint,4,opt,name=chargeLevel,proto3" json:"chargeLevel,omitempty"`
	Health      BatteryState_BatteryHealth  `protobuf:"varint,5,opt,name=health,proto3,enum=android.emulation.control.BatteryState_BatteryHealth" json:"health,omitempty"`
	Status      BatteryState_BatteryStatus  `protobuf:"varint,6,opt,name=status,proto3,enum=android.emulation.control.BatteryState_BatteryStatus" json:"status,omitempty"`
}

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

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

func (*BatteryState) ProtoMessage() {}

func (x *BatteryState) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 BatteryState.ProtoReflect.Descriptor instead.
func (*BatteryState) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{14}
}

func (x *BatteryState) GetHasBattery() bool {
	if x != nil {
		return x.HasBattery
	}
	return false
}

func (x *BatteryState) GetIsPresent() bool {
	if x != nil {
		return x.IsPresent
	}
	return false
}

func (x *BatteryState) GetCharger() BatteryState_BatteryCharger {
	if x != nil {
		return x.Charger
	}
	return BatteryState_NONE
}

func (x *BatteryState) GetChargeLevel() int32 {
	if x != nil {
		return x.ChargeLevel
	}
	return 0
}

func (x *BatteryState) GetHealth() BatteryState_BatteryHealth {
	if x != nil {
		return x.Health
	}
	return BatteryState_GOOD
}

func (x *BatteryState) GetStatus() BatteryState_BatteryStatus {
	if x != nil {
		return x.Status
	}
	return BatteryState_UNKNOWN
}

// An ImageTransport allows for specifying a side channel for
// delivering image frames versus using the standard bytes array that is
// returned with the gRPC request.
type ImageTransport struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The desired transport channel used for delivering image frames. Only
	// relevant when streaming screenshots.
	Channel ImageTransport_TransportChannel `protobuf:"varint,1,opt,name=channel,proto3,enum=android.emulation.control.ImageTransport_TransportChannel" json:"channel,omitempty"`
	// Handle used for writing image frames if transport is mmap. The client sets
	// and owns this handle. It can be either a shm region, or a mmap. A mmap
	// should be a url that starts with `file:///`
	// Note: the mmap can result in tearing.
	Handle string `protobuf:"bytes,2,opt,name=handle,proto3" json:"handle,omitempty"`
}

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

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

func (*ImageTransport) ProtoMessage() {}

func (x *ImageTransport) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 ImageTransport.ProtoReflect.Descriptor instead.
func (*ImageTransport) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{15}
}

func (x *ImageTransport) GetChannel() ImageTransport_TransportChannel {
	if x != nil {
		return x.Channel
	}
	return ImageTransport_TRANSPORT_CHANNEL_UNSPECIFIED
}

func (x *ImageTransport) GetHandle() string {
	if x != nil {
		return x.Handle
	}
	return ""
}

// The aspect ratio (width/height) will be different from the one
// where the device is unfolded.
type FoldedDisplay struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Width  uint32 `protobuf:"varint,1,opt,name=width,proto3" json:"width,omitempty"`
	Height uint32 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"`
	// It is possible for the screen to be folded in different ways depending
	// on which surface is shown to the user. So xOffset and yOffset indicate
	// the top left corner of the folded screen within the original unfolded screen.
	XOffset uint32 `protobuf:"varint,3,opt,name=xOffset,proto3" json:"xOffset,omitempty"`
	YOffset uint32 `protobuf:"varint,4,opt,name=yOffset,proto3" json:"yOffset,omitempty"`
}

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

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

func (*FoldedDisplay) ProtoMessage() {}

func (x *FoldedDisplay) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 FoldedDisplay.ProtoReflect.Descriptor instead.
func (*FoldedDisplay) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{16}
}

func (x *FoldedDisplay) GetWidth() uint32 {
	if x != nil {
		return x.Width
	}
	return 0
}

func (x *FoldedDisplay) GetHeight() uint32 {
	if x != nil {
		return x.Height
	}
	return 0
}

func (x *FoldedDisplay) GetXOffset() uint32 {
	if x != nil {
		return x.XOffset
	}
	return 0
}

func (x *FoldedDisplay) GetYOffset() uint32 {
	if x != nil {
		return x.YOffset
	}
	return 0
}

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

	// The (desired) format of the resulting bytes.
	Format ImageFormat_ImgFormat `protobuf:"varint,1,opt,name=format,proto3,enum=android.emulation.control.ImageFormat_ImgFormat" json:"format,omitempty"`
	// [Output Only] The rotation of the image. The image will be rotated
	// based upon the coarse grained orientation of the device.
	Rotation *Rotation `protobuf:"bytes,2,opt,name=rotation,proto3" json:"rotation,omitempty"`
	// The (desired) width of the image. When passed as input
	// the image will be scaled to match the given
	// width, while maintaining the aspect ratio of the device.
	// The returned image will never exceed the given width, but can be less.
	// Omitting this value (or passing in 0) will result in no scaling,
	// and the width of the actual device will be used.
	Width uint32 `protobuf:"varint,3,opt,name=width,proto3" json:"width,omitempty"`
	// The (desired) height of the image.  When passed as input
	// the image will be scaled to match the given
	// height, while maintaining the aspect ratio of the device.
	// The returned image will never exceed the given height, but can be less.
	// Omitting this value (or passing in 0) will result in no scaling,
	// and the height of the actual device will be used.
	Height uint32 `protobuf:"varint,4,opt,name=height,proto3" json:"height,omitempty"`
	// The (desired) display id of the device. Setting this to 0 (or omitting)
	// indicates the main display.
	Display uint32 `protobuf:"varint,5,opt,name=display,proto3" json:"display,omitempty"`
	// Set this if you wish to use a different transport channel to deliver image
	// frames.
	Transport *ImageTransport `protobuf:"bytes,6,opt,name=transport,proto3" json:"transport,omitempty"`
	// [Output Only] Display configuration when screen is folded. The value is the
	// original configuration before scaling.
	FoldedDisplay *FoldedDisplay `protobuf:"bytes,7,opt,name=foldedDisplay,proto3" json:"foldedDisplay,omitempty"`
}

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

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

func (*ImageFormat) ProtoMessage() {}

func (x *ImageFormat) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 ImageFormat.ProtoReflect.Descriptor instead.
func (*ImageFormat) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{17}
}

func (x *ImageFormat) GetFormat() ImageFormat_ImgFormat {
	if x != nil {
		return x.Format
	}
	return ImageFormat_PNG
}

func (x *ImageFormat) GetRotation() *Rotation {
	if x != nil {
		return x.Rotation
	}
	return nil
}

func (x *ImageFormat) GetWidth() uint32 {
	if x != nil {
		return x.Width
	}
	return 0
}

func (x *ImageFormat) GetHeight() uint32 {
	if x != nil {
		return x.Height
	}
	return 0
}

func (x *ImageFormat) GetDisplay() uint32 {
	if x != nil {
		return x.Display
	}
	return 0
}

func (x *ImageFormat) GetTransport() *ImageTransport {
	if x != nil {
		return x.Transport
	}
	return nil
}

func (x *ImageFormat) GetFoldedDisplay() *FoldedDisplay {
	if x != nil {
		return x.FoldedDisplay
	}
	return nil
}

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

	Format *ImageFormat `protobuf:"bytes,1,opt,name=format,proto3" json:"format,omitempty"`
	// Deprecated: Do not use.
	Width uint32 `protobuf:"varint,2,opt,name=width,proto3" json:"width,omitempty"` // width is contained in format.
	// Deprecated: Do not use.
	Height uint32 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` // height is contained in format.
	// The organization of the pixels in the image buffer is from left to
	// right and bottom up. This will be empty if an alternative image transport
	// is requested in the image format. In that case the side channel should
	// be used to obtain the image data.
	Image []byte `protobuf:"bytes,4,opt,name=image,proto3" json:"image,omitempty"`
	// [Output Only] Monotonically increasing sequence number in a stream of
	// screenshots. The first screenshot will have a sequence of 0. A single
	// screenshot will always have a sequence number of 0. The sequence is not
	// necessarily contiguous, and can be used to detect how many frames were
	// dropped. An example sequence could be: [0, 3, 5, 7, 9, 11].
	Seq uint32 `protobuf:"varint,5,opt,name=seq,proto3" json:"seq,omitempty"`
	// [Output Only] Unix timestamp in microseconds when the emulator estimates
	// the frame was generated. The timestamp is before the actual frame is
	// copied and transformed. This can be used to calculate variance between
	// frame production time, and frame depiction time.
	TimestampUs uint64 `protobuf:"varint,6,opt,name=timestampUs,proto3" json:"timestampUs,omitempty"`
}

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

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

func (*Image) ProtoMessage() {}

func (x *Image) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 Image.ProtoReflect.Descriptor instead.
func (*Image) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{18}
}

func (x *Image) GetFormat() *ImageFormat {
	if x != nil {
		return x.Format
	}
	return nil
}

// Deprecated: Do not use.
func (x *Image) GetWidth() uint32 {
	if x != nil {
		return x.Width
	}
	return 0
}

// Deprecated: Do not use.
func (x *Image) GetHeight() uint32 {
	if x != nil {
		return x.Height
	}
	return 0
}

func (x *Image) GetImage() []byte {
	if x != nil {
		return x.Image
	}
	return nil
}

func (x *Image) GetSeq() uint32 {
	if x != nil {
		return x.Seq
	}
	return 0
}

func (x *Image) GetTimestampUs() uint64 {
	if x != nil {
		return x.TimestampUs
	}
	return 0
}

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

	// The rotation of the device, derived from the sensor state
	// of the emulator. The derivation reflects how android observes
	// the rotation state.
	Rotation Rotation_SkinRotation `protobuf:"varint,1,opt,name=rotation,proto3,enum=android.emulation.control.Rotation_SkinRotation" json:"rotation,omitempty"`
	// Specifies the angle of rotation, in degrees [-180, 180]
	XAxis float64 `protobuf:"fixed64,2,opt,name=xAxis,proto3" json:"xAxis,omitempty"`
	YAxis float64 `protobuf:"fixed64,3,opt,name=yAxis,proto3" json:"yAxis,omitempty"`
	ZAxis float64 `protobuf:"fixed64,4,opt,name=zAxis,proto3" json:"zAxis,omitempty"`
}

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

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

func (*Rotation) ProtoMessage() {}

func (x *Rotation) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 Rotation.ProtoReflect.Descriptor instead.
func (*Rotation) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{19}
}

func (x *Rotation) GetRotation() Rotation_SkinRotation {
	if x != nil {
		return x.Rotation
	}
	return Rotation_PORTRAIT
}

func (x *Rotation) GetXAxis() float64 {
	if x != nil {
		return x.XAxis
	}
	return 0
}

func (x *Rotation) GetYAxis() float64 {
	if x != nil {
		return x.YAxis
	}
	return 0
}

func (x *Rotation) GetZAxis() float64 {
	if x != nil {
		return x.ZAxis
	}
	return 0
}

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

	Operation PhoneCall_Operation `protobuf:"varint,1,opt,name=operation,proto3,enum=android.emulation.control.PhoneCall_Operation" json:"operation,omitempty"`
	Number    string              `protobuf:"bytes,2,opt,name=number,proto3" json:"number,omitempty"`
}

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

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

func (*PhoneCall) ProtoMessage() {}

func (x *PhoneCall) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 PhoneCall.ProtoReflect.Descriptor instead.
func (*PhoneCall) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{20}
}

func (x *PhoneCall) GetOperation() PhoneCall_Operation {
	if x != nil {
		return x.Operation
	}
	return PhoneCall_InitCall
}

func (x *PhoneCall) GetNumber() string {
	if x != nil {
		return x.Number
	}
	return ""
}

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

	Response PhoneResponse_Response `protobuf:"varint,1,opt,name=response,proto3,enum=android.emulation.control.PhoneResponse_Response" json:"response,omitempty"`
}

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

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

func (*PhoneResponse) ProtoMessage() {}

func (x *PhoneResponse) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 PhoneResponse.ProtoReflect.Descriptor instead.
func (*PhoneResponse) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{21}
}

func (x *PhoneResponse) GetResponse() PhoneResponse_Response {
	if x != nil {
		return x.Response
	}
	return PhoneResponse_OK
}

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

	Key   string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}

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

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

func (*Entry) ProtoMessage() {}

func (x *Entry) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 Entry.ProtoReflect.Descriptor instead.
func (*Entry) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{22}
}

func (x *Entry) GetKey() string {
	if x != nil {
		return x.Key
	}
	return ""
}

func (x *Entry) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

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

	Entry []*Entry `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"`
}

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

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

func (*EntryList) ProtoMessage() {}

func (x *EntryList) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 EntryList.ProtoReflect.Descriptor instead.
func (*EntryList) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{23}
}

func (x *EntryList) GetEntry() []*Entry {
	if x != nil {
		return x.Entry
	}
	return nil
}

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

	// The emulator version string.
	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
	// The time the emulator has been active in .ms
	Uptime uint64 `protobuf:"varint,2,opt,name=uptime,proto3" json:"uptime,omitempty"`
	// True if the device has completed booting.
	// For P and later this information will accurate,
	// for older images we rely on adb.
	Booted bool `protobuf:"varint,3,opt,name=booted,proto3" json:"booted,omitempty"`
	// The current vm configuration
	VmConfig *VmConfiguration `protobuf:"bytes,4,opt,name=vmConfig,proto3" json:"vmConfig,omitempty"`
	// The hardware configuration of the running emulator as
	// key valure pairs.
	HardwareConfig *EntryList `protobuf:"bytes,5,opt,name=hardwareConfig,proto3" json:"hardwareConfig,omitempty"`
}

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

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

func (*EmulatorStatus) ProtoMessage() {}

func (x *EmulatorStatus) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 EmulatorStatus.ProtoReflect.Descriptor instead.
func (*EmulatorStatus) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{24}
}

func (x *EmulatorStatus) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *EmulatorStatus) GetUptime() uint64 {
	if x != nil {
		return x.Uptime
	}
	return 0
}

func (x *EmulatorStatus) GetBooted() bool {
	if x != nil {
		return x.Booted
	}
	return false
}

func (x *EmulatorStatus) GetVmConfig() *VmConfiguration {
	if x != nil {
		return x.VmConfig
	}
	return nil
}

func (x *EmulatorStatus) GetHardwareConfig() *EntryList {
	if x != nil {
		return x.HardwareConfig
	}
	return nil
}

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

	// Sampling rate to use, defaulting to 44100 if this is not set.
	// Note, that android devices typically will not use a sampling
	// rate higher than 48kHz. See https://developer.android.com/ndk/guides/audio.
	SamplingRate uint64                   `protobuf:"varint,1,opt,name=samplingRate,proto3" json:"samplingRate,omitempty"`
	Channels     AudioFormat_Channels     `protobuf:"varint,2,opt,name=channels,proto3,enum=android.emulation.control.AudioFormat_Channels" json:"channels,omitempty"`
	Format       AudioFormat_SampleFormat `protobuf:"varint,3,opt,name=format,proto3,enum=android.emulation.control.AudioFormat_SampleFormat" json:"format,omitempty"`
}

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

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

func (*AudioFormat) ProtoMessage() {}

func (x *AudioFormat) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 AudioFormat.ProtoReflect.Descriptor instead.
func (*AudioFormat) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{25}
}

func (x *AudioFormat) GetSamplingRate() uint64 {
	if x != nil {
		return x.SamplingRate
	}
	return 0
}

func (x *AudioFormat) GetChannels() AudioFormat_Channels {
	if x != nil {
		return x.Channels
	}
	return AudioFormat_Mono
}

func (x *AudioFormat) GetFormat() AudioFormat_SampleFormat {
	if x != nil {
		return x.Format
	}
	return AudioFormat_AUD_FMT_U8
}

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

	Format *AudioFormat `protobuf:"bytes,1,opt,name=format,proto3" json:"format,omitempty"`
	// Unix epoch in us when this frame was captured.
	Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	// Contains a sample in the given audio format.
	Audio []byte `protobuf:"bytes,3,opt,name=audio,proto3" json:"audio,omitempty"`
}

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

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

func (*AudioPacket) ProtoMessage() {}

func (x *AudioPacket) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 AudioPacket.ProtoReflect.Descriptor instead.
func (*AudioPacket) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{26}
}

func (x *AudioPacket) GetFormat() *AudioFormat {
	if x != nil {
		return x.Format
	}
	return nil
}

func (x *AudioPacket) GetTimestamp() uint64 {
	if x != nil {
		return x.Timestamp
	}
	return 0
}

func (x *AudioPacket) GetAudio() []byte {
	if x != nil {
		return x.Audio
	}
	return nil
}

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

	// The source address where this message came from.
	//
	// The address should be a valid GSM-formatted address as specified by
	// 3GPP 23.040 Sec 9.1.2.5.
	//
	// For example: +3106225412 or (650) 555-1221
	SrcAddress string `protobuf:"bytes,1,opt,name=srcAddress,proto3" json:"srcAddress,omitempty"`
	// A utf8 encoded text message that should be delivered.
	Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"`
}

func (x *SmsMessage) Reset() {
	*x = SmsMessage{}
	if protoimpl.UnsafeEnabled {
		mi := &file_emulator_controller_proto_msgTypes[27]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SmsMessage) ProtoMessage() {}

func (x *SmsMessage) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_proto_msgTypes[27]
	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 SmsMessage.ProtoReflect.Descriptor instead.
func (*SmsMessage) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{27}
}

func (x *SmsMessage) GetSrcAddress() string {
	if x != nil {
		return x.SrcAddress
	}
	return ""
}

func (x *SmsMessage) GetText() string {
	if x != nil {
		return x.Text
	}
	return ""
}

// A DisplayConfiguration describes a primary or secondary
// display available to the emulator. The screen aspect ratio
// cannot be longer (or wider) than 21:9 (or 9:21). Screen sizes
// larger than 4k will be rejected.
//
// Common configurations (w x h) are:
// - 480p  (480x720)   142 dpi
// - 720p  (720x1280)  213 dpi
// - 1080p (1080x1920) 320 dpi
// - 4K  (2160x3840) 320 dpi
// - 4K  (2160x3840) 640 dpi (upscaled)
//
// The behavior of the virtual display depends on the flags that are provided to
// this method. By default, virtual displays are created to be private,
// non-presentation and unsecure.
type DisplayConfiguration struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The width of the display, restricted to:
	// 320 * (dpi / 160) <= width
	Width uint32 `protobuf:"varint,1,opt,name=width,proto3" json:"width,omitempty"`
	// The heigh of the display, restricted to:
	// * 320 * (dpi / 160) <= height
	Height uint32 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"`
	// The pixel density (dpi).
	// See https://developer.android.com/training/multiscreen/screendensities
	// for details. This value should be in the range [120, ..., 640]
	Dpi uint32 `protobuf:"varint,3,opt,name=dpi,proto3" json:"dpi,omitempty"`
	// A combination of virtual display flags. These flags can be constructed
	// by combining the DisplayFlags enum described above.
	//
	// The behavior of the virtual display depends on the flags. By default
	// virtual displays are created to be private, non-presentation and
	// unsecure.
	Flags uint32 `protobuf:"varint,4,opt,name=flags,proto3" json:"flags,omitempty"`
	// The id of the display.
	// The primary (default) display has the display ID of 0.
	// A secondary display has a display ID not 0.
	//
	// The id can be used to get or stream a screenshot.
	Display uint32 `protobuf:"varint,5,opt,name=display,proto3" json:"display,omitempty"`
}

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

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

func (*DisplayConfiguration) ProtoMessage() {}

func (x *DisplayConfiguration) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 DisplayConfiguration.ProtoReflect.Descriptor instead.
func (*DisplayConfiguration) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{28}
}

func (x *DisplayConfiguration) GetWidth() uint32 {
	if x != nil {
		return x.Width
	}
	return 0
}

func (x *DisplayConfiguration) GetHeight() uint32 {
	if x != nil {
		return x.Height
	}
	return 0
}

func (x *DisplayConfiguration) GetDpi() uint32 {
	if x != nil {
		return x.Dpi
	}
	return 0
}

func (x *DisplayConfiguration) GetFlags() uint32 {
	if x != nil {
		return x.Flags
	}
	return 0
}

func (x *DisplayConfiguration) GetDisplay() uint32 {
	if x != nil {
		return x.Display
	}
	return 0
}

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

	Displays []*DisplayConfiguration `protobuf:"bytes,1,rep,name=displays,proto3" json:"displays,omitempty"`
}

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

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

func (*DisplayConfigurations) ProtoMessage() {}

func (x *DisplayConfigurations) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 DisplayConfigurations.ProtoReflect.Descriptor instead.
func (*DisplayConfigurations) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{29}
}

func (x *DisplayConfigurations) GetDisplays() []*DisplayConfiguration {
	if x != nil {
		return x.Displays
	}
	return nil
}

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

	Event Notification_EventType `protobuf:"varint,1,opt,name=event,proto3,enum=android.emulation.control.Notification_EventType" json:"event,omitempty"`
}

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

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

func (*Notification) ProtoMessage() {}

func (x *Notification) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 Notification.ProtoReflect.Descriptor instead.
func (*Notification) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{30}
}

func (x *Notification) GetEvent() Notification_EventType {
	if x != nil {
		return x.Event
	}
	return Notification_VIRTUAL_SCENE_CAMERA_INACTIVE
}

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

	X float32 `protobuf:"fixed32,1,opt,name=x,proto3" json:"x,omitempty"` // x axis is horizontal and orthogonal to the view direction.
	Y float32 `protobuf:"fixed32,2,opt,name=y,proto3" json:"y,omitempty"` // y axis points up and is perpendicular to the floor.
	Z float32 `protobuf:"fixed32,3,opt,name=z,proto3" json:"z,omitempty"` // z axis is the view direction and is set to 0.0 in
}

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

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

func (*RotationRadian) ProtoMessage() {}

func (x *RotationRadian) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 RotationRadian.ProtoReflect.Descriptor instead.
func (*RotationRadian) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{31}
}

func (x *RotationRadian) GetX() float32 {
	if x != nil {
		return x.X
	}
	return 0
}

func (x *RotationRadian) GetY() float32 {
	if x != nil {
		return x.Y
	}
	return 0
}

func (x *RotationRadian) GetZ() float32 {
	if x != nil {
		return x.Z
	}
	return 0
}

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

	X float32 `protobuf:"fixed32,1,opt,name=x,proto3" json:"x,omitempty"` // x axis is horizontal and orthogonal to the view direction.
	Y float32 `protobuf:"fixed32,2,opt,name=y,proto3" json:"y,omitempty"` // y axis points up and is perpendicular to the floor.
	Z float32 `protobuf:"fixed32,3,opt,name=z,proto3" json:"z,omitempty"` // z axis is the view direction
}

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

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

func (*Velocity) ProtoMessage() {}

func (x *Velocity) ProtoReflect() protoreflect.Message {
	mi := &file_emulator_controller_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 Velocity.ProtoReflect.Descriptor instead.
func (*Velocity) Descriptor() ([]byte, []int) {
	return file_emulator_controller_proto_rawDescGZIP(), []int{32}
}

func (x *Velocity) GetX() float32 {
	if x != nil {
		return x.X
	}
	return 0
}

func (x *Velocity) GetY() float32 {
	if x != nil {
		return x.Y
	}
	return 0
}

func (x *Velocity) GetZ() float32 {
	if x != nil {
		return x.Z
	}
	return 0
}

var File_emulator_controller_proto protoreflect.FileDescriptor

var file_emulator_controller_proto_rawDesc = []byte{
	0x0a, 0x19, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72,
	0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x22, 0xde, 0x01, 0x0a, 0x0a, 0x56, 0x6d, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61,
	0x74, 0x65, 0x12, 0x44, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x2e, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x6d,
	0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74,
	0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x08, 0x52, 0x75, 0x6e,
	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
	0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12,
	0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x56, 0x4d, 0x10, 0x02, 0x12,
	0x0a, 0x0a, 0x06, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x53,
	0x41, 0x56, 0x45, 0x5f, 0x56, 0x4d, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x55, 0x54,
	0x44, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e,
	0x41, 0x54, 0x45, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0x09,
	0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52,
	0x4f, 0x52, 0x10, 0x0a, 0x22, 0x28, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
	0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
	0x20, 0x03, 0x28, 0x02, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xda,
	0x04, 0x0a, 0x12, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c,
	0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e,
	0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
	0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56,
	0x61, 0x6c, 0x75, 0x65, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x54, 0x79, 0x70,
	0x65, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x06, 0x73, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f,
	0x64, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06,
	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e,
	0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
	0x6c, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x55, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65,
	0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x53,
	0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0x01, 0x12, 0x15, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0xfe, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x14, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e,
	0x4f, 0x57, 0x4e, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x22, 0x8a,
	0x02, 0x0a, 0x0c, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12,
	0x0c, 0x0a, 0x08, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a,
	0x08, 0x52, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4d,
	0x41, 0x47, 0x4e, 0x45, 0x54, 0x49, 0x43, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x02, 0x12,
	0x0f, 0x0a, 0x0b, 0x54, 0x45, 0x4d, 0x50, 0x45, 0x52, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x03,
	0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x58, 0x49, 0x4d, 0x49, 0x54, 0x59, 0x10, 0x04, 0x12,
	0x09, 0x0a, 0x05, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52,
	0x45, 0x53, 0x53, 0x55, 0x52, 0x45, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x55, 0x4d, 0x49,
	0x44, 0x49, 0x54, 0x59, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x45, 0x4c, 0x4f, 0x43, 0x49,
	0x54, 0x59, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x4d, 0x42, 0x49, 0x45, 0x4e, 0x54, 0x5f,
	0x4d, 0x4f, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x49, 0x4e, 0x47,
	0x45, 0x5f, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x30, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x49,
	0x4e, 0x47, 0x45, 0x5f, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x31, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c,
	0x48, 0x49, 0x4e, 0x47, 0x45, 0x5f, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x32, 0x10, 0x0c, 0x12, 0x0d,
	0x0a, 0x09, 0x52, 0x4f, 0x4c, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x30, 0x10, 0x0d, 0x12, 0x0d, 0x0a,
	0x09, 0x52, 0x4f, 0x4c, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x31, 0x10, 0x0e, 0x12, 0x0d, 0x0a, 0x09,
	0x52, 0x4f, 0x4c, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x32, 0x10, 0x0f, 0x22, 0x8f, 0x04, 0x0a, 0x0b,
	0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x74,
	0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x61, 0x6e,
	0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06,
	0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x44, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64,
	0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
	0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x53,
	0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x05,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6e,
	0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
	0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x55, 0x0a,
	0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x17,
	0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0xfd, 0xff, 0xff,
	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x15, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42,
	0x4c, 0x45, 0x44, 0x10, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x14,
	0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
	0xff, 0xff, 0xff, 0x01, 0x22, 0xd6, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x54,
	0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54,
	0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x59, 0x52, 0x4f, 0x53, 0x43, 0x4f,
	0x50, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x41, 0x47, 0x4e, 0x45, 0x54, 0x49, 0x43,
	0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x52, 0x49, 0x45,
	0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x45, 0x4d,
	0x50, 0x45, 0x52, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52,
	0x4f, 0x58, 0x49, 0x4d, 0x49, 0x54, 0x59, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x49, 0x47,
	0x48, 0x54, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x45, 0x53, 0x53, 0x55, 0x52, 0x45,
	0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x55, 0x4d, 0x49, 0x44, 0x49, 0x54, 0x59, 0x10, 0x08,
	0x12, 0x1f, 0x0a, 0x1b, 0x4d, 0x41, 0x47, 0x4e, 0x45, 0x54, 0x49, 0x43, 0x5f, 0x46, 0x49, 0x45,
	0x4c, 0x44, 0x5f, 0x55, 0x4e, 0x43, 0x41, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x54, 0x45, 0x44, 0x10,
	0x09, 0x12, 0x1a, 0x0a, 0x16, 0x47, 0x59, 0x52, 0x4f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x55,
	0x4e, 0x43, 0x41, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x22, 0xf8, 0x01,
	0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08,
	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72,
	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12,
	0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6e, 0x65,
	0x78, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x2d, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x67,
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52,
	0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73,
	0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64,
	0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
	0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x63, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07,
	0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x1f, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x54, 0x79,
	0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06,
	0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x10, 0x01, 0x22, 0xac, 0x02, 0x0a, 0x0b, 0x4c, 0x6f, 0x67,
	0x63, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d,
	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x69, 0x64, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x74, 0x69, 0x64, 0x12, 0x45, 0x0a, 0x05, 0x6c, 0x65,
	0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x63, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72,
	0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65,
	0x6c, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
	0x74, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x70, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65,
	0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b,
	0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x56,
	0x45, 0x52, 0x42, 0x4f, 0x53, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55,
	0x47, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x04, 0x12, 0x08, 0x0a,
	0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x52, 0x52, 0x10, 0x06,
	0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x53,
	0x49, 0x4c, 0x45, 0x4e, 0x54, 0x10, 0x08, 0x22, 0xa0, 0x02, 0x0a, 0x0f, 0x56, 0x6d, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x0e, 0x68,
	0x79, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
	0x56, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x56, 0x6d, 0x48, 0x79, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65,
	0x52, 0x0e, 0x68, 0x79, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65,
	0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x43, 0x70, 0x75, 0x43,
	0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x62,
	0x65, 0x72, 0x4f, 0x66, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c,
	0x72, 0x61, 0x6d, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x0c, 0x72, 0x61, 0x6d, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73,
	0x22, 0x58, 0x0a, 0x10, 0x56, 0x6d, 0x48, 0x79, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x6f, 0x72,
	0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
	0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4b,
	0x56, 0x4d, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x58, 0x4d, 0x10, 0x03, 0x12, 0x07,
	0x0a, 0x03, 0x48, 0x56, 0x46, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x48, 0x50, 0x58, 0x10,
	0x05, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x56, 0x4d, 0x10, 0x06, 0x22, 0x1e, 0x0a, 0x08, 0x43, 0x6c,
	0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xba, 0x02, 0x0a, 0x05, 0x54,
	0x6f, 0x75, 0x63, 0x68, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
	0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x79,
	0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
	0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
	0x74, 0x6f, 0x75, 0x63, 0x68, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x0a, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x1f, 0x0a,
	0x0b, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x50,
	0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x30, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75,
	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54,
	0x6f, 0x75, 0x63, 0x68, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x22, 0x45, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x58, 0x50,
	0x49, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x45, 0x56, 0x45, 0x52, 0x5f, 0x45,
	0x58, 0x50, 0x49, 0x52, 0x45, 0x10, 0x01, 0x22, 0x62, 0x0a, 0x0a, 0x54, 0x6f, 0x75, 0x63, 0x68,
	0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x07, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64,
	0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
	0x6f, 0x6c, 0x2e, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x52, 0x07, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x65,
	0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22, 0x5c, 0x0a, 0x0a, 0x4d,
	0x6f, 0x75, 0x73, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x01, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x12,
	0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22, 0xea, 0x02, 0x0a, 0x0d, 0x4b, 0x65,
	0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x08, 0x63,
	0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e,
	0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61,
	0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x54,
	0x79, 0x70, 0x65, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x53, 0x0a,
	0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x35, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4b, 0x65, 0x79,
	0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x45, 0x76,
	0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79,
	0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x05, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03,
	0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12,
	0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65,
	0x78, 0x74, 0x22, 0x3c, 0x0a, 0x0b, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70,
	0x65, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x73, 0x62, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x76,
	0x64, 0x65, 0x76, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x58, 0x4b, 0x42, 0x10, 0x02, 0x12, 0x07,
	0x0a, 0x03, 0x57, 0x69, 0x6e, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x61, 0x63, 0x10, 0x04,
	0x22, 0x34, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65,
	0x12, 0x0b, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x64, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x09, 0x0a,
	0x05, 0x6b, 0x65, 0x79, 0x75, 0x70, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x70,
	0x72, 0x65, 0x73, 0x73, 0x10, 0x02, 0x22, 0x47, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72,
	0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x54, 0x6f, 0x75, 0x63, 0x68,
	0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x54, 0x6f, 0x75,
	0x63, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x49, 0x64,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x49, 0x64, 0x22,
	0xd6, 0x01, 0x0a, 0x08, 0x47, 0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d,
	0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x55, 0x70, 0x64, 0x61,
	0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c,
	0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x01, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05,
	0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x70, 0x65,
	0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x01, 0x52, 0x07, 0x62, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08,
	0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08,
	0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x61, 0x74, 0x65,
	0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x61,
	0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x22, 0xc4, 0x04, 0x0a, 0x0c, 0x42, 0x61, 0x74,
	0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x61, 0x73,
	0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68,
	0x61, 0x73, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x50,
	0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73,
	0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x72, 0x67,
	0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f,
	0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e,
	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74,
	0x65, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72,
	0x52, 0x07, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61,
	0x72, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
	0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x4d, 0x0a, 0x06, 0x68,
	0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x61, 0x6e,
	0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53,
	0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x48, 0x65, 0x61, 0x6c,
	0x74, 0x68, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x4d, 0x0a, 0x06, 0x73, 0x74,
	0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x74,
	0x61, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x42, 0x61, 0x74,
	0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,
	0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x48, 0x41, 0x52, 0x47,
	0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x49, 0x53, 0x43, 0x48, 0x41, 0x52,
	0x47, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x48,
	0x41, 0x52, 0x47, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x55, 0x4c, 0x4c,
	0x10, 0x04, 0x22, 0x39, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61,
	0x72, 0x67, 0x65, 0x72, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x06,
	0x0a, 0x02, 0x41, 0x43, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x53, 0x42, 0x10, 0x02, 0x12,
	0x0c, 0x0a, 0x08, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x03, 0x22, 0x50, 0x0a,
	0x0d, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x08,
	0x0a, 0x04, 0x47, 0x4f, 0x4f, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c,
	0x45, 0x44, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x41, 0x44, 0x10, 0x02, 0x12, 0x0f,
	0x0a, 0x0b, 0x4f, 0x56, 0x45, 0x52, 0x56, 0x4f, 0x4c, 0x54, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12,
	0x0e, 0x0a, 0x0a, 0x4f, 0x56, 0x45, 0x52, 0x48, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x22,
	0xbf, 0x01, 0x0a, 0x0e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f,
	0x72, 0x74, 0x12, 0x54, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
	0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x54,
	0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52,
	0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x6e, 0x64,
	0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65,
	0x22, 0x3f, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x68, 0x61,
	0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x1d, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x52,
	0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x4e, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x4d, 0x41, 0x50, 0x10,
	0x01, 0x22, 0x71, 0x0a, 0x0d, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x64, 0x44, 0x69, 0x73, 0x70, 0x6c,
	0x61, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
	0x12, 0x18, 0x0a, 0x07, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x07, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x79, 0x4f,
	0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x79, 0x4f, 0x66,
	0x66, 0x73, 0x65, 0x74, 0x22, 0xa9, 0x03, 0x0a, 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x46, 0x6f,
	0x72, 0x6d, 0x61, 0x74, 0x12, 0x48, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65,
	0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
	0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x49, 0x6d, 0x67,
	0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3f,
	0x0a, 0x08, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x23, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x74,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
	0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05,
	0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a,
	0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
	0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73,
	0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e,
	0x73, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74,
	0x12, 0x4e, 0x0a, 0x0d, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x64, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61,
	0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69,
	0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
	0x72, 0x6f, 0x6c, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x64, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61,
	0x79, 0x52, 0x0d, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x64, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79,
	0x22, 0x2e, 0x0a, 0x09, 0x49, 0x6d, 0x67, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x07, 0x0a,
	0x03, 0x50, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x47, 0x42, 0x41, 0x38, 0x38,
	0x38, 0x38, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x47, 0x42, 0x38, 0x38, 0x38, 0x10, 0x02,
	0x22, 0xc7, 0x01, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x66, 0x6f,
	0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x46, 0x6f, 0x72, 0x6d,
	0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x05, 0x77, 0x69,
	0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x77,
	0x69, 0x64, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
	0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52,
	0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x0d, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74,
	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x73, 0x22, 0xf4, 0x01, 0x0a, 0x08, 0x52,
	0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x6f, 0x74, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53,
	0x6b, 0x69, 0x6e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x6f, 0x74,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x41, 0x78, 0x69, 0x73, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x78, 0x41, 0x78, 0x69, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x79,
	0x41, 0x78, 0x69, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x79, 0x41, 0x78, 0x69,
	0x73, 0x12, 0x14, 0x0a, 0x05, 0x7a, 0x41, 0x78, 0x69, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01,
	0x52, 0x05, 0x7a, 0x41, 0x78, 0x69, 0x73, 0x22, 0x58, 0x0a, 0x0c, 0x53, 0x6b, 0x69, 0x6e, 0x52,
	0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x4f, 0x52, 0x54, 0x52,
	0x41, 0x49, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x41, 0x4e, 0x44, 0x53, 0x43, 0x41,
	0x50, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x5f,
	0x50, 0x4f, 0x52, 0x54, 0x52, 0x41, 0x49, 0x54, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45,
	0x56, 0x45, 0x52, 0x53, 0x45, 0x5f, 0x4c, 0x41, 0x4e, 0x44, 0x53, 0x43, 0x41, 0x50, 0x45, 0x10,
	0x03, 0x22, 0x87, 0x02, 0x0a, 0x09, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x12,
	0x4c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75,
	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50,
	0x68, 0x6f, 0x6e, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a,
	0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e,
	0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x93, 0x01, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x10,
	0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x10,
	0x01, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x45,
	0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x65, 0x6a,
	0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x73, 0x79, 0x10, 0x03, 0x12, 0x12, 0x0a,
	0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x10,
	0x04, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e,
	0x48, 0x6f, 0x6c, 0x64, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x61,
	0x6c, 0x6c, 0x4f, 0x66, 0x66, 0x48, 0x6f, 0x6c, 0x64, 0x10, 0x06, 0x22, 0xc6, 0x01, 0x0a, 0x0d,
	0x50, 0x68, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a,
	0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x31, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x6f, 0x6e,
	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x66, 0x0a, 0x08,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00,
	0x12, 0x10, 0x0a, 0x0c, 0x42, 0x61, 0x64, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x10,
	0x02, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x41, 0x63, 0x74, 0x69,
	0x6f, 0x6e, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61,
	0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x4f,
	0x66, 0x66, 0x10, 0x05, 0x22, 0x2f, 0x0a, 0x05, 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, 0x22, 0x43, 0x0a, 0x09, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4c, 0x69,
	0x73, 0x74, 0x12, 0x36, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x20, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0xf0, 0x01, 0x0a, 0x0e, 0x45,
	0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a,
	0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d,
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12,
	0x16, 0x0a, 0x06, 0x62, 0x6f, 0x6f, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x06, 0x62, 0x6f, 0x6f, 0x74, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x08, 0x76, 0x6d, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x76, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
	0x4c, 0x0a, 0x0e, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69,
	0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
	0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0e, 0x68,
	0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x9e, 0x02,
	0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x22, 0x0a,
	0x0c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74,
	0x65, 0x12, 0x4b, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
	0x41, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e,
	0x6e, 0x65, 0x6c, 0x73, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x4b,
	0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33,
	0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f,
	0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x6f, 0x72,
	0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x2f, 0x0a, 0x0c, 0x53,
	0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x0e, 0x0a, 0x0a, 0x41,
	0x55, 0x44, 0x5f, 0x46, 0x4d, 0x54, 0x5f, 0x55, 0x38, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x41,
	0x55, 0x44, 0x5f, 0x46, 0x4d, 0x54, 0x5f, 0x53, 0x31, 0x36, 0x10, 0x01, 0x22, 0x20, 0x0a, 0x08,
	0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x6f, 0x6e, 0x6f,
	0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x10, 0x01, 0x22, 0x81,
	0x01, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3e,
	0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26,
	0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f,
	0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c,
	0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05,
	0x61, 0x75, 0x64, 0x69, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x61, 0x75, 0x64,
	0x69, 0x6f, 0x22, 0x40, 0x0a, 0x0a, 0x53, 0x6d, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
	0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x74, 0x65, 0x78, 0x74, 0x22, 0xef, 0x02, 0x0a, 0x14, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a,
	0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69,
	0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x64,
	0x70, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x64, 0x70, 0x69, 0x12, 0x14, 0x0a,
	0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c,
	0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22, 0xe6, 0x01,
	0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1c,
	0x0a, 0x18, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x55,
	0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b,
	0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f,
	0x46, 0x4c, 0x41, 0x47, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x12, 0x25, 0x0a,
	0x21, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59,
	0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49,
	0x4f, 0x4e, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f,
	0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x53, 0x45, 0x43,
	0x55, 0x52, 0x45, 0x10, 0x04, 0x12, 0x29, 0x0a, 0x25, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c,
	0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x4f, 0x57,
	0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x08,
	0x12, 0x24, 0x0a, 0x20, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x49, 0x53, 0x50,
	0x4c, 0x41, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4d, 0x49,
	0x52, 0x52, 0x4f, 0x52, 0x10, 0x10, 0x22, 0x64, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61,
	0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
	0x4b, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x69,
	0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x08, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x22, 0xcf, 0x01, 0x0a,
	0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a,
	0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x61,
	0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52,
	0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x76, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54,
	0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x53,
	0x43, 0x45, 0x4e, 0x45, 0x5f, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x5f, 0x49, 0x4e, 0x41, 0x43,
	0x54, 0x49, 0x56, 0x45, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41,
	0x4c, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x5f, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x5f, 0x41,
	0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x50, 0x4c,
	0x41, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e,
	0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x5f, 0x55, 0x49, 0x10, 0x02, 0x22, 0x3a,
	0x0a, 0x0e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x64, 0x69, 0x61, 0x6e,
	0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c,
	0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x79, 0x12, 0x0c, 0x0a, 0x01,
	0x7a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x7a, 0x22, 0x34, 0x0a, 0x08, 0x56, 0x65,
	0x6c, 0x6f, 0x63, 0x69, 0x74, 0x79, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52,
	0x01, 0x79, 0x12, 0x0c, 0x0a, 0x01, 0x7a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x7a,
	0x32, 0xbe, 0x17, 0x0a, 0x12, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e,
	0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x65, 0x61,
	0x6d, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69,
	0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
	0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a,
	0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x09, 0x67,
	0x65, 0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f,
	0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e,
	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x1a, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x6e,
	0x73, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x09, 0x73, 0x65,
	0x74, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69,
	0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
	0x72, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a,
	0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x10, 0x73, 0x65, 0x74,
	0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x2d, 0x2e,
	0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63,
	0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
	0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x50, 0x68, 0x79,
	0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x2d, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d,
	0x6f, 0x64, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x2d, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f,
	0x64, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x13, 0x73, 0x74,
	0x72, 0x65, 0x61, 0x6d, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65,
	0x6c, 0x12, 0x2d, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68,
	0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x1a, 0x2d, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x79,
	0x73, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22,
	0x00, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x0c, 0x73, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f,
	0x61, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
	0x43, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
	0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61,
	0x72, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x22,
	0x00, 0x12, 0x52, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6c, 0x69, 0x70, 0x62,
	0x6f, 0x61, 0x72, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x61,
	0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x43, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x74,
	0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4f, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x42, 0x61, 0x74, 0x74,
	0x65, 0x72, 0x79, 0x12, 0x27, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
	0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x16, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
	0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x74,
	0x74, 0x65, 0x72, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x27, 0x2e, 0x61,
	0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79,
	0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x65, 0x74, 0x47, 0x70,
	0x73, 0x12, 0x23, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47, 0x70,
	0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00,
	0x12, 0x47, 0x0a, 0x06, 0x67, 0x65, 0x74, 0x47, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
	0x74, 0x79, 0x1a, 0x23, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75,
	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x47,
	0x70, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0f, 0x73, 0x65, 0x6e,
	0x64, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x61,
	0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70,
	0x72, 0x69, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4d,
	0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x28, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76,
	0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a,
	0x09, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x25, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e,
	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x73,
	0x65, 0x6e, 0x64, 0x4d, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f,
	0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e,
	0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4d, 0x6f, 0x75, 0x73, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a,
	0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x09, 0x73, 0x65, 0x6e,
	0x64, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x24, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64,
	0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
	0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x1a, 0x28, 0x2e, 0x61,
	0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64,
	0x53, 0x6d, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
	0x53, 0x6d, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x28, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70,
	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x29, 0x2e, 0x61, 0x6e,
	0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72,
	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x53,
	0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61,
	0x74, 0x1a, 0x20, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6d,
	0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53,
	0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61,
	0x74, 0x1a, 0x20, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x49, 0x6d,
	0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61,
	0x6d, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x12, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64,
	0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
	0x6f, 0x6c, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x1a, 0x26,
	0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f,
	0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0b, 0x69, 0x6e,
	0x6a, 0x65, 0x63, 0x74, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x12, 0x26, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x65,
	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x28, 0x01, 0x12, 0x5b, 0x0a,
	0x09, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x63, 0x61, 0x74, 0x12, 0x25, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
	0x65, 0x1a, 0x25, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f,
	0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0c, 0x73, 0x74,
	0x72, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x67, 0x63, 0x61, 0x74, 0x12, 0x25, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
	0x65, 0x1a, 0x25, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f,
	0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x0a,
	0x73, 0x65, 0x74, 0x56, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63,
	0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x6d, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74,
	0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0a, 0x67,
	0x65, 0x74, 0x56, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
	0x79, 0x1a, 0x25, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x6d,
	0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x18, 0x73,
	0x65, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69,
	0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
	0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x30, 0x2e, 0x61, 0x6e, 0x64, 0x72,
	0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f,
	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a,
	0x18, 0x67, 0x65, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
	0x79, 0x1a, 0x30, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x44, 0x69,
	0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x73, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e,
	0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
	0x70, 0x74, 0x79, 0x1a, 0x27, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e,
	0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x30, 0x01,
	0x12, 0x5f, 0x0a, 0x18, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61,
	0x6c, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x12, 0x29, 0x2e, 0x61,
	0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x52, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
	0x00, 0x12, 0x5e, 0x0a, 0x1d, 0x73, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53,
	0x63, 0x65, 0x6e, 0x65, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x56, 0x65, 0x6c, 0x6f, 0x63, 0x69,
	0x74, 0x79, 0x12, 0x23, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x75,
	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56,
	0x65, 0x6c, 0x6f, 0x63, 0x69, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
	0x00, 0x42, 0x48, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64,
	0x2e, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
	0x6c, 0x50, 0x01, 0x5a, 0x20, 0x2e, 0x2f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x65,
	0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0xa2, 0x02, 0x03, 0x41, 0x45, 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x33,
}

var (
	file_emulator_controller_proto_rawDescOnce sync.Once
	file_emulator_controller_proto_rawDescData = file_emulator_controller_proto_rawDesc
)

func file_emulator_controller_proto_rawDescGZIP() []byte {
	file_emulator_controller_proto_rawDescOnce.Do(func() {
		file_emulator_controller_proto_rawDescData = protoimpl.X.CompressGZIP(file_emulator_controller_proto_rawDescData)
	})
	return file_emulator_controller_proto_rawDescData
}

var file_emulator_controller_proto_enumTypes = make([]protoimpl.EnumInfo, 23)
var file_emulator_controller_proto_msgTypes = make([]protoimpl.MessageInfo, 33)
var file_emulator_controller_proto_goTypes = []interface{}{
	(VmRunState_RunState)(0),               // 0: android.emulation.control.VmRunState.RunState
	(PhysicalModelValue_State)(0),          // 1: android.emulation.control.PhysicalModelValue.State
	(PhysicalModelValue_PhysicalType)(0),   // 2: android.emulation.control.PhysicalModelValue.PhysicalType
	(SensorValue_State)(0),                 // 3: android.emulation.control.SensorValue.State
	(SensorValue_SensorType)(0),            // 4: android.emulation.control.SensorValue.SensorType
	(LogMessage_LogType)(0),                // 5: android.emulation.control.LogMessage.LogType
	(LogcatEntry_LogLevel)(0),              // 6: android.emulation.control.LogcatEntry.LogLevel
	(VmConfiguration_VmHypervisorType)(0),  // 7: android.emulation.control.VmConfiguration.VmHypervisorType
	(Touch_EventExpiration)(0),             // 8: android.emulation.control.Touch.EventExpiration
	(KeyboardEvent_KeyCodeType)(0),         // 9: android.emulation.control.KeyboardEvent.KeyCodeType
	(KeyboardEvent_KeyEventType)(0),        // 10: android.emulation.control.KeyboardEvent.KeyEventType
	(BatteryState_BatteryStatus)(0),        // 11: android.emulation.control.BatteryState.BatteryStatus
	(BatteryState_BatteryCharger)(0),       // 12: android.emulation.control.BatteryState.BatteryCharger
	(BatteryState_BatteryHealth)(0),        // 13: android.emulation.control.BatteryState.BatteryHealth
	(ImageTransport_TransportChannel)(0),   // 14: android.emulation.control.ImageTransport.TransportChannel
	(ImageFormat_ImgFormat)(0),             // 15: android.emulation.control.ImageFormat.ImgFormat
	(Rotation_SkinRotation)(0),             // 16: android.emulation.control.Rotation.SkinRotation
	(PhoneCall_Operation)(0),               // 17: android.emulation.control.PhoneCall.Operation
	(PhoneResponse_Response)(0),            // 18: android.emulation.control.PhoneResponse.Response
	(AudioFormat_SampleFormat)(0),          // 19: android.emulation.control.AudioFormat.SampleFormat
	(AudioFormat_Channels)(0),              // 20: android.emulation.control.AudioFormat.Channels
	(DisplayConfiguration_DisplayFlags)(0), // 21: android.emulation.control.DisplayConfiguration.DisplayFlags
	(Notification_EventType)(0),            // 22: android.emulation.control.Notification.EventType
	(*VmRunState)(nil),                     // 23: android.emulation.control.VmRunState
	(*ParameterValue)(nil),                 // 24: android.emulation.control.ParameterValue
	(*PhysicalModelValue)(nil),             // 25: android.emulation.control.PhysicalModelValue
	(*SensorValue)(nil),                    // 26: android.emulation.control.SensorValue
	(*LogMessage)(nil),                     // 27: android.emulation.control.LogMessage
	(*LogcatEntry)(nil),                    // 28: android.emulation.control.LogcatEntry
	(*VmConfiguration)(nil),                // 29: android.emulation.control.VmConfiguration
	(*ClipData)(nil),                       // 30: android.emulation.control.ClipData
	(*Touch)(nil),                          // 31: android.emulation.control.Touch
	(*TouchEvent)(nil),                     // 32: android.emulation.control.TouchEvent
	(*MouseEvent)(nil),                     // 33: android.emulation.control.MouseEvent
	(*KeyboardEvent)(nil),                  // 34: android.emulation.control.KeyboardEvent
	(*Fingerprint)(nil),                    // 35: android.emulation.control.Fingerprint
	(*GpsState)(nil),                       // 36: android.emulation.control.GpsState
	(*BatteryState)(nil),                   // 37: android.emulation.control.BatteryState
	(*ImageTransport)(nil),                 // 38: android.emulation.control.ImageTransport
	(*FoldedDisplay)(nil),                  // 39: android.emulation.control.FoldedDisplay
	(*ImageFormat)(nil),                    // 40: android.emulation.control.ImageFormat
	(*Image)(nil),                          // 41: android.emulation.control.Image
	(*Rotation)(nil),                       // 42: android.emulation.control.Rotation
	(*PhoneCall)(nil),                      // 43: android.emulation.control.PhoneCall
	(*PhoneResponse)(nil),                  // 44: android.emulation.control.PhoneResponse
	(*Entry)(nil),                          // 45: android.emulation.control.Entry
	(*EntryList)(nil),                      // 46: android.emulation.control.EntryList
	(*EmulatorStatus)(nil),                 // 47: android.emulation.control.EmulatorStatus
	(*AudioFormat)(nil),                    // 48: android.emulation.control.AudioFormat
	(*AudioPacket)(nil),                    // 49: android.emulation.control.AudioPacket
	(*SmsMessage)(nil),                     // 50: android.emulation.control.SmsMessage
	(*DisplayConfiguration)(nil),           // 51: android.emulation.control.DisplayConfiguration
	(*DisplayConfigurations)(nil),          // 52: android.emulation.control.DisplayConfigurations
	(*Notification)(nil),                   // 53: android.emulation.control.Notification
	(*RotationRadian)(nil),                 // 54: android.emulation.control.RotationRadian
	(*Velocity)(nil),                       // 55: android.emulation.control.Velocity
	(*emptypb.Empty)(nil),                  // 56: google.protobuf.Empty
}
var file_emulator_controller_proto_depIdxs = []int32{
	0,  // 0: android.emulation.control.VmRunState.state:type_name -> android.emulation.control.VmRunState.RunState
	2,  // 1: android.emulation.control.PhysicalModelValue.target:type_name -> android.emulation.control.PhysicalModelValue.PhysicalType
	1,  // 2: android.emulation.control.PhysicalModelValue.status:type_name -> android.emulation.control.PhysicalModelValue.State
	24, // 3: android.emulation.control.PhysicalModelValue.value:type_name -> android.emulation.control.ParameterValue
	4,  // 4: android.emulation.control.SensorValue.target:type_name -> android.emulation.control.SensorValue.SensorType
	3,  // 5: android.emulation.control.SensorValue.status:type_name -> android.emulation.control.SensorValue.State
	24, // 6: android.emulation.control.SensorValue.value:type_name -> android.emulation.control.ParameterValue
	5,  // 7: android.emulation.control.LogMessage.sort:type_name -> android.emulation.control.LogMessage.LogType
	28, // 8: android.emulation.control.LogMessage.entries:type_name -> android.emulation.control.LogcatEntry
	6,  // 9: android.emulation.control.LogcatEntry.level:type_name -> android.emulation.control.LogcatEntry.LogLevel
	7,  // 10: android.emulation.control.VmConfiguration.hypervisorType:type_name -> android.emulation.control.VmConfiguration.VmHypervisorType
	8,  // 11: android.emulation.control.Touch.expiration:type_name -> android.emulation.control.Touch.EventExpiration
	31, // 12: android.emulation.control.TouchEvent.touches:type_name -> android.emulation.control.Touch
	9,  // 13: android.emulation.control.KeyboardEvent.codeType:type_name -> android.emulation.control.KeyboardEvent.KeyCodeType
	10, // 14: android.emulation.control.KeyboardEvent.eventType:type_name -> android.emulation.control.KeyboardEvent.KeyEventType
	12, // 15: android.emulation.control.BatteryState.charger:type_name -> android.emulation.control.BatteryState.BatteryCharger
	13, // 16: android.emulation.control.BatteryState.health:type_name -> android.emulation.control.BatteryState.BatteryHealth
	11, // 17: android.emulation.control.BatteryState.status:type_name -> android.emulation.control.BatteryState.BatteryStatus
	14, // 18: android.emulation.control.ImageTransport.channel:type_name -> android.emulation.control.ImageTransport.TransportChannel
	15, // 19: android.emulation.control.ImageFormat.format:type_name -> android.emulation.control.ImageFormat.ImgFormat
	42, // 20: android.emulation.control.ImageFormat.rotation:type_name -> android.emulation.control.Rotation
	38, // 21: android.emulation.control.ImageFormat.transport:type_name -> android.emulation.control.ImageTransport
	39, // 22: android.emulation.control.ImageFormat.foldedDisplay:type_name -> android.emulation.control.FoldedDisplay
	40, // 23: android.emulation.control.Image.format:type_name -> android.emulation.control.ImageFormat
	16, // 24: android.emulation.control.Rotation.rotation:type_name -> android.emulation.control.Rotation.SkinRotation
	17, // 25: android.emulation.control.PhoneCall.operation:type_name -> android.emulation.control.PhoneCall.Operation
	18, // 26: android.emulation.control.PhoneResponse.response:type_name -> android.emulation.control.PhoneResponse.Response
	45, // 27: android.emulation.control.EntryList.entry:type_name -> android.emulation.control.Entry
	29, // 28: android.emulation.control.EmulatorStatus.vmConfig:type_name -> android.emulation.control.VmConfiguration
	46, // 29: android.emulation.control.EmulatorStatus.hardwareConfig:type_name -> android.emulation.control.EntryList
	20, // 30: android.emulation.control.AudioFormat.channels:type_name -> android.emulation.control.AudioFormat.Channels
	19, // 31: android.emulation.control.AudioFormat.format:type_name -> android.emulation.control.AudioFormat.SampleFormat
	48, // 32: android.emulation.control.AudioPacket.format:type_name -> android.emulation.control.AudioFormat
	51, // 33: android.emulation.control.DisplayConfigurations.displays:type_name -> android.emulation.control.DisplayConfiguration
	22, // 34: android.emulation.control.Notification.event:type_name -> android.emulation.control.Notification.EventType
	26, // 35: android.emulation.control.EmulatorController.streamSensor:input_type -> android.emulation.control.SensorValue
	26, // 36: android.emulation.control.EmulatorController.getSensor:input_type -> android.emulation.control.SensorValue
	26, // 37: android.emulation.control.EmulatorController.setSensor:input_type -> android.emulation.control.SensorValue
	25, // 38: android.emulation.control.EmulatorController.setPhysicalModel:input_type -> android.emulation.control.PhysicalModelValue
	25, // 39: android.emulation.control.EmulatorController.getPhysicalModel:input_type -> android.emulation.control.PhysicalModelValue
	25, // 40: android.emulation.control.EmulatorController.streamPhysicalModel:input_type -> android.emulation.control.PhysicalModelValue
	30, // 41: android.emulation.control.EmulatorController.setClipboard:input_type -> android.emulation.control.ClipData
	56, // 42: android.emulation.control.EmulatorController.getClipboard:input_type -> google.protobuf.Empty
	56, // 43: android.emulation.control.EmulatorController.streamClipboard:input_type -> google.protobuf.Empty
	37, // 44: android.emulation.control.EmulatorController.setBattery:input_type -> android.emulation.control.BatteryState
	56, // 45: android.emulation.control.EmulatorController.getBattery:input_type -> google.protobuf.Empty
	36, // 46: android.emulation.control.EmulatorController.setGps:input_type -> android.emulation.control.GpsState
	56, // 47: android.emulation.control.EmulatorController.getGps:input_type -> google.protobuf.Empty
	35, // 48: android.emulation.control.EmulatorController.sendFingerprint:input_type -> android.emulation.control.Fingerprint
	34, // 49: android.emulation.control.EmulatorController.sendKey:input_type -> android.emulation.control.KeyboardEvent
	32, // 50: android.emulation.control.EmulatorController.sendTouch:input_type -> android.emulation.control.TouchEvent
	33, // 51: android.emulation.control.EmulatorController.sendMouse:input_type -> android.emulation.control.MouseEvent
	43, // 52: android.emulation.control.EmulatorController.sendPhone:input_type -> android.emulation.control.PhoneCall
	50, // 53: android.emulation.control.EmulatorController.sendSms:input_type -> android.emulation.control.SmsMessage
	56, // 54: android.emulation.control.EmulatorController.getStatus:input_type -> google.protobuf.Empty
	40, // 55: android.emulation.control.EmulatorController.getScreenshot:input_type -> android.emulation.control.ImageFormat
	40, // 56: android.emulation.control.EmulatorController.streamScreenshot:input_type -> android.emulation.control.ImageFormat
	48, // 57: android.emulation.control.EmulatorController.streamAudio:input_type -> android.emulation.control.AudioFormat
	49, // 58: android.emulation.control.EmulatorController.injectAudio:input_type -> android.emulation.control.AudioPacket
	27, // 59: android.emulation.control.EmulatorController.getLogcat:input_type -> android.emulation.control.LogMessage
	27, // 60: android.emulation.control.EmulatorController.streamLogcat:input_type -> android.emulation.control.LogMessage
	23, // 61: android.emulation.control.EmulatorController.setVmState:input_type -> android.emulation.control.VmRunState
	56, // 62: android.emulation.control.EmulatorController.getVmState:input_type -> google.protobuf.Empty
	52, // 63: android.emulation.control.EmulatorController.setDisplayConfigurations:input_type -> android.emulation.control.DisplayConfigurations
	56, // 64: android.emulation.control.EmulatorController.getDisplayConfigurations:input_type -> google.protobuf.Empty
	56, // 65: android.emulation.control.EmulatorController.streamNotification:input_type -> google.protobuf.Empty
	54, // 66: android.emulation.control.EmulatorController.rotateVirtualSceneCamera:input_type -> android.emulation.control.RotationRadian
	55, // 67: android.emulation.control.EmulatorController.setVirtualSceneCameraVelocity:input_type -> android.emulation.control.Velocity
	26, // 68: android.emulation.control.EmulatorController.streamSensor:output_type -> android.emulation.control.SensorValue
	26, // 69: android.emulation.control.EmulatorController.getSensor:output_type -> android.emulation.control.SensorValue
	56, // 70: android.emulation.control.EmulatorController.setSensor:output_type -> google.protobuf.Empty
	56, // 71: android.emulation.control.EmulatorController.setPhysicalModel:output_type -> google.protobuf.Empty
	25, // 72: android.emulation.control.EmulatorController.getPhysicalModel:output_type -> android.emulation.control.PhysicalModelValue
	25, // 73: android.emulation.control.EmulatorController.streamPhysicalModel:output_type -> android.emulation.control.PhysicalModelValue
	56, // 74: android.emulation.control.EmulatorController.setClipboard:output_type -> google.protobuf.Empty
	30, // 75: android.emulation.control.EmulatorController.getClipboard:output_type -> android.emulation.control.ClipData
	30, // 76: android.emulation.control.EmulatorController.streamClipboard:output_type -> android.emulation.control.ClipData
	56, // 77: android.emulation.control.EmulatorController.setBattery:output_type -> google.protobuf.Empty
	37, // 78: android.emulation.control.EmulatorController.getBattery:output_type -> android.emulation.control.BatteryState
	56, // 79: android.emulation.control.EmulatorController.setGps:output_type -> google.protobuf.Empty
	36, // 80: android.emulation.control.EmulatorController.getGps:output_type -> android.emulation.control.GpsState
	56, // 81: android.emulation.control.EmulatorController.sendFingerprint:output_type -> google.protobuf.Empty
	56, // 82: android.emulation.control.EmulatorController.sendKey:output_type -> google.protobuf.Empty
	56, // 83: android.emulation.control.EmulatorController.sendTouch:output_type -> google.protobuf.Empty
	56, // 84: android.emulation.control.EmulatorController.sendMouse:output_type -> google.protobuf.Empty
	44, // 85: android.emulation.control.EmulatorController.sendPhone:output_type -> android.emulation.control.PhoneResponse
	44, // 86: android.emulation.control.EmulatorController.sendSms:output_type -> android.emulation.control.PhoneResponse
	47, // 87: android.emulation.control.EmulatorController.getStatus:output_type -> android.emulation.control.EmulatorStatus
	41, // 88: android.emulation.control.EmulatorController.getScreenshot:output_type -> android.emulation.control.Image
	41, // 89: android.emulation.control.EmulatorController.streamScreenshot:output_type -> android.emulation.control.Image
	49, // 90: android.emulation.control.EmulatorController.streamAudio:output_type -> android.emulation.control.AudioPacket
	56, // 91: android.emulation.control.EmulatorController.injectAudio:output_type -> google.protobuf.Empty
	27, // 92: android.emulation.control.EmulatorController.getLogcat:output_type -> android.emulation.control.LogMessage
	27, // 93: android.emulation.control.EmulatorController.streamLogcat:output_type -> android.emulation.control.LogMessage
	56, // 94: android.emulation.control.EmulatorController.setVmState:output_type -> google.protobuf.Empty
	23, // 95: android.emulation.control.EmulatorController.getVmState:output_type -> android.emulation.control.VmRunState
	52, // 96: android.emulation.control.EmulatorController.setDisplayConfigurations:output_type -> android.emulation.control.DisplayConfigurations
	52, // 97: android.emulation.control.EmulatorController.getDisplayConfigurations:output_type -> android.emulation.control.DisplayConfigurations
	53, // 98: android.emulation.control.EmulatorController.streamNotification:output_type -> android.emulation.control.Notification
	56, // 99: android.emulation.control.EmulatorController.rotateVirtualSceneCamera:output_type -> google.protobuf.Empty
	56, // 100: android.emulation.control.EmulatorController.setVirtualSceneCameraVelocity:output_type -> google.protobuf.Empty
	68, // [68:101] is the sub-list for method output_type
	35, // [35:68] is the sub-list for method input_type
	35, // [35:35] is the sub-list for extension type_name
	35, // [35:35] is the sub-list for extension extendee
	0,  // [0:35] is the sub-list for field type_name
}

func init() { file_emulator_controller_proto_init() }
func file_emulator_controller_proto_init() {
	if File_emulator_controller_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_emulator_controller_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VmRunState); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ParameterValue); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PhysicalModelValue); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SensorValue); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LogMessage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LogcatEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VmConfiguration); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ClipData); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Touch); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TouchEvent); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MouseEvent); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*KeyboardEvent); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Fingerprint); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GpsState); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BatteryState); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ImageTransport); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FoldedDisplay); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ImageFormat); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Image); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Rotation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PhoneCall); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PhoneResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Entry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EntryList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EmulatorStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AudioFormat); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AudioPacket); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SmsMessage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DisplayConfiguration); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DisplayConfigurations); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Notification); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RotationRadian); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_emulator_controller_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Velocity); 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_emulator_controller_proto_rawDesc,
			NumEnums:      23,
			NumMessages:   33,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_emulator_controller_proto_goTypes,
		DependencyIndexes: file_emulator_controller_proto_depIdxs,
		EnumInfos:         file_emulator_controller_proto_enumTypes,
		MessageInfos:      file_emulator_controller_proto_msgTypes,
	}.Build()
	File_emulator_controller_proto = out.File
	file_emulator_controller_proto_rawDesc = nil
	file_emulator_controller_proto_goTypes = nil
	file_emulator_controller_proto_depIdxs = nil
}
