// Code generated by protoc-gen-go. DO NOT EDIT.
// source: dmi/hw.proto

package dmi

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type ComponentType int32

const (
	ComponentType_COMPONENT_TYPE_UNDEFINED    ComponentType = 0
	ComponentType_COMPONENT_TYPE_UNKNOWN      ComponentType = 1
	ComponentType_COMPONENT_TYPE_CHASSIS      ComponentType = 2
	ComponentType_COMPONENT_TYPE_BACKPLANE    ComponentType = 3
	ComponentType_COMPONENT_TYPE_CONTAINER    ComponentType = 4
	ComponentType_COMPONENT_TYPE_POWER_SUPPLY ComponentType = 5
	ComponentType_COMPONENT_TYPE_FAN          ComponentType = 6
	ComponentType_COMPONENT_TYPE_SENSOR       ComponentType = 7
	ComponentType_COMPONENT_TYPE_MODULE       ComponentType = 8
	ComponentType_COMPONENT_TYPE_PORT         ComponentType = 9
	ComponentType_COMPONENT_TYPE_CPU          ComponentType = 10
	ComponentType_COMPONENT_TYPE_BATTERY      ComponentType = 11
	ComponentType_COMPONENT_TYPE_STORAGE      ComponentType = 12
	ComponentType_COMPONENT_TYPE_MEMORY       ComponentType = 13
	ComponentType_COMPONENT_TYPE_TRANSCEIVER  ComponentType = 14
)

var ComponentType_name = map[int32]string{
	0:  "COMPONENT_TYPE_UNDEFINED",
	1:  "COMPONENT_TYPE_UNKNOWN",
	2:  "COMPONENT_TYPE_CHASSIS",
	3:  "COMPONENT_TYPE_BACKPLANE",
	4:  "COMPONENT_TYPE_CONTAINER",
	5:  "COMPONENT_TYPE_POWER_SUPPLY",
	6:  "COMPONENT_TYPE_FAN",
	7:  "COMPONENT_TYPE_SENSOR",
	8:  "COMPONENT_TYPE_MODULE",
	9:  "COMPONENT_TYPE_PORT",
	10: "COMPONENT_TYPE_CPU",
	11: "COMPONENT_TYPE_BATTERY",
	12: "COMPONENT_TYPE_STORAGE",
	13: "COMPONENT_TYPE_MEMORY",
	14: "COMPONENT_TYPE_TRANSCEIVER",
}

var ComponentType_value = map[string]int32{
	"COMPONENT_TYPE_UNDEFINED":    0,
	"COMPONENT_TYPE_UNKNOWN":      1,
	"COMPONENT_TYPE_CHASSIS":      2,
	"COMPONENT_TYPE_BACKPLANE":    3,
	"COMPONENT_TYPE_CONTAINER":    4,
	"COMPONENT_TYPE_POWER_SUPPLY": 5,
	"COMPONENT_TYPE_FAN":          6,
	"COMPONENT_TYPE_SENSOR":       7,
	"COMPONENT_TYPE_MODULE":       8,
	"COMPONENT_TYPE_PORT":         9,
	"COMPONENT_TYPE_CPU":          10,
	"COMPONENT_TYPE_BATTERY":      11,
	"COMPONENT_TYPE_STORAGE":      12,
	"COMPONENT_TYPE_MEMORY":       13,
	"COMPONENT_TYPE_TRANSCEIVER":  14,
}

func (x ComponentType) String() string {
	return proto.EnumName(ComponentType_name, int32(x))
}

func (ComponentType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{0}
}

type ComponentAdminState int32

const (
	ComponentAdminState_COMP_ADMIN_STATE_UNDEFINED     ComponentAdminState = 0
	ComponentAdminState_COMP_ADMIN_STATE_UNKNOWN       ComponentAdminState = 1
	ComponentAdminState_COMP_ADMIN_STATE_LOCKED        ComponentAdminState = 2
	ComponentAdminState_COMP_ADMIN_STATE_SHUTTING_DOWN ComponentAdminState = 3
	ComponentAdminState_COMP_ADMIN_STATE_UNLOCKED      ComponentAdminState = 4
)

var ComponentAdminState_name = map[int32]string{
	0: "COMP_ADMIN_STATE_UNDEFINED",
	1: "COMP_ADMIN_STATE_UNKNOWN",
	2: "COMP_ADMIN_STATE_LOCKED",
	3: "COMP_ADMIN_STATE_SHUTTING_DOWN",
	4: "COMP_ADMIN_STATE_UNLOCKED",
}

var ComponentAdminState_value = map[string]int32{
	"COMP_ADMIN_STATE_UNDEFINED":     0,
	"COMP_ADMIN_STATE_UNKNOWN":       1,
	"COMP_ADMIN_STATE_LOCKED":        2,
	"COMP_ADMIN_STATE_SHUTTING_DOWN": 3,
	"COMP_ADMIN_STATE_UNLOCKED":      4,
}

func (x ComponentAdminState) String() string {
	return proto.EnumName(ComponentAdminState_name, int32(x))
}

func (ComponentAdminState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{1}
}

type ComponentOperState int32

const (
	ComponentOperState_COMP_OPER_STATE_UNDEFINED ComponentOperState = 0
	ComponentOperState_COMP_OPER_STATE_UNKNOWN   ComponentOperState = 1
	ComponentOperState_COMP_OPER_STATE_DISABLED  ComponentOperState = 2
	ComponentOperState_COMP_OPER_STATE_ENABLED   ComponentOperState = 3
	ComponentOperState_COMP_OPER_STATE_TESTING   ComponentOperState = 4
)

var ComponentOperState_name = map[int32]string{
	0: "COMP_OPER_STATE_UNDEFINED",
	1: "COMP_OPER_STATE_UNKNOWN",
	2: "COMP_OPER_STATE_DISABLED",
	3: "COMP_OPER_STATE_ENABLED",
	4: "COMP_OPER_STATE_TESTING",
}

var ComponentOperState_value = map[string]int32{
	"COMP_OPER_STATE_UNDEFINED": 0,
	"COMP_OPER_STATE_UNKNOWN":   1,
	"COMP_OPER_STATE_DISABLED":  2,
	"COMP_OPER_STATE_ENABLED":   3,
	"COMP_OPER_STATE_TESTING":   4,
}

func (x ComponentOperState) String() string {
	return proto.EnumName(ComponentOperState_name, int32(x))
}

func (ComponentOperState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{2}
}

type ComponentUsageState int32

const (
	ComponentUsageState_COMP_USAGE_STATE_UNDEFINED ComponentUsageState = 0
	ComponentUsageState_COMP_USAGE_STATE_UNKNOWN   ComponentUsageState = 1
	ComponentUsageState_COMP_USAGE_STATE_IDLE      ComponentUsageState = 2
	ComponentUsageState_COMP_USAGE_STATE_ACTIVE    ComponentUsageState = 3
	ComponentUsageState_COMP_USAGE_STATE_BUSY      ComponentUsageState = 4
)

var ComponentUsageState_name = map[int32]string{
	0: "COMP_USAGE_STATE_UNDEFINED",
	1: "COMP_USAGE_STATE_UNKNOWN",
	2: "COMP_USAGE_STATE_IDLE",
	3: "COMP_USAGE_STATE_ACTIVE",
	4: "COMP_USAGE_STATE_BUSY",
}

var ComponentUsageState_value = map[string]int32{
	"COMP_USAGE_STATE_UNDEFINED": 0,
	"COMP_USAGE_STATE_UNKNOWN":   1,
	"COMP_USAGE_STATE_IDLE":      2,
	"COMP_USAGE_STATE_ACTIVE":    3,
	"COMP_USAGE_STATE_BUSY":      4,
}

func (x ComponentUsageState) String() string {
	return proto.EnumName(ComponentUsageState_name, int32(x))
}

func (ComponentUsageState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{3}
}

type ComponentAlarmState int32

const (
	ComponentAlarmState_COMP_ALARM_STATE_UNDEFINED    ComponentAlarmState = 0
	ComponentAlarmState_COMP_ALARM_STATE_UNKNOWN      ComponentAlarmState = 1
	ComponentAlarmState_COMP_ALARM_STATE_UNDER_REPAIR ComponentAlarmState = 2
	ComponentAlarmState_COMP_ALARM_STATE_CRITICAL     ComponentAlarmState = 3
	ComponentAlarmState_COMP_ALARM_STATE_MAJOR        ComponentAlarmState = 4
	ComponentAlarmState_COMP_ALARM_STATE_MINOR        ComponentAlarmState = 5
	ComponentAlarmState_COMP_ALARM_STATE_WARNING      ComponentAlarmState = 6
	ComponentAlarmState_COMP_ALARM_STATE_INTERMEDIATE ComponentAlarmState = 7
)

var ComponentAlarmState_name = map[int32]string{
	0: "COMP_ALARM_STATE_UNDEFINED",
	1: "COMP_ALARM_STATE_UNKNOWN",
	2: "COMP_ALARM_STATE_UNDER_REPAIR",
	3: "COMP_ALARM_STATE_CRITICAL",
	4: "COMP_ALARM_STATE_MAJOR",
	5: "COMP_ALARM_STATE_MINOR",
	6: "COMP_ALARM_STATE_WARNING",
	7: "COMP_ALARM_STATE_INTERMEDIATE",
}

var ComponentAlarmState_value = map[string]int32{
	"COMP_ALARM_STATE_UNDEFINED":    0,
	"COMP_ALARM_STATE_UNKNOWN":      1,
	"COMP_ALARM_STATE_UNDER_REPAIR": 2,
	"COMP_ALARM_STATE_CRITICAL":     3,
	"COMP_ALARM_STATE_MAJOR":        4,
	"COMP_ALARM_STATE_MINOR":        5,
	"COMP_ALARM_STATE_WARNING":      6,
	"COMP_ALARM_STATE_INTERMEDIATE": 7,
}

func (x ComponentAlarmState) String() string {
	return proto.EnumName(ComponentAlarmState_name, int32(x))
}

func (ComponentAlarmState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{4}
}

type ComponentStandbyState int32

const (
	ComponentStandbyState_COMP_STANDBY_STATE_UNDEFINED         ComponentStandbyState = 0
	ComponentStandbyState_COMP_STANDBY_STATE_UNKNOWN           ComponentStandbyState = 1
	ComponentStandbyState_COMP_STANDBY_STATE_HOT               ComponentStandbyState = 2
	ComponentStandbyState_COMP_STANDBY_STATE_COLD              ComponentStandbyState = 3
	ComponentStandbyState_COMP_STANDBY_STATE_PROVIDING_SERVICE ComponentStandbyState = 4
)

var ComponentStandbyState_name = map[int32]string{
	0: "COMP_STANDBY_STATE_UNDEFINED",
	1: "COMP_STANDBY_STATE_UNKNOWN",
	2: "COMP_STANDBY_STATE_HOT",
	3: "COMP_STANDBY_STATE_COLD",
	4: "COMP_STANDBY_STATE_PROVIDING_SERVICE",
}

var ComponentStandbyState_value = map[string]int32{
	"COMP_STANDBY_STATE_UNDEFINED":         0,
	"COMP_STANDBY_STATE_UNKNOWN":           1,
	"COMP_STANDBY_STATE_HOT":               2,
	"COMP_STANDBY_STATE_COLD":              3,
	"COMP_STANDBY_STATE_PROVIDING_SERVICE": 4,
}

func (x ComponentStandbyState) String() string {
	return proto.EnumName(ComponentStandbyState_name, int32(x))
}

func (ComponentStandbyState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{5}
}

type SensorValueType int32

const (
	SensorValueType_SENSOR_VALUE_TYPE_UNDEFINED   SensorValueType = 0
	SensorValueType_SENSOR_VALUE_TYPE_OTHER       SensorValueType = 1
	SensorValueType_SENSOR_VALUE_TYPE_UNKNOWN     SensorValueType = 2
	SensorValueType_SENSOR_VALUE_TYPE_VOLTS_AC    SensorValueType = 3
	SensorValueType_SENSOR_VALUE_TYPE_VOLTS_DC    SensorValueType = 4
	SensorValueType_SENSOR_VALUE_TYPE_AMPERES     SensorValueType = 5
	SensorValueType_SENSOR_VALUE_TYPE_WATTS       SensorValueType = 6
	SensorValueType_SENSOR_VALUE_TYPE_HERTZ       SensorValueType = 7
	SensorValueType_SENSOR_VALUE_TYPE_CELSIUS     SensorValueType = 8
	SensorValueType_SENSOR_VALUE_TYPE_PERCENT_RH  SensorValueType = 9
	SensorValueType_SENSOR_VALUE_TYPE_RPM         SensorValueType = 10
	SensorValueType_SENSOR_VALUE_TYPE_CMM         SensorValueType = 11
	SensorValueType_SENSOR_VALUE_TYPE_TRUTH_VALUE SensorValueType = 12
)

var SensorValueType_name = map[int32]string{
	0:  "SENSOR_VALUE_TYPE_UNDEFINED",
	1:  "SENSOR_VALUE_TYPE_OTHER",
	2:  "SENSOR_VALUE_TYPE_UNKNOWN",
	3:  "SENSOR_VALUE_TYPE_VOLTS_AC",
	4:  "SENSOR_VALUE_TYPE_VOLTS_DC",
	5:  "SENSOR_VALUE_TYPE_AMPERES",
	6:  "SENSOR_VALUE_TYPE_WATTS",
	7:  "SENSOR_VALUE_TYPE_HERTZ",
	8:  "SENSOR_VALUE_TYPE_CELSIUS",
	9:  "SENSOR_VALUE_TYPE_PERCENT_RH",
	10: "SENSOR_VALUE_TYPE_RPM",
	11: "SENSOR_VALUE_TYPE_CMM",
	12: "SENSOR_VALUE_TYPE_TRUTH_VALUE",
}

var SensorValueType_value = map[string]int32{
	"SENSOR_VALUE_TYPE_UNDEFINED":   0,
	"SENSOR_VALUE_TYPE_OTHER":       1,
	"SENSOR_VALUE_TYPE_UNKNOWN":     2,
	"SENSOR_VALUE_TYPE_VOLTS_AC":    3,
	"SENSOR_VALUE_TYPE_VOLTS_DC":    4,
	"SENSOR_VALUE_TYPE_AMPERES":     5,
	"SENSOR_VALUE_TYPE_WATTS":       6,
	"SENSOR_VALUE_TYPE_HERTZ":       7,
	"SENSOR_VALUE_TYPE_CELSIUS":     8,
	"SENSOR_VALUE_TYPE_PERCENT_RH":  9,
	"SENSOR_VALUE_TYPE_RPM":         10,
	"SENSOR_VALUE_TYPE_CMM":         11,
	"SENSOR_VALUE_TYPE_TRUTH_VALUE": 12,
}

func (x SensorValueType) String() string {
	return proto.EnumName(SensorValueType_name, int32(x))
}

func (SensorValueType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{6}
}

type SensorValueScale int32

const (
	SensorValueScale_SENSOR_VALUE_SCALE_UNDEFINED SensorValueScale = 0
	SensorValueScale_SENSOR_VALUE_SCALE_YOCTO     SensorValueScale = 1
	SensorValueScale_SENSOR_VALUE_SCALE_ZEPTO     SensorValueScale = 2
	SensorValueScale_SENSOR_VALUE_SCALE_ATTO      SensorValueScale = 3
	SensorValueScale_SENSOR_VALUE_SCALE_FEMTO     SensorValueScale = 4
	SensorValueScale_SENSOR_VALUE_SCALE_PICO      SensorValueScale = 5
	SensorValueScale_SENSOR_VALUE_SCALE_NANO      SensorValueScale = 6
	SensorValueScale_SENSOR_VALUE_SCALE_MICRO     SensorValueScale = 7
	SensorValueScale_SENSOR_VALUE_SCALE_MILLI     SensorValueScale = 8
	SensorValueScale_SENSOR_VALUE_SCALE_UNITS     SensorValueScale = 9
	SensorValueScale_SENSOR_VALUE_SCALE_KILO      SensorValueScale = 10
	SensorValueScale_SENSOR_VALUE_SCALE_MEGA      SensorValueScale = 11
	SensorValueScale_SENSOR_VALUE_SCALE_GIGA      SensorValueScale = 12
	SensorValueScale_SENSOR_VALUE_SCALE_TERA      SensorValueScale = 13
	SensorValueScale_SENSOR_VALUE_SCALE_PETA      SensorValueScale = 14
	SensorValueScale_SENSOR_VALUE_SCALE_EXA       SensorValueScale = 15
	SensorValueScale_SENSOR_VALUE_SCALE_ZETTA     SensorValueScale = 16
	SensorValueScale_SENSOR_VALUE_SCALE_YOTTA     SensorValueScale = 17
)

var SensorValueScale_name = map[int32]string{
	0:  "SENSOR_VALUE_SCALE_UNDEFINED",
	1:  "SENSOR_VALUE_SCALE_YOCTO",
	2:  "SENSOR_VALUE_SCALE_ZEPTO",
	3:  "SENSOR_VALUE_SCALE_ATTO",
	4:  "SENSOR_VALUE_SCALE_FEMTO",
	5:  "SENSOR_VALUE_SCALE_PICO",
	6:  "SENSOR_VALUE_SCALE_NANO",
	7:  "SENSOR_VALUE_SCALE_MICRO",
	8:  "SENSOR_VALUE_SCALE_MILLI",
	9:  "SENSOR_VALUE_SCALE_UNITS",
	10: "SENSOR_VALUE_SCALE_KILO",
	11: "SENSOR_VALUE_SCALE_MEGA",
	12: "SENSOR_VALUE_SCALE_GIGA",
	13: "SENSOR_VALUE_SCALE_TERA",
	14: "SENSOR_VALUE_SCALE_PETA",
	15: "SENSOR_VALUE_SCALE_EXA",
	16: "SENSOR_VALUE_SCALE_ZETTA",
	17: "SENSOR_VALUE_SCALE_YOTTA",
}

var SensorValueScale_value = map[string]int32{
	"SENSOR_VALUE_SCALE_UNDEFINED": 0,
	"SENSOR_VALUE_SCALE_YOCTO":     1,
	"SENSOR_VALUE_SCALE_ZEPTO":     2,
	"SENSOR_VALUE_SCALE_ATTO":      3,
	"SENSOR_VALUE_SCALE_FEMTO":     4,
	"SENSOR_VALUE_SCALE_PICO":      5,
	"SENSOR_VALUE_SCALE_NANO":      6,
	"SENSOR_VALUE_SCALE_MICRO":     7,
	"SENSOR_VALUE_SCALE_MILLI":     8,
	"SENSOR_VALUE_SCALE_UNITS":     9,
	"SENSOR_VALUE_SCALE_KILO":      10,
	"SENSOR_VALUE_SCALE_MEGA":      11,
	"SENSOR_VALUE_SCALE_GIGA":      12,
	"SENSOR_VALUE_SCALE_TERA":      13,
	"SENSOR_VALUE_SCALE_PETA":      14,
	"SENSOR_VALUE_SCALE_EXA":       15,
	"SENSOR_VALUE_SCALE_ZETTA":     16,
	"SENSOR_VALUE_SCALE_YOTTA":     17,
}

func (x SensorValueScale) String() string {
	return proto.EnumName(SensorValueScale_name, int32(x))
}

func (SensorValueScale) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{7}
}

type SensorStatus int32

const (
	SensorStatus_SENSOR_STATUS_UNDEFINED      SensorStatus = 0
	SensorStatus_SENSOR_STATUS_OK             SensorStatus = 1
	SensorStatus_SENSOR_STATUS_UNAVAILABLE    SensorStatus = 2
	SensorStatus_SENSOR_STATUS_NONOPERATIONAL SensorStatus = 3
)

var SensorStatus_name = map[int32]string{
	0: "SENSOR_STATUS_UNDEFINED",
	1: "SENSOR_STATUS_OK",
	2: "SENSOR_STATUS_UNAVAILABLE",
	3: "SENSOR_STATUS_NONOPERATIONAL",
}

var SensorStatus_value = map[string]int32{
	"SENSOR_STATUS_UNDEFINED":      0,
	"SENSOR_STATUS_OK":             1,
	"SENSOR_STATUS_UNAVAILABLE":    2,
	"SENSOR_STATUS_NONOPERATIONAL": 3,
}

func (x SensorStatus) String() string {
	return proto.EnumName(SensorStatus_name, int32(x))
}

func (SensorStatus) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{8}
}

type Uuid struct {
	Uuid                 string   `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Uuid) Reset()         { *m = Uuid{} }
func (m *Uuid) String() string { return proto.CompactTextString(m) }
func (*Uuid) ProtoMessage()    {}
func (*Uuid) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{0}
}

func (m *Uuid) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Uuid.Unmarshal(m, b)
}
func (m *Uuid) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Uuid.Marshal(b, m, deterministic)
}
func (m *Uuid) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Uuid.Merge(m, src)
}
func (m *Uuid) XXX_Size() int {
	return xxx_messageInfo_Uuid.Size(m)
}
func (m *Uuid) XXX_DiscardUnknown() {
	xxx_messageInfo_Uuid.DiscardUnknown(m)
}

var xxx_messageInfo_Uuid proto.InternalMessageInfo

func (m *Uuid) GetUuid() string {
	if m != nil {
		return m.Uuid
	}
	return ""
}

type HardwareID struct {
	Uuid                 *Uuid    `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HardwareID) Reset()         { *m = HardwareID{} }
func (m *HardwareID) String() string { return proto.CompactTextString(m) }
func (*HardwareID) ProtoMessage()    {}
func (*HardwareID) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{1}
}

func (m *HardwareID) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HardwareID.Unmarshal(m, b)
}
func (m *HardwareID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HardwareID.Marshal(b, m, deterministic)
}
func (m *HardwareID) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HardwareID.Merge(m, src)
}
func (m *HardwareID) XXX_Size() int {
	return xxx_messageInfo_HardwareID.Size(m)
}
func (m *HardwareID) XXX_DiscardUnknown() {
	xxx_messageInfo_HardwareID.DiscardUnknown(m)
}

var xxx_messageInfo_HardwareID proto.InternalMessageInfo

func (m *HardwareID) GetUuid() *Uuid {
	if m != nil {
		return m.Uuid
	}
	return nil
}

type Uri struct {
	Uri                  string   `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Uri) Reset()         { *m = Uri{} }
func (m *Uri) String() string { return proto.CompactTextString(m) }
func (*Uri) ProtoMessage()    {}
func (*Uri) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{2}
}

func (m *Uri) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Uri.Unmarshal(m, b)
}
func (m *Uri) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Uri.Marshal(b, m, deterministic)
}
func (m *Uri) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Uri.Merge(m, src)
}
func (m *Uri) XXX_Size() int {
	return xxx_messageInfo_Uri.Size(m)
}
func (m *Uri) XXX_DiscardUnknown() {
	xxx_messageInfo_Uri.DiscardUnknown(m)
}

var xxx_messageInfo_Uri proto.InternalMessageInfo

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

type ComponentState struct {
	StateLastChanged     *timestamp.Timestamp  `protobuf:"bytes,1,opt,name=state_last_changed,json=stateLastChanged,proto3" json:"state_last_changed,omitempty"`
	AdminState           ComponentAdminState   `protobuf:"varint,2,opt,name=admin_state,json=adminState,proto3,enum=dmi.ComponentAdminState" json:"admin_state,omitempty"`
	OperState            ComponentOperState    `protobuf:"varint,3,opt,name=oper_state,json=operState,proto3,enum=dmi.ComponentOperState" json:"oper_state,omitempty"`
	UsageState           ComponentUsageState   `protobuf:"varint,4,opt,name=usage_state,json=usageState,proto3,enum=dmi.ComponentUsageState" json:"usage_state,omitempty"`
	AlarmState           ComponentAlarmState   `protobuf:"varint,5,opt,name=alarm_state,json=alarmState,proto3,enum=dmi.ComponentAlarmState" json:"alarm_state,omitempty"`
	StandbyState         ComponentStandbyState `protobuf:"varint,6,opt,name=standby_state,json=standbyState,proto3,enum=dmi.ComponentStandbyState" json:"standby_state,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *ComponentState) Reset()         { *m = ComponentState{} }
func (m *ComponentState) String() string { return proto.CompactTextString(m) }
func (*ComponentState) ProtoMessage()    {}
func (*ComponentState) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{3}
}

func (m *ComponentState) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ComponentState.Unmarshal(m, b)
}
func (m *ComponentState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ComponentState.Marshal(b, m, deterministic)
}
func (m *ComponentState) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ComponentState.Merge(m, src)
}
func (m *ComponentState) XXX_Size() int {
	return xxx_messageInfo_ComponentState.Size(m)
}
func (m *ComponentState) XXX_DiscardUnknown() {
	xxx_messageInfo_ComponentState.DiscardUnknown(m)
}

var xxx_messageInfo_ComponentState proto.InternalMessageInfo

func (m *ComponentState) GetStateLastChanged() *timestamp.Timestamp {
	if m != nil {
		return m.StateLastChanged
	}
	return nil
}

func (m *ComponentState) GetAdminState() ComponentAdminState {
	if m != nil {
		return m.AdminState
	}
	return ComponentAdminState_COMP_ADMIN_STATE_UNDEFINED
}

func (m *ComponentState) GetOperState() ComponentOperState {
	if m != nil {
		return m.OperState
	}
	return ComponentOperState_COMP_OPER_STATE_UNDEFINED
}

func (m *ComponentState) GetUsageState() ComponentUsageState {
	if m != nil {
		return m.UsageState
	}
	return ComponentUsageState_COMP_USAGE_STATE_UNDEFINED
}

func (m *ComponentState) GetAlarmState() ComponentAlarmState {
	if m != nil {
		return m.AlarmState
	}
	return ComponentAlarmState_COMP_ALARM_STATE_UNDEFINED
}

func (m *ComponentState) GetStandbyState() ComponentStandbyState {
	if m != nil {
		return m.StandbyState
	}
	return ComponentStandbyState_COMP_STANDBY_STATE_UNDEFINED
}

type ComponentSensorData struct {
	Value           int32                `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
	Type            SensorValueType      `protobuf:"varint,2,opt,name=type,proto3,enum=dmi.SensorValueType" json:"type,omitempty"`
	Scale           SensorValueScale     `protobuf:"varint,3,opt,name=scale,proto3,enum=dmi.SensorValueScale" json:"scale,omitempty"`
	Precision       int32                `protobuf:"varint,4,opt,name=precision,proto3" json:"precision,omitempty"`
	Status          SensorStatus         `protobuf:"varint,5,opt,name=status,proto3,enum=dmi.SensorStatus" json:"status,omitempty"`
	UnitsDisplay    string               `protobuf:"bytes,6,opt,name=units_display,json=unitsDisplay,proto3" json:"units_display,omitempty"`
	Timestamp       *timestamp.Timestamp `protobuf:"bytes,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	ValueUpdateRate uint32               `protobuf:"varint,8,opt,name=value_update_rate,json=valueUpdateRate,proto3" json:"value_update_rate,omitempty"`
	// data_type can be of the string representation of MetricNames or something else as well
	DataType             string   `protobuf:"bytes,9,opt,name=data_type,json=dataType,proto3" json:"data_type,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ComponentSensorData) Reset()         { *m = ComponentSensorData{} }
func (m *ComponentSensorData) String() string { return proto.CompactTextString(m) }
func (*ComponentSensorData) ProtoMessage()    {}
func (*ComponentSensorData) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{4}
}

func (m *ComponentSensorData) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ComponentSensorData.Unmarshal(m, b)
}
func (m *ComponentSensorData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ComponentSensorData.Marshal(b, m, deterministic)
}
func (m *ComponentSensorData) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ComponentSensorData.Merge(m, src)
}
func (m *ComponentSensorData) XXX_Size() int {
	return xxx_messageInfo_ComponentSensorData.Size(m)
}
func (m *ComponentSensorData) XXX_DiscardUnknown() {
	xxx_messageInfo_ComponentSensorData.DiscardUnknown(m)
}

var xxx_messageInfo_ComponentSensorData proto.InternalMessageInfo

func (m *ComponentSensorData) GetValue() int32 {
	if m != nil {
		return m.Value
	}
	return 0
}

func (m *ComponentSensorData) GetType() SensorValueType {
	if m != nil {
		return m.Type
	}
	return SensorValueType_SENSOR_VALUE_TYPE_UNDEFINED
}

func (m *ComponentSensorData) GetScale() SensorValueScale {
	if m != nil {
		return m.Scale
	}
	return SensorValueScale_SENSOR_VALUE_SCALE_UNDEFINED
}

func (m *ComponentSensorData) GetPrecision() int32 {
	if m != nil {
		return m.Precision
	}
	return 0
}

func (m *ComponentSensorData) GetStatus() SensorStatus {
	if m != nil {
		return m.Status
	}
	return SensorStatus_SENSOR_STATUS_UNDEFINED
}

func (m *ComponentSensorData) GetUnitsDisplay() string {
	if m != nil {
		return m.UnitsDisplay
	}
	return ""
}

func (m *ComponentSensorData) GetTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.Timestamp
	}
	return nil
}

func (m *ComponentSensorData) GetValueUpdateRate() uint32 {
	if m != nil {
		return m.ValueUpdateRate
	}
	return 0
}

func (m *ComponentSensorData) GetDataType() string {
	if m != nil {
		return m.DataType
	}
	return ""
}

type Component struct {
	// The name of a component uniquely identifies an component within the Hardware
	Name        string        `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Class       ComponentType `protobuf:"varint,2,opt,name=class,proto3,enum=dmi.ComponentType" json:"class,omitempty"`
	Description string        `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
	// The name of the parent of this component, empty "" in case of the root component
	Parent       string               `protobuf:"bytes,4,opt,name=parent,proto3" json:"parent,omitempty"`
	ParentRelPos int32                `protobuf:"varint,5,opt,name=parent_rel_pos,json=parentRelPos,proto3" json:"parent_rel_pos,omitempty"`
	Children     []*Component         `protobuf:"bytes,6,rep,name=children,proto3" json:"children,omitempty"`
	HardwareRev  string               `protobuf:"bytes,7,opt,name=hardware_rev,json=hardwareRev,proto3" json:"hardware_rev,omitempty"`
	FirmwareRev  string               `protobuf:"bytes,8,opt,name=firmware_rev,json=firmwareRev,proto3" json:"firmware_rev,omitempty"`
	SoftwareRev  string               `protobuf:"bytes,9,opt,name=software_rev,json=softwareRev,proto3" json:"software_rev,omitempty"`
	SerialNum    string               `protobuf:"bytes,10,opt,name=serial_num,json=serialNum,proto3" json:"serial_num,omitempty"`
	MfgName      string               `protobuf:"bytes,11,opt,name=mfg_name,json=mfgName,proto3" json:"mfg_name,omitempty"`
	ModelName    string               `protobuf:"bytes,12,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	Alias        string               `protobuf:"bytes,13,opt,name=alias,proto3" json:"alias,omitempty"`
	AssetId      string               `protobuf:"bytes,14,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
	IsFru        bool                 `protobuf:"varint,15,opt,name=is_fru,json=isFru,proto3" json:"is_fru,omitempty"`
	MfgDate      *timestamp.Timestamp `protobuf:"bytes,16,opt,name=mfg_date,json=mfgDate,proto3" json:"mfg_date,omitempty"`
	Uri          *Uri                 `protobuf:"bytes,17,opt,name=uri,proto3" json:"uri,omitempty"`
	// The uuid of the component uniquely identifies the component across the entire system
	Uuid                 *Uuid                  `protobuf:"bytes,18,opt,name=uuid,proto3" json:"uuid,omitempty"`
	State                *ComponentState        `protobuf:"bytes,19,opt,name=state,proto3" json:"state,omitempty"`
	SensorData           []*ComponentSensorData `protobuf:"bytes,20,rep,name=sensor_data,json=sensorData,proto3" json:"sensor_data,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *Component) Reset()         { *m = Component{} }
func (m *Component) String() string { return proto.CompactTextString(m) }
func (*Component) ProtoMessage()    {}
func (*Component) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{5}
}

func (m *Component) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Component.Unmarshal(m, b)
}
func (m *Component) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Component.Marshal(b, m, deterministic)
}
func (m *Component) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Component.Merge(m, src)
}
func (m *Component) XXX_Size() int {
	return xxx_messageInfo_Component.Size(m)
}
func (m *Component) XXX_DiscardUnknown() {
	xxx_messageInfo_Component.DiscardUnknown(m)
}

var xxx_messageInfo_Component proto.InternalMessageInfo

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

func (m *Component) GetClass() ComponentType {
	if m != nil {
		return m.Class
	}
	return ComponentType_COMPONENT_TYPE_UNDEFINED
}

func (m *Component) GetDescription() string {
	if m != nil {
		return m.Description
	}
	return ""
}

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

func (m *Component) GetParentRelPos() int32 {
	if m != nil {
		return m.ParentRelPos
	}
	return 0
}

func (m *Component) GetChildren() []*Component {
	if m != nil {
		return m.Children
	}
	return nil
}

func (m *Component) GetHardwareRev() string {
	if m != nil {
		return m.HardwareRev
	}
	return ""
}

func (m *Component) GetFirmwareRev() string {
	if m != nil {
		return m.FirmwareRev
	}
	return ""
}

func (m *Component) GetSoftwareRev() string {
	if m != nil {
		return m.SoftwareRev
	}
	return ""
}

func (m *Component) GetSerialNum() string {
	if m != nil {
		return m.SerialNum
	}
	return ""
}

func (m *Component) GetMfgName() string {
	if m != nil {
		return m.MfgName
	}
	return ""
}

func (m *Component) GetModelName() string {
	if m != nil {
		return m.ModelName
	}
	return ""
}

func (m *Component) GetAlias() string {
	if m != nil {
		return m.Alias
	}
	return ""
}

func (m *Component) GetAssetId() string {
	if m != nil {
		return m.AssetId
	}
	return ""
}

func (m *Component) GetIsFru() bool {
	if m != nil {
		return m.IsFru
	}
	return false
}

func (m *Component) GetMfgDate() *timestamp.Timestamp {
	if m != nil {
		return m.MfgDate
	}
	return nil
}

func (m *Component) GetUri() *Uri {
	if m != nil {
		return m.Uri
	}
	return nil
}

func (m *Component) GetUuid() *Uuid {
	if m != nil {
		return m.Uuid
	}
	return nil
}

func (m *Component) GetState() *ComponentState {
	if m != nil {
		return m.State
	}
	return nil
}

func (m *Component) GetSensorData() []*ComponentSensorData {
	if m != nil {
		return m.SensorData
	}
	return nil
}

type Hardware struct {
	LastChange *timestamp.Timestamp `protobuf:"bytes,1,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"`
	// Each HW has one parent/root and all other components are children of this
	// The class of the root component would be set as UNDEFINED
	Root                 *Component `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *Hardware) Reset()         { *m = Hardware{} }
func (m *Hardware) String() string { return proto.CompactTextString(m) }
func (*Hardware) ProtoMessage()    {}
func (*Hardware) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{6}
}

func (m *Hardware) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Hardware.Unmarshal(m, b)
}
func (m *Hardware) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Hardware.Marshal(b, m, deterministic)
}
func (m *Hardware) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Hardware.Merge(m, src)
}
func (m *Hardware) XXX_Size() int {
	return xxx_messageInfo_Hardware.Size(m)
}
func (m *Hardware) XXX_DiscardUnknown() {
	xxx_messageInfo_Hardware.DiscardUnknown(m)
}

var xxx_messageInfo_Hardware proto.InternalMessageInfo

func (m *Hardware) GetLastChange() *timestamp.Timestamp {
	if m != nil {
		return m.LastChange
	}
	return nil
}

func (m *Hardware) GetRoot() *Component {
	if m != nil {
		return m.Root
	}
	return nil
}

// The attributes of a component which are modifiable from the client side
type ModifiableComponent struct {
	// The name has to be unique for each component within the hardware and implementations need to
	// ascertain this when modifying the name
	Name                 string              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Class                ComponentType       `protobuf:"varint,2,opt,name=class,proto3,enum=dmi.ComponentType" json:"class,omitempty"`
	Parent               *Component          `protobuf:"bytes,3,opt,name=parent,proto3" json:"parent,omitempty"`
	ParentRelPos         int32               `protobuf:"varint,4,opt,name=parent_rel_pos,json=parentRelPos,proto3" json:"parent_rel_pos,omitempty"`
	Alias                string              `protobuf:"bytes,5,opt,name=alias,proto3" json:"alias,omitempty"`
	AssetId              string              `protobuf:"bytes,6,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
	Uri                  *Uri                `protobuf:"bytes,7,opt,name=uri,proto3" json:"uri,omitempty"`
	AdminState           ComponentAdminState `protobuf:"varint,8,opt,name=admin_state,json=adminState,proto3,enum=dmi.ComponentAdminState" json:"admin_state,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *ModifiableComponent) Reset()         { *m = ModifiableComponent{} }
func (m *ModifiableComponent) String() string { return proto.CompactTextString(m) }
func (*ModifiableComponent) ProtoMessage()    {}
func (*ModifiableComponent) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{7}
}

func (m *ModifiableComponent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ModifiableComponent.Unmarshal(m, b)
}
func (m *ModifiableComponent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ModifiableComponent.Marshal(b, m, deterministic)
}
func (m *ModifiableComponent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ModifiableComponent.Merge(m, src)
}
func (m *ModifiableComponent) XXX_Size() int {
	return xxx_messageInfo_ModifiableComponent.Size(m)
}
func (m *ModifiableComponent) XXX_DiscardUnknown() {
	xxx_messageInfo_ModifiableComponent.DiscardUnknown(m)
}

var xxx_messageInfo_ModifiableComponent proto.InternalMessageInfo

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

func (m *ModifiableComponent) GetClass() ComponentType {
	if m != nil {
		return m.Class
	}
	return ComponentType_COMPONENT_TYPE_UNDEFINED
}

func (m *ModifiableComponent) GetParent() *Component {
	if m != nil {
		return m.Parent
	}
	return nil
}

func (m *ModifiableComponent) GetParentRelPos() int32 {
	if m != nil {
		return m.ParentRelPos
	}
	return 0
}

func (m *ModifiableComponent) GetAlias() string {
	if m != nil {
		return m.Alias
	}
	return ""
}

func (m *ModifiableComponent) GetAssetId() string {
	if m != nil {
		return m.AssetId
	}
	return ""
}

func (m *ModifiableComponent) GetUri() *Uri {
	if m != nil {
		return m.Uri
	}
	return nil
}

func (m *ModifiableComponent) GetAdminState() ComponentAdminState {
	if m != nil {
		return m.AdminState
	}
	return ComponentAdminState_COMP_ADMIN_STATE_UNDEFINED
}

func init() {
	proto.RegisterEnum("dmi.ComponentType", ComponentType_name, ComponentType_value)
	proto.RegisterEnum("dmi.ComponentAdminState", ComponentAdminState_name, ComponentAdminState_value)
	proto.RegisterEnum("dmi.ComponentOperState", ComponentOperState_name, ComponentOperState_value)
	proto.RegisterEnum("dmi.ComponentUsageState", ComponentUsageState_name, ComponentUsageState_value)
	proto.RegisterEnum("dmi.ComponentAlarmState", ComponentAlarmState_name, ComponentAlarmState_value)
	proto.RegisterEnum("dmi.ComponentStandbyState", ComponentStandbyState_name, ComponentStandbyState_value)
	proto.RegisterEnum("dmi.SensorValueType", SensorValueType_name, SensorValueType_value)
	proto.RegisterEnum("dmi.SensorValueScale", SensorValueScale_name, SensorValueScale_value)
	proto.RegisterEnum("dmi.SensorStatus", SensorStatus_name, SensorStatus_value)
	proto.RegisterType((*Uuid)(nil), "dmi.Uuid")
	proto.RegisterType((*HardwareID)(nil), "dmi.HardwareID")
	proto.RegisterType((*Uri)(nil), "dmi.Uri")
	proto.RegisterType((*ComponentState)(nil), "dmi.ComponentState")
	proto.RegisterType((*ComponentSensorData)(nil), "dmi.ComponentSensorData")
	proto.RegisterType((*Component)(nil), "dmi.Component")
	proto.RegisterType((*Hardware)(nil), "dmi.Hardware")
	proto.RegisterType((*ModifiableComponent)(nil), "dmi.ModifiableComponent")
}

func init() { proto.RegisterFile("dmi/hw.proto", fileDescriptor_d7c33d745c4ab367) }

var fileDescriptor_d7c33d745c4ab367 = []byte{
	// 1737 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x97, 0x4f, 0x6f, 0xe3, 0xc6,
	0x15, 0xc0, 0x2b, 0xeb, 0x8f, 0xa5, 0x27, 0xd9, 0x3b, 0x3b, 0xf6, 0xae, 0xb5, 0xde, 0x75, 0xe2,
	0xb8, 0x41, 0xe1, 0x28, 0x88, 0x0d, 0x6c, 0xd0, 0xa2, 0x41, 0x0e, 0xc5, 0x98, 0x9a, 0xb5, 0x59,
	0x53, 0xa4, 0x30, 0x1c, 0x79, 0xeb, 0xbd, 0x10, 0xb4, 0x48, 0xdb, 0x44, 0x45, 0x51, 0x20, 0x29,
	0x07, 0x7b, 0x2d, 0x7a, 0xee, 0x77, 0xe8, 0xa5, 0x48, 0xcf, 0x2d, 0xd0, 0x4b, 0xbf, 0x55, 0xbf,
	0x40, 0x31, 0x43, 0x52, 0x7f, 0x47, 0x9b, 0x1c, 0x72, 0x1b, 0xbd, 0xdf, 0x7b, 0x33, 0x6f, 0xde,
	0x3f, 0x8e, 0xa0, 0xe5, 0x85, 0xc1, 0xf9, 0xe3, 0x0f, 0x67, 0x93, 0x38, 0x4a, 0x23, 0x5c, 0xf6,
	0xc2, 0xe0, 0xf0, 0xf3, 0x87, 0x28, 0x7a, 0x18, 0xf9, 0xe7, 0x52, 0x74, 0x37, 0xbd, 0x3f, 0x4f,
	0x83, 0xd0, 0x4f, 0x52, 0x37, 0x9c, 0x64, 0x5a, 0x27, 0x87, 0x50, 0x19, 0x4c, 0x03, 0x0f, 0x63,
	0xa8, 0x4c, 0xa7, 0x81, 0xd7, 0x2e, 0x1d, 0x97, 0x4e, 0x1b, 0x4c, 0xae, 0x4f, 0xbe, 0x06, 0xb8,
	0x72, 0x63, 0xef, 0x07, 0x37, 0xf6, 0xf5, 0x2e, 0x3e, 0x5a, 0xd0, 0x68, 0xbe, 0x6d, 0x9c, 0x79,
	0x61, 0x70, 0x26, 0x4c, 0x73, 0xe5, 0x03, 0x28, 0x0f, 0xe2, 0x00, 0x23, 0x28, 0x4f, 0xe3, 0x20,
	0xdf, 0x46, 0x2c, 0x4f, 0xfe, 0x5a, 0x86, 0x5d, 0x2d, 0x0a, 0x27, 0xd1, 0xd8, 0x1f, 0xa7, 0x76,
	0xea, 0xa6, 0x3e, 0xbe, 0x02, 0x9c, 0x88, 0x85, 0x33, 0x72, 0x93, 0xd4, 0x19, 0x3e, 0xba, 0xe3,
	0x07, 0xbf, 0xd8, 0xf8, 0xf0, 0x2c, 0x73, 0xf9, 0xac, 0x70, 0xf9, 0x8c, 0x17, 0x2e, 0x33, 0x24,
	0xad, 0x0c, 0x37, 0x49, 0xb5, 0xcc, 0x06, 0x7f, 0x07, 0x4d, 0xd7, 0x0b, 0x83, 0xb1, 0x23, 0x49,
	0x7b, 0xeb, 0xb8, 0x74, 0xba, 0xfb, 0xb6, 0x2d, 0x7d, 0x9b, 0x9d, 0x49, 0x84, 0x82, 0x3c, 0x98,
	0x81, 0x3b, 0x5b, 0xe3, 0xdf, 0x01, 0x44, 0x13, 0x3f, 0xce, 0x2d, 0xcb, 0xd2, 0xf2, 0x60, 0xd9,
	0xd2, 0x9a, 0xf8, 0x71, 0x66, 0xd8, 0x88, 0x8a, 0xa5, 0x38, 0x72, 0x9a, 0xb8, 0x0f, 0x7e, 0x6e,
	0x58, 0x51, 0x1d, 0x39, 0x10, 0x0a, 0xf9, 0x91, 0xd3, 0xd9, 0x5a, 0x7a, 0x3b, 0x72, 0xe3, 0x30,
	0x37, 0xad, 0x2a, 0xbd, 0x15, 0x0a, 0x85, 0xb7, 0xb3, 0x35, 0xfe, 0x03, 0xec, 0x24, 0xa9, 0x3b,
	0xf6, 0xee, 0x3e, 0xe6, 0xc6, 0x35, 0x69, 0x7c, 0xb8, 0x6c, 0x6c, 0x67, 0x2a, 0x99, 0x79, 0x2b,
	0x59, 0xf8, 0x75, 0xf2, 0xbf, 0x2d, 0xd8, 0x9b, 0xeb, 0xf9, 0xe3, 0x24, 0x8a, 0xbb, 0x6e, 0xea,
	0xe2, 0x7d, 0xa8, 0x3e, 0xb9, 0xa3, 0xa9, 0x2f, 0xc3, 0x5f, 0x65, 0xd9, 0x0f, 0x7c, 0x0a, 0x95,
	0xf4, 0xe3, 0xa4, 0x08, 0xe8, 0xbe, 0x3c, 0x25, 0x33, 0xba, 0x11, 0x9c, 0x7f, 0x9c, 0xf8, 0x4c,
	0x6a, 0xe0, 0xaf, 0xa1, 0x9a, 0x0c, 0xdd, 0x51, 0x11, 0xc1, 0x17, 0xab, 0xaa, 0xb6, 0x80, 0x2c,
	0xd3, 0xc1, 0x6f, 0xa0, 0x31, 0x89, 0xfd, 0x61, 0x90, 0x04, 0xd1, 0x58, 0x46, 0xae, 0xca, 0xe6,
	0x02, 0xfc, 0x15, 0xd4, 0xc4, 0xdd, 0xa6, 0x49, 0x1e, 0x99, 0xe7, 0x0b, 0x7b, 0xd9, 0x12, 0xb0,
	0x5c, 0x01, 0xff, 0x1a, 0x76, 0xa6, 0xe3, 0x20, 0x4d, 0x1c, 0x2f, 0x48, 0x26, 0x23, 0xf7, 0xa3,
	0x0c, 0x47, 0x83, 0xb5, 0xa4, 0xb0, 0x9b, 0xc9, 0xf0, 0xef, 0xa1, 0x31, 0x2b, 0xf7, 0xf6, 0xf6,
	0x4f, 0x56, 0xd7, 0x5c, 0x19, 0x77, 0xe0, 0xb9, 0x8c, 0x83, 0x33, 0x9d, 0x78, 0xa2, 0x4e, 0x63,
	0x11, 0xf1, 0xfa, 0x71, 0xe9, 0x74, 0x87, 0x3d, 0x93, 0x60, 0x20, 0xe5, 0x4c, 0x64, 0xe6, 0x35,
	0x34, 0x3c, 0x37, 0x75, 0x1d, 0x19, 0xaf, 0x86, 0x74, 0xa3, 0x2e, 0x04, 0x22, 0x46, 0x27, 0xff,
	0xa9, 0x42, 0x63, 0x16, 0x75, 0xd1, 0x64, 0x63, 0x37, 0xf4, 0x8b, 0x26, 0x13, 0x6b, 0x7c, 0x0a,
	0xd5, 0xe1, 0xc8, 0x4d, 0x92, 0x3c, 0xd4, 0x78, 0x39, 0xa1, 0x32, 0xd0, 0x99, 0x02, 0x3e, 0x86,
	0xa6, 0xe7, 0x27, 0xc3, 0x38, 0x98, 0xa4, 0x22, 0x7c, 0x65, 0xb9, 0xc9, 0xa2, 0x08, 0xbf, 0x84,
	0xda, 0xc4, 0x8d, 0xfd, 0x71, 0x2a, 0x63, 0xdb, 0x60, 0xf9, 0x2f, 0xfc, 0x25, 0xec, 0x66, 0x2b,
	0x27, 0xf6, 0x47, 0xce, 0x24, 0xca, 0x02, 0x5c, 0x65, 0xad, 0x4c, 0xca, 0xfc, 0x51, 0x3f, 0x4a,
	0x70, 0x07, 0xea, 0xc3, 0xc7, 0x60, 0xe4, 0xc5, 0xfe, 0xb8, 0x5d, 0x3b, 0x2e, 0x9f, 0x36, 0xdf,
	0xee, 0x2e, 0x3b, 0xc3, 0x66, 0x1c, 0x7f, 0x01, 0xad, 0xc7, 0x7c, 0x34, 0x38, 0xb1, 0xff, 0x24,
	0xa3, 0xdb, 0x60, 0xcd, 0x42, 0xc6, 0xfc, 0x27, 0xa1, 0x72, 0x1f, 0xc4, 0xe1, 0x4c, 0xa5, 0x9e,
	0xa9, 0x14, 0xb2, 0x5c, 0x25, 0x89, 0xee, 0xd3, 0x99, 0x4a, 0x16, 0xbd, 0x66, 0x21, 0x13, 0x2a,
	0x47, 0x00, 0x89, 0x1f, 0x07, 0xee, 0xc8, 0x19, 0x4f, 0xc3, 0x36, 0x48, 0x85, 0x46, 0x26, 0x31,
	0xa7, 0x21, 0x7e, 0x05, 0xf5, 0xf0, 0xfe, 0xc1, 0x91, 0x51, 0x6d, 0x4a, 0xb8, 0x1d, 0xde, 0x3f,
	0x98, 0x22, 0xb0, 0x47, 0x00, 0x61, 0xe4, 0xf9, 0xa3, 0x0c, 0xb6, 0x32, 0x4b, 0x29, 0x91, 0x78,
	0x1f, 0xaa, 0xee, 0x28, 0x70, 0x93, 0xf6, 0x8e, 0x24, 0xd9, 0x0f, 0xb1, 0x9f, 0x9b, 0x24, 0x7e,
	0xea, 0x04, 0x5e, 0x7b, 0x37, 0xdb, 0x4f, 0xfe, 0xd6, 0x3d, 0xfc, 0x02, 0x6a, 0x41, 0xe2, 0xdc,
	0xc7, 0xd3, 0xf6, 0xb3, 0xe3, 0xd2, 0x69, 0x9d, 0x55, 0x83, 0xe4, 0x5d, 0x3c, 0xc5, 0xbf, 0xcd,
	0x3c, 0x10, 0xe5, 0xd0, 0x46, 0x3f, 0x59, 0x63, 0xc2, 0xbb, 0xae, 0xa8, 0x9a, 0xc3, 0x6c, 0x4e,
	0x3e, 0x97, 0x16, 0xf5, 0x6c, 0x98, 0xc6, 0x81, 0x9c, 0x98, 0xb3, 0x49, 0x8b, 0x95, 0x93, 0x16,
	0x7f, 0x05, 0xd5, 0x6c, 0x04, 0xec, 0x49, 0xbe, 0xb7, 0x36, 0x02, 0x52, 0xd1, 0x6f, 0xc5, 0xc0,
	0x49, 0x64, 0xfb, 0x08, 0xff, 0xdc, 0xf6, 0xbe, 0xcc, 0xea, 0xca, 0xc0, 0x99, 0xcf, 0x02, 0x06,
	0xc9, 0x6c, 0x7d, 0xf2, 0x67, 0xa8, 0x17, 0xc3, 0x1f, 0x7f, 0x0f, 0xcd, 0x85, 0x49, 0xfd, 0x33,
	0x06, 0x35, 0x8c, 0x66, 0x33, 0x1a, 0x9f, 0x40, 0x25, 0x8e, 0xa2, 0x54, 0xd6, 0xf7, 0x7a, 0x49,
	0x49, 0x76, 0xf2, 0xcf, 0x2d, 0xd8, 0xeb, 0x45, 0x5e, 0x70, 0x1f, 0xb8, 0x77, 0x23, 0xff, 0x97,
	0x6a, 0x98, 0xdf, 0xcc, 0xda, 0xa1, 0xac, 0x3c, 0x7b, 0x73, 0x7b, 0x54, 0x14, 0xed, 0x31, 0x2b,
	0x98, 0xea, 0xa6, 0x82, 0xa9, 0x2d, 0x17, 0x4c, 0x9e, 0xe2, 0x6d, 0x55, 0x8a, 0x57, 0xbe, 0x5b,
	0xf5, 0x9f, 0xff, 0xdd, 0xea, 0xfc, 0xbb, 0x0c, 0x3b, 0x4b, 0xd7, 0xc5, 0x6f, 0xa0, 0xad, 0x59,
	0xbd, 0xbe, 0x65, 0x52, 0x93, 0x3b, 0xfc, 0xb6, 0x4f, 0x9d, 0x81, 0xd9, 0xa5, 0xef, 0x74, 0x93,
	0x76, 0xd1, 0xaf, 0xf0, 0x21, 0xbc, 0x5c, 0xa3, 0xd7, 0xa6, 0xf5, 0xde, 0x44, 0x25, 0x05, 0xd3,
	0xae, 0x88, 0x6d, 0xeb, 0x36, 0xda, 0x52, 0xec, 0x7a, 0x41, 0xb4, 0xeb, 0xbe, 0x41, 0x4c, 0x8a,
	0xca, 0x0a, 0xaa, 0x59, 0x26, 0x27, 0xba, 0x49, 0x19, 0xaa, 0xe0, 0xcf, 0xe1, 0xf5, 0x0a, 0xed,
	0x5b, 0xef, 0x29, 0x73, 0xec, 0x41, 0xbf, 0x6f, 0xdc, 0xa2, 0x2a, 0x7e, 0x09, 0x78, 0x45, 0xe1,
	0x1d, 0x31, 0x51, 0x0d, 0xbf, 0x82, 0x17, 0x2b, 0x72, 0x9b, 0x9a, 0xb6, 0xc5, 0xd0, 0xb6, 0x02,
	0xf5, 0xac, 0xee, 0xc0, 0xa0, 0xa8, 0x8e, 0x0f, 0x60, 0x6f, 0xed, 0x38, 0xc6, 0x51, 0x43, 0x71,
	0x8c, 0xd6, 0x1f, 0x20, 0x50, 0xdc, 0xfb, 0x82, 0x70, 0x4e, 0xd9, 0x2d, 0x6a, 0x2a, 0x98, 0xcd,
	0x2d, 0x46, 0x2e, 0x29, 0x6a, 0xa9, 0x7c, 0xa0, 0x3d, 0x8b, 0xdd, 0xa2, 0x1d, 0xfc, 0x19, 0x1c,
	0xae, 0x20, 0xce, 0x88, 0x69, 0x6b, 0x54, 0xbf, 0xa1, 0x0c, 0xed, 0x76, 0xfe, 0x55, 0x5a, 0xf8,
	0xfe, 0xce, 0x53, 0x5b, 0xd8, 0x39, 0xa4, 0xdb, 0xd3, 0x4d, 0xc7, 0xe6, 0x84, 0x2f, 0xa7, 0x2f,
	0x0f, 0xf4, 0x0a, 0x2f, 0x12, 0xf8, 0x1a, 0x0e, 0xd6, 0xa8, 0x61, 0x69, 0xd7, 0xb4, 0x8b, 0xb6,
	0xf0, 0x09, 0x7c, 0xb6, 0x06, 0xed, 0xab, 0x01, 0xe7, 0xba, 0x79, 0xe9, 0x74, 0xc5, 0x06, 0x65,
	0x7c, 0x04, 0xaf, 0x14, 0xdb, 0xe7, 0x5b, 0x54, 0x3a, 0x3f, 0x96, 0x00, 0xaf, 0x3f, 0x87, 0x66,
	0x56, 0x56, 0x5f, 0x24, 0x75, 0xcd, 0xe7, 0xc2, 0xab, 0x25, 0x5c, 0xb8, 0x5c, 0x5c, 0x68, 0x01,
	0x76, 0x75, 0x9b, 0x5c, 0x18, 0xd2, 0x67, 0x85, 0x29, 0x35, 0x33, 0x58, 0x56, 0x41, 0x4e, 0x6d,
	0x71, 0x1d, 0x54, 0xe9, 0xfc, 0x63, 0x31, 0xc0, 0xf3, 0x07, 0xd8, 0x2c, 0xc0, 0x03, 0x9b, 0x5c,
	0xd2, 0x4f, 0x04, 0x78, 0x99, 0x17, 0xde, 0xe6, 0x19, 0x5f, 0xa2, 0x7a, 0xd7, 0xa0, 0x0b, 0xae,
	0x2e, 0x22, 0xa2, 0x71, 0xfd, 0x46, 0xf4, 0x87, 0xca, 0xee, 0x62, 0x60, 0xdf, 0xa2, 0x4a, 0xe7,
	0x6f, 0x8b, 0x2f, 0xb1, 0xf9, 0x73, 0x6f, 0x5e, 0x09, 0x06, 0x61, 0xbd, 0x4f, 0x55, 0xc2, 0x12,
	0x2f, 0x1c, 0xfd, 0x02, 0x8e, 0x94, 0xd6, 0xcc, 0x61, 0xb4, 0x4f, 0x74, 0x86, 0xb6, 0xe6, 0xb9,
	0x5e, 0x50, 0xd1, 0x98, 0xce, 0x75, 0x8d, 0x18, 0xa8, 0x5c, 0x14, 0xfe, 0x12, 0xee, 0x91, 0x3f,
	0x5a, 0xa2, 0xa1, 0x95, 0x4c, 0x37, 0x2d, 0x86, 0xaa, 0x4a, 0xbf, 0xde, 0x13, 0x66, 0x8a, 0xb4,
	0xd4, 0x94, 0x7e, 0xe9, 0x26, 0xa7, 0xac, 0x47, 0xbb, 0x3a, 0xe1, 0x14, 0x6d, 0x77, 0xfe, 0x5b,
	0x82, 0x17, 0xca, 0x27, 0x2c, 0x3e, 0x86, 0x37, 0xd2, 0xd8, 0xe6, 0xc4, 0xec, 0x5e, 0xdc, 0x2a,
	0x82, 0x52, 0x04, 0x6d, 0x55, 0x63, 0x65, 0xc2, 0xad, 0xf0, 0x2b, 0x8b, 0x2f, 0x24, 0x70, 0x99,
	0x69, 0x96, 0x21, 0x6a, 0xed, 0x14, 0xbe, 0x54, 0xc0, 0x3e, 0xb3, 0x6e, 0xf4, 0xae, 0xe8, 0x1f,
	0x9b, 0xb2, 0x1b, 0x5d, 0xa3, 0xa8, 0xd2, 0xf9, 0x7b, 0x19, 0x9e, 0xad, 0xbc, 0x8d, 0xc5, 0x00,
	0xcc, 0x06, 0x97, 0x73, 0x43, 0x8c, 0x01, 0x5d, 0x9f, 0xca, 0xaf, 0xe1, 0x60, 0x5d, 0xc1, 0xe2,
	0x57, 0x94, 0xa1, 0x92, 0x48, 0x94, 0xca, 0x3a, 0xbb, 0xd3, 0x96, 0xb8, 0xf3, 0x3a, 0xbe, 0xb1,
	0x0c, 0x6e, 0x3b, 0x44, 0x43, 0xe5, 0x4f, 0xf1, 0xae, 0x86, 0x2a, 0xea, 0xed, 0x49, 0xaf, 0x4f,
	0x19, 0xb5, 0x51, 0x55, 0xed, 0xda, 0x7b, 0xc2, 0xb9, 0x8d, 0x6a, 0x6a, 0x78, 0x45, 0x19, 0xff,
	0x80, 0xb6, 0xd5, 0x1b, 0x6b, 0xd4, 0xb0, 0xf5, 0x81, 0x8d, 0xea, 0x22, 0x9b, 0xeb, 0xb8, 0x4f,
	0x99, 0x26, 0x46, 0x26, 0xbb, 0x42, 0x0d, 0xd1, 0x35, 0xeb, 0x1a, 0xac, 0xdf, 0x43, 0xa0, 0x46,
	0x5a, 0xaf, 0x87, 0x9a, 0xa2, 0xc4, 0xd6, 0x11, 0x67, 0x03, 0x7e, 0x95, 0x09, 0x50, 0xab, 0xf3,
	0x63, 0x05, 0xd0, 0xea, 0x9f, 0x92, 0x35, 0x7f, 0x6c, 0x8d, 0x18, 0x6b, 0x2d, 0xa7, 0xd0, 0xb8,
	0xb5, 0x34, 0x6e, 0x65, 0x93, 0x4c, 0x41, 0x3f, 0xd0, 0x3e, 0xb7, 0xb2, 0xea, 0x52, 0x50, 0xc2,
	0xb9, 0x95, 0x7d, 0x3e, 0x15, 0xf0, 0x1d, 0xed, 0x71, 0x0b, 0x55, 0x36, 0x98, 0xf6, 0x75, 0xcd,
	0x52, 0xa4, 0x27, 0x83, 0x26, 0x31, 0x2d, 0x54, 0xdb, 0xb0, 0x6f, 0x4f, 0xd7, 0x98, 0x85, 0xb6,
	0x37, 0x52, 0xc3, 0xd0, 0x51, 0x7d, 0x03, 0x1d, 0x98, 0x3a, 0xb7, 0x51, 0x63, 0xc3, 0xb1, 0xd7,
	0xba, 0x61, 0x21, 0xd8, 0x00, 0x7b, 0xf4, 0x92, 0xa0, 0xe6, 0x06, 0x78, 0xa9, 0x5f, 0x12, 0xd4,
	0xda, 0x00, 0x39, 0x65, 0x04, 0xed, 0x6c, 0x8a, 0x03, 0xe5, 0x04, 0xed, 0x8a, 0xce, 0x56, 0x40,
	0xfa, 0x27, 0x82, 0x9e, 0x6d, 0xcc, 0x0c, 0xe7, 0x04, 0xa1, 0x8d, 0x59, 0x15, 0xf4, 0x79, 0xe7,
	0x2f, 0x25, 0x68, 0x2d, 0xfe, 0xe7, 0x5c, 0xf0, 0x42, 0xcc, 0x80, 0x81, 0xbd, 0x54, 0x21, 0xfb,
	0x80, 0x96, 0xa1, 0x75, 0xbd, 0xd4, 0xc0, 0x33, 0x13, 0x72, 0x43, 0x74, 0x43, 0x7c, 0xc8, 0xd0,
	0xd6, 0x42, 0xe1, 0xe5, 0xd8, 0xb4, 0x4c, 0xf1, 0x4d, 0x23, 0x5c, 0xb7, 0x4c, 0x31, 0x8b, 0x2f,
	0xbe, 0xff, 0xf0, 0xdd, 0x43, 0x90, 0x3e, 0x4e, 0xef, 0xce, 0x86, 0x51, 0x78, 0x1e, 0x4d, 0xfc,
	0xf1, 0x30, 0x8a, 0xbd, 0x73, 0xcf, 0x7f, 0x0a, 0x86, 0xfe, 0x37, 0xa1, 0x3b, 0x76, 0x1f, 0xfc,
	0xd0, 0x1f, 0xa7, 0xdf, 0x04, 0xe3, 0xd4, 0x8f, 0xef, 0xdd, 0xa1, 0x7f, 0xfe, 0xf4, 0xed, 0xf9,
	0x43, 0x74, 0xee, 0x85, 0xc1, 0x5d, 0x4d, 0xbe, 0xc8, 0xbf, 0xfd, 0x7f, 0x00, 0x00, 0x00, 0xff,
	0xff, 0x33, 0x12, 0x36, 0x2c, 0x10, 0x12, 0x00, 0x00,
}
